diff options
Diffstat (limited to 'Master/xemtex/gslib/viewmiff.ps')
-rw-r--r-- | Master/xemtex/gslib/viewmiff.ps | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/Master/xemtex/gslib/viewmiff.ps b/Master/xemtex/gslib/viewmiff.ps new file mode 100644 index 00000000000..daf56ed458c --- /dev/null +++ b/Master/xemtex/gslib/viewmiff.ps @@ -0,0 +1,125 @@ +% Copyright (C) 1998 Aladdin Enterprises. All rights reserved. +% +% This program is free software; you can redistribute it and/or modify it +% under the terms of the GNU General Public License as published by the +% Free Software Foundation; either version 2 of the License, or (at your +% option) any later version. +% +% This program is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +% Public License for more details. +% +% You should have received a copy of the GNU General Public License along +% with this program; if not, write to the Free Software Foundation, Inc., +% 59 Temple Place, Suite 330, Boston, MA, 02111-1307. + +% $Id: viewmiff.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $ +% viewmiff.ps +% Display a MIFF file. You would think the 'display' command would do this, +% but many versions of 'display' either core-dump or require unacceptably +% large amounts of memory. + +% Recognize MIFF keywords. +/miffwords mark + /class { cvn /class exch def } + /colors { cvi /colors exch def } + /columns { cvi /Width exch def } + /compression { cvn /compression exch def } + /depth { cvi /depth exch def } + /packets { cvi /packets exch def } + /rows { cvi /Height exch def } +.dicttomark readonly def + +% Recognize MIFF image classes. +/miffclasses mark + /DirectClass { + /DeviceRGB setcolorspace + /BitsPerComponent depth def + /Decode [ 0 1 0 1 0 1 ] def + } + /PseudoClass { + [ /Indexed + % The MIFF documentation lies about the size of pixels + % for this case: the pixel size is determined only by + % the number of colors, and is not affected by the image + % depth. Specifically, if there are 256 or fewer colors + % but the depth (of color map entries) is 16, each pixel + % is still only 1 byte, not 2. + currentdict /colors known { + /DeviceRGB colors 1 sub + /BitsPerComponent colors 256 le { 8 } { 16 } ifelse def + colors 3 mul string depth 8 eq { + f exch readstring pop + } { + % 16-bit color map entries: take only the high-order byte. + 0 1 2 index length 1 sub { + f read pop 2 index 3 1 roll put f read pop pop + } for + } ifelse + } { + /colors 256 def + /DeviceGray 255 + 256 string 0 1 255 { 1 index exch dup put } for + } ifelse + ] setcolorspace + /Decode [ 0 1 BitsPerComponent bitshift 1 sub ] def + } +.dicttomark readonly def + +% Recognize MIFF compression methods. +/rlstring 768 string def +/rlread { + % packets is not reliable -- disregard it. + dup rlstring 0 3 getinterval readstring { + pop read pop 3 mul 3 3 2 index { + rlstring exch rlstring 0 3 getinterval putinterval + } for + rlstring 0 3 -1 roll 3 add getinterval + } { + pop pop () + } ifelse +} bind def +/miffcompress mark + /Uncompressed { f } + /RunLengthEncoded { { f rlread } } + /Zip { [ f /FlateDecode filter cvlit /rlread cvx ] cvx } +.dicttomark readonly def + +% Read a MIFF file and display the image. +/viewmiff { % <filename> viewmiff - + 50 dict begin + /fname 1 index def + /f exch (r) file def + % Set defaults. + /ImageType 1 def + /class /DirectClass def + /compression /Uncompressed def + /depth 8 def + /packets 16#7fffffff def + % Read and parse the header. + { f token pop + dup (:) eq { pop exit } if + dup type /nametype eq { + .namestring (=) search { + exch pop miffwords exch .knownget { exec } { pop } ifelse + } { + pop % who knows? + } ifelse + } { + pop % probably a comment in braces + } ifelse + } loop + % Read and display the image. + miffclasses class get exec + /DataSource miffcompress compression get exec def + /ImageMatrix [Width 0 0 Height neg 0 Height] def + currentpagedevice /PageSize get + dup 0 get exch 1 get scale + gsave 0.8 setgray 0 0 1 1 rectfill grestore % provide background + currentdict image + showpage + % Clean up. + f closefile + end +} bind def |