clewis@ecicrl.UUCP (Chris Lewis) (12/15/90)
Archive-name: psroff2.0/patch.06 Submitted-by: clewis@ecicrl.uucp (Chris Lewis) This is official patch 06 for Psroff 2.0. Please apply it by: cd <psroff source directory> patch -N -p < <this file> Then, rebuild and reinstall. Psroff now supports DEC's RISC/Ultrix unique, one-of-a-kind, undocumented and unsupported troff. The most important change is the support for RISC/Ultrix systems which have a ASCII format for width tables (ASCIIWIDTHS in defs.h). See the README for more details. Second, if ASCIIWIDTHS undef'd and HEADERSIZE > 0, the width tables will be created with a copy of the header and trailer found in /usr/lib/font/ftR (just in case). The only other functionality change is that in psroff - until now if specified a macro package for which there was no adapter file in LIBDIR/adapters, or specified no macros at all, troff wasn't told to reload the width tables and define ".fp" etc. Does now. Thank Russ Evans (e_gs18@va.nmh.ac.uk) for helping me bash away at getting RISC/Ultrix stuff going. ./TROUBLE comments re: ASCIIWIDTHS ./man/troff2ps.1.S poor english... ./lib/psrofflib.S comments re: ASCIIWIDTHS ./README ditto, some english fixes, comment regarding HPLJ III. ./debug.c redundant code removal ./widths/Makefile bug fixes. ./widths/dit2catwid.c ASCIIWIDTHS ./utils/dumpft.c ASCIIWIDTHS ./defs.h ASCIIWIDTHS ./troff2.c Experimental method of emitting new characters. ./utils.c ASCIIWIDTHS (for optimizer) ./psroff.S include cmn.pre even if no macro package specified ./adapters/Makefile forgot to install tmac.e (whoops) ./audit.S comments regarding ASCIIWIDTHS *** /tmp/PATCHold/./TROUBLE Sat Dec 15 00:02:05 1990 --- ./TROUBLE Sat Dec 15 00:02:10 1990 *************** *** 1,4 **** ! Psroff 2.0 Trouble Shooting.... 2.2 90/10/30 (psroff 1.0 users can use this to a certain extent) --- 1,4 ---- ! Psroff 2.0 Trouble Shooting.... 2.3 90/12/14 (psroff 1.0 users can use this to a certain extent) *************** *** 59,65 **** of your original troff installation. Is ftR 224 bytes long? If so, HEADERSIZE should be zero. If not (eg: Ultrix, possibly older BSD's, some older Xenix, V7), you will have to specify ! HEADERSIZE. Ultrix wants 32. (should be the size of an a.out header structure - od -c may give you some hints). Another way to tell is to run "file" on /usr/lib/font/ftR. Does it say "data"? Then it probably needs HEADERSIZE 0. --- 59,65 ---- of your original troff installation. Is ftR 224 bytes long? If so, HEADERSIZE should be zero. If not (eg: Ultrix, possibly older BSD's, some older Xenix, V7), you will have to specify ! HEADERSIZE. VAX/Ultrix wants 32. (should be the size of an a.out header structure - od -c may give you some hints). Another way to tell is to run "file" on /usr/lib/font/ftR. Does it say "data"? Then it probably needs HEADERSIZE 0. *************** *** 71,76 **** --- 71,82 ---- really needs this, but this is a way of getting the size right without having to guess/write a program to find the a.out.h size. + + RISC/Ultrix uses an ASCII format width table. You can + tell this if the following command: + echo ".fp 1 R" | troff -t > /dev/null + says something about non-ascii /usr/lib/font/ftR. If + it does, define ASCIIWIDTHS. NOTE for PSROFF 1.0 users: *** /tmp/PATCHold/./man/troff2ps.1.S Sat Dec 15 00:02:53 1990 --- ./man/troff2ps.1.S Sat Dec 15 00:03:00 1990 *************** *** 1,4 **** ! .\"Copyright 1988 by Chris Lewis 2.2 90/10/24 .TH TROFF2PS 1 local .SH NAME troff2ps, troff2lj, troff2xx \- convert troff output to Postscript, HP etc. --- 1,4 ---- ! .\"Copyright 1988 by Chris Lewis 2.4 90/12/04 .TH TROFF2PS 1 local .SH NAME troff2ps, troff2lj, troff2xx \- convert troff output to Postscript, HP etc. *************** *** 119,125 **** .B -Z and .B -W ! options controller the optimizer. If the .B -Z option is specified, the backends attempt to coalesce strings of --- 119,125 ---- .B -Z and .B -W ! options control the optimizer. If the .B -Z option is specified, the backends attempt to coalesce strings of *************** *** 297,303 **** etc. .SH BUGS Due to the nature by which special sequences are transmitted by ! troff (stderr, forced into stdin by .IR psroff ), normal troff errors will not be seen and may generate a few "invalid opcode" messages from troff2ps or garble on output. --- 297,304 ---- etc. .SH BUGS Due to the nature by which special sequences are transmitted by ! troff (troff's stderr is merged with its stdout and is piped into ! troff2ps's stdin by .IR psroff ), normal troff errors will not be seen and may generate a few "invalid opcode" messages from troff2ps or garble on output. *************** *** 304,310 **** Normally the document will be truncated if this occurs. If this happens, run .I psroff ! with the ``-F'' option. .P Unfortunately, there is no way at present for the ".sR" macro to change fonts within a line - for some pretty bizarre reasons if you ask --- 305,312 ---- Normally the document will be truncated if this occurs. If this happens, run .I psroff ! with the ``-F'' option which will show you troff's stderr without ! generating any output. .P Unfortunately, there is no way at present for the ".sR" macro to change fonts within a line - for some pretty bizarre reasons if you ask *** /tmp/PATCHold/./lib/psrofflib.S Sat Dec 15 00:03:41 1990 --- ./lib/psrofflib.S Sat Dec 15 00:03:44 1990 *************** *** 1,4 **** ! # 2.2 90/08/10 # This file controls psroff, you can insert additional printer # types here. These are eval'd *late* in processing, so that # you can insert $copies etc. --- 1,4 ---- ! # 2.4 90/12/14 # This file controls psroff, you can insert additional printer # types here. These are eval'd *late* in processing, so that # you can insert $copies etc. *************** *** 55,67 **** troff='' trofftype='-T$width' - # Uncomment the following if you're a Sun or Ultrix -F troff. # Check your manual pages. (Though some support -F without mentioning ! # it in their manual pages). The default is "-T" (Xenix and some others) #trofftype='-F%%FONTDIR%%/$width/ftXX' # psroff generating postscript directly. ps width=ps t2arg=-Tps lparg='| $LIBDIR/psxlate | rlp -d$ptr -n$copies' ps ptr='gate!AppleLaser' # Example optimizer entry. --- 55,73 ---- troff='' trofftype='-T$width' # Uncomment the following if you're a Sun or Ultrix -F troff. # Check your manual pages. (Though some support -F without mentioning ! # it in their manual pages). The default is "-T" (Xenix and a few others) ! # Most BSD-derived troffs use -F, including those needing ASCIIWIDTHS ! # turned on. #trofftype='-F%%FONTDIR%%/$width/ftXX' # psroff generating postscript directly. + # The clause "| $LIBDIR/psxlate" is there only to reverse the pages + # for some Postscript printers (eg: the ones that print the first + # page face up and then drop the second page face up on top of the + # first), most more recent Postscript printers don't need this so + # you can remove the psxlate call alltogether. ps width=ps t2arg=-Tps lparg='| $LIBDIR/psxlate | rlp -d$ptr -n$copies' ps ptr='gate!AppleLaser' # Example optimizer entry. *************** *** 72,78 **** tps lparg='| $LIBDIR/psxlate | rlp -d$ptr -n$copies' ptr='gate!AppleLaser' # System V'ish LJ printing to printer called laser. ! # (Does your lp filter script support -og? (8 bit, no filtering)) lj width=lj t2arg=-Tlj lparg='| lp -d$ptr -og -n$copies' ptr=laser --- 78,84 ---- tps lparg='| $LIBDIR/psxlate | rlp -d$ptr -n$copies' ptr='gate!AppleLaser' # System V'ish LJ printing to printer called laser. ! # (Your lp filter script should support -og (8 bit, no filtering)) lj width=lj t2arg=-Tlj lparg='| lp -d$ptr -og -n$copies' ptr=laser *** /tmp/PATCHold/./README Sat Dec 15 00:04:18 1990 --- ./README Sat Dec 15 00:04:26 1990 *************** *** 1,4 **** ! PSROFF RELEASE 2.0 PL5 README 2.3 90/11/16 May 14, 1990 Chris Lewis --- 1,4 ---- ! PSROFF RELEASE 2.0 PL5 README 2.4 90/12/14 May 14, 1990 Chris Lewis *************** *** 362,367 **** --- 362,381 ---- In any event, if you have problems and wish to ask me for help, I will be requiring that you mail me a copy of the output of "make check". + + If you're running on RISC Ultrix ignore any HEADERSIZE or + trofftype messages. The reason for this is that RISC + Ultrix comes with width tables that cannot be read + by the RISC Ultrix troff, and make check will be fooled. + define ASCIIWIDTHS in defs.h in this case. trofftype + in psrofflib should be the -F variant in this case. + + Psroff builds width table files that *can* be used by + RISC/Ultrix troff. You can tell if you need ASCIIWIDTHS + defined if: + echo ".fp 1 R" | troff -t > /dev/null + says something nasty about non-numeric character in file, + "may be non-ASCII". - type "make unpackljfonts" This will uudecode the font files I've supplied and remove the .UU files. This *************** *** 394,401 **** pertain to you. Take special note of HEADERSIZE. Take a look at /usr/lib/font/ftR. Is it 224 bytes long? If so, HEADERSIZE should be 0. Otherwise you will probably have to set it to the ! size of your a.out.h structure. Ultrix and Sun appear to always ! be HEADERSIZE = 32. With Laserjet driving: --- 408,415 ---- pertain to you. Take special note of HEADERSIZE. Take a look at /usr/lib/font/ftR. Is it 224 bytes long? If so, HEADERSIZE should be 0. Otherwise you will probably have to set it to the ! size of your a.out.h structure. VAX Ultrix and Sun appear to always ! be HEADERSIZE = 32. See remark about RISC Ultrix above. With Laserjet driving: *************** *** 440,449 **** check out your troff manual page! Suns and Ultrix want trofftype='-F/usr/lib/font/$width/ftXX'. ! - If you're going to be driving HP Laserjets: ! If you have PK fonts from TeX, ensure that PKFONTS is set ! reasonably in the Makefile. type: make buildljfonts --- 454,467 ---- check out your troff manual page! Suns and Ultrix want trofftype='-F/usr/lib/font/$width/ftXX'. ! - If you're going to be driving HP Laserjets without a Postscript ! cartridge: ! If you have an HPLJ III, mark in lj.fonts all of the fonts ! as built-in, you don't need to build any fonts. ! ! Otherwise, If you have PK fonts from TeX, ensure that PKFONTS ! is set reasonably in the Makefile. type: make buildljfonts *** /tmp/PATCHold/./debug.c Sat Dec 15 00:05:12 1990 --- ./debug.c Sat Dec 15 00:05:16 1990 *************** *** 2,22 **** #ifndef lint static char SCCSid[] = ! "@(#)debug.c: 2.4 Copyright 90/10/22 14:53:06 Chris Lewis"; #endif #ifdef DEBUG int debug = 0; - - #define D_CAT 1 - #define D_SPEC 2 - #define D_CHAR 4 - #define D_FONT 8 - #define D_BEND 0x10 - #define D_PK 0x20 - #define D_VERB 0x40 - #define D_FLSH 0x80 struct dbm { char req; --- 2,13 ---- #ifndef lint static char SCCSid[] = ! "@(#)debug.c: 2.5 Copyright 90/12/04 09:27:38 Chris Lewis"; #endif #ifdef DEBUG int debug = 0; struct dbm { char req; *** /tmp/PATCHold/./widths/Makefile Sat Dec 15 00:05:43 1990 --- ./widths/Makefile Sat Dec 15 00:05:47 1990 *************** *** 1,4 **** ! #2.4 90/08/08 SCRIPTS = gfnttab TD = testdir PSW = \ --- 1,4 ---- ! #2.6 90/12/13 SCRIPTS = gfnttab TD = testdir PSW = \ *************** *** 219,225 **** --- 219,227 ---- test: dit2catwid $(SCRIPTS) test -d $(TD) || mkdir $(TD) + rm -f $(TD)/* cp widthps/S $(TD)/S + chmod +w $(TD)/S sed -e '1,/charset/d' widthps/S2 >> $(TD)/S ./dit2catwid -v $(TD)/S widthps/R $(TD)/ftR > $(TD)/ftR.nout @echo "Comparing $(TD)/ftR and $(FONTDIR)/ps/ftR" *************** *** 235,240 **** --- 237,243 ---- rm -f gfnttab.log pk2dit.log pk2sep.log pk2dit.err pk2sep.err dit2catwid.o: ../defs.h + $(CC) -c $(CFLAGS) '-DFONTDIR="$(FONTDIR)"' dit2catwid.c ../cattab.o: ../defs.h @echo "cattab.o is out of date, please run make troff2ps in top level first" *** /tmp/PATCHold/./widths/dit2catwid.c Sat Dec 15 00:06:21 1990 --- ./widths/dit2catwid.c Sat Dec 15 00:06:29 1990 *************** *** 1,4 **** ! /* Copyright 1985, 1986, 1987, 1988 16:47:45 Chris Lewis All Rights Reserved Permission to copy and further distribute is freely given provided --- 1,4 ---- ! /* Copyright 1985, 1986, 1987, 1988 23:47:50 Chris Lewis All Rights Reserved Permission to copy and further distribute is freely given provided *************** *** 13,19 **** #ifndef lint static char SCCSID[] = ! "@(#)dit2catwid.c 2.1 Copyright 90/07/18 16:47:45 Chris Lewis"; #endif #include <stdio.h> --- 13,19 ---- #ifndef lint static char SCCSID[] = ! "@(#)dit2catwid.c 2.4 Copyright 90/12/14 23:47:50 Chris Lewis"; #endif #include <stdio.h> *************** *** 20,25 **** --- 20,31 ---- #include "../defs.h" #include <ctype.h> + #ifndef ASCIIWIDTHS + + #ifndef FONTDIR + #define FONTDIR "/usr/lib/font" + #endif + #ifndef HEADERSIZE # ifdef COFF # include <aouthdr.h> *************** *** 36,46 **** --- 42,55 ---- # endif #endif + #endif + int res = 300; int unitwid = 10; int symfont = 0; int verbose = 0; int genc = 0; + int headersize = -1; #define TROFFUWID 6 *************** *** 65,76 **** progname = argv[0]; ! while ((c = getopt(argc, argv, "vsr:u:ch")) != EOF) switch(c) { case 'h': printf("%d\n", HEADERSIZE); exit(0); break; case 's': symfont = 1; break; --- 74,92 ---- progname = argv[0]; ! while ((c = getopt(argc, argv, "vsr:u:chH:")) != EOF) switch(c) { case 'h': + #ifdef ASCIIWIDTHS + printf("ascii\n"); + #else printf("%d\n", HEADERSIZE); + #endif exit(0); break; + case 'H': + headersize = atoi(optarg); + break; case 's': symfont = 1; break; *************** *** 186,199 **** struct cattab *symset; char *type, *file; { int i, j; ! /* This simply prepends HEADERSIZE bytes to the font width file. ! This may not be adequate for some troffs, in that some of the ! fields in the appropriate object headers have to be filled in. ! If this is a problem, use dit2catwid -c and compile it manually. */ ! for (i = 0; i < HEADERSIZE; i++) ! fputc('\0', f); for (i = 0, j = 0; i < 224; i++) { --- 202,243 ---- struct cattab *symset; char *type, *file; { int i, j; ! ! #ifdef ASCIIWIDTHS ! #define EMITWID(v,f) fprintf(f, "%d\n", v) ! #else ! #define EMITWID(v,f) fputc(v, f) ! ! FILE *of = (FILE *) NULL; ! /* If headersize != 0 AND there's a FONTDIR/ftR, output ! the first headersize bytes of it, then the new width table, ! then the trailing bytes of FONTDIR/ftR. If there's ! no FONTDIR/ftR, we just prepend headersize 0's. ! The reason for this is that some troff's insist on valid ! headers. */ ! if (headersize == -1) ! headersize = HEADERSIZE; ! ! if (headersize != 0) { ! char buf[128]; ! sprintf(buf, "%s/%s", FONTDIR, "ftR"); ! if (of = fopen(buf, "r")) { ! for (i = 0; i < headersize; i++) ! fputc(fgetc(of), f); ! for (i = 0; i < 224; i++) ! fgetc(of); ! if (feof(of)) { ! fclose(of); ! of = (FILE *) NULL; ! } ! } else { ! for (i = 0; i < headersize; i++) ! fputc('\0', f); ! } ! } ! #endif for (i = 0, j = 0; i < 224; i++) { *************** *** 203,209 **** /* not the right position yet */ if (!symset[j].ch_name || i < symset[j].ch_wididx) { ! fputc('\0', f); continue; } --- 247,253 ---- /* not the right position yet */ if (!symset[j].ch_name || i < symset[j].ch_wididx) { ! EMITWID('\0', f); continue; } *************** *** 216,226 **** if (!(symset[j].ch_info&0x3f)) { printf("INFO: No width for %s (index %d, file %s)\n", symset[j].ch_name, symset[j].ch_wididx, file); ! fputc(symset[0].ch_info, f); } else ! fputc(symset[j].ch_info, f); j++; } dumpset(symset, "After CAT dump"); --- 260,278 ---- if (!(symset[j].ch_info&0x3f)) { printf("INFO: No width for %s (index %d, file %s)\n", symset[j].ch_name, symset[j].ch_wididx, file); ! EMITWID(symset[0].ch_info, f); } else ! EMITWID(symset[j].ch_info, f); j++; } + + #ifndef ASCIIWIDTHS + if (of) { + while((i = fgetc(of)) != EOF) + fputc(i, f); + fclose(of); + } + #endif dumpset(symset, "After CAT dump"); *** /tmp/PATCHold/./utils/dumpft.c Sat Dec 15 00:07:24 1990 --- ./utils/dumpft.c Sat Dec 15 00:07:28 1990 *************** *** 1,4 **** ! /* Copyright 1985, 1986, 1987, 1988 16:50:16 Chris Lewis All Rights Reserved Permission to copy and further distribute is freely given provided --- 1,4 ---- ! /* Copyright 1985, 1986, 1987, 1988 00:00:11 Chris Lewis All Rights Reserved Permission to copy and further distribute is freely given provided *************** *** 13,19 **** #ifndef lint static char SCCSID[] = ! "@(#)dumpft.c 2.1 Copyright 90/07/18 16:50:16 Chris Lewis"; #endif #include "../defs.h" --- 13,19 ---- #ifndef lint static char SCCSID[] = ! "@(#)dumpft.c 2.6 Copyright 90/12/15 00:00:11 Chris Lewis"; #endif #include "../defs.h" *************** *** 20,26 **** #define NUMPER 8 #define WPER 54 int dotab = 0; ! struct cattab tabN[], tabS[]; #ifdef HEADERSIZE int skip = HEADERSIZE; #else --- 20,27 ---- #define NUMPER 8 #define WPER 54 int dotab = 0; ! extern struct cattab tabN[], tabS[]; ! #ifndef ASCIIWIDTHS #ifdef HEADERSIZE int skip = HEADERSIZE; #else *************** *** 42,47 **** --- 43,50 ---- #endif int skip = HEADERSIZE; #endif + #endif + int guessflag, verbose; double ditres = 1; *************** *** 48,60 **** main(argc, argv) int argc; char **argv; { register int i; ! register int j, c; register int k; extern int getopt(); extern char *optarg; int found; struct cattab *ct = tabN; ! while((c = getopt(argc, argv, "dstwfh:")) != EOF) { switch(c) { case 'd': ditres = (double) 300 / 432 * (double) 10 / 6; --- 51,64 ---- main(argc, argv) int argc; char **argv; { register int i; ! register int j; ! int c; register int k; extern int getopt(); extern char *optarg; int found; struct cattab *ct = tabN; ! while((c = getopt(argc, argv, "vgdstwfh:")) != EOF) { switch(c) { case 'd': ditres = (double) 300 / 432 * (double) 10 / 6; *************** *** 62,67 **** --- 66,77 ---- case 's': ct = tabS; break; + case 'g': + guessflag = 1; + break; + case 'v': + verbose = 1; + break; case 't': dotab = 1; break; *************** *** 71,93 **** case 'f': dumpexamples(); exit(0); case 'h': skip = atoi(optarg); fprintf(stderr, "skip: %d\n", skip); break; case '?': fprintf(stderr, ! "usage: dumpft [-s][-f][-t][-w][-hheadersize] < cat width file\n"); exit(1); } } for (i = 0; i < skip; i++) c = getchar(); k = 0; for (i = 0; i < 224; i++) { found = 0; c = getchar(); for (j = 0; ct[j].ch_name; j++) { if (!ct[j].ch_name[0]) continue; --- 81,116 ---- case 'f': dumpexamples(); exit(0); + #ifndef ASCIIWIDTHS case 'h': skip = atoi(optarg); fprintf(stderr, "skip: %d\n", skip); break; + #endif case '?': fprintf(stderr, ! "usage: dumpft [-v][-g][-s][-f][-t][-w][-hheadersize]%s\n", ! " < cat width table\n"); exit(1); } } + if (guessflag) { + guess(); + exit(0); + } + #ifndef ASCIIWIDTHS for (i = 0; i < skip; i++) c = getchar(); + #endif k = 0; for (i = 0; i < 224; i++) { found = 0; + #ifdef ASCIIWIDTHS + scanf("%d", &c); + #else c = getchar(); + #endif for (j = 0; ct[j].ch_name; j++) { if (!ct[j].ch_name[0]) continue; *************** *** 134,140 **** break; case 0: if (i == 0) { ! printf("spacewidth %d\n", c&0xf); printf("charset\n"); } else printf("%s\t%d\t%d\n", ct[j].ch_name, --- 157,164 ---- break; case 0: if (i == 0) { ! printf("spacewidth %d\n", (int) ((c&0x3f) * ! ditres + .5)); printf("charset\n"); } else printf("%s\t%d\t%d\n", ct[j].ch_name, *************** *** 153,163 **** switch(dotab) { case 0: for (i = 0; ct[i].ch_name; i++) ! if (ct[i].ch_name[0] && !ct[i].ch_info) fprintf(stderr, "Table problem - no width for '%s' (%d)", ct[i].ch_name, i); fprintf(stderr, ", wididx: %d, catidx: %d\n", ct[i].ch_wididx, ct[i].ch_catidx); break; case 1: if (k % NUMPER != 0) --- 177,188 ---- switch(dotab) { case 0: for (i = 0; ct[i].ch_name; i++) ! if (ct[i].ch_name[0] && !ct[i].ch_info) { fprintf(stderr, "Table problem - no width for '%s' (%d)", ct[i].ch_name, i); fprintf(stderr, ", wididx: %d, catidx: %d\n", ct[i].ch_wididx, ct[i].ch_catidx); + } break; case 1: if (k % NUMPER != 0) *************** *** 251,254 **** --- 276,306 ---- printf("\n.br\n"); } printf("\n"); + } + + guess() { + char buffer[2048]; + int filesize, errcnt, i, g; + filesize = fread(buffer, sizeof(char), sizeof(buffer), stdin); + for(g = 0; g <= filesize - 224; g++) { + errcnt = 0; + for (i = 0; tabN[i].ch_name; i++) { + if (tabN[i].ch_wididx == -1) + continue; + if (tabN[i].ch_name[0] && !buffer[g+tabN[i].ch_wididx]) { + if (verbose) { + printf("Table problem - no width for '%s' (%d)", + tabN[i].ch_name, i); + printf(", wididx: %d, catidx: %d\n", + tabN[i].ch_wididx, tabN[i].ch_catidx); + } + errcnt++; + } + } + if (verbose) + printf("Guess: %d, errcnt %d\n", g, errcnt); + if (errcnt) + continue; + printf("Guess %d\n", g); + } } *** /tmp/PATCHold/./defs.h Sat Dec 15 00:07:56 1990 --- ./defs.h Sat Dec 15 00:08:02 1990 *************** *** 1,4 **** ! /* Copyright 1988, 1989 23:13:57 Chris Lewis All Rights Reserved Permission to copy and further distribute is freely given provided --- 1,4 ---- ! /* Copyright 1988, 1989 23:46:55 Chris Lewis All Rights Reserved Permission to copy and further distribute is freely given provided *************** *** 6,18 **** sold for profit. Project: Generic Troff drivers ! Module: defs.h 2.10 90/11/16 23:13:57 Author: Chris Lewis Specs: Main header file - contains some customization */ /* Official Release and Patch level: */ ! #define T2VERSION "@(#)PSROFF Copyright 90/11/16 Chris Lewis - R2 P5" #ifndef LIBDIR /* Don't touch this */ --- 6,18 ---- sold for profit. Project: Generic Troff drivers ! Module: defs.h 2.12 90/12/14 23:46:55 Author: Chris Lewis Specs: Main header file - contains some customization */ /* Official Release and Patch level: */ ! #define T2VERSION "@(#)PSROFF Copyright 90/12/14 Chris Lewis - R2 P6" #ifndef LIBDIR /* Don't touch this */ *************** *** 61,77 **** the file. I personally know of no machine that supports these. - If neither are defined, use a BSD/V7 style a.out.h header, this is appropriate for V7 and BSD troffs - The headers I write out do not have anything in them, so some - troff's may blow. Please let me know if they work for you... - If you do need the headers, and these doesn't work for you, enable - the COMPILE option in gfnttab. I know of no troff that *needs* - COMPILE on. - */ #define HEADERSIZE 0 /* size of header in bytes */ #undef COFF /* systems using COFF headers */ /* What do your CAT codes look like? --- 61,81 ---- the file. I personally know of no machine that supports these. - If neither are defined, use a BSD/V7 style a.out.h header, this is appropriate for V7 and BSD troffs + - If you are running RISC/Ultrix (Mips box? from DEC) define + ASCIIWIDTHS, and the rest of this stuff will be ignored - Mips + apparently changed their width table format to an ASCII form, + and DEC picked it up. In this case IGNORE any messages about + HEADERSIZE from "make check". + + The headers I write will have something in them if HEADERSIZE > 0 + and there's a font file from your original troff distribution in + /usr/lib/font/ftR (the header and trailer will be copied over). */ #define HEADERSIZE 0 /* size of header in bytes */ #undef COFF /* systems using COFF headers */ + #undef ASCIIWIDTHS /* For RISC/Ultrix */ /* What do your CAT codes look like? *************** *** 373,385 **** #define max(a,b) ((a) > (b) ? (a) : (b)) /* debug flags */ ! #define D_CAT 1 ! #define D_SPEC 2 ! #define D_CHAR 4 ! #define D_FONT 8 ! #define D_BEND 0x10 ! #define D_PK 0x20 ! #define D_VERB 0x40 extern int debug; --- 377,390 ---- #define max(a,b) ((a) > (b) ? (a) : (b)) /* debug flags */ ! #define D_CAT 1 /* show cat interpretation machinery */ ! #define D_SPEC 2 /* show special directives */ ! #define D_CHAR 4 /* optimizer machinery */ ! #define D_FONT 8 /* font handling */ ! #define D_BEND 0x10 /* backend */ ! #define D_PK 0x20 /* PK font handling */ ! #define D_VERB 0x40 /* very verbose */ ! #define D_FLSH 0x80 /* flush after each fprintf */ extern int debug; *** /tmp/PATCHold/./troff2.c Sat Dec 15 00:08:34 1990 --- ./troff2.c Sat Dec 15 00:08:42 1990 *************** *** 15,21 **** #ifndef lint static char SCCSid[] = ! "@(#)troff2.c: 2.2 Copyright 90/08/10 15:15:35 Chris Lewis"; #endif #define ESC 0x80 --- 15,21 ---- #ifndef lint static char SCCSid[] = ! "@(#)troff2.c: 2.3 Copyright 90/12/13 14:55:19 Chris Lewis"; #endif #define ESC 0x80 *************** *** 36,42 **** #endif char ptab[15] = { 7, 8, 10, 11, 12, 14, 18, 9, 6, 16, 20, 22, 24, 28, 36}; ! int points; int xpos, ypos; --- 36,42 ---- #endif char ptab[15] = { 7, 8, 10, 11, 12, 14, 18, 9, 6, 16, 20, 22, 24, 28, 36}; ! int points, font; int xpos, ypos; *************** *** 111,117 **** #endif register int nc, c; register int units; ! register int font, rail, mag, tilt, half, escape, lead; extern int getopt(); extern char *optarg; --- 111,117 ---- #endif register int nc, c; register int units; ! register int rail, mag, tilt, half, escape, lead; extern int getopt(); extern char *optarg; *************** *** 633,638 **** --- 633,644 ---- case 'D': if (be->bedraw) (*be->bedraw)(specXPos, specYPos, string+1); + *string = '\0'; + return; + case 'C': + if (be->beputchar) + (*be->beputchar)(specXPos, specYPos, font, points, 0, + string+1); *string = '\0'; return; case 'E': *** /tmp/PATCHold/./utils.c Sat Dec 15 00:09:11 1990 --- ./utils.c Sat Dec 15 00:09:17 1990 *************** *** 15,23 **** #ifndef lint static char SCCSid[] = ! "@(#)utils.c: 2.3 Copyright 90/10/24 13:37:08 Chris Lewis"; #endif extern struct cattab tabN[], tabS[]; int lastFont, lastPoints; --- 15,39 ---- #ifndef lint static char SCCSid[] = ! "@(#)utils.c: 2.5 Copyright 90/12/14 23:47:08 Chris Lewis"; #endif + #ifndef HEADERSIZE + # ifdef COFF + # include <aouthdr.h> + # include <filehdr.h> + # include <scnhdr.h> + # include <ldfcn.h> + # include <reloc.h> + # define H1 (sizeof (struct filehdr) + sizeof (struct aouthdr)) + # define H2 (sizeof (struct scnhdr) + sizeof (struct reloc)) + # define HEADERSIZE (H1 + H2) + # else + # include <a.out.h> + # define HEADERSIZE (sizeof (struct exec)) + # endif + #endif + extern struct cattab tabN[], tabS[]; int lastFont, lastPoints; *************** *** 394,400 **** --- 410,420 ---- DBP((D_SPEC, "Attempting to read font file %s\n", widthtables)); if (f = fopen(widthtables, "r")) { for (c = 0; c < HEADERSIZE; c++) getc(f); + #ifdef ASCIIWIDTHS + if (widread(p->widthtable, f)) { + #else if (224 != fread(p->widthtable, 1, 224, f)) { + #endif fprintf(stderr, "%s: badly formed width table %s\n", progname, widthtables); free(p->widthtable); *************** *** 411,416 **** --- 431,451 ---- p->widthtable = (char *) 1; } } + + #ifdef ASCIIWIDTHS + widread(widths, f) + char *widths; + FILE *f; { + int v, i; + for (i = 0; i < 224; i++) + if (fscanf(f, "%d", &v) != 1) + return(1); + else + widths[i] = v; + return(0); + } + #endif + #endif #ifdef NULLCHECK *** /tmp/PATCHold/./psroff.S Sat Dec 15 00:09:43 1990 --- ./psroff.S Sat Dec 15 00:09:48 1990 *************** *** 11,17 **** # Author: Chris Lewis # Specs: troff driver # ! #ident "@(#)psroff.sh: 2.2 Copyright 90/10/01 14:41:16 Chris Lewis" LIBDIR="%%LIBDIR%%" FONTDIR="%%FONTDIR%%" --- 11,17 ---- # Author: Chris Lewis # Specs: troff driver # ! #ident "@(#)psroff.sh: 2.3 Copyright 90/12/14 23:59:43 Chris Lewis" LIBDIR="%%LIBDIR%%" FONTDIR="%%FONTDIR%%" *************** *** 56,65 **** --- 56,69 ---- if [ ! -r $file ] then file="$LIBDIR/adapters/tmac.$mac" + else + foundadapter=1 fi if [ ! -r $file ] then file="%%RTMACDIR%%/tmac.$mac" + else + foundadapter=1 fi if [ ! -r $file ] then *************** *** 66,74 **** --- 70,86 ---- echo "$0: Couldn't find tmac.$mac anywhere!" >&2 exit 1 fi + if [ -z "$files" -a -z "$foundadapter" ] + then + files=$LIBDIR/adapters/cmn.pre + fi files="$files $file" ;; -) + if [ -z "$files" -a -z "$foundadapter" ] + then + files=$LIBDIR/adapters/cmn.pre + fi files="$files $i" seenfiles=1 ;; *************** *** 87,92 **** --- 99,108 ---- args="$args $i" ;; *) + if [ -z "$files" -a -z "$foundadapter" ] + then + files=$LIBDIR/adapters/cmn.pre + fi files="$files $i" seenfiles=1 if [ ! -r $i ] *** /tmp/PATCHold/./adapters/Makefile Sat Dec 15 00:10:16 1990 --- ./adapters/Makefile Sat Dec 15 00:10:19 1990 *************** *** 1,4 **** ! # 2.2 90/10/27 ADAPTERS = cmn.post cmn.pre tmac.an tmac.m tmac.s tmac.e MACROS = tmac.t2 --- 1,4 ---- ! # 2.3 90/12/13 ADAPTERS = cmn.post cmn.pre tmac.an tmac.m tmac.s tmac.e MACROS = tmac.t2 *************** *** 15,20 **** install: cd $(LIBDIR)/adapters ; rm -f $(ADAPTERS) ! cp cmn.post cmn.pre tmac.an tmac.m tmac.s $(LIBDIR)/adapters cd $(RTMACDIR) ; rm -f $(MACROS) cp $(MACROS) $(RTMACDIR) --- 15,20 ---- install: cd $(LIBDIR)/adapters ; rm -f $(ADAPTERS) ! cp cmn.post cmn.pre tmac.an tmac.m tmac.s tmac.e $(LIBDIR)/adapters cd $(RTMACDIR) ; rm -f $(MACROS) cp $(MACROS) $(RTMACDIR) *** /tmp/PATCHold/./audit.S Sat Dec 15 00:10:44 1990 --- ./audit.S Sat Dec 15 00:10:49 1990 *************** *** 1,5 **** %%STARTSHELL%% ! # Psroff checking script 2.4 90/08/29 chkinst=false for i do --- 1,5 ---- %%STARTSHELL%% ! # Psroff checking script 2.5 90/12/14 chkinst=false for i do *************** *** 52,57 **** --- 52,65 ---- psrofflib=lib/psrofflib libbase=lib fi + if grep 'define.*ASCIIWIDTHS' defs.h > /dev/null 2>&1 + then + cat <<\! + I see you've defined ASCIIWIDTHS. This means that your trofftype + should be the -F variant. Please ignore the rest of the checking + for trofftype and HEADERSIZE. + ! + fi if [ ! -r $psrofflib ] then *************** *** 136,141 **** --- 144,153 ---- echo " This means that you'll have to put all of your" echo " width files directly in $FONTDIR, and you'll not" echo " be able to support multiple sets of width tables" + echo " The OTHER possibility is that you're running" + echo " RISC/Ultrix who's troff cannot even read their" + echo " own width tables! In this case, -F is probably" + echo " the correct form" workingtype=" " ;; esac *************** *** 150,155 **** --- 162,169 ---- echo " It's giving me non-zero return codes when I try" echo " all of the known different ways of setting width table" echo " directory (including none!). Egads. Get Help!!!!!!!" + echo " (One possibility is that you have ditroff which doesn't" + echo " understand -t and will not work with psroff)" exit 1 fi -- Chris Lewis, Phone: (613) 832-0541 UUCP: uunet!utai!lsuc!ecicrl!clewis Moderator of the Ferret Mailing List (ferret-request@eci386) Psroff mailing list (psroff-request@eci386)