home *** CD-ROM | disk | FTP | other *** search
- From: clewis@eci386.uucp (Chris Lewis)
- Newsgroups: comp.sources.bugs,alt.sources
- Subject: Patch 1 for Psroff 2.0
- Message-ID: <1990Aug10.203547.29970@eci386.uucp>
- Date: 10 Aug 90 20:35:47 GMT
-
- Psroff 2.0 hasn't made it thru comp.sources.unix yet, but it is available
- via ftp from at least two sites. This patch resolves all bugs that I
- know of. All of these bugs are build/configure problems. There are
- some enhancements, but most of them are disabled (and incomplete - wait
- for me to finally get the bugs out of ditroff drawing emulation)
-
- Please note: I will be moving to Ottawa in a few days. No, I'm not
- leaving the company, I'm opening a new office. Existing e-mail addresses
- will continue to work (via the wonders of mail aliasing), but expect a
- delay until I get things rolling again.
-
- This is official patch 01 for Psroff 2.0.
- Please apply it by:
- cd <psroff source directory>
- patch -N -p < <this file>
-
- If you had managed to succeed to get psroff 2.0 P0 to build, you may
- get a small number of rejects which you may want to examine to ensure
- that you fixed 'em right.
-
- Bugs:
- - "make check" (audit & Makefile):
- - Made misleading remarks about testing trofftype when no
- /usr/lib/font exists, or FONTDIR somewhere else.
- - Final verification message for HEADERSIZE used literal
- "0" instead of empirically derived value.
- - Bug in awk script caused blowouts.
- - "make installwidths" (widths/Makefile):
- - "@$(IGNORESH) ; \" caused problems on some systems with IGNORESH
- disabled. Semi-colon removed.
- - widths/widthjt/DESC, widths/widthlj/DESC and widths/widthps/HW
- aren't supposed to be part of the release. Removed them.
- - ltest.m referenced font PA, which was changed to PR for consistency.
- - debug.c refered to pkmsg which isn't defined when LJ undef'd.
- With this fix, you can now build troff2ps with LJ undef'd, but
- several of the utilities having to do with laserjet fonts (eg:
- all of the "pk*" routines under utils) will not build.
- A "make -k" may help when you REALLY want to undef LJ.
- - troff2.c: fix made for compilers that can't handle float expression
- assignments to integer variables in initializers (Ultrix).
-
- Enhancements:
- - Ditroff drawing emulation comprises the bulk of the diffs in this
- patch. It is disabled, and some code is missing.
- This code will remain in, but disabled, until I get it a bit
- more bullet proof, then I'll also supply the backend code.
- (troff2.c, defs.h, t2conf.c, opt.c)
- - Comment regarding new -Y flag added to lib/psrofflib.
- - Improved greyscale settings in lib/confid.ps
-
- *** /tmp/PATCHold/./Makefile Fri Aug 10 15:58:01 1990
- --- ./Makefile Fri Aug 10 15:58:01 1990
- ***************
- *** 16,22 ****
- # Note: This is a System V Makefile, so you may
- # have some problems making a few of the items.
- #
- ! #ident "@(#)Makefile: 2.1 Copyright 90/07/18 16:47:31 Chris Lewis"
-
- # Use s5make on Ultrix and Sun!
-
- --- 16,22 ----
- # Note: This is a System V Makefile, so you may
- # have some problems making a few of the items.
- #
- ! #ident "@(#)Makefile: 2.2 Copyright 90/08/10 15:22:08 Chris Lewis"
-
- # Use s5make on Ultrix and Sun!
-
- ***************
- *** 377,387 ****
- tbl TEST | PATH=.:$(LIBDIR):$$PATH psroff -T$(TTYPE)
-
- check: audit sedscript makeincl
- ! cd lib ; $(MAKE) psrofflib
- ./audit
-
- checkinstall: audit sedscript makeincl
- ! cd lib ; $(MAKE) psrofflib
- ./audit install
-
- # This is how I build a release - don't even try running this...!
- --- 377,387 ----
- tbl TEST | PATH=.:$(LIBDIR):$$PATH psroff -T$(TTYPE)
-
- check: audit sedscript makeincl
- ! cd lib ; $(MAKE)
- ./audit
-
- checkinstall: audit sedscript makeincl
- ! cd lib ; $(MAKE)
- ./audit install
-
- # This is how I build a release - don't even try running this...!
- *** /tmp/PATCHold/./widths/Makefile Fri Aug 10 15:58:08 1990
- --- ./widths/Makefile Fri Aug 10 15:58:09 1990
- ***************
- *** 1,4 ****
- ! #2.1 90/07/18
- SCRIPTS = gfnttab
- TD = testdir
- PSW = \
- --- 1,4 ----
- ! #2.4 90/08/08
- SCRIPTS = gfnttab
- TD = testdir
- PSW = \
- ***************
- *** 5,16 ****
- widthps/DESC \
- widthps/AB widthps/BR widthps/HB widthps/I widthps/PX \
- widthps/AI widthps/BX widthps/HO widthps/NB widthps/R \
- ! widthps/AR widthps/C widthps/HW widthps/NI widthps/S \
- widthps/AX widthps/CB widthps/HX widthps/NR widthps/S2 \
- widthps/B widthps/CO widthps/Hb widthps/NX widthps/ZC \
- widthps/BB widthps/CX widthps/Hi widthps/PB widthps/ZD \
- widthps/BI widthps/Hr widthps/PI widthps/BO widthps/H \
- ! widthps/Hx widthps/PR widthjt/DESC widthlj/DESC
-
- include ../makeincl
-
- --- 5,16 ----
- widthps/DESC \
- widthps/AB widthps/BR widthps/HB widthps/I widthps/PX \
- widthps/AI widthps/BX widthps/HO widthps/NB widthps/R \
- ! widthps/AR widthps/C widthps/NI widthps/S \
- widthps/AX widthps/CB widthps/HX widthps/NR widthps/S2 \
- widthps/B widthps/CO widthps/Hb widthps/NX widthps/ZC \
- widthps/BB widthps/CX widthps/Hi widthps/PB widthps/ZD \
- widthps/BI widthps/Hr widthps/PI widthps/BO widthps/H \
- ! widthps/Hx widthps/PR
-
- include ../makeincl
-
- ***************
- *** 18,24 ****
-
- $(PSW):
- @eval `echo $@ | sed -e 's/\(.*\)\/\([^\/]*\)$$/d=\1 f=s.\2/'` ; \
- ! cd $$d ; get $(GFLAGS) $$f
-
- widths: gfnttab dit2catwid
- -rm -f gfnttab.log
- --- 18,24 ----
-
- $(PSW):
- @eval `echo $@ | sed -e 's/\(.*\)\/\([^\/]*\)$$/d=\1 f=s.\2/'` ; \
- ! cd $$d ; $(GET) $(GFLAGS) $$f
-
- widths: gfnttab dit2catwid
- -rm -f gfnttab.log
- ***************
- *** 41,47 ****
- # (eg: my PK 36 is actually closer to 32)
- sepwidths: ../utils/pk2ditwid
- rm -f pk2sep.log pk2sep.err
- ! @ $(IGNORESH) if [ -d $(LJF) ] ; \
- then \
- fontlist=`find $(LJF) -type f \
- '(' -name '*.*.pk' -o -name '*.*.sfp' ')' -print | \
- --- 41,47 ----
- # (eg: my PK 36 is actually closer to 32)
- sepwidths: ../utils/pk2ditwid
- rm -f pk2sep.log pk2sep.err
- ! @$(IGNORESH) if [ -d $(LJF) ] ; \
- then \
- fontlist=`find $(LJF) -type f \
- '(' -name '*.*.pk' -o -name '*.*.sfp' ')' -print | \
- ***************
- *** 122,128 ****
- # (eg: my PK 36 is actually closer to 32)
- ljwidths: ../utils/pk2ditwid
- rm -f pk2dit.log pk2dit.err
- ! @ $(IGNORESH) if [ -d $(LJF) ] ; \
- then \
- fontlist=`find $(LJF) -type f \
- '(' -name '*.*.pk' -o -name '*.*.sfp' ')' -print | \
- --- 122,128 ----
- # (eg: my PK 36 is actually closer to 32)
- ljwidths: ../utils/pk2ditwid
- rm -f pk2dit.log pk2dit.err
- ! @$(IGNORESH) if [ -d $(LJF) ] ; \
- then \
- fontlist=`find $(LJF) -type f \
- '(' -name '*.*.pk' -o -name '*.*.sfp' ')' -print | \
- ***************
- *** 179,191 ****
- install:
-
- installwidths:
- ! @$(IGNORESH) ; \
- test -w $(FONTDIR) || (echo "Install as root" ; exit 1 ; ) ; \
- for i in width* ; \
- do \
- base=`echo $$i | sed -e 's/.*width//'` ; \
- test -d $(FONTDIR)/$$base || mkdir $(FONTDIR)/$$base ; \
- ! test -w $(FONTDIR)/$$base || (echo "Install as root" ; exit 1 ; ) ; \
- files=`echo width$$base/ft*` ; \
- if [ "$$files" = "width$$base"'/ft*' ] ; \
- then \
- --- 179,192 ----
- install:
-
- installwidths:
- ! @$(IGNORESH) \
- test -w $(FONTDIR) || (echo "Install as root" ; exit 1 ; ) ; \
- for i in width* ; \
- do \
- base=`echo $$i | sed -e 's/.*width//'` ; \
- test -d $(FONTDIR)/$$base || mkdir $(FONTDIR)/$$base ; \
- ! test -w $(FONTDIR)/$$base || \
- ! (echo "Install as root" ; exit 1 ; ) ; \
- files=`echo width$$base/ft*` ; \
- if [ "$$files" = "width$$base"'/ft*' ] ; \
- then \
- ***************
- *** 198,204 ****
-
- cmp:
- test -d $(TD) || mkdir $(TD)
- ! @$(IGNORESH)for i in width* ; \
- do \
- base=`echo $$i | sed -e 's/.*width//'` ; \
- cd $$i ; \
- --- 199,205 ----
-
- cmp:
- test -d $(TD) || mkdir $(TD)
- ! @$(IGNORESH) for i in width* ; \
- do \
- base=`echo $$i | sed -e 's/.*width//'` ; \
- cd $$i ; \
- *** /tmp/PATCHold/./tests/ltest.m.S Fri Aug 10 15:58:15 1990
- --- ./tests/ltest.m.S Fri Aug 10 15:58:15 1990
- ***************
- *** 1,4 ****
- ! .\"Document revision 2.1 90/07/18
- .nr Ej 1
- .TL
- troff2ps testing script.
- --- 1,4 ----
- ! .\"Document revision 2.2 90/08/10
- .nr Ej 1
- .TL
- troff2ps testing script.
- ***************
- *** 237,243 ****
- .EN
- .DE
- .H 2 "Hanging Caps"
- ! .fp 1 PA
- .fp 3 PB
- .ta 1i
- .in +0.6i
- --- 237,243 ----
- .EN
- .DE
- .H 2 "Hanging Caps"
- ! .fp 1 PR
- .fp 3 PB
- .ta 1i
- .in +0.6i
- *** /tmp/PATCHold/./debug.c Fri Aug 10 15:58:23 1990
- --- ./debug.c Fri Aug 10 15:58:23 1990
- ***************
- *** 2,8 ****
-
- #ifndef lint
- static char SCCSid[] =
- ! "@(#)debug.c: 2.1 Copyright 90/07/18 16:51:21 Chris Lewis";
- #endif
-
- #ifdef DEBUG
- --- 2,8 ----
-
- #ifndef lint
- static char SCCSid[] =
- ! "@(#)debug.c: 2.2 Copyright 90/08/08 13:14:09 Chris Lewis";
- #endif
-
- #ifdef DEBUG
- ***************
- *** 106,114 ****
- extern char *malloc();
- register char *p = malloc((unsigned) n);
- if (!p) {
- ! pkmsg("%s: Out of space! (requesting %d bytes, key: %s)\n",
- progname, n, msg);
- ! abort();
- }
- clrarray(p, n);
- return(p);
- --- 106,114 ----
- extern char *malloc();
- register char *p = malloc((unsigned) n);
- if (!p) {
- ! fprintf(stderr, "%s: Out of space! (requesting %d bytes, key: %s)\n",
- progname, n, msg);
- ! exit(1);
- }
- clrarray(p, n);
- return(p);
- *** /tmp/PATCHold/./defs.h Fri Aug 10 15:58:27 1990
- --- ./defs.h Fri Aug 10 15:58:27 1990
- ***************
- *** 1,4 ****
- ! /* Copyright 1988, 1989 16:51:24 Chris Lewis
- All Rights Reserved
-
- Permission to copy and further distribute is freely given provided
- --- 1,4 ----
- ! /* Copyright 1988, 1989 15:15:01 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.1 90/07/18 16:51:24
- Author: Chris Lewis
- Specs: Main header file - contains some customization
- */
-
- /* Official Release and Patch level: */
- ! #define T2VERSION "@(#)PSROFF Copyright 90/07/18 Chris Lewis - R2 P0"
-
- #ifndef LIBDIR
- /* Don't touch this */
- --- 6,18 ----
- sold for profit.
-
- Project: Generic Troff drivers
- ! Module: defs.h 2.2 90/08/10 15:15:01
- Author: Chris Lewis
- Specs: Main header file - contains some customization
- */
-
- /* Official Release and Patch level: */
- ! #define T2VERSION "@(#)PSROFF Copyright 90/08/10 Chris Lewis - R2 P1"
-
- #ifndef LIBDIR
- /* Don't touch this */
- ***************
- *** 105,111 ****
-
- /* Basic drivers: */
- #define PS /* Postscript */
- ! #define LJ /* Laserjet */
- #define DT /* ditroff */
-
- /* Laserjet driver config: */
- --- 105,111 ----
-
- /* Basic drivers: */
- #define PS /* Postscript */
- ! #define LJ /* Laserjet - psroff will not build with this undef'd */
- #define DT /* ditroff */
-
- /* Laserjet driver config: */
- ***************
- *** 266,272 ****
- befontsel, /* special function F */
- beoverlay, /* special function O */
- bepassthru, /* special function P */
- ! bexlat; /* Xlate function */
- struct troff2befont
- *bestdfont, /* standard font translate table */
- *besymfont; /* symbol font translate table */
- --- 266,273 ----
- befontsel, /* special function F */
- beoverlay, /* special function O */
- bepassthru, /* special function P */
- ! bexlat, /* Xlate function */
- ! bedraw; /* Ditroff draw emulation routine */
- struct troff2befont
- *bestdfont, /* standard font translate table */
- *besymfont; /* symbol font translate table */
- ***************
- *** 336,342 ****
- #endif
-
- extern int lastFont, lastPoints;
- ! extern int lastYPos, lastXPos;
- extern char *progname, *printer, *device;
- extern char **prologs;
-
- --- 337,343 ----
- #endif
-
- extern int lastFont, lastPoints;
- ! extern int lastYPos, lastXPos, specXPos, specYPos;
- extern char *progname, *printer, *device;
- extern char **prologs;
-
- *** /tmp/PATCHold/./t2conf.c Fri Aug 10 15:58:30 1990
- --- ./t2conf.c Fri Aug 10 15:58:30 1990
- ***************
- *** 15,21 ****
-
- #ifndef lint
- static char SCCSid[] =
- ! "@(#)t2conf.c: 2.1 Copyright 90/07/18 16:51:40 Chris Lewis";
- #endif
-
- #ifdef PS
- --- 15,21 ----
-
- #ifndef lint
- static char SCCSid[] =
- ! "@(#)t2conf.c: 2.2 Copyright 90/08/10 15:27:22 Chris Lewis";
- #endif
-
- #ifdef PS
- ***************
- *** 30,35 ****
- --- 30,40 ----
- #include "dt.h"
- #endif
-
- + #ifndef INSPECIAL
- + #define dtDraw NULL
- + #define psDraw NULL
- + #endif
- +
- extern int FontSel();
-
- /* Common variables */
- ***************
- *** 37,58 ****
- int currentPage = 0;
-
- struct backend B[] = {
- ! /* bename, beprolog, beepilog, bechar, bepage, befontsel */
- ! /* beoverlay, bepassthru bexlat, bestdfont, besymfont */
-
- #ifdef PS
- { "ps", psProlog, psEpilog, psChar, psPage, FontSel,
- ! psOverlay, NULL, psXlate, psStdFont, psSymFont },
- #endif
-
- #ifdef DT
- { "dt", dtProlog, dtEpilog, dtChar, dtPage, FontSel,
- ! NULL, dtPassthru, NULL, dtStdFont, dtSymFont },
- #endif
-
- #ifdef LJ
- { "lj", ljProlog, ljEpilog, ljChar, ljPage, FontSel,
- ! NULL, NULL, NULL, ljStdFont, ljSymFont },
- #endif
- { NULL }
- };
- --- 42,67 ----
- int currentPage = 0;
-
- struct backend B[] = {
- ! /* bename, beprolog, beepilog, bechar, bepage, befontsel
- ! beoverlay, bepassthru, bexlat, beDraw,
- ! bestdfont, besymfont */
-
- #ifdef PS
- { "ps", psProlog, psEpilog, psChar, psPage, FontSel,
- ! psOverlay, NULL, psXlate, psDraw,
- ! psStdFont, psSymFont },
- #endif
-
- #ifdef DT
- { "dt", dtProlog, dtEpilog, dtChar, dtPage, FontSel,
- ! NULL, dtPassthru, NULL, dtDraw,
- ! dtStdFont, dtSymFont },
- #endif
-
- #ifdef LJ
- { "lj", ljProlog, ljEpilog, ljChar, ljPage, FontSel,
- ! NULL, NULL, NULL, NULL,
- ! ljStdFont, ljSymFont },
- #endif
- { NULL }
- };
- *** /tmp/PATCHold/./troff2.c Fri Aug 10 15:58:34 1990
- --- ./troff2.c Fri Aug 10 15:58:34 1990
- ***************
- *** 15,21 ****
-
- #ifndef lint
- static char SCCSid[] =
- ! "@(#)troff2.c: 2.1 Copyright 90/07/18 16:51:45 Chris Lewis";
- #endif
-
- #define ESC 0x80
- --- 15,21 ----
-
- #ifndef lint
- static char SCCSid[] =
- ! "@(#)troff2.c: 2.2 Copyright 90/08/10 15:15:35 Chris Lewis";
- #endif
-
- #define ESC 0x80
- ***************
- *** 49,57 ****
-
- #define CTOINT(val,sig) ((~c)&sig)
-
- ! int pagelength = DEFPL * TROFFRESOLUTION;
- ! int pageoffset = DEFOFF * TROFFRESOLUTION;
- ! int pageyoffset = DEFYOFF * TROFFRESOLUTION;
-
- char *version, *shortversion;
-
- --- 49,57 ----
-
- #define CTOINT(val,sig) ((~c)&sig)
-
- ! int pagelength;
- ! int pageoffset;
- ! int pageyoffset;
-
- char *version, *shortversion;
-
- ***************
- *** 133,138 ****
- --- 133,143 ----
- #endif
- sprintf(username, "uid=%d", getuid());
-
- + /* some compilers complain about floating point in initializers... */
- + pagelength = DEFPL * TROFFRESOLUTION;
- + pageoffset = DEFOFF * TROFFRESOLUTION;
- + pageyoffset = DEFYOFF * TROFFRESOLUTION;
- +
- progname = strrchr(argv[0], '/');
- if (progname)
- progname++;
- ***************
- *** 345,357 ****
- #endif
-
- #ifdef OPT
- ! if (optimize)
- ! canoninsert(xpos, ypos, font, points, nc);
- ! else
- #endif
- - if (be->beputchar)
- - (*be->beputchar)(xpos, ypos, font, points, nc,
- - (char *) NULL);
-
- break;
- /* Control codes */
- --- 350,361 ----
- #endif
-
- #ifdef OPT
- ! canoninsert(xpos, ypos, font, points, nc);
- ! #else
- ! if (be->beputchar)
- ! (*be->beputchar)(xpos, ypos, font, points, nc,
- ! (char *) NULL);
- #endif
-
- break;
- /* Control codes */
- ***************
- *** 626,631 ****
- --- 630,640 ----
- DBP((D_SPEC,"Dospecial: (%d) %s\n", strlen(string), string));
- while (*string)
- switch(*string) {
- + case 'D':
- + if (be->bedraw)
- + (*be->bedraw)(specXPos, specYPos, string+1);
- + *string = '\0';
- + return;
- case 'E':
- fprintf(stderr, "%s\n", string+1);
- *string = '\0';
- *** /tmp/PATCHold/./lib/confid.ps Fri Aug 10 15:58:44 1990
- --- ./lib/confid.ps Fri Aug 10 15:58:45 1990
- ***************
- *** 9,18 ****
- % Module: confid.ps
- % Author: Chris Lewis
- % Specs: Confidential overlay inclusion.
- ! %ident @(#)confid.ps: 2.1 Copyright 90/07/18 16:52:40 Chris Lewis"
-
- /Confidential {
- gsave
- .99 setgray
- /Courier-Bold findfont 80 scalefont setfont
- 0 0 moveto
- --- 9,19 ----
- % Module: confid.ps
- % Author: Chris Lewis
- % Specs: Confidential overlay inclusion.
- ! %ident @(#)confid.ps: 2.2 Copyright 90/08/09 17:13:28 Chris Lewis"
-
- /Confidential {
- gsave
- + 106 45 { dup mul exch dup mul add 1.0 exch sub } setscreen
- .99 setgray
- /Courier-Bold findfont 80 scalefont setfont
- 0 0 moveto
- *** /tmp/PATCHold/./lib/psrofflib.S Fri Aug 10 15:58:55 1990
- --- ./lib/psrofflib.S Fri Aug 10 15:58:55 1990
- ***************
- *** 1,4 ****
- ! # 2.1 90/07/18
- # 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.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.
- ***************
- *** 37,42 ****
- --- 37,44 ----
- # (effectively) 7.5i, the adapters plus
- # the .5i default makes pages centre
- # by default in 8.5i (matter of taste).
- + # -Y<vertoff> ditto, but vertical. Default 0.
- + # Some postscript printers differ in location.
- #
- # lparg: how to get output to printer. Note the "-n$copies" and
- # -d$ptr. The $ptr is the psroff selected physical printer
- *** /tmp/PATCHold/./audit.S Fri Aug 10 15:59:03 1990
- --- ./audit.S Fri Aug 10 15:59:04 1990
- ***************
- *** 1,5 ****
- %%STARTSHELL%%
- ! # Psroff checking script 2.1 90/07/18
- chkinst=false
- for i
- do
- --- 1,5 ----
- %%STARTSHELL%%
- ! # Psroff checking script 2.2 90/08/07
- chkinst=false
- for i
- do
- ***************
- *** 205,211 ****
- then
- echo "ERROR: HEADERSIZE should be set to $acthdr, not $hdrsize"
- else
- ! echo "INFO: HEADERSIZE appears to be set correctly to 0"
- fi
- fi
-
- --- 205,211 ----
- then
- echo "ERROR: HEADERSIZE should be set to $acthdr, not $hdrsize"
- else
- ! echo "INFO: HEADERSIZE appears to be set correctly to $hdrsize"
- fi
- fi
-
- ***************
- *** 355,367 ****
- if (ftdirfound) {
- for (name in fonts) {
- if (name && !catfonts[name])
- ! printf(" FONT %s: don't use: %s/%s/ft%s not installed\n",\
- name, fontdir, printertype, name);
- }
- }
- for (name in catfonts) {
- if (name && !fonts[name])
- ! printf(" FONT %s: don't use: %s/%s/ft%s exists, but"
- name, fontdir, printertype, name)
- printf(" no %s.fonts\n", printertype)
- }
- --- 355,367 ----
- if (ftdirfound) {
- for (name in fonts) {
- if (name && !catfonts[name])
- ! printf(" FONT %s: do not use: %s/%s/ft%s not installed\n",\
- name, fontdir, printertype, name);
- }
- }
- for (name in catfonts) {
- if (name && !fonts[name])
- ! printf(" FONT %s: do not use: %s/%s/ft%s exists, but"
- name, fontdir, printertype, name)
- printf(" no %s.fonts\n", printertype)
- }
- *** /tmp/PATCHold/./opt.c Fri Aug 10 15:59:09 1990
- --- ./opt.c Fri Aug 10 15:59:09 1990
- ***************
- *** 13,22 ****
-
- #include "defs.h"
-
- #ifdef OPT
- #ifndef lint
- static char SCCSid[] =
- ! "@(#)opt.c: 2.1 Copyright 90/07/18 16:53:02 Chris Lewis";
- #endif
-
- struct insbuf {
- --- 13,25 ----
-
- #include "defs.h"
-
- + int specXPos, specYPos;
- + extern struct cattab tabN[], tabS[];
- +
- #ifdef OPT
- #ifndef lint
- static char SCCSid[] =
- ! "@(#)opt.c: 2.2 Copyright 90/08/10 15:16:19 Chris Lewis";
- #endif
-
- struct insbuf {
- ***************
- *** 47,52 ****
- --- 50,71 ----
- insptr++;
- }
-
- + #ifdef SORT
- + int xsortorder;
- +
- + xsort(a, b)
- + register struct insbuf *a, *b; {
- + int ret;
- + if (a->xpos < b->xpos)
- + ret = -1;
- + else if (a->xpos > b->xpos)
- + ret = 1;
- + else
- + ret = 0;
- + return(xsortorder * ret);
- + }
- + #endif
- +
- canonflush() {
- register struct insbuf *ip;
- insptr--;
- ***************
- *** 59,68 ****
- --- 78,99 ----
-
- if (insptr->xpos < insbuf[0].xpos) {
- DBP((D_CAT, "canonflush: BACK (%d chars)\n", insptr - insbuf + 1));
- + #ifdef SORT
- + xsortorder = -1;
- + insdump(insbuf, insptr);
- + qsort(insbuf, insptr - insbuf + 1, sizeof(struct insbuf), xsort);
- + insdump(insbuf, insptr);
- + #endif
- for(ip = insptr;ip >= insbuf; ip--)
- canonchar(ip->xpos, insypos, ip->font, ip->points, ip->nc);
- } else {
- DBP((D_CAT, "canonflush: FORW (%d chars)\n", insptr - insbuf + 1));
- + #ifdef SORT
- + xsortorder = 1;
- + insdump(insbuf, insptr);
- + qsort(insbuf, insptr - insbuf + 1, sizeof(struct insbuf), xsort);
- + insdump(insbuf, insptr);
- + #endif
- for(ip = insbuf;ip <= insptr; ip++)
- canonchar(ip->xpos, insypos, ip->font, ip->points, ip->nc);
- }
- ***************
- *** 77,107 ****
- static short lastypos;
- static sstate = 0;
- static char sbuf[512];
- ! #ifdef SPECIAL
- switch(sstate) {
- case 0:
- if (font == 3 && nc == 34) {
- sstate = 1;
- ! lastchar.xpos = xpos;
- lastchar.font = font;
- lastchar.points = points;
- lastchar.nc = nc;
- ! lastypos = ypos;
- optflush();
- return;
- }
- break;
- case 1:
- ! if (font == 3 && nc == 34 &&
- ! xpos == lastchar.xpos && ypos == lastypos) {
- ! sstate++;
- ! sbuf[0] = '\0';
- ! return;
- ! }
- if (be->beputchar)
- (*be->beputchar)(lastchar.xpos, lastypos, lastchar.font,
- lastchar.points, lastchar.nc, (char *) NULL);
- - sstate = 0;
- break;
- case 2:
- if (nc == 34 && font == 3) {
- --- 108,146 ----
- static short lastypos;
- static sstate = 0;
- static char sbuf[512];
- ! register char *p;
- ! #ifdef INSPECIAL
- ! /* Inline special directives, not supported yet */
- switch(sstate) {
- case 0:
- if (font == 3 && nc == 34) {
- sstate = 1;
- ! lastchar.xpos = specXPos = xpos;
- lastchar.font = font;
- lastchar.points = points;
- lastchar.nc = nc;
- ! lastypos = specYPos = ypos;
- optflush();
- return;
- }
- break;
- case 1:
- ! if (font == 3 && nc == 34) {
- ! if (xpos == lastchar.xpos && ypos == lastypos) {
- ! sstate++;
- ! sbuf[0] = '\0';
- ! return;
- ! } else {
- ! lastchar.xpos = xpos;
- ! lastypos = ypos;
- ! /* stay in this state */
- ! }
- ! } else
- ! sstate = 0;
- !
- if (be->beputchar)
- (*be->beputchar)(lastchar.xpos, lastypos, lastchar.font,
- lastchar.points, lastchar.nc, (char *) NULL);
- break;
- case 2:
- if (nc == 34 && font == 3) {
- ***************
- *** 118,130 ****
- return;
- }
- if (font == 3)
- ! strcat(sbuf, be->besymfont[nc].t2b_charseq);
- else
- ! strcat(sbuf, be->bestdfont[nc].t2b_charseq);
- return;
- }
- #endif
- -
- optinsert(xpos, ypos, font, points, nc);
- }
-
- --- 157,185 ----
- return;
- }
- if (font == 3)
- ! p = tabS[nc].ch_name;
- else
- ! p = tabN[nc].ch_name;
- ! if (strlen(p) >= 2) {
- ! if (strcmp(p, "hy") == 0 ||
- ! strcmp(p, "mi") == 0 ||
- ! strcmp(p, "\\-") == 0)
- ! p = "-";
- ! else if (strcmp(p, "ff") == 0 ||
- ! strcmp(p, "fi") == 0 ||
- ! strcmp(p, "fl") == 0)
- ! ;
- ! else if (strcmp(p, "Fi") == 0)
- ! p = "ffi";
- ! else if (strcmp(p, "Fl") == 0)
- ! p = "ffl";
- ! else
- ! p = " ";
- ! }
- ! strcat(sbuf, p);
- return;
- }
- #endif
- optinsert(xpos, ypos, font, points, nc);
- }
-
- ***************
- *** 214,218 ****
- --- 269,284 ----
- for (from = bp->t2b_charseq; *from;)
- *optp++ = *from++;
- *optp = '\0';
- + }
- + #endif
- +
- + #ifdef SORT
- + insdump(b, p)
- + register struct insbuf *b, *p; {
- + if (!(debug&D_VERB))
- + return;
- + DBP((D_VERB, "insdump:\n"));
- + for(; b <= p; b++)
- + DBP((D_VERB, "%d %d\n", b->xpos, b->nc));
- }
- #endif
- --
- Chris Lewis, Elegant Communications Inc, {uunet!attcan,utzoo}!lsuc!eci386!clewis
- Ferret mailing list: eci386!ferret-list, psroff mailing list: eci386!psroff-list
- Psroff information/questions: psroff-request@eci386
-