|
|
1.1 ! root 1: /* @(#)print.c 1.5 */ ! 2: /* ! 3: * UNIX shell ! 4: * ! 5: * Bell Telephone Laboratories ! 6: * ! 7: */ ! 8: ! 9: #include "defs.h" ! 10: #include <sys/param.h> ! 11: #ifdef CRAY ! 12: #include <sys/machd.h> ! 13: #else ! 14: #define HZ 60 ! 15: #endif ! 16: ! 17: #define BUFLEN 256 ! 18: ! 19: static char buffer[BUFLEN]; ! 20: static int index = 0; ! 21: char numbuf[12]; ! 22: ! 23: extern void prc_buff(); ! 24: extern void prs_buff(); ! 25: extern void prs_2buff(); ! 26: extern void prn_buff(); ! 27: extern void prs_cntl(); ! 28: extern void prn_buff(); ! 29: ! 30: /* ! 31: * printing and io conversion ! 32: */ ! 33: prp() ! 34: { ! 35: if ((flags & prompt) == 0 && cmdadr) ! 36: { ! 37: prs_cntl(cmdadr); ! 38: prs(colon); ! 39: } ! 40: } ! 41: ! 42: prs(as) ! 43: char *as; ! 44: { ! 45: register char *s; ! 46: ! 47: if ((s = as) && length(s) > 1) ! 48: write(output, s, length(s) - 1); ! 49: } ! 50: ! 51: prc(c) ! 52: char c; ! 53: { ! 54: if (c) ! 55: write(output, (char *)&c, 1); ! 56: } ! 57: ! 58: prt(t) ! 59: long t; ! 60: { ! 61: register int hr, min, sec; ! 62: ! 63: t += HZ / 2; ! 64: t /= HZ; ! 65: sec = t % HZ; ! 66: t /= HZ; ! 67: min = t % HZ; ! 68: ! 69: if (hr = t / HZ) ! 70: { ! 71: prn_buff(hr); ! 72: prc_buff('h'); ! 73: } ! 74: ! 75: prn_buff(min); ! 76: prc_buff('m'); ! 77: prn_buff(sec); ! 78: prc_buff('s'); ! 79: } ! 80: ! 81: prn(n) ! 82: int n; ! 83: { ! 84: itos(n); ! 85: ! 86: prs(numbuf); ! 87: } ! 88: ! 89: itos(n) ! 90: { ! 91: register char *abuf; ! 92: register unsigned a, i; ! 93: int pr, d; ! 94: ! 95: abuf = numbuf; ! 96: ! 97: pr = FALSE; ! 98: a = n; ! 99: for (i = 10000; i != 1; i /= 10) ! 100: { ! 101: if ((pr |= (d = a / i))) ! 102: *abuf++ = d + '0'; ! 103: a %= i; ! 104: } ! 105: *abuf++ = a + '0'; ! 106: *abuf = 0; ! 107: } ! 108: ! 109: stoi(icp) ! 110: char *icp; ! 111: { ! 112: register char *cp = icp; ! 113: register int r = 0; ! 114: register char c; ! 115: ! 116: while ((c = *cp, digit(c)) && c && r >= 0) ! 117: { ! 118: r = r * 10 + c - '0'; ! 119: cp++; ! 120: } ! 121: if (r < 0 || cp == icp) ! 122: failed(icp, badnum, 0); ! 123: else ! 124: return(r); ! 125: } ! 126: ! 127: prl(n) ! 128: long n; ! 129: { ! 130: int i; ! 131: ! 132: i = 11; ! 133: while (n > 0 && --i >= 0) ! 134: { ! 135: numbuf[i] = n % 10 + '0'; ! 136: n /= 10; ! 137: } ! 138: numbuf[11] = '\0'; ! 139: prs_buff(&numbuf[i]); ! 140: } ! 141: ! 142: void ! 143: flushb() ! 144: { ! 145: if (index) ! 146: { ! 147: buffer[index] = '\0'; ! 148: write(1, buffer, length(buffer) - 1); ! 149: index = 0; ! 150: } ! 151: } ! 152: ! 153: void ! 154: prc_buff(c) ! 155: char c; ! 156: { ! 157: if (c) ! 158: { ! 159: if (index + 1 >= BUFLEN) ! 160: flushb(); ! 161: ! 162: buffer[index++] = c; ! 163: } ! 164: else ! 165: { ! 166: flushb(); ! 167: write(1, (char *)&c, 1); ! 168: } ! 169: } ! 170: ! 171: /* rob */ ! 172: void ! 173: prs_2buff(s, t) ! 174: char *s, *t; ! 175: { ! 176: prs_buff(s); ! 177: prs_buff(t); ! 178: } ! 179: ! 180: void ! 181: prs_buff(s) ! 182: char *s; ! 183: { ! 184: register int len = length(s) - 1; ! 185: ! 186: if (index + len >= BUFLEN) ! 187: flushb(); ! 188: ! 189: if (len >= BUFLEN) ! 190: write(1, s, len); ! 191: else ! 192: { ! 193: movstr(s, &buffer[index]); ! 194: index += len; ! 195: } ! 196: } ! 197: ! 198: ! 199: clear_buff() ! 200: { ! 201: index = 0; ! 202: } ! 203: ! 204: ! 205: void ! 206: prs_cntl(s) ! 207: char *s; ! 208: { ! 209: register char *ptr = buffer; ! 210: register char c; ! 211: ! 212: while (*s != '\0') ! 213: { ! 214: c = (*s & 0177) ; ! 215: ! 216: /* translate a control character into a printable sequence */ ! 217: ! 218: if (c < '\040') ! 219: { /* assumes ASCII char */ ! 220: *ptr++ = '^'; ! 221: *ptr++ = (c + 0100); /* assumes ASCII char */ ! 222: } ! 223: else if (c == 0177) ! 224: { /* '\0177' does not work */ ! 225: *ptr++ = '^'; ! 226: *ptr++ = '?'; ! 227: } ! 228: else ! 229: { /* printable character */ ! 230: *ptr++ = c; ! 231: } ! 232: ! 233: ++s; ! 234: } ! 235: ! 236: *ptr = '\0'; ! 237: prs(buffer); ! 238: } ! 239: ! 240: ! 241: void ! 242: prn_buff(n) ! 243: int n; ! 244: { ! 245: itos(n); ! 246: ! 247: prs_buff(numbuf); ! 248: } ! 249: char * ! 250: quotedstring(s) ! 251: register char *s; ! 252: { ! 253: register char *t = s; ! 254: register char *outp=locstak(); ! 255: register quoting=0; ! 256: while(*t) ! 257: if(any(*t++, " \t\n\\\"'`;&|$*[](){}<>")){ ! 258: while(*s){ ! 259: if(*s == '\''){ ! 260: if(quoting) ! 261: pushstak(*s); /* end quote */ ! 262: pushstak('\\'); ! 263: quoting=0; ! 264: }else if(!quoting){ ! 265: pushstak('\''); ! 266: quoting=1; ! 267: } ! 268: pushstak(*s++); ! 269: } ! 270: if(quoting) ! 271: pushstak('\''); ! 272: break; ! 273: } ! 274: do ! 275: pushstak(*s); ! 276: while(*s++); ! 277: staktop=stakbot; ! 278: return outp; ! 279: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.