Path: utzoo!utgpu!watmath!att!tut.cis.ohio-state.edu!cs.utexas.edu!csd4.csd.uwm.edu!leah!rpi!batcomputer!cornell!uw-beaver!rice!sun-spots-request From: hedrick@geneva.rutgers.edu (Charles Hedrick) Newsgroups: comp.sys.sun Subject: Re: Typesetter-Independent Troff on a Sun-4 Keywords: Software Message-ID: <584@brazos.Rice.edu> Date: 31 Jul 89 13:34:41 GMT Sender: root@rice.edu Organization: Sun-Spots Lines: 271 Approved: Sun-Spots@rice.edu X-Sun-Spots-Digest: Volume 8, Issue 87, message 5 of 18 Here are my changes to ditroff to make it work on the Sun 4. (Also changes default to Postscript.) *** ni.c.ORIG Tue May 2 22:43:58 1989 --- ni.c Sat Jun 24 21:16:41 1989 *************** *** 12,18 **** char termtab[NS] = "/usr/lib/font"; /* rest added in ptinit() */ char fontfile[NS] = "/usr/lib/font"; /* rest added in casefp() */ ! char devname[20] = "202"; /* default typesetter */ #endif --- 12,18 ---- char termtab[NS] = "/usr/lib/font"; /* rest added in ptinit() */ char fontfile[NS] = "/usr/lib/font"; /* rest added in casefp() */ ! char devname[20] = "psc"; /* default typesetter */ #endif *** n1.c.ORIG Tue May 2 22:43:54 1989 --- n1.c Sat Jun 24 23:09:48 1989 *************** *** 11,16 **** --- 11,17 ---- #include#include #include + #include #include "tdef.h" #include "ext.h" *************** *** 352,369 **** int stderr = 2; /* NOT stdio value */ /* VARARGS2 */ ! fdprintf(fd, fmt, x1) int fd; register char *fmt; ! unsigned x1; ! { register c; - register unsigned int *adx; char *s; register i; pfbp = pfbuf; ! adx = &x1; loop: while ((c = *fmt++) != '%') { if (c == '\0') { --- 353,374 ---- int stderr = 2; /* NOT stdio value */ /* VARARGS2 */ ! fdprintf(va_alist) ! va_dcl ! { ! va_list x1; int fd; register char *fmt; ! register c; char *s; register i; pfbp = pfbuf; ! va_start(x1); ! fd = va_arg(x1, int); ! fmt = va_arg(x1, char *); ! loop: while ((c = *fmt++) != '%') { if (c == '\0') { *************** *** 378,383 **** --- 383,389 ---- flusho(); } } + va_end(x1); return; } putchar(c); *************** *** 384,390 **** } c = *fmt++; if (c == 'd') { ! i = *adx; if (i < 0) { putchar('-'); i = -i; --- 390,396 ---- } c = *fmt++; if (c == 'd') { ! i = va_arg(x1, int); if (i < 0) { putchar('-'); i = -i; *************** *** 391,414 **** } printn((long)i, 10); } else if (c == 'u' || c == 'o' || c == 'x') ! printn((long)*adx, c == 'o' ? 8 : (c == 'x' ? 16 : 10)); else if (c == 'c') { ! c = *adx & 0377; if (c > 0177 || c < 040) putchar('\\'); ! putchar(*adx & 0177); } else if (c == 's') { ! s = (char *) * adx; while (c = *s++) putchar(c); } else if (c == 'D') { ! printn(*(long *)adx, 10); ! adx += (sizeof(long) / sizeof(int)) - 1; } else if (c == 'O') { ! printn(*(long *)adx, 8); ! adx += (sizeof(long) / sizeof(int)) - 1; } - adx++; goto loop; } --- 397,417 ---- } printn((long)i, 10); } else if (c == 'u' || c == 'o' || c == 'x') ! printn(va_arg(x1, long), c == 'o' ? 8 : (c == 'x' ? 16 : 10)); else if (c == 'c') { ! c = va_arg(x1, int) & 0377; if (c > 0177 || c < 040) putchar('\\'); ! putchar(c & 0177); } else if (c == 's') { ! s = va_arg(x1, char *); while (c = *s++) putchar(c); } else if (c == 'D') { ! printn(va_arg(x1, long), 10); } else if (c == 'O') { ! printn(va_arg(x1, long), 8); } goto loop; } *************** *** 435,445 **** /* returns pointer to \0 that ends the string */ /* VARARGS2 */ ! char *sprintf(str, fmt, x1) char *str; char *fmt; ! unsigned x1; ! { register c; char *sprintn(); register unsigned int *adx; --- 438,450 ---- /* returns pointer to \0 that ends the string */ /* VARARGS2 */ ! char *sprintf(va_alist) ! va_dcl ! { ! va_list x1; char *str; char *fmt; ! register c; char *sprintn(); register unsigned int *adx; *************** *** 446,456 **** char *s; register i; ! adx = &x1; loop: while ((c = *fmt++) != '%') { if (c == '\0') { *str = 0; return str; } *str++ = c; --- 451,464 ---- char *s; register i; ! va_start(x1); ! str = va_arg(x1, char *); ! fmt = va_arg(x1, char *); loop: while ((c = *fmt++) != '%') { if (c == '\0') { *str = 0; + va_end(x1); return str; } *str++ = c; *************** *** 457,463 **** } c = *fmt++; if (c == 'd') { ! i = *adx; if (i < 0) { *str++ = '-'; i = -i; --- 465,471 ---- } c = *fmt++; if (c == 'd') { ! i = va_arg(x1, int); if (i < 0) { *str++ = '-'; i = -i; *************** *** 464,487 **** } str = sprintn(str, (long)i, 10); } else if (c == 'u' || c == 'o' || c == 'x') ! str = sprintn(str, (long)*adx, c == 'o' ? 8 : (c == 'x' ? 16 : 10)); else if (c == 'c') { ! c = *adx & 0377; if (c > 0177 || c < 040) *str++ = '\\'; ! *str++ = *adx & 0177; } else if (c == 's') { ! s = (char *) * adx; while (c = *s++) *str++ = c; } else if (c == 'D') { ! str = sprintn(str, *(long *)adx, 10); ! adx += (sizeof(long) / sizeof(int)) - 1; } else if (c == 'O') { ! str = sprintn(str, *(long *)adx, 8); ! adx += (sizeof(long) / sizeof(int)) - 1; } - adx++; goto loop; } --- 472,492 ---- } str = sprintn(str, (long)i, 10); } else if (c == 'u' || c == 'o' || c == 'x') ! str = sprintn(str, va_arg(x1, long), c == 'o' ? 8 : (c == 'x' ? 16 : 10)); else if (c == 'c') { ! c = va_arg(x1, int) & 0377; if (c > 0177 || c < 040) *str++ = '\\'; ! *str++ = c & 0177; } else if (c == 's') { ! s = va_arg(x1, char *); while (c = *s++) *str++ = c; } else if (c == 'D') { ! str = sprintn(str, va_arg(x1, long), 10); } else if (c == 'O') { ! str = sprintn(str, va_arg(x1, long), 8); } goto loop; }