rsalz@uunet.UU.NET (Rich Salz) (11/03/87)
Submitted-by: Crispin Goswell <caag@vd.rl.ac.uk> Posting-number: Volume 12, Issue 50 Archive-name: postscript/part01 This is a virtually complete implementation of PostScript. Just type make and it should produce a version for suns. Since the only complete driver is for suns and since some driver writing will be necessary on any other machine, I have not packaged everything up in an idiot-proof box. I am not aware of any Gotchas in building this source. The X driver used to work on X10 - It will need work for X11. The pixrect driver is very new, and should be regarded as didactic, as it scribbles straight onto the display. Persuading suntools to look after the bits would have taken too long. Writing your own driver involves merely hacking pixrect.c until it will drive your display. There are only 11 routines to write, and they're all quite short. Have fun! - Crispin Goswell caag@uk.ac.rl.vd (JANET) caag@vd.rl.ac.uk (Internet) ...!mcvax!ukc!rlvd!caag (UUCP) #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 18)." PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'INSTALLATION' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'INSTALLATION'\" else echo shar: Extracting \"'INSTALLATION'\" \(1880 characters\) sed "s/^X//" >'INSTALLATION' <<'END_OF_FILE' X XNote that is necessary to run a shell with job-control (e.g. csh) on Xthe sun3 version when using PS, because of process-group problems with Xsuntools. It is also difficult to alter the window shape when PS is Xdoing output on suns. If the postscript/viewer pair are used, these Xproblems are not encountered, but it runs more slowly. X XTo try it out, type the following: X $ POSTSCRIPTLIB=<where ever the postscript directory is>/postscript X $ export POSTSCRIPTLIB X $ PS -c 'A4 (demos/wow) lib run' X $ X XThe "showpage" operator expects a carriage return before it erases the Xpage and allows output to continue (or in this case for PS to Xterminate). More generally, use: X X $ PS -c A4 [ files .... ] X $ X XThe A4 command is shorthand for a framedevice command (see the Xpostscript reference manual) to create an A4 sized window. It is Xsupposed to be actual size, except on suns, where the screen is not big Xenough (!) X XIt also works on the perq, but much more slowly. X XIf PostScript is not to be fully installed, the environment variable XPOSTSCRIPTLIB may be set to the pathname of /usr/lib/postscript. XAlternatively, config.c has a variable called default_library[], which Xmay be changed to point somewhere else. X XThe tape contains: X XINSTALLATION which you are reading X Xsource - complete sources X Xpostscript - various files the interpreter needs to run. X /font - font descriptors X /fonts - font data X hershey fonts (yuk) all we have available at present, X however there are instructions on how to add fonts in X the file "adding-fonts". X /psrc - initialisation file ('rc' file). X /cache - disk cache of popular font sizes X /font-map - mapping from postscript names to names in font X /demos - demos programs other than those in the cookbook X Xdoc - documents of interest to people installing postscript, particularly X postscript.1 - manual entry for postscript END_OF_FILE if test 1880 -ne `wc -c <'INSTALLATION'`; then echo shar: \"'INSTALLATION'\" unpacked with wrong size! fi # end of 'INSTALLATION' fi if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(4640 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X File Name Archive # Description X----------------------------------------------------------- X INSTALLATION 1 X MANIFEST 1 X binaries 1 X binaries/pnx5 1 X binaries/pyramid 1 X binaries/sun2 1 X binaries/sun3 1 X binaries/vax 1 X doc 1 X doc/adding-fonts 1 X doc/byte-stream 2 X doc/hard-interface 5 X doc/hard-interface.c 7 X doc/postscript.1 3 X postscript 1 X postscript/demos 1 X postscript/demos/dashcorner 1 X postscript/demos/fishes 5 X postscript/demos/gks 1 X postscript/demos/grayscale 1 X postscript/demos/hughes 1 X postscript/demos/it 1 X postscript/demos/mooreform.ps 3 X postscript/demos/newscreen.ps 1 X postscript/demos/raygun2 18 X postscript/demos/rosette 1 X postscript/demos/tree.ps 1 X postscript/demos/wow 1 X postscript/demos/wow2 1 X postscript/demos/wow3 1 X postscript/font 1 X postscript/font-map 1 X postscript/font/Helvetica 1 X postscript/font/Helvetica-Ob 1 X postscript/font/Times-BI 1 X postscript/font/Times-Bold 1 X postscript/font/Times-Italic 1 X postscript/font/Times-Roman 1 X postscript/font/Times-Roman-Adobe 1 X postscript/font/proforma 1 X postscript/fonts 1 X postscript/fonts/Gothic 1 X postscript/fonts/Gothic/roman.r10 X postscript/fonts/Olde 1 X postscript/fonts/Olde/italic.r14 X postscript/fonts/Olde/roman.r16 X postscript/fonts/SANS 1 X postscript/fonts/SANS/italic.r13 X postscript/fonts/SANS/roman.r13 X postscript/fonts/Sans 1 X postscript/fonts/Sans/greek.r 3 X postscript/fonts/Sans/italic.r 7 X postscript/fonts/Sans/roman.r17 X postscript/fonts/TIMES 1 X postscript/fonts/TIMES/italic.r15 X postscript/fonts/TIMES/roman.r15 X postscript/fonts/Times 1 X postscript/fonts/Times/bits.r11 X postscript/fonts/Times/greek.r 6 X postscript/fonts/Times/italic 1 X postscript/fonts/Times/italic.a 5 X postscript/fonts/Times/italic.r 8 X postscript/fonts/Times/rest.r 4 X postscript/fonts/Times/roman 1 X postscript/fonts/Times/roman.a 5 X postscript/fonts/Times/roman.r 6 X postscript/fonts/Times/russian.r 9 X postscript/fonts/extra 1 X postscript/fonts/extra/extra.r11 X postscript/fonts/sans 1 X postscript/fonts/sans/greek.r 1 X postscript/fonts/sans/roman.r 3 X postscript/fonts/times 1 X postscript/fonts/times/greek.r 5 X postscript/fonts/times/italic.r 7 X postscript/fonts/times/roman.r16 X postscript/psrc 10 X postscript/widths 1 X postscript/widths/Adobe 1 X postscript/widths/Adobe/Times-Roman 3 X source 1 X source/README 1 X source/X.c 12 X source/adapter.c 4 X source/array.c 7 X source/boolean.c 2 X source/cache.c 12 X source/canon.c 1 X source/canon.h 1 X source/colour-ww.c 6 X source/colour.c 2 X source/colour.h 1 X source/config.c 2 X source/control.c 4 X source/copyright.h 1 X source/device.c 5 X source/device.h 1 X source/dictionary.c 10 X source/file.c 14 X source/fill.c 12 X source/font.c 13 X source/font.h 1 X source/graphics.h 1 X source/gsave.c 2 X source/hard-interface.c 8 X source/hard.h 1 X source/head 1 X source/head.ed 1 X source/image.c 9 X source/integer.c 6 X source/main.c 8 X source/main.h 2 X source/makefile 1 X source/malloc.c 1 X source/mat.c 2 X source/mat.h 1 X source/math.c 3 X source/matrix.c 8 X source/misc.c 1 X source/name.c 2 X source/null.c 1 X source/operator.c 6 X source/orion.c 4 X source/paint.c 3 X source/pat.c 10 X source/path.c 8 X source/path.h 1 X source/pixrect.c 3 X source/point.h 1 X source/poly.c 2 X source/property.c 2 X source/protocol.c 2 X source/protocol.h 1 X source/real.c 4 X source/rop.h 1 X source/save.c 1 X source/screen.c 2 X source/stack.c 4 X source/state.c 9 X source/str.h 1 X source/string.c 11 X source/stroke.c 9 X source/trapezoid.c 1 X source/unix.c 2 X source/viewer.c 7 X source/ww.c 4 END_OF_FILE if test 4640 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi if test ! -d 'binaries' ; then echo shar: Creating directory \"'binaries'\" mkdir 'binaries' fi if test ! -d 'binaries/pnx5' ; then echo shar: Creating directory \"'binaries/pnx5'\" mkdir 'binaries/pnx5' fi if test ! -d 'binaries/pyramid' ; then echo shar: Creating directory \"'binaries/pyramid'\" mkdir 'binaries/pyramid' fi if test ! -d 'binaries/sun2' ; then echo shar: Creating directory \"'binaries/sun2'\" mkdir 'binaries/sun2' fi if test ! -d 'binaries/sun3' ; then echo shar: Creating directory \"'binaries/sun3'\" mkdir 'binaries/sun3' fi if test ! -d 'binaries/vax' ; then echo shar: Creating directory \"'binaries/vax'\" mkdir 'binaries/vax' fi if test ! -d 'doc' ; then echo shar: Creating directory \"'doc'\" mkdir 'doc' fi if test -f 'doc/adding-fonts' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'doc/adding-fonts'\" else echo shar: Extracting \"'doc/adding-fonts'\" \(1849 characters\) sed "s/^X//" >'doc/adding-fonts' <<'END_OF_FILE' XFonts may be added to this postscript system by placing a piece of XPostScript source in the directory $POSTSCRIPTLIB/font. This is where Xpostscript looks when findfont is called. File names in this directory Xmay be mapped from font names by placing entries of the form: X FontMap /postscript-name /base-file-name. put Xin the font-map file in $POSTSCRIPTLIB. X XIf postscript-name is not found there, an identity mapping is assumed. X XThe existing fonts are similarly structured, so most of the work is Xdone by executing a common proforma file in that directory. This sets Xup the appropriate font information. A version of BuildChar is Xinstalled which will read in the bulk of the font infromation when it Xis first executed. It will then replace itself with the normal XBuildChar. X XNOTE the metrics are currently loaded with the rest of the font Xinformation on demand, so programs which attempt to read metric Xinfromation before using a font will fail. This is a bug, but can be Xfixed in PostScript. X XThere is a parallel cache directory, $POSTSCRIPTLIB/cache. This Xcontains a directory corresponding to each file in $POSTSCRIPT/font, Xinto which cached versions of fonts may be placed. The operator Xsavecurrentfont may be called after imaging some characters from a Xfont, whereupon a diskcache will be made of the characters imaged so Xfar. Caches loaded may be subsequently modified and saved, thus built Xincrementally. There should be an operator to save all modified caches Xinto the disk cache. This could be built into PostScript, but might Xcause problems. There is a program called buildcache in the demos Xdirectory which will build a cache of the standard fonts in a variety Xof useful sizes. X XPostScript searches the disk cache automatically, and will not call BuildChar if it find a cache. XThis version of the cache stores metrics for the font. X END_OF_FILE if test 1849 -ne `wc -c <'doc/adding-fonts'`; then echo shar: \"'doc/adding-fonts'\" unpacked with wrong size! fi # end of 'doc/adding-fonts' fi if test ! -d 'postscript' ; then echo shar: Creating directory \"'postscript'\" mkdir 'postscript' fi if test ! -d 'postscript/demos' ; then echo shar: Creating directory \"'postscript/demos'\" mkdir 'postscript/demos' fi if test -f 'postscript/demos/dashcorner' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/dashcorner'\" else echo shar: Extracting \"'postscript/demos/dashcorner'\" \(120 characters\) sed "s/^X//" >'postscript/demos/dashcorner' <<'END_OF_FILE' X[10 90] 5 setdash 30 setlinewidth Xnewpath 0 0 moveto 100 0 lineto 100 100 lineto 0 100 lineto closepath stroke Xshowpage END_OF_FILE if test 120 -ne `wc -c <'postscript/demos/dashcorner'`; then echo shar: \"'postscript/demos/dashcorner'\" unpacked with wrong size! fi # end of 'postscript/demos/dashcorner' fi if test -f 'postscript/demos/gks' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/gks'\" else echo shar: Extracting \"'postscript/demos/gks'\" \(629 characters\) sed "s/^X//" >'postscript/demos/gks' <<'END_OF_FILE' X%! Xsave X100 setflat X/Courier findfont 400 scalefont setfont X X300 0 translate 90 rotate X X/track { dup X 0 0 moveto false charpath 30 setlinewidth strokepath X 0 setgray 5 setlinewidth stroke X 0 0 moveto false charpath 30 setlinewidth strokepath X .3 setgray 2.5 setlinewidth stroke X} def X X6 array currentmatrix X X(G) track (G) stringwidth translate X(K) track (K) stringwidth translate X(S) track (S) stringwidth translate X Xsetmatrix X X/rude (Eat your heart out!) def X X/Times-Roman findfont 100 scalefont setfont X X.3 setgray X Xclippath pathbbox pop exch pop exch sub rude stringwidth pop sub 2 div -150 moveto rude show X Xshowpage Xrestore END_OF_FILE if test 629 -ne `wc -c <'postscript/demos/gks'`; then echo shar: \"'postscript/demos/gks'\" unpacked with wrong size! fi # end of 'postscript/demos/gks' fi if test -f 'postscript/demos/grayscale' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/grayscale'\" else echo shar: Extracting \"'postscript/demos/grayscale'\" \(255 characters\) sed "s/^X//" >'postscript/demos/grayscale' <<'END_OF_FILE' Xinitgraphics Xclippath pathbbox pop exch pop 2 copy exch sub /range exch def X/step range 50.0 div def X0 200 translate Xnewpath Xstep exch { X dup range div setgray X 0 0 moveto step 0 lineto step 100 lineto 0 100 lineto closepath X fill X step 0 translate X} for END_OF_FILE if test 255 -ne `wc -c <'postscript/demos/grayscale'`; then echo shar: \"'postscript/demos/grayscale'\" unpacked with wrong size! fi # end of 'postscript/demos/grayscale' fi if test -f 'postscript/demos/hughes' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/hughes'\" else echo shar: Extracting \"'postscript/demos/hughes'\" \(1300 characters\) sed "s/^X//" >'postscript/demos/hughes' <<'END_OF_FILE' X%! X70 9.3 72 mul translate X X/basic 18 def X X/large /Times-Roman findfont basic 2 mul scalefont def X/normal /Times-Roman findfont basic scalefont def X/italic /Times-Italic findfont basic scalefont def X X/down { 0 basic neg rmoveto } def X X/p { normal setfont show } def X/i { italic setfont show } def X/d { italic setfont 72 0 rmoveto (Death.) show } def X/n { currentpoint exch pop 0 exch moveto down } def X X0 0 moveto Xdown down down X X(Examination at the Womb-Door) large setfont show down n X X(Who owns these scrawny little feet?) p d n X(Who owns this bristly scorched-looking face?) p d n X(Who owns these still-working lungs?) p d n X(Who owns this utility coat of muscles?) p d n X(Who owns these unspeakable guts?) p d n X(Who owns these questionable brains?) p d n X(All this messy blood?) p d n X(These minimum-efficiency eyes?) p d n X(This wicked little tongue?) p d n X(This occasional wakefulness?) p d n X n X(Given, stolen or held pending trial?) p n X(Held.) i n X n X(Who owns the whole rainy, stony earth?) p d n X(Who owns all of space?) p d n Xn X(Who is stronger than hope?) p d n X(Who is stronger than the will?) p d n X(Stronger than love?) p d n X(Stronger than life?) p d n Xn X/but (But who is stronger than death?) def but p n Xbut stringwidth rmoveto (Me, evidently.) i n Xn X(Pass, Crow.) p n Xshowpage END_OF_FILE if test 1300 -ne `wc -c <'postscript/demos/hughes'`; then echo shar: \"'postscript/demos/hughes'\" unpacked with wrong size! fi # end of 'postscript/demos/hughes' fi if test -f 'postscript/demos/it' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/it'\" else echo shar: Extracting \"'postscript/demos/it'\" \(319 characters\) sed "s/^X//" >'postscript/demos/it' <<'END_OF_FILE' X%! X300 300 translate 0 setgray X12 { X 0 0 moveto 200 0 rlineto 0 200 rlineto -200 0 rlineto closepath X 25 25 moveto 0 150 rlineto 150 0 rlineto 0 -150 rlineto closepath X 125 100 moveto 100 100 25 0 360 arc closepath X gsave fill grestore X currentgray X 0 setgray stroke X 1 12 div add setgray X 30 rotate X} repeat Xshowpage END_OF_FILE if test 319 -ne `wc -c <'postscript/demos/it'`; then echo shar: \"'postscript/demos/it'\" unpacked with wrong size! fi # end of 'postscript/demos/it' fi if test -f 'postscript/demos/newscreen.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/newscreen.ps'\" else echo shar: Extracting \"'postscript/demos/newscreen.ps'\" \(319 characters\) sed "s/^X//" >'postscript/demos/newscreen.ps' <<'END_OF_FILE' X%! X X/scr [ [43 11 35 3 41 9 33 1] [27 59 19 51 25 57 17 49] [39 7 47 15 37 5 45 13] [23 55 31 63 21 53 29 61] [42 10 34 2 44 12 36 4] [26 58 18 50 28 60 20 52] [38 6 46 14 40 8 48 16] [22 54 30 62 24 56 32 64] ]def X X82 8 idiv 0.0 { 1 add 4 mul cvi exch 1 add 4 mul cvi scr exch get exch get 33.0 sub 32 div } setscreen END_OF_FILE if test 319 -ne `wc -c <'postscript/demos/newscreen.ps'`; then echo shar: \"'postscript/demos/newscreen.ps'\" unpacked with wrong size! fi # end of 'postscript/demos/newscreen.ps' fi if test -f 'postscript/demos/rosette' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/rosette'\" else echo shar: Extracting \"'postscript/demos/rosette'\" \(436 characters\) sed "s/^X//" >'postscript/demos/rosette' <<'END_OF_FILE' X/inch {72 mul} def X X/wedge { X newpath 0 0 moveto 1 0 translate 15 rotate 0 15 sin translate X 0 0 15 sin -90 90 arc closepath X} def X Xgsave X 3.75 inch 7.25 inch translate X 1 inch 1 inch scale X wedge .02 setlinewidth stroke Xgrestore X Xgsave X 4.25 inch 4.25 inch translate X 1.75 inch 1.75 inch scale X .02 setlinewidth X 2 1 13 { X 13 div setgray X gsave X wedge gsave fill grestore X 0 setgray stroke X grestore X 30 rotate X } for Xgrestore END_OF_FILE if test 436 -ne `wc -c <'postscript/demos/rosette'`; then echo shar: \"'postscript/demos/rosette'\" unpacked with wrong size! fi # end of 'postscript/demos/rosette' fi if test -f 'postscript/demos/tree.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/tree.ps'\" else echo shar: Extracting \"'postscript/demos/tree.ps'\" \(594 characters\) sed "s/^X//" >'postscript/demos/tree.ps' <<'END_OF_FILE' X%! X X/Times-Roman findfont setfont X X%/go { translate 0 0 moveto } def X/size 0 4 dtransform dup mul exch dup mul add def X X/tree { X 0 0 moveto (T) show X 0 1 dtransform X dup mul exch dup mul add X size gt X { X currentpoint translate X 0 .1 translate 0.6 0.6 scale X 0 0 moveto (R) show X currentpoint translate X .75 0 translate X gsave X 90 rotate tree X grestore X .75 0 translate X 90 rotate -1 1 scale X (T) stringwidth neg exch neg exch translate X tree X } if X } def X X100 400 translate 200 200 scale X Xtree Xshowpage X END_OF_FILE if test 594 -ne `wc -c <'postscript/demos/tree.ps'`; then echo shar: \"'postscript/demos/tree.ps'\" unpacked with wrong size! fi # end of 'postscript/demos/tree.ps' fi if test -f 'postscript/demos/wow' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/wow'\" else echo shar: Extracting \"'postscript/demos/wow'\" \(262 characters\) sed "s/^X//" >'postscript/demos/wow' <<'END_OF_FILE' X%! X.01 setlinewidth Xclippath pathbbox newpath X X3 -1 roll sub 2 div 3 1 roll exch sub 2 div exch X2 copy translate X2 copy gt {exch} if pop dup scale X90 rotate X25 { 0 .9 moveto 0 0 1 90 -90 arc X 0 0 .9 -90 90 arcn fill X .88 .88 scale 22.5 rotate } repeat X Xshowpage END_OF_FILE if test 262 -ne `wc -c <'postscript/demos/wow'`; then echo shar: \"'postscript/demos/wow'\" unpacked with wrong size! fi # end of 'postscript/demos/wow' fi if test -f 'postscript/demos/wow2' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/wow2'\" else echo shar: Extracting \"'postscript/demos/wow2'\" \(320 characters\) sed "s/^X//" >'postscript/demos/wow2' <<'END_OF_FILE' X%! X.01 setlinewidth Xclippath pathbbox newpath X X3 -1 roll sub 2 div 3 1 roll exch sub 2 div exch X2 copy translate X2 copy gt {exch} if pop dup scale X90 rotate X/shade 0 def X25 { X shade setgray /shade 1 25 div shade add def X 0 .9 moveto 0 0 1 90 -90 arc X 0 0 .9 -90 90 arcn fill X .88 .88 scale 22.5 rotate } repeat Xshowpage END_OF_FILE if test 320 -ne `wc -c <'postscript/demos/wow2'`; then echo shar: \"'postscript/demos/wow2'\" unpacked with wrong size! fi # end of 'postscript/demos/wow2' fi if test -f 'postscript/demos/wow3' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/demos/wow3'\" else echo shar: Extracting \"'postscript/demos/wow3'\" \(348 characters\) sed "s/^X//" >'postscript/demos/wow3' <<'END_OF_FILE' X%! X.01 setlinewidth Xclippath pathbbox newpath X X/big 1.0 31 { 2 mul } repeat def X X3 -1 roll sub 2 div 3 1 roll exch sub 2 div exch X2 copy translate X2 copy gt {exch} if pop dup scale X90 rotate X25 { X rand big div rand big div rand big div setrgbcolor X 0 .9 moveto 0 0 1 90 -90 arc X 0 0 .9 -90 90 arcn fill X .88 .88 scale 22.5 rotate } repeat Xshowpage END_OF_FILE if test 348 -ne `wc -c <'postscript/demos/wow3'`; then echo shar: \"'postscript/demos/wow3'\" unpacked with wrong size! fi # end of 'postscript/demos/wow3' fi if test ! -d 'postscript/font' ; then echo shar: Creating directory \"'postscript/font'\" mkdir 'postscript/font' fi if test -f 'postscript/font-map' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/font-map'\" else echo shar: Extracting \"'postscript/font-map'\" \(277 characters\) sed "s/^X//" >'postscript/font-map' <<'END_OF_FILE' XFontMap /Times-BoldItalic /Times-BI put XFontMap /Helvetica-Oblique /Helvetica-Ob put XFontMap /Helvetica-Bold /Times-Roman put XFontMap /Symbol /Times-Roman put XFontMap /Courier /Helvetica put XFontMap /Courier-Oblique /Helvetica-Oblique put XFontMap /Courier-Bold /Times-Bold put END_OF_FILE if test 277 -ne `wc -c <'postscript/font-map'`; then echo shar: \"'postscript/font-map'\" unpacked with wrong size! fi # end of 'postscript/font-map' fi if test -f 'postscript/font/Helvetica' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/font/Helvetica'\" else echo shar: Extracting \"'postscript/font/Helvetica'\" \(60 characters\) sed "s/^X//" >'postscript/font/Helvetica' <<'END_OF_FILE' X/Helvetica (fonts/SANS/roman.r) lib (font/proforma) lib run END_OF_FILE if test 60 -ne `wc -c <'postscript/font/Helvetica'`; then echo shar: \"'postscript/font/Helvetica'\" unpacked with wrong size! fi # end of 'postscript/font/Helvetica' fi if test -f 'postscript/font/Helvetica-Ob' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/font/Helvetica-Ob'\" else echo shar: Extracting \"'postscript/font/Helvetica-Ob'\" \(64 characters\) sed "s/^X//" >'postscript/font/Helvetica-Ob' <<'END_OF_FILE' X/Helvetica-Ob (fonts/SANS/italic.r) lib (font/proforma) lib run END_OF_FILE if test 64 -ne `wc -c <'postscript/font/Helvetica-Ob'`; then echo shar: \"'postscript/font/Helvetica-Ob'\" unpacked with wrong size! fi # end of 'postscript/font/Helvetica-Ob' fi if test -f 'postscript/font/Times-BI' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/font/Times-BI'\" else echo shar: Extracting \"'postscript/font/Times-BI'\" \(61 characters\) sed "s/^X//" >'postscript/font/Times-BI' <<'END_OF_FILE' X/Times-BI (fonts/TIMES/italic.r) lib (font/proforma) lib run END_OF_FILE if test 61 -ne `wc -c <'postscript/font/Times-BI'`; then echo shar: \"'postscript/font/Times-BI'\" unpacked with wrong size! fi # end of 'postscript/font/Times-BI' fi if test -f 'postscript/font/Times-Bold' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/font/Times-Bold'\" else echo shar: Extracting \"'postscript/font/Times-Bold'\" \(62 characters\) sed "s/^X//" >'postscript/font/Times-Bold' <<'END_OF_FILE' X/Times-Bold (fonts/TIMES/roman.r) lib (font/proforma) lib run END_OF_FILE if test 62 -ne `wc -c <'postscript/font/Times-Bold'`; then echo shar: \"'postscript/font/Times-Bold'\" unpacked with wrong size! fi # end of 'postscript/font/Times-Bold' fi if test -f 'postscript/font/Times-Italic' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/font/Times-Italic'\" else echo shar: Extracting \"'postscript/font/Times-Italic'\" \(63 characters\) sed "s/^X//" >'postscript/font/Times-Italic' <<'END_OF_FILE' X/Times-Italic (fonts/Times/italic) lib (font/proforma) lib run END_OF_FILE if test 63 -ne `wc -c <'postscript/font/Times-Italic'`; then echo shar: \"'postscript/font/Times-Italic'\" unpacked with wrong size! fi # end of 'postscript/font/Times-Italic' fi if test -f 'postscript/font/Times-Roman' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/font/Times-Roman'\" else echo shar: Extracting \"'postscript/font/Times-Roman'\" \(61 characters\) sed "s/^X//" >'postscript/font/Times-Roman' <<'END_OF_FILE' X/Times-Roman (fonts/Times/roman) lib (font/proforma) lib run END_OF_FILE if test 61 -ne `wc -c <'postscript/font/Times-Roman'`; then echo shar: \"'postscript/font/Times-Roman'\" unpacked with wrong size! fi # end of 'postscript/font/Times-Roman' fi if test -f 'postscript/font/Times-Roman-Adobe' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/font/Times-Roman-Adobe'\" else echo shar: Extracting \"'postscript/font/Times-Roman-Adobe'\" \(74 characters\) sed "s/^X//" >'postscript/font/Times-Roman-Adobe' <<'END_OF_FILE' X/Times-Roman-Adobe (widths/Adobe/Times-Roman) lib (font/proforma) lib run END_OF_FILE if test 74 -ne `wc -c <'postscript/font/Times-Roman-Adobe'`; then echo shar: \"'postscript/font/Times-Roman-Adobe'\" unpacked with wrong size! fi # end of 'postscript/font/Times-Roman-Adobe' fi if test -f 'postscript/font/proforma' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/font/proforma'\" else echo shar: Extracting \"'postscript/font/proforma'\" \(531 characters\) sed "s/^X//" >'postscript/font/proforma' <<'END_OF_FILE' X% FontName CharFile X X30 dict begin X /CharFile exch def X /FontName exch def X /FontType 3 def X /FontBBox [0.0 -32.0 32.0 32.0] def X /FontMatrix [ 1 38.0 div 0 0 -1 32.0 div 0 0] def X /Encoding 256 array def X StandardEncoding Encoding copy pop X /Metrics 256 dict def X /CharStrings 256 dict def X /BuildChar { X 1 index begin X FontDirectory FontName get /BuildChar /buildhershey load put X currentdict /BuildChar /buildhershey load put X CharFile run X /BuildChar load X end X exec X } def X FontName currentdict definefont pop Xend END_OF_FILE if test 531 -ne `wc -c <'postscript/font/proforma'`; then echo shar: \"'postscript/font/proforma'\" unpacked with wrong size! fi # end of 'postscript/font/proforma' fi if test ! -d 'postscript/fonts' ; then echo shar: Creating directory \"'postscript/fonts'\" mkdir 'postscript/fonts' fi if test ! -d 'postscript/fonts/Gothic' ; then echo shar: Creating directory \"'postscript/fonts/Gothic'\" mkdir 'postscript/fonts/Gothic' fi if test ! -d 'postscript/fonts/Olde' ; then echo shar: Creating directory \"'postscript/fonts/Olde'\" mkdir 'postscript/fonts/Olde' fi if test ! -d 'postscript/fonts/SANS' ; then echo shar: Creating directory \"'postscript/fonts/SANS'\" mkdir 'postscript/fonts/SANS' fi if test ! -d 'postscript/fonts/Sans' ; then echo shar: Creating directory \"'postscript/fonts/Sans'\" mkdir 'postscript/fonts/Sans' fi if test ! -d 'postscript/fonts/TIMES' ; then echo shar: Creating directory \"'postscript/fonts/TIMES'\" mkdir 'postscript/fonts/TIMES' fi if test ! -d 'postscript/fonts/Times' ; then echo shar: Creating directory \"'postscript/fonts/Times'\" mkdir 'postscript/fonts/Times' fi if test -f 'postscript/fonts/Times/italic' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/fonts/Times/italic'\" else echo shar: Extracting \"'postscript/fonts/Times/italic'\" \(62 characters\) sed "s/^X//" >'postscript/fonts/Times/italic' <<'END_OF_FILE' X(fonts/Times/italic.r) Xlib Xrun X(fonts/Times/italic.a) Xlib Xrun END_OF_FILE if test 62 -ne `wc -c <'postscript/fonts/Times/italic'`; then echo shar: \"'postscript/fonts/Times/italic'\" unpacked with wrong size! fi # end of 'postscript/fonts/Times/italic' fi if test -f 'postscript/fonts/Times/roman' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/fonts/Times/roman'\" else echo shar: Extracting \"'postscript/fonts/Times/roman'\" \(60 characters\) sed "s/^X//" >'postscript/fonts/Times/roman' <<'END_OF_FILE' X(fonts/Times/roman.r) Xlib Xrun X(fonts/Times/roman.a) Xlib Xrun END_OF_FILE if test 60 -ne `wc -c <'postscript/fonts/Times/roman'`; then echo shar: \"'postscript/fonts/Times/roman'\" unpacked with wrong size! fi # end of 'postscript/fonts/Times/roman' fi if test ! -d 'postscript/fonts/extra' ; then echo shar: Creating directory \"'postscript/fonts/extra'\" mkdir 'postscript/fonts/extra' fi if test ! -d 'postscript/fonts/sans' ; then echo shar: Creating directory \"'postscript/fonts/sans'\" mkdir 'postscript/fonts/sans' fi if test -f 'postscript/fonts/sans/greek.r' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'postscript/fonts/sans/greek.r'\" else echo shar: Extracting \"'postscript/fonts/sans/greek.r'\" \(2045 characters\) sed "s/^X//" >'postscript/fonts/sans/greek.r' <<'END_OF_FILE' XCharStrings X/27 X<C53B X4144 XC53B X4944 XC341 X4741 X> Xput XMetrics X/27 X[0 X10] Xput XCharStrings X/28 X<C23B X4244 XC23B X463B X483C X483E X463F XC23F X463F X4840 X4843 X4644 X4244 X> Xput XMetrics X/28 X[0 X10] Xput XCharStrings X/29 X<C23B X4244 XC23B X483B X> Xput XMetrics X/29 X[0 X9] Xput XCharStrings X/30 X<C53B X4144 XC53B X4944 XC144 X4944 X> Xput XMetrics X/30 X[0 X10] Xput XCharStrings X/31 X<C23B X4244 XC23B X483B XC23F X463F XC244 X4844 X> Xput XMetrics X/31 X[0 X10] Xput XCharStrings X/32 X<C83B X4244 XC23B X483B XC244 X4844 X> Xput XMetrics X/32 X[0 X10] Xput XCharStrings X/33 X<C23B X4244 XC83B X4844 XC23F X483F X> Xput XMetrics X/33 X[0 X10] Xput XCharStrings X/34 X<C53B X433C X423E X4241 X4343 X4544 X4644 X4843 X4941 X493E X483C X463B X453B XC43F X4740 XC73F X4440 X> Xput XMetrics X/34 X[0 X11] Xput XCharStrings X/35 X<C23B X4244 X> Xput XMetrics X/35 X[3 X4] Xput XCharStrings X/36 X<C23B X4244 XC83B X4241 XC43F X4844 X> Xput XMetrics X/36 X[0 X10] Xput XCharStrings X/37 X<C53B X4144 XC53B X4944 X> Xput XMetrics X/37 X[0 X10] Xput XCharStrings X/38 X<C23B X4244 XC23B X4644 XCA3B X4644 XCA3B X4A44 X> Xput XMetrics X/38 X[-1 X12] Xput XCharStrings X/39 X<C23B X4244 XC23B X4844 XC83B X4844 X> Xput XMetrics X/39 X[0 X10] Xput XCharStrings X/40 X<C23B X483B XC33F X4740 XC73F X4340 XC244 X4844 X> Xput XMetrics X/40 X[0 X10] Xput XCharStrings X/41 X<C53B X433C X423E X4241 X4343 X4544 X4644 X4843 X4941 X493E X483C X463B X453B X> Xput XMetrics X/41 X[0 X11] Xput XCharStrings X/42 X<C23B X4244 XC83B X4844 XC23B X483B X> Xput XMetrics X/42 X[0 X10] Xput XCharStrings X/43 X<C23B X4244 XC23B X463B X483C X483F X4640 X4240 X> Xput XMetrics X/43 X[0 X10] Xput XCharStrings X/44 X<C23B X453F X4244 XC23B X483B XC244 X4844 X> Xput XMetrics X/44 X[0 X10] Xput XCharStrings X/45 X<C53B X4544 XC13B X493B X> Xput XMetrics X/45 X[0 X10] Xput XCharStrings X/46 X<C13D X413C X423B X433B X443C X453E X4544 XC93D X493C X483B X473B X463C X453E X> Xput XMetrics X/46 X[0 X10] Xput XCharStrings X/47 X<C63B X4644 XC43D X423E X4241 X4442 X4842 X4A41 X4A3E X483D X443D X> Xput XMetrics X/47 X[-1 X12] Xput XCharStrings X/48 X<C23B X4844 XC83B X4244 X> Xput XMetrics X/48 X[0 X10] Xput XCharStrings X/49 X<C63B X4644 XC23D X433E X4341 X4542 X4742 X4941 X493E X4A3D X> Xput XMetrics X/49 X[-1 X12] Xput XCharStrings X/50 X<C244 X4444 X4240 X423E X433C X453B X463B X483C X493E X4940 X4744 X4944 X> Xput XMetrics X/50 X[0 X11] Xput END_OF_FILE if test 2045 -ne `wc -c <'postscript/fonts/sans/greek.r'`; then echo shar: \"'postscript/fonts/sans/greek.r'\" unpacked with wrong size! fi # end of 'postscript/fonts/sans/greek.r' fi if test ! -d 'postscript/fonts/times' ; then echo shar: Creating directory \"'postscript/fonts/times'\" mkdir 'postscript/fonts/times' fi if test ! -d 'postscript/widths' ; then echo shar: Creating directory \"'postscript/widths'\" mkdir 'postscript/widths' fi if test ! -d 'postscript/widths/Adobe' ; then echo shar: Creating directory \"'postscript/widths/Adobe'\" mkdir 'postscript/widths/Adobe' fi if test ! -d 'source' ; then echo shar: Creating directory \"'source'\" mkdir 'source' fi if test -f 'source/README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/README'\" else echo shar: Extracting \"'source/README'\" \(839 characters\) sed "s/^X//" >'source/README' <<'END_OF_FILE' XThis is a virtually complete implementation of PostScript. Just type Xmake and it should produce a version for suns. Since the only complete Xdriver is for suns and since some driver writing will be necessary on Xany other machine, I have not packaged everything up in an idiot-proof Xbox. I am not aware of any Gotchas in building this source. The X Xdriver used to work on X10 - It will need work for X11. The pixrect Xdriver is very new, and should be regarded as didactic, as it scribbles Xstraight onto the display. Persuading suntools to look after the bits Xwould have taken too long. X XWriting your own driver involves merely hacking pixrect.c until it will Xdrive your display. There are only 11 routines to write, and they're Xall quite short. X XHave fun! X X- Crispin Goswell X Xcaag@uk.ac.rl.vd Xcaag@vd.rl.ac.uk X...!mcvax!ukc!rlvd!caag END_OF_FILE if test 839 -ne `wc -c <'source/README'`; then echo shar: \"'source/README'\" unpacked with wrong size! fi # end of 'source/README' fi if test -f 'source/canon.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/canon.c'\" else echo shar: Extracting \"'source/canon.c'\" \(1318 characters\) sed "s/^X//" >'source/canon.c' <<'END_OF_FILE' X/* X * Copyright (C) Rutherford Appleton Laboratory 1987 X * X * This source may be copied, distributed, altered or used, but not sold for profit X * or incorporated into a product except under licence from the author. X * It is not in the public domain. X * This notice should remain in the source unaltered, and any changes to the source X * made by persons other than the author should be marked as such. X * X * Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd X */ X#include "main.h" X#include "graphics.h" X#include "canon.h" X Xint pixels_per_inch; X Xint single_rop [] = X { X ROP_FALSE, ROP_DEST, ROP_NOTDEST, ROP_TRUE, X ROP_FALSE, ROP_DEST, ROP_NOTDEST, ROP_TRUE, X ROP_FALSE, ROP_DEST, ROP_NOTDEST, ROP_TRUE, X ROP_FALSE, ROP_DEST, ROP_NOTDEST, ROP_TRUE X }; X X/*ARGSUSED*/ XMatrix DeviceMatrix (width, height) int width, height; X { X return NewMatrix (pixels_per_inch / 72.0, 0.0, 0.0, -pixels_per_inch / 72.0, 0.0, (float) height); X } X Xvoid HardUpdate () X { X } X Xint IsWindowHardware (h) struct hardware *h; X { X return h->flags & ISWIN; X } X X#define IsWindowHardware(h) ((h)->flags & ISWIN) X XDevicePoint HardwareExtent (h) struct hardware *h; X { X if (h) X return h->extent; X else X return NewDevicePoint (0, 0); X } X Xvoid SetClipHardware (h, clip) struct hardware *h, *clip; X { X if (h) X h->clip = clip; X } END_OF_FILE if test 1318 -ne `wc -c <'source/canon.c'`; then echo shar: \"'source/canon.c'\" unpacked with wrong size! fi # end of 'source/canon.c' fi if test -f 'source/canon.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/canon.h'\" else echo shar: Extracting \"'source/canon.h'\" \(351 characters\) sed "s/^X//" >'source/canon.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X X#define ISWIN 1 X Xstruct hardware X { X union hard { X char *addr; X int handle; X } hard; X int flags; X DevicePoint extent; X struct hardware *aux, *clip; X }; X Xextern void InitTransfer (); Xextern int pixels_per_inch; X Xextern int single_rop[]; X Xextern struct hardware *GraySync (); END_OF_FILE if test 351 -ne `wc -c <'source/canon.h'`; then echo shar: \"'source/canon.h'\" unpacked with wrong size! fi # end of 'source/canon.h' fi if test -f 'source/colour.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/colour.h'\" else echo shar: Extracting \"'source/colour.h'\" \(311 characters\) sed "s/^X//" >'source/colour.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X Xtypedef struct { float hue, saturation, brightness; } Colour; X Xextern Colour Black, White; X Xextern Colour NewColour (), NewHSBColour (), NewRGBColour (), NewGray (); Xextern void ColourHSB (), ColourRGB (); Xextern float Gray (), Brightness (); END_OF_FILE if test 311 -ne `wc -c <'source/colour.h'`; then echo shar: \"'source/colour.h'\" unpacked with wrong size! fi # end of 'source/colour.h' fi if test -f 'source/copyright.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/copyright.h'\" else echo shar: Extracting \"'source/copyright.h'\" \(479 characters\) sed "s/^X//" >'source/copyright.h' <<'END_OF_FILE' X/* X * Copyright (C) Rutherford Appleton Laboratory 1987 X * X * This source may be copied, distributed, altered or used, but not sold for profit X * or incorporated into a product except under licence from the author. X * It is not in the public domain. X * This notice should remain in the source unaltered, and any changes to the source X * made by persons other than the author should be marked as such. X * X * Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd X */ END_OF_FILE if test 479 -ne `wc -c <'source/copyright.h'`; then echo shar: \"'source/copyright.h'\" unpacked with wrong size! fi # end of 'source/copyright.h' fi if test -f 'source/device.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/device.h'\" else echo shar: Extracting \"'source/device.h'\" \(345 characters\) sed "s/^X//" >'source/device.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X X#include "hard.h" X Xstruct device X { X Matrix default_matrix; X Path default_clip; X int link_count; X struct hardware *dev; X }; X Xextern struct device *NewDevice (), *NewCacheDevice (), *LinkDevice (), *DeviceFrom (), *UniqueDevice (); Xextern struct device *NewBitmapDevice (); END_OF_FILE if test 345 -ne `wc -c <'source/device.h'`; then echo shar: \"'source/device.h'\" unpacked with wrong size! fi # end of 'source/device.h' fi if test -f 'source/font.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/font.h'\" else echo shar: Extracting \"'source/font.h'\" \(190 characters\) sed "s/^X//" >'source/font.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X X Xextern Object Fid, FD, FontMatrix, FontType, Encoding, FontBBox, FontName; Xextern Object UserShow, CharStrings, Metrics; END_OF_FILE if test 190 -ne `wc -c <'source/font.h'`; then echo shar: \"'source/font.h'\" unpacked with wrong size! fi # end of 'source/font.h' fi if test -f 'source/graphics.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/graphics.h'\" else echo shar: Extracting \"'source/graphics.h'\" \(1047 characters\) sed "s/^X//" >'source/graphics.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X X#include "device.h" X#include "point.h" X#include "font.h" X X#define PI 3.14159265358979 X X#define MAXDASH 11 X X#define MAXGSAVES 20 X X#define BBOX_LEFT 0 X#define BBOX_TOP 1 X#define BBOX_RIGHT 2 X#define BBOX_BOTTOM 3 X Xstruct show_context X { X char InShow; X char space; X Point Width; X HardPoint shim, space_shim; X Object CharName; X struct cache *ccache; X Matrix mat; X }; X Xstruct state X { X Matrix CTM; X Colour colour; X HardPoint cp; int cp_defined; X Path path; X Path clip; X Object font; X float line_width; X int line_cap; X int line_join; X struct X { X float frequency, rotation, *thresh; X int count; X Object spot_function; X } screen; X struct { X Object transfn; X float *tran; X int tcount; X } transfer; X int flatness; X float miter_limit; X float dash_offset, dash_array [MAXDASH]; X int dash_length; X struct device *device; X struct show_context *show; X struct device *clipdevice; X }; X Xextern struct state *gstate; X Xextern int stroke_method, fill_method; END_OF_FILE if test 1047 -ne `wc -c <'source/graphics.h'`; then echo shar: \"'source/graphics.h'\" unpacked with wrong size! fi # end of 'source/graphics.h' fi if test -f 'source/hard.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/hard.h'\" else echo shar: Extracting \"'source/hard.h'\" \(821 characters\) sed "s/^X//" >'source/hard.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X X#include "mat.h" X#include "rop.h" X#include "colour.h" X#include "path.h" X Xtypedef struct device_point { int dx, dy; } DevicePoint; X Xextern struct hardware *HardwareFromString (), *NewBitmapHardware (), *NewWindowHardware (), *InitHardware (); Xextern DevicePoint HardwareExtent (); Xextern char *StringFromHardware (); X Xextern void BitBlt (), BitBltBlob (), BitBltLine (), DestroyHardware (); Xextern void HardUpdate (), UpdateControl (); Xextern Matrix DeviceMatrix (); X Xextern void RasterTile (), BitBltTrapezoid (); X Xextern int IsWindowHardware (), TransferSize (); Xextern void SetTransfer (); Xextern void Paint (), PaintLine (), PaintTrapezoid (); Xextern int ScreenSize (); Xextern void BuildScreen (), SetScreen (); Xextern DevicePoint NewDevicePoint (); END_OF_FILE if test 821 -ne `wc -c <'source/hard.h'`; then echo shar: \"'source/hard.h'\" unpacked with wrong size! fi # end of 'source/hard.h' fi if test -f 'source/head' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/head'\" else echo shar: Extracting \"'source/head'\" \(68 characters\) sed "s/^X//" >'source/head' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X END_OF_FILE if test 68 -ne `wc -c <'source/head'`; then echo shar: \"'source/head'\" unpacked with wrong size! fi # end of 'source/head' fi if test -f 'source/head.ed' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/head.ed'\" else echo shar: Extracting \"'source/head.ed'\" \(77 characters\) sed "s/^X//" >'source/head.ed' <<'END_OF_FILE' X1i X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X X. Xw Xq END_OF_FILE if test 77 -ne `wc -c <'source/head.ed'`; then echo shar: \"'source/head.ed'\" unpacked with wrong size! fi # end of 'source/head.ed' fi if test -f 'source/makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/makefile'\" else echo shar: Extracting \"'source/makefile'\" \(1696 characters\) sed "s/^X//" >'source/makefile' <<'END_OF_FILE' XOBJECTS=array.o boolean.o config.o control.o dictionary.o file.o\ X integer.o main.o math.o misc.o name.o operator.o\ X poly.o property.o real.o save.o stack.o string.o unix.o XLIBS=libww.a -lsuntool -lsunwindow -lpixrect -g XGRAPHICS=cache.o colour.o device.o fill.o font.o gsave.o image.o mat.o matrix.o\ X pat.o path.o state.o stroke.o XCFLAGS=-O X XPS: $(OBJECTS) $(GRAPHICS) hard.o canon.a X cc $(CFLAGS) $(OBJECTS) $(GRAPHICS) hard.o canon.a -lm `libs` -o PS X XsunPS: $(OBJECTS) $(GRAPHICS) hard.o canon.a pixrect X cc $(CFLAGS) $(OBJECTS) $(GRAPHICS) hard.o canon.a -lm -lpixrect -o sunPS X XCPS: $(OBJECTS) $(GRAPHICS) colour-ww.o trapezoid.o canon.o X cc $(CFLAGS) $(OBJECTS) $(GRAPHICS) colour-ww.o canon.o trapezoid.o -lm `libs` -o CPS X Xpostscript: $(OBJECTS) $(GRAPHICS) adapter.o protocol.o X cc $(CFLAGS) $(OBJECTS) $(GRAPHICS) adapter.o protocol.o -lm -o postscript X XXPS: $(OBJECTS) $(GRAPHICS) X.o X cc $(CFLAGS) $(OBJECTS) $(GRAPHICS) X.o -lm -lX -o XPS X Xcanon.a: canon.o screen.o trapezoid.o paint.o X ar ruv canon.a canon.o screen.o trapezoid.o paint.o X ranlib canon.a X Xviewer: protocol.o viewer.o hard.o canon.a X cc protocol.o viewer.o hard.o canon.a `libs` -o viewer X Xall: PS postscript viewer X Xww: ww.o wwlib installww X Xpixrect: pixrect.o X cp pixrect.o hard.o X Xsun: ww wwsun X Xorion: orion.o installorion orionlib X XX.o: X cc -c X.c X Xwwlib: X if [ -f libww.a ]; \ X then \ X echo 'echo libww.a' >lww; \ X else \ X echo 'echo -lww' >lww; \ X fi; \ X chmod +x lww X echo "echo `lww`" >libs; chmod +x libs X Xwwsun: X echo "echo `lww` -lsuntool -lsunwindow -lpixrect" >libs; chmod +x libs X Xorionlib: X echo 'echo -lG' >libs; chmod +x libs X Xinstallww: X cp ww.o hard.o X Xinstallorion: X cp orion.o hard.o END_OF_FILE if test 1696 -ne `wc -c <'source/makefile'`; then echo shar: \"'source/makefile'\" unpacked with wrong size! fi # end of 'source/makefile' fi if test -f 'source/malloc.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/malloc.c'\" else echo shar: Extracting \"'source/malloc.c'\" \(1317 characters\) sed "s/^X//" >'source/malloc.c' <<'END_OF_FILE' X/* X * Copyright (C) Rutherford Appleton Laboratory 1987 X * X * This source may be copied, distributed, altered or used, but not sold for profit X * or incorporated into a product except under licence from the author. X * It is not in the public domain. X * This notice should remain in the source unaltered, and any changes to the source X * made by persons other than the author should be marked as such. X * X * Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd X */ X#define THRESHOLD 4096 X#define NULL 0 X Xstatic char *FreeSpace = NULL, *sbrk (); Xstatic int Left = 0; X Xchar *malloc (size) unsigned size; X { X char *res; X X if (FreeSpace == NULL) X FreeSpace = sbrk (0); X X size = (size + 3) & ~3; X res = FreeSpace; X if (size > Left) X { X int chunk; X X if (sbrk (chunk = size > THRESHOLD ? size : THRESHOLD) == (char *) -1) X return NULL; X Left += chunk; X } X Left -= size; X FreeSpace += size; X X return res; X } X Xint free (block) char *block; X { X } X Xchar *realloc (b, size) char *b; unsigned size; X { X char *block = malloc (size); X X while (--size > 0) X *block++ = *b++; X return block; X } X Xchar *calloc (size1, size2) unsigned size1, size2; X { X unsigned total = size1 * size2; X char *res = malloc (total), *p = res; X X while (--total > 0) X *p++ = 0; X return res; X } END_OF_FILE if test 1317 -ne `wc -c <'source/malloc.c'`; then echo shar: \"'source/malloc.c'\" unpacked with wrong size! fi # end of 'source/malloc.c' fi if test -f 'source/mat.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/mat.h'\" else echo shar: Extracting \"'source/mat.h'\" \(388 characters\) sed "s/^X//" >'source/mat.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X Xtypedef struct matrix { float A, B, C, D, tx, ty; } Matrix; X Xtypedef struct vector { float vx, vy, vt; } Vector; X Xextern Matrix NewMatrix (), MatMult (), MatInvert (), Translate (), Rotate (), Scale (); Xextern Vector NewVector (), DiffVector (); Xextern Vector Transform (), ITransform (), DTransform (), IDTransform (); END_OF_FILE if test 388 -ne `wc -c <'source/mat.h'`; then echo shar: \"'source/mat.h'\" unpacked with wrong size! fi # end of 'source/mat.h' fi if test -f 'source/misc.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/misc.c'\" else echo shar: Extracting \"'source/misc.c'\" \(886 characters\) sed "s/^X//" >'source/misc.c' <<'END_OF_FILE' X/* X * Copyright (C) Rutherford Appleton Laboratory 1987 X * X * This source may be copied, distributed, altered or used, but not sold for profit X * or incorporated into a product except under licence from the author. X * It is not in the public domain. X * This notice should remain in the source unaltered, and any changes to the source X * made by persons other than the author should be marked as such. X * X * Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd X */ X#include "main.h" X#include <sys/param.h> X#include <sys/times.h> X#ifndef HZ X# define HZ 60 X#endif X Xstatic int PUserTime (); X XInitMisc () X { X InstallOp ("usertime", PUserTime, 0, 1, 0, 0); X InstallOp ("==", PolyFirst, 1, 1, 0, 0, Poly); X } X Xstatic int PUserTime () X { X struct tms tbuf; X long times (); X X times (&tbuf); X return Push (OpStack, MakeInteger ((int) (tbuf.tms_utime * 1000 / HZ))); X } END_OF_FILE if test 886 -ne `wc -c <'source/misc.c'`; then echo shar: \"'source/misc.c'\" unpacked with wrong size! fi # end of 'source/misc.c' fi if test -f 'source/null.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/null.c'\" else echo shar: Extracting \"'source/null.c'\" \(2261 characters\) sed "s/^X//" >'source/null.c' <<'END_OF_FILE' X/* X * Copyright (C) Rutherford Appleton Laboratory 1987 X * X * This source may be copied, distributed, altered or used, but not sold for profit X * or incorporated into a product except under licence from the author. X * It is not in the public domain. X * This notice should remain in the source unaltered, and any changes to the source X * made by persons other than the author should be marked as such. X * X * Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd X */ X#include "main.h" X#include "graphics.h" X#include "canon.h" X Xstruct hardware *InitHardware () X { X InitTransfer (1); X X return NULL; X } X Xstatic struct hardware *NewHardware (bits, width, height, flags) char *bits; int width, height, flags; X { X struct hardware *d = (struct hardware *) Malloc (sizeof (struct hardware)); X X d->hard.addr = bits; X d->flags = flags; X d->aux = d->clip = NULL; X d->extent = NewDevicePoint (width, height); X X return d; X } X Xstruct hardware *NewWindowHardware (width, height) int width, height; X { X return NewHardware (NULL, width, height, ISWIN); X } X Xstruct hardware *NewBitmapHardware (width, height) int width, height; X { X return NewHardware (NULL, width, height, 0); X } X Xstatic void DestroyBits (b) char *b; X { X } X Xvoid DestroyHardware (dev) struct hardware *dev; X { X if (dev == NULL) X return; X DestroyBits (dev->hard.addr); X if (dev->aux) X DestroyHardware (dev->aux); X Free ((char *) dev); X } X Xstruct hardware *HardwareFromString (st, width, height) char *st; int width, height; X { X Free (st); X return NewHardware (NULL, width, height, 0); X } X Xchar *StringFromHardware (dev) struct hardware *dev; X { X return Malloc ((dev->extent.dx + 7) / 8 *dev->extent.dy); X } X Xvoid UpdateControl (h, flag) struct hardware *h; int flag; X { X } X Xvoid RasterTile (from, to, toPoint, extent, rop) X struct hardware *from, *to; X DevicePoint toPoint, extent; X int rop; X { X } X Xvoid BitBlt (from, to, fromPoint, toPoint, extent, rop) X struct hardware *from, *to; X DevicePoint fromPoint, toPoint, extent; X int rop; X { X } X Xvoid BitBltLine (h, fromPoint, toPoint, rop) X struct hardware *h; X DevicePoint fromPoint, toPoint; X int rop; X { X } X Xvoid BitBltBlob (to, top, height, left, right, rop) struct hardware *to; int top, height, *left, *right, rop; X { X } END_OF_FILE if test 2261 -ne `wc -c <'source/null.c'`; then echo shar: \"'source/null.c'\" unpacked with wrong size! fi # end of 'source/null.c' fi if test -f 'source/path.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/path.h'\" else echo shar: Extracting \"'source/path.h'\" \(1008 characters\) sed "s/^X//" >'source/path.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X X#define CBUTT 0 X#define CROUND 1 X#define CSQUARE 2 X X#define JMITRE 0 X#define JROUND 1 X#define JBEVEL 2 X X#define STROKE_FILL 0 X#define STROKE_THIN 1 X X#define FILL_SINGLE 0 X#define FILL_CACHE_DOUBLE 1 X#define FILL_DOUBLE 2 X#define FILL_DOUBLE_STROKE 3 X Xtypedef struct hard_point { float hx, hy; } HardPoint; X Xenum pelem_type { EHeader, EMove, ELine, EArc, ECurve, EClose }; X Xstruct path_element X { X enum pelem_type ptype; X union { X HardPoint point; X struct arc { int dir; HardPoint centre; float radius, from, to; } arc; X struct bezier { HardPoint x0, x1, x2; } curve; X } pe; X struct path_element *next, *last; X }; X Xtypedef struct path_element *Path; X Xextern HardPoint NewHardPoint (), ExtToInt (), MoveHardPoint (); Xextern Path NewPath (), PathCopy (), NewMove (); Xextern int PNewPath (), PInitMatrix (); Xextern Path NewClipPath (), PathRemove (), ReversePath (), FlattenPath (); Xextern float Normalise (), PointX (), PointY (); END_OF_FILE if test 1008 -ne `wc -c <'source/path.h'`; then echo shar: \"'source/path.h'\" unpacked with wrong size! fi # end of 'source/path.h' fi if test -f 'source/point.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/point.h'\" else echo shar: Extracting \"'source/point.h'\" \(263 characters\) sed "s/^X//" >'source/point.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X Xtypedef struct point { float x, y; } Point; X Xextern Matrix PointTranslate (); Xextern Point NewPoint (), IntToExt (), MovePoint (); Xextern int MoveTo (), LineTo (); Xextern Object AssignMatrix (); END_OF_FILE if test 263 -ne `wc -c <'source/point.h'`; then echo shar: \"'source/point.h'\" unpacked with wrong size! fi # end of 'source/point.h' fi if test -f 'source/protocol.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/protocol.h'\" else echo shar: Extracting \"'source/protocol.h'\" \(954 characters\) sed "s/^X//" >'source/protocol.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X X#define NEW_WINDOW 'W' X#define NEW_BITMAP 'B' X#define BITBLT 'b' X#define SEND_BITMAP 's' X#define GET_BITMAP 'g' X#define DESTROY_HARDWARE 'D' X#define LINE 'l' X#define GET_MATRIX 'm' X#define GET_TRANSFERSIZE 't' X#define SET_TRANSFER 'T' X#define PAINT 'P' X#define PAINT_LINE 'L' X#define HARD_FLUSH 'F' X#define SCREEN_SIZE 'Z' X#define BUILD_SCREEN 'U' X#define SET_SCREEN 'S' X#define SET_CLIP_HARDWARE 'c' X#define BITBLT_TRAPEZOID 'r' X#define PAINT_TRAPEZOID 'R' X#define SET_UPDATE_CONTROL 'u' X Xvoid master_protocol (); Xvoid slave_protocol (); Xvoid send_colour (); XColour recv_colour (); Xvoid send_small (); Xfloat recv_small (); Xvoid send_point (); XDevicePoint recv_point (); Xvoid send_byte (); Xunsigned char recv_byte (); Xvoid send_short (); Xshort recv_short (); Xvoid send_float (); Xfloat recv_float (); Xvoid send_string (); Xvoid recv_string (); Xvoid flush_protocol (); Xint can_recv (); END_OF_FILE if test 954 -ne `wc -c <'source/protocol.h'`; then echo shar: \"'source/protocol.h'\" unpacked with wrong size! fi # end of 'source/protocol.h' fi if test -f 'source/rop.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/rop.h'\" else echo shar: Extracting \"'source/rop.h'\" \(583 characters\) sed "s/^X//" >'source/rop.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X X#define ROP_FALSE 0 /* F */ X#define ROP_AND 1 /* S & D */ X#define ROP_ANDNOT 2 /* S & ~D */ X#define ROP_SOURCE 3 /* S */ X#define ROP_NOTAND 4 /* ~S & D */ X#define ROP_DEST 5 /* D */ X#define ROP_XOR 6 /* S ^ D */ X#define ROP_OR 7 /* S | D */ X#define ROP_NOR 8 /* ~(S | D) */ X#define ROP_NXOR 9 /* ~(S ^ D) */ X#define ROP_NOTDEST 10 /* ~D */ X#define ROP_ORNOT 11 /* S | ~D */ X#define ROP_NOTSOURCE 12 /* ~S */ X#define ROP_NOTOR 13 /* ~S | D */ X#define ROP_NAND 14 /* ~(S & D) */ X#define ROP_TRUE 15 /* T */ END_OF_FILE if test 583 -ne `wc -c <'source/rop.h'`; then echo shar: \"'source/rop.h'\" unpacked with wrong size! fi # end of 'source/rop.h' fi if test -f 'source/save.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/save.c'\" else echo shar: Extracting \"'source/save.c'\" \(966 characters\) sed "s/^X//" >'source/save.c' <<'END_OF_FILE' X/* X * Copyright (C) Rutherford Appleton Laboratory 1987 X * X * This source may be copied, distributed, altered or used, but not sold for profit X * or incorporated into a product except under licence from the author. X * It is not in the public domain. X * This notice should remain in the source unaltered, and any changes to the source X * made by persons other than the author should be marked as such. X * X * Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd X */ X#include "main.h" X X#define SMALL_SIZE 4096 X Xstatic char *small_buf; Xstatic int left = 0; X Xchar *Malloc (u) unsigned u; X { X char *malloc (), *res; X X if (0/*u < SMALL_SIZE*/) X { X char *res; X if (left < u) X { X small_buf = Malloc (SMALL_SIZE); X left = SMALL_SIZE; X } X res = small_buf; X small_buf += u; X left -= u; X X return res; X } X X PanicIf ((res = malloc (u)) == NULL, "malloc failed"); X return res; X } X XFree (s) char *s; X { X /* free (s); */ X } END_OF_FILE if test 966 -ne `wc -c <'source/save.c'`; then echo shar: \"'source/save.c'\" unpacked with wrong size! fi # end of 'source/save.c' fi if test -f 'source/str.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/str.h'\" else echo shar: Extracting \"'source/str.h'\" \(159 characters\) sed "s/^X//" >'source/str.h' <<'END_OF_FILE' X/* X * Copyright (C) Crispin Goswell 1987, All Rights Reserved. X */ X Xchar *strcat (), *strncat (); Xint strcmp (), strncmp (), strlen (), strspn (), strcspn (); END_OF_FILE if test 159 -ne `wc -c <'source/str.h'`; then echo shar: \"'source/str.h'\" unpacked with wrong size! fi # end of 'source/str.h' fi if test -f 'source/trapezoid.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source/trapezoid.c'\" else echo shar: Extracting \"'source/trapezoid.c'\" \(1924 characters\) sed "s/^X//" >'source/trapezoid.c' <<'END_OF_FILE' X/* X * Copyright (C) Rutherford Appleton Laboratory 1987 X * X * This source may be copied, distributed, altered or used, but not sold for profit X * or incorporated into a product except under licence from the author. X * It is not in the public domain. X * This notice should remain in the source unaltered, and any changes to the source X * made by persons other than the author should be marked as such. X * X * Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd X */ X#include "main.h" X#include "graphics.h" X#include "canon.h" X Xstatic int Xvalue (ax, ay, bx, by, cy) int ax, ay, bx, by, cy; X { X return bx + (cy - by) * (ax - bx) / (float) (ay - by); X } X Xvoid BitBltTrapezoid (to, lefttop, leftbottom, righttop, rightbottom, top, bottom, rop) X struct hardware *to; X DevicePoint lefttop, leftbottom, righttop, rightbottom; X int top, bottom, rop; X { X int i, j, temp; X static int left [1024], right [1024]; X X int ltx = Xvalue (lefttop.dx, lefttop.dy, leftbottom.dx, leftbottom.dy, top), X rtx = Xvalue (righttop.dx, righttop.dy, rightbottom.dx, rightbottom.dy, top), X lbx = Xvalue (lefttop.dx, lefttop.dy, leftbottom.dx, leftbottom.dy, bottom), X rbx = Xvalue (righttop.dx, righttop.dy, rightbottom.dx, rightbottom.dy, bottom); X X if (ltx == lbx && rtx == rbx) X { X if (rtx < ltx) X temp = rtx, rtx = ltx, ltx = temp; X X BitBlt ((struct hardware *) NULL, to, X NewDevicePoint (0, 0), NewDevicePoint (ltx, top), X NewDevicePoint (rtx - ltx + 1, bottom - top + 1), rop); X X return; X } X X for (i = top, j = 0; i <= bottom; i++, j++) X { X int lx = Xvalue (lefttop.dx, lefttop.dy, leftbottom.dx, leftbottom.dy, i), X rx = Xvalue (righttop.dx, righttop.dy, rightbottom.dx,rightbottom.dy, i); X X if (rx < lx) X temp = rx, rx = lx, lx = temp; X X left [j] = lx; right [j] = rx; X } X BitBltBlob (to, top, bottom - top, left, right, single_rop [rop]); X } END_OF_FILE if test 1924 -ne `wc -c <'source/trapezoid.c'`; then echo shar: \"'source/trapezoid.c'\" unpacked with wrong size! fi # end of 'source/trapezoid.c' fi echo shar: End of archive 1 \(of 18\). cp /dev/null ark1isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 18 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0