Subject: v24i097: psroff, Troff to PostScript filter, Part02/19 Newsgroups: comp.sources.unix Approved: rsalz@uunet.UU.NET Submitted-by: Chris Lewis Posting-number: Volume 24, Issue 97 Archive-name: psroff3.o/part02 Submitted-by: Chris Lewis Archive-name: psroff3.0/Part02 #! /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/B.10.pk.UU fonts.lj/S.36.pk.UU lj.c # Wrapped by clewis@ecicrl on Fri Apr 5 20:55:57 1991 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 2 (of 19)."' if test -f 'fonts.lj/B.10.pk.UU' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fonts.lj/B.10.pk.UU'\" else echo shar: Extracting \"'fonts.lj/B.10.pk.UU'\" \(6381 characters\) sed "s/^X//" >'fonts.lj/B.10.pk.UU' <<'END_OF_FILE' Xtable X !"#$%&'()*+,-./0123456789:;<=>? X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ Xbegin 644 fonts.lj/B.10.pk XM]UD``*``````````!":N``0FKM`0J0```!@)"/P<%%4W-D955'+0$:@````8 XM"@CV'$151S8V-51B@.`0LP```"0)!_,#P;&/BP$R$````/!AW\'!0= XMCG%#XRST',%!T!\B````&1$._AP49"]D8?+5"(C,T)"(E)"$U(W]2*4(J,C,7$HI\;&QL XM>I(6(5(E$T(Y\R1T)%8D(B4C,C0C)#,A1:EM'R?`RL2:2HR:"HT9RE%92I&8RI6<2M7C&=Y(EEH(F:D XM-<.X>73`%2<````-!P[]'!0O8=$4$?8?45\4)!70)B@````3"RG\'J&1@H." XM@H-_-T?S?B1E;H1U?B2/.$CSDY*BDY*QL=@F*0```!,+*?T>&QLI.2HI.?.$ XMCSCB1UZ'1EXF1_-T?S(]\]XCWB/>(]\]XCWB/?/>(]\P$" XM`1#0(S`````8$QO^&F>D-'-S5'1#DSXDE!ZUE?%)0SDT1T4W-T-*=L`3,0`` XM`!@1&_T:DM!*=K9"7.UE?]/`,C(````8$QO^&EB<8U*T%*,D XMDT5D7*=@P#0Y````&!,;_AIGJW145'0TA#24'UE!XUE12&(X8D815#0A5E-= XM%?T4,X4E=#5S1'135(JG@+`0.@````T&$OT1%!S!3:0`T]```` XM)1X-_1"T&5![T=`AN0```!<0'?T45+XVM`3^0M/?+3P\2TM7,?5J=!2",V-9 XM0-`A/P```!<0'?T<2&)D,H04>O91-UI;2SP\/?+>0@3TOC:T<+!,0````"4> XM'?T( XM;&==-&7416U35=8T;7)%V"/E;=]KTA749&TV5=-E;29ETF==%H;&IWC-$DTI XM8C#(%T@````E(!S^&_T4T>E&QH_;CK;&3]%-$+@-20```!(0'/\;U.RU9=3` XM&TH````9%!S_&U_2[4ME)V1&8_96-E5457-%J(#(1TL````E(!S^&_T7M&T3 XMEM`Z;#MK+0:BT6@])G/39CU&4]5D358VU&)]21;3@GTG1M)F;19GT&=M!H;& XMEK:7IJ:FMI:W3]%-$,@=3````!T8'/X;_3SM%M7B;"]<:R5J-6E%9V']H0 XMR$!-````+2@<_ANM?8U;1]5XXB%=,A6/(ET2)8\C7"-8\D6B18XB58)5CR96 XM)ECR=4)UCRA2*%CB*7E8\J6E3Z1K;T:U5J5FAGU9ZFU/T=#`1E$````D'23]&ZG455T$E*6U?UT%5=)3 XM;28O744>=M1O%=12;28UTE16-E54$R-74A4A6D$6709%U+<=8G'6-2_6K]>- XMEMM#R#12````)"$<_AO7T-K1:&T&I<:UOD:VIK6VI<:%T=/49UTFA=%H;0Y6 XMEL]I9B1J9=-U0AT9@L`W4P```!L4'/T;6%%,$S1V)*0CPQ3#'TT"%=)]"ZT7 XMT6TGT7T:K2;273;]%M$Q/0,4LR:$(QQ!6&#`'U0````A'!S^&Q_=)&9D(W9S XM(H:"$X:%XY:2[2MM/]50R!]5````)2`<_AO]&*[51M,I73*5TBM=`\6ST6=- XM/1V)L,@Z5@```"0A'/\;_1FD;4*?;2*GT#MM`L>ST&LM%Z+2]I+4]G+5=3UF XM4M=S/88RV7(MKV$MSB?>]0$//2#(6E<````Q+AS_&_T3T5I&MM`H:WPH>VLY XM:VLJ:HHK]IB2QW(F<]!G(F*C8]Z?:]<7;313<\]$]#`0E@````D(1S_&Q_13'>RT7D])W/4 XM9RU74M=S/88CV7$MN-WWWGWGW(VZVB)]@D;7-'U39]0H;3*7T3I]`L>RT'7\ XM;2#(+UD````D(1S_&_T9I'TCE]$K?#M\+0>BTG@])X+4=BUG0]9T+8EMK]&<`X6@```!T7'/T;']@FAC27,Z8_.F0J92EU*6TVTWTVT_;3;3>" XM9I)6HD>B1J,VLS:C-K,GI":6']D0N`Q;````#0````&`T'^QQALY5S$T0T$W,1D1#`%6`````-!P[^'%%"3Q7Q XM7Q810='Q8D'`*6$````7%1+_$4FS5(55961E96-UTUR88E9554=45U/B6%1' XM$454$G1T8,@F8@```!L7'?\<^-7H754GF$1V@V647UI$Y5I?-:1%E%:#9!)4 XM4 XM4V.#1),DHR2I^M_BTDTELB2R-))48Y=0T!MF````#Q(=`!R7E#-T-51%145% XM4UY%G]GM6OQ0P#1G````&!4;_Q%G-%-4(S14(S-S(CXT='-SA%234Y(7L=?R XMUM"-)])=0DJN+003T#)+1$=(M<@<:````!L8'?\<^-;H765&E2(TA1%D?V=6 XMZEA3^RN0$FD````."Q[_'31N-F3<^&ZC4ZS`&VH````/#B8#'92>-I0$[X[4 XME1-:2D05-#-#9E#(+&L````9%AW_'/C4Z%U/5)16.%4Y5"M3+%$]"LNV%+4E XMI3651)5%A55U93^CD,@-;`````X+'?\<^&[;4]G8(&T````H)1+_$81G9H(C XM1"-(419"%D?V=G5NI86%/[*RL-@8;@```!L8$O\1A&:"(TA1%D?V=6ZEA3^R XML-`?;P```!@5$O\1=[145;7Q2T-)14='14MW#()W`````;%QK_ XM$8)VM$=G1EE%651:1.5:4UI$651916=&=4=2:N5=+[S`*7$````9%AK^$692 XM=$(C9&94A46%1)4^595$E46%5(5C=G-7EB74Y5T?L-@7<@```!01$O\1-4)$060B=BV!9U````&Q@2_Q'X6&ZU XMA65V=':$0AAV.,@B=@```!D6$O\1^EGU2P```!4.*?T>I(.CLK[#LK.3A-/3 XMPL[#PL/#U-@;?0```!4.*?T>33T\+.P\+#P]2#H[*^P[*SDX2L`WNP```"`9 XM'?PA6:%"18%15T-1 X',SB$=8#U]M,V X` Xend END_OF_FILE if test 6381 -ne `wc -c <'fonts.lj/B.10.pk.UU'`; then echo shar: \"'fonts.lj/B.10.pk.UU'\" unpacked with wrong size! fi # end of 'fonts.lj/B.10.pk.UU' fi if test -f 'fonts.lj/S.36.pk.UU' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fonts.lj/S.36.pk.UU'\" else echo shar: Extracting \"'fonts.lj/S.36.pk.UU'\" \(23815 characters\) sed "s/^X//" >'fonts.lj/S.36.pk.UU' <<'END_OF_FILE' Xtable X !"#$%&'()*+,-./0123456789:;<=>? X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ Xbegin 644 fonts.lj/S.36.pk XM]UD``E``````````!":N``0FKG%6(0```'-JD_5NWCWO7<;<7<;<]=QMQ=QM XMQ=QMQ=QMQ=QMSUW&W%W&W%W&W%W&W/7<;<7<;<7<;<7<;<7<;<]=QMQ=QMQ= XMQMQ=QMQ=QMSUW&W%W&W%W&W%W&W/7<;<7<;<7<;<7<;<7<;<]=QMQ=QJ4:Y: XM4JUJ-:Q:-JMJ*`JEHH&J6@@ZEI\R@*A9\S@*=IXF@*99TW@*5IPX&`I%GA@H XM"C:I@*-:N`H6JX"A6M@*!:V`GVK8"?6O@)UJ^`G5L8";:Q@)M;*`FFL_@)E; XM6`EVM8"76W@)5K>`E5N("4:Y@)-;J`DFNX"16\@)!KR`D%OH"/6^@(YK^`C5 XMP(",;`@(Q<*`BFPH"*7$@(AL2`B%Q8"';&^`AER("$;(@(1XQ+BSO,"[L;^]I:2@ XMKL.YHZN:NEBNMZ*OBIHJ:LLZ*RBGH:NJL:&V>FFOJ:^@N7I(LJFMH+MJ.+6I XMJIOFH8MZFHG`:@>YJ::<)9>[J:2<-H:]J*.<57:_J*&<=6;`J)G(56PJAYRE XM1<2H65PIIJFY>@;`FHJ;>*%KZ:JIM8HVNZ"MJ;**1[F@KZFOFF>VH; XM&JJZ&GBRHK.LIJ*IBOHK>NBEJYJZ.YPZZ@I*6]O[&[P+RSN,2XM[3(M;JPS+ XM&^J]*KQ:+L3B?,+B?L+B?,1ZQO>, XMAVRW+1$`DN_4$.#QU`"2X=%RRW;(]XQGK$XGS"XG["XGS$>L;WC(=LMRT1GP XMH2DF````?VQ$]T*\L`%+"YN-NTMKW6M[7!T;FSQQO+)[G$ XML;VK2WP:OYN+:_J_B\M;V<%[^TNYP7P;2YC"?#M+>,-L6TM8PVQ[2SC$;(M+ XM&,1LJTJ,5ZBYL<2YMY XMM;''O[&Q>URKVSQ,V\M,'1NK:]UK>XN-NUO+`!2PH.,J````?TY/Z$TD`80E XM`747`5M`$[8!&1G?DJW:.MNEK9IZUZFM6K"M.K*M&K2L^K:LVKBLNKJLFKRL XM>KZL6L"L.L*L&L2K^L:KVLBKNLJKFLRK>LZK6M"K.M*K&M2JK6J*V*:MJDK< XMHJWKD!"W`2M0%+,!:Q`8H!BQ`6LP%+4!*W`0N=ZBKGK9I:VZ.MVBG?D9`1M@$[0!5Q4!=30!A!!P#RT```!_8@?R XM*1_8$,[QV!"0D#P```!C3$7U1]\=]-Q]B@UJ'5HM2BTZ+4HM2BU*+3HM2BU* XM+4HM.BU*+4HM2BTZ+4HM2BU*+3HM2BU*+4HM.BU*+4HM2BTZ+4HM6AUYV:'8 XMHMBBV:+8HMBBV*+9HMBBV*+8HMFBV*+8HMBBV:+8HMBBV*+9HMBBV*+8HMFB XMV*+8HMBBV:+8HMBAV:#;?=0!`2"0D#T```!C3$7U1R$!!-U]N@V:'8HMBBV: XM+8HMBBV*+9HMBBV*+8HMFBV*+8HMBBV:+8HMBBV*+9HMBBV*+8HMFBV*+8HM XMBBV:+8HMBAV9UZ'5HM2BTZ+4HM2BU*+3HM2BU*+4HM.BU*+4HM2BTZ+4HM2B XMU*+3HM2BU*+4HM.BU*+4HM2BTZ+4HM6AUJ#8?<3?'?"(7D,```!F6&CZ9YB1 XMP$XMM-R6FZ:=F)BLF)F6KY::E;&4FI6SDIJ5M)&:E;60FI6VB:^5MXF?E;AY XMGBE;EIGY6Z69^5NFF.:5NUF..5O%[#EY70E\Z9RYZ\X[BNF)2:K@821$```` XMB'=L^&NB7:<-CW+6]TU/=M+WC0]ZSGS,]^RF%YR5)YR&-YQU1YQF5YQ59YQ& XM<'G#5R>,)G)YP5='C`9T>;[V=GF\]GAYNF>GFY5[>;AGQYMU?7FV9^>;57]Y XMM&@'FS6">+)H)YL5A'BP:$>:[VAGFL]HAYJFBGFI6+>:AHQYIUC7FF:.>:59 XM!XI&D'FC62>*)I)YH/:4>9[VEGF<:8>9M9EYFFFGF96;>9AIQYEUG7F6:>>9 XM5:!XE&H'F36B>))J)YD/:D>8[VIGF,:H>8M:EYBFJGF)6K>8AJQYAUKGB&:N XM>85;!XA&L'F"]K)Y@/:T>7YK9Y?5MWE\:X>7M;EY>FNGEY6[>7AKQY=UOGAV XM:^>752JY.YDZB3NY.F^3O9 XM.DD[^3HI/!DZ"3PY.>E,.4G)3%E)N3QY.:E,>4F/E,F4EOE,N4E/E,V4DI7- XME9&4SY20^5SY6)31E'^5T959;1EDXI73E3EM.6+BEI!;=9"6+Y616W61E1Z2 XMEI'!D:7Y%;=9&6\9616W61E2EI!;=9"6+BEM.6/Y73E4EM&67BE=&5?BE<^5 XMD)3/E)&5S962E,V4DY7+E924RY26^4R928^4QY2:E,64G)/%DYZ3PY.?E,&4 XMH)/!DZ*3OY.DD[V3II.[DZB3N9.JD[>3K).UDZ^2LY*RDZ^3M).MD[>3J9.[ XMDZ63OI2AE,&5FY7%EY.7RJW0I]:AWY6V<1M+````<69L^VNI39;7XH#5XH+3 XMXH31XH;/XHC-^*R^*,R6&'R/4H?'8X?&]4A\5EA\16A\17AL-GA\)8"'PE@8 XM;!:!A\!8*'P%@X:_]82'O6A8>\]8:'NVAX>Z]8B'N6B8>X6*A[A8N&MVBX>V XM6,A[98V&M6C8>T6.A[18^&L_60A[%I&'L/62AZ]I.'KO64AZUI6'K/66AZMI XM>'JEF(>J69AJEIF'J%FH>H6;AJ=IN'IEG(>F6=AJ7UGH>C:?AZ+UH(>A:AAZ XM#UHH>?:CAYY:2'GEI8:=:EAYQ::'G%IX:;:GAYI:B'FEJ8:9]:J'E_:KAY5Z XMN'E7K(>3@*R'DH*KB)"#JXB/A:F*C(FFC(B/H)&!XYB5JX"&E8F"AH`V3@`` XM`&U>:/EG+I$!%(T8-]5RXVUV+F794`0PYUNUI^D<6GYUNU`%2>==N2Y-EA;7 XM8HTX+I$!,8@V4````'MN:/IGF(PX`!@).9N9FAE[F7I):YEJ;MZ5N96FE[>7 XMI)FUF:&=L9V3X[69QI.8F9B3F'$B4@```'9C:?=H'63BUTV$BJB56*KHYHFR XMBFBK.(>*M(:`BK6$@(JV@X&*MH*"BK:"@HFV@H**MH&#BK:`A(JU@(6)MGA8 XMJU>&BK5H>*M&AXJT>'BK1HB*LVB8FS:)BK-8J*LEBXJQ6,B;%8R*L%C8JP6- XMB;!8V*KUCHJN6/BLJ)RHK*BLKXK*BLJ*RHG*BLJ*RHK*B\@X1[R#A'O(2#>[AH)[J(@7N8J`>VCG>OEFU5UDUDXM==9`H))3 XM````/#U3^T+)MLR_Q<3`R;RSL+*YLKB;BKYK>L,;>M>=B-B=B-F-F-F-GXV8 XMV?C9C9G9^-F=GXV>2=GBK8L-?['6LM:RU;/4M=.VT;C0N-"YS[K.N\V\S+W+ XMOLN^RK_*O\J_RK[+OLN]S+O.NL^XT;?2M=2SUK'7^PV/K9G9C9G9^-GXS"L( XMS&:;ZPI50```!_;&OW:L60')TL4!3%S,K>RLG-VLW&T-C0P]/4 XMT\'5TM6]?0UZV,[8G:S-I_W,K<7"K&R,:L)+Q,3&Q,2SG)P\3#R9*,S!Q,', XM@GSL'"PHK743V*BM XM@][Z:@-_I*`Y^4D#OCDI`]X\8#_EQ`0>`9P@0<0#_&`[S`*N,!@!S'PL?0#! XM*E4```!V8VGW:-O6T-8"/C`F`QV@0M0$;2!([-`$;6`]`2`S`:`L`@`FU"T" XMU`(-)]!](!O1K0K1`7T-#0T-`!3-+0TL`1S4T-3-[-70UT-[2/]'>T-[17]'=T- XMW1?0W=#=T(T=S0W-&=#S4T-3`$,"8"/6T-;;<0=7````?VQI]VB4BX6+ XML>.KOX_0B=2'UN@X6IAIB%F888F6A9>;E866BABI2%E8IH>3A92'@X>2A9.' XMA8>1A9*'AX:1A9*&B?AI"%D8:+^&CX60AHWBA8^%D(6.^&CH6/AH_H2%CH6/ XMA9"&C86.AI'DA8V%CH63XH6,A8V%E82,A8R%EOA8N%C(67A(N%BX68A8J%BX XM69A(J%BH6:A8F%BH6;A(F%B86A8>%B(6?A(>%B(2AA(:%AX2BA8 XM6%AH2DA82%A82FA8.%A(2IA(*%@X2KA(&%@H2MA7A8"$L8585H6SACA3AK>C XMNY_`FL63SHG5Z$A=:'U(G0C[_CJ[&+A8N5"1.E@```!V9VOY:L&G`6L]R[U< XM'0J*&HRZ:KIL:EL:7#I+6DP*2YI+RDO:2YI+^DMZ3!I+2DQ:2QI,>DKZ3)I* XMVER:6KIG3J"FV:9*?7IUXZ;7IGXJ;5III=6EH*;3IJ'BI=.EHZ71I:6DT:2FI<^E XMI_I,^DJ?I,VDJZ/-HZWZ/+HZ^CR:.QHLFBLZ')H;2BQZ*UH<>AM_H<6AN:#% XMH+OZ##H+V@P:"_G!G!C!C"F_G#B_C%>_>N6IB]BIH*I[UZI16IB[BI4O6J>[ XM>J4EJVNVJU):QKEJQ3]:MKEJM46L6Y6L5%K&MVK%1JQ;=:QE6L6W6L5FJUMU XMJV:*I+=*J&^WM;=^2VM;:+:UM:"UM;6@M+>T4&DD60```(AW;/AH#^\=X_W% XM_:;YG9XOE=WF\9X>;M7EYNF>GFY5[>;AGQYMU?7FV9^]YM& XM@/>;)H)YL&A'BP6%>:YH9YK5AWFL:(>:M8EYJFBGFI6+>:AHSWFF:.]YI&D' XMFB:2>*)9-YH&E'B@65>9YI9YG5EWF<:8>9M9EYFFFGF96;>9AISWF6:>]YE& XMH'F2:B>)):-YD&I'B06E>8YJ9YC5IWF,:H>8M:EYBFJO>8AJSWF&:N>81K!X XMA%L7F":R>();-Y@&M'E_6U>7YK9Y?5MWE\:X>7M;EY>FNO>7AKSWEV:^>71L XM!X=%P7ER;">')<-Y<&Q'EEQ7E6QGE%QWDVR'DER7D6RO?LQ\SO>M#WC2]VU/ XM=-;W+8<-I:*A8%H```!65&_Y;,^R`8N@$<#Y['P'++,LKBRR+FULL6_LK+"P[&RP+ XM2:JROK*UB+.]L+MGL[NPOF:SNK#`9;.XL<)5L[>PQ5.TMK#&4[.UL````?V*" XM\F84UGTH+0A,Z&S8?+B(R(C(B,B(R(C(B,B(R(C(B,B(R(C(B,B(R(C(B, XMB(R(C(B,B(R(C(B,B(R(C(B,B(R(C(B,B(R(C(B,B(R(C(B,B(R(C(B,B(R( XMC(B,F'RH;,A,Z"T7TU`)^M8]@0SO'8%("E\```!+2P4`W@\@L1UA````:5M$ XM^4+9P`+L@"C.`CT0(,)\`!S`PJ`:O&H!:\FLQ,B\NLIL6\V\EL2\^\A<2]&L XMA<.]*\9L*]2\5L'`U+Q5P<#6O#;`P->\-KP-B\)KP=C`P6O`VKP5O!VKP&K! XMV\"VK!V\"FK!W,"FK!W;EJP=ZY:L'>N&K!W[AJP=^W:L+?MVK\$!"V:L(!"U XM:\(!"T;`P0$<`VP,$!'`)L'!`1P!;!P@$<`6P<$!+&POP0$L7#P0$L3$P0$L XM/%P0$L+&P`$\''_``3P,GBL!2\G``3O*L!'!RK`0PLJ]_#R[W<3+O;QLR]ER XMO!1ZUX.\!7O4AJP%B]&7JVFL^:J7J\JL"I;!K&O#IVP\"L+&E7QM3)Q\G/SL XM3,RM+!TL':BPH8YB````7%F*_&L!.Q`>N`&+T!3!`0L8L-Z;2=N;>=B;J=:+ XMV=1[^M&,&=!\.LY\2LU\:LI\BLE\FLELJLALNL=LRL9LRPQ7S+#%;-L, XM1LZPPWSK##;.L<)L^QPFS[#";0L,)L^QP6T+#";/L<'VT+#"70L,)M"PPFS[ XM#";0K#;/L,-<^PQ%SK#$;-L,5KFT6L9;?%QUM<7(:TQQNUUK*Z]M:RNO77LKGVUK.Y]=>RN?;6L[EM:RNEUK.Y]M:RNF XMU;.Z;5LKI]2SNHT[*[C3L;R-*RNYT;*\K0L;VL^RO:S[&]L]L<5IBZL,=;";6RR%LK";/):S XMQ,MK6_SEN;G16]L=3V`H]0*/8"CU`H]@*/4"CV`H]0*/8"CU`H]@*/4"CV`H XM]0*C`J"`V&,```!456/^0J&2SIBP.?:1E9F5G6D9.?DYQI&1HY&;:1D*:1FFD)"HD)EI XM&*J)EI"*R)=I%ZYY=I!Z^)5I%K%Y5I%K)I1I%K-Y-I%K1I-9);5I)I);99)I XM,[=I!L=I!LA8;)9VR6=*1TN*0 XMT_C4XGU>)M9=;C;5XFU>-]3B?4^-3WU/C4]]3XU/?4^-3B?5]M5]5M==@JJQ XM%60```!(0FWY:]^P&,4!+*WLW_P==Z_!V' XMG"V&K\'8>?PMAYP=EJ_!V'G"V'GBP=AZ_!UWO!UVP,'6?`P-=\#`UGPKUGPO XMO5?#P--\6]-\6])\:]%\B]!\B\]\J\U\RLQ\ZLI\^\B-"L>-*\1]:L&-C`>M XMO-W\H!+&`8O6L'1E````0C5#^$'7Q=/+S\[-T,K2RL37PMG"VL':P=O!V\#< XMP-S`W,#,!&,';PMOFP=SBP-[[WN+`WO XMO?^]^M^]^@$*W[TSF]!IK/>KRYP*R*PKP[QL",')TLW.TLC9P,60U68```!( XM18OY:\$=E-;D75;5XEU_764Z7$L,&QP;&^H*)[RBH8N[6Z@JRZA*JYB:2[C2 XMC2?2C2C2C2C2C2C2C3?3?3C2C2C2^-*-*-+XTHTOC2^-+XTHTITHTITOC2^- XM*=+XTITOC2^=+XTN.=+XTN:=+CH-'Z'1H-'Z'0HL^CSZ/.I,ZDS:7,ILRGRZ XMC)J\>NQ+#"LL"TO[6]M[RWN[B[M[VUO[/!L<.NQJS(J]:FB]>DC`>AC"H&C%J\>HRZ70BQ#`^&<```!23&/[0M"`$T'2M&HNV>KG0JEFI?4J&FG?6MFNE?8IFND?9M&RR?;I&RQ XM;=I%T-7=HVT-3>LFT-/?LET=(!"_%M#2`1L5T=$!*Q71T`$]30T0$M70T`$[ XM'UT<`4LCT<`4S6P!3-;[`5O6_`%,UOL!6];\`4S6^P%;UOP!3-;[`5O6_`%, XMUOL!6];\`4S6^P%;UOP!3-;[`5O6_`%,UOL!6];\`4S6^P%;UOP!3-;[`5O7 XML!3->@%L9XK%>IQ'NL&,&:G$EKQLO)R,W$T:S+#Z:@```%Y01/="QE`N XMC9C-K5P<'( XMP,9ZP,G`Q6P9R[Q6Q%S;PW`2P,)P$\#!8!6\!P%KMP%L"F`8P(L9`?QP(-`!C7`1VM[=VL"K9L#8FV;`V*EGO:F&B]N5>; XMW,>JW\3`@!'!PU`6C#"1`FL```!?3VSW:JF=NDUZ;6I]BDV:38I-BCV*38H] XMBDV/H]GZ/9XJ/9XJ/9^CV>*CV>*CV?H]GBH]GBH]GZ/9XJ/9XJ/9^CV>*CV> XM*CV?H]GBH]>EU:;4J-*IT:K0@:/.@J/-@Z/,A:/)H%H\B@>CQJ"*/%H)H\2@ XMH:/"H**CP:"CH\"@I:.^H*:CO:"HH[N@J:.ZH:FCN:&KH[>AK*.VH:VCM:&O XMH[*BL*.QHK*CKZ*SHZZBM*.MHK:CJZ.VHZJCMZ.IH[FCIZ.ZHZ:CO*.DH[VC XMHZ.^HZ*CP*.@H\&CFCPJ-Z3$HUI<2C6DQJ,Z3'HSH\BD*BRJ,J',HQH,VD&- XM"B)M*@&Q"FP```!B6&/[0LY0-HVEUZV(UKUJU/P-6]3[UKT_P-7`T_O6O3_` XMU<#3^]:]/\#5P-/[UKT_P-7`T_O6O3_`U<#3^]:]/\#5P-/[UKT_P-7`T_O6 XMO3_`U<#3^]:]/\#5P-.]:]2]:\),'\#5P,%L#`U;PEP;UKPEP/P-7`P6P,#4 XMP,)<'`T\'"7`P=/!P6P,'2PL%<'"T,/!7!PL_#P6P,/.Q,%<'$S<3`;!Q,MQ XMNVP<7)JI7PL`L["Q\/`/,Q,3%M\;)P< XM:[O/C'_``P^P,/P`,/L##\`##[`P_``P^P,/P`,/L##\`##[`P_``P^P,:`S XM@#90-+#7;0```%!,0_A"R'W5P,;SJ:&+&D&NL:0ZRPI& XMJK"DH*2RH\NCRJ3*^DRJ3*I,KZ3*^DROI,NCR_I,OIH\WBH\VCS:+-HWI[6C XM*MM+VTN[6GHVMZ2C>UNK2ZLY.NM(FGMHSYSYSXT(T)SYT(T(T(T)T(T/C0^- XM#XT)T/C0YIT/H,^ASOHLVDS*3+IM>LFM6LNM.LRM*LV]"L^L^M"\VM&\R]&\N]+`RKT[R;U+ XM_(O4P/Q[U<#&P-7`QKUL#%P-;`Q;U\#%O6P<3`UL'\2]?!_#P-;"_#O7P<7;Q,3#V\[\#8O-_`V;S/P-J\R]N\O`V[R[W+RL#;P,K`V[R_ XMO]2S?=^-U]WCC*AV?HMGBH=J@W(WFQPL.5T````65!$^T+%@!%;(_`WER;WFR,#>;(P-Y;)O>7) XMP-ULG`W5RKW6RKW5R[W&R_O;;,O:;-K;;-K:;.^]AL^]=M"]9M*M5M.]-].] XM)]6]!]>L]]B\U]J\M]R\AP$+Q(`2PID!;1`9S0';>LLWFWK+-Y=^RO?7? XMOQS>;>SQO?7?LOO>;>P;>L[WFW<.]Y=ZUK>7=Q:W6W;:MUM XMRWK=7>O6:$E;IU=Y6X=7D)6V=FDI6T=FDY:RAFE)6R=U XMEI6P>026E:]Z65K7II6L>HE*MZF5J7JY2H>LE:9ZZ4I7KY6C>QE*)[*5H'M) XM2?>UE)Y[>4G(MY2<>XE)M[J4F7NY28>]E)9[Z4E7OY24?!E))\*4D7Q).0?% XME'?&E&?(DU?)E#?*E"?,DQC,F\V:SYC0E]&6T^*4U>*4TY;1E]"8SYK-F\R! XMD\QRE,ISE,EUD\AVE,9WE,5Y"3Q'D93">2E,%Y24OWE92^>6E+UYB4NWF92Z XM>;E+AYR4MXG)2W>>E+5Y^4M'H)6R>BE+%Z.5KWI92N>FE:QZB4JWJ96I>KE* XMAZR5IGK96E>OE99)!["5EE=[*5E&:+*6DV9[25DF9[:5D'5[B5=U>ZE4AFO9 XMYUOYN1/#E]21E+&C=P```&MBBOMJ`J,$)00/8$#U!`]@0/4$#V!`]00/8$#U XM!`]@0/4$#V!`]00/8$#U!`]@0/4$#V!`]00/8!:-9V@(]4"C/`QQ0./4$#V!`]00/8$#U!` XM]@0/4$#V!`]00/8$#U!`]@0/4$#V!`4$)`'@L0!X````9E]$_4(#E'U(U(A]2-.)?4?4B7TXTXJ-&M&:C0O0FYSL#/G!C-PLR\&0```"0%D_%N$Q`"UQ,0L%MZ````0"N3]F[8 XM?4O2C5?6?7?7;8;8;8?7]]?B?7[??7XGU_?7?8;8;8;8;7?7;6?2O4?8O:?; XM;:?:;:;:;:;9?9]]GB?9[??9XGV??9?9;:;:;:?9?:?:C9O8<+A;>P```$`K XMD_9N?8O9C:?:?9?:;:;:;9?9]]GB?9[??9XGV??9?9;:;:;:;:?:;;?:O8?4 XMO2?6;7?7;8;8;8;8?7]]?B?7[??7XGU_?7?8;8;8;7?7?6?5C2O4?8"0I'P` XM``!_;$CW2:R@WRJJ?:.HJ]=:6PU%H[/36BMM%:"ZSUF\SEB_S%?!RF>EH*G) XM9J.GILAEHJNFQ6:@KZ7$9:"RI,)UBVI,!EBXI+YU>[H[R$B\H[MU>^I+B%;` XMI+:%?"I+*@5L2EKZ!FQ::KHE;(IJ>C9LFIH*5VRL%US+^%SKR5S[J@71MJ)= XM.SHUU+"E77JZ@]JGJRWJ``P:`N,#`0`0KQ`P$&`A?0```']L2?=*'],0W1TS XMT0"I3],0W?'3`*E-$],0W?'3$*"M?@```$`QD_EN$]+B71;1]=%M'UT6T?71 XM;1XET6T?71;1]=%M'UT6T?71;1XET6T?71;1]=%M'UT6T>)=%M'UT6T?71;1 XM]=%M'UT6T>)=%M'UT6T?71;1]=%M'B71;1]=%M'UT6T?71;1XET6T?71;1]= XM%M'UT6T?71;1XET6T?71;1]=%M'UT6T>)=%M'UT6T?71;1]=%M'UT6T>)=%M XM'UT6T?71;1]=%N+172,0L51_````@&UP]VS*O?O*D#6;@#6,&`,XPI`QG#@#&,6`+XQI`MG'D"N@&:V:`7K;H!6MV@$ZWZ`1H!&M^@$ZW:`5K;H! XM>MF@&;U;`;O3L!V]&P'[S[`AO-L".\NP)JR:`IK'H"NL6@+:PZ`OK!H#&KH# XM.;D#69D#>7D#F'@#N%@#R3D#V#@#^!@$#%!!PP0_P01?L$?Y!)]P2_4!@*!? XMH0```%([B?5JP3W/7:]]CYUK#4^RTK30MLZXS+K*<7%\AR]AW>+J(>(MYEYFSFP>PFJL7L:6PLWL[`;"T>TN;9[:UN'N'%+I[I, XM#@/GVSP00&JB````I)$W]T&]37]1UU#7]1UU'64M91UU'64M91UU'64M92UE XM+64M92UE+64M93U5/55-544]9-L0`;X];15-%4TE/34]-2U%+44M12U%+44M XM12U5'54=52U5'54=52U5'5]1UE#6]1UT9J!?HP```%([B?5JP3V^`^?`2Z>Z XM07N'N+6V>VN;1[2P&PLWL[!:L7L:J;![";.9>9MXAXBZAW>+UV=GP(1TC"@W XM.,2"DPWBEP7H*6_>BI+YZ2DO'I:6Z>GI+EZFDMWJZ2U>LI;-ZZDLGL*2P>QI: XMY[.EK'M:2K>WI*E[BEIWNJ6E>\I*1[ZDHGOZ6@?!I8?#I'?%I%?&I3?(I1?* XMHQ?,J_I:![ZDHGO*2D>ZI:5[BEIWMZ XM2I>UI*M[.EK'L:6N>PI+!ZZDLGK*6S>KI+5ZFDMWIZ2Y>EI;IZ2DO'HJ2^>@ XMI;]XI<%WI,-UI,5SI<9QI\I* XM1[JEI7N*6G>WI*E[6DJWLZ6L>RI*Y["DL'KJ2R>LI;-ZNDM7J:2W>GI;AZ6E XMNGI*2\>BI+YZ"EOWBEP7>DPW6DQ7.EQG*DR'&CRJG,J,VIS'&CRG*DR'.EQG XM6DQ7>DPWBEP7H*6_>BI+YZ2DO'I:6Z>GI;AZFDMWJZ2U>LI;-ZZDLGL*2P>R XMI*Y[.EK'M:2K>WI*E[BEIWNJ6E>\I*1[ZDHGOZ6@?!I8?#I'?%I%?&I3?(I1 XM?*J\RIS:C/IM&DTZ+4H=:=AMM!!("K````!+2P4`<`\@D&2U````;5I>]ULD XM`50E`44>U'`2I?`0@7`0=/CBQJ*IH\*CJZ6\I:ZEN*6QJ+"HM*RDK+?.NLJ_Q,3`R;K0LMJF XMNY!DM@```&U:7O=;NZ;:LM"ZR<#$Q+_*NLZWK*2LM*BPJ+&EN*6NI;REJZ/" XMHZFBQJ*GHLBBI:',H:.ASJ&AH-*@H)U)F=:7G8EHVH7XW(1]Z"C>@HWW)P$' XM'X`0I>U`$G%0%%-`%4&0E[<```!M4&'R5L"[O,"YQ+7'LLJPRZ_-KJK0I]2E XMU:37H]BBV:+9H=JAVJ#;H-N@W)W)W)W8W8W9W8W?C=^-WXWGWOC>?>^-[B?> XM^-[WW_`5$`$%\???^-_B??^-]]_XWWW_C?^-_XWXWIWHWXWIWIWIW:#=H-V@ XMW:'JT\VQR[/*M<>XQ+O`P;L0<)VZ````?V)A\E:B XMKYZTF[B7NY2^DK^1P9",Q(G(A\F&RX7,A,V$S8/.@\Z"SX+/@M"!T('0@=&` XMT8#1@=&`T?@-'X#1^`TGTO@-)]+X#2XGTO@-+H)]/X#3XGT_@--]/X#3?3^` XMT_@-/X#3@-*!TH#3@-*!TH'2@=&"T8+1@M&#T(/0A,^$SX7.ALZ'S(G+C,?! XMD[^5OI>[FKB=M*.O$'"=NP```']B8?)6*NH[2=N)J[E[Z5OY3`QXS+B[E+Z2OY'!D(S$BC_)HEQ:?#J<&KOZV]L+FSM[:SNJ^_J<:AL`D7O- XM````I)&-]VS5J0/K4#2]`MPP)\D"'/`@`CH+:0)9M9`GFSD"F;&0*YL(`MBOD"V:V0+YK(`QBK XM@#.*F0,YJ(`UBG^`-XI?@#F*/X`[BA^`/8GX`_B'!!=_@$&&<$-U^`0X3W!% XM<_@$6"XW!'EZD!)I?!'CC%P1W+X!%@_<$5T^`0X5P0W;X!!AW!!>/@# XM^)^`/8H?@#N*/X`YBE^`-XIX`UBHD#.:F`,XJX`QBLD"^:V0+9KX`MBPD"N; XM&0*9LY`GFUD"6;:@`CH+>@`AH+F@`?H+N@`=H+VA`9H;^A`7H<&A`5H<.B`1 XMHL6BWZ+'H]NCRJ/7H\VCU://I-&DTJ7+I=6FQZ;8I\&GW*B[J-^KLZL!*OIZ XM\!?3`)=;E?4Y9TNR+#2ZXG4ZR?6 XMY5V#OZ![SP```$HWB_=KOEUGU)TNFPTN:=3D?6XUP8LULX6SE9LSN%5;@0Z! XMN%5;@[.5FS6+-;.,'C76Y'U.:=+IL-*=1]90/EUGU)TNFPTN:=3D?6XUP8LU XMLX6SE9LSN%5;@0Z!N%5;@[.5FS6+-;.,'C76Y'U.:=+IL-*=1]9;X*"IU0`` XM`$1#C?=LUXWK':M=>WU85].'?1B6T7F,^'K.A['-AK+BS(>RRY>R_+B++*F; XM#+FIS)L5SHW^6=[DG>XJWOG>Y*W?L-WCK=Y+#=K=Y;#^=[BK>Y)WN6=^,Y;&Q9M@```!208'X=0%D XM`@4!_W`=^`'7`=^-JX?8Q5?5RQC3UM&YP]&J/ZS(NBK,?`HOK+C`HJRWP:+ZRHP: XM&\I\+*_)C"RLE\/*_(C#ROR'Q,K\>,3*QWQ+VO@!UP'?@!WW`?]0%0@>79````@'&'^6BY XME`%I[>I-BJTZ[/EI26RY.>D\>2I)+$D:B1P9&LD;Z0L)"\BTBYD+:0MHNHM( XMO(LHOHL'PGKGQ'K'QGJGR'J'RGIVS&IFSFI&T&HO;2:@;4:>;6:=786<;8:; XM7:6:;::8;<:77>66;>:54!!91@$&D_4!)9)@$FD5`460:UD*UH6SEJM86Q:% XMJ5=J]95*=F6N:8.G5EK5G"IE9:Q9XJ55:K6@*D9%JUHBI%1:IJ(J146I:D*C XM4VJ5IAHV):EJ8J-26H:G*C4EJ&J"HE):=J5J)26G:D>B46IGHXHI*G>CBCD? XMIGI(HY&F>E:DD:6*9*61I8R)'Z5\F1Z*2,F2HXR&XA6CC(4EI'R%):2,=2:C XMC&8UHXQE3UI'QE1J.,1E6D?$5EI'JBGU9:5ZDI]6:D>H*?9UI6J"GUA:5Z8Y XM]8:E:F*?:06E>D.?61:E>C*?:26F:B.?636G:@.@63:G:>.@:46H:<.A65:H XM>82A:66J:56B67:K>&HVF&K)BD::6OD:A9MMAIQ=A9UM9IYM1J#VTFHFT&I& XMSFIFS&IWRGJ'R'JGQGK'Q'KGPGL(OHLHO(M(NHMI"VD+F+2+R0L)"^D:R1P9 XM&HD<22I)+'DYZ3RY:4EL^NTZK8I-Z>`6E+F0$MH```!./T#Y/QTQ#'[+RPQQ XMTQ!8#>````!R)I//;0`=/MUQ6`[A````-:=6]2]2]2]2]2]2]2]2]2]2]/`T\#3O3 XMP-/`T_P-/`TL'2P-/`TL'2P-+\'2_!TOP=+\'1PM'\'1PM'!T>+"T>+"T,/0 XMXL+0XL/0_"T.7#T,+0X#?#"XB/,```!R*I7/;^W,/0PM#BP]#"T/P]#"T,/0 XMPM##T,+1PM##T,+1PM'"T<'2P=+!TL'2P=/`T\#3P=/`T\#4P-3`U+U;U;U9 XMV&U9T[T;T;T<#0P-#`T<#0P=#`T<#0P=#!T,'0P=#!T,+/PL_"S\//PL_"S\ XM//PL_#S\+/_#S\+/XL//PL_MS#SPL&3T````_9U705L]7 XMSU;/5\Y7S5G,6R/7,Q=S%W.6\]:SUG16-%8T5?25M-6TE;35M XM)6T[YJOFJ];+MMNFZX<+5S5-14U%345-14U%/54]14U%344]53U%344]53U% XM344]7U/5]3U?4]52UE"AV`O\````3C]`^3\`_"!`K_T```"DD5GW4J%0UE+5 XM]3U?4]7U/54]14U%/54]14U%/54]14U%345-3U345-14U%345'.U<+EMNVR\ XM:[UJOVF_TU735M)7TE;25])7T5G06=!:SES-7S/7,E=R%W(6\I:S%G,6, XMU8SE?/5L]6T%;/5M!69[YHOFF]:KMLNFZX<;725-)4TE325-)4TU/34]-4TE XM334]-3TU334]-3TU334]/U/3]3T_4]12UE"!8"#^````?VQM]VJ=30;/Z9<) X2S],0W?'3G>E'"<_3$-WQTQ#U X` Xend END_OF_FILE if test 23815 -ne `wc -c <'fonts.lj/S.36.pk.UU'`; then echo shar: \"'fonts.lj/S.36.pk.UU'\" unpacked with wrong size! fi # end of 'fonts.lj/S.36.pk.UU' fi if test -f 'lj.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lj.c'\" else echo shar: Extracting \"'lj.c'\" \(22044 characters\) sed "s/^X//" >'lj.c' <<'END_OF_FILE' X/* X Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 Chris Lewis X All Rights Reserved X X See the LICENSE file for a full description of restrictions under which X this software is provided. X X Function: LaserJet driver, hacked from ps.c and lcat.c X X Without font downloading, this is LJ compatible. X Font downloading will require a LJ+, LJ500+ or X LJ II. X X*/ X X#include "defs.h" X X#ifdef LJ X#include "lj.h" X X#ifndef LJF Xchar *LJF; X#endif X X#ifdef PK X#include "pk.h" X#endif X X#if defined(PARTIAL) X#include "pkc.h" X#endif X X#ifndef lint Xstatic char SCCSid[] = X "@(#)lj.c: 2.7 Copyright 91/03/10 03:12:47 Chris Lewis"; X#endif X Xstruct troff2befont ljStdFont[108] = { X X/* Note on X-shift, Y-shift and point scale factor: X The first two are shifts in the baseline position of the X character, and the third is a multiplier of the point size. X If they are zero, nothing happens. If they are non-zero, X they are first multiplied by .01, then (in the case of the X shifts), multiplied by the current points to get a shift X value in TROFF2LJ[XY] coordinates. In the case of point scale X factor, it is multiplied by * .01 and becomes X the pointsize of the sequence to be emitted. X */ X/* +-------------------------------- Troff character number X | X | +--------------------------- N: standard fonts X | | S: symbol font X | | D: draw macro X | | n: new font X | | X | | +------------------------ X-shift: scale by deci-point*100 X | | | X | | | +--------------------- Y-shift: scale by deci-point*100 X | | | | X | | | | +------------------ Point-scale X | | | | | X | | | | | +-------------- Sequence X | | | | | | X v v v v v v */ X /* 0*/ {N, 0, 0, 0, "h"}, X /* 1*/ {N, 0, 0, 0, "t"}, X /* 2*/ {N, 0, 0, 0, "n"}, X /* 3*/ {N, 0, 0, 0, "m"}, X /* 4*/ {N, 0, 0, 0, "l"}, X /* 5*/ {N, 0, 0, 0, "i"}, X /* 6*/ {N, 0, 0, 0, "z"}, X /* 7*/ {N, 0, 0, 0, "s"}, X /* 8*/ {N, 0, 0, 0, "d"}, X /* 9*/ {N, 0, 0, 0, "b"}, X /* 10*/ {N, 0, 0, 0, "x"}, X /* 11*/ {N, 0, 0, 0, "f"}, X /* 12*/ {N, 0, 0, 0, "j"}, X /* 13*/ {N, 0, 0, 0, "u"}, X /* 14*/ {N, 0, 0, 0, "k"}, X /* 15*/ {N, 0, 0, 0, NOC}, X /* 16*/ {N, 0, 0, 0, "p"}, X /* 17*/ {S, 0, 0, 0, "\366"}, X /* 18*/ {N, 0, 0, 0, ";"}, X /* 19*/ {N, 0, 0, 0, NOC}, X /* 20*/ {N, 0, 0, 0, "a"}, X /* 21*/ {N, 0, -200, 0, "_"}, X /* 22*/ {N, 0, 0, 0, "c"}, X /* 23*/ {N, 0, 0, 0, "`"}, X /* 24*/ {N, 0, 0, 0, "e"}, X /* 25*/ {N, 0, 0, 0, "'"}, X /* 26*/ {N, 0, 0, 0, "o"}, X /* 27*/ {N, 0, 0, 0, "\367"}, X /* 28*/ {N, 0, 0, 0, "r"}, X /* 29*/ {N, 0, 0, 0, "\370"}, X /* 30*/ {N, 0, 0, 0, "v"}, X /* 31*/ {N, 0, 0, 0, "-"}, X /* 32*/ {N, 0, 0, 0, "w"}, X /* 33*/ {N, 0, 0, 0, "q"}, X /* 34*/ {N, 0, 0, 0, "/"}, X /* 35*/ {N, 0, 0, 0, "."}, X /* 36*/ {N, 0, 0, 0, "g"}, X /* 37*/ {N, 0, 0, 0, "3/4"}, X /* 38*/ {N, 0, 0, 0, ","}, X /* 39*/ {N, 0, 0, 0, "&"}, X /* 40*/ {N, 0, 0, 0, "y"}, X /* 41*/ {N, 0, 0, 0, NOC}, X /* 42*/ {N, 0, 0, 0, "%"}, X /* 43*/ {N, 0, 0, 0, NOC}, X /* 44*/ {N, 0, 0, 0, "Q"}, X /* 45*/ {N, 0, 0, 0, "T"}, X /* 46*/ {N, 0, 0, 0, "O"}, X /* 47*/ {N, 0, 0, 0, "H"}, X /* 48*/ {N, 0, 0, 0, "N"}, X /* 49*/ {N, 0, 0, 0, "M"}, X /* 50*/ {N, 0, 0, 0, "L"}, X /* 51*/ {N, 0, 0, 0, "R"}, X /* 52*/ {N, 0, 0, 0, "G"}, X /* 53*/ {N, 0, 0, 0, "I"}, X /* 54*/ {N, 0, 0, 0, "P"}, X /* 55*/ {N, 0, 0, 0, "C"}, X /* 56*/ {N, 0, 0, 0, "V"}, X /* 57*/ {N, 0, 0, 0, "E"}, X /* 58*/ {N, 0, 0, 0, "Z"}, X /* 59*/ {N, 0, 0, 0, "D"}, X /* 60*/ {N, 0, 0, 0, "B"}, X /* 61*/ {N, 0, 0, 0, "S"}, X /* 62*/ {N, 0, 0, 0, "Y"}, X /*from here on are actually code 1-45, upper half of font */ X /* 63*/ {N, 0, 0, 0, "F"}, X /* 64*/ {N, 0, 0, 0, "X"}, X /* 65*/ {N, 0, 0, 0, "A"}, X /* 66*/ {N, 0, 0, 0, "W"}, X /* 67*/ {N, 0, 0, 0, "J"}, X /* 68*/ {N, 0, 0, 0, "U"}, X /* 69*/ {N, 0, 0, 0, "K"}, X /* 70*/ {N, 0, 0, 0, "0"}, X /* 71*/ {N, 0, 0, 0, "1"}, X /* 72*/ {N, 0, 0, 0, "2"}, X /* 73*/ {N, 0, 0, 0, "3"}, X /* 74*/ {N, 0, 0, 0, "4"}, X /* 75*/ {N, 0, 0, 0, "5"}, X /* 76*/ {N, 0, 0, 0, "6"}, X /* 77*/ {N, 0, 0, 0, "7"}, X /* 78*/ {N, 0, 0, 0, "8"}, X /* 79*/ {N, 0, 0, 0, "9"}, X /* 80*/ {N, 0, 0, 0, "*"}, X /* 81*/ {N, 0, 0, 0, "\366"}, X /* 82*/ {N, 0, 0, 0, "fi"}, X /* 83*/ {N, 0, 0, 0, "fl"}, X /* 84*/ {N, 0, 0, 0, "ff"}, X /* 85*/ {N, 0, 0, 0, "\277"}, X /* 86*/ {N, 0, 0, 0, "ffl"}, X /* 87*/ {N, 0, 0, 0, "ffi"}, X /* 88*/ {N, 0, 0, 0, "("}, X /* 89*/ {N, 0, 0, 0, ")"}, X /* 90*/ {N, 0, 0, 0, "["}, X /* 91*/ {N, 0, 0, 0, "]"}, X /* 92*/ {N, 0, 0, 0, "\263"}, X /* 93*/ {S, 0, 0, 0, "\316"}, X /* 94*/ {N, 0, 0, 0, "="}, X /* 95*/ {N, 0, 0, 0, "O\br"}, X /* 96*/ {N, 0, 0, 0, ":"}, X /* 97*/ {N, 0, 0, 0, "+"}, X /* 98*/ {N, 0, 0, 0, NOC}, X /* 99*/ {N, 0, 0, 0, "!"}, X /*100*/ {S, 0, 0, 0, "\314"}, X /*101*/ {N, 0, 0, 0, "?"}, X /*102*/ {N, 0, 0, 0, "\250"}, X /*103*/ {N, 0, 0, 0, "|"}, X /*104*/ {N, 0, 0, 0, NOC}, X /*105*/ {S, 0, 0, 0, "\331"}, X /*106*/ {S, 0, 0, 0, "\332"}, X /*107*/ {N, 0, 0, 0, "$"} X}; X Xstruct troff2befont ljSymFont[] = { X/* +-------------------------------- Troff character number X | X | +--------------------------- N: standard fonts X | | S: symbol font X | | D: draw macro X | | n: new font X | | X | | +------------------------ X-shift: scale by deci-point*100 X | | | X | | | +--------------------- Y-shift: scale by deci-point*100 X | | | | X | | | | +------------------ Point-scale (scaled by 100) X | | | | | X | | | | | +-------------- Sequence X | | | | | | X v v v v v v */ X /* 0*/ {S, 0, 0, 0, "\167"}, X /* 1*/ {S, 0, 0, 0, "\150"}, X /* 2*/ {S, 0, 0, 0, "\155"}, X /* 3*/ {S, 0, 0, 0, "\154"}, X /* 4*/ {S, 0, 0, 0, "\153"}, X /* 5*/ {S, 0, 0, 0, "\151"}, X /* 6*/ {S, 0, 0, 0, "\146"}, X /* 7*/ {S, 0, 0, 0, "\162"}, X /* 8*/ {S, 0, 0, 0, "\144"}, X /* 9*/ {S, 0, 0, 0, "\142"}, X /* 10*/ {S, 0, 0, 0, "\156"}, X /* 11*/ {S, 0, 0, 0, "\147"}, X /* 12*/ {S, 0, 0, 0, "\165"}, X /* 13*/ {S, 0, 0, 0, "\164"}, X /* 14*/ {S, 0, 0, 0, "\152"}, X /* 15*/ {S, 0, 0, 0, NOC}, X /* 16*/ {S, 0, 0, 0, "\160"}, X /* 17*/ {N, 0, 0, 0, "@"}, X /* 18*/ {S, 0, 0, 0, "\243"}, X /* 19*/ {S, 0, 0, 0, NOC}, X /* 20*/ {S, 0, 0, 0, "\141"}, X /* 21*/ {N, 0, 0, 0, "|"}, X /* 22*/ {S, 0, 0, 0, "\166"}, X /* 23*/ {N, 0, 0, 0, "\042"}, X /* 24*/ {S, 0, 0, 0, "\145"}, X /* 25*/ {N, 0, 0, 0, "="}, X /* 26*/ {S, 0, 0, 0, "o"}, X /* 27*/ {S, 0, 0, 0, "\244"}, X /* 28*/ {S, 0, 0, 0, "\161"}, X /* 29*/ {S, 0, 0, 0, "\241"}, X /* 30*/ {S, 0, 0, 0, "\163"}, X /* 31*/ {N, 0, 0, 0, "_"}, X /* 32*/ {N, 0, 0, 0, "\\"}, X /* 33*/ {S, 0, 0, 0, "\127"}, X /* 34*/ {S, 0, 0, 0, "\177"}, X /* 35*/ {S, 0, 0, 0, "\044"}, X /* 36*/ {S, 0, 0, 0, "\143"}, X /* 37*/ {S, 0, 0, 0, "\277"}, X /* 38*/ {S, 0, 0, 0, "\046"}, X /* 39*/ {S, 0, 0, 0, "\375"}, X /* 40*/ {S, 0, 0, 0, "\170"}, X /* 41*/ {S, 0, 0, 0, NOC}, X /* 42*/ {S, 0, 0, 0, "\131"}, X /* 43*/ {S, 0, 0, 0, NOC}, X /* 44*/ {S, 0, 0, 0, "\125"}, X /* 45*/ {S, 0, 0, 0, "\110"}, X /* 46*/ {S, 0, 0, 0, "\130"}, X /* 47*/ {S, 0, 0, 0, "\265"}, X /* 48*/ {S, 0, 0, 0, "\260"}, X /* 49*/ {S, 0, 0, 0, "\123"}, X /* 50*/ {S, 0, 0, 0, "\113"}, X /* 51*/ {N, 0, 0, 0, "\366"}, X /* 52*/ {S, 0, 0, 0, "\103"}, X /* 53*/ {S, 0, 0, 0, "\325"}, X /* 54*/ {S, 0, 0, 0, "\120"}, X /* 55*/ {S, 0, 0, 0, "\272"}, X /* 56*/ {S, 0, 0, 0, "\273"}, X /* 57*/ {N, 0, 0, 0, "~"}, X /* 58*/ {S, 0, 0, 0, "\132"}, X /* 59*/ {S, 0, 0, 0, "\104"}, X /* 60*/ {S, 0, 0, 0, "\041"}, X /* 61*/ {S, 0, 0, 0, "\122"}, X /* 62*/ {S, 0, 0, 0, "\174"}, X /* 63*/ {N, 0, 0, 0, ">"}, X /* 64*/ {S, 0, 0, 0, "\116"}, X /* 65*/ {N, 0, 0, 0, "<"}, X /* 66*/ {N, 0, 0, 0, "/"}, X /* 67*/ {S, 0, 0, 0, "\266"}, X /* 68*/ {S, 0, 0, 0, "\124"}, X /* 69*/ {S, 0, 0, 0, "\310"}, X /* 70*/ {S, 0, 0, 0, "\360"}, X /* 71*/ {S, 0, 0, 0, "\342"}, X /* 72*/ {S, 0, 0, 0, "\365"}, X /* 73*/ {S, 0, 0, 0, "\343"}, X /* 74*/ {S, 0, 0, 0, "\344"}, X /* 75*/ {S, 0, 0, 0, "\362"}, X /* 76*/ {S, 0, 0, 0, "\363"}, X /* 77*/ {S, 0, 0, 0, "\364"}, X /* 78*/ {S, 0, 0, 0, "\361"}, X /* 79*/ {S, 0, 0, 0, "\341"}, X /* 80*/ {S, 0, 0, 0, "\340"}, X /* 81*/ {S, 0, 0, 0, "\052"}, X /* 82*/ {S, 0, 0, 0, "\045"}, X /* 83*/ {S, 0, 0, 0, "\376"}, X /* 84*/ {S, 0, 0, 0, "\134"}, X /* 85*/ {S, 0, 0, 0, "\136"}, X /* 86*/ {S, 0, 0, 0, "\175"}, X /* 87*/ {N, 0, 0, 0, "=\b/"}, X /* 88*/ {N, 0, 0, 0, "{"}, X /* 89*/ {N, 0, 0, 0, "}"}, X /* 90*/ {N, 0, 0, 0, "\250"}, X /* 91*/ {N, 0, 0, 0, "\251"}, X /* 92*/ {N, 0, 0, 0, "^"}, X /* 93*/ {N, 0, 0, 0, "#"}, X /* 94*/ {S, 0, 0, 0, "\373"}, X /* 95*/ {S, 0, 0, 0, "\267"}, X /* 96*/ {N, 0, 0, 0, "~"}, X /* 97*/ {N, 0, 0, 0, "\322"}, X /* 98*/ {N, 0, 0, 0, NOC}, X /* 99*/ {S, 0, 0, 0, "\317"}, X /*100*/ {N, -220, 0, 0, "|"}, X /*101*/ {N, 0, 2, 0, "*"}, X /*102*/ {S, 0, 0, 0, "\276"}, X /*103*/ {S, 0, 0, 0, "\315"}, X /*104*/ {S, 0, 0, 0, NOC}, X /*105*/ {N, 0, 0, 0, "+"}, X /*106*/ {S, 0, 0, 0, "\242"}, X /*107*/ {N, 0, 0, 0, "\275"} X}; X Xint fontCount = 0; X XljPage() { X printf("\033&l0H"); X pagePending = 1; X} X Xstatic XdoPageStart() { X currentPage++; X fontCount = 0; X pagePending = 0; X} X Xstatic Xputoct(s) Xchar *s; { X int d; X if (strlen(s) < 3) { X fprintf(stderr, "%s: octal sequence in fonts.l[kj] bad\n", progname); X exit(1); X } X d = (*s - '0') * 64 + (*(s+1) - '0') * 8 + *(s+2) - '0'; X putchar(d); X} X Xstatic Xint Xptcvt(points) Xint points; { X register int r; X switch (points) { X case 6: r = 0; break; X case 7: r = 1; break; X case 8: r = 2; break; X case 9: r = 3; break; X case 10: r = 4; break; X case 11: r = 5; break; X case 12: r = 6; break; X case 14: r = 7; break; X case 16: r = 8; break; X case 18: r = 9; break; X case 20: r = 10; break; X case 22: r = 11; break; X case 24: r = 12; break; X case 28: r = 13; break; X case 36: r = 14; break; X default: r = 15; break; X } X return(r); X} X X/* This function originally from Ronald Florence (ron@mlfarm), X but extensively modified for new fontFlags mechanisms. X X We'll go at most 4 points up or down. If this fails, X we'll let the printer decide... You may want to tweak X these arrays. X X We go up first for requested pointsizes > 10, and down X first for requested pointsizes < 10. Seems to work best X with EQN. X */ X Xstatic int Xbestmatch(font, points) Xint font, points; { X X static int smalltry[ ] = { 0, -1, 1, -2, 2, -3, 3, -4, 4, 100 }, X bigtry[ ] = { 0, 1, 2, -1, -2, 3, 4, -4, 100 }; X X register char *p; X register int *ip; X X ip = (points < 10) ? smalltry : bigtry; X p = fonttable[font].fontFlags; X X for ( ; *ip < 100; ip++) X if (p[ptcvt(points + *ip)] != 'n') X return(points + *ip); X X return (points); X} X X#ifdef INCR Xdumpseq(font, pointidx, seq) Xint font, pointidx; Xregister char *seq; { X int fn = (font << 4) + pointidx; X static int lastftid = -1; X register int c; X register struct pkc *pc = (struct pkc *) NULL; X X DBP((D_FONT, "dumpseq font: %d, idx: %d, seq: %s\n", font, X pointidx, seq)); X X for (;c = (*seq)&0xff; seq++) { X if (!downchar(font, c, pointidx)) { X X for (pc = fonttable[font].map->pkfont[pointidx]->pkp_chars; X pc; pc = pc->pkc_next) X if (pc->pkc_char == c) X break; X X setdown(font, c, pointidx); X X if (!pc) X continue; X X if (lastftid != fn) { X DBP((D_FONT,"Emitting download font select (%d)\n", fn)); X printf("\033*c%dD", fn); X lastftid = fn; X } X X DBP((D_FONT,"Downloading %02x\n", pc->pkc_char)); X epkc_desc(pc, stdout); X } else X DBP((D_FONT,"Already downloaded %02x\n", c)); X } X} X#endif X XljSetFont(font, selpoints, fontcode, sequence) Xint font, selpoints, fontcode; Xchar *sequence; { X int points, pointidx; X extern FILE *popen(); X register char *pf, *p; X register struct pkp *pk; X#if !defined(INCR) && defined(PK) X register struct pkc *pc; X#endif X char buf[BUFSIZ]; X#ifndef PARTIAL X FILE *fontfile; X#endif X int count; X int ftid; X X#ifdef COMPRESS X int compressed = 0; X#endif X X X#ifndef INCR X if (lastPoints == selpoints && font == lastFont) X return; X#endif X X points = bestmatch(font, selpoints); X pointidx = ptcvt(points); X X pf = &fonttable[font].fontFlags[pointidx]; X ftid = (font << 4) + pointidx; X X#ifdef INCR X#ifdef SFP X if (*pf == 'S' || *pf == 'P') { X#else X if (*pf == 'P') { X#endif X /* header downloaded, check and download individual characters */ X dumpseq(font, pointidx, sequence); X X if (lastPoints != points || font != lastFont) { X DBP((D_FONT, "Selecting font %d\n", ftid)); X lastPoints = points; X lastFont = font; X printf("\033(%dX", ftid); X } X X return; X X } X X if (lastPoints == selpoints && font == lastFont) X return; X#endif X X lastPoints = selpoints; X lastFont = font; X X switch(*pf) { X#ifdef PK X case 'p': X#ifdef PARTIAL X case 's': X#endif X sprintf(buf, "%s/%s.%d.%s", LJF, X fonttable[font].troffName, points, X (*pf == 's') ? "sfp":"pk"); X X fontCount++; X if (fontCount >= MAXDLFONTS) { X#ifdef INCR X pkflush(font, pointidx); X#else X fprintf(stderr, "Too many fonts (page %d), simplify!\n", X currentPage); X#endif X } X DBP((D_FONT,"FONTLOAD PK font (ftid: %d) %s.%d via '%s'\n", X ftid, fonttable[font].troffName, X points, buf)); X X /* Read the PK file in-core */ X pk = pk_read(buf,fontcode); X X /* Set the fontid we'll use */ X printf("\033*c%dd4F", ftid); X X /* Emit the SFP header */ X epk_desc(pk, stdout); X X#ifndef INCR X /* Emit each character */ X for (pc = pk->pkp_chars; pc; pc = pc->pkc_next) { X DBP((D_FONT,"Downloading ch %02x\n", pc->pkc_char); X epkc_desc(pc, stdout)); X } X X /* Clobber in-core PK */ X pk_destroy(pk); X#else X fonttable[font].map->pkfont[pointidx] = pk; X dumpseq(font, pointidx, sequence); X#endif X X *pf = toupper(*pf); X X /* buf */ X goto setdownloaded; X#else X case 'p': X fprintf(stderr, X "%s: Font %s, size: %d is a PK - PK not defined in defs.h\n", X progname, fonttable[font].troffName, selpoints); X goto setbuiltin; X#endif X X#ifndef PARTIAL X case 's': X sprintf(buf, "%s/lj/%s.%d.sfp", LIBDIR, fonttable[font].troffName, X points); X X fontfile = fopen(buf, "r"); X X#ifdef COMPRESS X if (!fontfile) { X sprintf(buf, "%s %s/lj/%s.%d.sfp.Z", X COMPRESS, LIBDIR, fonttable[font].troffName, points); X fontfile = popen(buf, "r"); X compressed = 1; X } X#endif X X if (!fontfile) { X fprintf(stderr, "%s: cannot open fontfile\n(%s)\n", progname, X buf); X goto setbuiltin; X } X X fontCount++; X if (fontCount >= MAXDLFONTS) { X#ifdef INCR X pkflush(font, pointidx); X#else X fprintf(stderr, "Too many fonts (page %d), simplify!\n", X currentPage); X#endif X } X X DBP((D_FONT,"Loading font (ftid: %d) %s.%d via '%s'\n", X ftid, fonttable[font].troffName, X points, buf)); X X printf("\033*c%dd4F", ftid); X X while(0 < (count = fread(buf, sizeof(char), sizeof(buf), fontfile))) X fwrite(buf, sizeof(char), count, stdout); X X#ifdef COMPRESS X if (compressed) { X if (!pclose(fontfile)) { X fprintf(stderr, "%s: compress failed!\n", progname); X exit(1); X } X } else X#endif X fclose(fontfile); X X *pf = toupper(*pf); X#endif X /* Fall Thru */ X X case 'S': case 'P': X /* Select primary font by font id */ X setdownloaded: X DBP((D_FONT, "Selecting font2 %d\n", ftid)); X printf("\033(%dX", ftid); X break; X X default: X setbuiltin: X *pf = 'b'; X X case 'b': X /* if builtin font, select it by characteristic */ X for (p = fonttable[font].fontSeq; *p; p++) { X if (*p == '\\') { X putoct(p+1); X p+=3; X } else X putchar(*p); X } X printf("\033(s%dV", points); X break; X } X} X Xstatic fixpoints(points) Xint points; { X static char ptab[30] = { X 6, 7, 8, 9, 10, 11, X 12, 12, 14, 14, 16, 16, X 18, 18, 20, 20, 22, 22, X 24, 24, 24, 28, 28, 28, X 28, 28, 28, 28, 36, 36}; X X if (points < 6) X return(6); X if (points > 36) X return(36); X return(ptab[points-6]); X} X XljChar(x, y, font, points, troffChar, sequence) Xint x, y; Xint font, points, troffChar; Xchar *sequence; { X register int nx = TROFF2LJX(x), ny = TROFF2LJY(y); X register struct troff2befont *rp; X X points = fixpoints(points); X X if (pagePending) { X resetState(); X doPageStart(); X } X X DBP((D_BEND,"BEFORE (troffChar,x,y,font,points) = (%d,%d,%d,%d,%d)\n", X troffChar, x, y, font, points)); X X if (font < 0) { X font = -font-1; X rp = &extchars[troffChar]; X } else if (font == symidx) X rp = &be->besymfont[troffChar]; X else X rp = &be->bestdfont[troffChar]; X X switch(rp->t2b_font) { X /* Only fonts with "N" are subject to font translation */ X case N: X if (font == symidx) X font = 0; /* Special chars are Roman */ X else { X DBP((D_BEND,"ljSetChar %d->%s (%s)\n", font, X xlatetable[font]->troffName, X xlatetable[font]->fontName)); X font = xlatetable[font] - fonttable; X } X break; X case S: X font = 3; X break; X case D: X break; X default: X /* Typically used when the R and S fonts don't have the X character desired, so select the font via the index X in the fonts.?? file */ X font = rp->t2b_font; X break; X } X X if (!sequence) X sequence = rp->t2b_charseq; X X if (!sequence) { X fprintf(stderr, "%s: No coding for char %d in %d font\n", X progname, troffChar, font); X return; X } X X /* We're committed now - the "if" statements avoid floating X arithmetic on slow machines */ X X if (rp->t2b_scale) points *= (.01 * rp->t2b_scale); X if (rp->t2b_xc) nx += points * (.01 * rp->t2b_xc); X if (rp->t2b_yc) ny += points * (.01 * rp->t2b_yc); X X ljSetFont(font, points, rp->t2b_font, sequence); X X DBP((D_BEND,"AFTER (sequence,x,y,font,points) = (%s,%d,%d,%d,%d)\n", X sequence, nx, ny, font, points)); X X/* Egads, I discovered that 42% of the time in troff2ps was spent X doing these damn conversions! */ X X#define XYS "\033&a%dh%dV%s" X#define XS "\033&a%dH%s" X X if (lastYPos != ny) { X printf(XYS, nx, ny, sequence); X lastYPos = ny; X } else X printf(XS, nx, sequence); X} X XljProlog() { X extern char *ctime(); X FILE *library; X int c; X register char *p; X X#ifndef LJF X LJF = mustmalloc(strlen(LIBDIR) + 5, "ljprolog"); X sprintf(LJF, "%s/lj", LIBDIR); X#endif X X /* to ensure that the strings are long enough for indexing and X are sufficiently initialized */ X X for (c = 0; fonttable[c].troffName; c++) { X register int i; X p = mustmalloc(20, "ljfontflags"); X strncpy(p, fonttable[c].fontFlags, 16); X p[16] = '\0'; X free(fonttable[c].fontFlags); X for (i = strlen(p); i < 16; i++) X p[i] = 'n'; X fonttable[c].fontFlags = p; X } X X#if defined(INCR) X /* create empty downloaded-yet arrays */ X for (c = 0; fonttable[c].troffName; c++) { X register int i; X for (i = 0, p = fonttable[c].fontFlags; *p; p++, i++) X#ifdef SFP X if (*p == 'p' || *p == 's') { X#else X if (*p == 'p') { X#endif X DBP((D_FONT, "Allocating font %d, size %d\n", X c, i)); X if (!fonttable[c].map) { X fonttable[c].map = (struct downmaps *) X mustmalloc(sizeof(struct downmaps), "downmaps"); X } X fonttable[c].map->nm[i] = (ETYP *) mustmalloc(ELEN * X sizeof(ETYP), "Nmaps"); X fonttable[c].map->lastpage[i] = 0; X } X } X X#ifdef DEBUG X dumpmaps(1); X#endif X X#endif X X#if defined(PARTIAL) X /* create need-arrays */ X for (c = 0; c < 108; c++) X if (ljStdFont[c].t2b_charseq != NOC) X for (p = ljStdFont[c].t2b_charseq; *p; p++) X addneedchar(ljStdFont[c].t2b_font, *p); X X for (c = 0; c < 108; c++) X if (ljSymFont[c].t2b_charseq != NOC) X for (p = ljSymFont[c].t2b_charseq; *p; p++) X addneedchar(ljSymFont[c].t2b_font, *p); X#endif X X#if defined(DEBUG) && defined(PARTIAL) X dumpmaps(0); X#endif X X currentPage = 0; X pagePending = 1; X X library = libopen(printer, "lib"); X X ljXlate(library); X fclose(library); X doprologs(); X} X XljEpilog() { X#if defined(INCR) X register struct fonttable *fp; X register int i; X /* delete fonts still active that we downloaded */ X for (fp = fonttable; fp->troffName; fp++) X if (fp->map) X for (i = 0; i < 14; i++) X if (fp->map->pkfont[i]) X printf("\033*c%dd2F", ((fp - fonttable) << 4) + i); X#endif X X#if defined(DEBUG) && defined(INCR) X dumpmaps(1); X#endif X} X X/* Copy the library file to the standard output, stripping X %line\n X %%% is a metadirective X and converting \nnn and \xnn as you go. X Strip out line termination. X*/ X XljXlate(library) XFILE *library; { X char buf[4]; X int c, i; X c = getc(library); X while(!feof(library)) { X X nextchar: X X switch(c) { X case '%': X /* strip from percent sign to end of line */ X /* If line is %%% pass onto interp */ X if (((c = getc(library)) == '%') && X ((c = getc(library)) == '%')) { X char buf2[4]; X sprintf(buf2, ".%s", be->bename); X fgets(buf, strlen(buf), library); X interp(buf, ljXlate, buf2); X break; X } X while ((c = getc(library)) != EOF && c != '\n'); X break; X case '\n': /* throw away real newlines. */ X break; X case '\\': X c = getc(library); X if (c == 'x' || c == 'X') { X i = 0; X while(1) { X c = getc(library); X X if (c == EOF || !((c >= '0' && c <= '9') || X (c >= 'A' && c <= 'F') || X (c >= 'a' && c <= 'f'))) X goto nextchar; X X buf[i++] = c; X if (i == 2) { X buf[i] = '\0'; X sscanf(buf, "%x", &i); X putchar(i); X i = 0; X } X } X } else { X buf[0] = c; X i = 1; X while(1) { X c = getc(library); X if (c == EOF || c < '0' || c > '7') X goto nextchar; X buf[i++] = c; X if (i == 3) { X buf[i] = '\0'; X sscanf(buf, "%o", &i); X putchar(i); X i = 0; X } X } X } X /* NOTREACHED */ X X case ' ': case '\t': X break; X X case EOF: X fprintf(stderr, "%s: Unexpected eof on ljlib\n", progname); X break; X X default: X putchar(c); X } X c = getc(library); X } X} X#endif END_OF_FILE if test 22044 -ne `wc -c <'lj.c'`; then echo shar: \"'lj.c'\" unpacked with wrong size! fi # end of 'lj.c' fi echo shar: End of archive 2 \(of 19\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 19 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 exit 0 # Just in case...