clewis@ecicrl.UUCP (Chris Lewis) (11/17/90)
Submitted-by: Chris Lewis <clewis@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@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@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@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>,@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@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!.@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,@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@L%UP````,B\E_2.]>MI]QMQM XMQF@X3%6CA,1:2#Q4M(/$3`.3PTP3A,,\%(332$TSD]-)/32$TEA-+TE-%931 XM]*306DT%EL[UILUJ;-:US.)L!LKVP7R'PFR/;#;)/&/#L'=Q````+2@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@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@W;&945LIC0GSL;4 XMK:]-[SWO3>\][TWO/>]-[ST@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@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@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@N8L8MHM8LWN7L6O6 XMKVOVK5PUJUQ5J5QUIUR5I5RUI$S4HUS5H5SUH$T4E=%8331UTU9-5%755/37 XM0UUU+B3905V9Z@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@-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@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@eci386) Psroff mailing list (psroff-request@eci386)