xref: /csrg-svn/local/transcript/lib/psdit.pro (revision 34805)
1*34805Sedward%	@(#)psdit.pro	1.4 06/22/88
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
55*34805Sedward/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{
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
23032181Sedward gsave 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
23832181Sedward grestore
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