Psroff 2.0 Part 03 of 16
Chris Lewis
clewis at ecicrl.UUCP
Sat Nov 17 15:57:31 AEST 1990
Submitted-by: Chris Lewis <clewis at ecicrl.uucp>
Archive-name: psroff2.0/Part03
#! /bin/sh
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix at uunet.uu.net if you want that tool.
# Contents: fonts.lj/S.20.pk.UU pk.c utils/maps/alnum.ROMAN8
# utils/psdtwd.S
# Wrapped by clewis at ecicrl on Fri Nov 16 23:35:19 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
echo If this archive is complete, you will see the following message:
echo ' "shar: End of archive 3 (of 16)."'
if test -f 'fonts.lj/S.20.pk.UU' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'fonts.lj/S.20.pk.UU'\"
else
echo shar: Extracting \"'fonts.lj/S.20.pk.UU'\" \(11597 characters\)
sed "s/^X//" >'fonts.lj/S.20.pk.UU' <<'END_OF_FILE'
Xtable
X !"#$%&'()*+,-./0123456789:;<=>?
X at ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
Xbegin 644 fonts.lj/S.20.pk
XM]UD``4``````````!":N``0FKJ",(0```$`[4_H]WB_=/]P]SSW//<XCW//<
XM\]SB/<\]SSW//<XCW//<\]SB/<\]SSW/.^+!.^/!.]3!.\:_.\$5OSNB-;T[
XMH56].Y%EO#PO6[/#];D\1;@\9;<\9;8\A;4\CUM#RELSRELCS%L3S/6P/.]9
XM/06#T/5STO53U/4SU5(]?U$]CWV6VUVTW?/(L+$D````6$TF^R3!C7C+PM'"
XMQL;-QL/)RGA<%UP,9L%+6ZQ%Q3E,*L)<<W3%G`7)-CQYI,PE/)F$S30\J67.
XM(SS)1<\R/-DET2(LZA32(3S\'371P-1-*M5-.=5-.M1-2M--6=--6M)-3`T5
XMT\'/,2TD&LXB+14IS3(\]4G,,RSE:<HT/-2)R34LQ*G'-CR5P)Q4<\=<*L))
XM/%7$JUM,%L;`5\%8?*R</&S<;&PM'"RXUXP0H"HE````1#DR^RV_78?6G4Y+
XM#4G6?84`*<W!!''<`"G%V'UIU.2PU)UGV%OPP(\F````1#DF^R2X`2>=#=E]
XM39MM;6;%B=-=!,C07131BUTCTXE=(]6(33/6ADTSV'5-0]ES35+:@DU2V\U3
XMW+U2W:UBWIUBWWURWXUB`0C5(!%]4@$)U"`0K3/>O4+>S3+=0HTBW4-](]M%
XM?2+:1HT3V$B-$]99C0/56XT#TUT(T#T%TYQ);6T'T]G)S=JX`2>P;"H```!$
XM*2KS*1+7(4U9TU%=%37/55S5=<M97)6UQUP5Q5PUPUQ5P5QUM<E97+5US55<
XM]37145TYU7U_77?5G345T5-<]57-5URUE<E;7'7!7%7#7#7%7!7'6UR5E<M7
XM7-55SU-=%173G502UR%@#2T```!$-03Y%AG!TQG!H$P\````/"\M^BK2'13.
XM;,;,;,;,;+?+?+?+;,;,;,;+?+?+?+;,;,;,;+?-7/?0;0;0;0;0?/?/?0;0
XM;0;0;0?/?/?0;0;0;0;0;032$:A*/0```#PO+/HI30;0;0;0;0;0?/?/?0;0
XM;0;0;0?/?/?0;0;0;0;0?/7-?+;,;,;,;+?+?+?+;,;,;,;+?+?+?+;,;,;,
XM;,;.31'2N"Q#````-RXX_#?B`0FL6JC)>HRGF,MIC,6?C-2>.,XYC.3CB,\^
XMU(C9O0XL[("@CD0```!)0#K\.</T`0;>^-SZVOL=A!G7,IUD.=4TG419TS:=
XM)'G1.)T/.ISCL9S$L:RSLYRDM)R3M9R$MIQSMYQDN)Q3N9Q$NIPSNYPDO)P3
XMO9P$OIOSOYOO/!F\/#FZ3#JY/%FX3&FW/'FV3(FU/)FT3*FS/+FR3,FQ/-FP
XM3.FCSYE-"8/1E_WU\!$P$Q!5L()(````1#DZ^SC+O?Q=EY?4;#;0?%?-;);+
XM;+;(?-?%?/?#?1?";3;!;5:WU7GWUW?WV76-F$]]MS^-N"]V/+-G&&/+-L3F
XM;1;$XF/+-H%]UR^-N#]]MTC9A??9=_?7>7U7MM5L!]-\%]%\-\]\5L]L=\M\
XMILELUL=M!L-M1Y?8Q]Z\L*!^2P```#TV.OTYON)-;B;4^-+BK0^QSS&,Y!G-
XM\SC,0YR_-8RC:<GS>, at XG'\YC&.IQ?.PC$.QG#.RC"2RG!.SG!.TC`2TF_.U
XMF_.VB^2VF].WF].XB\2XF[\[J+H[N;GSO(N#O9M_.^BV._FU/`BT3`BT6_FQ
XM>_FK"\L5XK:TNY`K3@```#LR-_PV'EQB/`,?3`?CPC#ZXSLCIN6XIN,[(P`5
XM[D/"?\!!/`,N7&&H&%````!".3C\-P@'F^FT[4B^BTJ\I^*]F]"H at 5(````_
XM-#C[-^+7.K^R.PPI2L2$K$=:Q&6PQ%:L5'K$2*PTBL0YK#.JPDFPPCJL(["L
XM$[&L`[&PSZT*T*S[#/K0K0^M"=&-%]-=-=-=1-1-1,$[5,([1,,[-,0[),1+
XM%,4[%,8[!<5*7&25QTA<=77'9TQW9,>%3&I$P[)-4]8OUR#`35,````@("[]
XM)-6M;3T&AJ71*DW4WDWDWDWDWSWTWN)-Y=[TW^)=YMU]R-R-NMJ]G-C0U]'7
XMT=?0V,V;VJVXW'W6WO7>3>7>37)4V*VVT*!/5````$0Y.?LXA\![.QNK&K6W
XMM'M[2W:XLKA;JQN3O*NR:)F88DL8A[%!2T=GLWMF9K5K9T:V:W9%MSNU-M!B
XM72]272L-3CK5[#C4L<KBP;/`<U4````_-#C[-\XMX!2P'N9P'L`6V=Z1<IV7
XM5V?5=WA])X>7T'EZ>HI[AXM\AGQ]!UC'T(.<?0DOC0?1@>6=!]&?&-!]&"G'
XMT).,?0A7Q]!VBWR'BGN*>7I]!X>7TG=X?5=79]F1<IWMD!;`'>9P'K`4XM[0
XML&)7````1#DX^S?#XL_:L!3F?-C%?%QL-\.CC"?"AXP7P8GWP7P7J,!\"+Z7
XMP'P'P>-[>WP_>GI\5J>FQGEY?':7ELAX>'R7=W?+=G9\YE=6T7-S?4<7%]C'
XMWK`4YG`4O:XL_#"P?U@````_-CG\.,G`VLC3F)SHPHRWQGR'RGQ7S'PHSHN<
XMZ:C0B8TH>=*6C4A?G4D^B=:3C6A.*=25C4AITI?XTHF-"+]]!\%\Y\-LYL1\
XMQ\5LQL=<Q<GURERTRDP/.DR$HQ.CR#HR.DQDHR\[/&.S)++&*T-*/$.D3CQ<
XM3%7\3$Q#F)=9````24`Z_#<$8=0_TET&C%-XPSB,))C!. at C`2AB_.BB^2CB]
XM.DB\2EB[.FBZ2GBY.HBX2IBW.JBV2KBU.M>T.NBS.OBQ.PBP2QBO.RBN2SBM
XM.TBL2UBK.VBJ2WBI.XBH2YBG.ZBF2[BE.\BD2]BC._>B/`BA/!B3PHA,.'/$
XMADQ84\:$3'@SR(),F!/*HLOZ#-^,]M'TM,"36@```"XL._PYV)`4T=]7;;3%
XMV4TEUDU%U$UETDUUTCV5T&UVQ]=<?7:HUVJ-A:C8:7V6L]MN,!EM>*;3T7?1
XM:$5\;#1[72,WEM0R>&UB&';7IVV99MJ5?:E/?;A/?<@XW'1]UT]]QTC<=/?<
XM=7W&9]MV;<9_;;:'V6IMAK;7;0;5;1;4;3;2;5;'UWA]O5WM(!.=L*!?7```
XM`$0U1_DVURUETWT8T)SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSJSY
XMT7TXTYTYTYTYTYTYTYTYTYTYTYTYTYTYTYTYTYTYTYTYTYTYTXU&UC`"O=@0
XM/QV!H%]>````1#5'^382UUU7U(TYTYTYTYTYTYTYTYTYTYTYTYTYTYTYTYTY
XMTYTYTYTYTYTWTHT)SYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYSYT(
XMTFU3`"[=@0/QV!!8"5\````J*@,`[-C`@6$````X,";\)-9P&=`!1F4!!:7=
XM;%PY;16SAM)I1VU%DW;5:#9M9G17UF<V;89C5]AE1'V64U?99$2-ED-7VF-%
XM?:8S9]IB18VF(V?;83=]NG?;F'VXE]MZ;<>O;<:VW'MMJ+;9G%UT%F,VU4)F
XM-%TT5515T$=D.%=J4TG2T)T8UE;`NV(````Q,$K_.0%(`8T`%%=0$$M=U-%=
XMM-)=I-1=A-5==-9=9-==5-A=4]AM0]EM--EM,]IM)-E](]IM)-IM(]IM,]I=
XM--EM,]EM0ZDEU4C4UCA';7.-76.J)=1-EM,]M=/SVVT4VVT?/=;0/<?$W'SB
XM/=>TW(OB/=>TW(OTW'Q-M\7;?%VGT&V6T6V&T8UFTC(]5M,S/3;4,TT6U$4\
XM;5-U=M<YT=D\C;0!_B,!]`'^(P'T`?XC`?0!_S`@L&EC````+2XV_R3"?9O(
XM.L/%2,;$.,C"1\G"-X>,!&;`;`-FPUI&3&2C9,=81DR$@V3*-T8\M&-SS#5&
XM3,-3US4]=#38,SV3)-DR/:,4VO,3VWV^)MSUW>)-[B/>]-X][C3=XTW>--[S
XMWRQPP()D````)R,[_#G9?<S85DUDH]1+32303071/%TBT%`10!'U`1]@$'WX
XMWJW:W:W;W+W+V\U]+64YTV9])H?0:7QK:VT&EM%H?26&TU=]-6?45GU$:-1&
XM]]5%C518U3;B?51GU$=M5';5./;42&TTIM)*;13%T3T&P]);3364U65-G-UM
XM8,`X90```",<)?PCU:TM#-.WUGUVV&V&V&V'U_?7]]>-?]M-E8U^1]GC;:7:
XM;:7;72-ET$=:669LT=2(L&EF````)R1*_#C*Y3U3&,S"R5<\=!P,9#G'33/3
XM333334/4333333]---/TT_33]-/TTUT^)--=/C33Y%T_;3]M)])]&-&L[!S,
XM/*Q<G%R<7)Q,O"S<#/G1?2;3XUTTR"I, at X3*14S:T&P0L'AG````+"@V_21U
XMPWN:P(,U=65355.E-%4TMB-F%,!B-JPE%&G#43>,11-WQ9=\2?=\67;&:FQ7
XME\5_EL9J;%>7Q7GVQFIL5Y?%>?;&:FQ7E\5Y]L9J;%>7Q7GVQFIL5Y?%>6QF
XMP#QVU??5]M7WU?;5]]7VU??5;8.PP(-H````*2,[_3G97?G;14UU9=583465
XMTEM-%K707%QL6VT%M=%:;1;X;29WTF=M-F?39FTW]7TW]'U'1]-TC3=/?4='
XMTX/B`21].#C3=/?4='TX1]-U;4=6U&7WTW7WTG9M-G;2>%TFGUT6I=!K707%
XMQM!:;16ETTE=1(761EV$1-NMY=G`/6D````?%R;\)*/6;3]]/VTWT^)M-]/B
XM;3?3]M-]/B;3?3;3?3]L,7M!;#)K0FLR:T)J1%E%6$972%1:O1;`L&QJ````
XM,RLF_"2CVVQEP7Q)M\*[;!08ML`SBGI$BGDV>VDY/!:#S7<\YU3/93T60]%R
XM32O4P]#(RG7`QWJ,9L%\5L)\/WPWPO;%:#)\1W0GQ'<S]L5H,O?%9S-L9F0V
XMQU8S?'531\A3-6RI@\U8L&UK````,RHZ^SB6V)V(UXUWUXU_?8]]>-?WV.)]
XMCWV.)]CWUXU_?8XGV/?5K3O2P-%2?/4WSF.,QE?+9GRFA\AI?':GQFP'Q'P'
XMPWP8P7PWP'Q'M\9Y?'>'R'=\IUC*=(RX*,UR?.<FT'%=)Q/48+!U;````#4O
XM-OXDPCWVQSQGQEQ7Q6Q?;&;$]\5\3VQFQ/?%?$]L9L3WQ7Q/;&;$]\5\3VQF
XMQ/?%?$]L9G-VQ7<V?%=D9\5G-WQ'<VC#AD;XPI8WFT)51KE#53?`9&4SABP8
XMF65\%:]]SVW/?<]MSWW/;<]]QM\]X,!F;0```"LI)?PDA]@TT-=O+0UG=]=I
XM;7:'UGA]9I;7:6UFE]9I?5:FUFIM5J?5:GU&MM1[;4:WTVQ])M!M-=%M)M!]
XM%M%]!M)M!M-L74>UU7I=9I;7:%V'==EU7;9%W6)=[`$)`34!<+!U;@```"<D
XM2OXXR>4]7!RL3%B#PW'!PG2<*,^,^-!]!]"-#WT(T.1])M)])M)RO&R,5X3$
XMQ\1#O%323333733333]-/TTUT^)--=/VTVTGT8T9S\#-PLO$RL3)QLG%R<7*
XMP\S!SJT(TFT_733'*EQSE,E53,O0:\!<;P```"HD)OPDUGW=#79FU%I=%L7&
XMT&IM)9;39VU&9M9D?69&UV-]=O)]=QC7?Q?8<7U]/7TOV'%]>!]]=R;7<VUV
XM1M9T;69FU&=M-I72:FT&Q<;16EU&9M?0W7U at L%UP````,B\E_2.]>MI]QMQM
XMQF at X3%6CA,1:2#Q4M(/$3`.3PTP3A,,\%(332$TSD]-)/32$TEA-+TE-%931
XM]*306DT%EL[UILUJ;-:US.)L!LKVP7R'PFR/;#;)/&/#L'=Q````+2 at V_B3-
XM?2P,YE3,6%R%IL9<!<5<%L-L)<)L-L%<1L!L1OML5J;&:FQ7E\5_EL9Y;%B'
XMQ8^&QGA\6(?%>6QGEL5Y?%>7Q'IL5K?#>HPVN,)L"<!L&;;!<3E<-R15Q62\
XM=F?(]]7VU??5]M7WU?;5]]5M@]?`97(````R+27\(]7=TP$=`!.P%+`4J7C7
XMBGUGT'U'TFU&TVTVU6T7U6T6UFT/;7;'UVQMAL;7>WUVSVV&QM=\;7;078;0
XM]==M%=9M)=9=-=5M1=-M5=)M==!MA<;:6EWE90$=`!9P$+`]<P```"<J)?TC
XMO2K5?7;7;79J/*7`/)7`3)3!3(3"3'3"3(/#3:39]=GTV>)=CB78]MCUV.)M
XM?B;7]]=ME,[`<W0````P*R;]))7:.IUG9#75=45=.4-ETY,W74 at D=M1R.&U6
XM%';6;Q.&UY=]=!.&V$$W?9.VV4MMD[?9.VVCMME*?9.VVCMME+;9.WV$MMD\
XM;83&V#T&UTT&UST6UCTFU3U&TTU&TDUFT$V&L]MW3>T0$YU0L)]U````-"Y*
XM_#C3\][TWO/>]-[SWO3>\][TWO/>]-JM3&SG)#;*945L9G.%PVDY7!:4I;6T
XMM97`/`6&P#P&9L!,%5;!3!;S;"/";R;"3";Q;#/#86PDPL+"3"P?PSPV'VPD
XMPF+VPCPF-L%,%E7!3`9FP#P&A<`\!96TM;6DEL%9.6PU at W;&945LIC0GSL;4
XMK:]-[SWO3>\][TWO/>]-[ST at L)-V````-S`V_21VW+TB-#?0,S5\Y"-WS$,W
XMC*3#?)3$C'3&?&3'?%3)?#3*?"7+?`7,?`3->TSWE-!X31=TTW5-1T35<TUW
XM%-B]FMN-SWWO?<C;K9O807UT-]5$?417TT=]%(?027STM\U,!\Q<!\M<)\I,
XM-\E,5\=,9\9,>,1,EY%4RH<S3,=S),YU,ST'-#+2O<9PP,)W````.35*_3@!
XM?C,"1`).(P)$`DXC`D0"3B,"1`).(]Y=1,.ITCMV0UT3MU15T#J4-EQ*DS=<
XM/()':ST'(X:ST6%':TT6\3AK/3EWL]-!.&M--!-WL]4[;#U$ML/4.WM-0[;#
XMU3ML/42GP]0[;$U#ML/4/&P]-+?#TSQL323&P],]!L/2/1;#T4T6M-!--J/0
XM34:CQ-9I.TUVA*/:9SE-UE-T`0 at C1@%-0!JP(/,"1`).(P)$`DXC`D0"3B,"
XM1`)#`3"PA'@````W-";_)`$CP"U6H]5X34ATU99-:%38=3V71-ID/<4TW%,]
XMU#3=0SR#QT,\=<9"3&;&,_/';&,SQVQ4),9L8S/';&,SQVQ4,\=<8T/'7%1$
XMQEQ$5,9,5%3%7$1DQ&PU9<)\)7;`G`65NJ>7;#:*R!R,#&/&P<5,7#PVPL>Y
XMO+;"?"GD````5`U/W/0^PP#EZ````)AE3^CW775/7/8/8/8/8]-?MQ-?T
XMUTV#V#UTUDU%VTVDVCVCV4V?39[<39]-D]H]H]H]L]M0R#E[````)AE3^CU=
XMM-I-H]H]E-GTV>W$V?39/:/:/:/;/;75/7/8/8/8/8]-?MQ-?TUTV#V#UTUD
XMU%UPL$]\````1#DG^R>WV1G!U3?$TS;&TC7)T#3+SS.'K-0FP9RT)<2,E"7&
XMG&4DR8Q%),N<%B3,MX,\_+0]#)4]+&8]/$<]7!D=EP`X`!L05A`;$&`:?0``
XM`$0Y*/LH&@';&@`"N:`=L:``*YH!VQH!R$U^````)AU3_#TM[SWN(][B/>XC
XMWN(][B/>XSWN(][B/>XCWN(][B/>XCWN(][B/>XCWN(][B/>XCWN(][C/>XC
XMWN(][B/>XCWN(][SWB"@F'\```!$.CS[.:FYFVM+.TLK>K>PN8N9=X:'=ULF
XM1K)56U4EM51+>K=#6XBX4DN8N4+TNFND%;M+N?O$O(O2O8Y=>=5?%-5"734_
XM331%T55<]73/2%S5E<M;!,M+%<E;)<=;1<5;9<-;A<%;I;];Q;U;Y;M<!K=L
XM)K5L1K-L9K%LE:7,6%SE9=!4721$TU)=2M;XV/;:]-PL$,`RH0```"P at 2?HX
XMTB`0]-[VW(VJV,UD%!340D)-)#0TQ41%AE161G1V%928M+/@*M%`$"T@@#6B
XM````6$T>^R/$'2/131/131/13131313131315=$@41T<U<Y,],],],],]-`]
XM!-`]!-`](9;`,J,````L($GZ.-(@$.`J31.TN)25%G1V1E16A41%Q#0TTD)"
XM3404%-;-BMJ-SVWO0!`M((`UI````%A-'OLCEATCT$T#T$T#T$STSTSTSTST
XMSES=$042T571313131313131/131/131/2'$L&NF````+"4L_2H2UEU'THT:
XMS\#-0GS$.,I%C(1WQTB,5*?$3`?"3!C`3#>TQ(E,:'3(=DR81,N"3-<?3.O-
XM<4RX),F$3(=DQH=,2)3#>TP8P$P'PDI\1(C%1WQT6,A#C*0GS,#-K/C1?275
XM+6"P:Z@````L)2S]*M8M5=)]&,^LW`S'),J#3(A4QW=,6(3$>DPGP$P(P4M\
XM-)C$1XQD9\A$C)0HRT%\V_SD%\U"C+1(R49\A'C&28Q$M\-,",%,)\!,1Z3%
XMB$QW=,B%3*@TS'),W`SZT8TGU%UB$%@)L````"HJ`P`^V+`QM0```#LP,OLP
XM$MXA[63<G:44VD)=A3381%UE5=17;0:7S'N<:<'`K`Q-+(SLW(U,#&"P,;8`
XM```[,#+[,,;`U,C-SLC2Q,"L#!G&FWS'EM!G7455UE1-A#784DVD%=J>UMQ!
XM+>(0L%6W````.RPV^2_*R<?.Q-#"T<*M2-=]AMEME=I=I=M-M=I=M-M=M-M=
XMOB3;7;]-S?$&<?3<7<XDW%W$W%W$W%W%W$W%W%W%W&VVVWVHVJU]'%T,;.RL
XMD:!.N@```$0U-ODONL2WR;3+LLRQL,Z-%])M-=1=1=5-5=1=5-5=5-5=7B35
XM75Z4UEUN)-9=9-9=9-9=9=9-9=9=9=9M5]2-.PT<RUR[;)NL0:!.NP```$0U
XM-ODO'$NLFVR[7,T;#3C4?5;676767636767636763676XDUEZ=9-5>+53575
XM357535747535747473;2?1C.L+',LLNTR;?$NJ!5O@```$0U1_DVNL2WR;3+
XMLLRQL,Z-%])M-=1=1=1=5-5=5-5=5-5=7B3575Z$UEUN)-9=9-9=9-9=9-9=
XM9=9=9=9M5]2-.PT<RUR[;)NL0`*_UC_8/6&@5;\```!$-4?Y-AQ+K)MLNUS-
XM&PTXU'U6UEUEUEUEUDUEUDUEUDUEUN)-9>C6357BU4U5U4U5U4U5U4U5U%U%
XMU%TVTGT8SK"QS+++M,FWQ``M'6/]@]8P<!+(````.S`7^QT:8=@:?HFD2E(0
XML##,````+"$B^R7!?+P<;%P\?!R;RYS7SU_1/BTQ#LXATS_17/?-G+O)P<?#
XMQ<;!RWP0D*_-````6$U+^SFVH]&MR;/$M\"CH:.\H*N at N8L8MHM8LWN7L6O6
XMKVOVK5PUJUQ5J5QUIUR5I5RUI$S4HUS5H5SUH$T4E=%8331UTU9-5%755/37
XM0UUU+B3905V9Z at VYV5XA390EUU/TUT1=55351ETU=--(7164T4H%SUH5S5HT
XMS4I%RUI5R5IUQUJ5Q5JUPUK6OVKVO6L7N7LXM8MHL8N:"KH+RCH:/`M\2SR:
XMW1H[8,`HS@```"<<2_LYQ-KH;:Y4W.(M%F)F&C(P/S(Z%F)FT?+<Y$VNW6VN
XMTDR`.\\````G'$O[.9-)[G:>Y$H/*5A"2!VQ=25Y7RH.1)[G:>2[2>YVGN1*
XM#RE80E<=L80DB5\J#D2>YVGDD[!4U0```"4C2_LYSET(SD,\Q%/+1%R5)\E#
XM?BR%-\A5/)Y5T6T>-='D;171Y6T'T.1M!]#E;171Y&T>-=%M'E7(-EQ_=%Q_
XM=$R'-,E53*-4S#-,Z-!<X-"7V````"PC1?P^`<("+T`@4"!`%W-`%`$P$E=P
XM$4M`$4Q=3'M-B5V835%'74)6]`$$-%75-4]=1%-=55+B74927%91]L1\M7SB
XMM(REC/I)R5G/E*R%K.*$O'6\]TQA5EQ2XE9-4F1<8F1-8U1-5%-=5%-`$%7U
XM)-5T%=2)U9C4M\35Q`$5E0$85@$@$P%$-P%T`@4"#T`B(!R@]=D```!-1$S\
XM.L*MNWU;O0FIS&MVR6NVQEOUPUPUP%Q5ODR4O$RTNDS4N$STMDT4M3TSM#U3
XMLDU4L3USL//9.?/;-SW38\![LU.^1BNC0[Q**X-#NTLAMS,[M+0;<R.Z2V&V
XM,CN5MAMC([E+5+4R.X6T6U,3N4M5MFN%M5MFN%MCMVN$S&Y[=<P_$[9<LR.W
XM3+,O.W7*,_.W2Z&S-#N$N!M#4[=+@;,V.X2V&T-SN#M1M#@[D[,;4Y.Y.P*U
XM.CNS<K<[`[R+@[%-5+(]4[0],[5-%+9,]+A,U+I,M+Q,E+Y<5<!<-<-;]<9K
XMMLEK=LR:G0N]6WVZPF at -V@```"\F)OPEWNB(G>`(#.````!$%E/C/-[E@<#8
XM#>$```!$%E/C/N!+G0R`H#;B````1!A3XSRZ.X6W:V:V:V:V:V:V:V>U>U][
XM5[6+5[6+5[7XM/BTFT^+3YM/BTXYM(M.U9M`P#WC````1!A5\C[2[;GBT9T?
XMG1G2C2C2C3?3?3?2C2?2?3?2;537;7?5?6?5C5?5?5?4C4C4C3G3^=/BG3[;
XMD*@TY````$084^,^[5FUBUXYM?BU^;7XM9M?BV^+9[:+9[:+9[?WMWMWMVN&
XMN&N&N&N&N&N%NC#8#?````!$%E/P/`R.!+V0``SQ````1!93\#X<Y8W at J#3R
XM````1!A3\CP[I;AKAKAKAKAKAKAK=[=[?WMWMHMGMHMGMOBV^+6;7XM?FU^+
XM7CFUBU[5D,@]\P```$085>,^[;G3XIT_G3G3C4C4C4?5?5?5C5?6?5?7;735
XM;2?3?2?2C2?3?3?3C2C2C2G1^='BG1[;G2"@-O0```!$&%/R/K3M6;2+3CFT
XM^+3YM/BTFT^+3XM7M8M7M8M7M?>U>U>V:V:V:V:V:V:V:W6X.Z#8"_4```!$
XM"57C/@`O\"@)]@```%A7`@`6VY!5^P```%A-,/LLLSWTWEWDWEWDWEW5W5WD
XMWEW5W5W<^IT:;3I=.E;;;;?:?:C8G7^@W)W8W7WGWFWVWM.GTZC1J<^K7?7?
XM7?3?7?7?7?3?7?3?7?0!`\/8"_P````O)B;\)0!:8)!5_0```%A-,/LLPS`0
XM3?7?3?7?3?7?7?7?3?7?7?6KSZG1J-.GT]YM]MY]Y]V-V=SZ#7G8C:?:?;;;
XM:ETZ73IM&IS]U=U=U=Y-Y=U=U=Y-Y=Y-Y=Y-\[-@&OX```!$.3K[.(4I_H)(
X/2@';&@A>?TA*`=L:`?7V
X`
Xend
END_OF_FILE
if test 11597 -ne `wc -c <'fonts.lj/S.20.pk.UU'`; then
echo shar: \"'fonts.lj/S.20.pk.UU'\" unpacked with wrong size!
fi
# end of 'fonts.lj/S.20.pk.UU'
fi
if test -f 'pk.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'pk.c'\"
else
echo shar: Extracting \"'pk.c'\" \(21373 characters\)
sed "s/^X//" >'pk.c' <<'END_OF_FILE'
X/* Copyright 1990 Chris Lewis
X */
X
X
X#include "defs.h"
X
X#ifdef PK
X
X#ifndef lint
Xstatic char SCCSid[] = "@(#)pk.c 2.1 Copyright 90/07/18 16:51:38 Chris Lewis";
X#endif
X
X#define DRAW
X#define OUTRES 300
X
X#include "pk.h"
X
X#if defined(PARTIAL)
X#include "pkc.h"
Xstruct needmaps *needmaps = (struct needmaps *) NULL;
X#endif
X
Xextern char *progname;
X
Xstatic FILE *fin;
Xstatic char *filename; /* name of *current* font being read */
Xextern char *malloc();
X
Xstatic long flag_byte;
Xstatic repeatcount;
Xstatic dyn_f;
X
Xstatic readraster();
X
Xstatic long
Xget1int() { return(getc(fin)); }
X
Xstatic long
Xget2int() {
X register long c;
X c = get1int();
X c = (c<<8) | (0xff & get1int());
X return(c);
X}
X
Xstatic long
Xget4int() {
X register long c;
X c = get2int();
X c = (c << 16) | (0xffff & get2int());
X return(c);
X}
X
Xstatic long
Xget3int() {
X register long c;
X c = get2int();
X c = (c << 8) | (0xff & get1int());
X return(c);
X}
X
X#ifdef VFPRINTF
X#include <varargs.h>
X/* VARARGS */
Xpkmsg(va_alist)
Xva_dcl
X{
X va_list args;
X char *fmt;
X
X va_start(args);
X fmt = (char *) va_arg(args, char *);
X VFPRINTF(stderr, fmt, args);
X va_end(args);
X}
X#else
X/* VARARGS1 ARGSUSED */
Xpkmsg(fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
Xchar *fmt;
Xint a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; {
X char buf[BUFSIZ];
X sprintf(buf, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
X fprintf(stderr, buf);
X}
X#endif
X
Xstatic
Xskipspecials() {
X register int i,c;
X do {
X flag_byte = getc(fin);
X if (flag_byte >= 240) {
X i = 0;
X switch(flag_byte) {
X case PK_xxx4:
X i = (i << 8) + getc(fin);
X case PK_xxx3:
X i = (i << 8) + getc(fin);
X case PK_xxx2:
X i = (i << 8) + getc(fin);
X case PK_xxx1:
X i = (i << 8) + getc(fin);
X DBP((D_PK, "PK_xxx%d: ", flag_byte - PK_xxx1 + 1));
X while(i--) {
X c = getc(fin);
X DBP((D_PK, "%c", c));
X }
X DBP((D_PK, "\n"));
X break;
X case PK_yyy:
X i = get4int();
X DBP((D_PK, "Num special: %d\n", i));
X break;
X case PK_post:
X DBP((D_PK, "Postamble\n"));
X break;
X case PK_no_op:
X DBP((D_PK, "No-op\n"));
X break;
X default:
X pkmsg("PK file %s: Unexpected %ld\n", filename,
X flag_byte);
X exit(1);
X }
X }
X } while (flag_byte >= 240 && flag_byte != PK_post);
X}
X
Xstatic
Xreadschar(p)
Xstruct pkc *p; {
X p->pkc_pl = get1int() + ((p->pkc_flag&0x3) << 8);
X p->pkc_char = get1int();
X p->pkc_tfm = get3int();
X p->pkc_dx = get1int() * pow2(16);
X p->pkc_dy = 0;
X p->pkc_width = get1int();
X p->pkc_height = get1int();
X p->pkc_x_off = get1int();
X p->pkc_y_off = get1int();
X if (p->pkc_x_off > 127)
X p->pkc_x_off -= 256;
X if (p->pkc_y_off > 127)
X p->pkc_y_off -= 256;
X p->pkc_rlen = p->pkc_pl - 8;
X readraster(p);
X}
X
Xstatic
Xreadeschar(p)
Xstruct pkc *p; {
X p->pkc_pl = get2int() + ((p->pkc_flag&0x3) << 16);
X p->pkc_char = get1int();
X p->pkc_tfm = get3int();
X p->pkc_dx = get2int() * pow2(16);
X p->pkc_dy = 0;
X p->pkc_width = get2int();
X p->pkc_height = get2int();
X p->pkc_x_off = get2int();
X p->pkc_y_off = get2int();
X if (p->pkc_x_off > 32767)
X p->pkc_x_off -= 65536;
X if (p->pkc_y_off > 32767)
X p->pkc_y_off -= 65536;
X p->pkc_rlen = p->pkc_pl - 13;
X readraster(p);
X}
X
Xstatic
Xreadlchar(p)
Xstruct pkc *p; {
X p->pkc_pl = get4int();
X p->pkc_char = get4int();
X p->pkc_tfm = get4int();
X p->pkc_dx = get4int();
X p->pkc_dy = get4int();
X p->pkc_width = get4int();
X p->pkc_height = get4int();
X p->pkc_x_off = get4int();
X p->pkc_y_off = get4int();
X p->pkc_rlen = p->pkc_pl - 28;
X readraster(p);
X}
X
Xstatic
Xreadraster(p)
Xstruct pkc *p; {
X p->pkc_pkr = (int8 *) mustmalloc((int) p->pkc_rlen, filename);
X fread((char *) p->pkc_pkr, 1, (int) p->pkc_rlen, fin);
X}
X
X/* Read a character sequence from a PK file */
Xstatic struct pkc *
Xrpkc() {
X register struct pkc *p = (struct pkc *) mustmalloc(sizeof(struct pkc),
X filename);
X
X p->pkc_pkr = NULL;
X p->pkc_sfpr = NULL;
X p->pkc_flag = flag_byte;
X p->pkc_dyn_f = p->pkc_flag >> 4;
X flag_byte &= 0x7;
X
X if (flag_byte == 7)
X readlchar(p);
X else if (flag_byte > 3)
X readeschar(p);
X else
X readschar(p);
X return(p);
X}
X
X#ifdef SFP
X/* Read a character sequence from an SFP */
Xstatic struct pkc *
Xrsfpc() {
X register struct pkc *p;
X int len;
X
X if ((len = getc(fin)) == EOF || len != '\033') {
X /* HP fonts when loaded often have trailing nulls due to DOS
X file padding. Screech on non-null */
X if (len && len != EOF)
X fprintf(stderr,
X "%s: WARNING: trailing garbage in %s, offset %ld, char 0x%02x\n",
X progname, filename, ftell(fin), len);
X flag_byte = PK_post;
X return((struct pkc *) NULL);
X }
X
X p = (struct pkc *) mustmalloc(sizeof(struct pkc), filename);
X p->pkc_pkr = NULL;
X p->pkc_sfpr = NULL;
X p->pkc_flag = 0;
X p->pkc_dyn_f = 0;
X
X if (fscanf(fin, "*c%ldE", &(p->pkc_char)) != 1) {
X pkmsg("SFP file: %s, bad/missing SET CHAR CODE, offset: %ld\n",
X filename, ftell(fin));
X exit(1);
X }
X
X if (fscanf(fin, "\033(s%dW", &len) != 1 || len < 16) {
X pkmsg("SFP file: %s, bad/missing/tooshort CHAR DOWNLOAD sequence\n",
X filename);
X exit(1);
X }
X
X get4int(); /* skip some garbage */
X get2int(); /* skip more garbage (actually, orientation & dummy */
X
X p->pkc_x_off = get2int();
X if (p->pkc_x_off > 32767)
X p->pkc_x_off -= 65536;
X p->pkc_x_off = -p->pkc_x_off;
X p->pkc_y_off = get2int();
X if (p->pkc_y_off > 32767)
X p->pkc_y_off -= 65536;
X p->pkc_width = get2int();
X p->pkc_height = get2int();
X p->pkc_dx = get2int() * pow2(16) / 4;
X
X p->pkc_sfpr = (struct ras *) mustmalloc(sizeof(struct ras), filename);
X
X p->pkc_sfpr->ras_height = p->pkc_height;
X p->pkc_sfpr->ras_width = p->pkc_width;
X p->pkc_sfpr->ras_bline = (p->pkc_width + 7) / 8;
X p->pkc_sfpr->ras_bytes = p->pkc_sfpr->ras_height * p->pkc_sfpr->ras_bline;
X if (p->pkc_sfpr->ras_bytes) {
X p->pkc_sfpr->ras_raster = (int8 *) mustmalloc((int)
X p->pkc_sfpr->ras_bytes, filename);
X
X fread((char *) p->pkc_sfpr->ras_raster, (int) p->pkc_sfpr->ras_bytes,
X 1, fin);
X } else {
X free((char *) p->pkc_sfpr);
X p->pkc_sfpr = NULL;
X }
X
X return(p);
X}
X#endif
X
Xstatic struct pkc *
Xreadchar(p)
Xstruct pkp *p; {
X if (p->pkp_flags&PK_PK)
X return(rpkc());
X#ifdef SFP
X else if (p->pkp_flags&PK_SFP)
X return(rsfpc());
X#endif
X else
X return((struct pkc *) NULL);
X}
X
Xstatic int
Xpkccomp(a, b)
Xstruct pkc **a, **b; {
X if ((*a)->pkc_char < (*b)->pkc_char)
X return(-1);
X else
X return(1);
X /* can't be equal! */
X}
X
Xstatic
Xrastbit(x,y,r)
Xregister int x, y;
Xregister struct ras *r; {
X register int bi = y * r->ras_bline + (x >> 3);
X
X /* You don't really want to uncomment this.... ;-) */
X /* printf("x,y,bi: %d,%d,%d\n", x, y, bi);*/
X return(r->ras_raster[bi] & (0x80 >> (x&7)));
X}
X
Xstatic int8 *rptr;
Xstatic long bitweight;
X
Xgetnyb() {
X register int8 b;
X if (!bitweight) {
X bitweight = 8;
X rptr++;
X }
X b = *rptr;
X bitweight -= 4;
X#ifdef VDEBUG
X DBP((D_PK, "getnyb byte: %x\n", b));
X DBP((D_PK, "getnyb: %x\n", (b >> bitweight) & 0xf));
X#endif
X return((b >> bitweight)&0xf);
X}
X
X#ifdef NEVER
Xgetbit() {
X register int8 b;
X if (!bitweight) {
X bitweight = 8;
X rptr++;
X }
X b = *rptr;
X bitweight--;
X return((b>>bitweight)&1);
X}
X#endif
X
X/* Dumps an ASCII version of the SFP raster r, to line n.
X Normally only for debugging, but is also used from pktype
X */
X
Xdumpr(r, n)
Xstruct ras *r;
Xint n; {
X int x, y;
X if (!diagFile)
X return;
X fprintf(diagFile, "\n");
X for (y = 0; y < n; y++) {
X fprintf(diagFile, "%3d ", y);
X for (x = 0; x < r->ras_width; x++) {
X if (rastbit(x, y, r))
X putc('*', diagFile);
X else
X putc(' ', diagFile);
X }
X putc('\n', diagFile);
X }
X}
X
Xstatic long
Xpkpack(pc,r)
Xregister struct pkc *pc;
Xregister struct ras *r; {
X long i, j;
X long pkpackret;
X i = getnyb();
X if (i == 0) {
X do {
X j = getnyb();
X i++;
X } while(!j);
X while(i--)
X j = (j << 4) + getnyb();
X pkpackret = (j - 15 + (13 - dyn_f) * 16 + dyn_f);
X } else if (i <= dyn_f)
X pkpackret = (i);
X else if (i < 14)
X pkpackret = ((i - dyn_f - 1)*16 + getnyb() + dyn_f + 1);
X else {
X if (repeatcount) {
X pkmsg("Second repeat count for this row!\n");
X exit(1);
X }
X if (i == 14)
X repeatcount = pkpack(pc,r);
X else
X repeatcount = 1;
X /*sendout(1, repeatcount, pc, r);*/
X pkpackret = (pkpack(pc,r));
X }
X if (pkpackret < 1) {
X pkmsg("pkpack returned < 1! (%s)", filename);
X exit(1);
X }
X return(pkpackret);
X}
X
Xstatic
Xgetpbits(pc, r)
Xregister struct pkc *pc;
Xregister struct ras *r; {
X register int h_bit = pc->pkc_width,
X count,
X turnon;
X turnon = pc->pkc_flag&0x8;
X dyn_f = pc->pkc_dyn_f;
X repeatcount = 0;
X r->ras_xcur = r->ras_ycur = 0;
X while(r->ras_ycur < pc->pkc_height) {
X count = pkpack(pc,r);
X while(count > 0) {
X if (count >= h_bit) {
X count -= h_bit;
X while(h_bit--) {
X if (turnon)
X r->ras_raster[r->ras_ycur*r->ras_bline + (r->ras_xcur>>3)]
X |= (0x80 >> (r->ras_xcur&7));
X r->ras_xcur++;
X }
X r->ras_ycur++;
X r->ras_xcur = 0;
X while(repeatcount --) {
X#ifdef VDEBUG
X DBP((D_PK, "Copy line %d to %d\n", r->ras_ycur,
X r->ras_ycur-1));
X#endif
X memcpy((char*)&(r->ras_raster[r->ras_ycur * r->ras_bline]),
X (char*)&(r->ras_raster[(r->ras_ycur - 1) *
X r->ras_bline]),
X (int) r->ras_bline);
X r->ras_ycur++;
X }
X repeatcount = 0;
X h_bit = pc->pkc_width;
X } else {
X h_bit -= count;
X while(count--) {
X if (turnon)
X r->ras_raster[r->ras_ycur*r->ras_bline +
X (r->ras_xcur>>3)] |= (0x80 >> (r->ras_xcur&7));
X r->ras_xcur++;
X }
X count = 0;
X }
X }
X turnon = !turnon;
X }
X if (r->ras_ycur != pc->pkc_height ||
X h_bit != pc->pkc_width)
X pkmsg("Bad bit somehow (%s)\n", filename);
X}
X
Xstatic
Xgetrbits(pc, r)
Xregister struct pkc *pc;
Xregister struct ras *r; {
X register int x, y;
X register int bit = 0;
X for (y = 0; y < pc->pkc_height; y++) {
X for (x = 0; x < pc->pkc_width; x++) {
X if (pc->pkc_pkr[bit >> 3] & (0x80 >> (bit&7)))
X r->ras_raster[y*r->ras_bline + (x>>3)] |= (0x80 >> (x&7));
X bit++;
X }
X }
X}
X
X/* Convert a PK raster to an unpacked SFP version.
X (If there's already an SFP version, it's returned instead)
X */
Xstruct ras *
Xpkrast(pc)
Xstruct pkc *pc; {
X register struct ras *r;
X if (pc->pkc_sfpr)
X return(pc->pkc_sfpr);
X if (!pc->pkc_rlen)
X return(NULL);
X
X pc->pkc_sfpr = r = (struct ras *) mustmalloc(sizeof(struct ras),
X filename);
X
X r->ras_height = pc->pkc_height;
X r->ras_width = pc->pkc_width;
X r->ras_bline = (pc->pkc_width + 7) / 8;
X r->ras_bytes = r->ras_height * r->ras_bline;
X r->ras_raster = (int8 *) mustmalloc((int) r->ras_bytes, filename);
X
X /* initialize bit unpackers */
X rptr = pc->pkc_pkr;
X bitweight = 8;
X
X /* calculate bits here...*/
X if (pc->pkc_dyn_f == 14)
X getrbits(pc, r);
X else
X getpbits(pc, r);
X return(r);
X}
X
X/* Read a PK font file header */
Xstatic struct pkp *
Xpk_rpk(p)
Xregister struct pkp *p; {
X register int i,c;
X
X if (getc(fin) != 89) {
X pkmsg("PK file %s: Wrong version of packed file!\n", filename);
X exit(1);
X }
X i = getc(fin);
X if (i > 0) {
X DBP((D_PK, "PKVersion: "));
X while (i--) {
X c = getc(fin);
X DBP((D_PK, "%c", c));
X }
X DBP((D_PK, "\n"));
X }
X p->pkp_bmax = 0;
X p->pkp_dmax = 0;
X p->pkp_wmax = 0;
X p->pkp_xomax = 0;
X p->pkp_ds = get4int();
X p->pkp_cs = get4int();
X p->pkp_hppp = get4int();
X p->pkp_vppp = get4int();
X
X if (p->pkp_hppp != p->pkp_vppp)
X pkmsg("PK file %s: Warning aspect ratio not 1:1\n", filename);
X p->pkp_res = (double) p->pkp_hppp * POINT / pow2(16) + .5;
X p->pkp_npts = ((double) p->pkp_ds / pow2(20)) *
X ((double) p->pkp_res / OUTRES) + .5;
X p->pkp_chars = (struct pkc *) NULL;
X p->pkp_last = (struct pkc *) NULL;
X p->pkp_num = 0;
X p->pkp_list = (struct pkc **) NULL;
X
X /* Try to guess symset, style, stroke weight and typeface
X These aren't particularly important, but it assists the LJ
X if it's trying to select one of these via characteristic.
X This will only work if the file name reflects the Troff name,
X according to the following conventions:
X
X filename: {<path>/}troffname.pointsize.[pk|sfp]
X
X All ROMAN8 encodings unless MATH8.
X All 0 strokeweight, unless Bold.
X All upright, unless Italic
X All Roman typeface, unless otherwise specified
X
X R : Normal Roman
X I : Italic
X B : Bold
X S : MATH8 Symbol
X X : Bold italic
X .X : <typeface> Bold italic
X .I : <typeface> Italic
X .B : <typeface> Bold
X .R : <typeface> Normal
X H or H. : Helvetica typeface
X C or C. : Courier typeface
X typefaces should be extended.
X */
X
X {
X register char *fp;
X register int char1, char2, italic, bold, bolditalic, onechar;
X
X fp = strrchr(filename, '/');
X if (!fp)
X fp = filename;
X else
X fp++;
X
X /* Default settings */
X p->pkp_symset = (8 << 5) - 64 + 'U'; /* ROMAN 8 */
X p->pkp_style = 0; /* upright */
X p->pkp_sw = 0; /* stroke 0 */
X p->pkp_typeface = 5; /* typeface Roman */
X
X char1 = *fp++;
X onechar = (*fp == '.');
X
X if (char1 == 'S' && onechar)
X p->pkp_symset = (8 << 5) - 64 + 'M'; /* MATH 8 */
X else {
X
X char2 = *fp;
X
X italic = ((onechar && char1 == 'I') || char2 == 'I');
X bold = ((onechar && char1 == 'B') || char2 == 'B');
X bolditalic = ((onechar && char1 == 'X') || char2 == 'X');
X
X if (bold || bolditalic)
X p->pkp_sw = 3;
X
X if (italic || bolditalic)
X p->pkp_style = 1;
X
X /* This should be extended, but I don't have a good feeling
X for troff typeface -> HPLJ nomenclature */
X switch(char1) {
X case 'H':
X p->pkp_typeface = 4; /* Helvetica */
X break;
X case 'C':
X p->pkp_typeface = 3; /* Courier */
X break;
X /* more? */
X }
X }
X }
X
X return(p);
X}
X
X#ifdef SFP
X
X/* Read an SFP header and convert it into the PK internal structure.
X */
Xstatic struct pkp *
Xpk_rsfp(p)
Xregister struct pkp *p; {
X register int c;
X int len;
X
X if (fscanf(fin, ")s%dW", &len) != 1) {
X pkmsg("SFP file %s: Bad CREATE FONT sequence\n", filename);
X exit(1);
X }
X
X if (len < 26) {
X pkmsg("SFP file %s: CREATE FONT sequence too short (%d)\n",
X filename, len);
X exit(1);
X }
X
X get2int(); /* 26 */
X get1int(); /* 0 */
X get1int(); /* 0 or 1 - forced 1 anyways */
X get2int(); /* dummy */
X
X p->pkp_bmax = get2int(); /* baseline */
X p->pkp_wmax = get2int(); /* cell width */
X p->pkp_dmax = get2int() - p->pkp_bmax; /* cell height */
X
X get1int(); /* 0 port, 1 land - forced 0 */
X get1int(); /* fixed/proportional - forced proportional */
X
X p->pkp_symset = get2int();
X
X get2int(); /* pitch - we calculate this from height */
X c = get2int(); /* retrieved *height* */
X p->pkp_npts = c * POINT / (OUTRES*4) + .5;
X
X get2int(); /* dummy */
X get1int(); /* dummy */
X
X p->pkp_style = get1int();
X p->pkp_sw = get1int();
X p->pkp_typeface = get1int();
X
X p->pkp_xomax = 0;
X
X /* These are simulated so that the PK handlers can figure the font out */
X p->pkp_ds = p->pkp_npts * pow2(20);
X p->pkp_cs = 0;
X p->pkp_hppp = OUTRES * pow2(16) / POINT;
X p->pkp_vppp = OUTRES * pow2(16) / POINT;
X p->pkp_res = (double) p->pkp_hppp * POINT / pow2(16) + .5;
X
X p->pkp_chars = (struct pkc *) NULL;
X p->pkp_last = (struct pkc *) NULL;
X p->pkp_num = 0;
X p->pkp_list = (struct pkc **) NULL;
X
X
X len -= 26;
X while(len--)
X getc(fin);
X return(p);
X}
X#endif
X
Xstatic struct pkp *
Xreadhead() {
X register struct pkp *p = (struct pkp *) mustmalloc(sizeof(struct pkp),
X filename);
X switch(getc(fin)) {
X case PK_pre:
X p->pkp_flags |= PK_PK;
X return(pk_rpk(p));
X#ifdef SFP
X case 0x1b:
X p->pkp_flags |= PK_SFP;
X flag_byte = 0;
X return(pk_rsfp(p));
X#endif
X default:
X fprintf(stderr, "PK file: %s don't know what it is!\n",
X filename);
X exit(1);
X }
X /*NOTREACHED*/
X}
X
Xpk_destroy(p)
Xregister struct pkp *p; {
X register struct pkc *pc, *opc;
X for (pc = p->pkp_chars; pc;) {
X if (pc->pkc_pkr)
X free((char *) pc->pkc_pkr);
X
X if (pc->pkc_sfpr) {
X free((char *) pc->pkc_sfpr->ras_raster);
X free((char *) pc->pkc_sfpr);
X }
X
X opc = pc;
X pc = opc->pkc_next;
X free((char *) opc);
X }
X if (p->pkp_list)
X free((char *) p->pkp_list);
X free((char *) p);
X}
X
Xstruct pkp *
Xpk_read(file, fontcode)
Xchar *file; int fontcode; {
X register struct pkp *p;
X register struct pkc *pc, **pcp;
X#ifdef COMPRESS
X int compressed = 0;
X#endif
X fin = (FILE *) NULL;
X if (access(filename = file, 4) == 0)
X fin = fopen(filename, "r");
X#ifdef COMPRESS
X else {
X char buf[1024];
X strcpy(buf, file);
X strcat(buf, ".Z");
X if (access(buf, 4) == 0) {
X sprintf(buf, "%s %s.Z", COMPRESS, file);
X fin = popen(buf, "r");
X compressed = 1;
X }
X }
X#endif
X if (!fin) {
X pkmsg("Cannot open PK/SFP file %s\n", file);
X exit(1);
X }
X p = readhead();
X if (p->pkp_flags&PK_PK)
X skipspecials();
X
X while ((flag_byte != PK_post) && (pc = readchar(p))) {
X DBP((D_VERB, "type: %s: %d\n", p->pkp_flags&PK_PK? "PK": "SFP",
X pc->pkc_char));
X#ifdef PARTIAL
X if (!needchar(fontcode, pc->pkc_char)) {
X DBP((D_FONT|D_PK, "Dropping char %02x from load\n", pc->pkc_char));
X
X if (pc->pkc_pkr) {
X free((char *) pc->pkc_pkr);
X pc->pkc_pkr = (int8 *) NULL;
X }
X
X if (pc->pkc_sfpr) {
X free((char *) pc->pkc_sfpr->ras_raster);
X free((char *) pc->pkc_sfpr);
X pc->pkc_sfpr = (struct ras *) NULL;
X }
X
X free((char *) pc);
X if (p->pkp_flags&PK_PK)
X skipspecials();
X continue;
X }
X#endif
X DBP((D_FONT|D_PK, "Loading char %02x\n", pc->pkc_char));
X p->pkp_num++;
X pc->pkc_next = (struct pkc *) NULL;
X if (!p->pkp_chars)
X p->pkp_chars = pc;
X if (p->pkp_last)
X p->pkp_last->pkc_next = pc;
X p->pkp_last = pc;
X if (p->pkp_flags&PK_PK) {
X p->pkp_bmax = max(p->pkp_bmax, pc->pkc_y_off);
X p->pkp_dmax = max(p->pkp_dmax, pc->pkc_height - pc->pkc_y_off);
X p->pkp_wmax = max(p->pkp_wmax, pc->pkc_width - pc->pkc_x_off);
X }
X p->pkp_xomax = min(p->pkp_xomax, pc->pkc_x_off);
X if (pc->pkc_char == 'a') {
X p->pkp_kh = pc->pkc_y_off;
X p->pkp_kl = pc->pkc_y_off - pc->pkc_height;
X }
X if (p->pkp_flags&PK_PK)
X skipspecials();
X }
X DBP((D_FONT|D_PK, "End of font\n"));
X#ifdef COMPRESS
X if (compressed) {
X if (pclose(fin)) {
X pkmsg("Decompression of %s failed\n", file);
X exit(1);
X }
X } else
X#endif
X fclose(fin);
X pcp = p->pkp_list = (struct pkc **)
X mustmalloc((int) (p->pkp_num * sizeof(struct pkc *)), filename);
X for (pc = p->pkp_chars; pc; pc = pc->pkc_next)
X *pcp++ = pc;
X qsort(p->pkp_list, (unsigned) p->pkp_num, sizeof(struct pkc *), pkccomp);
X return(p);
X}
X
X/* Emit routines */
X
X/* Emit a font descriptor in SFP format */
Xepk_desc(p, sfp)
Xregister struct pkp *p;
XFILE *sfp; {
X
X fprintf(sfp, "\033)s26W");
X fputshort(26, sfp);
X fputc(0, sfp);
X fputc(1, sfp); /* font type 1 (33-127 && 160-255 printable) */
X fputshort(0, sfp);
X fputshort(p->pkp_bmax, sfp); /* baseline position */
X fputshort(p->pkp_wmax, sfp); /* cell width */
X fputshort(p->pkp_bmax + p->pkp_dmax, sfp); /* cell height */
X fputc(0, sfp); /* portrait */
X fputc(1, sfp); /* proportional */
X
X fputshort((long) p->pkp_symset, sfp);
X
X fputshort((long) (OUTRES * p->pkp_npts * 4) / 120, sfp);
X fputshort((long) (p->pkp_npts * (OUTRES / POINT) * 4), sfp);
X fputshort(0, sfp);
X fputc(0, sfp);
X fputc(p->pkp_style, sfp);
X fputc(p->pkp_sw, sfp);
X fputc(p->pkp_typeface, sfp);
X
X}
X
Xfputshort(val, f)
XFILE *f;
Xlong val; {
X fputc(((int) val >> 8) & 0xff, f);
X fputc((int) val & 0xff, f);
X}
X
X
X/* Emit a character descriptor in SFP format.
X Notes: if this is a PK font, the PK raster is converted
X to SFP format and dumpped. If the font was originally
X SFP format, it's dumpped directly. In either event, epkc_desc
X deletes the SFP raster *and* the PK raster (if the character
X has one), meaning that once this routine has emitted a character,
X you can't emit it again! Which is why pkc's pkflush completely
X destroys the font. Why? Well, SFP's can get rather large, and
X it seems reasonable to get rid of them as quickly as possible.
X
X Returns number of bytes emitted.
X */
Xepkc_desc(pc, sfp)
Xregister struct pkc *pc;
Xregister FILE *sfp; {
X register struct ras *r;
X
X if (!pc->pkc_pkr && !pc->pkc_sfpr) {
X fprintf(stderr, "%s: already downloaded %02x\n", pc->pkc_char);
X return(0);
X }
X
X /* Emit SET CHARACTER sequence */
X fprintf(sfp, "\033*c%dE", pc->pkc_char);
X
X /* Emit DOWNLOAD CHARACTER sequence */
X fprintf(sfp, "\033(s%dW", 16 + ((pc->pkc_width + 7) / 8) *
X pc->pkc_height);
X fputc(4, sfp);
X fputc(0, sfp);
X fputc(14, sfp);
X fputc(1, sfp);
X fputc(0, sfp); /* portrait */
X fputc(0, sfp);
X fputshort(-pc->pkc_x_off, sfp);
X fputshort(pc->pkc_y_off, sfp);
X fputshort(pc->pkc_width, sfp);
X fputshort(pc->pkc_height, sfp);
X fputshort(pc->pkc_dx * 4 / pow2(16), sfp);
X r = pkrast(pc);
X
X if (pc->pkc_pkr)
X free((char *) pc->pkc_pkr);
X pc->pkc_pkr = (int8 *) NULL;
X
X if (r) {
X#ifdef VDEBUG
X dumpr(r, r->ras_ycur);
X#endif
X fwrite((char *) r->ras_raster, 1, (int) ((pc->pkc_width + 7) / 8) *
X (int) pc->pkc_height, sfp);
X free((char *) r->ras_raster);
X free((char *) r);
X }
X pc->pkc_sfpr = (struct ras *) NULL;
X return(((pc->pkc_width + 7) / 8) * pc->pkc_height);
X}
X#endif
END_OF_FILE
if test 21373 -ne `wc -c <'pk.c'`; then
echo shar: \"'pk.c'\" unpacked with wrong size!
fi
# end of 'pk.c'
fi
if test -f 'utils/maps/alnum.ROMAN8' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'utils/maps/alnum.ROMAN8'\"
else
echo shar: Extracting \"'utils/maps/alnum.ROMAN8'\" \(206 characters\)
sed "s/^X//" >'utils/maps/alnum.ROMAN8' <<'END_OF_FILE'
X# 2.1 90/07/18 for simple merging of other fonts.
X0x30
X0x31
X0x32
X0x33
X0x34
X0x35
X0x36
X0x37
X0x38
X0x39
X@
XA
XB
XC
XD
XE
XF
XG
XH
XI
XJ
XK
XL
XM
XN
XO
XP
XQ
XR
XS
XT
XU
XV
XW
XX
XY
XZ
Xa
Xb
Xc
Xd
Xe
Xf
Xg
Xh
Xi
Xj
Xk
Xl
Xm
Xn
Xo
Xp
Xq
Xr
Xs
Xt
Xu
Xv
Xw
Xx
Xy
Xz
END_OF_FILE
if test 206 -ne `wc -c <'utils/maps/alnum.ROMAN8'`; then
echo shar: \"'utils/maps/alnum.ROMAN8'\" unpacked with wrong size!
fi
# end of 'utils/maps/alnum.ROMAN8'
fi
if test -f 'utils/psdtwd.S' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'utils/psdtwd.S'\"
else
echo shar: Extracting \"'utils/psdtwd.S'\" \(18900 characters\)
sed "s/^X//" >'utils/psdtwd.S' <<'END_OF_FILE'
X%%STARTSHELL%%
X# Most of this program was written by Michael Rourke (see below)
X# to generate ditroff width tables from Postscript. The original
X# name (as distributed in tpscript) was genftable. It has been
X# extended to support more fonts than the original, plus attempt
X# to handle non-builtin fonts. This shell script's output should
X# be sent to your postscript printer, and the printer will send
X# back up the serial link a series of shars containing the
X# width tables.
X#
X# The program goes through all existing characters in the font
X# to print width information in ditroff format. The name of each
X# character's drawing routine is used to look up how to print the
X# width information. There are three tables: the standard-encoding,
X# symbol-encoding and ascii-map. The first two are dictionaries,
X# the third is an array. If the font you've asked for is "Symbol",
X# the symbol-encoding dictionary is used, otherwise standard-encoding.
X# If the drawing routine isn't in the selected dictionary, the
X# character code is used to look up in ascii-map for a new name.
X# The new name is then searched for in standard-encoding to print the
X# width information.
X#
X# This latter kludge is necessary for fonts that don't use the
X# standard naming conventions, and will work sanely only for characters
X# 32 (space) thru 126 (tilde).
X#
X# usage: psdtwd <arguments>
X#
X# if there are no arguments, pstdwd will generate widths for
X# all of the fonts that are listed at the end of this shell
X# script. Arguments are usually repeated quoted
X# strings of the form:
X# /psname /intname /catname fontinfo
X# Where psname is the Postscript name of the font. intname is
X# a shortened name (which psroff doesn't care about, but ditroff
X# does apparently), catname is the one or two character name that
X# cat will know it by (and will be the name of the resultant shar),
X# and fontinfo is itself.
X# If the argument is a readable filename instead, it is inserted.
X# For example:
X# ./psdtwd hwfont "/HaeberliWriting /HaeberliW /HW fontinfo" \
X# "/Times-Roman /Roman /R fontinfo"
X# will insert file hwfont (usually containing the definition of the
X# subsequent argument), and generate the widths in a file HW of
X# the HaeberliWriting font, plus the widths for the "Times-Roman"
X# font in R.
Xif [ $# = 0 ]
Xthen
X all=1
Xelse
X while [ $# != 0 ]
X do
X if [ -r $1 ]
X then
X files="$files $1"
X else
X lines="$lines $1"
X fi
X shift
X done
Xfi
Xcat <<'END'
X%!
X% psdtwd - Postcript program to produce font tables for ditroff.
X% Tables are output on the standard output file - which
X% needs to be captured by the host computer.
X%
X% Note the routine "commondefs" which outputs local
X% defined (hand built) characters.
X%
X% Michael Rourke, University of N.S.W., Australia
X% (included in troff2: 2.1 90/07/18)
X/SAVEOBJ save def
X
X/t 30 string def
X
X(Starting psdtwd.ps `date`\n) print
Xflush
X
X/ps
X% string ->
X{
X print
X} def
X
X/pr
X% any -->
X{
X t cvs ps
X} def
X
X/prsp
X{
X (\t) ps
X} def
X
X/prnl
X{
X (\n) ps
X} def
X
X/pro
X% int -->
X{
X dup 0 eq
X { pr }
X { dup 8 idiv pro 8 mod pr }
X ifelse
X} def
X
X/charsize
X% string --> bot top
X{
X gsave
X newpath 0 0 moveto false charpath flattenpath pathbbox
X exch pop 3 -1 roll pop
X grestore
X} def
X
X/strwidth
X% string --> width
X{
X stringwidth pop round cvi
X} def
X
X/prsize
X% string -->
X{
X dup strwidth pr prsp
X dup charsize
X top gt { 2 } { 0 } ifelse
X exch bot lt { 1 or } if
X pr prsp
X 0 get pro
X} def
X
X/fontinfo
X% fontname troffinternal troffname
X{
X (\ncat <<"!" > ) ps dup pr prnl
X (# ) ps 2 index pr prnl
X (name ) ps pr prnl
X (internalname ) ps pr prnl
X dup findfont 100 scalefont setfont
X /fixedwidth false def
X /Symbol eq
X {
X /actions symbol-encoding def
X (special\n) ps
X }
X {
X /actions standard-encoding def
X currentfont /FontInfo get /isFixedPitch get
X {
X (# fixed width\n) ps
X /fixedwidth true def
X }
X {
X (ligatures fi fl ff ffi ffl 0\n) ps
X }
X ifelse
X }
X ifelse
X % use "o" to get top and bottom on a normal char
X (o) charsize /top exch def /bot exch def
X % some non ascending chars slightly higher than "o"
X % and some lower so adjust slightly
X /top top 2 add def
X /bot bot 4 sub def
X /encoding currentfont /Encoding get def
X /s 1 string def
X 0 1 255
X {
X dup /id exch def
X s 0 2 index put
X encoding exch get dup /.notdef ne
X {
X s 1 index actions exch
X % actions charfuncname
X 2 copy known
X {
X get
X % charname charstr /type
X exec
X flush
X }
X {
X % actions charfuncname
X pop
X ascii-map id get
X 2 copy known
X {
X get
X % charname charstr /type
X exec
X flush
X }
X {
X % charname charstr
X pop
X pop
X }
X ifelse
X }
X ifelse
X }
X {
X pop
X }
X ifelse
X } for
X actions standard-encoding eq { commondefs } if
X (!\n) ps flush
X} def
X
X/commondefs
X{
X /fracsize (0) strwidth (\244) strwidth add def % \244 = '/'
X /Fisize (f) strwidth (\256) strwidth add 5 sub def % \256 = 'fi'
X /ffsize (f) strwidth 2 mul 5 sub def
X /fl { flush } def
X fixedwidth not
X {
X (ff) ps prsp ffsize pr (\t2\t0100\tff ligature - faked\n) ps fl
X (Fi) ps prsp Fisize pr (\t2\t0100\tffi ligature - faked\n) ps fl
X (Fl) ps prsp Fisize pr (\t2\t0100\tffl ligature - faked\n) ps fl
X } if
X (12) ps prsp fracsize pr (\t2\t0100\t1/2 - faked\n) ps fl
X (13) ps prsp fracsize pr (\t2\t0100\t1/3 - faked\n) ps fl
X (14) ps prsp fracsize pr (\t2\t0100\t1/4 - faked\n) ps fl
X (18) ps prsp fracsize pr (\t2\t0100\t1/8 - faked\n) ps fl
X (23) ps prsp fracsize pr (\t2\t0100\t2/3 - faked\n) ps fl
X (34) ps prsp fracsize pr (\t2\t0100\t3/4 - faked\n) ps fl
X (38) ps prsp fracsize pr (\t2\t0100\t3/8 - faked\n) ps fl
X (58) ps prsp fracsize pr (\t2\t0100\t5/8 - faked\n) ps fl
X (78) ps prsp fracsize pr (\t2\t0100\t7/8 - faked\n) ps fl
X (sq\t100\t3\t0100\tsquare box - faked\n) ps fl
X} def
X
X/space
X% charname charstr -->
X{
X (spacewidth ) ps
X strwidth pr pop prnl
X (charset\n) ps
X} def
X
X/norm
X% charname charstr -->
X{
X dup pr prsp prsize pop prnl
X} def
X
X/normdup
X% charname charstr dupname -->
X{
X 3 1 roll norm
X pr prsp (") ps prnl
X} def
X
X/gnorm
X% charname charstr -->
X{
X (*) ps norm
X} def
X
X/map
X% charname charstr mapname -->
X{
X pr prsp prsize prsp pr prnl
X} def
X
X/mapdup
X% charname charstr mapname dupname -->
X{
X 4 1 roll map
X pr prsp (") ps prnl
X} def
X
X/mapdupdup
X% charname charstr mapname dupname dupname -->
X{
X 5 1 roll mapdup
X pr prsp (") ps prnl
X} def
X
X/cmap
X% charname charstr mapname -->
X{
X fixedwidth { 3 { pop } repeat } { map } ifelse
X} def
X
X/ascii-map 256 array def
X0 1 255 {ascii-map exch /exclam put} for
X
Xascii-map 32 /space put
Xascii-map 33 /exclam put
Xascii-map 34 /quotedbl put
Xascii-map 35 /numbersign put
Xascii-map 36 /dollar put
Xascii-map 37 /percent put
Xascii-map 38 /ampersand put
Xascii-map 39 /quoteright put
Xascii-map 40 /parenleft put
Xascii-map 41 /parenright put
Xascii-map 42 /asterisk put
Xascii-map 43 /plus put
Xascii-map 44 /comma put
Xascii-map 45 /hyphen put
Xascii-map 46 /period put
Xascii-map 47 /slash put
Xascii-map 48 /zero put
Xascii-map 49 /one put
Xascii-map 50 /two put
Xascii-map 51 /three put
Xascii-map 52 /four put
Xascii-map 53 /five put
Xascii-map 54 /six put
Xascii-map 55 /seven put
Xascii-map 56 /eight put
Xascii-map 57 /nine put
Xascii-map 58 /colon put
Xascii-map 59 /semicolon put
Xascii-map 60 /less put
Xascii-map 61 /equal put
Xascii-map 62 /greater put
Xascii-map 63 /question put
Xascii-map 64 /at put
Xascii-map 65 /A put
Xascii-map 66 /B put
Xascii-map 67 /C put
Xascii-map 68 /D put
Xascii-map 69 /E put
Xascii-map 70 /F put
Xascii-map 71 /G put
Xascii-map 72 /H put
Xascii-map 73 /I put
Xascii-map 74 /J put
Xascii-map 75 /K put
Xascii-map 76 /L put
Xascii-map 77 /M put
Xascii-map 78 /N put
Xascii-map 79 /O put
Xascii-map 80 /P put
Xascii-map 81 /Q put
Xascii-map 82 /R put
Xascii-map 83 /S put
Xascii-map 84 /T put
Xascii-map 85 /U put
Xascii-map 86 /V put
Xascii-map 87 /W put
Xascii-map 88 /X put
Xascii-map 89 /Y put
Xascii-map 90 /Z put
Xascii-map 91 /bracketleft put
Xascii-map 92 /backslash put
Xascii-map 93 /bracketright put
Xascii-map 94 /asciicircum put
Xascii-map 95 /underscore put
Xascii-map 96 /quoteleft put
Xascii-map 97 /a put
Xascii-map 98 /b put
Xascii-map 99 /c put
Xascii-map 100 /d put
Xascii-map 101 /e put
Xascii-map 102 /f put
Xascii-map 103 /g put
Xascii-map 104 /h put
Xascii-map 105 /i put
Xascii-map 106 /j put
Xascii-map 107 /k put
Xascii-map 108 /l put
Xascii-map 109 /m put
Xascii-map 110 /n put
Xascii-map 111 /o put
Xascii-map 112 /p put
Xascii-map 113 /q put
Xascii-map 114 /r put
Xascii-map 115 /s put
Xascii-map 116 /t put
Xascii-map 117 /u put
Xascii-map 118 /v put
Xascii-map 119 /w put
Xascii-map 120 /x put
Xascii-map 121 /y put
Xascii-map 122 /z put
Xascii-map 123 /braceleft put
Xascii-map 124 /bar put
Xascii-map 125 /braceright put
Xascii-map 126 /asciitilde put
X
X/standard-encoding 149 dict def
Xstandard-encoding begin
X /space { space } def
X /exclam { norm } def
X /quotedbl { norm } def
X /numbersign { norm } def
X /dollar { norm } def
X /percent { norm } def
X /ampersand { norm } def
X /quoteright { norm } def
X /parenleft { norm } def
X /parenright { norm } def
X /asterisk { norm } def
X /plus { norm } def
X /comma { norm } def
X /hyphen { (hy) normdup } def
X /period { norm } def
X /slash { (sl) dup } def
X /zero { norm } def
X /one { norm } def
X /two { norm } def
X /three { norm } def
X /four { norm } def
X /five { norm } def
X /six { norm } def
X /seven { norm } def
X /eight { norm } def
X /nine { norm } def
X /colon { norm } def
X /semicolon { norm } def
X /less { norm } def
X /equal { norm } def
X /greater { norm } def
X /question { norm } def
X /at { norm } def
X /A { norm } def
X /B { norm } def
X /C { norm } def
X /D { norm } def
X /E { norm } def
X /F { norm } def
X /G { norm } def
X /H { norm } def
X /I { norm } def
X /J { norm } def
X /K { norm } def
X /L { norm } def
X /M { norm } def
X /N { norm } def
X /O { norm } def
X /P { norm } def
X /Q { norm } def
X /R { norm } def
X /S { norm } def
X /T { norm } def
X /U { norm } def
X /V { norm } def
X /W { norm } def
X /X { norm } def
X /Y { norm } def
X /Z { norm } def
X /bracketleft { norm } def
X /backslash { norm } def
X /bracketright { norm } def
X /asciicircum { (a^) map } def
X /underscore { (ru) normdup } def
X /quoteleft { norm } def
X /a { norm } def
X /b { norm } def
X /c { norm } def
X /d { norm } def
X /e { norm } def
X /f { norm } def
X /g { norm } def
X /h { norm } def
X /i { norm } def
X /j { norm } def
X /k { norm } def
X /l { norm } def
X /m { norm } def
X /n { norm } def
X /o { norm } def
X /p { norm } def
X /q { norm } def
X /r { norm } def
X /s { norm } def
X /t { norm } def
X /u { norm } def
X /v { norm } def
X /w { norm } def
X /x { norm } def
X /y { norm } def
X /z { norm } def
X /braceleft { norm } def
X /bar { norm } def
X /braceright { norm } def
X /asciitilde { (a~) map } def
X /exclamdown { (I!) map } def
X /cent { (ct) map } def
X /sterling { (po) map } def
X /fraction { } def
X /yen { ($J) map } def
X /florin { } def
X /section { (sc) map } def
X /currency { } def
X /quotesingle { (fm) (n') mapdup } def
X /quotedblleft { (lq) map } def
X /guillemotleft { (d<) map } def
X /guilsinglleft { (l<) map } def
X /guilsinglright { (r>) map } def
X /fi { (fi) cmap } def
X /fl { (fl) cmap } def
X /endash { (\\-) map } def
X /dagger { (dg) map } def
X /daggerdbl { (dd) map } def
X /periodcentered { } def
X /paragraph { (pp) map } def
X /bullet { (bu) map } def
X /quotesinglbase { } def
X /quotedblbase { } def
X /quotedblright { (rq) map } def
X /guillemotright { (d>) map } def
X /ellipsis { } def
X /perthousand { (pm) cmap } def
X /questiondown { (I?) map } def
X /grave { (ga) (\\`) mapdup } def
X /acute { (aa) (\\') mapdup } def
X /circumflex { (^) map } def
X /tilde { (~) map } def
X /macron { (ma) map } def
X /breve { (be) map } def
X /dotaccent { (dt) map } def
X /dieresis { (..) (um) mapdup } def
X /ring { (ri) map } def
X /cedilla { (cd) map } def
X /hungarumlaut { ('') map } def
X /ogonek { (og) map } def
X /caron { (hc) map } def
X /emdash { (em) map } def
X /AE { (AE) cmap } def
X /ordfeminine { } def
X /Lslash { (PL) map } def
X /Oslash { (O/) map } def
X /OE { (OE) cmap } def
X /ordmasculine { } def
X /ae { (ae) cmap } def
X /dotlessi { (ui) map } def
X /lslash { (Pl) map } def
X /oslash { (o/) map } def
X /oe { (oe) cmap } def
X /germandbls { (ss) map } def
Xend
X
X/symbol-encoding 189 dict def
Xsymbol-encoding begin
X /space { space } def
X /exclam { norm } def
X /universal { (fa) map } def
X /numbersign { norm } def
X /existential { (te) map } def
X /percent { norm } def
X /ampersand { norm } def
X /suchthat { (cm) map } def
X /parenleft { norm } def
X /parenright { norm } def
X /asteriskmath { (**) map } def
X /plus { (pl) map } def
X /comma { norm } def
X /minus { (mi) normdup } def
X /period { norm } def
X /slash { (sl) map } def
X /zero { norm } def
X /one { norm } def
X /two { norm } def
X /three { norm } def
X /four { norm } def
X /five { norm } def
X /six { norm } def
X /seven { norm } def
X /eight { norm } def
X /nine { norm } def
X /colon { norm } def
X /semicolon { norm } def
X /less { norm } def
X /equal { (eq) normdup } def
X /greater { norm } def
X /question { norm } def
X /congruent { (=~) map } def
X /Alpha { gnorm } def
X /Beta { gnorm } def
X /Chi { (*X) map } def
X /Delta { gnorm } def
X /Epsilon { gnorm } def
X /Phi { gnorm } def
X /Gamma { gnorm } def
X /Eta { (*Y) map } def
X /Iota { gnorm } def
X /theta1 { } def
X /Kappa { gnorm } def
X /Lambda { gnorm } def
X /Mu { gnorm } def
X /Nu { gnorm } def
X /Omicron { gnorm } def
X /Pi { gnorm } def
X /Theta { (*H) map } def
X /Rho { gnorm } def
X /Sigma { gnorm } def
X /Tau { gnorm } def
X /Upsilon { gnorm } def
X /sigma1 { (ts) map } def
X /Omega { (*W) map } def
X /Xi { (*C) map } def
X /Psi { (*Q) map } def
X /Zeta { gnorm } def
X /bracketleft { norm } def
X /therefore { (tf) map } def
X /bracketright { norm } def
X /perpendicular { (bt) map } def
X /underscore { (ul) map } def
X /radicalex { } def
X /alpha { gnorm } def
X /beta { gnorm } def
X /chi { (*x) map } def
X /delta { gnorm } def
X /epsilon { gnorm } def
X /phi { gnorm } def
X /gamma { gnorm } def
X /eta { (*y) map } def
X /iota { gnorm } def
X /phi1 { } def
X /kappa { gnorm } def
X /lambda { gnorm } def
X /mu { gnorm } def
X /nu { gnorm } def
X /omicron { gnorm } def
X /pi { gnorm } def
X /theta { (*h) map } def
X /rho { gnorm } def
X /sigma { gnorm } def
X /tau { gnorm } def
X /upsilon { gnorm } def
X /omega1 { } def
X /omega { (*w) map } def
X /xi { (*c) map } def
X /psi { (*q) map } def
X /zeta { gnorm } def
X /braceleft { norm } def
X /bar { (or) normdup } def
X /braceright { norm } def
X /similar { (ap) map } def
X /Upsilon1 { } def
X /minute { (mt) map } def
X /lessequal { (<=) map } def
X /fraction { (/) map } def
X /infinity { (if) map } def
X /florin { } def
X /club { (Cc) map } def
X /diamond { (Cd) map } def
X /heart { (Ch) map } def
X /spade { (Cs) map } def
X /arrowboth { (<>) map } def
X /arrowleft { (<-) map } def
X /arrowup { (ua) map } def
X /arrowright { (->) map } def
X /arrowdown { (da) map } def
X /degree { (de) map } def
X /plusminus { (+-) map } def
X /second { (sd) map } def
X /greaterequal { (>=) map } def
X /multiply { (mu) map } def
X /proportional { (pt) map } def
X /partialdiff { (pd) map } def
X /bullet { } def
X /divide { (di) map } def
X /notequal { (!=) map } def
X /equivalence { (==) map } def
X /approxequal { (~=) map } def
X /ellipsis { } def
X /arrowvertex { } def
X /arrowhorizex { } def
X /carriagereturn { (cr) map } def
X /aleph { (al) map } def
X /Ifraktur { } def
X /Rfraktur { } def
X /weierstrass { } def
X /circlemultiply { (ax) map } def
X /circleplus { (a+) map } def
X /emptyset { (es) map } def
X /intersection { (ca) map } def
X /union { (cu) map } def
X /propersuperset { (sp) map } def
X /reflexsuperset { (ip) map } def
X /notsubset { (!s) map } def
X /propersubset { (sb) map } def
X /reflexsubset { (ib) map } def
X /element { (mo) map } def
X /notelement { (!m) (nm) mapdup } def
X /angle { (ag) map } def
X /gradient { (gr) map } def
X /registerserif { } def
X /copyrightserif { } def
X /trademarkserif { } def
X /product { } def
X /radical { (sr) map } def
X /dotmath { (m.) map } def
X /logicalnot { (no) map } def
X /logicaland { (an) (la) mapdup } def
X /logicalor { (lo) map } def
X /arrowdblboth { (io) map } def
X /arrowdblleft { (<:) (lh) mapdup } def
X /arrowdblup { (u=) map } def
X /arrowdblright { (:>) (rh) (im) mapdupdup } def
X /arrowdbldown { (d=) map } def
X /lozenge { (dm) map } def
X /angleleft { (L<) map } def
X /registersans { (rg) map } def
X /copyrightsans { (co) map } def
X /trademarksans { (tm) map } def
X /summation { } def
X /parenlefttp { } def
X /parenleftex { } def
X /parenleftbt { } def
X /bracketlefttp { } def
X /bracketleftex { } def
X /bracketleftbt { } def
X /bracelefttp { } def
X /braceleftmid { } def
X /braceleftbt { } def
X /braceex { } def
X /apple { (AL) map } def
X /angleright { (R>) map } def
X /integral { (is) map } def
X /integraltp { } def
X /integralex { } def
X /integralbt { } def
X /parenrighttp { } def
X /parenrightex { } def
X /parenrightbt { } def
X /bracketrighttp { } def
X /bracketrightex { } def
X /bracketrightbt { } def
X /bracerighttp { } def
X /bracerightmid { } def
X /bracerightbt { } def
Xend
XEND
Xif [ -n "$all" ]
Xthen
Xcat <<'END'
X /Times-Roman /Roman /R fontinfo
X /Helvetica /Helvetica /H fontinfo
X /Courier /Courier /C fontinfo
X /Symbol /Symbol /S fontinfo
X /Times-Italic /Italic /I fontinfo
X /Times-Bold /Bold /B fontinfo
X /Times-BoldItalic /BoldI /BI fontinfo
X /Helvetica-Bold /HelveticaB /HB fontinfo
X /Helvetica-Oblique /HelveticaO /HO fontinfo
X /Helvetica-BoldOblique /HelveticaBO /HX fontinfo
X /Courier-Bold /CourierB /CB fontinfo
X /Courier-Oblique /CourierO /CO fontinfo
X /Courier-BoldOblique /CourierBO /CX fontinfo
X /Helvetica-Narrow /HelvNarHn /Hn fontinfo
X /Helvetica-Narrow-Oblique /HelvNarHo /Ho fontinfo
X /Helvetica-Narrow-BoldOblique /HelvNarHx /Hx fontinfo
X /Helvetica-Narrow-Bold /HelvNarHb /Hb fontinfo
X /ZapfChancery-MediumItalic /ZapfC /ZC fontinfo
X /ZapfDingbats /ZapfD /ZD fontinfo
X /AvantGarde-Book /AvantAR /AR fontinfo
X /AvantGarde-BookOblique /AvantAX /AX fontinfo
X /AvantGarde-Demi /AvantAB /AB fontinfo
X /AvantGarde-DemiOblique /AvantAI /AI fontinfo
X /Palatino-Roman /PalatPR /PR fontinfo
X /Palatino-Bold /PalatPB /PB fontinfo
X /Palatino-BoldItalic /PalatPX /PX fontinfo
X /Palatino-Italic /PalatPI /PI fontinfo
X /NewCenturySchlbk-Bold /NewCB /NB fontinfo
X /NewCenturySchlbk-BoldItalic /NewCX /NX fontinfo
X /NewCenturySchlbk-Italic /NewCI /NI fontinfo
X /NewCenturySchlbk-Roman /NewCR /NR fontinfo
XEND
Xelse
X if [ -n "$files" ]
X then
X cat $files
X fi
X if [ -n "$lines" ]
X then
X echo $lines
X fi
Xfi
Xecho "SAVEOBJ restore"
Xecho "\004\c"
END_OF_FILE
if test 18900 -ne `wc -c <'utils/psdtwd.S'`; then
echo shar: \"'utils/psdtwd.S'\" unpacked with wrong size!
fi
# end of 'utils/psdtwd.S'
fi
echo shar: End of archive 3 \(of 16\).
cp /dev/null ark3isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 16 archives.
echo "Read the README to get started with psroff installation"
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still must unpack the following archives:
echo " " ${MISSING}
fi
exit 0
--
Chris Lewis, Phone: TBA
UUCP: uunet!utai!lsuc!ecicrl!clewis
Moderator of the Ferret Mailing List (ferret-request at eci386)
Psroff mailing list (psroff-request at eci386)
More information about the Alt.sources
mailing list