diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 16:53:33 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 16:53:33 +0300 |
commit | e463eb40363ff4c68b1d903f4e0cdd0ac1c5977f (patch) | |
tree | d5e9f57c28f026cb21de3bd77cc10cd7f64aaa85 /sys/lib/ghostscript/viewmiff.ps | |
parent | b41b9034225ab3e49980d9de55c141011b6383b0 (diff) |
Import sources from 2011-03-30 iso image - sys/lib
Diffstat (limited to 'sys/lib/ghostscript/viewmiff.ps')
-rwxr-xr-x | sys/lib/ghostscript/viewmiff.ps | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/sys/lib/ghostscript/viewmiff.ps b/sys/lib/ghostscript/viewmiff.ps new file mode 100755 index 000000000..d3e5e9087 --- /dev/null +++ b/sys/lib/ghostscript/viewmiff.ps @@ -0,0 +1,124 @@ +% Copyright (C) 1998 Aladdin Enterprises. All rights reserved. +% +% This software is provided AS-IS with no warranty, either express or +% implied. +% +% This software is distributed under license and may not be copied, +% modified or distributed except as expressly authorized under the terms +% of the license contained in the file LICENSE in this distribution. +% +% For more information about licensing, please refer to +% http://www.ghostscript.com/licensing/. For information on +% commercial licensing, go to http://www.artifex.com/licensing/ or +% contact Artifex Software, Inc., 101 Lucas Valley Road #110, +% San Rafael, CA 94903, U.S.A., +1(415)492-9861. + +% $Id: viewmiff.ps,v 1.4 2002/02/21 21:49:28 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 |