Changes for groff version 1.08, from version 1.07. These diffs do not include files that can be rebuilt with yacc/bison. Apply these changes by doing patch -p1 declares + optind, opterr, optarg. + * lib.h: When UNISTD_H_DECLARES_GETOPT is defined, declare optind, + opterr, optarg. + + Sun Mar 28 17:44:25 1993 James Clark (jjc at jclark) + + * Makefile.in (check): Dummy target. + Wed Mar 3 04:53:38 1993 James Clark (jjc at jclark) diff -rc2P groff-1.07/Makefile.ccpg groff-1.08/Makefile.ccpg *** groff-1.07/Makefile.ccpg Wed Oct 28 12:47:14 1992 --- groff-1.08/Makefile.ccpg Sat Apr 3 14:36:19 1993 *************** *** 19,20 **** --- 19,26 ---- TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS) Makefile: $(MAKEFILEPARTS) + + pure: $(PROG).pure + + $(PROG).pure: $(OBJS) $(XLIBS) + $(PURIFY) $(PURIFYCCFLAGS) \ + $(LINK.cc) -o $@ $(OBJS) $(XLIBS) $(CCLIBS) $(LIBS) $(MLIB) diff -rc2P groff-1.07/Makefile.comm groff-1.08/Makefile.comm *** groff-1.07/Makefile.comm Fri Feb 19 23:13:44 1993 --- groff-1.08/Makefile.comm Sat Apr 3 16:58:23 1993 *************** *** 55,62 **** --- 55,64 ---- install: install_bin install_data uninstall: uninstall_sub + pure: .PHONY: all clean distclean mostlyclean realclean extraclean depend distfiles .PHONY: install install_bin install_data .PHONY: uninstall uninstall_sub + .PHONY: pure mostlyclean: diff -rc2P groff-1.07/Makefile.in groff-1.08/Makefile.in *** groff-1.07/Makefile.in Mon Feb 22 09:12:00 1993 --- groff-1.08/Makefile.in Mon Apr 19 10:48:25 1993 *************** *** 41,44 **** --- 41,47 ---- # don't understand the %%{Begin,End}Document comments. I suspect this # includes early versions of TranScript. + # Add 8 if the first line of the PostScript output should be %!PS-Adobe-2.0 + # rather than %!PS-Adobe-3.0; this is needed when using Sun's Newsprint + # with a printer that requires page reversal. BROKEN_SPOOLER_FLAGS=@BROKEN_SPOOLER_FLAGS@ *************** *** 173,179 **** CDEFINES=$(DEFINES) ! DEBUG=-g ! CCFLAGS=$(DEBUG) ! CFLAGS=$(DEBUG) YACC=@YACC@ YACCFLAGS=-v --- 176,183 ---- CDEFINES=$(DEFINES) ! DEBUG= ! OPTIMIZE=-O ! CCFLAGS=$(DEBUG) $(OPTIMIZE) ! CFLAGS=$(DEBUG) $(OPTIMIZE) YACC=@YACC@ YACCFLAGS=-v *************** *** 193,200 **** # Full path to perl. PERLPATH=@PERLPATH@ ! srcdir = @srcdir@ VPATH = @srcdir@ MDEFINES="PAGE=$(PAGE)" "BROKEN_SPOOLER_FLAGS=$(BROKEN_SPOOLER_FLAGS)" \ "DEVICE=$(DEVICE)" "PSPRINT=$(PSPRINT)" "DVIPRINT=$(DVIPRINT)" \ --- 197,210 ---- # Full path to perl. PERLPATH=@PERLPATH@ ! # Sed command with which to edit sh scripts. ! SH_SCRIPT_SED_CMD=@SH_SCRIPT_SED_CMD@ srcdir = @srcdir@ VPATH = @srcdir@ + PURIFY=purify + GCCVERSION=2.3.3 + GCCPREFIX=/usr/local/lib/gcc-lib/sparc-sun-sunos4.1/$(GCCVERSION)/ + PURIFYCCFLAGS=-g++=yes -collector=$(GCCPREFIX)ld + MDEFINES="PAGE=$(PAGE)" "BROKEN_SPOOLER_FLAGS=$(BROKEN_SPOOLER_FLAGS)" \ "DEVICE=$(DEVICE)" "PSPRINT=$(PSPRINT)" "DVIPRINT=$(DVIPRINT)" \ *************** *** 216,220 **** "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" "INSTALL_DATA=$(INSTALL_DATA)" \ "ETAGS=$(ETAGS)" "ETAGSFLAGS=$(ETAGSFLAGS)" "ETAGSCCFLAG=$(ETAGSCCFLAG)" \ ! "PERLPATH=$(PERLPATH)" SHELL=/bin/sh --- 226,231 ---- "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" "INSTALL_DATA=$(INSTALL_DATA)" \ "ETAGS=$(ETAGS)" "ETAGSFLAGS=$(ETAGSFLAGS)" "ETAGSCCFLAG=$(ETAGSCCFLAG)" \ ! "PERLPATH=$(PERLPATH)" "SH_SCRIPT_SED_CMD=$(SH_SCRIPT_SED_CMD)" \ ! "PURIFY=$(PURIFY)" "PURIFYCCFLAGS=$(PURIFYCCFLAGS)" SHELL=/bin/sh *************** *** 318,324 **** cd tmp; \ $(LN_S) ../Makefile .; \ ! $(LN_S) $$srcdir/* . 2>/dev/null; \ for d in $(DISTDIRS); do \ ! (cd $$d; $(LN_S) $$srcdir/$$d/* . 2>/dev/null); \ done; \ $(MAKE) srcdir=$$srcdir VPATH=$$srcdir extraclean; \ --- 329,335 ---- cd tmp; \ $(LN_S) ../Makefile .; \ ! $(LN_S) $$srcdir/* . 2>/dev/null || true; \ for d in $(DISTDIRS); do \ ! (cd $$d; $(LN_S) $$srcdir/$$d/* . 2>/dev/null || true); \ done; \ $(MAKE) srcdir=$$srcdir VPATH=$$srcdir extraclean; \ *************** *** 368,371 **** --- 379,386 ---- $(tmacdir) $(fontdir) $(bindir) $(datasubdir) $(datadir) + + .PHONY: check + check: + FORCE: diff -rc2P groff-1.07/NEWS groff-1.08/NEWS *** groff-1.07/NEWS Tue Feb 23 14:48:50 1993 --- groff-1.08/NEWS Thu Apr 1 11:49:17 1993 *************** *** 2,5 **** --- 2,21 ---- are not described. There are more details in the man pages. + VERSION 1.08 + ============ + + Troff + ----- + + The escape sequence \V[xxx] will interpolate the value of the + environment variable xxx. + + Tbl + --- + + The decimalpoint option can be used to specify the character to be + recognized as the decimal point character in place of the default + period. + VERSION 1.07 ============ diff -rc2P groff-1.07/PROBLEMS groff-1.08/PROBLEMS *** groff-1.07/PROBLEMS Tue Mar 2 18:56:12 1993 --- groff-1.08/PROBLEMS Wed Apr 7 10:38:49 1993 *************** *** 3,6 **** --- 3,30 ---- other improvements to this file are welcome. + * gcc 2.3.3 fails to compile pic/object.cc. + + Apply the following patch: + + Thu Apr 1 12:06:03 1993 Brendan Kehoe (brendan@lisa.cygnus.com) + + * cp-init.c (expand_default_init): Don't clear DECL_REGISTER. + + *** cp-init.c.~2~ Mon Mar 29 21:48:36 1993 + --- cp-init.c Thu Apr 1 12:00:33 1993 + *************** expand_default_init (binfo, true_exp, ex + *** 1141,1149 **** + } + + - /* ARM $7.1.1: "[register] may be ignored and in most implementations + - it will be ignored if the address of the variable is taken." + - Since we're likely to do just that in the ctor call, clear this. */ + - DECL_REGISTER (exp) = 0; + - + rval = build_method_call (exp, constructor_name (type), + parms, binfo, flags|xxref_init_possible); + --- 1141,1144 ---- + + * On a DECstation or other machine using a MIPS cpu, gcc/g++ 2.2.2 gets a fatal signal while compiling tbl/main.c and tbl/table.c. *************** *** 36,54 **** * I get errors when I try to compile groff with DEC C++. ! Rebuild the bison-generated parsers (pic/pic.cc, eqn/eqn.cc, ! refer/label.cc) using DEC yacc. Fix the declaration of write() in ! so that the second argument is a const char *. Fix the ! declaration of open() in so that the first argument is a ! const char *. ! ! * I get errors compiling the files eqn/eqn.cc, pic/pic.cc, ! refer/label.cc. I'm not using gcc or g++ as my C++ compiler. ! ! These files are generated by bison. One possible problem is that ! they're not including when they need to. Try adding ! #include . Alternatively you could try regenerating the ! parsers using your system's version of yacc. To do this, rename these ! files to something, change the definition of YACC in the top-level ! Makefile and rebuild. * On Ultrix, the make stops with the message --- 60,66 ---- * I get errors when I try to compile groff with DEC C++. ! Fix the declaration of write() in so that the second ! argument is a const char *. Fix the declaration of open() in ! so that the first argument is a const char *. * On Ultrix, the make stops with the message *************** *** 62,65 **** --- 74,111 ---- Use GNU make. + * I'm having problems compiling groff on 386BSD 0.1. + + If you're using ash as /bin/sh, you'll need the following patch. + + *** gendef.sh.org Sun Jun 30 13:30:36 1991 + --- gendef.sh Sun Feb 28 10:23:49 1993 + *************** + *** 3,9 **** + file=$1 + shift + + ! defs="#define $1" + shift + for def + do + --- 3,10 ---- + file=$1 + shift + + ! x=$1 + ! defs="#define $x" + shift + for def + do + + You'll also need to change dirnamemax.c so that it doesn't use + pathconf(). + + * While compiling on Xenix, ranlib libgroff.a fails. + + The system ranlib can't handle externals longer than 40 characters. + Use the ranlib included in demon.co.uk:/pub/xenix/g++-1.40.3a.v1 + instead. + * Groff can't handle my troff document. It works fine with AT&T troff. *************** *** 277,280 **** --- 323,412 ---- /usr/local/lib/groff/tmac/man.local. + * I'm having problems formatting HP-UX 9.0 man pages with groff -man. + + Rename /usr/local/lib/groff/tmac/tmac.an to (for example) + /usr/local/lib/groff/tmac/tmac.gan, copy HP's tmac.an into + /usr/local/lib/groff/tmac/tmac.an, and either put `.cp 1' at the + beginning or filter it (and any files it .so's) through + tmac/fixmacros.sed. + + * I'm having problems formatting man pages produced by the perl + wrapman script. + + Some versions of wrapman have a superfluous blank line before the .TH + line. This must be deleted. Then either use groff -C, or apply the + following patch: + + *** wrapman.~2~ Sun Jan 19 12:10:24 1992 + --- wrapman Fri Apr 2 12:12:57 1993 + *************** + *** 35,41 **** + $line1 .= if $line1 =~ /eval/; + $line1 .= if $line1 =~ /argv/; + $line2 = ; + ! next if $line2 eq "'di';\n"; + + # Pull the old switcheroo. + + --- 35,41 ---- + $line1 .= if $line1 =~ /eval/; + $line1 .= if $line1 =~ /argv/; + $line2 = ; + ! next if $line2 eq "'di ';\n"; + + # Pull the old switcheroo. + + *************** + *** 49,56 **** + + print OUT $line1; + print OUT <conftest.cc ! $2 extern "C" { void exit(int); } ! int main() { exit(0); } void t() { $3 } EOF dnl Don't try to run the program, which would prevent cross-configuring. --- 86,96 ---- If you're using gcc/g++, you should install libg++. EOF ! GROFF_EXIT])])dnl define(GROFF_CC_COMPILE_CHECK, [AC_PROVIDE([$0])AC_REQUIRE([GROFF_PROG_CCC])echo checking for $1 cat <conftest.cc ! [$2] extern "C" { void exit(int); } ! int main() { exit(0); } void t() { [$3] } EOF dnl Don't try to run the program, which would prevent cross-configuring. *************** *** 204,208 **** define(GROFF_SYS_SIGLIST, [AC_COMPILE_CHECK([sys_siglist],,changequote(,)dnl ! [extern char *sys_siglist[]; sys_siglist[0] = 0;],changequote([,])dnl AC_DEFINE(HAVE_SYS_SIGLIST))])dnl dnl --- 203,207 ---- define(GROFF_SYS_SIGLIST, [AC_COMPILE_CHECK([sys_siglist],,changequote(,)dnl ! extern char *sys_siglist[]; sys_siglist[0] = 0;,changequote([,])dnl AC_DEFINE(HAVE_SYS_SIGLIST))])dnl dnl *************** *** 273,278 **** [GROFF_CC_COMPILE_CHECK(new array delete syntax,, changequote(,)dnl ! [char *p = new char[5]; delete [] p;] ! changequote([,]),,AC_DEFINE(ARRAY_DELETE_NEEDS_SIZE))])dnl dnl define(GROFF_BROKEN_SPOOLER_FLAGS, --- 272,277 ---- [GROFF_CC_COMPILE_CHECK(new array delete syntax,, changequote(,)dnl ! char *p = new char[5]; delete [] p;changequote([,]), ! ,AC_DEFINE(ARRAY_DELETE_NEEDS_SIZE))])dnl dnl define(GROFF_BROKEN_SPOOLER_FLAGS, *************** *** 322,326 **** [#include #include ], ! [int opt = getopt(0, 0, 0); optarg = "foo"; optind = 1;], AC_DEFINE(UNISTD_H_DECLARES_GETOPT)) ])dnl --- 321,325 ---- [#include #include ], ! [int opt = getopt(0, 0, 0);], AC_DEFINE(UNISTD_H_DECLARES_GETOPT)) ])dnl *************** *** 355,357 **** --- 354,380 ---- define(GROFF_UNISTD_H, [GROFF_CC_COMPILE_CHECK(['C++ '],[#include ], + dnl Bison generated parsers have problems with C++ compilers other than g++. + dnl So byacc is preferred over bison. [read(0, 0, 0);],AC_DEFINE(HAVE_CC_UNISTD_H))])dnl + define(GROFF_PROG_YACC, + [AC_PROGRAM_CHECK(YACC, byacc, byacc, ) + AC_PROGRAM_CHECK(YACC, bison, bison -y, yacc) + ])dnl + dnl GROFF_CSH_HACK(if hack present, if not present) + define(GROFF_CSH_HACK, + [echo 'checking for csh # hack' + cat <conftest.sh + #!/bin/sh + true || exit 0 + export PATH || exit 0 + exit 1 + EOF + chmod +x conftest.sh + if echo ./conftest.sh | (csh >/dev/null 2>&1) >/dev/null 2>&1 + then + :; $1 + else + :; $2 + fi + rm -f conftest.sh + ])dnl diff -rc2P groff-1.07/configure groff-1.08/configure *** groff-1.07/configure Sun Feb 21 14:51:10 1993 --- groff-1.08/configure Mon Apr 19 09:48:18 1993 *************** *** 298,303 **** fi rm -f conftest* - if test "$CCC" = gcc; then CCC="gcc -O"; fi - if test "$CCC" = "g++"; then CCC="g++ -O"; fi if test -z "$PSPRINT" then --- 298,301 ---- *************** *** 399,408 **** if test -z "$YACC"; then ! echo checking for bison saveifs="$IFS"; IFS="${IFS}:" for dir in $PATH; do test -z "$dir" && dir=. ! if test -f $dir/bison; then ! YACC="bison -y" break fi --- 397,406 ---- if test -z "$YACC"; then ! echo checking for byacc saveifs="$IFS"; IFS="${IFS}:" for dir in $PATH; do test -z "$dir" && dir=. ! if test -f $dir/byacc; then ! YACC="byacc" break fi *************** *** 413,422 **** if test -z "$YACC"; then ! echo checking for byacc saveifs="$IFS"; IFS="${IFS}:" for dir in $PATH; do test -z "$dir" && dir=. ! if test -f $dir/byacc; then ! YACC="byacc" break fi --- 411,420 ---- if test -z "$YACC"; then ! echo checking for bison saveifs="$IFS"; IFS="${IFS}:" for dir in $PATH; do test -z "$dir" && dir=. ! if test -f $dir/bison; then ! YACC="bison -y" break fi *************** *** 493,496 **** --- 491,511 ---- done + echo 'checking for csh # hack' + cat <conftest.sh + #!/bin/sh + true || exit 0 + export PATH || exit 0 + exit 1 + EOF + chmod +x conftest.sh + if echo ./conftest.sh | (csh >/dev/null 2>&1) >/dev/null 2>&1 + then + :; SH_SCRIPT_SED_CMD='1s/.*/:/' + else + :; SH_SCRIPT_SED_CMD='' + fi + rm -f conftest.sh + + echo checking for unistd.h echo checking how to run the C preprocessor *************** *** 567,571 **** #include extern "C" { void exit(int); } ! int main() { exit(0); } void t() { int opt = getopt(0, 0, 0); optarg = "foo"; optind = 1; } EOF if eval $cc_compile; then --- 582,586 ---- #include extern "C" { void exit(int); } ! int main() { exit(0); } void t() { int opt = getopt(0, 0, 0); } EOF if eval $cc_compile; then *************** *** 638,641 **** --- 653,666 ---- rm -f conftest* + echo checking for pid_t in sys/types.h + echo '#include ' > conftest.c + eval "$CPP $DEFS conftest.c > conftest.out 2>&1" + if egrep "pid_t" conftest.out >/dev/null 2>&1; then + : + else + DEFS="$DEFS -Dpid_t=int" + fi + rm -f conftest* + echo checking for vfork.h cat > conftest.c <neqn install_data: neqn --- 17,22 ---- neqn: neqn.sh -rm -f neqn ! sed -e 's/@g@/$(g)/g' -e "$(SH_SCRIPT_SED_CMD)" $(srcdir)/neqn.sh >neqn ! chmod +x neqn install_data: neqn diff -rc2P groff-1.07/eqn/box.cc groff-1.08/eqn/box.cc *** groff-1.07/eqn/box.cc Mon Jan 4 22:15:45 1993 --- groff-1.08/eqn/box.cc Sun Apr 4 14:28:29 1993 *************** *** 322,326 **** "\\s'\\\\n[" SAVED_INLINE_SIZE_REG "]u'" "\n"); ! printf(".as " LINE_STRING " \\E*[" SAVE_FONT_STRING "]"); printf("\\f[%s]", get_gfont()); printf("\\s'\\En[" SAVED_SIZE_REG "]u'"); --- 322,326 ---- "\\s'\\\\n[" SAVED_INLINE_SIZE_REG "]u'" "\n"); ! printf(".as " LINE_STRING " \\&\\E*[" SAVE_FONT_STRING "]"); printf("\\f[%s]", get_gfont()); printf("\\s'\\En[" SAVED_SIZE_REG "]u'"); diff -rc2P groff-1.07/eqn/eqn.y groff-1.08/eqn/eqn.y *** groff-1.07/eqn/eqn.y Mon Aug 3 11:27:40 1992 --- groff-1.08/eqn/eqn.y Wed Apr 7 12:47:57 1993 *************** *** 26,30 **** extern int non_empty_flag; char *strsave(const char *); - #define YYDEBUG 1 int yylex(); void yyerror(const char *); --- 26,29 ---- diff -rc2P groff-1.07/groff/groff.cc groff-1.08/groff/groff.cc *** groff-1.07/groff/groff.cc Fri Oct 2 10:34:29 1992 --- groff-1.08/groff/groff.cc Sat Apr 3 23:37:06 1993 *************** *** 377,386 **** possible_command::~possible_command() { ! delete name; ! delete argv; } void possible_command::set_name(const char *s) { name = strsave(s); } --- 377,387 ---- possible_command::~possible_command() { ! a_delete name; ! a_delete argv; } void possible_command::set_name(const char *s) { + a_delete name; name = strsave(s); } *************** *** 388,391 **** --- 389,393 ---- void possible_command::set_name(const char *s1, const char *s2) { + a_delete name; name = new char[strlen(s1) + strlen(s2) + 1]; strcpy(name, s1); diff -rc2P groff-1.07/grog/Makefile.sub groff-1.08/grog/Makefile.sub *** groff-1.07/grog/Makefile.sub Wed Oct 28 12:48:47 1992 --- groff-1.08/grog/Makefile.sub Mon Apr 19 09:47:11 1993 *************** *** 9,15 **** sed -e 's;/usr/bin/perl;$(PERLPATH);' $(srcdir)/grog.pl >$@; \ else \ ! cp $(srcdir)/grog.sh grog; \ fi ! chmod +x grog; install_data: grog --- 9,16 ---- sed -e 's;/usr/bin/perl;$(PERLPATH);' $(srcdir)/grog.pl >$@; \ else \ ! rm -f $@; \ ! sed "$(SH_SCRIPT_SED_CMD)" $(srcdir)/grog.sh >$@; \ fi ! chmod +x $@ install_data: grog diff -rc2P groff-1.07/grops/grops.man groff-1.08/grops/grops.man *** groff-1.07/grops/grops.man Tue Aug 11 14:07:24 1992 --- groff-1.08/grops/grops.man Mon Apr 5 10:28:23 1993 *************** *** 96,99 **** --- 96,105 ---- .B %%EndDocument comments. + Add 8 if the first line of the PostScript output should be + .B %!PS-Adobe-2.0 + rather than + .BR %!PS-Adobe-3.0 ; + this is needed when using Sun's Newsprint with a printer that requires + page reversal. The default value can be specified by a .RS diff -rc2P groff-1.07/grops/ps.cc groff-1.08/grops/ps.cc *** groff-1.07/grops/ps.cc Sun Feb 21 11:16:17 1993 --- groff-1.08/grops/ps.cc Mon Apr 5 10:22:16 1993 *************** *** 1100,1104 **** if (fseek(tempfp, 0L, 0) < 0) fatal("fseek on temporary file failed"); ! fputs("%!PS-Adobe-3.0\n", stdout); out.set_file(stdout); { --- 1100,1106 ---- if (fseek(tempfp, 0L, 0) < 0) fatal("fseek on temporary file failed"); ! fputs("%!PS-Adobe-", stdout); ! fputs((broken_flags & USE_PS_ADOBE_2_0) ? "2.0" : "3.0", stdout); ! putchar('\n'); out.set_file(stdout); { diff -rc2P groff-1.07/grops/ps.h groff-1.08/grops/ps.h *** groff-1.07/grops/ps.h Mon Aug 3 11:28:48 1992 --- groff-1.08/grops/ps.h Mon Apr 5 10:23:53 1993 *************** *** 118,121 **** NO_SETUP_SECTION = 01, STRIP_PERCENT_BANG = 02, ! STRIP_STRUCTURE_COMMENTS = 04 ! }; --- 118,122 ---- NO_SETUP_SECTION = 01, STRIP_PERCENT_BANG = 02, ! STRIP_STRUCTURE_COMMENTS = 04, ! USE_PS_ADOBE_2_0 = 010 ! }; diff -rc2P groff-1.07/grotty/tty.cc groff-1.08/grotty/tty.cc *** groff-1.07/grotty/tty.cc Sun Sep 20 10:12:19 1992 --- groff-1.08/grotty/tty.cc Thu Apr 1 12:51:28 1993 *************** *** 220,224 **** for (glyph **pp = lines + (vpos - 1); *pp; pp = &(*pp)->next) ! if ((*pp)->hpos < hpos || ((*pp)->hpos == hpos && (*pp)->draw_mode() >= g->draw_mode())) break; --- 220,224 ---- for (glyph **pp = lines + (vpos - 1); *pp; pp = &(*pp)->next) ! if (int((*pp)->hpos) < hpos || ((*pp)->hpos == hpos && (*pp)->draw_mode() >= g->draw_mode())) break; *************** *** 274,277 **** --- 274,278 ---- if (lines[last_line - 1]) break; + #if 0 if (last_line > lines_per_page) { error("characters past last line discarded"); *************** *** 285,288 **** --- 286,290 ---- } while (last_line > lines_per_page); } + #endif for (int i = 0; i < last_line; i++) { glyph *p = lines[i]; *************** *** 312,316 **** continue; } ! if (hpos > p->hpos) { putchar('\b'); hpos--; --- 314,318 ---- continue; } ! if (hpos > int(p->hpos)) { putchar('\b'); hpos--; *************** *** 320,324 **** for (;;) { int next_tab_pos = ((hpos + TAB_WIDTH) / TAB_WIDTH) * TAB_WIDTH; ! if (next_tab_pos > p->hpos) break; putchar('\t'); --- 322,326 ---- for (;;) { int next_tab_pos = ((hpos + TAB_WIDTH) / TAB_WIDTH) * TAB_WIDTH; ! if (next_tab_pos > int(p->hpos)) break; putchar('\t'); *************** *** 326,330 **** } } ! for (; hpos < p->hpos; hpos++) putchar(' '); } --- 328,332 ---- } } ! for (; hpos < int(p->hpos); hpos++) putchar(' '); } diff -rc2P groff-1.07/include/lib.h groff-1.08/include/lib.h *** groff-1.07/include/lib.h Sun Feb 21 14:47:44 1993 --- groff-1.08/include/lib.h Mon Mar 29 17:09:11 1993 *************** *** 36,44 **** extern "C" { int getopt(int, char **, const char *); extern char *optarg; extern int optind; extern int opterr; } ! #endif /* not UNISTD_H_DECLARES_GETOPT */ #endif /* not STDLIB_H_DECLARES_GETOPT */ --- 36,48 ---- extern "C" { int getopt(int, char **, const char *); + } + #endif /* not UNISTD_H_DECLARES_GETOPT */ + + extern "C" { extern char *optarg; extern int optind; extern int opterr; } ! #endif /* not STDLIB_H_DECLARES_GETOPT */ diff -rc2P groff-1.07/indxbib/indxbib.man groff-1.08/indxbib/indxbib.man *** groff-1.07/indxbib/indxbib.man Fri Feb 19 22:44:45 1993 --- groff-1.08/indxbib/indxbib.man Fri Apr 16 09:20:51 1993 *************** *** 119,123 **** .I string is ! .B XYZ . .TP .BI \-h n --- 119,123 ---- .I string is ! .BR XYZ . .TP .BI \-h n diff -rc2P groff-1.07/mm/ChangeLog groff-1.08/mm/ChangeLog *** groff-1.07/mm/ChangeLog Wed Mar 3 08:21:47 1993 --- groff-1.08/mm/ChangeLog Mon Apr 5 08:35:10 1993 *************** *** 1,2 **** --- 1,38 ---- + Mon Mar 29 10:53:13 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.16 + * MUL* now use the previus font and family. + * extra blank page at end-of-text eliminated. + + Mon Mar 8 10:27:47 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.15 + * Didn't restore pointsize to current size in .H. + * B1/B2 did not work with indent. (MULE and friends) + * fixed old problem with trailing empty pages. + + Fri Mar 5 15:20:49 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.14 + * Sigh. Amazing what a missing \} can do. If the string + HP was set, then all text disappeared... + + Fri Mar 5 14:12:43 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.13 + * Fixed bug with handling ps/vs in .H. (again, sigh... ) + + Wed Mar 3 09:21:20 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.12 + * Line-break added to PGFORM. + * added more features to VERBON + * .S is not used anymore in H, it caused confusion with + normal text, but it will still set .vs. + * SK was broken, will now produce the requested number of + empty pages. + * dotted lines added to LIST OF FIGURES adn friends. + Also better linespacing. + Mon Feb 22 12:41:06 1993 Joergen Haegg (jh at efd.lth.se) diff -rc2P groff-1.07/mm/groff_mm.man groff-1.08/mm/groff_mm.man *** groff-1.07/mm/groff_mm.man Mon Feb 22 10:05:20 1993 --- groff-1.08/mm/groff_mm.man Fri Mar 5 07:52:11 1993 *************** *** 172,183 **** reset tabs to every 5n. Normally used to reset any previous tabpositions. .TP ! .B VERBON [1/0 [pointsize [font]]] Begin verbatim output using courier font. Usually for printing programs. All character has equal width. ! Escape-character (\e) is normally turned off, but can be enabled by ! setting the first argument to 1. Th pointsize can also be changed with the second argument. By specifying the font-argument it is possible to use another font instead of courier. .TP .B VERBOFF --- 172,215 ---- reset tabs to every 5n. Normally used to reset any previous tabpositions. .TP ! .B VERBON [flag [pointsize [font]]] Begin verbatim output using courier font. Usually for printing programs. All character has equal width. ! The pointsize can be changed with the second argument. By specifying the font-argument it is possible to use another font instead of courier. + \fIflag\fP control several special features. + It contains the sum of all wanted features. + .in +.5i + .ti -.5i + Value + .sp -1 + Description + .ti -.5i + 1 + .sp -1 + Enable the escape-character (\e). This is normally turned off during + verbose output. + .ti -.5i + 2 + .sp -1 + Add en empty line before the verbose text. + .ti -.5i + 4 + .sp -1 + Add en empty line after the verbose text. + .ti -.5i + 8 + .sp -1 + Print the verbose text with numbered lines. This adds four digitsized + spaces in the beginning of each line. Finer control is available with + the string-variable \fBVerbnm\fP. It contains all arguments to the + \fBtroff\fP-command \fB.nm\fP, normally '1'. + .ti -.5i + 16 + .sp -1 + Indent the verbose text with five 'n':s. This is controlled by the + number-variable \fBVerbin\fP (in units). + .in .TP .B VERBOFF diff -rc2P groff-1.07/mm/tmac.m groff-1.08/mm/tmac.m *** groff-1.07/mm/tmac.m Wed Mar 3 08:21:56 1993 --- groff-1.08/mm/tmac.m Mon Apr 5 08:33:08 1993 *************** *** 1,4 **** .\" Version: ! .ds RE 1.11 .ig --- 1,4 ---- .\" Version: ! .ds RE 1.16 .ig *************** *** 217,220 **** --- 217,226 ---- .nr Sectf 0 .if \n[N]=5 .nr Sectf 1 + .\" + .\" argument to .nm in .VERBON. + .ds Verbnm "1 + .\" indent for VERBON + .nr Verbin 5n + .\" .nr .mgm 1 .\" *************** *** 380,383 **** --- 386,392 ---- .\" .PGFORM linelength [ pagelength [ pageoffset ] ] .de PGFORM + .\" Break here to avoid problems with new linesetting of the previous line. + .\" Hope this doesn't break anything else :-) + .br .if !''\\$1' .nr @ll \\$1 .if !''\\$2' .nr @pl \\$2 *************** *** 438,441 **** --- 447,451 ---- . el .ds misc*a \\$1 .\} + .\" .\" set point size .if !'\\*[misc*a]'C' \{\ *************** *** 446,449 **** --- 456,460 ---- . \} .\} + .\" .\" set vertical spacing .if !'\\*[misc*b]'C' \{\ *************** *** 491,499 **** .. .\"------------ ! .\" VERBON [escape on/off [pointsize [font]]] .de VERBON .br .misc@ev-keep misc*verb-ev .nf .ie !'\\$3'' .ft \\$3 .el .ft CR --- 502,520 ---- .. .\"------------ ! .\" VERBON [flag [pointsize [font]]] ! .\" flag ! .\" bit function ! .\" 0 escape on ! .\" 1 add an empty line before verbose text ! .\" 2 add an empty line after verbose text ! .\" 4 numbered lines (controlled by the string Verbnm) ! .\" 8 indent text by the numbervariable Verbin. .de VERBON + .nr misc*verb 0\\$1 + .if (0\\n[misc*verb]%4)/2 .SP \\n[Lsp]u .br .misc@ev-keep misc*verb-ev .nf + .if (0\\n[misc*verb]%16)/8 .nm \\*[Verbnm] .ie !'\\$3'' .ft \\$3 .el .ft CR *************** *** 504,512 **** . vs \\$2 .\} ! .nr @verbose-flag 1 \" tell pageheader to set ec/eo ! .if !0\\$1 .eo .. .de VERBOFF .ec .ev .nr @verbose-flag 0 --- 525,539 ---- . vs \\$2 .\} ! .if (0\\n[misc*verb]%32)/16 .in +\\n[Verbin]u ! .if !(0\\n[misc*verb]%2) \{\ ! . eo ! . nr @verbose-flag 1 \" tell pageheader to set ec/eo ! .\} .. .de VERBOFF .ec + .if (0\\n[misc*verb]%8)/4 .SP \\n[Lsp]u + .if (0\\n[misc*verb]%16)/8 .nm + .if (0\\n[misc*verb]%32)/16 .in .ev .nr @verbose-flag 0 *************** *** 639,647 **** .ie (\\*[hd*new-ps]=0):(\w@\\*[hd*new-ps]@=0) \{\ . if \\n[hd*htype] \{\ ! . if '\\*[hd*font]'3' .S -1 ! . if '\\*[hd*font]'B' .S -1 . \} .\} ! .el .S \\*[hd*new-ps] .\" .\"---------- user macro HY ------------- --- 666,683 ---- .ie (\\*[hd*new-ps]=0):(\w@\\*[hd*new-ps]@=0) \{\ . if \\n[hd*htype] \{\ ! . if '\\*[hd*font]'3' \{\ ! . ps -1 ! . vs -1 ! . \} ! . if '\\*[hd*font]'B' \{\ ! . ps -1 ! . vs -1 ! . \} . \} .\} ! .el \{\ ! . ps \\*[hd*new-ps] ! . vs \\*[hd*new-ps]+2 ! .\} .\" .\"---------- user macro HY ------------- *************** *** 661,665 **** .el \\$2\\$3\\*[hd*suf-space]\&\c .ft 1 ! .S P P .\" .\" table of contents --- 697,703 ---- .el \\$2\\$3\\*[hd*suf-space]\&\c .ft 1 ! .\" restore pointsize and vertical size. ! .ps \\n[@ps] ! .vs \\n[@vs] .\" .\" table of contents *************** *** 849,852 **** --- 887,891 ---- .de pg@footer .ec + .if \\n[D]>2 .tm Footer# \\n[%] (\\n[.F]:\\n[c.]) .pg@disable-trap .\".debug footer *************** *** 978,988 **** .\" print out all pending text .de pg@end-of-text ! .\" non-empty environment ! .misc@ev-keep ne ! .init@reset ! \c ! .ds@print-float 3 ! .ev ! .if d ref*div .RP .. .\"------------------------- --- 1017,1023 ---- .\" print out all pending text .de pg@end-of-text ! .if \\n[D]>2 .tm ---------- End of text processing ---------------- ! .ds@eot-print ! .ref@eot-print .. .\"------------------------- *************** *** 1074,1078 **** .bp .nr pg*i 0 1 ! .while \\n+[pg*i]<=(0\\$1) .bp .. .\"------------------------------- --- 1109,1117 ---- .bp .nr pg*i 0 1 ! .\" force new page by writing something invisible. ! .while \\n+[pg*i]<=(0\\$1) \{\ ! \& ! . bp ! .\} .. .\"------------------------------- *************** *** 1090,1094 **** --- 1129,1137 ---- .\} .nr pg*mul-max-col \\n[pg*i] + .ds pg*mul-fam \\n[.fam] + .nr pg*mul-font \\n[.f] .ev pg*mul-ev + .fam \\*[pg*mul-fam] + .ft \\n[pg*mul-font] .fi .hy 14 *************** *** 1355,1359 **** .if \\n[.$]>2 .nr ds*rindent \\$3 .\" ! .\" .nr ds*old-ll \\n[.l] .misc@push ds-ll \\n[.l] --- 1398,1402 ---- .if \\n[.$]>2 .nr ds*rindent \\$3 .\" ! .\"--------------- .nr ds*old-ll \\n[.l] .misc@push ds-ll \\n[.l] *************** *** 1451,1454 **** --- 1494,1510 ---- .\} .. + .\"------------- + .\" called by end-of-text + .de ds@eot-print + .if \\n[ds*o-fnr]<=\\n[ds*fnr] \{\ + . if \\n[D]>2 .tm Print remaining displays. + .\" still some floats left, make non-empty environment + . misc@ev-keep ne + . init@reset + \c + . ds@print-float 3 + . ev + .\} + .. .\"--------------- .\" print according to Df and De. *************** *** 1840,1845 **** .de TC .br ! .\" print any pending displays ! .pg@end-of-text .if \w@\\$1@>0 .nr toc*slevel \\$1 .if \w@\\$2@>0 .nr toc*spacing (u;\\$2*\\n[Lsp]) --- 1896,1903 ---- .de TC .br ! .\" print any pending displays and references ! .ds@print-float 3 ! .if \\n[ref*flag] .RP 0 1 ! .\" .if \w@\\$1@>0 .nr toc*slevel \\$1 .if \w@\\$2@>0 .nr toc*spacing (u;\\$2*\\n[Lsp]) *************** *** 1873,1877 **** . SP 3 .\} ! .toc*list .\" print LIST OF XXX .if d lix*dsfg .lix@print-ds fg "\\*[Lf]" --- 1931,1935 ---- . SP 3 .\} ! .if d toc*list .toc*list .\" print LIST OF XXX .if d lix*dsfg .lix@print-ds fg "\\*[Lf]" *************** *** 2063,2073 **** .nr lix*i \\n[lix*wth\\$1]-\w@\\$4@ .ne 2v ! .ll -4m ! .ti 0 ! \h'\\n[lix*i]u'\\$4\\$3 ! .sp -1 ! .ll ! .ti \\n[.l]u-\w@\\$2@u ! \\$2 .. .\"########################### module fnt ############################ --- 2121,2127 ---- .nr lix*i \\n[lix*wth\\$1]-\w@\\$4@ .ne 2v ! .nr lix*sep \\n[.l]-\\n[lix*i]-\w'\\$4\\$3\\$2'-1m-1n-\\n[.i] ! \h'\\n[lix*i]u'\\$4\\$3\h'1n'\l'\\n[lix*sep]u.'\h'1m'\\$2 ! .SP \\n[toc*spacing]u .. .\"########################### module fnt ############################ *************** *** 2128,2134 **** .nr box*ind \\n[.i] .nr box*hyp \\n[.hy] ! .in +1n ! .ll -1n .di box*div .hy \\n[.hy] .. --- 2182,2192 ---- .nr box*ind \\n[.i] .nr box*hyp \\n[.hy] ! .nr box*wid \\n[.l]-\\n[.i] ! .\" ! .\" jump to new environment. ! .ev box*ev .di box*div + .in 1n + .ll (u;\\n[box*wid]-1n) .hy \\n[.hy] .. *************** *** 2139,2145 **** .nr box*height \\n[dn] .ne \\n[dn]u+1v - .ev box*ev .ll \\n[box*ll]u ! .in 0 .nr box*y-pos \\n[.d]u .nf --- 2197,2202 ---- .nr box*height \\n[dn] .ne \\n[dn]u+1v .ll \\n[box*ll]u ! .in \\n[box*ind]u .nr box*y-pos \\n[.d]u .nf *************** *** 2147,2153 **** .fi \v'-1v+.25m'\ ! \D'l \\n[.l]u 0'\ \D'l 0 -\\n[box*height]u'\ ! \D'l -\\n[.l]u 0'\ \D'l 0 \\n[box*height]u' .br --- 2204,2210 ---- .fi \v'-1v+.25m'\ ! \D'l \\n[box*wid]u 0'\ \D'l 0 -\\n[box*height]u'\ ! \D'l -\\n[box*wid]u 0'\ \D'l 0 \\n[box*height]u' .br *************** *** 2163,2170 **** --- 2220,2230 ---- .nr ref*nr 0 1 .nr ref*nr-width 5n + .nr ref*flag 0 \" for end-of-text .ds Rf \v'-.4m'\s-3[\\n+[ref*nr]]\s0\v'.4m' + .\" .\" start reference .de RS .if !''\\$1' .ds \\$1 \\n[ref*nr] + .nr ref*flag 1 .ev ref*ev .da ref*div *************** *** 2182,2190 **** --- 2242,2274 ---- .ev .. + .\"----------- .de RP .if !d ref*div .@error "RP: No references!" + .nr ref*flag 0 .nr ref*i 0\\$2 .if \\n[ref*i]<2 .SK .SP 2 + .ref@print-refs + .if 0\\$1<1 .nr ref*nr 0 1 + .if ((\\n[ref*i]=0):(\\n[ref*i]=2)) .SK + .. + .\"----------- + .\" called by end-of-text! + .de ref@eot-print + .if \\n[ref*flag] \{\ + . if \\n[D]>2 .tm Print references, called by eot + . nr ref*flag 0 + . br + . misc@ev-keep ne + . init@reset + \c + ' bp + . ev + . ref@print-refs + .\} + .. + .\"----------- + .\" prints the references + .de ref@print-refs .toc@save 1 "" "\\*[Rp]" \\n[%] .ev ref*ev *************** *** 2196,2203 **** .ref*div .in - .if 0\\$1<1 .nr ref*nr 0 1 .rm ref*div .ev - .if ((\\n[ref*i]=0):(\\n[ref*i]=2)) .SK .. .\"########################### module app ############################ --- 2280,2285 ---- diff -rc2P groff-1.07/nroff/Makefile.sub groff-1.08/nroff/Makefile.sub *** groff-1.07/nroff/Makefile.sub Wed Oct 28 12:48:40 1992 --- groff-1.08/nroff/Makefile.sub Mon Apr 19 09:46:21 1993 *************** *** 1,8 **** MAN1=nroff.n NAMEPREFIX=$(g) ! install_data: nroff.sh -rm -f $(bindir)/$(NAMEPREFIX)nroff ! $(INSTALL_PROGRAM) $(srcdir)/nroff.sh $(bindir)/$(NAMEPREFIX)nroff uninstall_sub: --- 1,16 ---- MAN1=nroff.n NAMEPREFIX=$(g) + CLEANADD=nroff ! all: nroff ! ! nroff: nroff.sh ! rm -f $@ ! sed "$(SH_SCRIPT_SED_CMD)" $(srcdir)/nroff.sh >$@ ! chmod +x $@ ! ! install_data: nroff -rm -f $(bindir)/$(NAMEPREFIX)nroff ! $(INSTALL_PROGRAM) nroff $(bindir)/$(NAMEPREFIX)nroff uninstall_sub: diff -rc2P groff-1.07/nroff/conftest.sh groff-1.08/nroff/conftest.sh *** groff-1.07/nroff/conftest.sh --- groff-1.08/nroff/conftest.sh Sun Apr 18 20:58:47 1993 *************** *** 0 **** --- 1,4 ---- + #!/bin/csh + true || exit 0 + export PATH || exit 0 + exit 1 diff -rc2P groff-1.07/nroff/nroff.sh groff-1.08/nroff/nroff.sh *** groff-1.07/nroff/nroff.sh Wed Jun 3 09:28:11 1992 --- groff-1.08/nroff/nroff.sh Fri Apr 2 11:53:27 1993 *************** *** 3,6 **** --- 3,7 ---- prog="$0" + # Default device. T=-Tascii opts= diff -rc2P groff-1.07/pic/lex.cc groff-1.08/pic/lex.cc *** groff-1.07/pic/lex.cc Thu Oct 22 05:07:01 1992 --- groff-1.08/pic/lex.cc Tue Mar 30 20:47:50 1993 *************** *** 478,483 **** "log", LOG, "lower", LOWER, ! "max", MAX, ! "min", MIN, "move", MOVE, "of", OF, --- 478,483 ---- "log", LOG, "lower", LOWER, ! "max", K_MAX, ! "min", K_MIN, "move", MOVE, "of", OF, diff -rc2P groff-1.07/pic/pic.y groff-1.08/pic/pic.y *** groff-1.07/pic/pic.y Mon Aug 3 11:26:53 1992 --- groff-1.08/pic/pic.y Thu Apr 8 12:35:39 1993 *************** *** 42,49 **** #define GDIGITS 14 - #ifndef __BORLANDC__ - #define YYDEBUG 1 - #endif /* __BORLANDC__ */ - int yylex(); void yyerror(const char *); --- 42,45 ---- *************** *** 169,174 **** %token EXP %token SQRT ! %token MAX ! %token MIN %token INT %token RAND --- 165,170 ---- %token EXP %token SQRT ! %token K_MAX ! %token K_MIN %token INT %token RAND *************** *** 227,231 **** %left LABEL ! %left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT MAX MIN INT RAND LAST %left ORDINAL HERE '`' --- 223,227 ---- %left LABEL ! %left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND LAST %left ORDINAL HERE '`' *************** *** 342,345 **** --- 338,342 ---- { fprintf(stderr, "%s\n", $2.str); + a_delete $2.str; fflush(stderr); } *************** *** 1479,1485 **** } } ! | MAX '(' any_expr ',' any_expr ')' { $$ = $3 > $5 ? $3 : $5; } ! | MIN '(' any_expr ',' any_expr ')' { $$ = $3 < $5 ? $3 : $5; } | INT '(' any_expr ')' --- 1476,1482 ---- } } ! | K_MAX '(' any_expr ',' any_expr ')' { $$ = $3 > $5 ? $3 : $5; } ! | K_MIN '(' any_expr ',' any_expr ')' { $$ = $3 < $5 ? $3 : $5; } | INT '(' any_expr ')' diff -rc2P groff-1.07/refer/ref.cc groff-1.08/refer/ref.cc *** groff-1.07/refer/ref.cc Mon Aug 3 11:30:11 1992 --- groff-1.08/refer/ref.cc Tue Mar 30 20:41:56 1993 *************** *** 200,204 **** field = new string[nfields + 1]; int pos = 0; ! for (int i = 0; i < c; i++) if (field_index[i] != NULL_FIELD_INDEX) pos++; --- 200,204 ---- field = new string[nfields + 1]; int pos = 0; ! for (int i = 0; i < int(c); i++) if (field_index[i] != NULL_FIELD_INDEX) pos++; *************** *** 223,227 **** string *old_field = field; field = new string[nfields - 1]; ! for (int i = 0; i < field_index[c]; i++) field[i].move(old_field[i]); for (i = field_index[c]; i < nfields - 1; i++) --- 223,227 ---- string *old_field = field; field = new string[nfields - 1]; ! for (int i = 0; i < int(field_index[c]); i++) field[i].move(old_field[i]); for (i = field_index[c]; i < nfields - 1; i++) diff -rc2P groff-1.07/tbl/main.cc groff-1.08/tbl/main.cc *** groff-1.07/tbl/main.cc Wed Nov 11 11:06:18 1992 --- groff-1.08/tbl/main.cc Thu Apr 1 11:36:13 1993 *************** *** 327,330 **** --- 327,331 ---- char delim[2]; char tab_char; + char decimal_point_char; options(); *************** *** 332,336 **** options::options() ! : flags(0), tab_char('\t'), linesize(0) { delim[0] = delim[1] = '\0'; --- 333,337 ---- options::options() ! : flags(0), tab_char('\t'), decimal_point_char('.'), linesize(0) { delim[0] = delim[1] = '\0'; *************** *** 471,474 **** --- 472,485 ---- opt->flags |= table::NOKEEP; } + else if (strieq(p, "decimalpoint")) { + if (!arg) + error("`decimalpoint' option requires argument in parentheses"); + else { + if (arg[0] == '\0' || arg[1] != '\0') + error("argument to `decimalpoint' option must be a single character"); + else + opt->decimal_point_char = arg[0]; + } + } else { error("unrecognised global option `%1'", p); *************** *** 1120,1124 **** int give_up = 0; enum { DATA_INPUT_LINE, TROFF_INPUT_LINE, SINGLE_HLINE, DOUBLE_HLINE } type; ! table *tbl = new table(ncolumns, opt->flags, opt->linesize); if (opt->delim[0] != '\0') tbl->set_delim(opt->delim[0], opt->delim[1]); --- 1131,1136 ---- int give_up = 0; enum { DATA_INPUT_LINE, TROFF_INPUT_LINE, SINGLE_HLINE, DOUBLE_HLINE } type; ! table *tbl = new table(ncolumns, opt->flags, opt->linesize, ! opt->decimal_point_char); if (opt->delim[0] != '\0') tbl->set_delim(opt->delim[0], opt->delim[1]); diff -rc2P groff-1.07/tbl/table.cc groff-1.08/tbl/table.cc *** groff-1.07/tbl/table.cc Wed Mar 3 04:51:37 1993 --- groff-1.08/tbl/table.cc Thu Apr 1 11:35:55 1993 *************** *** 95,99 **** void restore_inline_modifier(const entry_modifier *m); void set_modifier(const entry_modifier *); ! int find_dot(const char *s, const char *delim); string an_empty_string; --- 95,100 ---- void restore_inline_modifier(const entry_modifier *m); void set_modifier(const entry_modifier *); ! int find_decimal_point(const char *s, char decimal_point_char, ! const char *delim); string an_empty_string; *************** *** 1197,1202 **** } ! table::table(int nc, unsigned f, int ls) ! : ncolumns(nc), flags(f), linesize(ls), nrows(0), allocated_rows(0), entry(0), entry_list(0), left_separation(0), right_separation(0), stuff_list(0), vline(0), --- 1198,1203 ---- } ! table::table(int nc, unsigned f, int ls, char dpc) ! : ncolumns(nc), flags(f), linesize(ls), decimal_point_char(dpc), nrows(0), allocated_rows(0), entry(0), entry_list(0), left_separation(0), right_separation(0), stuff_list(0), vline(0), *************** *** 1398,1402 **** } ! int find_dot(const char *s, const char *delim) { if (s == 0 || *s == '\0') --- 1399,1404 ---- } ! int find_decimal_point(const char *s, char decimal_point_char, ! const char *delim) { if (s == 0 || *s == '\0') *************** *** 1423,1427 **** else if (*p == delim[0]) in_delim = 1; ! else if (p[0] == '.' && csdigit(p[1])) possible_pos = p - s; if (possible_pos >= 0) --- 1425,1429 ---- else if (*p == delim[0]) in_delim = 1; ! else if (p[0] == decimal_point_char && csdigit(p[1])) possible_pos = p - s; if (possible_pos >= 0) *************** *** 1535,1539 **** } else { ! int pos = find_dot(s, delim); if (pos < 0) e = new center_text_entry(s, f); --- 1537,1541 ---- } else { ! int pos = find_decimal_point(s, decimal_point_char, delim); if (pos < 0) e = new center_text_entry(s, f); diff -rc2P groff-1.07/tbl/table.h groff-1.08/tbl/table.h *** groff-1.07/tbl/table.h Wed Nov 11 11:05:51 1992 --- groff-1.08/tbl/table.h Thu Apr 1 11:36:01 1993 *************** *** 80,83 **** --- 80,84 ---- int linesize; char delim[2]; + char decimal_point_char; vertical_rule *vrule_list; stuff *stuff_list; *************** *** 128,132 **** NOKEEP = 040 }; ! table(int nc, unsigned flags, int linesize); ~table(); --- 129,133 ---- NOKEEP = 040 }; ! table(int nc, unsigned flags, int linesize, char decimal_point_char); ~table(); diff -rc2P groff-1.07/tbl/tbl.man groff-1.08/tbl/tbl.man *** groff-1.07/tbl/tbl.man Wed Mar 3 04:37:24 1993 --- groff-1.08/tbl/tbl.man Thu Apr 1 12:04:18 1993 *************** *** 67,70 **** --- 67,79 ---- .LP The + .B decimalpoint + option specifies the character to be recognized as the decimal + point character in place of the default period. + It takes an argument in parentheses, which must be a single + character, as for the + .B tab + option. + .LP + The .B f format modifier can be followed by an arbitrary length diff -rc2P groff-1.07/tmac/tmac.an groff-1.08/tmac/tmac.an *** groff-1.07/tmac/tmac.an Mon Aug 17 18:19:25 1992 --- groff-1.08/tmac/tmac.an Fri Apr 2 11:24:05 1993 *************** *** 27,34 **** .\" .if !\n(.g .ab These man macros work only with groff. ! .if \n(.C \{\ ! . tm Warning: turning off compatibility mode ! . cp 0 ! .\} .if !rD .nr D 0 .if !rC .nr C 0 --- 27,32 ---- .\" .if !\n(.g .ab These man macros work only with groff. ! .nr _C \n(.C ! .cp 0 .if !rD .nr D 0 .if !rC .nr C 0 *************** *** 36,39 **** --- 34,38 ---- .\" .TH title section extra1 extra2 extra3 .de TH + .cp 0 .de an-init \" We have to do it like this to get multiple man pages right. .ds an-title "\\$1 *************** *** 59,62 **** --- 58,64 ---- .nr an-break-flag 0 .nr an-div? 0 + .wh 0 an-header + .wh -1i an-footer + .wh -.5i an-p-footer .if \\n[nl]>0 \{\ . ie \\nC .bp \\n%+1 *************** *** 71,75 **** .el .nr PD .4v>?\n[.V] .. - .wh 0 an-header .de an-header .an-init --- 73,76 ---- *************** *** 81,89 **** .ns .. - .wh -1i an-footer .de an-footer 'bp .. - .wh -.5i an-p-footer .af an-page-letter a .de an-p-footer --- 82,88 ---- *************** *** 325,326 **** --- 324,326 ---- .\" Load local modifications. .mso man.local + .cp \n(_C diff -rc2P groff-1.07/tmac/tmac.e groff-1.08/tmac/tmac.e *** groff-1.07/tmac/tmac.e Mon Jan 4 23:49:55 1993 --- groff-1.08/tmac/tmac.e Mon Apr 5 23:15:30 1993 *************** *** 1029,1035 **** .if !"\\*([P"" pp. \\*([P in \\f2\\*([B\\f1, \c ! .if !"\\*([E"" ed. \\*([E,\c .if !"\\*([I"" \\*([I\c ! .if !"\\*([C"" , \\*([C\c (\\*([D). .if !"\\*([O"" \\*([O --- 1029,1035 ---- .if !"\\*([P"" pp. \\*([P in \\f2\\*([B\\f1, \c ! .if !"\\*([E"" ed. \\*([E, \c .if !"\\*([I"" \\*([I\c ! .if !"\\*([C"" , \\*([C\c (\\*([D). .if !"\\*([O"" \\*([O *************** *** 1042,1047 **** \\*([R\c .if !"\\*([G"" \& (\\*([G)\c ! .if !"\\*([I"" , \\*([I\c ! .if !"\\*([C"" , \\*([C\c (\\*([D). .if !"\\*([O"" \\*([O --- 1042,1047 ---- \\*([R\c .if !"\\*([G"" \& (\\*([G)\c ! .if !"\\*([I"" , \\*([I\c ! .if !"\\*([C"" , \\*([C\c (\\*([D). .if !"\\*([O"" \\*([O diff -rc2P groff-1.07/troff/div.cc groff-1.08/troff/div.cc *** groff-1.07/troff/div.cc Thu Oct 29 10:19:19 1992 --- groff-1.08/troff/div.cc Tue Apr 13 10:30:58 1993 *************** *** 262,267 **** mac->append('\n'); vertical_position += x; ! if (vertical_position > high_water_mark) ! high_water_mark = vertical_position; } --- 262,267 ---- mac->append('\n'); vertical_position += x; ! if (vertical_position - v.post > high_water_mark) ! high_water_mark = vertical_position - v.post; } *************** *** 279,284 **** mac->append(new diverted_space_node(n)); vertical_position += n; - if (vertical_position > high_water_mark) - high_water_mark = vertical_position; } --- 279,282 ---- *************** *** 291,295 **** : page_count(0), have_next_page_number(0), page_length(units_per_inch*11), page_offset(units_per_inch), prev_page_offset(units_per_inch), ! ejecting_page(0), page_trap_list(0), first_page_begun(0), no_space_mode(0), page_number(0), last_page_count(-1) { --- 289,293 ---- : page_count(0), have_next_page_number(0), page_length(units_per_inch*11), page_offset(units_per_inch), prev_page_offset(units_per_inch), ! ejecting_page(0), page_trap_list(0), before_first_page(1), no_space_mode(0), page_number(0), last_page_count(-1) { *************** *** 338,342 **** vunits next_trap_pos; trap *next_trap = find_next_trap(&next_trap_pos); ! if (!first_page_begun && begin_page()) fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request"); vertical_size v(vs, ls); --- 336,340 ---- vunits next_trap_pos; trap *next_trap = find_next_trap(&next_trap_pos); ! if (before_first_page && begin_page()) fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request"); vertical_size v(vs, ls); *************** *** 354,357 **** --- 352,357 ---- v.pre + v.pre_extra, v.post_extra); vertical_position += v.post_extra; + if (vertical_position > high_water_mark) + high_water_mark = vertical_position; if (vertical_position_traps_flag && vertical_position >= page_length) begin_page(); *************** *** 360,365 **** nl_reg_contents = vertical_position.to_units(); truncated_space = v.post; - if (vertical_position > high_water_mark) - high_water_mark = vertical_position; spring_trap(next_trap->nm); } --- 360,363 ---- *************** *** 371,396 **** vertical_position = next_trap_pos; nl_reg_contents = vertical_position.to_units(); - if (vertical_position > high_water_mark) - high_water_mark = vertical_position; spring_trap(next_trap->nm); } else if (vertical_position_traps_flag && vertical_position >= page_length) begin_page(); ! else { nl_reg_contents = vertical_position.to_units(); - if (vertical_position > high_water_mark) - high_water_mark = vertical_position; - } } ! else { nl_reg_contents = vertical_position.to_units(); - if (vertical_position > high_water_mark) - high_water_mark = vertical_position; - } } void top_level_diversion::transparent_output(unsigned char c) { ! if (!first_page_begun && begin_page()) // This can only happen with the transparent() request. fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request"); --- 369,386 ---- vertical_position = next_trap_pos; nl_reg_contents = vertical_position.to_units(); spring_trap(next_trap->nm); } else if (vertical_position_traps_flag && vertical_position >= page_length) begin_page(); ! else nl_reg_contents = vertical_position.to_units(); } ! else nl_reg_contents = vertical_position.to_units(); } void top_level_diversion::transparent_output(unsigned char c) { ! if (before_first_page && begin_page()) // This can only happen with the transparent() request. fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request"); *************** *** 407,411 **** void top_level_diversion::copy_file(const char *filename) { ! if (!first_page_begun && begin_page()) fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request"); the_output->copy_file(page_offset, vertical_position, filename); --- 397,401 ---- void top_level_diversion::copy_file(const char *filename) { ! if (before_first_page && begin_page()) fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request"); the_output->copy_file(page_offset, vertical_position, filename); *************** *** 420,424 **** no_space_mode = 0; } ! if (!first_page_begun) { if (begin_page()) { // This happens if there's a top of page trap, and the first-page --- 410,414 ---- no_space_mode = 0; } ! if (before_first_page) { if (begin_page()) { // This happens if there's a top of page trap, and the first-page *************** *** 435,440 **** nl_reg_contents = vertical_position.to_units(); truncated_space = y - vertical_position; - if (vertical_position > high_water_mark) - high_water_mark = vertical_position; spring_trap(next_trap->nm); } --- 425,428 ---- *************** *** 448,453 **** vertical_position = y; nl_reg_contents = vertical_position.to_units(); - if (vertical_position > high_water_mark) - high_water_mark = vertical_position; } } --- 436,439 ---- *************** *** 529,534 **** NO_RETURN void cleanup_and_exit(int exit_code) { ! if (the_output) delete the_output; exit(exit_code); } --- 515,522 ---- NO_RETURN void cleanup_and_exit(int exit_code) { ! if (the_output) { ! the_output->trailer(topdiv->get_page_length()); delete the_output; + } exit(exit_code); } *************** *** 553,557 **** have_next_page_number = 0; } ! else if (!first_page_begun) page_number = 1; else --- 541,545 ---- have_next_page_number = 0; } ! else if (before_first_page == 1) page_number = 1; else *************** *** 563,569 **** vertical_position = V0; high_water_mark = V0; - first_page_begun = 1; ejecting_page = 0; ! the_output->begin_page(page_number, page_length); nl_reg_contents = vertical_position.to_units(); if (vertical_position_traps_flag && next_trap != 0 && next_trap_pos == V0) { --- 551,560 ---- vertical_position = V0; high_water_mark = V0; ejecting_page = 0; ! // If before_first_page was 2, then the top of page transition was undone ! // using eg .nr nl 0-1. See nl_reg::set_value. ! if (before_first_page != 2) ! the_output->begin_page(page_number, page_length); ! before_first_page = 0; nl_reg_contents = vertical_position.to_units(); if (vertical_position_traps_flag && next_trap != 0 && next_trap_pos == V0) { *************** *** 652,656 **** tok.next(); if (curdiv == topdiv) { ! if (!topdiv->first_page_begun) { if (!break_flag) { if (got_arg) --- 643,647 ---- tok.next(); if (curdiv == topdiv) { ! if (topdiv->before_first_page) { if (!break_flag) { if (got_arg) *************** *** 948,952 **** int vertical_position_reg::get_value(units *res) { ! if (curdiv == topdiv && !topdiv->first_page_begun) *res = -1; else --- 939,943 ---- int vertical_position_reg::get_value(units *res) { ! if (curdiv == topdiv && topdiv->before_first_page) *res = -1; else *************** *** 957,961 **** const char *vertical_position_reg::get_string() { ! if (curdiv == topdiv && !topdiv->first_page_begun) return "-1"; else --- 948,952 ---- const char *vertical_position_reg::get_string() { ! if (curdiv == topdiv && topdiv->before_first_page) return "-1"; else *************** *** 1065,1068 **** --- 1056,1083 ---- } + class nl_reg : public variable_reg { + public: + nl_reg(); + void set_value(units); + }; + + nl_reg::nl_reg() : variable_reg(&nl_reg_contents) + { + } + + void nl_reg::set_value(units n) + { + variable_reg::set_value(n); + // Setting nl to a negative value when the vertical position in + // the top-level diversion is 0 undoes the top of page transition, + // so that the header macro will be called as if the top of page + // transition hasn't happened. This is used by Larry Wall's + // wrapman program. Setting before_first_page to 2 rather than 1, + // tells top_level_diversion::begin_page not to call + // output_file::begin_page again. + if (n < 0 && topdiv->get_vertical_position() == V0) + topdiv->before_first_page = 2; + } + void init_div_requests() { *************** *** 1097,1101 **** number_reg_dictionary.define("dl", new variable_reg(&dl_reg_contents)); number_reg_dictionary.define("dn", new variable_reg(&dn_reg_contents)); ! number_reg_dictionary.define("nl", new variable_reg(&nl_reg_contents)); number_reg_dictionary.define(".vpt", new constant_int_reg(&vertical_position_traps_flag)); --- 1112,1116 ---- number_reg_dictionary.define("dl", new variable_reg(&dl_reg_contents)); number_reg_dictionary.define("dn", new variable_reg(&dn_reg_contents)); ! number_reg_dictionary.define("nl", new nl_reg); number_reg_dictionary.define(".vpt", new constant_int_reg(&vertical_position_traps_flag)); diff -rc2P groff-1.07/troff/div.h groff-1.08/troff/div.h *** groff-1.07/troff/div.h Mon Aug 3 11:25:05 1992 --- groff-1.08/troff/div.h Fri Apr 2 11:04:14 1993 *************** *** 93,97 **** int ejecting_page; // Is the current page being ejected? public: ! int first_page_begun; int no_space_mode; top_level_diversion(); --- 93,97 ---- int ejecting_page; // Is the current page being ejected? public: ! int before_first_page; int no_space_mode; top_level_diversion(); diff -rc2P groff-1.07/troff/env.cc groff-1.08/troff/env.cc *** groff-1.07/troff/env.cc Wed Feb 24 11:24:26 1993 --- groff-1.08/troff/env.cc Fri Apr 2 11:04:18 1993 *************** *** 1791,1795 **** void environment::do_break() { ! if (curdiv == topdiv && !topdiv->first_page_begun) { topdiv->begin_page(); return; --- 1791,1795 ---- void environment::do_break() { ! if (curdiv == topdiv && topdiv->before_first_page) { topdiv->begin_page(); return; *************** *** 1850,1854 **** void title() { ! if (curdiv == topdiv && !topdiv->first_page_begun) { handle_initial_title(); return; --- 1850,1854 ---- void title() { ! if (curdiv == topdiv && topdiv->before_first_page) { handle_initial_title(); return; *************** *** 2716,2720 **** public: trie() : tp(0) {} ! ~trie(); void insert(const char *, int, void *); // find calls do_match for each match it finds --- 2716,2720 ---- public: trie() : tp(0) {} ! virtual ~trie(); // virtual to shut up g++ void insert(const char *, int, void *); // find calls do_match for each match it finds diff -rc2P groff-1.07/troff/input.cc groff-1.08/troff/input.cc *** groff-1.07/troff/input.cc Wed Feb 24 13:53:30 1993 --- groff-1.08/troff/input.cc Fri Apr 16 22:38:27 1993 *************** *** 93,96 **** --- 93,97 ---- static void interpolate_macro(symbol); static void interpolate_number_format(symbol); + static void interpolate_environment_variable(symbol); static void interpolate_arg(symbol); *************** *** 785,788 **** --- 786,797 ---- (void)input_stack::get(NULL); return '\t'; + case 'V': + { + (void)input_stack::get(NULL); + symbol s = read_escape_name(); + if (!s.is_null()) + interpolate_environment_variable(s); + break; + } case '\n': (void)input_stack::get(NULL); *************** *** 1489,1492 **** --- 1498,1508 ---- nd = new vmotion_node(x); return; + case 'V': + { + symbol nm = read_escape_name(); + if (!nm.is_null()) + interpolate_environment_variable(nm); + break; + } case 'w': do_width(); *************** *** 1870,1874 **** inline int possibly_handle_first_page_transition() { ! if (!topdiv->first_page_begun && curdiv == topdiv && !curenv->is_dummy()) { handle_first_page_transition(); return 1; --- 1886,1890 ---- inline int possibly_handle_first_page_transition() { ! if (topdiv->before_first_page && curdiv == topdiv && !curenv->is_dummy()) { handle_first_page_transition(); return 1; *************** *** 2488,2491 **** --- 2504,2509 ---- newline_flag = 0; how_invoked = 0; + lineno = 1; + count = 0; } *************** *** 3384,3387 **** --- 3402,3412 ---- } + static void interpolate_environment_variable(symbol nm) + { + const char *s = getenv(nm.contents()); + if (s && *s) + input_stack::push(make_temp_iterator(s)); + } + void interpolate_number_reg(symbol nm, int inc) { *************** *** 4803,4807 **** void copy_file() { ! if (curdiv == topdiv && !topdiv->first_page_begun) { handle_initial_request(COPY_FILE_REQUEST); return; --- 4828,4832 ---- void copy_file() { ! if (curdiv == topdiv && topdiv->before_first_page) { handle_initial_request(COPY_FILE_REQUEST); return; *************** *** 4821,4825 **** void vjustify() { ! if (curdiv == topdiv && !topdiv->first_page_begun) { handle_initial_request(VJUSTIFY_REQUEST); return; --- 4846,4850 ---- void vjustify() { ! if (curdiv == topdiv && topdiv->before_first_page) { handle_initial_request(VJUSTIFY_REQUEST); return; *************** *** 4835,4839 **** void transparent_file() { ! if (curdiv == topdiv && !topdiv->first_page_begun) { handle_initial_request(TRANSPARENT_FILE_REQUEST); return; --- 4860,4864 ---- void transparent_file() { ! if (curdiv == topdiv && topdiv->before_first_page) { handle_initial_request(TRANSPARENT_FILE_REQUEST); return; diff -rc2P groff-1.07/troff/node.cc groff-1.08/troff/node.cc *** groff-1.07/troff/node.cc Thu Oct 29 11:22:17 1992 --- groff-1.08/troff/node.cc Sat Apr 3 17:34:19 1993 *************** *** 693,698 **** int tbuf_len; int tbuf_kern; void do_motion(); - vunits page_length; void put(char c); void put(unsigned char c); --- 693,698 ---- int tbuf_len; int tbuf_kern; + int begun_page; void do_motion(); void put(char c); void put(unsigned char c); *************** *** 704,707 **** --- 704,708 ---- troff_output_file(); ~troff_output_file(); + void trailer(vunits page_length); void put_char(charinfo *ci, tfont *tf); void put_char_width(charinfo *ci, tfont *tf, hunits w, hunits k); *************** *** 1065,1077 **** } ! void troff_output_file::really_begin_page(int pageno, vunits pl) { flush_tbuf(); ! if (page_length > V0) { ! put('V'); ! put(page_length.to_units()); ! put('\n'); } ! page_length = pl; current_tfont = 0; current_font_number = -1; --- 1066,1081 ---- } ! void troff_output_file::really_begin_page(int pageno, vunits page_length) { flush_tbuf(); ! if (begun_page) { ! if (page_length > V0) { ! put('V'); ! put(page_length.to_units()); ! put('\n'); ! } } ! else ! begun_page = 1; current_tfont = 0; current_font_number = -1; *************** *** 1121,1124 **** --- 1125,1133 ---- troff_output_file::~troff_output_file() { + a_delete font_position; + } + + void troff_output_file::trailer(vunits page_length) + { flush_tbuf(); if (page_length > V0) { *************** *** 1129,1137 **** } put("x stop\n"); - a_delete font_position; } troff_output_file::troff_output_file() ! : current_height(0), current_slant(0), tbuf_len(0), nfont_positions(10) { font_position = new symbol[nfont_positions]; --- 1138,1146 ---- } put("x stop\n"); } troff_output_file::troff_output_file() ! : current_height(0), current_slant(0), tbuf_len(0), nfont_positions(10), ! begun_page(0) { font_position = new symbol[nfont_positions]; *************** *** 1159,1162 **** --- 1168,1175 ---- output_file::~output_file() { + } + + void output_file::trailer(vunits) + { } diff -rc2P groff-1.07/troff/node.h groff-1.08/troff/node.h *** groff-1.07/troff/node.h Mon Aug 3 11:25:09 1992 --- groff-1.08/troff/node.h Thu Apr 1 12:35:57 1993 *************** *** 458,461 **** --- 458,462 ---- output_file(); virtual ~output_file(); + virtual void trailer(vunits page_length); virtual void flush() = 0; virtual void transparent_char(unsigned char) = 0; diff -rc2P groff-1.07/troff/number.cc groff-1.08/troff/number.cc *** groff-1.07/troff/number.cc Mon Aug 3 11:25:08 1992 --- groff-1.08/troff/number.cc Tue Mar 30 20:42:58 1993 *************** *** 485,489 **** } *v *= 10; ! if (*v > INT_MAX - (c - '0')) { error("numeric overflow"); return 0; --- 485,489 ---- } *v *= 10; ! if (*v > INT_MAX - (int(c) - '0')) { error("numeric overflow"); return 0; diff -rc2P groff-1.07/troff/troff.man groff-1.08/troff/troff.man *** groff-1.07/troff/troff.man Fri Feb 19 22:43:39 1993 --- groff-1.08/troff/troff.man Thu Apr 1 11:20:29 1993 *************** *** 439,442 **** --- 439,454 ---- .BR z . .TP + .BI \eV x + .TQ + .BI \eV( xx + .TQ + .BI \eV[ xxx ] + Interpolate the contents of the environment variable + .I xxx , + as returned by + .BR getenv (3). + .B \eV + is interpreted in copy-mode. + .TP .BI \eY x .TQ diff -rc2P groff-1.07/xditview/ChangeLog groff-1.08/xditview/ChangeLog *** groff-1.07/xditview/ChangeLog Sat Dec 12 17:52:28 1992 --- groff-1.08/xditview/ChangeLog Tue Mar 30 15:12:43 1993 *************** *** 1,2 **** --- 1,6 ---- + Tue Mar 30 15:12:09 1993 James Clark (jjc at jclark) + + * draw.c (charExists): Check that fi->per_char is not NULL. + Sat Dec 12 17:42:40 1992 James Clark (jjc at jclark) diff -rc2P groff-1.07/xditview/Makefile groff-1.08/xditview/Makefile *** groff-1.07/xditview/Makefile Mon Feb 22 11:50:52 1993 --- groff-1.08/xditview/Makefile Mon Apr 19 10:17:50 1993 *************** *** 125,129 **** # ------------------------------------------------------------------------- # X Window System Build Parameters ! # $XConsortium: Project.tmpl,v 1.138 91/09/10 09:02:12 rws Exp $ # ------------------------------------------------------------------------- --- 125,129 ---- # ------------------------------------------------------------------------- # X Window System Build Parameters ! # $XConsortium: Project.tmpl,v 1.138.1.1 92/11/11 09:49:19 rws Exp $ # ------------------------------------------------------------------------- *************** *** 200,206 **** EXTENSIONSRC = $(TOP)/extensions XILIBSRC = $(EXTENSIONSRC)/lib/xinput PHIGSLIBSRC = $(EXTENSIONSRC)/lib/PEX ! # $XConsortium: sunLib.tmpl,v 1.14.1.1 92/03/17 14:58:46 rws Exp $ SHLIBLDFLAGS = -assert pure-text --- 200,207 ---- EXTENSIONSRC = $(TOP)/extensions XILIBSRC = $(EXTENSIONSRC)/lib/xinput + PEXLIBSRC = $(EXTENSIONSRC)/lib/PEXlib PHIGSLIBSRC = $(EXTENSIONSRC)/lib/PEX ! # $XConsortium: sunLib.tmpl,v 1.14.1.2 92/11/11 09:55:02 rws Exp $ SHLIBLDFLAGS = -assert pure-text *************** *** 229,232 **** --- 230,236 ---- XILIB = -lXi + DEPPEXLIB = + PEXLIB = -lPEX5 + SOXLIBREV = 4.10 SOXTREV = 4.10 *************** *** 236,239 **** --- 240,244 ---- SOXEXTREV = 4.10 SOXINPUTREV = 4.10 + SOPEXREV = 1.0 DEPXAUTHLIB = $(USRLIBDIR)/libXau.a *************** *** 254,257 **** --- 259,263 ---- LINTXAW = $(LINTLIBDIR)/llib-lXaw.ln LINTXI = $(LINTLIBDIR)/llib-lXi.ln + LINTPEX = $(LINTLIBDIR)/llib-lPEX5.ln LINTPHIGS = $(LINTLIBDIR)/llib-lphigs.ln diff -rc2P groff-1.07/xditview/draw.c groff-1.08/xditview/draw.c *** groff-1.07/xditview/draw.c Sat Dec 12 17:46:21 1992 --- groff-1.08/xditview/draw.c Tue Mar 30 15:04:18 1993 *************** *** 145,149 **** XCharStruct *p; ! if (c < fi->min_char_or_byte2 || c > fi->max_char_or_byte2) return 0; p = fi->per_char + (c - fi->min_char_or_byte2); --- 145,150 ---- XCharStruct *p; ! if (fi->per_char == NULL || ! c < fi->min_char_or_byte2 || c > fi->max_char_or_byte2) return 0; p = fi->per_char + (c - fi->min_char_or_byte2);