1*37481Sedward% @(#)psdit.pro 1.5 04/22/89 232175Sedward% lib/psdit.pro -- prolog for psdit (ditroff) files 332175Sedward% Copyright (c) 1984, 1985 Adobe Systems Incorporated. All Rights Reserved. 432175Sedward% last edit: shore Sat Nov 23 20:28:03 1985 532175Sedward% RCSID: $Header: psdit.pro,v 2.1 85/11/24 12:19:43 shore Rel $ 632175Sedward 732181Sedward% Changed by Edward Wang (edward@ucbarpa.berkeley.edu) to handle graphics, 832181Sedward% 17 Feb, 87. 932181Sedward 1032175Sedward/$DITroff 140 dict def $DITroff begin 1132175Sedward/fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def 1232181Sedward/xi{0 72 11 mul translate 72 resolution div dup neg scale 0 0 moveto 1332181Sedward /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F 1432181Sedward /pagesave save def}def 1532175Sedward/PB{save /psv exch def currentpoint translate 1632181Sedward resolution 72 div dup neg scale 0 0 moveto}def 1732175Sedward/PE{psv restore}def 1832175Sedward/arctoobig 90 def /arctoosmall .05 def 1932175Sedward/m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def 2032175Sedward/tan{dup sin exch cos div}def 2132175Sedward/point{resolution 72 div mul}def 2232175Sedward/dround {transform round exch round exch itransform}def 2332175Sedward/xT{/devname exch def}def 2432175Sedward/xr{/mh exch def /my exch def /resolution exch def}def 2532175Sedward/xp{}def 2632175Sedward/xs{docsave restore end}def 2732175Sedward/xt{}def 2832175Sedward/xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not 2932175Sedward {fonts slotno fontname findfont put fontnames slotno fontname put}if}def 3032175Sedward/xH{/fontheight exch def F}def 3132175Sedward/xS{/fontslant exch def F}def 3232175Sedward/s{/fontsize exch def /fontheight fontsize def F}def 3332175Sedward/f{/fontnum exch def F}def 3432181Sedward/F{fontheight 0 le{/fontheight fontsize def}if 3532181Sedward fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore 3632181Sedward fontslant 0 ne{1 0 fontslant tan 1 0 0 m2 astore m3 concatmatrix}if 3732181Sedward makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}def 3832175Sedward/X{exch currentpoint exch pop moveto show}def 3932175Sedward/N{3 1 roll moveto show}def 4032175Sedward/Y{exch currentpoint pop exch moveto show}def 4132175Sedward/S{show}def 4232175Sedward/ditpush{}def/ditpop{}def 4332175Sedward/AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}def 4432175Sedward/AN{4 2 roll moveto 0 exch ashow}def 4532175Sedward/AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}def 4632175Sedward/AS{0 exch ashow}def 4732175Sedward/MX{currentpoint exch pop moveto}def 4832175Sedward/MY{currentpoint pop exch moveto}def 4932175Sedward/MXY{moveto}def 5032175Sedward/cb{pop}def % action on unknown char -- nothing for now 5132175Sedward/n{}def/w{}def 5232175Sedward/p{pop showpage pagesave restore /pagesave save def}def 5332181Sedward/Dt{/Dlinewidth exch def}def 1 Dt 5432181Sedward/Ds{/Ddash exch def}def -1 Ds 5534805Sedward/i{/Dstipple exch def}def 1 i 5632181Sedward/Dsetlinewidth{2 Dlinewidth mul setlinewidth}def 5732181Sedward/Dsetdash{Ddash 4 eq{[8 12]}{Ddash 16 eq{[32 36]} 5832181Sedward {Ddash 20 eq{[32 12 8 12]}{[]}ifelse}ifelse}ifelse 0 setdash}def 5932181Sedward/Dstroke{gsave Dsetlinewidth Dsetdash 1 setlinecap stroke grestore 6032181Sedward currentpoint newpath moveto}def 6132181Sedward/Dl{rlineto Dstroke}def 6232175Sedward/arcellipse{/diamv exch def /diamh exch def oldmat currentmatrix pop 6332175Sedward currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def 6432175Sedward currentpoint exch rad add exch rad -180 180 arc oldmat setmatrix}def 6532181Sedward/Dc{dup arcellipse Dstroke}def 6632181Sedward/De{arcellipse Dstroke}def 6732175Sedward/Da{/endv exch def /endh exch def /centerv exch def /centerh exch def 6832175Sedward /cradius centerv centerv mul centerh centerh mul add sqrt def 6932175Sedward /eradius endv endv mul endh endh mul add sqrt def 7032175Sedward /endang endv endh atan def 7132175Sedward /startang centerv neg centerh neg atan def 7232175Sedward /sweep startang endang sub dup 0 lt{360 add}if def 7332175Sedward sweep arctoobig gt 7432175Sedward {/midang startang sweep 2 div sub def /midrad cradius eradius add 2 div def 7532175Sedward /midh midang cos midrad mul def /midv midang sin midrad mul def 7632175Sedward midh neg midv neg endh endv centerh centerv midh midv Da 7732181Sedward Da} 7832175Sedward {sweep arctoosmall ge 7932175Sedward {/controldelt 1 sweep 2 div cos sub 3 sweep 2 div sin mul div 4 mul def 8032181Sedward centerv neg controldelt mul centerh controldelt mul 8132181Sedward endv neg controldelt mul centerh add endh add 8232181Sedward endh controldelt mul centerv add endv add 8332181Sedward centerh endh add centerv endv add rcurveto Dstroke} 8432181Sedward {centerh endh add centerv endv add rlineto Dstroke} 8532181Sedward ifelse} 8632181Sedward ifelse}def 8732181Sedward/Dpatterns[ 8832181Sedward[%cf[widthbits] 8932181Sedward[8<0000000000000010>] 9032181Sedward[8<0411040040114000>] 9132181Sedward[8<0204081020408001>] 9232181Sedward[8<0000103810000000>] 9332181Sedward[8<6699996666999966>] 9432181Sedward[8<0000800100001008>] 9532181Sedward[8<81c36666c3810000>] 9632181Sedward[8<0f0e0c0800000000>] 9732181Sedward[8<0000000000000010>] 9832181Sedward[8<0411040040114000>] 9932181Sedward[8<0204081020408001>] 10032181Sedward[8<0000001038100000>] 10132181Sedward[8<6699996666999966>] 10232181Sedward[8<0000800100001008>] 10332181Sedward[8<81c36666c3810000>] 10432181Sedward[8<0f0e0c0800000000>] 10532181Sedward[8<0042660000246600>] 10632181Sedward[8<0000990000990000>] 10732181Sedward[8<0804020180402010>] 10832181Sedward[8<2418814242811824>] 10932181Sedward[8<6699996666999966>] 11032181Sedward[8<8000000008000000>] 11132181Sedward[8<00001c3e363e1c00>] 11232181Sedward[8<0000000000000000>] 11332181Sedward[32<00000040000000c00000004000000040000000e0000000000000000000000000>] 11432181Sedward[32<00000000000060000000900000002000000040000000f0000000000000000000>] 11532181Sedward[32<000000000000000000e0000000100000006000000010000000e0000000000000>] 11632181Sedward[32<00000000000000002000000060000000a0000000f00000002000000000000000>] 11732181Sedward[32<0000000e0000000000000000000000000000000f000000080000000e00000001>] 11832181Sedward[32<0000090000000600000000000000000000000000000007000000080000000e00>] 11932181Sedward[32<00010000000200000004000000040000000000000000000000000000000f0000>] 12032181Sedward[32<0900000006000000090000000600000000000000000000000000000006000000>]] 12132181Sedward[%ug 12232181Sedward[8<0000020000000000>] 12332181Sedward[8<0000020000002000>] 12432181Sedward[8<0004020000002000>] 12532181Sedward[8<0004020000402000>] 12632181Sedward[8<0004060000402000>] 12732181Sedward[8<0004060000406000>] 12832181Sedward[8<0006060000406000>] 12932181Sedward[8<0006060000606000>] 13032181Sedward[8<00060e0000606000>] 13132181Sedward[8<00060e000060e000>] 13232181Sedward[8<00070e000060e000>] 13332181Sedward[8<00070e000070e000>] 13432181Sedward[8<00070e020070e000>] 13532181Sedward[8<00070e020070e020>] 13632181Sedward[8<04070e020070e020>] 13732181Sedward[8<04070e024070e020>] 13832181Sedward[8<04070e064070e020>] 13932181Sedward[8<04070e064070e060>] 14032181Sedward[8<06070e064070e060>] 14132181Sedward[8<06070e066070e060>] 14232181Sedward[8<06070f066070e060>] 14332181Sedward[8<06070f066070f060>] 14432181Sedward[8<060f0f066070f060>] 14532181Sedward[8<060f0f0660f0f060>] 14632181Sedward[8<060f0f0760f0f060>] 14732181Sedward[8<060f0f0760f0f070>] 14832181Sedward[8<0e0f0f0760f0f070>] 14932181Sedward[8<0e0f0f07e0f0f070>] 15032181Sedward[8<0e0f0f0fe0f0f070>] 15132181Sedward[8<0e0f0f0fe0f0f0f0>] 15232181Sedward[8<0f0f0f0fe0f0f0f0>] 15332181Sedward[8<0f0f0f0ff0f0f0f0>] 15432181Sedward[8<1f0f0f0ff0f0f0f0>] 15532181Sedward[8<1f0f0f0ff1f0f0f0>] 15632181Sedward[8<1f0f0f8ff1f0f0f0>] 15732181Sedward[8<1f0f0f8ff1f0f0f8>] 15832181Sedward[8<9f0f0f8ff1f0f0f8>] 15932181Sedward[8<9f0f0f8ff9f0f0f8>] 16032181Sedward[8<9f0f0f9ff9f0f0f8>] 16132181Sedward[8<9f0f0f9ff9f0f0f9>] 16232181Sedward[8<9f8f0f9ff9f0f0f9>] 16332181Sedward[8<9f8f0f9ff9f8f0f9>] 16432181Sedward[8<9f8f1f9ff9f8f0f9>] 16532181Sedward[8<9f8f1f9ff9f8f1f9>] 16632181Sedward[8<bf8f1f9ff9f8f1f9>] 16732181Sedward[8<bf8f1f9ffbf8f1f9>] 16832181Sedward[8<bf8f1fdffbf8f1f9>] 16932181Sedward[8<bf8f1fdffbf8f1fd>] 17032181Sedward[8<ff8f1fdffbf8f1fd>] 17132181Sedward[8<ff8f1fdffff8f1fd>] 17232181Sedward[8<ff8f1ffffff8f1fd>] 17332181Sedward[8<ff8f1ffffff8f1ff>] 17432181Sedward[8<ff9f1ffffff8f1ff>] 17532181Sedward[8<ff9f1ffffff9f1ff>] 17632181Sedward[8<ff9f9ffffff9f1ff>] 17732181Sedward[8<ff9f9ffffff9f9ff>] 17832181Sedward[8<ffbf9ffffff9f9ff>] 17932181Sedward[8<ffbf9ffffffbf9ff>] 18032181Sedward[8<ffbfdffffffbf9ff>] 18132181Sedward[8<ffbfdffffffbfdff>] 18232181Sedward[8<ffffdffffffbfdff>] 18332181Sedward[8<ffffdffffffffdff>] 18432181Sedward[8<fffffffffffffdff>] 18532181Sedward[8<ffffffffffffffff>]] 18632181Sedward[%mg 18732181Sedward[8<8000000000000000>] 18832181Sedward[8<0822080080228000>] 18932181Sedward[8<0204081020408001>] 19032181Sedward[8<40e0400000000000>] 19132181Sedward[8<66999966>] 19232181Sedward[8<8001000010080000>] 19332181Sedward[8<81c36666c3810000>] 19432181Sedward[8<f0e0c08000000000>] 19532181Sedward[16<07c00f801f003e007c00f800f001e003c007800f001f003e007c00f801f003e0>] 19632181Sedward[16<1f000f8007c003e001f000f8007c003e001f800fc007e003f001f8007c003e00>] 19732181Sedward[8<c3c300000000c3c3>] 19832181Sedward[16<0040008001000200040008001000200040008000000100020004000800100020>] 19932181Sedward[16<0040002000100008000400020001800040002000100008000400020001000080>] 20032181Sedward[16<1fc03fe07df0f8f8f07de03fc01f800fc01fe03ff07df8f87df03fe01fc00f80>] 20132181Sedward[8<80>] 20232181Sedward[8<8040201000000000>] 20332181Sedward[8<84cc000048cc0000>] 20432181Sedward[8<9900009900000000>] 20532181Sedward[8<08040201804020100800020180002010>] 20632181Sedward[8<2418814242811824>] 20732181Sedward[8<66999966>] 20832181Sedward[8<8000000008000000>] 20932181Sedward[8<70f8d8f870000000>] 21032181Sedward[8<0814224180402010>] 21132181Sedward[8<aa00440a11a04400>] 21232181Sedward[8<018245aa45820100>] 21332181Sedward[8<221c224180808041>] 21432181Sedward[8<88000000>] 21532181Sedward[8<0855800080550800>] 21632181Sedward[8<2844004482440044>] 21732181Sedward[8<0810204080412214>] 21832181Sedward[8<00>]]]def 21932181Sedward/Dfill{ 220*37481Sedward save 6 1 roll 22132181Sedward transform /maxy exch def /maxx exch def 22232181Sedward transform /miny exch def /minx exch def 22332181Sedward minx maxx gt{/minx maxx /maxx minx def def}if 22432181Sedward miny maxy gt{/miny maxy /maxy miny def def}if 22532181Sedward Dpatterns Dstipple 1 sub get exch 1 sub get 22632181Sedward aload pop /stip exch def /stipw exch def /stiph 128 def 22732181Sedward /imatrix[stipw 0 0 stiph 0 0]def 22832181Sedward /tmatrix[stipw 0 0 stiph 0 0]def 22932181Sedward /minx minx cvi stiph idiv stiph mul def 23032181Sedward /miny miny cvi stipw idiv stipw mul def 231*37481Sedward eoclip 0 setgray 23232181Sedward miny stiph maxy{ 23332181Sedward tmatrix exch 5 exch put 23432181Sedward minx stipw maxx{ 23532181Sedward tmatrix exch 4 exch put tmatrix setmatrix 23632181Sedward stipw stiph true imatrix {stip} imagemask 23732181Sedward }for 23832181Sedward }for 239*37481Sedward restore 24032181Sedward}def 24132181Sedward/Dp{Dfill Dstroke}def 24232181Sedward/DP{Dfill currentpoint newpath moveto}def 24332181Sedwardend 24432175Sedward 24532175Sedward/ditstart{$DITroff begin 24632175Sedward /nfonts 60 def % NFONTS makedev/ditroff dependent! 24732175Sedward /fonts[nfonts{0}repeat]def 24832175Sedward /fontnames[nfonts{()}repeat]def 24932175Sedward/docsave save def 25032175Sedward}def 25132175Sedward 25232175Sedward% character outcalls 25332181Sedward/oc{ 25432181Sedward /pswid exch def /cc exch def /name exch def 25532181Sedward /ditwid pswid fontsize mul resolution mul 72000 div def 25632181Sedward /ditsiz fontsize resolution mul 72 div def 25732181Sedward ocprocs name known{ocprocs name get exec}{name cb}ifelse 25832181Sedward}def 25932175Sedward/fractm [.65 0 0 .6 0 0] def 26032181Sedward/fraction{ 26132181Sedward /fden exch def /fnum exch def gsave /cf currentfont def 26232181Sedward cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto 26332181Sedward fnum show rmoveto currentfont cf setfont(\244)show setfont fden show 26432181Sedward grestore ditwid 0 rmoveto 26532181Sedward}def 26632181Sedward/oce{grestore ditwid 0 rmoveto}def 26732181Sedward/dm{ditsiz mul}def 26832175Sedward/ocprocs 50 dict def ocprocs begin 26932175Sedward(14){(1)(4)fraction}def 27032175Sedward(12){(1)(2)fraction}def 27132175Sedward(34){(3)(4)fraction}def 27232175Sedward(13){(1)(3)fraction}def 27332175Sedward(23){(2)(3)fraction}def 27432175Sedward(18){(1)(8)fraction}def 27532175Sedward(38){(3)(8)fraction}def 27632175Sedward(58){(5)(8)fraction}def 27732175Sedward(78){(7)(8)fraction}def 27832175Sedward(sr){gsave 0 .06 dm rmoveto(\326)show oce}def 27932175Sedward(is){gsave 0 .15 dm rmoveto(\362)show oce}def 28032175Sedward(->){gsave 0 .02 dm rmoveto(\256)show oce}def 28132175Sedward(<-){gsave 0 .02 dm rmoveto(\254)show oce}def 28232175Sedward(==){gsave 0 .05 dm rmoveto(\272)show oce}def 28333999Sedward(uc){gsave currentpoint 400 .009 dm mul add translate 28433999Sedward 8 -8 scale ucseal oce}def 28532175Sedwardend 28632175Sedward 28732175Sedward% an attempt at a PostScript FONT to implement ditroff special chars 28832175Sedward% this will enable us to 28932175Sedward% cache the little buggers 29032175Sedward% generate faster, more compact PS out of psdit 29132175Sedward% confuse everyone (including myself)! 29232175Sedward50 dict dup begin 29332175Sedward/FontType 3 def 29432175Sedward/FontName /DIThacks def 29532175Sedward/FontMatrix [.001 0 0 .001 0 0] def 29632175Sedward/FontBBox [-260 -260 900 900] def% a lie but ... 29732175Sedward/Encoding 256 array def 29832175Sedward0 1 255{Encoding exch /.notdef put}for 29932175SedwardEncoding 30032175Sedward dup 8#040/space put %space 30132175Sedward dup 8#110/rc put %right ceil 30232175Sedward dup 8#111/lt put %left top curl 30332175Sedward dup 8#112/bv put %bold vert 30432175Sedward dup 8#113/lk put %left mid curl 30532175Sedward dup 8#114/lb put %left bot curl 30632175Sedward dup 8#115/rt put %right top curl 30732175Sedward dup 8#116/rk put %right mid curl 30832175Sedward dup 8#117/rb put %right bot curl 30932175Sedward dup 8#120/rf put %right floor 31032175Sedward dup 8#121/lf put %left floor 31132175Sedward dup 8#122/lc put %left ceil 31232175Sedward dup 8#140/sq put %square 31332175Sedward dup 8#141/bx put %box 31432175Sedward dup 8#142/ci put %circle 31532175Sedward dup 8#143/br put %box rule 31632175Sedward dup 8#144/rn put %root extender 31732175Sedward dup 8#145/vr put %vertical rule 31832175Sedward dup 8#146/ob put %outline bullet 31932175Sedward dup 8#147/bu put %bullet 32032175Sedward dup 8#150/ru put %rule 32132175Sedward dup 8#151/ul put %underline 32232175Sedward pop 32332175Sedward/DITfd 100 dict def 32432175Sedward/BuildChar{0 begin 32532175Sedward /cc exch def /fd exch def 32632175Sedward /charname fd /Encoding get cc get def 32732175Sedward /charwid fd /Metrics get charname get def 32832175Sedward /charproc fd /CharProcs get charname get def 32932175Sedward charwid 0 fd /FontBBox get aload pop setcachedevice 33032175Sedward 2 setlinejoin 40 setlinewidth 33132175Sedward newpath 0 0 moveto gsave charproc grestore 33232175Sedward end}def 33332175Sedward/BuildChar load 0 DITfd put 33432175Sedward/CharProcs 50 dict def 33532175SedwardCharProcs begin 33632175Sedward/space{}def 33732175Sedward/.notdef{}def 33832175Sedward/ru{500 0 rls}def 33932175Sedward/rn{0 840 moveto 500 0 rls}def 34032175Sedward/vr{0 800 moveto 0 -770 rls}def 34132175Sedward/bv{0 800 moveto 0 -1000 rls}def 34232181Sedward/br{0 840 moveto 0 -1000 rls}def 34332175Sedward/ul{0 -140 moveto 500 0 rls}def 34432175Sedward/ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def 34532175Sedward/bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def 34632175Sedward/sq{80 0 rmoveto currentpoint dround newpath moveto 34732175Sedward 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def 34832175Sedward/bx{80 0 rmoveto currentpoint dround newpath moveto 34932175Sedward 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def 35032175Sedward/ci{500 360 rmoveto currentpoint newpath 333 0 360 arc 35132175Sedward 50 setlinewidth stroke}def 35232175Sedward 35332175Sedward/lt{0 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def 35432175Sedward/lb{0 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def 35532175Sedward/rt{0 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def 35632175Sedward/rb{0 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def 35732175Sedward/lk{0 800 moveto 0 300 -300 300 s4 arcto pop pop 1000 sub 35832175Sedward 0 300 4 2 roll s4 a4p 0 -200 lineto stroke}def 35932175Sedward/rk{0 800 moveto 0 300 s2 300 s4 arcto pop pop 1000 sub 36032175Sedward 0 300 4 2 roll s4 a4p 0 -200 lineto stroke}def 36132175Sedward/lf{0 800 moveto 0 -1000 rlineto s4 0 rls}def 36232175Sedward/rf{0 800 moveto 0 -1000 rlineto s4 neg 0 rls}def 36332175Sedward/lc{0 -200 moveto 0 1000 rlineto s4 0 rls}def 36432175Sedward/rc{0 -200 moveto 0 1000 rlineto s4 neg 0 rls}def 36532175Sedwardend 36632175Sedward 36732175Sedward/Metrics 50 dict def Metrics begin 36832175Sedward/.notdef 0 def 36932175Sedward/space 500 def 37032175Sedward/ru 500 def 37132175Sedward/br 0 def 37232175Sedward/lt 416 def 37332175Sedward/lb 416 def 37432175Sedward/rt 416 def 37532175Sedward/rb 416 def 37632175Sedward/lk 416 def 37732175Sedward/rk 416 def 37832175Sedward/rc 416 def 37932175Sedward/lc 416 def 38032175Sedward/rf 416 def 38132175Sedward/lf 416 def 38232175Sedward/bv 416 def 38332175Sedward/ob 350 def 38432175Sedward/bu 350 def 38532175Sedward/ci 750 def 38632175Sedward/bx 750 def 38732175Sedward/sq 750 def 38832175Sedward/rn 500 def 38932175Sedward/ul 500 def 39032175Sedward/vr 0 def 39132175Sedwardend 39232175Sedward 39332175SedwardDITfd begin 39432175Sedward/s2 500 def /s4 250 def /s3 333 def 39532175Sedward/a4p{arcto pop pop pop pop}def 39632175Sedward/2cx{2 copy exch}def 39732175Sedward/rls{rlineto stroke}def 39832175Sedward/currx{currentpoint pop}def 39932175Sedward/dround{transform round exch round exch itransform} def 40032175Sedwardend 40132175Sedwardend 40232175Sedward/DIThacks exch definefont pop 403