home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / hypertext / latex2html_1 / OtherStuff / pstogif < prev    next >
Text File  |  1996-01-12  |  4KB  |  165 lines

  1. #!/usr/local/bin/perl
  2. # pstogif.pl v1.0, July 1994, by Nikos Drakos <nikos@cbl.leeds.ac.uk>
  3. # Computer Based Learning Unit, University of Leeds.
  4. #
  5. # Accompanies LaTeX2HTML Version 95
  6. #
  7. # Script to convert an arbitrary PostScript image to a cropped GIF image
  8. # suitable for incorporation into HTML documents as inlined images to be
  9. # viewed with WWW browsers.
  10. #
  11. # This is based on the pstoepsi script 
  12. # by Doug Crabill dgc@cs.purdue.edu
  13. #
  14. # Please note the following:
  15. # - The source PostScript file must end
  16. #   in a .ps extention.  This is a GhostScript requirement, not mine...
  17. # - The -density argument has no effect unless the 
  18. #   color depth (set with the -depth argument) is equal to 1.
  19. # - Valid arguments for -depth are 1,8, or 24.
  20. #  
  21. # This software is provided as is without any guarantee.
  22. #
  23. # Nikos Drakos (ND), nikos@cbl.leeds.ac.uk
  24. # Computer Based Learning Unit, University of Leeds.
  25. #
  26. # 20 JUL 94 ND Converted to Perl and made several changes eg it now accepts 
  27. #    parameters from environment variables or from command line or will use 
  28. #    default ones. 
  29. #      
  30. # 1  APR 94 ND Changed the suffixes of multi-page files from xbm to gif (oops!)
  31. #
  32.  
  33. #####################################################################
  34. $| =1;
  35. &read_args;
  36.  
  37. ### You may need to specify some pathnames here if you want to
  38. ### run the script without LaTeX2HTML
  39.  
  40. # Ghostscript
  41. $GS= $ENV{'GS'} || 'gs';
  42.  
  43. # Comes with LaTeX2HTML (For ghostscript versions greater than 3.0 
  44. # you need the newer pstoppm.ps)
  45. $PSTOPPM= $ENV{'PSTOPPM'} ||
  46.     'pstoppm.ps';
  47.  
  48. # Available in the PBMPLUS libary       
  49. $PNMCROP=$ENV{'PNMCROP'} || 'pnmcrop' ;
  50.  
  51. # Also in PBMPPLUS      
  52. $PPMTOGIF=$ENV{'PPMTOGIF'} || 'ppmtogif' ;
  53.  
  54. # Also in PBMPPLUS      
  55. $REDUCE_COLOR=$ENV{'PPMQUANT'} || 'ppmquant 256' ;
  56.  
  57. $OUTFILE = $ENV{'OUTFILE'} || $out;
  58.             
  59. # Valid choices for $COLOR_DEPTH are 1, 8 or 24. 
  60. $DEPTH = $ENV{'DEPTH'} || $depth || 24;
  61.  
  62. #Default density is 72
  63. $DENSITY = $ENV{'DENSITY'} || $density || 72;
  64.     
  65. # Valid choices are any numbers greater than zero
  66. # Useful choices are numbers between 0.1 - 5
  67. # Large numbers may generate very large intermediate files
  68. # and will take longer to process
  69. $SCALE = $ENV{'SCALE'} || $scale; # No default value
  70.  
  71. $PAPERSIZE = $ENV{'PAPERSIZE'} || $papersize; # No default value;
  72.  
  73. $DEBUG = $ENV{'DEBUG'} || $DEBUG || 0;
  74.  
  75. ######################################################################
  76.  
  77. &main;
  78.  
  79. sub read_args {
  80.     local($_);
  81.     while ($ARGV[0] =~ /^-/) {
  82.     $_ = shift @ARGV;
  83.     if (/^-h(elp)?$/) {
  84.         &usage; exit}
  85.         elsif (/^-out$/) {
  86.             $out = shift @ARGV;
  87.     }
  88.     elsif (/^-(.*)$/) {
  89.         eval "\$$1 = shift \@ARGV;" # Create and set a flag $<name>
  90.         }
  91.     }
  92. }         
  93.  
  94. sub main {
  95.     local($base, $outfile, $i, $j);
  96.     $base = &test_args;
  97.     $outfile = $OUTFILE || "$base.gif";
  98.     open(STDERR, ">/dev/null") unless $DEBUG;
  99.     &convert($base);
  100.     if (-f "$base.ppm") {
  101.     &crop_scale_etc("$base.ppm", $outfile);
  102.     }
  103.     else {
  104.     foreach $i (<$base.[1-9]*ppm>) {
  105.     $j = $i; 
  106.     $j =~ s/\.(.*)ppm/$1.gif/;
  107.     &crop_scale_etc($i, $j)}
  108.     }                
  109.     &cleanup($base);
  110. }
  111.  
  112. sub crop_scale_etc {
  113.     local($in, $out) = @_;
  114.     open(STDERR, ">/dev/null") unless $DEBUG;
  115.     system("$PNMCROP $in |$REDUCE_COLOR |$PPMTOGIF  - > $out");
  116.     print "Writing $out\n";
  117. }
  118.  
  119. sub test_args {
  120.     local($file) = $ARGV[0];
  121.     if (! ($file =~ s/\.ps$//)) {
  122.     print "The name of the input file must end in '.ps'\n";
  123.     exit}
  124.     elsif (! ( -f "$file.ps")) {
  125.     print "Cannot find file $file.ps\n.";
  126.     exit}
  127.     elsif (! ($DEPTH =~ /^(1|8|24)$/)) {
  128.     print "The color depth must be 1 or 8 or 24. You specified $DEPTH\n";
  129.     exit            
  130.     }
  131.     if (defined $SCALE) {
  132.     if ($SCALE > 0) {
  133.         $DENSITY = int($SCALE * 72)}
  134.     else {
  135.         print "Error: The scale must be greater than 0.\n" .
  136.         "You specified $SCALE\n";
  137.         exit}
  138.     }
  139.     $file;
  140. }
  141.    
  142. sub convert {
  143.     local($base) = @_;
  144.     local($paperopt) = "-sPAPERSIZE=$PAPERSIZE" if $PAPERSIZE;
  145.     local($ppmtype) = join('', "ppm",$DEPTH,"run");
  146.     open (GS, "|$GS -q $paperopt -dNODISPLAY $PSTOPPM -");
  147.     print GS "$DENSITY $DENSITY ppmsetdensity\n";
  148.     print GS "ppmsetsize2$PAPERSIZE % thanks to wsineric\@win.tue.nl (Eric Verbeek)\n" if $PAPERSIZE;
  149.     print GS "($base) $ppmtype\n";
  150.     close GS;
  151. }
  152.  
  153. sub cleanup {
  154.     local($base) = @_;
  155.     unlink <$base[0-9.]*ppm>;
  156. }
  157.  
  158. sub usage {
  159.     print "Usage: pstogif [-h(elp)] [-out <output file>] [-depth <color depth 1, 8 or 24>]  [-density <pixel density>] <file>.ps\n\n";
  160. }
  161.  
  162.  
  163.