xref: /csrg-svn/local/transcript/lib/psdit.pro (revision 37481)
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