/********************************************************************** * Copyright (c) Digital Equipment Corporation 1984, 1985, 1986. * * All Rights Reserved. * * Reference "/usr/src/COPYRIGHT" for applicable restrictions. * **********************************************************************/ /* * SCCSID: @(#)print.c 3.1 10/8/87 * (System V) print.c 1.5 */ /* * UNIX shell * * Bell Telephone Laboratories * */ #include "defs.h" #include <sys/param.h> #define BUFLEN 256 static char buffer[BUFLEN]; static int index = 0; char numbuf[12]; extern void prc_buff(); extern void prs_buff(); extern void prn_buff(); extern void prs_cntl(); extern void prn_buff(); /* * printing and io conversion */ prp() { if ((flags & prompt) == 0 && cmdadr) { prs_cntl(cmdadr); prs(colon); } } prs(as) char *as; { register char *s; if (s = as) write(output, s, length(s) - 1); } prc(c) char c; { if (c) write(output, &c, 1); } prt(t) long t; { register int hr, min, sec; #define HZ 60 t += HZ / 2; t /= HZ; sec = t % HZ; t /= HZ; min = t % HZ; if (hr = t / HZ) { prn_buff(hr); prc_buff('h'); } prn_buff(min); prc_buff('m'); prn_buff(sec); prc_buff('s'); } prn(n) int n; { itos(n); prs(numbuf); } itos(n) { register char *abuf; register unsigned a, i; int pr, d; abuf = numbuf; pr = FALSE; a = n; for (i = 10000; i != 1; i /= 10) { if ((pr |= (d = a / i))) *abuf++ = d + '0'; a %= i; } *abuf++ = a + '0'; *abuf++ = 0; } stoi(icp) char *icp; { register char *cp = icp; register int r = 0; register char c; while ((c = *cp, digit(c)) && c && r >= 0) { r = r * 10 + c - '0'; cp++; } if (r < 0 || cp == icp) failed(icp, badnum); else return(r); } prl(n) long n; { int i; i = 11; if (n == 0) /* special case 0 */ numbuf[--i] = '0'; while (n > 0 && --i >= 0) { numbuf[i] = n % 10 + '0'; n /= 10; } numbuf[11] = '\0'; prs_buff(&numbuf[i]); } void flushb() { if (index) { buffer[index] = '\0'; write(1, buffer, length(buffer) - 1); index = 0; } } void prc_buff(c) char c; { if (c) { if (index + 1 >= BUFLEN) flushb(); buffer[index++] = c; } else { flushb(); write(1, &c, 1); } } void prs_buff(s) char *s; { register int len = length(s) - 1; if (index + len >= BUFLEN) flushb(); if (len >= BUFLEN) write(1, s, len); else { movstr(s, &buffer[index]); index += len; } } clear_buff() { index = 0; } void prs_cntl(s) char *s; { register char *ptr = buffer; register char c; while (*s != '\0') { c = (*s & 0177) ; /* translate a control character into a printable sequence */ if (c < '\040') { /* assumes ASCII char */ *ptr++ = '^'; *ptr++ = (c + 0100); /* assumes ASCII char */ } else if (c == 0177) { /* '\0177' does not work */ *ptr++ = '^'; *ptr++ = '?'; } else { /* printable character */ *ptr++ = c; } ++s; } *ptr = '\0'; prs(buffer); } void prn_buff(n) int n; { itos(n); prs_buff(numbuf); }