home *** CD-ROM | disk | FTP | other *** search
- %! PS-Adobe-2.0
- %% Program for reading a .ps file and writing out a PPM file.
- %% For Ghostscript 2.5.2.
- %%
- %% Modified by L. Peter Deutsch 9/10/92:
- %% internal procedures didn't use `bind';
- %% grestoreall undid selection of PPM device.
- %% Modified by L. Peter Deutsch 4/6/92:
- %% Ghostscript 2.4 requires all 8 primary colors to be in the palette.
- %% Modified by L. Peter Deutsch 1/17/92:
- %% the palette for makeimagedevice is now a string, not an array.
- %% Modified by L. Peter Deutsch 9/24/91:
- %% allow starting page number to be specified.
- %% Modified by L. Peter Deutsch 7/7/91 to keep track of page count
- %% in a way that gets around save and restore.
- %% Modified by L. Peter Deutsch 11/07/90
- %% to use filename.ppm for the first page, renamed to filename.1ppm
- %% with subsequent pages .2ppm, etc. if more than one page.
- %% Modified by Henry Minsky 11/03/90
- %% for each showpage, it writes out a ppm file with name filename.ppm.N
- %% where N increments each showpage, starting at 1
- %% Modified by L. Peter Deutsch -- Aladdin Enterprises -- 08/25/90 --
- %% converted from a one-shot program to a utility package,
- %% designed to be used from an interactive terminal.
- %% Modified by L. Peter Deutsch -- Aladdin Enterprises -- 08/02/90
- %% Modified on 08/02/90 for using the CORRECT color map.
- %% Modified 06/26/90 for a color file
- %% Original version by Phillip Conrad - Perfect Byte, Inc.
- %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- %%%%%% Define the directory for holding the PPM information
-
- /ppmdict 30 dict def
- ppmdict begin
-
- /Horz_dpi 72 def % defaults to screen density
- /Vert_dpi 72 def
-
- /OutFilePrefix () def % default to null (current directory)
-
- /FirstPageNumber 1 def % any non-negative integer is OK
-
- /Palette1 <ff 00> def
- /Palette8
- %========== Here we define all 256 color entries. ======
- %========== Colors were taken from the X Windows default colors, ======
- %========== hacked up a little so we get all 8 primaries. ======
- <
- 000000 ffffff a8a8a8 ebebeb 5c5c5c 373737 5f929e 85ccdd
- 345057 1f3034 729efe a0ddff 3f578c 263454 6186d8 2f2f64
- ffff00 b0e2ff ff0000 808080 efdf84 55fe55 fe0000 66fe57
- fe987a feca71 fefefe fe8d7c fea977 fec472 feb875 fe937b
- fe957a feb575 98fe5d fe8b7d fea677 feb276 feaf76 febe74
- fe837e fefc6a fe0c9a fe0350 fe08b5 6715fe fefb3f fe544b
- 00c000 20c000 40c000 60c000 80c000 a0c000 c0c000 e0c000
- 00ff00 20e000 40e000 60e000 80e000 a0e000 c0e000 e0e000
- 000040 200040 400040 600040 800040 a00040 c00040 e00040
- 002040 202040 402040 602040 802040 a02040 c02040 e02040
- 004040 204040 404040 604040 804040 a04040 c04040 e04040
- 006040 206040 406040 606040 806040 a06040 c06040 e06040
- 008040 208040 408040 608040 808040 a08040 c08040 e08040
- 00a040 20a040 40a040 60a040 80a040 a0a040 c0a040 e0a040
- 00c040 20c040 40c040 60c040 80c040 a0c040 c0c040 e0c040
- 00e040 20e040 40e040 60e040 80e040 a0e040 c0e040 e0e040
- 000080 200080 400080 600080 800080 a00080 c00080 e00080
- 002080 202080 402080 602080 802080 a02080 c02080 e02080
- 004080 204080 404080 604080 804080 a04080 c04080 e04080
- 006080 206080 406080 606080 806080 a06080 c06080 e06080
- 008080 208080 408080 608080 808080 a08080 c08080 e08080
- 00a080 20a080 40a080 60a080 80a080 a0a080 c0a080 e0a080
- 00c080 20c080 40c080 60c080 80c080 a0c080 c0c080 e0c080
- 00e080 20e080 40e080 60e080 80e080 a0e080 c0e080 e0e080
- 0000ff 2000c0 4000c0 6000c0 8000c0 a000c0 c000c0 ff00ff
- 0020c0 2020c0 4020c0 6020c0 8020c0 a020c0 c020c0 e020c0
- 0040c0 2040c0 4040c0 6040c0 8040c0 a040c0 c040c0 e040c0
- 0060c0 2060c0 4060c0 6060c0 8060c0 a060c0 c060c0 e060c0
- 0080c0 2080c0 4080c0 6080c0 8080c0 a080c0 c080c0 e080c0
- 00a0c0 20a0c0 40a0c0 60a0c0 80a0c0 a0a0c0 c0a0c0 e0a0c0
- 00c0c0 20c0c0 40c0c0 60c0c0 80c0c0 a0c0c0 c0c0c0 e0c0c0
- 00ffff 20e0c0 40e0c0 60e0c0 80e0c0 a0e0c0 c0e0c0 e0e0c0
- > def
-
- % Define a procedure for computing the output file name for a given page.
- /pagefilename % <int|null> pagefilename -> <string
- { OutFilePrefix FileName concatstrings (.) concatstrings
- exch dup null ne
- { 1 sub FirstPageNumber add (xxxxxx) cvs concatstrings }
- { pop }
- ifelse (ppm) concatstrings
- } bind def
-
- % Redefine copypage and showpage appropriately.
- /copypage
- { ppmdict begin
-
- /PageCount PageCountString cvi 100000 sub def
- /PageCount PageCount 1 add def
-
- PageCount 1 eq
- { null pagefilename % first page
- }
- { PageCount 2 eq
- { % second page, rename first
- null pagefilename 1 pagefilename
- (Renaming ) print 1 index print ( to ) print
- dup print (\n) print
- flush
- renamefile
- } if
- PageCount pagefilename
- } ifelse
- /FileNameOut exch def
-
- FileNameOut (w) file
- /FileDescOut exch def
-
- (Writing ) print FileNameOut print (\n) print
- flush
- FileDescOut Device writeppmfile
- FileDescOut closefile
-
- WrotePage 0 1 put % /WrotePage true def
- PageCount 100000 add PageCountString cvs pop
-
- end
- } bind userdict begin odef end
- /showpage
- { copypage erasepage initgraphics
- } bind userdict begin odef end
-
- % Redefine grestoreall so it doesn't undo the device selection
- /grestoreall /grestoreall load def
- /grestoreall
- { ppmdict begin grestoreall Device setdevice end
- } bind userdict begin odef end
-
- /Convert % the main procedure
- % <filename> <palette> Convert -
- { /Palette exch def
- /FileName exch def
-
- % Save and restore don't save and restore the contents of strings.
- % Therefore, we use strings to hold the two variables whose values
- % must persist across page boundaries (PageCount and WrotePage).
-
- /PageCountString 6 string def
- 100000 PageCountString cvs pop
- /WrotePage 1 string def
-
- /ScaleX Horz_dpi 72 div def
- /ScaleY Vert_dpi 72 div def
-
- /Width 85 Horz_dpi mul 5 add 10 div cvi def % add 5 to round up!
- /Height 11 Vert_dpi mul def
-
- FileName (.ps) concatstrings
- /FileNameIn exch def % file name with extension
-
- [ScaleX 0.0 0.0 ScaleY neg 0.0 Height]
- Width Height Palette makeimagedevice
- /Device exch def
- Device setdevice
-
- % For running the file, remove ppmdict from the dict stack
- FileNameIn end run % ppmdict
- ppmdict begin
- WrotePage 0 get 0 eq { showpage } if % make sure the page got written
- end % ppmdict
-
- } bind def
-
- end % ppmdict
-
- %%%%%% Define the user-callable procedures
-
- /ppmsetdensity
- { ppmdict begin
- /Vert_dpi exch def
- /Horz_dpi exch def
- end
- } bind def
-
- /ppmsetprefix
- { ppmdict begin
- /OutFilePrefix exch def
- end
- } bind def
-
- /ppmsetfirstpagenumber
- { cvi
- ppmdict begin
- /FirstPageNumber exch def
- } bind def
-
- /ppm1run
- { ppmdict begin Palette1 Convert
- } bind def
-
- /ppm8run
- { ppmdict begin Palette8 Convert
- } bind def
-
- /ppm24run
- { ppmdict begin null Convert
- } bind def
-
- %%%%%% Display instructions for the user.
-
- (Usage: (file) ppmNrun\n) print
- ( converts file.ps to file.ppm (single page),\n) print
- ( or file.1ppm, file.2ppm, ... (multi page).\n) print
- ( N is # of bits per pixel (1, 8, or 24).\n) print
- (Examples: (golfer) ppm1run ..or.. (escher) ppm8run\n) print
- (Optional commands you can give first:\n) print
- ( horiz_DPI vert_DPI ppmsetdensity\n) print
- ( (dirname/) ppmsetprefix\n) print
- ( page_num ppmsetfirstpagenumber\n) print
- flush
-