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