Subject: v24i101: psroff, Troff to PostScript filter, Part06/19 Newsgroups: comp.sources.unix Approved: rsalz@uunet.UU.NET Submitted-by: Chris Lewis Posting-number: Volume 24, Issue 101 Archive-name: psroff3.o/part06 #! /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: dt.c fonts.lj/S.16.pk.UU fonts.lj/S.24.pk.UU # man/pk2sfp.1.S # Wrapped by clewis@ecicrl on Fri Apr 5 20:55:59 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 6 (of 19)."' if test -f 'dt.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dt.c'\" else echo shar: Extracting \"'dt.c'\" \(13519 characters\) sed "s/^X//" >'dt.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: Ditroff driver X */ X X#include "defs.h" X X#ifndef lint Xstatic char SCCSid[] = X "@(#)dt.c: 2.6 Copyright 91/03/10 03:12:46 Chris Lewis"; X#endif X X/* These two tables are always included so that we have the X official character mapping tables. X */ X Xstruct troff2befont dtStdFont[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 TROFF2PS[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 (scaled by point) X | | | Note: positive is right. X | | | X | | | +--------------------- Y-shift (scaled by point) X | | | | Note: positive is up. X | | | | X | | | | +------------------ Point scale factor 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*/ {N, 0, 0, 0, "em"}, X /* 18*/ {N, 0, 0, 0, ";"}, X /* 19*/ {N, 0, 0, 0, NOC}, X /* 20*/ {N, 0, 0, 0, "a"}, X /* 21*/ {N, 0, 0, 0, "ru"}, 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, "14"}, X /* 28*/ {N, 0, 0, 0, "r"}, X /* 29*/ {N, 0, 0, 0, "12"}, X /* 30*/ {N, 0, 0, 0, "v"}, X /* 31*/ {N, 0, 0, 0, "hy"}, 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, "34"}, 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, "-"}, 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, "ct"}, X /* 86*/ {N, 0, 0, 0, "Fl"}, X /* 87*/ {N, 0, 0, 0, "Fi"}, 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, "de"}, X /* 93*/ {N, 0, 0, 0, "dg"}, X /* 94*/ {N, 0, 0, 0, "="}, X /* 95*/ {N, 0, 0, 0, "rg"}, 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*/ {N, 0, 0, 0, "bu"}, X /*101*/ {N, 0, 0, 0, "?"}, X /*102*/ {N, 0, 0, 0, "fm"}, X /*103*/ {N, 0, 0, 0, "|"}, X /*104*/ {N, 0, 0, 0, NOC}, X /*105*/ {N, 0, 0, 0, "co"}, X /*106*/ {N, 0, 0, 0, "sq"}, X /*107*/ {N, 0, 0, 0, "$"} X}; X Xstruct troff2befont dtSymFont[] = { X/* +-------------------------------- Troff character number X | X | +--------------------------- N: standard fonts X | | S: symbol font X | | D: draw macro X | | X | | +------------------------ X-shift (scaled by point) X | | | Note: positive is right. X | | | X | | | +--------------------- Y-shift (scaled by point) X | | | | Note: positive is up. X | | | | X | | | | +------------------ Point scale factor X | | | | | X | | | | | +-------------- Sequence X | | | | | | X | | | | | | X v v v v v v */ X /* 0*/ {S, 0, 0, 0, "*q"}, X /* 1*/ {S, 0, 0, 0, "*h"}, X /* 2*/ {S, 0, 0, 0, "*n"}, X /* 3*/ {S, 0, 0, 0, "*m"}, X /* 4*/ {S, 0, 0, 0, "*l"}, X /* 5*/ {S, 0, 0, 0, "*i"}, X /* 6*/ {S, 0, 0, 0, "*z"}, X /* 7*/ {S, 0, 0, 0, "*s"}, X /* 8*/ {S, 0, 0, 0, "*d"}, X /* 9*/ {S, 0, 0, 0, "*b"}, X /* 10*/ {S, 0, 0, 0, "*c"}, X /* 11*/ {S, 0, 0, 0, "*y"}, X /* 12*/ {S, 0, 0, 0, "*f"}, X /* 13*/ {S, 0, 0, 0, "*u"}, X /* 14*/ {S, 0, 0, 0, "*k"}, X /* 15*/ {S, 0, 0, 0, NOC}, X /* 16*/ {S, 0, 0, 0, "*p"}, X /* 17*/ {S, 0, 0, 0, "@"}, X /* 18*/ {S, 0, 0, 0, "da"}, X /* 19*/ {S, 0, 0, 0, NOC}, X /* 20*/ {S, 0, 0, 0, "*a"}, X /* 21*/ {S, 0, 0, 0, "or"}, X /* 22*/ {S, 0, 0, 0, "*x"}, X /* 23*/ {N, 0, 0, 0, "\""}, X /* 24*/ {S, 0, 0, 0, "*e"}, X /* 25*/ {S, 0, 0, 0, "eq"}, X /* 26*/ {S, 0, 0, 0, "*o"}, X /* 27*/ {S, 0, 0, 0, "<-"}, X /* 28*/ {S, 0, 0, 0, "*r"}, X /* 29*/ {S, 0, 0, 0, "ua"}, X /* 30*/ {S, 0, 0, 0, "*t"}, X /* 31*/ {S, 0, 0, 0, "ul"}, X /* 32*/ {N, 0, 0, 0, "\\"}, X /* 33*/ {S, 0, 0, 0, "*Q"}, X /* 34*/ {S, 0, 0, 0, "bs"}, X /* 35*/ {S, 0, 0, 0, "if"}, X /* 36*/ {S, 0, 0, 0, "*g"}, X /* 37*/ {S, 0, 0, 0, "ip"}, X /* 38*/ {S, 0, 0, 0, "pt"}, X /* 39*/ {S, 0, 0, 0, "rh"}, X /* 40*/ {S, 0, 0, 0, "*w"}, X /* 41*/ {S, 0, 0, 0, NOC}, X /* 42*/ {S, 0, 0, 0, "gr"}, X /* 43*/ {S, 0, 0, 0, NOC}, X /* 44*/ {S, 0, 0, 0, "*F"}, X /* 45*/ {S, 0, 0, 0, "*H"}, X /* 46*/ {S, 0, 0, 0, "*W"}, X /* 47*/ {S, 0, 0, 0, "cu"}, X /* 48*/ {S, 0, 0, 0, "rn"}, X /* 49*/ {S, 0, 0, 0, "ts"}, X /* 50*/ {S, 0, 0, 0, "*L"}, X /* 51*/ {S, 0, 0, 0, "mi"}, X /* 52*/ {S, 0, 0, 0, "*G"}, X /* 53*/ {S, 0, 0, 0, "is"}, X /* 54*/ {S, 0, 0, 0, "*P"}, X /* 55*/ {S, 0, 0, 0, "sb"}, X /* 56*/ {S, 0, 0, 0, "sp"}, X /* 57*/ {S, 0, 0, 0, "ap"}, X /* 58*/ {S, 0, 0, 0, "pd"}, X /* 59*/ {S, 0, 0, 0, "*D"}, X /* 60*/ {S, 0, 0, 0, "sr"}, X /* 61*/ {S, 0, 0, 0, "*S"}, X /* 62*/ {S, 0, 0, 0, "~="}, X /* 63*/ {S, 0, 0, 0, ">"}, X /* 64*/ {S, 0, 0, 0, "*C"}, X /* 65*/ {S, 0, 0, 0, "<"}, X /* 66*/ {S, 0, 0, 0, "/"}, X /* 67*/ {S, 0, 0, 0, "ca"}, X /* 68*/ {S, 0, 0, 0, "*U"}, X /* 69*/ {S, 0, 0, 0, "no"}, X /* 70*/ {S, 0, 0, 0, "rc"}, X /* 71*/ {S, 0, 0, 0, "lt"}, X /* 72*/ {S, 0, 0, 0, "bv"}, X /* 73*/ {S, 0, 0, 0, "lk"}, X /* 74*/ {S, 0, 0, 0, "lb"}, X /* 75*/ {S, 0, 0, 0, "rt"}, X /* 76*/ {S, 0, 0, 0, "rk"}, X /* 77*/ {S, 0, 0, 0, "rb"}, X /* 78*/ {S, 0, 0, 0, "rf"}, X /* 79*/ {S, 0, 0, 0, "lf"}, X /* 80*/ {S, 0, 0, 0, "lc"}, X /* 81*/ {S, 0, 0, 0, "mu"}, X /* 82*/ {S, 0, 0, 0, "di"}, X /* 83*/ {S, 0, 0, 0, "+-"}, X /* 84*/ {S, 0, 0, 0, "<="}, X /* 85*/ {S, 0, 0, 0, ">="}, X /* 86*/ {S, 0, 0, 0, "=="}, X /* 87*/ {S, 0, 0, 0, "!="}, X /* 88*/ {S, 0, 0, 0, "{"}, X /* 89*/ {S, 0, 0, 0, "}"}, X /* 90*/ {N, 0, 0, 0, "aa"}, X /* 91*/ {N, 0, 0, 0, "ga"}, X /* 92*/ {S, 0, 0, 0, "^"}, X /* 93*/ {S, 0, 0, 0, "#"}, X /* 94*/ {S, 0, 0, 0, "lh"}, X /* 95*/ {S, 0, 0, 0, "mo"}, X /* 96*/ {N, 0, 0, 0, "~"}, X /* 97*/ {S, 0, 0, 0, "es"}, X /* 98*/ {S, 0, 0, 0, NOC}, X /* 99*/ {N, 0, 0, 0, "dd"}, X /*100*/ {S, 0, 0, 0, "br"}, X /*101*/ {S, 0, 0, 0, "**"}, X /*102*/ {S, 0, 0, 0, "ib"}, X /*103*/ {S, 0, 0, 0, "ci"}, X /*104*/ {S, 0, 0, 0, NOC}, X /*105*/ {S, 0, 0, 0, "pl"}, X /*106*/ {S, 0, 0, 0, "->"}, X /*107*/ {N, 0, 0, 0, "sc"} X}; X X#ifdef DT X#include "dt.h" X X#define USED 01 X Xint dtresolution = DTRESOLUTION; X XdtPage() { X pagePending = 1; X} X Xstatic XdoPageStart() { X currentPage++; X pagePending = 0; X printf("p%d\n", currentPage); X} X X XdtSetFont(font, points) Xint font, points; { X if (lastPoints != points || font != lastFont) { X if (!(fonttable[font].flags)&USED) X printf("x font %d %s\n", font+1, fonttable[font].troffName); X fonttable[font].flags |= USED; X printf("f%d\n", font+1); X printf("s%d\n", points); X lastPoints = points; X lastFont = font; X } X} X XdtChar(x, y, font, points, troffChar, sequence) Xlong x, y; Xint font, points, troffChar; Xchar *sequence; { X register int nx = TROFF2DTX(x), ny = TROFF2DTY(y); X register struct troff2befont *rp; X if (pagePending) { X resetState(); X doPageStart(); X } X X DBP((D_BEND,"x,y=%d,%d; font=%d, points=%d, tc=%d\n", X x, y, font, points, troffChar)); 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 Courier */ X else { X DBP((D_BEND, "dtSetChar %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, "No coding for %d\n", troffChar); 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 dtSetFont(font, points); X#ifdef NOTYET X if (rp->t2b_font == D) X printf("H%d\nV%d\nc%s\n", nx, ny, sequence); X else { X#endif X /* print an nnc sequence if we can...may even be able to avoid X the newline. */ X X if (lastYPos == ny && X sequence[1] == 0 && X lastXPos != -1 && X (nx - lastXPos) > 0 && (nx - lastXPos) < 100) { X X printf("%02d%c\n",(nx - lastXPos), sequence[0]); X X } else { X X printf("H%d\n", nx); X X if (lastYPos != ny) { X printf("V%d\n", ny); X lastYPos = ny; X } X if (sequence[1]) X printf("C%s\n", sequence); X else X printf("c%s\n", sequence); X } X lastXPos = nx; X#ifdef NOTYET X } X#endif X} X XdtProlog() { X extern char *ctime(); X extern char *strchr(); X extern char nodename[]; X extern char *device; X char buffer[30]; X long curtime; X#ifdef OPT X extern int optimize; X X optimize = 0; X#endif X X currentPage = 0; X pagePending = 1; X X time(&curtime); X strcpy(buffer, ctime(&curtime)); X *strchr(buffer, '\n') = '\0'; X X getnodename(); X X#ifndef NOCHATTER X printf("#Title: (stdin)\n"); X printf("#Creator: %s %s\n", progname, shortversion); X printf("#PsroffVersion: %s\n", version); X printf("#CreationDate: %s\n", buffer); X printf("#For: %s\n", username); X printf("#Pages: (atend)\n"); X printf("#DocumentFonts: (atend)\n"); X printf("#EndComments\n"); X#endif X printf("x T %s\n", device); X printf("x res %d %d %d\n", dtresolution, 1, 1); X printf("x init\n"); X doprologs(); X X} X XdtPassthru(s) Xregister char *s; { X printf("x X %s\n", s); X} X XdtEpilog() { X printf("x trailer\n"); X printf("x stop\n"); X} X X#ifdef INSPECIAL XdtDraw(origX, origY, s) Xint origX, origY; Xregister char *s; { X register int temp, t2; X DBP((D_CAT, "dtDraw: (%d,%d): %s\n", origX, origY, s)); X printf("H%d\n", TROFF2DTX(origX)); X printf("V%d\n", TROFF2DTY(origY)); X putchar('D'); X putchar(*s); X s++; X /* We just pass these thru, scaling them to output resolution */ X for (;*s;s++) { X if (isspace(*s)) X putchar(' '); X else if (!isdigit(*s)) X putchar(*s); X else { X extern int indtres; X temp = *s - '0'; X X while(isdigit(*(s+1))) X temp = temp * 10 + (*++s - '0'); X X t2 = temp * dtresolution / (ditroff? indtres: X TROFFRESOLUTION); X DBP((D_CAT, "dtDraw (scale): %d -> %d\n", temp, t2)); X printf("%d", t2); X } X } X putchar('\n'); X} X#endif X X#endif /* DT */ END_OF_FILE if test 13519 -ne `wc -c <'dt.c'`; then echo shar: \"'dt.c'\" unpacked with wrong size! fi # end of 'dt.c' fi if test -f 'fonts.lj/S.16.pk.UU' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fonts.lj/S.16.pk.UU'\" else echo shar: Extracting \"'fonts.lj/S.16.pk.UU'\" \(8947 characters\) sed "s/^X//" >'fonts.lj/S.16.pk.UU' <<'END_OF_FILE' Xtable X !"#$%&'()*+,-./0123456789:;<=>? X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ Xbegin 644 fonts.lj/S.16.pk XM]UD``0``````````!":N``0FKJ!T(0```#,O0_LQTB_1/]`]#ST//0XCT//0 XM\]#B/0\]#ST//0XCT//0\]`[D;P[@KP[9;H[812Z.U$TN#M11+@[I+<[Q+8[ XMQ+4[[TM#ODLSP$LCP$L3PDL#PO2CQ$D\3T@\;T8\CT0\E#/+]"/,]\UL]<]- XM'SP0P'@D````1CT<_!NHW7U-'7T-#4T].MC0:4=8JET$9+F%TC4]&674,TTX XM1-6Q5GVQTCVR#CB;)*&R3XG;*+L XMYVTHR_R<0*!V1````#LT+OTMOBUO34;2^-"L\A?.,GS2-\PE?+)FRB=\DH;( XM*7QCI\4K!\0[%\,K)\([-\$K1\`K9[\K=KXKA[TKEKPKI[H[M[DKQ[@[U[*-8QY7\+`Q@H"E.````+R@M_2P>3+(LFIR:V XMMAY'MK<6MK8O>FIS:FIE:6EG:&AI9V=L965M-R8GU]?=P!3E8!:-[]F@L$I7 XM````-RXM_"S`_*TXV^1LA\%L'$MKDVMK9GIJ=VIJ:'EI>>AI:6OC:&AL'V=G XM;#9F9L5E96QV1D;)8V-LQA86T,35K:Y6VXT_RL"P9E@````S+"[]+<6M+&S' XMA\AL)L1\1\%\9[?(>7RG?WS'7WSG/G?0<^)\YU;.9GS'?VS&GVRFM_ XM.V>^*W>].X>\*Y>[.Z>Z*\:Y*]>X*^:W*_>V+`>T+!>S/">R+#>Q/$>P+%>C XMQGDLAH+)=RRF8LMU+,S9 XM1UUCM-0]!-(])-`]-<333%TEIM-*]M-:/54!)0$N)M-W;0Q6M7-&E:,FE<,6 XMA=&6;3AEU(5=5U;5=/;6````-RHX^BLJ]*UJUJUJUJUJUJUJUJUJUJUJUJUJUJUJUJUJUJUJ XMQ:IJEJEJEJEJEJEJEJEJEJEJEJEJEJEJEJEJEJI:PP`:VO';>`E?````(2$# XM`/#;P%IA````+28<_1O1??T-IE6RA9629J625L5S1M%6)&TE8D;253-M-D)& XMTV,S;54R1M52-&U5$T?5425M:%;6=FUF?B;665U6E=1Z71054C6T-5)%=61# XM;0F9C14PP(EB````)R4[_BW<;?O;55V#E=8[35/%TST%TCT5T3TET#TUT"U% XMP]-L+47#U%PM1L+47#TUT"TUT2?0T371TB;1TBAQ71+47#U5LM9;\M9I/6:> XM(M=H/6>.(M=H\]9I/5:DU&E=-J(3T6LB/&PC.ET#1&;1)M#3*7UB`5,!7B(! XM4P%>(@%3`5XB`6"P3V,````D)"K_&Z;&**PS;"P2;$LUQ;)5E9-$P$DD3"1S XM0\0W)2QB8T/&-28<@D//)"T#(]'R(M(A/2(2TUT^)-3SU>(M7B/4XSU.,]3B XM/5+#P%9D````'QLN_2W4;6K253T$@[2BI,&DV?39XEV6V'V'UYUIUIUXU+T= XM'%-Z9FAH5VE6:T9L-?;0-/;1,WT3-]$DXFT33VT#5L-UPW6SE9.U<]!5/2O6 XM;0#`*&4````<%AS\&]":R&T6TETUTVTFTO;2?2_6/VT^5=7UU5U5HU5TC,A@ XMP%)F````'QT[_2W5Y"WJUKT]#20FTDVTVTVTVTW#W$VTV_3;3;7;3;7;]-OB XM3;7;XTV^-=SUV_;;;:C9K7T-31U-'4T-:]B-OUW.)-(V34-3UIV5L,!19P`` XM`",@*OX;5+>(>U,T1&4C12.%(E43I1)8N%?']FT'5M!G;0;W715_;09_715_ XM;09_715_;09_716%T&A-%H/27>7=]MWUW?;=]=WVW?7?.Z: XM)0$%QM;&U=]0$%QM;&U=]0$%QM;&U=]0$%QM;&U6+U4!!6)&UE-'MU)7J%)8 XM@Q5#2E0T,U`3:&4WI(4"'V`A]0(?8"'U`A]@(?4",P(PP$=M````(R`<_1MF XMU#&]-!O27V7356TF5M)6729ETE9M%F;15UT6==%7;06&Q97%I;6FI;:5Q970 XM6%T&9=)E735%U5)=:]B-M=[`6&X````?'#O^+=/D+=O2T-KUVSTB=-)$35G860P#QO````(AT<_1O1?6T-%E7%A9:E=L56T%3V XMT6\FTF\6TV%M+1TM#]-A]M)B]M%D7095QG6FE87%5M'0UGT0P$-P````*"4< XM_AN-]P$E`30!-$EJ(6F$U7&*M%5;37=]MWUW?;=]= XMWVW?7?/?P$9R````*"0<_1O0V)-#B30]=!-#C7031/(#`3W0` XM```F(1S^&V74-IT6,S7'(U3'$V6W$G7)9M!W729FTU9=0X74*&U"A=4H74-V XMU"A=4H74.%U"E=,Y33.DTRM=$[70/%P]%:/39DULVWT`L'MU````*B4[_2W- XMXBUO/6\M;SUO+6\];RUO/6+3G,Q,=R,UPV4F6V)M XM.-&=`R;.,VS31LPV;*-VR3EL````"PH'/\;0```!$#0_DQV,`M>@```!\40_LQTTT$ XMT4TDTO32[832]-)-)-%-!-9-5-1-3TU.V$U/343435360,@M>P```!\40_LQ XM36353434]-3MA-3TU$U$U4UDT$T4TDTO32[832]-)-)-%-!-,+!"?````#(]GB/9XCV>(]GB/9XCV>(]GB/9XSV>(]GB/9XCV>(]GB/9 XMXCV>(]GB/9XCV>(]GSV2L'A_````-R\P_"Z6Q6Q+N\##?#E696972T-+1CP4 XM%,$U/#,3PS-,1<1"/%7%,CQCQC'SQSQVR"QVY=T^(3VS/SV34]3=;;C9,6US-M4U74-UTCAM`Z:SQI/16#TU8]1D/68CV) XMVGV)UF(]1D/35CT5@\:3IK.&T#==(U74,VU3%M>-EMM-XM[`4*@````C'B'^ XM(-\MU-MMF-=A/64SU%4])F/0:#MJ.EPX71-FTC1M0R;6,5V'VC%=@R;6-&U# XM9M(X71.EP[:CT&@])F/453UE,]=A/9C;;=3?('@)L````"$A`P`RV[`FM0`` XM`"\F*?PG$M5>T-0_$](S/0-$SD5,Q'7(66Q&P'I\/*Q\3-K"L">V````+R8I XM_"?"K-Q,?*PWI\!L1I7(5TS$5,Y$/0,_/2,>T#U#$M4@L#NW````+R(K^B7% XMQ<')O+I\U=!=!-%-%-(]+STO/2XCTN(],$WBU.(]3SU//4/33333337273?0 XMR\')Q<6P.+H````W*BOZ)<7-PM"].GU6UUV$V4V4VCVO/:\]KB/:Z#W.(]SS XMW//]*]##S``(=L_V5UWU9T\S3B0H'C-```` XM1CT]_"Z^L-.XS+['FPG#>X?`6^6]7"6Z7$6X3(2V3*2T3,2R3.2Q/0.P/2.4 XMTD@]0W\]8UXCV#/C/:,>H]P^,3VC/B/8-?/6-SU#A-))/2.P/0.Q3.2R3,2T XM3*2V3(2X7$6Z7"6]6^7`>X?#FPG'OLRXT["^P![.````'Q<\_"VCUN==;F.U XM0T40.!5#1;XSUNV%UNPZL#'/````'Q<[_"VCQ^9GTFQ& XMSFR&RUS%R4T$QTTDQ4U$PTUDP4V$P#VCL]PY3<2#WC?S`0-3RFQC0\@F/#-# XMQBL<(S/&+!'",CQ2P$P3(\0[7!,CPSP%P3$\0\!<)L-,$\-OPSU&YL)-0_$\ XM(],R/"32,CPSQ1P#,\(\4;-#PSPQP#0\0L,<`U/$+!'`-CQ2L<$W/&)CP3A, XM=L-)/<.SVCP$V$P4UDPTU$Q4TDQTT$R5S%RVR&SFQ&TGI];(VL3?K+!X#=H` XM```F'Q_]'MCI"1V`6`S@````.!)#Z##?Z590V`WA````.!)#Z#+@/7L(`-`F XMX@```#@40^@P`3,!%0$&UM;6UM;6U];?;6U];??6WWUMXWUMX"E]P#+C```` XM.!1%]3+0[6?0;0]\]\?'T&T&Q\>WQL;133;3;2?2?1?2;2;1?1?1]]'WT6T> XMUG"X+.0````X%$/H,NVWPFPN-\)L+WPFPO?";"?";#]L-L)\)L-L-L-L-L-L XM-L-<4]@-\````#@20_,P"`X#VW!0#/$````X$D/S,F7I7?"X+/(````X%$/U XM,#Q5PVPVPVPVPVPVPVPGPFP_;#;"?";"]\)L+WPFPN-\)L+MM\@R\P```#@4 XM1>@R[6?1;1]]'WT7T7T6TFTGT7TGTFTVTTT6QL>WQ\;0;0?'SWSWT&T.UGT` XMT";T````.!1#]3+>`I?6WC?6WWUM]];7UM]M;7UM;6UM;6U@$%`1,!/8"_4` XM```X!T7H,@`>4$@)]@```$9%`@`1U9!%^P```$8])_PCKAT3STSO3.3.3/// XM3.3.3.Q*/&HL>@7-7+;*?)^,Y\]=!=!-!=#&I,6EQ*9-!-!-!-`]!-!-`]!- XM`]$;H-@+_````"8?'_T>`#PPD$7]````1CTG_".Z'1/030]-!-!-`]!-!-!* XM;$I<:DQM!<]=!L]\[XR7RUS%S4S5HL6CQ:3$SDSDSDSDSSSTSDSSSTSST1K@ X:0!3^````-RXO_"UA)WY?-@U>76$V#5#U]O;$ X` Xend END_OF_FILE if test 8947 -ne `wc -c <'fonts.lj/S.16.pk.UU'`; then echo shar: \"'fonts.lj/S.16.pk.UU'\" unpacked with wrong size! fi # end of 'fonts.lj/S.16.pk.UU' fi if test -f 'fonts.lj/S.24.pk.UU' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fonts.lj/S.24.pk.UU'\" else echo shar: Extracting \"'fonts.lj/S.24.pk.UU'\" \(14167 characters\) sed "s/^X//" >'fonts.lj/S.24.pk.UU' <<'END_OF_FILE' Xtable X !"#$%&'()*+,-./0123456789:;<=>? X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ Xbegin 644 fonts.lj/S.24.pk XM]UD``8``````````!":N``0FKI#0(0```$U(8_E)VRV_3979397939793979 XM3979]-E=E-E=E-E=E-E=E-E=GTV5V4V5V4V5V4V5V?397939793979397939 XM79]-E=E-E=E+4;E;0KE+-;=;)K=+(1:U6Q$FM4L"-K5*\6:S6N%VLTN&L5N& XML4N6L%NFKTNVKEO&K4O6K%OO:K2_:J7`:I3!:H7":G3#:F7#:F3%:D7%:D3' XM:C3':B7':B3):@7):@3+:%RVA,QG7-9DSF5<_V1-%B718DTF%=/Z#5^-9]AM XMA=I-H\*PVR0```!I7"WZ*\2=Z='$U\/,R-/'R,S/R\7/RZIL/1R8PUP7K#Q8 XMQEML/!PXR4EL7!P7S$A*CSZ'1G3?7&X"PLR8```!21BWZ*\.-J<#"U,"L;0PHRLS` XM$WS,P]>LH]>\E-7!R3U< XM')/449R#TU.<=-%DG'/159QTSU><<\YHG&3,:IQDRFP)Q4R6PJQ$QGQ*Q%PW XMQKPUN,G&B1P,S$K&T,+`PM3`PIVH$+"&*@```%(S,_$Q$]\Q7=O;P=EQ?77SWM\U\%\M\-\E\5\=\=\5\E\-\M\%\U[?/>7T7=]-U?5WSWE]%W?3=7U7-]=Q?9P=N]U1/?,0$`TM````4C\%]QH5L=L5L:!6/``` XM`$8U-/@RURUETWT9SZSISYSYSYSYSYSYSJSJSJSJSISYSYSYSYSYSYSYSYT/ XMC3G3G3G3G3G3G3G3G3G3K2K2K2K3G3G3G3G3G3G3G3G3G3?577(0H%8]```` XM1C4T^#(1V%U7TYTYTYTYTYTYTYTYTYTZTJTJTJTYTYTYTYTYTYTYTYTYT_C0 XMG/G/G/G/G/G/G/G/G.K.K.K.K.G/G/G/G/G/G/G/G/G1?376+7"X-T,```!" XM.43\0^(!J\#*P,"LZL"=",#YTFP)TUP/G43`XIU4OCG6.YUDXJG7/MRI`3L! XM'"U^+3S@H+=$````6$U&^T7*,!Y0'/.*W$BPVSJMI*L-D[&MA+&PUSLZUDM*U3M:U$MJTSMZTDN*T3N:T#NZSD XMN[#-.]K,2]L,L[^LI+^PR3P:R$PJQSPZQDQ*Q3Q:Q$QJPSQZPO/)K`/+J^3+ XML+T\VKQ,VPNSSZNDS["Y/1JX32JW/3JV34JU/5JT36JS/7JR\]FK`]NI3;L( XM/=I_`<7P'C\"`0;PH)Y(````4D5&^D3"L-NXU+[/J:RXMHQXNHQ'OGP8P(OH XMPHO(Q(NGR'N(R(MHRHM(S(LWSGLHSHL/C0B?C2A_C4A9U)3XUH/BG6DH<\0W XM@?ESQ#>WYWRGM_<\0WD8<\0W@N*=:3^-:$G4E?C4AITI>-*)^-"+#XSHLHS( XMM(RHMGRGN'R'NGQGO'Q'OHP(P(OHPXNHQIMIR;";#.OM.ZVK#""@J$L```!) XM0$;\1<0@$O0!#VWN*-SBK:XK'8L]<8[BL7SN9Q# XMNJPSNYPDNZP3O*P3O9P$O:OSOJOSOYODOZO3P*O3P9O$P:NSPJNSPYNCQ*N? XM/%FX/&JW/'FV3'FV7&JT;&JRG%L*LL&S;BN;>_"0,$X```!&/4/\0BYL]$QT XM/B3)0N0\LP`;KD.W.LYKVLY#MS`!]N4\U_RT$\LR3)0N;1&X(%````!/1D3\ XM0PMHO4O%K4K'X!V=2<>]*\7!T,&.+1P-$+"J4@```$P_1/I#$!\P($`?2]3$ XM6]C`6MN5O;AKVW>]MGO<6+W$F]M9K<2;VTJ]I+K;.[VCP+V3P;V$P:V3P;V# XMPKUSPZ`9L!FP&?L!FP&;`9H!FP&;`9^P&:`:@!SV`>0!Y`'D`>0!Y`'D`>0! XMY-D\9-H\5-L\1-M,--P\0]T\,]X\)-U,%-Y,!-]+3?6D`02D`064`0:$`0=T XM`0ADWZ5-[`1-K%/P'S`@0!\PL%Y3````)R8W_"O*O+QL;*PHE\!\-*;'*ETV XMTVTVTVU%U%U/74XEU&U/75XFU/?3C2G2G1O0P,_!SL+-P\S$S,3,P\S$S,/- XMPL[!S[T9THTWU.)M1=1M1KNZ0'[`+5QK"/50```$P_ XM1/I#P^+4W,(!>@&N>`&,,!#+V-/2LH.\Z6AYRIB)G'BHN,2;C`G!C!C"BYP8 XMPIF<*,.7^<.,25^<2,63K$C%HIQ8QI'GK%C&H9Q8QI*L2,6C^<2,65^<.,27 XMG"C#F9P8PIN,&,*,&;C`G$BHN,>8B9RI:'G.LH.]+3V,L!##`7YX`:H!?"W. XM+4Q`H(A7````4D5$^D.WXL73L]Z@$>:,6+J+NYN(N;RWBXL4FVBWF9M8MIL/ XMBUBVBRXHM(M8M.L(LXM(MGLXLXM^*+*+.+A[*+-[F+&+*+F+&+)[M[&+)[N+ XM"+%[U["+%[YZBP>_B8J,!YB8PGB(C$=X>,:%AHR).$C,MQK/OM.YVK$!#G@! XM&MZST^+%N+"@6````$Q!1?M$SL$!3)W<_7N[TJQ:SYR9S)S9R9SYQITYPYU9 XMP?G7FYV9GYVY?YW97ZW:2=^3YZWZ.=^4XJW:7YW9?BG;F9V9OXV8P?C7C#?7 XM?$C5C%?5?';5;(?3?);3;+]M%LU=%<]<]<([7/6VP$STP&P%S5P#\3P$S4P# XM+SP4RTP3),$\L\%#/!/+/!-$P#RSP$3CR,G(7\?)QVQ\K&.HMUD```!834;[ XM0P;_$"`_`>7P''K=.+#;2:VSL/K9.RK7.SK62TK5.UK42VK3.WK22XK1.YL, XM]+JL\[NPS4O*S3O;#+2^K+/`^LD\*L<\.L9,2L4\6L1,:L,\>L),BL$\FPOT XMRJOSR["]3,J]/-L+M,ZKL]"KD]&KA-*K<].K9-2K4]6K1-:K,]>PL4V*L3V; XM"DVJH]NPA-RH/>^F,!"D,!&C0!*B,!.A0!3[(!;[`!CY`:]P'%`>/*"PM%H` XM```X-T?\1<^=[%V&EM5,)M%,9<],ALQ,ILI,QLA,YL<\]L9-!L5\U\.
    ,_`>="WC1MHTK7YTJ6=.EG3E:TY6=25^=.5K3AITY;YTX>=*(C3 XMB/C2B8T8J-%[C0?!?0?!C.?#?-?$?,?&?*?(?(?*?%?-?"C/B9T\K7Q=V]*@ XMBEP```!2/U3W00$#WVW(VJV+#7L->PU[#7L->PU[#7L->PU[#7L->PU[#7L- XM>PU[#7L->PU[#7L->PU[#7L->PU[#7L-BMJ-RMNPV[#;L-NPV[#;L-NPV[#; XML-NPV[#;L-NPV[#;L-NPV[#;L-NPV[#;L-NPV[#;L-NPV[#;K8!`P`\PU[#7L->PU[ XM#7L->PU[#7L->PU[#7L->PU[#7L->PU[#7L->PU[#7L->PU[#7L->PV*VHW& XMWS`$`0$A"2$!(=@*7P```#(R!0#I#\"PD6$```!$.BW\*\N0$C>,N(1IS'@WC-=T:<^#-ZSX)'G1<4B=%Q.9T;F=&J^-*;C2C`XXTGPGT)PGSZ XMPWS;PWRU)X)7R5-W-GQ65W-WPG=F2(B:9$K)PL#!Q<6L6LMGH.9B````.SM9 XM_D7.C4M,^XRX=\AK)L9;5L1+=L);EL!;IK];M[U;Q[Q;U[Q+Y[M+][I,![H\ XM"+E,![E,%[D\)[A,&+@\)[A,)[@\)[D\%[E,%KH\%[H\![I+*P)[L[&YO?.P XMN;U+"[NSL[`WNCP8N3PGN$PWMSQ'M_/$BU3%>U/&BT\\6;-,6;/B/&FR3%JR XMXCQILDQ:LO3%FS3$FS7$FS7$BT7#FT7#BT?!BU,3P)M3%+^+8Q2^BV0DO(MS XM1+J+@T6X>Z-6M(ND=K"+PYN[X["WP#LK+"3(]GTV3V>--CB3878XTV.--D]HKRPEF0` XM```O*T?\1<^-3!T,7-=URVM,AL),9L0\9<5,1L8L3VV.-MA]CXV(UZU;U;U, XM#4P=3`U,#4P-/!S\7,R,ITK(AJQGF<5[G"C!C!C#?!C$;`C%:XQVF<=IC)6) XMR5?BG*1^*];`U<+3Q-'&S\C-RLS)SL XMC/QM'#U,'6K8C9?:XVVO7,.US5EXQ7M\9ZC& XM>GQWF,>'G'AXR(:)]\:*?%BWQ7P'Q(P6Q'PFPW XMPWP7Q6P6QFP&R%MLEI;+9VS61\_"TKUGS\!*:0```"4;+?HKP]EM?B?6C6XG XMUHUN)]:-;B?6C6]]:-;WUHUO?6C6]]:-%/%](QC107TC)]%"?00VT4-M!$;$ XM5J5GA896O2T,U'T@L(UJ````/3,M^BO`,!)LML-\F<)\;!P7Q<+`C#4IP(PD XM2,%\%5C!?`1WP8M)3#BDT7E=)X33ATU(5=5U37T*,=[,_?(>S*,AZ0HR'HS?):S-\EJ0HR6HSC) XM>$-\IW1'RVOG>^-Z=[XW^*-_XWIWOC>G>^-_BC?^-[YW*V\#9P=A1C74XU52-15C3 XM5XT5B,]XG->HS'N,M\",.,B,&,F,",J:C,B8S8B, XMZ6C0A8T82=*"G3@HU)%]:!;8@4VGH)]L````/SA`_"NV/8:]2Z>\:Y][M[B+ XMJ+B+I[GWNWN(NHN(NGN?>[>XBZBXBZ>Y][M[B+J+B+I[GWNWN(NHN(NGN?>[ XM>XBZBXBZ>Y][M[B+J)-XNGE'BZ>3A[MY-XNHDWBYF#B;B).)MYDWJVJ$>PM$ XM%H.+"S0G9(L;!3=4BT=EGS(I\QZ?->O?,>W XMRXI\Q[]\M\!\I\!\J,!\I\%\E\)\A\)\B,)\A\-\=\1\9\1\9\5\5\9\1\=\ XM-\=\-\A\)LI\!\M[?+>VS7E\YW?0=FT71]-R?5PM?`V*W%WPL(AN````+BM9 XM_43-YCW,//QLO)Q\S&D<+%E:QIU9U9U9U9U:U9U:U?G5K5YIU_G7G7DL#)S, XMC+R-MGWV(V(UZU<#4P=/#T<7/ XMQL[(S-=\?4C1?2?4?(U8J-=Y^-B'C:=HVX2=N$C<@YW(*= XMV/*=R?&=V1G*?7>WUG XMT'TXTGT8U'N->'C;UM_2`4G:L'IP````/3@L_2K!WL`!&0$X`4CL\ XMEL`[/(7!2SR$PCM,=,,[3&3#2SQSQ$L\9,0[3'+$2TV?2TV$P$V/2UUUM==, XM!=;B7`757!757`;4]L!M1<%M/VP7T?;"?0]\-\Y\1\Y\2,R,2,Q\6,)LB,%\B/P'R8M\J+?)FHR9^GRII\FIC)FO?*F8R:F,F:?*FGRHJ, XMF:C)BWR9M\F+^,B,",>,&<6,&L2,*\*,-Q3`C$-;'VL/?C7"@2',````O,BS]*K+)L,'*AU1LBE1FR*1(;'I#EL>C26QZ))?)CR.GRG%)C+;Q.GS9 XMF,U!.GSDPGSDP8SDP7SSP8SSP7T#P7STP(SSP7T#P7STP7SSP8SDP7SSPGSD XMPGSCPWS4PWS3Q'S$Q'RTQ7RSQGRDQGR4R'QTR7QDRWPUS7P5SYAM+'UL/;G* XMH,YU````/S99^T3*\]?TU_/7]-?SU_37\]?TU_/7]-?SU_37/1MV>DI[-[$[%[%[([)K![)+-I>S2S:'M#M'9[4[5EBT2U='M4M7 XM\WMCMG\GMDMG\7MSMW%[9+:UMDMG'WMSMW%[9+:!>V2VU2U XM@WM4M71[4[5V:U.T=VM$M'=[-+-Y:S.S>GLCLGL6L4L6M&L$I[9J.GN'@WB[ XMA46+^_P[O(M-'TU_/7]-?SU_37\]?TU_/7]-<\F@M'8```!!.4#\*X?5LL%$2)P$4ZF^2XF]2ZB\2[FZ2]BY2^FW6_BV7`FU3"BT3# XMBS3$FQ3&BP3'BDR8A,J'3+ADS81,Z#3/@ET(%-&QTK#4G5^-?XU9U+#2L=%! XMC04HST.,Y$C-1HRT>,I(C)2HQTL(QDL9Q$LXPTM(PDM9P%MHOUMYODN8O4NI XMNTO(NDO9N$OIHU3`F$1,&G-$PY9#3%E$0\>T4LJQU7B@]W<```!%/EG]1-'S XMWTW^(]]-_B/?3?XCWTW^(]]-_B/?3?\\5;L[-+&K=+)XLK8[*'5&M3L:5&:U XM.QI$AK-+&D.6LSLJ-):S.RHDE[,[2".GLDM7(Z>R.V<4F+([=A.GLSN%$Z>R XM2XF8LCN4$Z>S.Y2S>S.Y2RBR2Y2R>S.Z.RBS.Z.R>T.Z.R>S2Y2QBS.Z.R>T XM.Z.R>T.Y2R>S2Y.RBS.Y2R][0[A+-[-+=+1[,[=+5[,[<[9[,[9+9[)+5+=[ XM([5+E[$[1+I[$[-+QZ2Q6]B3L5OX@Z7"ECAL6P%%?)ODRXH\NH3+ITS*<\VF3-I4T( XM5-%T32=#U&--1C/64SUD-+P[Q#.\6[0SNVNT)+MKLS.\:[,SNWNS,[MKM"2[ XM:[,SO&NS,[MKM#.[:[-#NVND0[M;M$.[6Z13NTNE7TN5N59+AKA76VBV6%M9 XMM'AK*QLGE["SJ+"5D96K&\*[LKL[JTN5N+:V>WN+2;2[L;&QOWMWND`->0`` XM`!D$8_9)$A#_$A"P17H````M'F/Y2T5S4S?7,7, XM7-3,7,3+7)71703/7/3.7.7.]T5S4S?7,7,7-3,7,3+7)7-"P9'P```!212_Z+\)P$AP,'>.<7<.,C:-L XMO9-<[61-#50[?!TT.,&]%2?%K04FR)SE)LJ@B)>C XMA8HWAJ9S>F9VJ'%ZAE:J86JF1:RAK%1:V:U3:MFM8O6O>O46L%L*'[%;&@LC XMLJ#FT:'/;B%<]2;-8US51LME7+5FR6=[ XM>I>Y>K>W>M>U>O>S>Q>Q>S>O>U>M>W>K>Y>I>[>G>]>E>_>C?!>A?#>7Q7=\ XM=G;)96RV-LWV%L^AT?G3]]7UUSMPL#NA````-258^$3&+6\]5=/WT9S[S<', XM,5$\LR4CR%)27%4U-<-%54P%9665=756E986I:K`7`3@)\1=4\5P-Z(```!I XM7"/Z*<`M+STO/2/131/2/131313170715M`PO!T,U;"PA*@````U XM+C7],MX]UMM]F=>]7!U,+2H5T*-<^57-IERZAW5`3L!%A4!%2;?8UWU1MUE;;9GV7>-6) XMC3BYSYP;R;Q,'!PTR+2QRJS9SHSXSWT'T6T6T6TETFT6TETFTO72;2XE XMTFTO73UQ"@'UTVT^)=-M/UTVTUTVTVTUTVTVTVTGTGTHT8T9T*T+'-R+?'N, XM6[PK^]&@6KH```!2/S_W-[_)O,ZXT;;3M-2TL=:MF=J-N-M]Q]UMUMUMWVW6 XMWEWFWO7>;>XEWFWNA=]M_B7?;?]=]M]=]M_VWVWVWVWGWGWHW8W9W*W+'9U+ XM?3N-&[SK_)&@6KL```!2/S_W-QR;_.N]&XT[?4V;'?>?>;?;?;? XM]M]M]=]M_UWVW^)=]NC?7>;BWEWFWO7>;>7>;=]MUMUMUMU]Q]N-N-J=FM:Q XMM-2TT[;1N,Z\R;^09;X```!2/U3W0;"ZK;^IPJ?$I<6EHL>@RIRXS(S'S7SF XMSFSFSO;.;/7/;/]<]L_B7/;/Z%T&T.)=!M#UT&T%T&T/;0;0;0;/?/?/C.C. XMG-H,VBRL6HQ*G"K+^PN@`[K132+3/2/1$)!DOP```%(_5/=!&ZL+^LPJG$J, XM7*HLV@S9SHSHSWSWSVT&T&T/;0;070;0]=!M#B70;HT%SVXL]<]L_USVSUSV XMSO;.;.;.;.?-?,C,C+G*H,>BI<6EQ*?"J;^MN@`]'1/2/3+231.@$L@```!& XM.1SZ(QW!"`'=ZZV5VC&P-LP````U*"GZ+,2-#$RLC&S,/.P="]*?U'UE_8/B XMVA`!G.(=H_V%UG_4G2O0P<[#S,;(RL30C$"`T]>>>_>; XM;#::;%:8;':6]LEI1LMI-5=/C/&:#ABM34&-36R XM:#AL;C/3Y5T>=](P)STN=]'D73Y#Q98VD<$S,$0S/!&6-I0<`\` XM=](\0+!KU0```"PK6OI%U%V)U<#25$T59,]67/5(XLU4G,9)S%61MA]CD;8XWV&V.5]>-?E?7C7Y7V&V.-]CD;8?8Y&V?79XFSCA)0%VVX1= XMG1%=?9U8:=5L;4;0?272C0;2G%TYM=.Y;346A=126%TV)7;34V9=1456TV1D XMXFTU5C?297+VTU=B;29V+VTEAA?1:-'BT5G1T&G1_06M'&K1XL6]&VO1^US1 XMILT?I=#1EM#1XI71T8;1?Q:%TF)G;28O=ETG)U;2<^)E7396-M)F]C739U)M XM-885TVE1736ZTER=)M"-%M)]!M1L;5EHUMC7U]E4C<4!=@%^)0&3`2"1-=D` XM``!:3UK[1;>CU*O-LW>U:[:S:]:Q7!6O7#6M XM7%6K7'6I7)6H3+2G7+6E7-6D3/2C7/6B312A716@3325TUA-5'755DM8L$9+ XM-%.N15L3H2K%1+!*,JQ$2O2E*K0UKDIRJE)*Y:EX@-X0```%`;8]Y*[>DI<.#` XM.^(```!0'6/>2-Q-IME]B->-:=:=:=:=>->->=:=;YUIUOG6G6^M7ZU>*M7Z XMU;U>*M6]7ZU>2]6M7@++UW[XM2]3[U:U;U:U:U:U:UI XMUIUIU:U:U9U9UIU*UGV5VWV:V9V)V9V*UZV)V)V)UZUZUZUZUKUJUOO6XKUN XMW[#(.>0```!0'6/>2N`LO6K6Y+UOK6O6XJUKUOK7XJU_K7^M>=CYV)V/G8G8 XMG8C9C8G8G8G8G9C9C9?:;<2(#?````!0&V/N2`X.WI>2@`SQ````4!MC[DJ7 XM[>#KR#GR````4!UC\$A-QMI]F-F-F=B=B=B=B-F-B=B=CYV)V/G8G7^M?ZU^ XM*M?ZUKUN*M:];ZUN2]:M;@++R$GS````4!UEWDKM^];BO6^]:M:]:M>M>M>M XM>=B=B=BM>MB=F=B=FME]M=E]:M2=:=6=6M6M6=:=:=:M6M6M6M6]6M7[U.*] XM3M^]4,`[]````%`=8_!*U>`LO5K5Y+U?K5O5XJU;U?K5XJU?K5^M:=;YUIUO XMG6G6G7C7C7G6G6G6G6C7C8?9;:3]=U=UMU=U=UMU=U=UMQMQMQMQMS*G\R=SIO/F= XM"9?:C:C9C8D=>1U9/4E-:2V)39D]N1VY'^"`9OT```!I7#GZ-+Q- XM_UWUWFWEWUWFWEWUWFWFWFWFWFH'man/pk2sfp.1.S' <<'END_OF_FILE' X.\"Copyright 1988 by Chris Lewis 91/03/20 X.TH PK2SFP %%MANEXT%% "Psroff %%T2VERSION%%" X.SH NAME Xpk2sfp,pk2ditwid,pktype,pk2ps \- PK/SFP format font file handling utilities X.SH SYNOPSIS X.B pk2sfp X.BI "[\-D" opts "]" X.BI "[" options "]" Xfonts ... X.sp X.B pk2sfp X.B \-m X.BI "[\-D" opts "]" X.BI "[" options "]" Xmap font map font ... X.sp X.B pk2ditwid X.BI "[\-D" opts "]" X.B "[\-S]" X.B "[\-s]" X.B "[\-A]" Xfiles... X.sp X.B pktype X.BI "[\-v]" X.BI "[\-f" char "]" X.BI "[\-l" char "]" X.BI "[\-D" opts "]" Xfiles... X.br X.B pk2ps X.B "[\-f]" X.B "[\-v]" X.BI "[\-D" opts "]" Xfiles... X.SH DESCRIPTION XThese programs allow you to manipulate PK and SFP format font files, Xwhich X.B psroff Xcan use with Hewlett Packard Laserjet (or compatible) printers. XThese programs are usually found in %%LIBDIR%%. X.SH "Converting SFP and PK files: pk2sfp" X.PP X.B pk2sfp Xreads each of its argument files, and converts them into HPLJ format Xfonts (HP SFP format), and outputs them to standard output sorted Xin ascending order of character code. XThe output does not normally contain "SET FONT ID" sequences. XThis is how HP distributes their fonts on floppies. X.PP X.B pk2sfp Xconcatenates all the conversions of the input files together on standard Xoutput. X.PP X.B pk2sfp Xwith the X.B "\-m" Xoption allows you to merge font files, at the same time changing the Xencoding. XMost of the options for simple font conversions apply to X.B pk2sfp Xwith the X.B "\-m" Xoption, but merging is covered more completely in "Merging SFP and PK Xfonts" below. X.PP X.B pk2sfp Xcan read both PK and SFP format files (the latter effectively being a X``no-op'' conversion - which can be useful for checking format validity Xand changing header characteristics, see below). X.PP X.B pk2sfp Xattempts to infer certain header characteristics by the basename Xof the input font file name if the input font is PK format. XThe X.B psroff Xnaming convention is: X.BR path / troffname . pointsize . "[pk|sfp]" X.PP X.RS X.nf XAll ROMAN8 encodings unless MATH8. XAll 0 strokeweight, unless Bold. XAll upright, unless Italic XAll Roman typeface, unless otherwise specified X.ta 1i X XR Normal Roman XI Italic XB Bold XS MATH8 Symbol XX Bold italic X\&.X Bold italic X\&.I Italic X\&.B Bold X\&.R Normal XH or H. Helvetica typeface XC or C. Courier typeface X typefaces should be extended. X.DT X.fi X.RE X.PP X.B pk2sfp Xwill pass through SFP characteristics unchanged, unless you change them Xexplicitly (see below). X.PP X.SH "Additional options for pk2sfp" X.PP XThe X.BI "\-s" na Xoption will set the symbol set. XEg: X.B "\-s8U" Xsets the symbol set to "ROMAN8". X.PP X.BI "\-t" "0|1" Xsets the orientation to ``upright'' (0) or ``italic'' (%%MANEXT%%). X.PP X.BI "\-w" n Xsets the stroke weight, 0 is normal, \-7 is very light and 7 is very Xbold. X-3 and 3 are traditional values. X.PP X.BI "\-f" n Xsets the typeface to ``n''. XFor example, Times Roman is ``5''. X.PP X.BI "\-i" n Xcauses X.B pk2sfp Xto emit fontid sequences in front of each downloaded Xfont, incrementing the id by one for each font, starting with number X.IR n . XFor compatibility with X.B psroff Xit is suggested that ``n'' be at least 1000. X.PP XSpecifying X.B "\-v" Xrequests pk2sfp to tell you what it's doing on stderr. X.PP XThe X.B "\-S" Xtells X.B pk2sfp Xthat it's dealing with a font intended for X.BR psroff "'s" XS font. XThis has no effect unless X.B "\-p" Xis specified. X.PP XThe X.B "\-p" X("partial downloading") feature indicates to X.B pk2sfp Xthat the fonts are intended for use with X.B psroff Xand that characters that aren't used by X.B psroff X(eg: half of a ROMAN8 font isn't used) will be dropped from the Xoutput font. XThe font being read are assumed to be ROMAN8 fonts and the list of Xvalid characters will correspond to the characters that X.B psroff Xneeds from ROMAN8 sets. XSpecify X.B "\-S" Xtoo if you want to do this to MATH8 fonts which are intended for Xthe characters that X.B psroff Xneeds from the MATH8 set. X.PP XThe X.B "\-P" Xoption tells pk2sfp to mark the fonts it downloads as permanent, Xwhich means they are not cleared by a software reset, only explicit Xdeletions or printer power-offs. XThis option does not do anything unless X.BI "\-i" n Xspecified as well. X.PP XPlease note: the tables used to control X.B "\-p" Xare compiled into X.BR pk2sfp . XIf you change the character translations in lj.c or lj.fonts, you Xwill have to rebuild X.BR pk2sfp . XThe partial option should not be used for auxiliary fonts (fonts Xwhich supply characters not in ROMAN8 or MATH8). XUse the X.B "\-m" X(merge) options for creating specialized reduced size font sets for Xsuch fonts. X.PP XThe following example shows how you could preload your laserjet Xwith fonts (in sizes 8, 9, 10, 11 and 12). XThis demonstrates the use of Xthe X.BR \-p "," \-P "," Xand X.B \-S Xoptions to use up as little Laserjet memory as possible. X(These fonts should be marked ``b'' (builtin) in X.IR lj.fonts ")." X.PP X.RS X.nf XF=%%LJF%% Xpk2sfp \-pP \-i1000 $F/R.[89].pk $F/R.1[0\-2].pk | lp Xpk2sfp \-SpP \-i1006 $F/S.[89].pk $F/S.1[0\-2].pk | lp X.fi X.RE X.PP XAll of the preceding options take place on all of the fonts specified in Xthe command line. XMost of the options perform no sanity checks on their arguments. XThe reader is cautioned to read the HP manuals before attempting anything Xfancy with options that affect header descriptors. X.SH "Merging PK and SFP fonts: pk2sfp \-m" X.PP XThere are a wealth of fonts and font formats in the world. XPerforming simple conversions between one format and the other would Xlead to you having a considerably bigger repertoire of fonts. XRight? X.PP XWell, not always. XNot only to the formats change from one font format to another, but X.B encodings Xdo too. XIf you simply converted Knuth's fonts in PK format to SFP and used them Xon your Laserjet you're bound to be disappointed, because a character in XKnuth's font isn't necessarily in the same place in standard SFP fonts. XEg: If you used the hex code 0x7B to print a left brace-bracket (that's Xwhat it is in ASCII and ROMAN8 fonts right?), you'd find that in Knuth's XCMR font you'll get a "ff" ligature instead. XWorse, other ASCII/ROMAN8 characters don't exist in CMR at all. X.PP XSo, font conversion often needs more than simple format translation Xto work out the way you want. X.PP XThe X.B "\-m" Xoption to X.B pk2sfp Xis intended to do just that: take characters from a combination of Xfonts, change encodings as necessary, and create one output font. X.BR Psroff "'s" XHP Laserjet S font is created in this way from four separate PK fonts. X.PP XThe X.B "\-m" Xoption to X.B pk2sfp Xindicates that preceding each font file specified a map file will be Xgiven. XEach font file will be appended together (with only one SFP header) Xwith the translations specified by the map files and copied to Xstandard output. XAny character not mentioned in a map file is not copied. XThe map file applies to the font files following until overridden Xby the next map file. XThe map file specifies the translations with lines of the following format: X.PP X.RS X.nf Xfrom to description X.fi X.RE X.PP X.I From Xspecifies the character in the font file to be selected. XAny character that doesn't match a ``from'' line will not be Xcopied to the output. X.I To Xspecifies what character number the ``from'' character should be Xchanged to. XIf ``to'' is omitted, it is assumed to be the same as ``from''. XThe description is free form text and is ignored. XFrom, to and description are separated by white space. XEmpty lines or lines beginning with "#" are comments. X.PP X``From'' and ``to'' can be specified in any of the following formats: Xa single non-numeric character other than ``#'', Xa decimal number starting with a non-zero digit, Xan octal number consisting of a zero digit followed by numeric digits, Xor hexadecimal consisting of a zero digit, followed by 'x' or 'X', followed Xby digits and upper or lower case 'a' through 'f'. XIf the ``to'' string is a single double quote ("), it is duplicated Xfrom the ``from'' string. XThe error checking isn't very exhaustive, so it is recommended that you Xuse the X.B \-v Xoption to check things. XThe X.B \-v Xoption will also give you a very verbose description of what characters Xits translating and what characters it couldn't find. X.PP XThere are some examples of this in the source tree for X.B psroff , Xthat generate a ROMAN8 and MATH8 SFP in 10 points. XLook in utils/Makefile for ``testmerge'', utils/maps contains some Xuseful translation maps, and utils/fonts contains a few PK files for Xyour experimentation. X.B Psroff Xis shipped with PK format font files that were created by use of this Xutility. X.SH "Creating width tables: pk2ditwid" X.PP X.B pk2ditwid Xis used to generate a ditroff format width table file (used by X.B psroff Xwidth table installation via X.B gfnttab Xand X.BR dit2catwid ) Xfrom PK or SFP font files. XThe output files are generated in the current directory with the Xsame name as the basename of the input files, or with a ".WID" Xsuffix if there was no previous suffix. X.PP XThe \-A option is special - it prints the widths and kerning Xinformation of the characters without regard to ditroff encoding. XThis is useful for generating width information for complete Xfonts. X.PP XThe X.B \-S Xoption indicates to X.B pk2ditwid Xthat the font file is a XPK or SFP used for the symbol font, otherwise X.B pk2ditwid Xassumes that it is a normal font. X.PP XThe X.B \-s Xoption tells X.B pk2ditwid Xto shut up and do the best it can. XOrdinarily X.B pk2ditwid Xis extremely chatty about which characters it could find etc., Xwhich is rarely of major interest to the user. XWhich is why X.BR psroff "'s" Xinstallation script puts X.BR pk2ditwid "'s" Xoutput in log files and makes no attempt to show them to the user. X.PP X.BR pk2ditwid "'s" Xexact operation is somewhat bizarre, the following is a simplified Xdescription: X.PP XNormally, X.B psroff Xworks with pure ROMAN8 and MATH8 Xencoded fonts for normal and symbol font sets respectively. X(ROMAN8 and MATH8 are two of HP's standard "char-to-glyph" mapping tables). XHowever, XThe MATH8 and ROMAN8 encodings do not exactly reflect CAT X.BI troff 's Xdivisions of characters. XIn X.BR troff2ps 's Xbackend drivers, there are tables that correspond to CAT normal and symbol, Xwhich are indexed by CAT code to select which HP font and character sequence Xshould be emitted by the backend to print a specific CAT character. X.PP XMost CAT codes are single HP characters, but a few are done by concatenation X(for example \e(34 may be) or overstrike X(\e(co may be). X.PP X.B pk2ditwid Xuses the backend tables and reads each of the font files given as arguments. XIt then generates a ditroff-like width table that contains width information Xfor each sequence of HP characters needed to generate a CAT character. XThe width tables are fairly simple, and contain three fields of principle Xinterest: X.PP XColumn one is the CAT X.B troff Xcharacter name. XSingle characters are themselves, dual characters are prefixed by "\e(" Xin X.BR troff . X.PP XThe second column indicates the width of that character in 1/300th's of an Xinch when the character is printed at 10 points. X(Which are the default X.BR gfnttab / dit2catwid Xsettings) X.PP XThe third column is the kerning information, and is a number formed Xby or'ing a 1 and/or 2 together. XA ``1'' denotes an descender (eg: ``g''), Xand a ``2'' denotes a character with an ascender (eg: ``k''). X.PP XPlease note this is only ditroff-\f3like\fP \(em the output is not Xintended to go through real X.B makedev Xwhich will probably complain about multiple-character emit sequences and Xmissing directives. X.PP XThe wierdness comes from the fact that it's possible to override the XCAT character to HP sequence translation by adding directives to the X.I lj.fonts Xfile but the sequences are built-in (so I'm lazy...) to X.BR pk2ditwid . XIf you choose to add in translation overrides to X.IR lj.fonts , Xyou will have to recompile X.B pk2ditwid Xand rerun the width table build and install procedures Xto recompute and install the new width tables. XThe Makefile uses the X.B troff2ps Xbinary to generate a compileable table of translation sequences, using Xboth the built-in backend map plus the X.I lj.fonts Xoverride you've specified, Xplus the mkenctab shell script to generate the pk2ditwid tables. XThis is so durn complicated, that I simply automated it all: Xin the X.B psroff Xsource directory area, change X.B lib/lj.fonts Xto reflect the translations you need, Xand rebuild and reinstall X.BR psroff . X.PP XIf you're just adding new fonts to X.BR psroff 's Xrepertoire, this isn't all necessary, just install the fonts into X%%LJF%% (using the proper naming convention), Xupdate X.IR lj.fonts , Xand go into the widths source directory and type ``make ljwidths widths'' Xthen su to root and ``make installwidths''. X.PP X.B pk2ditwid Xneed only be run on one font in each family, and by default, the build Xprocedure runs X.B pk2ditwid Xonce each font (in the size closest to 10) that it finds in the X%%LJF%% directory. X.SH "Examining PK and SFP font files: pktype" X.PP X.B pktype Xreads PK and SFP format files and generates files suffixed with ".D" Xwhich contain a description of the font and each character. XIf the X.B "\-v" Xoption is specified, an approximation of the character image is displayed Xtoo. XThe X.BI "\-f" char Xand X.BI "\-l" char Xoptions allow you to specify a range of characters to print, where Xthe X.B \-f Xspecifies the first character, and X.B \-l Xspecifies the last character. X.SH "Displaying PK and SFP font files: pk2ps" X.PP X.B pk2ps Xtakes each of the specified files and generates bitmap Postscript Xfonts and appends to each commands to draw a table. XThe table contains each character in the font, and below it are Xdecimal, hexidecimal and octal numbers representing the character code. XThe output of X.B pk2ps Xis on standard output. X.PP XThe X.B \-f Xoption causes X.B pk2ps Xto omit the table printing commands and some of the extra Postscript, leaving Xonly the Postscript font definition. XThe resultant output can then be used as a Postscript font (via inclusion Xin ps.lib etc.). XThe font is named for the basename of the filename. X``/cmr10.358pk'' will be called ``cmr10''. XThe font is supposedly properly scaled, so Postscript ``scalefont'' will Xwork normally and generate the size font you expect. XWarning: this uses bitmapped fonts: displaying these characters at Xconsiderably Xlarger sizes or at odd multiples of the ``true'' size (the size of the Xexample is actually 10 * 358 / 300) may lead to some objectionable Xjaggies. X.PP XIn all four utilities, the X.BI "\-D" opts Xoption allows you to turn on debugging. XSee X.BR troff2ps (1) Xfor further information. XNote: if DEBUG compiled out, this will not be available. X.SH FILES X.if t .ta 2.5i X.if n .ta 3.5i X%%LJF%% troff2ps LJ font directory. X.br X%%LIBDIR%%/lib/lj.fonts LJ font definitions and translation overrides. X not read by pk2sfp/pktype/pk2ditwid X.SH "BUGS" X.B pk2sfp Xshould really have multiple output files when requested by an option. X.B pk2ditwid Xand X.B pk2sfp Xshould be able to read the X.I lj.fonts Xfile instead of being recompiled. X.B pk2ditwid Xonly understands backspace or character concatenation sequences X(eg: "a\010b" or "ab"), Xany translation that contains any other escape sequence will not be Xparsed properly and may generate bizarre widths, though it will Xbe moderately sane if all of the characters in the escape sequence Xare nonprintable (or not in the font file). XSuch escape sequences may also affect operation of X.B pk2sfp "'s" Xpartial downloading feature (by including characters that you don't Xreally need - which is harmless). X.SH "SEE ALSO" Xtroff2ps(%%MANEXT%%), \fIlj.fonts\fP, XHewlett Packard's HP Laserjet Reference Manuals. X.SH AUTHOR XWritten by Chris Lewis END_OF_FILE if test 15581 -ne `wc -c <'man/pk2sfp.1.S'`; then echo shar: \"'man/pk2sfp.1.S'\" unpacked with wrong size! fi # end of 'man/pk2sfp.1.S' fi echo shar: End of archive 6 \(of 19\). cp /dev/null ark6isdone 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...