diff options
Diffstat (limited to 'Master/xemtex/gslib/viewgif.ps')
-rw-r--r-- | Master/xemtex/gslib/viewgif.ps | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/Master/xemtex/gslib/viewgif.ps b/Master/xemtex/gslib/viewgif.ps new file mode 100644 index 00000000000..a03bff0aa00 --- /dev/null +++ b/Master/xemtex/gslib/viewgif.ps @@ -0,0 +1,161 @@ +% Copyright (C) 1989, 1992, 1993, 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: viewgif.ps,v 1.2.6.1.2.1 2003/04/12 14:02:39 giles Exp $ +% viewgif.ps +% Display a GIF file. + +/read1 % <file> read1 <int> + { read pop + } bind def +/read2 % <file> read2 <int> + { dup read1 exch read1 8 bitshift add + } bind def + +/readGIFheader % <file> readGIFheader <dict> + { 20 dict begin + dup 6 string readstring pop + dup (GIF87a) eq exch (GIF89a) eq or not + { (Not a GIF file.\n) print cleartomark stop + } if + dup read2 /Width exch def + dup read2 /Height exch def + dup read1 + dup 128 ge /GlobalColor exch def + dup -4 bitshift 7 and 1 add /BitsPerPixel exch def %***BOGUS?*** + dup 8 and 0 ne /PaletteSorted exch def + 7 and 1 add dup /BitsPerPixel exch def + 1 exch bitshift /PaletteSize exch def + dup read1 /BackgroundIndex exch def + dup read1 15 add 64 div /AspectRatio exch def + GlobalColor + { PaletteSize 3 mul string readstring pop + /GlobalPalette exch def + } if + currentdict end + } bind def + +/readGIFimageHeader % <file> readGIFimageHeader <dict> + % Note: GIF header must be on dict stack + { 10 dict begin + { dup read1 + dup (!) 0 get ne { exit } if pop % extension + dup read1 pop + { dup read1 dup 0 eq { pop exit } if { dup read1 pop } repeat + } loop + } loop + (,) 0 get ne + { (Not a GIF image.\n) print stop + } if + dup read2 /Left exch def + dup read2 /Top exch def + dup read2 /Width exch def + dup read2 /Height exch def + dup read1 + dup 128 ge /LocalColor exch def + dup 64 and 0 ne /Interlaced exch def + LocalColor + { 7 and 1 add /BitsPerPixel exch def + 1 BitsPerPixel bitshift 3 mul string readstring pop + /Palette exch def + } + { pop pop /Palette GlobalPalette def + } + ifelse + currentdict end + } bind def + +/imageGIF % <imagedict> imageGIF + { /ImageOut where + { pop + % We know BitsPerComponent = 8, Decode = [0 255]. + % and there is only a single data source which is + % either a filter or a string whose size is exactly + % the width of the row. + dup /DataSource get dup type /stringtype eq + { ImageOut exch writestring + } + { pop dup /Width get string + 1 index /Height get + { 1 index /DataSource get 1 index readstring pop + ImageOut exch writestring + } + repeat pop pop + } + ifelse + } + { image + } + ifelse + } bind def + +/viewGIF % <file|string> viewGIF - + { save 20 dict begin + /saved exch def + dup type /stringtype eq { (r) file } if + /F exch def + /ImageOutFile where { /ImageOut ImageOutFile (w) file def } if + F readGIFheader /Header exch def + currentdict Header end begin begin + DEBUG { Header { exch == == } forall (----------------\n) print flush } if + F readGIFimageHeader /ImageHeader exch def + currentdict ImageHeader end begin begin + DEBUG { ImageHeader { exch == == } forall (----------------\n) print flush } if + /D F + << /InitialCodeLength F read1 + /FirstBitLowOrder true + /BlockData true + /EarlyChange 0 + >> /LZWDecode filter def + + [/Indexed /DeviceRGB 1 BitsPerPixel bitshift 1 sub Palette] setcolorspace + matrix currentmatrix + 0 1 3 { 2 copy get dup 0 ne { dup abs div } if 3 copy put pop pop } for + setmatrix + << /ImageType 1 + /ImageMatrix [1 0 0 -1 0 Height] + /BitsPerComponent 8 + /Decode [0 255] + Interlaced + { /Width Width /Height 1 + /row Width string def + /DataSource row + >> /I exch def + /inter % <num> <denom> inter - + { /denom exch def /num exch def + gsave + /lines Height denom 1 sub add num sub denom idiv def + 0 1 lines 1 sub { + Height exch denom mul num add sub + I /ImageMatrix get 5 3 -1 roll put + D row readstring pop pop + I imageGIF + } for + grestore + } + bind def + 0 8 inter + 4 8 inter + 2 4 inter + 1 2 inter + } + { /Width Width /Height Height + /DataSource D + >> imageGIF + } + ifelse + saved end end end restore + } bind def |