386BSD 0.1 development
authorWilliam F. Jolitz <wjolitz@soda.berkeley.edu>
Mon, 17 Feb 1992 00:19:18 +0000 (16:19 -0800)
committerWilliam F. Jolitz <wjolitz@soda.berkeley.edu>
Mon, 17 Feb 1992 00:19:18 +0000 (16:19 -0800)
Work on file usr/othersrc/public/ghostscript-2.4.1/ps2image.ps

Co-Authored-By: Lynne Greer Jolitz <ljolitz@cardio.ucsf.edu>
Synthesized-from: 386BSD-0.1

usr/othersrc/public/ghostscript-2.4.1/ps2image.ps [new file with mode: 0644]

diff --git a/usr/othersrc/public/ghostscript-2.4.1/ps2image.ps b/usr/othersrc/public/ghostscript-2.4.1/ps2image.ps
new file mode 100644 (file)
index 0000000..c7b2eff
--- /dev/null
@@ -0,0 +1,124 @@
+%    Copyright (C) 1990, 1991 Aladdin Enterprises.  All rights reserved.
+%    Distributed by Free Software Foundation, Inc.
+%
+% This file is part of Ghostscript.
+%
+% Ghostscript is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
+% to anyone for the consequences of using it or for whether it serves any
+% particular purpose or works at all, unless he says so in writing.  Refer
+% to the Ghostscript General Public License for full details.
+%
+% Everyone is granted permission to copy, modify and redistribute
+% Ghostscript, but only under the conditions described in the Ghostscript
+% General Public License.  A copy of this license is supposed to have been
+% given to you along with Ghostscript so you can know your rights and
+% responsibilities.  It should be in a file named COPYING.  Among other
+% things, the copyright notice and this notice must be preserved on all
+% copies.
+
+% Convert a .ps file to another .ps file containing only a bit image.
+% Usage:
+%      (filename) ps2image
+% This replaces the current device, writing the output on the file
+% instead of to the device.  To display the image at a later time,
+% simply run the file that was written.
+
+% Initialize, and redefine copypage and showpage.
+/ps2idict 25 dict def
+ps2idict begin
+                               % Save the showpage operator
+  /realshowpage /showpage load def
+                               % Define a monochrome palette
+  /monopalette <00 ff> def
+                               % The main procedure
+  /ps2image
+   {                           % Open the file
+     (w) file /myfile exch def
+     myfile (/readimage ) writestring
+     myfile /readimage load write==only
+     myfile ( bind def\n) writestring
+                                       % Get the device parameters
+     currentdevice getdeviceprops dicttomark
+     dup /HWSize get aload pop
+       /devheight exch def
+       /devwidth exch def
+     /InitialMatrix get
+       /devmatrix exch def
+                               % Make a corresponding memory device
+     devmatrix devwidth devheight monopalette
+     makeimagedevice
+     /mydevice exch def
+     mydevice setdevice                % (does an erasepage)
+     /rowwidth devwidth 7 add 8 idiv def
+     /row rowwidth 7 add 8 idiv 8 mul string def       % pad for findcommon
+     /prevrow row length string def
+                               % Replace the definition of showpage
+     userdict /showpage { ps2idict begin myshowpage end } bind put
+   } def
+                               % Procedure for reading and displaying
+                               % the rendered image.
+                               % <width> <height> readimage
+  /readimage
+   { gsave matrix setmatrix
+     1 matrix
+     3 index 7 add 8 idiv string currentfile exch
+                               % At each iteration of the loop,
+                               % the stack contains <file> <buffer>
+      { 2 copy
+        1 index token pop      % starting index
+        2 index token pop      % count
+       getinterval
+        readhexstring pop pop dup }
+     3 1 roll
+     7 2 roll
+     image pop pop
+     grestore showpage
+   } def
+/findcommon            % prevrow row -> stopindex startindex
+ { 2 copy eq
+    { 0 0 }
+    { dup length
+       { 8 sub 2 copy 8 getinterval 3 index 2 index 8 getinterval
+         ne { 8 add exit } if
+       } loop
+       { 1 sub 2 copy get 3 index 2 index get
+         ne { 1 add exit } if
+       } loop
+      0
+       { 3 index 1 index 8 getinterval 3 index 2 index 8 getinterval
+         ne { exit } if
+        8 add
+       } loop
+       { 3 index 1 index get 3 index 2 index get
+         ne { exit } if
+        1 add
+       } loop
+    }
+   ifelse
+   4 2 roll pop pop
+ } bind def
+                               % Write the image on the file
+  /myshowpage
+   { myfile devwidth write==only   myfile ( ) writestring
+     myfile devheight write==only   myfile ( readimage\n) writestring
+     0 1 prevrow length 1 sub { prevrow exch 0 put } for
+                               % Write the hex data
+     0 1 devheight 1 sub
+      { mydevice exch row 0 rowwidth getinterval copyscanlines
+        prevrow row findcommon
+                               % stack now has stop index, start index
+       exch 1 index sub 2 copy exch    % start, length, length, start
+       myfile exch write==only   myfile ( ) writestring
+       myfile exch write==only   myfile ( ) writestring
+       getinterval myfile exch writehexstring
+       row prevrow copy pop
+       myfile (\n) writestring
+      } for
+     myfile flushfile
+     erasepage initgraphics
+   } bind def
+
+end
+
+/ps2image { ps2idict begin ps2image end } bind def