home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / PRINTING / GS23A.ZIP / PS2IMAGE.PS < prev    next >
Text File  |  1991-05-25  |  4KB  |  107 lines

  1. %    Copyright (C) 1990, 1991 Aladdin Enterprises.  All rights reserved.
  2. %    Distributed by Free Software Foundation, Inc.
  3. %
  4. % This file is part of Ghostscript.
  5. %
  6. % Ghostscript is distributed in the hope that it will be useful, but
  7. % WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
  8. % to anyone for the consequences of using it or for whether it serves any
  9. % particular purpose or works at all, unless he says so in writing.  Refer
  10. % to the Ghostscript General Public License for full details.
  11. %
  12. % Everyone is granted permission to copy, modify and redistribute
  13. % Ghostscript, but only under the conditions described in the Ghostscript
  14. % General Public License.  A copy of this license is supposed to have been
  15. % given to you along with Ghostscript so you can know your rights and
  16. % responsibilities.  It should be in a file named COPYING.  Among other
  17. % things, the copyright notice and this notice must be preserved on all
  18. % copies.
  19.  
  20. % Convert a .ps file to another .ps file containing only a bit image.
  21. % Usage:
  22. %    (filename) ps2image
  23. % This replaces the current device, writing the output on the file
  24. % instead of to the device.  To display the image at a later time,
  25. % simply run the file that was written.
  26.  
  27. % Initialize, and redefine copypage and showpage.
  28. /ps2idict 25 dict def
  29. ps2idict begin
  30.                 % Save the showpage operator
  31.   /realshowpage /showpage load def
  32.                 % Define a monochrome palette
  33.   /monopalette [ 0 0 0 rgbcolor 1 1 1 rgbcolor ] def
  34.                 % The main procedure
  35.   /ps2image
  36.    {                % Open the file
  37.      (w) file /myfile exch def
  38.      myfile (/readimage ) writestring
  39.      myfile /readimage load write==only
  40.      myfile ( bind def\n) writestring
  41.                     % Get the device parameters
  42.      currentdevice matrix deviceparams
  43.      /devheight exch def
  44.      /devwidth exch def
  45.      /devmatrix exch def
  46.      cleartomark
  47.                 % Make a corresponding memory device
  48.      devmatrix devwidth devheight monopalette
  49.      makeimagedevice
  50.      /mydevice exch def
  51.      mydevice setdevice        % (does an erasepage)
  52.      /row devwidth 7 add 8 idiv string def
  53.      /prevrow row length string def
  54.                 % Replace the definition of showpage
  55.      userdict /showpage { ps2idict begin myshowpage end } bind put
  56.    } def
  57.                 % Procedure for reading and displaying
  58.                 % the rendered image.
  59.                 % <width> <height> readimage
  60.   /readimage
  61.    { gsave matrix setmatrix
  62.      1 matrix
  63.      3 index 7 add 8 idiv string currentfile exch
  64.                      % At each iteration of the loop,
  65.                 % the stack contains <file> <buffer>
  66.       { 2 copy
  67.         1 index token pop    % starting index
  68.         2 index token pop    % count
  69.     getinterval
  70.         readhexstring pop pop dup }
  71.      3 1 roll
  72.      7 2 roll
  73.      image pop pop
  74.      grestore showpage
  75.    } def
  76.                 % Write the image on the file
  77.   /myshowpage
  78.    { myfile devwidth write==only   myfile ( ) writestring
  79.      myfile devheight write==only   myfile ( readimage\n) writestring
  80.      0 1 prevrow length 1 sub { prevrow exch 0 put } for
  81.                  % Write the hex data
  82.      0 1 devheight 1 sub
  83.       { mydevice exch row copyscanlines
  84.         0 row length 1 sub -1 0
  85.      { dup dup prevrow exch get exch row exch get
  86.        ne { 1 add exch pop exit } { pop } ifelse
  87.      } for
  88.     dup dup 0 exch 1 exch 1 sub
  89.      { dup dup prevrow exch get exch row exch get
  90.        ne { exch pop exit } { pop } ifelse
  91.      } for
  92.                    % stack now has stop index, start index
  93.     exch 1 index sub 2 copy exch    % start, length, length, start
  94.     myfile exch write==only   myfile ( ) writestring
  95.     myfile exch write==only   myfile ( ) writestring
  96.     getinterval myfile exch writehexstring
  97.     row prevrow copy pop
  98.     myfile (\n) writestring
  99.       } for
  100.      myfile flushfile
  101.      erasepage initgraphics
  102.    } bind def
  103.  
  104. end
  105.  
  106. /ps2image { ps2idict begin ps2image end } bind def
  107.