The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

pconvert - convert file formats

SYNOPSIS

pconvert [-check] [-debug] [-gzip] [-isa type] [-option program=options] [-nono] [-out filename] [-overwrite] [-newer] [-multipage] [-remove] [-to type] [-verbose] [name ...]

DESCRIPTION

Pconvert determines the type of the files named on the command line and tries to convert them to a specified type (defaults to PostScript). It uses internal rules to find a set of commands which can do the task.

The file type is determined by file extensions. If the extension in not known or the -check option is given, the first bytes of the file are examined to infer a type. Files with extensions .gz or .Z are assumed to be compressed by gzip(1) or compress(1) respectively and handled transparently.

OPTIONS

All options may be abbreviated.Boolean options (all options without arguments) may be negated by prefixing them with no. For example use -nocheck to enable file extension checking if your sysadmin had set the default to -check. See Getopts::Long for details.

-check

Do not trust file extensions when determining the input file type.

-debug

Enables some debug output. Not very useful.

-gzip

Compress output with gzip.

-isa type

Overwrite recognized input type if any.

-option program=options

Pass options to the filter program program if used. This option may be repeated any number of times. The option parsing checks if program is a known filter. To learn about the valid filters, run pconvert without arguments.

-nono

Do nothing. Just print what would have been done without -nono.

-out filename

Pconvert normally writes the output to a new file with the same base name as the input file and the type appended as extension. This can be overwritten with the -out option. If filename is '-', pconvert writes to STDOUT.

-overwrite, -newer

Pconvert does not overwrite existing files unless -overwrite or -newer is given. -overwrite forces overwriting. -newer will overwrite only if source is newer.

-multipage

Write one file for each input page if gs is the last converter in the pipe. -multipage disables -gzip, and the overwrite check. So -overwrite and -newer do not have any effect.

-remove

If -remove is set, the original file is removed.

-to type

Use type as desired output type. You can get a list of valid output types when running pconvert without any arguments.

-verbose

Print commands before running them.

EXAMPLES

Here are some examples. Do not be worried about the absolute paths in the produced commands. Pconvert will search for the filters on your system. It may find another pipe, if some of the filters are missing on your system.

Converting image formats
  % pconvert -nono -to tiff ~www/pages/icons/LS6.gif
  chdir /home/robots/www/pages/icons/
  /bin/cat LS6.gif|
    /usr/local/image-tools/bin/giftopnm|
    /usr/local/image-tools/bin/pnmtotiff>LS6.tiff

If giftopnm is missing, the following plan is generated:

  % pconvert -nono -to tiff ~www/pages/icons/LS6.gif
  chdir /home/robots/www/pages/icons/
  /bin/cat LS6.gif|
    /usr/local/image-tools/bin/cjpeg|
    /usr/local/image-tools/bin/djpeg -pnm|
    /usr/local/image-tools/bin/pnmtotiff>LS6.tiff
Generating images from postscript
  % pconvert -nono -to gif pconvert.pod 
  /bin/cat pconvert.pod|
    (/bin/cat > pconvert.$$;/usr/local/ls6/perl/bin/pod2man \
           pconvert.$$;/bin/rm pconvert.$$)|
    /usr/local/groff-1.09/bin/groff -mandoc|
    /usr/local/X11R5/bin/gs -q -sDEVICE=pbmraw -sOutputFile=- -|
    /usr/local/image-tools/bin/ppmquant 256|
    /usr/local/image-tools/bin/ppmtogif>pconvert.gif
Generating postscript manpages
  % pconvert -nono pconvert.pod
  /bin/cat pconvert.pod|
    (/bin/cat > pconvert.$$;/usr/local/ls6/perl/bin/pod2man \
           pconvert.$$;/bin/rm pconvert.$$)|
    /usr/local/groff-1.09/bin/groff -mandoc>pconvert.ps
Building a tar archive from a directory
  % pconvert -nono -to TAR -gzip image
  /bin/find image -depth  -xdev -type f -print|
    /usr/local/ls6/unsupported/bin/sun4-sunos/gcpio -Htar -o|
    /usr/local/bin/gzip -c>image.tar.gz
Building a tar archive from a MANIFEST file
  % pconvert -nono -to TAR -gzip image/MANIFEST
  /bin/cat image/MANIFEST|
    /bin/awk '{printf "image/%s\n", $1}'|
    /usr/local/ls6/unsupported/bin/sun4-sunos/gcpio -Htar -o|
    /usr/local/bin/gzip -c>image.tar.gz

ENVIRONMENT

PATH is used in addition to build-in paths to search for programs.

SEE ALSO

Getopts::Long(3), awk(1), cjpeg(1), compress(1), djpeg(1), gcpio(1), giftopnm(1), gs(1), gzip(1), pbmtopgm(1), perl(1), pgmtopbm(1), pnmtops(1), pnmtotiff(1), ppmquant(1), ppmtogif(1), tar(1), tifftopnm(1).

EXTENSION

Extension should be pretty easy. Help safe the world:

  • Please mail your extension to the author.

New types

To add a new type, just append an entry to the %TYPE hash. Each entry should be a reference to an array containing:

  • o the name of the type,

  • o a regular expression which matches the extension, and

  • o optionally a regular expression which matches the start of the file.

Here is the definition of the GIF type:

    GIF  => ['\.gif',   '^GIF8[79]a'],

Add a conversion rule.

To add a new filter, just append a an array reference to @RULE. The array should contain the from and to type an the name of the filter program. Here are some examples:

     [GIF             => PPM,  'giftopnm'],
     [[PPM, PGM, PBM] => GIF,  ['ppmquant 256', 'ppmtogif']],
     [POD             => MAN,  
                  '(cat > %O.$$; pod2man %O.$$; rm %O.$$;)'],

The %O is replaced by the target name (i.e. the name of the output file).

AUTHOR

Ulrich Pfeifer <pfeifer@ls6.informatik.uni-dortmund.de>

!NO!SUBS!

close OUT or die "Can't close $file: $!"; chmod 0755, $file or die "Can't reset permissions for $file: $!\n"; exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';

2 POD Errors

The following errors were encountered while parsing the POD:

Around line 755:

'=item' outside of any '=over'

Around line 806:

You forgot a '=back' before '=head1'