Typesetter-Independent Troff on a Sun-4

Charles Hedrick hedrick at geneva.rutgers.edu
Mon Jul 31 23:34:41 AEST 1989


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 <sys/stat.h>
  #include <setjmp.h>
  #include <sgtty.h>
+ #include <varargs.h>

  #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;
  }



More information about the Comp.sys.sun mailing list