home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2318 < prev    next >
Internet Message Format  |  1990-12-28  |  34KB

  1. From: clewis@ecicrl.UUCP (Chris Lewis)
  2. Newsgroups: comp.text,comp.lang.postscript,comp.sources.bugs,alt.sources
  3. Subject: Psroff 2.0 Patch 6 (Supports RISC Ultrix!)
  4. Message-ID: <1005@ecicrl.UUCP>
  5. Date: 15 Dec 90 05:38:34 GMT
  6.  
  7. Archive-name: psroff2.0/patch.06
  8. Submitted-by: clewis@ecicrl.uucp (Chris Lewis)
  9.  
  10.     This is official patch 06 for Psroff 2.0.
  11.     Please apply it by:
  12.     cd <psroff source directory>
  13.     patch -N -p < <this file>
  14.     Then, rebuild and reinstall.
  15.  
  16. Psroff now supports DEC's RISC/Ultrix unique, one-of-a-kind, undocumented
  17. and unsupported troff.
  18.  
  19. The most important change is the support for RISC/Ultrix systems which
  20. have a ASCII format for width tables (ASCIIWIDTHS in defs.h).  See
  21. the README for more details.
  22.  
  23. Second, if ASCIIWIDTHS undef'd and HEADERSIZE > 0, the width tables will be
  24. created with a copy of the header and trailer found in /usr/lib/font/ftR
  25. (just in case).  The only other functionality change is that in psroff -
  26. until now if specified a macro package for which there was no adapter
  27. file in LIBDIR/adapters, or specified no macros at all, troff wasn't
  28. told to reload the width tables and define ".fp" etc.  Does now.
  29.  
  30. Thank Russ Evans (e_gs18@va.nmh.ac.uk) for helping me bash away at
  31. getting RISC/Ultrix stuff going.
  32.  
  33. ./TROUBLE        comments re: ASCIIWIDTHS
  34. ./man/troff2ps.1.S    poor english...
  35. ./lib/psrofflib.S    comments re: ASCIIWIDTHS
  36. ./README        ditto, some english fixes, comment regarding HPLJ III.
  37. ./debug.c        redundant code removal
  38. ./widths/Makefile    bug fixes.
  39. ./widths/dit2catwid.c    ASCIIWIDTHS
  40. ./utils/dumpft.c    ASCIIWIDTHS
  41. ./defs.h        ASCIIWIDTHS
  42. ./troff2.c        Experimental method of emitting new characters.
  43. ./utils.c        ASCIIWIDTHS (for optimizer)
  44. ./psroff.S        include cmn.pre even if no macro package specified
  45. ./adapters/Makefile    forgot to install tmac.e (whoops)
  46. ./audit.S        comments regarding ASCIIWIDTHS
  47.  
  48. *** /tmp/PATCHold/./TROUBLE    Sat Dec 15 00:02:05 1990
  49. --- ./TROUBLE    Sat Dec 15 00:02:10 1990
  50. ***************
  51. *** 1,4 ****
  52. !         Psroff 2.0 Trouble Shooting.... 2.2 90/10/30
  53.   
  54.           (psroff 1.0 users can use this to a certain extent)
  55.   
  56. --- 1,4 ----
  57. !         Psroff 2.0 Trouble Shooting.... 2.3 90/12/14
  58.   
  59.           (psroff 1.0 users can use this to a certain extent)
  60.   
  61. ***************
  62. *** 59,65 ****
  63.         of your original troff installation.  Is ftR 224 bytes long?
  64.         If so, HEADERSIZE should be zero.  If not (eg: Ultrix, possibly
  65.         older BSD's, some older Xenix, V7), you will have to specify
  66. !       HEADERSIZE.  Ultrix wants 32.  (should be the size of an
  67.         a.out header structure - od -c may give you some hints).
  68.         Another way to tell is to run "file" on /usr/lib/font/ftR.
  69.         Does it say "data"?  Then it probably needs HEADERSIZE 0.
  70. --- 59,65 ----
  71.         of your original troff installation.  Is ftR 224 bytes long?
  72.         If so, HEADERSIZE should be zero.  If not (eg: Ultrix, possibly
  73.         older BSD's, some older Xenix, V7), you will have to specify
  74. !       HEADERSIZE.  VAX/Ultrix wants 32.  (should be the size of an
  75.         a.out header structure - od -c may give you some hints).
  76.         Another way to tell is to run "file" on /usr/lib/font/ftR.
  77.         Does it say "data"?  Then it probably needs HEADERSIZE 0.
  78. ***************
  79. *** 71,76 ****
  80. --- 71,82 ----
  81.         really needs this, but this is a way of getting the size
  82.         right without having to guess/write a program to find the
  83.         a.out.h size.
  84. +       RISC/Ultrix uses an ASCII format width table.  You can
  85. +       tell this if the following command:
  86. +         echo ".fp 1 R" | troff -t > /dev/null
  87. +       says something about non-ascii /usr/lib/font/ftR.  If
  88. +       it does, define ASCIIWIDTHS.
  89.   
  90.   NOTE for PSROFF 1.0 users:
  91.   
  92. *** /tmp/PATCHold/./man/troff2ps.1.S    Sat Dec 15 00:02:53 1990
  93. --- ./man/troff2ps.1.S    Sat Dec 15 00:03:00 1990
  94. ***************
  95. *** 1,4 ****
  96. ! .\"Copyright 1988 by Chris Lewis 2.2 90/10/24
  97.   .TH TROFF2PS 1 local
  98.   .SH NAME
  99.   troff2ps, troff2lj, troff2xx \- convert troff output to Postscript, HP etc.
  100. --- 1,4 ----
  101. ! .\"Copyright 1988 by Chris Lewis 2.4 90/12/04
  102.   .TH TROFF2PS 1 local
  103.   .SH NAME
  104.   troff2ps, troff2lj, troff2xx \- convert troff output to Postscript, HP etc.
  105. ***************
  106. *** 119,125 ****
  107.   .B -Z
  108.   and
  109.   .B -W
  110. ! options controller the optimizer.
  111.   If the
  112.   .B -Z
  113.   option is specified, the backends attempt to coalesce strings of
  114. --- 119,125 ----
  115.   .B -Z
  116.   and
  117.   .B -W
  118. ! options control the optimizer.
  119.   If the
  120.   .B -Z
  121.   option is specified, the backends attempt to coalesce strings of
  122. ***************
  123. *** 297,303 ****
  124.   etc.
  125.   .SH BUGS
  126.   Due to the nature by which special sequences are transmitted by
  127. ! troff (stderr, forced into stdin by
  128.   .IR psroff ),
  129.   normal troff errors will not be seen and may generate a few
  130.   "invalid opcode" messages from troff2ps or garble on output.
  131. --- 297,304 ----
  132.   etc.
  133.   .SH BUGS
  134.   Due to the nature by which special sequences are transmitted by
  135. ! troff (troff's stderr is merged with its stdout and is piped into
  136. ! troff2ps's stdin by
  137.   .IR psroff ),
  138.   normal troff errors will not be seen and may generate a few
  139.   "invalid opcode" messages from troff2ps or garble on output.
  140. ***************
  141. *** 304,310 ****
  142.   Normally the document will be truncated if this occurs.
  143.   If this happens, run
  144.   .I psroff
  145. ! with the ``-F'' option.
  146.   .P
  147.   Unfortunately, there is no way at present for the ".sR" macro to
  148.   change fonts within a line - for some pretty bizarre reasons if you ask
  149. --- 305,312 ----
  150.   Normally the document will be truncated if this occurs.
  151.   If this happens, run
  152.   .I psroff
  153. ! with the ``-F'' option which will show you troff's stderr without
  154. ! generating any output.
  155.   .P
  156.   Unfortunately, there is no way at present for the ".sR" macro to
  157.   change fonts within a line - for some pretty bizarre reasons if you ask
  158. *** /tmp/PATCHold/./lib/psrofflib.S    Sat Dec 15 00:03:41 1990
  159. --- ./lib/psrofflib.S    Sat Dec 15 00:03:44 1990
  160. ***************
  161. *** 1,4 ****
  162. ! #    2.2 90/08/10
  163.   #    This file controls psroff, you can insert additional printer
  164.   #    types here.  These are eval'd *late* in processing, so that
  165.   #    you can insert $copies etc.
  166. --- 1,4 ----
  167. ! #    2.4 90/12/14
  168.   #    This file controls psroff, you can insert additional printer
  169.   #    types here.  These are eval'd *late* in processing, so that
  170.   #    you can insert $copies etc.
  171. ***************
  172. *** 55,67 ****
  173.   
  174.   troff=''
  175.   trofftype='-T$width'
  176.   #    Uncomment the following if you're a Sun or Ultrix -F troff.
  177.   #    Check your manual pages.  (Though some support -F without mentioning
  178. ! #    it in their manual pages).  The default is "-T" (Xenix and some others)
  179.   #trofftype='-F%%FONTDIR%%/$width/ftXX'
  180.   
  181.   #    psroff generating postscript directly.
  182.   ps    width=ps t2arg=-Tps lparg='| $LIBDIR/psxlate | rlp -d$ptr -n$copies'
  183.   ps    ptr='gate!AppleLaser'
  184.   #    Example optimizer entry.
  185. --- 55,73 ----
  186.   
  187.   troff=''
  188.   trofftype='-T$width'
  189.   #    Uncomment the following if you're a Sun or Ultrix -F troff.
  190.   #    Check your manual pages.  (Though some support -F without mentioning
  191. ! #    it in their manual pages).  The default is "-T" (Xenix and a few others)
  192. ! #    Most BSD-derived troffs use -F, including those needing ASCIIWIDTHS
  193. ! #    turned on.
  194.   #trofftype='-F%%FONTDIR%%/$width/ftXX'
  195.   
  196.   #    psroff generating postscript directly.
  197. + #    The clause "| $LIBDIR/psxlate" is there only to reverse the pages
  198. + #    for some Postscript printers (eg: the ones that print the first
  199. + #    page face up and then drop the second page face up on top of the
  200. + #    first), most more recent Postscript printers don't need this so
  201. + #    you can remove the psxlate call alltogether.
  202.   ps    width=ps t2arg=-Tps lparg='| $LIBDIR/psxlate | rlp -d$ptr -n$copies'
  203.   ps    ptr='gate!AppleLaser'
  204.   #    Example optimizer entry.
  205. ***************
  206. *** 72,78 ****
  207.   tps    lparg='| $LIBDIR/psxlate | rlp -d$ptr -n$copies' ptr='gate!AppleLaser'
  208.   
  209.   #    System V'ish LJ printing to printer called laser.
  210. ! #    (Does your lp filter script support -og? (8 bit, no filtering))
  211.   
  212.   lj    width=lj t2arg=-Tlj lparg='| lp -d$ptr -og -n$copies' ptr=laser
  213.   
  214. --- 78,84 ----
  215.   tps    lparg='| $LIBDIR/psxlate | rlp -d$ptr -n$copies' ptr='gate!AppleLaser'
  216.   
  217.   #    System V'ish LJ printing to printer called laser.
  218. ! #    (Your lp filter script should support -og (8 bit, no filtering))
  219.   
  220.   lj    width=lj t2arg=-Tlj lparg='| lp -d$ptr -og -n$copies' ptr=laser
  221.   
  222. *** /tmp/PATCHold/./README    Sat Dec 15 00:04:18 1990
  223. --- ./README    Sat Dec 15 00:04:26 1990
  224. ***************
  225. *** 1,4 ****
  226. !         PSROFF RELEASE 2.0 PL5 README 2.3 90/11/16
  227.   
  228.               May 14, 1990
  229.               Chris Lewis
  230. --- 1,4 ----
  231. !         PSROFF RELEASE 2.0 PL5 README 2.4 90/12/14
  232.   
  233.               May 14, 1990
  234.               Chris Lewis
  235. ***************
  236. *** 362,367 ****
  237. --- 362,381 ----
  238.         In any event, if you have problems and wish to ask me for help,
  239.         I will be requiring that you mail me a copy of the output
  240.         of "make check".
  241. +       
  242. +       If you're running on RISC Ultrix ignore any HEADERSIZE or
  243. +       trofftype messages.  The reason for this is that RISC
  244. +       Ultrix comes with width tables that cannot be read
  245. +       by the RISC Ultrix troff, and make check will be fooled.
  246. +       define ASCIIWIDTHS in defs.h in this case.  trofftype
  247. +       in psrofflib should be the -F variant in this case.
  248. +       Psroff builds width table files that *can* be used by
  249. +       RISC/Ultrix troff.  You can tell if you need ASCIIWIDTHS
  250. +       defined if:
  251. +         echo ".fp 1 R" | troff -t > /dev/null
  252. +       says something nasty about non-numeric character in file,
  253. +       "may be non-ASCII".
  254.   
  255.       - type "make unpackljfonts"  This will uudecode the font
  256.         files I've supplied and remove the .UU files.  This
  257. ***************
  258. *** 394,401 ****
  259.         pertain to you.  Take special note of HEADERSIZE.  Take a look
  260.         at /usr/lib/font/ftR.  Is it 224 bytes long?  If so, HEADERSIZE
  261.         should be 0.  Otherwise you will probably have to set it to the
  262. !       size of your a.out.h structure.  Ultrix and Sun appear to always
  263. !       be HEADERSIZE = 32.
  264.   
  265.         With Laserjet driving:
  266.   
  267. --- 408,415 ----
  268.         pertain to you.  Take special note of HEADERSIZE.  Take a look
  269.         at /usr/lib/font/ftR.  Is it 224 bytes long?  If so, HEADERSIZE
  270.         should be 0.  Otherwise you will probably have to set it to the
  271. !       size of your a.out.h structure.  VAX Ultrix and Sun appear to always
  272. !       be HEADERSIZE = 32.  See remark about RISC Ultrix above.
  273.   
  274.         With Laserjet driving:
  275.   
  276. ***************
  277. *** 440,449 ****
  278.         check out your troff manual page!  Suns and Ultrix want
  279.         trofftype='-F/usr/lib/font/$width/ftXX'.
  280.   
  281. !     - If you're going to be driving HP Laserjets:
  282.   
  283. !       If you have PK fonts from TeX, ensure that PKFONTS is set
  284. !       reasonably in the Makefile.  type:
  285.   
  286.           make buildljfonts
  287.   
  288. --- 454,467 ----
  289.         check out your troff manual page!  Suns and Ultrix want
  290.         trofftype='-F/usr/lib/font/$width/ftXX'.
  291.   
  292. !     - If you're going to be driving HP Laserjets without a Postscript
  293. !       cartridge:
  294.   
  295. !       If you have an HPLJ III, mark in lj.fonts all of the fonts
  296. !       as built-in, you don't need to build any fonts.
  297. !       Otherwise, If you have PK fonts from TeX, ensure that PKFONTS
  298. !       is set reasonably in the Makefile.  type:    
  299.   
  300.           make buildljfonts
  301.   
  302. *** /tmp/PATCHold/./debug.c    Sat Dec 15 00:05:12 1990
  303. --- ./debug.c    Sat Dec 15 00:05:16 1990
  304. ***************
  305. *** 2,22 ****
  306.   
  307.   #ifndef    lint
  308.   static char SCCSid[] =
  309. !     "@(#)debug.c: 2.4 Copyright 90/10/22 14:53:06 Chris Lewis";
  310.   #endif
  311.   
  312.   #ifdef    DEBUG
  313.   
  314.   int debug = 0;
  315. - #define    D_CAT    1
  316. - #define    D_SPEC    2
  317. - #define    D_CHAR    4
  318. - #define    D_FONT    8
  319. - #define    D_BEND    0x10
  320. - #define    D_PK    0x20
  321. - #define    D_VERB    0x40
  322. - #define    D_FLSH    0x80
  323.   
  324.   struct dbm {
  325.       char req;
  326. --- 2,13 ----
  327.   
  328.   #ifndef    lint
  329.   static char SCCSid[] =
  330. !     "@(#)debug.c: 2.5 Copyright 90/12/04 09:27:38 Chris Lewis";
  331.   #endif
  332.   
  333.   #ifdef    DEBUG
  334.   
  335.   int debug = 0;
  336.   
  337.   struct dbm {
  338.       char req;
  339. *** /tmp/PATCHold/./widths/Makefile    Sat Dec 15 00:05:43 1990
  340. --- ./widths/Makefile    Sat Dec 15 00:05:47 1990
  341. ***************
  342. *** 1,4 ****
  343. ! #2.4 90/08/08
  344.   SCRIPTS    = gfnttab
  345.   TD    = testdir
  346.   PSW    = \
  347. --- 1,4 ----
  348. ! #2.6 90/12/13
  349.   SCRIPTS    = gfnttab
  350.   TD    = testdir
  351.   PSW    = \
  352. ***************
  353. *** 219,225 ****
  354. --- 219,227 ----
  355.   
  356.   test:    dit2catwid $(SCRIPTS)
  357.       test -d $(TD) || mkdir $(TD)
  358. +     rm -f $(TD)/*
  359.       cp widthps/S $(TD)/S
  360. +     chmod +w $(TD)/S
  361.       sed -e '1,/charset/d' widthps/S2 >> $(TD)/S
  362.       ./dit2catwid -v $(TD)/S widthps/R $(TD)/ftR > $(TD)/ftR.nout
  363.       @echo "Comparing $(TD)/ftR and $(FONTDIR)/ps/ftR"
  364. ***************
  365. *** 235,240 ****
  366. --- 237,243 ----
  367.       rm -f gfnttab.log pk2dit.log pk2sep.log pk2dit.err pk2sep.err
  368.   
  369.   dit2catwid.o:    ../defs.h
  370. +     $(CC) -c $(CFLAGS) '-DFONTDIR="$(FONTDIR)"' dit2catwid.c
  371.   
  372.   ../cattab.o:    ../defs.h
  373.       @echo "cattab.o is out of date, please run make troff2ps in top level first"
  374. *** /tmp/PATCHold/./widths/dit2catwid.c    Sat Dec 15 00:06:21 1990
  375. --- ./widths/dit2catwid.c    Sat Dec 15 00:06:29 1990
  376. ***************
  377. *** 1,4 ****
  378. ! /*    Copyright 1985, 1986, 1987, 1988 16:47:45 Chris Lewis
  379.           All Rights Reserved
  380.   
  381.       Permission to copy and further distribute is freely given provided
  382. --- 1,4 ----
  383. ! /*    Copyright 1985, 1986, 1987, 1988 23:47:50 Chris Lewis
  384.           All Rights Reserved
  385.   
  386.       Permission to copy and further distribute is freely given provided
  387. ***************
  388. *** 13,19 ****
  389.   
  390.   #ifndef    lint
  391.   static char SCCSID[] =
  392. !     "@(#)dit2catwid.c 2.1 Copyright 90/07/18 16:47:45 Chris Lewis";
  393.   #endif
  394.   
  395.   #include <stdio.h>
  396. --- 13,19 ----
  397.   
  398.   #ifndef    lint
  399.   static char SCCSID[] =
  400. !     "@(#)dit2catwid.c 2.4 Copyright 90/12/14 23:47:50 Chris Lewis";
  401.   #endif
  402.   
  403.   #include <stdio.h>
  404. ***************
  405. *** 20,25 ****
  406. --- 20,31 ----
  407.   #include "../defs.h"
  408.   #include <ctype.h>
  409.   
  410. + #ifndef    ASCIIWIDTHS
  411. + #ifndef    FONTDIR
  412. + #define    FONTDIR    "/usr/lib/font"
  413. + #endif
  414.   #ifndef    HEADERSIZE
  415.   #    ifdef COFF
  416.   #        include <aouthdr.h>
  417. ***************
  418. *** 36,46 ****
  419. --- 42,55 ----
  420.   #    endif
  421.   #endif
  422.   
  423. + #endif
  424.   int res = 300;
  425.   int unitwid = 10;
  426.   int symfont = 0;
  427.   int verbose = 0;
  428.   int genc = 0;
  429. + int headersize = -1;
  430.   
  431.   #define    TROFFUWID    6
  432.   
  433. ***************
  434. *** 65,76 ****
  435.   
  436.       progname = argv[0];
  437.   
  438. !     while ((c = getopt(argc, argv, "vsr:u:ch")) != EOF)
  439.       switch(c) {
  440.           case 'h':
  441.           printf("%d\n", HEADERSIZE);
  442.           exit(0);
  443.           break;
  444.           case 's':
  445.           symfont = 1;
  446.           break;
  447. --- 74,92 ----
  448.   
  449.       progname = argv[0];
  450.   
  451. !     while ((c = getopt(argc, argv, "vsr:u:chH:")) != EOF)
  452.       switch(c) {
  453.           case 'h':
  454. + #ifdef    ASCIIWIDTHS
  455. +         printf("ascii\n");
  456. + #else
  457.           printf("%d\n", HEADERSIZE);
  458. + #endif
  459.           exit(0);
  460.           break;
  461. +         case 'H':
  462. +         headersize = atoi(optarg);
  463. +         break;
  464.           case 's':
  465.           symfont = 1;
  466.           break;
  467. ***************
  468. *** 186,199 ****
  469.   struct cattab *symset;
  470.   char *type, *file; {
  471.       int i, j;
  472. !     /* This simply prepends HEADERSIZE bytes to the font width file.
  473. !        This may not be adequate for some troffs, in that some of the
  474. !        fields in the appropriate object headers have to be filled in.
  475. !        If this is a problem, use dit2catwid -c and compile it manually.
  476.       */
  477.   
  478. !     for (i = 0; i < HEADERSIZE; i++)
  479. !     fputc('\0', f);
  480.   
  481.       for (i = 0, j = 0; i < 224; i++) {
  482.   
  483. --- 202,243 ----
  484.   struct cattab *symset;
  485.   char *type, *file; {
  486.       int i, j;
  487. ! #ifdef    ASCIIWIDTHS
  488. ! #define    EMITWID(v,f)    fprintf(f, "%d\n", v)
  489. ! #else
  490. ! #define    EMITWID(v,f)    fputc(v, f)
  491. !     FILE *of = (FILE *) NULL;
  492. !     /* If headersize != 0 AND there's a FONTDIR/ftR, output
  493. !        the first headersize bytes of it, then the new width table,
  494. !        then the trailing bytes of FONTDIR/ftR.  If there's
  495. !        no FONTDIR/ftR, we just prepend headersize 0's.
  496. !        The reason for this is that some troff's insist on valid
  497. !        headers.
  498.       */
  499.   
  500. !     if (headersize == -1)
  501. !     headersize = HEADERSIZE;
  502. !     if (headersize != 0) {
  503. !     char buf[128];
  504. !     sprintf(buf, "%s/%s", FONTDIR, "ftR");
  505. !     if (of = fopen(buf, "r")) {
  506. !         for (i = 0; i < headersize; i++)
  507. !         fputc(fgetc(of), f);
  508. !         for (i = 0; i < 224; i++)
  509. !         fgetc(of);
  510. !         if (feof(of)) {
  511. !         fclose(of);
  512. !         of = (FILE *) NULL;
  513. !         }
  514. !     } else {
  515. !         for (i = 0; i < headersize; i++)
  516. !         fputc('\0', f);
  517. !     }
  518. !     }
  519. ! #endif
  520.   
  521.       for (i = 0, j = 0; i < 224; i++) {
  522.   
  523. ***************
  524. *** 203,209 ****
  525.   
  526.       /* not the right position yet */
  527.       if (!symset[j].ch_name || i < symset[j].ch_wididx) {
  528. !         fputc('\0', f);
  529.           continue;
  530.       }
  531.   
  532. --- 247,253 ----
  533.   
  534.       /* not the right position yet */
  535.       if (!symset[j].ch_name || i < symset[j].ch_wididx) {
  536. !         EMITWID('\0', f);
  537.           continue;
  538.       }
  539.   
  540. ***************
  541. *** 216,226 ****
  542.       if (!(symset[j].ch_info&0x3f)) {
  543.           printf("INFO: No width for %s (index %d, file %s)\n",
  544.           symset[j].ch_name, symset[j].ch_wididx, file);
  545. !         fputc(symset[0].ch_info, f);
  546.       } else
  547. !         fputc(symset[j].ch_info, f);
  548.       j++;
  549.       }
  550.   
  551.       dumpset(symset, "After CAT dump");
  552.   
  553. --- 260,278 ----
  554.       if (!(symset[j].ch_info&0x3f)) {
  555.           printf("INFO: No width for %s (index %d, file %s)\n",
  556.           symset[j].ch_name, symset[j].ch_wididx, file);
  557. !         EMITWID(symset[0].ch_info, f);
  558.       } else
  559. !         EMITWID(symset[j].ch_info, f);
  560.       j++;
  561.       }
  562. + #ifndef    ASCIIWIDTHS
  563. +     if (of) {
  564. +     while((i = fgetc(of)) != EOF)
  565. +         fputc(i, f);
  566. +     fclose(of);
  567. +     }
  568. + #endif
  569.   
  570.       dumpset(symset, "After CAT dump");
  571.   
  572. *** /tmp/PATCHold/./utils/dumpft.c    Sat Dec 15 00:07:24 1990
  573. --- ./utils/dumpft.c    Sat Dec 15 00:07:28 1990
  574. ***************
  575. *** 1,4 ****
  576. ! /*    Copyright 1985, 1986, 1987, 1988 16:50:16 Chris Lewis
  577.           All Rights Reserved
  578.   
  579.       Permission to copy and further distribute is freely given provided
  580. --- 1,4 ----
  581. ! /*    Copyright 1985, 1986, 1987, 1988 00:00:11 Chris Lewis
  582.           All Rights Reserved
  583.   
  584.       Permission to copy and further distribute is freely given provided
  585. ***************
  586. *** 13,19 ****
  587.   
  588.   #ifndef    lint
  589.   static char SCCSID[] =
  590. !     "@(#)dumpft.c 2.1 Copyright 90/07/18 16:50:16 Chris Lewis";
  591.   #endif
  592.   
  593.   #include "../defs.h"
  594. --- 13,19 ----
  595.   
  596.   #ifndef    lint
  597.   static char SCCSID[] =
  598. !     "@(#)dumpft.c 2.6 Copyright 90/12/15 00:00:11 Chris Lewis";
  599.   #endif
  600.   
  601.   #include "../defs.h"
  602. ***************
  603. *** 20,26 ****
  604.   #define    NUMPER    8
  605.   #define    WPER    54
  606.   int dotab = 0;
  607. ! struct cattab tabN[], tabS[];
  608.   #ifdef    HEADERSIZE
  609.   int skip = HEADERSIZE;
  610.   #else
  611. --- 20,27 ----
  612.   #define    NUMPER    8
  613.   #define    WPER    54
  614.   int dotab = 0;
  615. ! extern struct cattab tabN[], tabS[];
  616. ! #ifndef    ASCIIWIDTHS
  617.   #ifdef    HEADERSIZE
  618.   int skip = HEADERSIZE;
  619.   #else
  620. ***************
  621. *** 42,47 ****
  622. --- 43,50 ----
  623.   #endif
  624.   int skip = HEADERSIZE;
  625.   #endif
  626. + #endif
  627. + int guessflag, verbose;
  628.   
  629.   double ditres = 1;
  630.   
  631. ***************
  632. *** 48,60 ****
  633.   main(argc, argv)
  634.   int argc; char **argv; {
  635.       register int i;
  636. !     register int j, c;
  637.       register int k;
  638.       extern int getopt();
  639.       extern char *optarg;
  640.       int found;
  641.       struct cattab *ct = tabN;
  642. !     while((c = getopt(argc, argv, "dstwfh:")) != EOF) {
  643.       switch(c) {
  644.           case 'd':
  645.           ditres = (double) 300 / 432 * (double) 10 / 6;
  646. --- 51,64 ----
  647.   main(argc, argv)
  648.   int argc; char **argv; {
  649.       register int i;
  650. !     register int j;
  651. !     int c;
  652.       register int k;
  653.       extern int getopt();
  654.       extern char *optarg;
  655.       int found;
  656.       struct cattab *ct = tabN;
  657. !     while((c = getopt(argc, argv, "vgdstwfh:")) != EOF) {
  658.       switch(c) {
  659.           case 'd':
  660.           ditres = (double) 300 / 432 * (double) 10 / 6;
  661. ***************
  662. *** 62,67 ****
  663. --- 66,77 ----
  664.           case 's':
  665.           ct = tabS;
  666.           break;
  667. +         case 'g':
  668. +         guessflag = 1;
  669. +         break;
  670. +         case 'v':
  671. +         verbose = 1;
  672. +         break;
  673.           case 't':
  674.           dotab = 1;
  675.           break;
  676. ***************
  677. *** 71,93 ****
  678.           case 'f':
  679.           dumpexamples();
  680.           exit(0);
  681.           case 'h':
  682.           skip = atoi(optarg);
  683.           fprintf(stderr, "skip: %d\n", skip);
  684.           break;
  685.           case '?':
  686.           fprintf(stderr,
  687. !         "usage: dumpft [-s][-f][-t][-w][-hheadersize] < cat width file\n");
  688.           exit(1);
  689.       }
  690.       }
  691.   
  692.       for (i = 0; i < skip; i++)
  693.       c = getchar();
  694.       k = 0;
  695.       for (i = 0; i < 224; i++) {
  696.       found = 0;
  697.       c = getchar();
  698.       for (j = 0; ct[j].ch_name; j++) {
  699.           if (!ct[j].ch_name[0])
  700.           continue;
  701. --- 81,116 ----
  702.           case 'f':
  703.           dumpexamples();
  704.           exit(0);
  705. + #ifndef    ASCIIWIDTHS
  706.           case 'h':
  707.           skip = atoi(optarg);
  708.           fprintf(stderr, "skip: %d\n", skip);
  709.           break;
  710. + #endif
  711.           case '?':
  712.           fprintf(stderr,
  713. !             "usage: dumpft [-v][-g][-s][-f][-t][-w][-hheadersize]%s\n",
  714. !             " < cat width table\n");
  715.           exit(1);
  716.       }
  717.       }
  718. +     if (guessflag) {
  719. +     guess();
  720. +     exit(0);
  721. +     }
  722.   
  723. + #ifndef    ASCIIWIDTHS
  724.       for (i = 0; i < skip; i++)
  725.       c = getchar();
  726. + #endif
  727.       k = 0;
  728.       for (i = 0; i < 224; i++) {
  729.       found = 0;
  730. + #ifdef    ASCIIWIDTHS
  731. +     scanf("%d", &c);
  732. + #else
  733.       c = getchar();
  734. + #endif
  735.       for (j = 0; ct[j].ch_name; j++) {
  736.           if (!ct[j].ch_name[0])
  737.           continue;
  738. ***************
  739. *** 134,140 ****
  740.               break;
  741.               case 0:
  742.               if (i == 0) {
  743. !                 printf("spacewidth %d\n", c&0xf);
  744.                   printf("charset\n");
  745.               } else
  746.                   printf("%s\t%d\t%d\n", ct[j].ch_name,
  747. --- 157,164 ----
  748.               break;
  749.               case 0:
  750.               if (i == 0) {
  751. !                 printf("spacewidth %d\n", (int) ((c&0x3f) *
  752. !                 ditres + .5));
  753.                   printf("charset\n");
  754.               } else
  755.                   printf("%s\t%d\t%d\n", ct[j].ch_name,
  756. ***************
  757. *** 153,163 ****
  758.       switch(dotab) {
  759.       case 0:
  760.           for (i = 0; ct[i].ch_name; i++)
  761. !         if (ct[i].ch_name[0] && !ct[i].ch_info)
  762.               fprintf(stderr, "Table problem - no width for '%s' (%d)",
  763.               ct[i].ch_name, i);
  764.               fprintf(stderr, ", wididx: %d, catidx: %d\n",
  765.               ct[i].ch_wididx, ct[i].ch_catidx);
  766.           break;
  767.       case 1:
  768.           if (k % NUMPER != 0)
  769. --- 177,188 ----
  770.       switch(dotab) {
  771.       case 0:
  772.           for (i = 0; ct[i].ch_name; i++)
  773. !         if (ct[i].ch_name[0] && !ct[i].ch_info) {
  774.               fprintf(stderr, "Table problem - no width for '%s' (%d)",
  775.               ct[i].ch_name, i);
  776.               fprintf(stderr, ", wididx: %d, catidx: %d\n",
  777.               ct[i].ch_wididx, ct[i].ch_catidx);
  778. +         }
  779.           break;
  780.       case 1:
  781.           if (k % NUMPER != 0)
  782. ***************
  783. *** 251,254 ****
  784. --- 276,306 ----
  785.           printf("\n.br\n");
  786.       }
  787.       printf("\n");
  788. + }
  789. + guess() {
  790. +     char buffer[2048];
  791. +     int filesize, errcnt, i, g;
  792. +     filesize = fread(buffer, sizeof(char), sizeof(buffer), stdin);
  793. +     for(g = 0; g <= filesize - 224; g++) {
  794. +     errcnt = 0;
  795. +     for (i = 0; tabN[i].ch_name; i++) {
  796. +         if (tabN[i].ch_wididx == -1)
  797. +         continue;
  798. +         if (tabN[i].ch_name[0] && !buffer[g+tabN[i].ch_wididx]) {
  799. +         if (verbose) {
  800. +             printf("Table problem - no width for '%s' (%d)",
  801. +             tabN[i].ch_name, i);
  802. +             printf(", wididx: %d, catidx: %d\n",
  803. +             tabN[i].ch_wididx, tabN[i].ch_catidx);
  804. +         }
  805. +         errcnt++;
  806. +         }
  807. +     }
  808. +     if (verbose)
  809. +         printf("Guess: %d, errcnt %d\n", g, errcnt);
  810. +     if (errcnt)
  811. +         continue;
  812. +     printf("Guess %d\n", g);
  813. +     }
  814.   }
  815. *** /tmp/PATCHold/./defs.h    Sat Dec 15 00:07:56 1990
  816. --- ./defs.h    Sat Dec 15 00:08:02 1990
  817. ***************
  818. *** 1,4 ****
  819. ! /*    Copyright 1988, 1989 23:13:57 Chris Lewis
  820.           All Rights Reserved
  821.   
  822.       Permission to copy and further distribute is freely given provided
  823. --- 1,4 ----
  824. ! /*    Copyright 1988, 1989 23:46:55 Chris Lewis
  825.           All Rights Reserved
  826.   
  827.       Permission to copy and further distribute is freely given provided
  828. ***************
  829. *** 6,18 ****
  830.       sold for profit.
  831.   
  832.       Project:    Generic Troff drivers
  833. !     Module:        defs.h 2.10 90/11/16 23:13:57
  834.       Author:     Chris Lewis
  835.       Specs:        Main header file - contains some customization
  836.    */
  837.   
  838.   /*    Official Release and Patch level:    */
  839. ! #define    T2VERSION    "@(#)PSROFF Copyright 90/11/16 Chris Lewis - R2 P5"
  840.   
  841.   #ifndef    LIBDIR
  842.   /*    Don't touch this */
  843. --- 6,18 ----
  844.       sold for profit.
  845.   
  846.       Project:    Generic Troff drivers
  847. !     Module:        defs.h 2.12 90/12/14 23:46:55
  848.       Author:     Chris Lewis
  849.       Specs:        Main header file - contains some customization
  850.    */
  851.   
  852.   /*    Official Release and Patch level:    */
  853. ! #define    T2VERSION    "@(#)PSROFF Copyright 90/12/14 Chris Lewis - R2 P6"
  854.   
  855.   #ifndef    LIBDIR
  856.   /*    Don't touch this */
  857. ***************
  858. *** 61,77 ****
  859.         the file.  I personally know of no machine that supports these.
  860.       - If neither are defined, use a BSD/V7 style a.out.h header, this
  861.         is appropriate for V7 and BSD troffs
  862.   
  863. -     The headers I write out do not have anything in them, so some
  864. -     troff's may blow.  Please let me know if they work for you...
  865. -     If you do need the headers, and these doesn't work for you, enable
  866. -     the COMPILE option in gfnttab.  I know of no troff that *needs*
  867. -     COMPILE on.
  868.    */
  869.   
  870.   #define    HEADERSIZE 0    /* size of header in bytes */
  871.   #undef    COFF        /* systems using COFF headers */
  872.   
  873.   /* What do your CAT codes look like?
  874.   
  875. --- 61,81 ----
  876.         the file.  I personally know of no machine that supports these.
  877.       - If neither are defined, use a BSD/V7 style a.out.h header, this
  878.         is appropriate for V7 and BSD troffs
  879. +     - If you are running RISC/Ultrix (Mips box? from DEC) define
  880. +       ASCIIWIDTHS, and the rest of this stuff will be ignored - Mips
  881. +       apparently changed their width table format to an ASCII form,
  882. +       and DEC picked it up.  In this case IGNORE any messages about
  883. +       HEADERSIZE from "make check".
  884. +     The headers I write will have something in them if HEADERSIZE > 0
  885. +     and there's a font file from your original troff distribution in
  886. +     /usr/lib/font/ftR (the header and trailer will be copied over).
  887.   
  888.    */
  889.   
  890.   #define    HEADERSIZE 0    /* size of header in bytes */
  891.   #undef    COFF        /* systems using COFF headers */
  892. + #undef    ASCIIWIDTHS    /* For RISC/Ultrix */
  893.   
  894.   /* What do your CAT codes look like?
  895.   
  896. ***************
  897. *** 373,385 ****
  898.   #define    max(a,b)    ((a) > (b) ? (a) : (b))
  899.   
  900.   /* debug flags */
  901. ! #define    D_CAT    1
  902. ! #define    D_SPEC    2
  903. ! #define    D_CHAR    4
  904. ! #define    D_FONT    8
  905. ! #define    D_BEND    0x10
  906. ! #define    D_PK    0x20
  907. ! #define    D_VERB    0x40
  908.   
  909.   extern int debug;
  910.   
  911. --- 377,390 ----
  912.   #define    max(a,b)    ((a) > (b) ? (a) : (b))
  913.   
  914.   /* debug flags */
  915. ! #define    D_CAT    1    /* show cat interpretation machinery */
  916. ! #define    D_SPEC    2    /* show special directives */
  917. ! #define    D_CHAR    4    /* optimizer machinery */
  918. ! #define    D_FONT    8    /* font handling */
  919. ! #define    D_BEND    0x10    /* backend */
  920. ! #define    D_PK    0x20    /* PK font handling */
  921. ! #define    D_VERB    0x40    /* very verbose */
  922. ! #define    D_FLSH    0x80    /* flush after each fprintf */
  923.   
  924.   extern int debug;
  925.   
  926. *** /tmp/PATCHold/./troff2.c    Sat Dec 15 00:08:34 1990
  927. --- ./troff2.c    Sat Dec 15 00:08:42 1990
  928. ***************
  929. *** 15,21 ****
  930.   
  931.   #ifndef    lint
  932.   static char SCCSid[] =
  933. !     "@(#)troff2.c: 2.2 Copyright 90/08/10 15:15:35 Chris Lewis";
  934.   #endif
  935.   
  936.   #define    ESC    0x80
  937. --- 15,21 ----
  938.   
  939.   #ifndef    lint
  940.   static char SCCSid[] =
  941. !     "@(#)troff2.c: 2.3 Copyright 90/12/13 14:55:19 Chris Lewis";
  942.   #endif
  943.   
  944.   #define    ESC    0x80
  945. ***************
  946. *** 36,42 ****
  947.   #endif
  948.   
  949.   char ptab[15] = { 7, 8, 10, 11, 12, 14, 18, 9, 6, 16, 20, 22, 24, 28, 36};
  950. ! int    points;
  951.   
  952.   int    xpos, ypos;
  953.   
  954. --- 36,42 ----
  955.   #endif
  956.   
  957.   char ptab[15] = { 7, 8, 10, 11, 12, 14, 18, 9, 6, 16, 20, 22, 24, 28, 36};
  958. ! int    points, font;
  959.   
  960.   int    xpos, ypos;
  961.   
  962. ***************
  963. *** 111,117 ****
  964.   #endif
  965.       register int nc, c;
  966.       register int units;
  967. !     register int font, rail, mag, tilt, half, escape, lead;
  968.   
  969.       extern int getopt();
  970.       extern char *optarg;
  971. --- 111,117 ----
  972.   #endif
  973.       register int nc, c;
  974.       register int units;
  975. !     register int rail, mag, tilt, half, escape, lead;
  976.   
  977.       extern int getopt();
  978.       extern char *optarg;
  979. ***************
  980. *** 633,638 ****
  981. --- 633,644 ----
  982.           case 'D':
  983.           if (be->bedraw)
  984.               (*be->bedraw)(specXPos, specYPos, string+1);
  985. +         *string = '\0';
  986. +         return;
  987. +         case 'C':
  988. +         if (be->beputchar)
  989. +             (*be->beputchar)(specXPos, specYPos, font, points, 0,
  990. +             string+1);
  991.           *string = '\0';
  992.           return;
  993.           case 'E':
  994. *** /tmp/PATCHold/./utils.c    Sat Dec 15 00:09:11 1990
  995. --- ./utils.c    Sat Dec 15 00:09:17 1990
  996. ***************
  997. *** 15,23 ****
  998.   
  999.   #ifndef    lint
  1000.   static char SCCSid[] =
  1001. !     "@(#)utils.c: 2.3 Copyright 90/10/24 13:37:08 Chris Lewis";
  1002.   #endif
  1003.   
  1004.   extern struct cattab tabN[], tabS[];
  1005.   
  1006.   int lastFont, lastPoints;
  1007. --- 15,39 ----
  1008.   
  1009.   #ifndef    lint
  1010.   static char SCCSid[] =
  1011. !     "@(#)utils.c: 2.5 Copyright 90/12/14 23:47:08 Chris Lewis";
  1012.   #endif
  1013.   
  1014. + #ifndef    HEADERSIZE
  1015. + #    ifdef COFF
  1016. + #        include <aouthdr.h>
  1017. + #        include <filehdr.h>
  1018. + #        include <scnhdr.h>
  1019. + #        include <ldfcn.h>
  1020. + #        include <reloc.h>
  1021. + #        define H1 (sizeof (struct filehdr) + sizeof (struct aouthdr))
  1022. + #        define H2 (sizeof (struct scnhdr) + sizeof (struct reloc))
  1023. + #        define HEADERSIZE (H1 + H2)
  1024. + #    else
  1025. + #        include <a.out.h>
  1026. + #        define HEADERSIZE (sizeof (struct exec))
  1027. + #    endif
  1028. + #endif
  1029.   extern struct cattab tabN[], tabS[];
  1030.   
  1031.   int lastFont, lastPoints;
  1032. ***************
  1033. *** 394,400 ****
  1034. --- 410,420 ----
  1035.       DBP((D_SPEC, "Attempting to read font file %s\n", widthtables));
  1036.       if (f = fopen(widthtables, "r")) {
  1037.       for (c = 0; c < HEADERSIZE; c++) getc(f);
  1038. + #ifdef    ASCIIWIDTHS
  1039. +     if (widread(p->widthtable, f)) {
  1040. + #else
  1041.       if (224 != fread(p->widthtable, 1, 224, f)) {
  1042. + #endif
  1043.           fprintf(stderr, "%s: badly formed width table %s\n",
  1044.           progname, widthtables);
  1045.           free(p->widthtable);
  1046. ***************
  1047. *** 411,416 ****
  1048. --- 431,451 ----
  1049.       p->widthtable = (char *) 1;
  1050.       }
  1051.   }
  1052. + #ifdef    ASCIIWIDTHS
  1053. + widread(widths, f)
  1054. + char *widths;
  1055. + FILE *f; {
  1056. +     int v, i;
  1057. +     for (i = 0; i < 224; i++)
  1058. +     if (fscanf(f, "%d", &v) != 1)
  1059. +         return(1);
  1060. +     else
  1061. +         widths[i] = v;
  1062. +     return(0);
  1063. + }
  1064. + #endif
  1065.   #endif
  1066.   
  1067.   #ifdef    NULLCHECK
  1068. *** /tmp/PATCHold/./psroff.S    Sat Dec 15 00:09:43 1990
  1069. --- ./psroff.S    Sat Dec 15 00:09:48 1990
  1070. ***************
  1071. *** 11,17 ****
  1072.   #    Author:     Chris Lewis
  1073.   #    Specs:        troff driver
  1074.   #
  1075. ! #ident  "@(#)psroff.sh: 2.2 Copyright 90/10/01 14:41:16 Chris Lewis"
  1076.   
  1077.   LIBDIR="%%LIBDIR%%"
  1078.   FONTDIR="%%FONTDIR%%"
  1079. --- 11,17 ----
  1080.   #    Author:     Chris Lewis
  1081.   #    Specs:        troff driver
  1082.   #
  1083. ! #ident  "@(#)psroff.sh: 2.3 Copyright 90/12/14 23:59:43 Chris Lewis"
  1084.   
  1085.   LIBDIR="%%LIBDIR%%"
  1086.   FONTDIR="%%FONTDIR%%"
  1087. ***************
  1088. *** 56,65 ****
  1089. --- 56,69 ----
  1090.           if [ ! -r $file ]
  1091.           then
  1092.           file="$LIBDIR/adapters/tmac.$mac"
  1093. +         else
  1094. +         foundadapter=1
  1095.           fi
  1096.           if [ ! -r $file ]
  1097.           then
  1098.           file="%%RTMACDIR%%/tmac.$mac"
  1099. +         else
  1100. +         foundadapter=1
  1101.           fi
  1102.           if [ ! -r $file ]
  1103.           then
  1104. ***************
  1105. *** 66,74 ****
  1106. --- 70,86 ----
  1107.           echo "$0: Couldn't find tmac.$mac anywhere!" >&2
  1108.           exit 1
  1109.           fi
  1110. +         if [ -z "$files" -a -z "$foundadapter" ]
  1111. +         then
  1112. +         files=$LIBDIR/adapters/cmn.pre
  1113. +         fi
  1114.           files="$files $file"
  1115.           ;;
  1116.       -)
  1117. +         if [ -z "$files" -a -z "$foundadapter" ]
  1118. +         then
  1119. +         files=$LIBDIR/adapters/cmn.pre
  1120. +         fi
  1121.           files="$files $i"
  1122.           seenfiles=1
  1123.           ;;
  1124. ***************
  1125. *** 87,92 ****
  1126. --- 99,108 ----
  1127.           args="$args $i"
  1128.           ;;
  1129.       *)
  1130. +         if [ -z "$files" -a -z "$foundadapter" ]
  1131. +         then
  1132. +         files=$LIBDIR/adapters/cmn.pre
  1133. +         fi
  1134.           files="$files $i"
  1135.           seenfiles=1
  1136.           if [ ! -r $i ]
  1137. *** /tmp/PATCHold/./adapters/Makefile    Sat Dec 15 00:10:16 1990
  1138. --- ./adapters/Makefile    Sat Dec 15 00:10:19 1990
  1139. ***************
  1140. *** 1,4 ****
  1141. ! # 2.2 90/10/27
  1142.   ADAPTERS    = cmn.post cmn.pre tmac.an tmac.m tmac.s tmac.e
  1143.   MACROS        = tmac.t2
  1144.   
  1145. --- 1,4 ----
  1146. ! # 2.3 90/12/13
  1147.   ADAPTERS    = cmn.post cmn.pre tmac.an tmac.m tmac.s tmac.e
  1148.   MACROS        = tmac.t2
  1149.   
  1150. ***************
  1151. *** 15,20 ****
  1152.   
  1153.   install:
  1154.       cd $(LIBDIR)/adapters ; rm -f $(ADAPTERS)
  1155. !     cp cmn.post cmn.pre tmac.an tmac.m tmac.s $(LIBDIR)/adapters
  1156.       cd $(RTMACDIR) ; rm -f $(MACROS)
  1157.       cp $(MACROS) $(RTMACDIR)
  1158. --- 15,20 ----
  1159.   
  1160.   install:
  1161.       cd $(LIBDIR)/adapters ; rm -f $(ADAPTERS)
  1162. !     cp cmn.post cmn.pre tmac.an tmac.m tmac.s tmac.e $(LIBDIR)/adapters
  1163.       cd $(RTMACDIR) ; rm -f $(MACROS)
  1164.       cp $(MACROS) $(RTMACDIR)
  1165. *** /tmp/PATCHold/./audit.S    Sat Dec 15 00:10:44 1990
  1166. --- ./audit.S    Sat Dec 15 00:10:49 1990
  1167. ***************
  1168. *** 1,5 ****
  1169.   %%STARTSHELL%%
  1170. ! #    Psroff checking script 2.4 90/08/29
  1171.   chkinst=false
  1172.   for i
  1173.   do
  1174. --- 1,5 ----
  1175.   %%STARTSHELL%%
  1176. ! #    Psroff checking script 2.5 90/12/14
  1177.   chkinst=false
  1178.   for i
  1179.   do
  1180. ***************
  1181. *** 52,57 ****
  1182. --- 52,65 ----
  1183.       psrofflib=lib/psrofflib
  1184.       libbase=lib
  1185.   fi
  1186. + if grep 'define.*ASCIIWIDTHS' defs.h > /dev/null 2>&1
  1187. + then
  1188. +     cat <<\!
  1189. + I see you've defined ASCIIWIDTHS.  This means that your trofftype
  1190. + should be the -F variant.  Please ignore the rest of the checking
  1191. + for trofftype and HEADERSIZE.
  1192. + !
  1193. + fi
  1194.   
  1195.   if [ ! -r $psrofflib ]
  1196.   then
  1197. ***************
  1198. *** 136,141 ****
  1199. --- 144,153 ----
  1200.           echo "      This means that you'll have to put all of your"
  1201.           echo "      width files directly in $FONTDIR, and you'll not"
  1202.           echo "      be able to support multiple sets of width tables"
  1203. +         echo "      The OTHER possibility is that you're running"
  1204. +         echo "      RISC/Ultrix who's troff cannot even read their"
  1205. +         echo "      own width tables!  In this case, -F is probably"
  1206. +         echo "      the correct form"
  1207.           workingtype=" "
  1208.           ;;
  1209.       esac
  1210. ***************
  1211. *** 150,155 ****
  1212. --- 162,169 ----
  1213.       echo "       It's giving me non-zero return codes when I try"
  1214.       echo "       all of the known different ways of setting width table"
  1215.       echo "       directory (including none!).  Egads.  Get Help!!!!!!!"
  1216. +     echo "       (One possibility is that you have ditroff which doesn't"
  1217. +     echo "       understand -t and will not work with psroff)"
  1218.       exit 1
  1219.   fi
  1220.   
  1221. -- 
  1222. Chris Lewis, Phone: (613) 832-0541
  1223. UUCP: uunet!utai!lsuc!ecicrl!clewis
  1224. Moderator of the Ferret Mailing List (ferret-request@eci386)
  1225. Psroff mailing list (psroff-request@eci386)
  1226.