|
|
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: int c; ! 53: { ! 54: char realc; ! 55: realc = c; ! 56: if (c) ! 57: write(output, &realc, 1); ! 58: } ! 59: ! 60: prt(t) ! 61: long t; ! 62: { ! 63: register int hr, min, sec; ! 64: ! 65: t += HZ / 2; ! 66: t /= HZ; ! 67: sec = t % HZ; ! 68: t /= HZ; ! 69: min = t % HZ; ! 70: ! 71: if (hr = t / HZ) ! 72: { ! 73: prn_buff(hr); ! 74: prc_buff('h'); ! 75: } ! 76: ! 77: prn_buff(min); ! 78: prc_buff('m'); ! 79: prn_buff(sec); ! 80: prc_buff('s'); ! 81: } ! 82: ! 83: prn(n) ! 84: int n; ! 85: { ! 86: itos(n); ! 87: ! 88: prs(numbuf); ! 89: } ! 90: ! 91: itos(n) ! 92: { ! 93: register char *abuf; ! 94: register unsigned a, i; ! 95: int pr, d; ! 96: ! 97: abuf = numbuf; ! 98: /* process id's can be very large on the cray (pjw) */ ! 99: pr = FALSE; ! 100: a = n; ! 101: for (i = 10000000; i != 1; i /= 10) ! 102: { ! 103: if ((pr |= (d = a / i))) ! 104: *abuf++ = d + '0'; ! 105: a %= i; ! 106: } ! 107: *abuf++ = a + '0'; ! 108: *abuf++ = 0; ! 109: } ! 110: ! 111: stoi(icp) ! 112: char *icp; ! 113: { ! 114: register char *cp = icp; ! 115: register int r = 0; ! 116: register char c; ! 117: ! 118: while ((c = *cp, digit(c)) && c && r >= 0) ! 119: { ! 120: r = r * 10 + c - '0'; ! 121: cp++; ! 122: } ! 123: if (r < 0 || cp == icp) ! 124: failed(icp, badnum); ! 125: else ! 126: return(r); ! 127: } ! 128: ! 129: prl(n) ! 130: long n; ! 131: { ! 132: int i; ! 133: ! 134: i = 11; ! 135: while (n > 0 && --i >= 0) ! 136: { ! 137: numbuf[i] = n % 10 + '0'; ! 138: n /= 10; ! 139: } ! 140: numbuf[11] = '\0'; ! 141: prs_buff(&numbuf[i]); ! 142: } ! 143: ! 144: void ! 145: flushb() ! 146: { ! 147: if (index) ! 148: { ! 149: buffer[index] = '\0'; ! 150: write(1, buffer, length(buffer) - 1); ! 151: index = 0; ! 152: } ! 153: } ! 154: ! 155: void ! 156: prc_buff(c) ! 157: char c; ! 158: { ! 159: if (c) ! 160: { ! 161: if (index + 1 >= BUFLEN) ! 162: flushb(); ! 163: ! 164: buffer[index++] = c; ! 165: } ! 166: else ! 167: { ! 168: flushb(); ! 169: write(1, &c, 1); ! 170: } ! 171: } ! 172: ! 173: /* rob */ ! 174: void ! 175: prs_2buff(s, t) ! 176: char *s, *t; ! 177: { ! 178: prs_buff(s); ! 179: prs_buff(t); ! 180: } ! 181: ! 182: void ! 183: prs_buff(s) ! 184: char *s; ! 185: { ! 186: register int len = length(s) - 1; ! 187: ! 188: if (index + len >= BUFLEN) ! 189: flushb(); ! 190: ! 191: if (len >= BUFLEN) ! 192: write(1, s, len); ! 193: else ! 194: { ! 195: movstr(s, &buffer[index]); ! 196: index += len; ! 197: } ! 198: } ! 199: ! 200: ! 201: clear_buff() ! 202: { ! 203: index = 0; ! 204: } ! 205: ! 206: ! 207: void ! 208: prs_cntl(s) ! 209: char *s; ! 210: { ! 211: register char *ptr = buffer; ! 212: register char c; ! 213: ! 214: while (*s != '\0') ! 215: { ! 216: c = (*s & 0177) ; ! 217: ! 218: /* translate a control character into a printable sequence */ ! 219: ! 220: if (c < '\040') ! 221: { /* assumes ASCII char */ ! 222: *ptr++ = '^'; ! 223: *ptr++ = (c + 0100); /* assumes ASCII char */ ! 224: } ! 225: else if (c == 0177) ! 226: { /* '\0177' does not work */ ! 227: *ptr++ = '^'; ! 228: *ptr++ = '?'; ! 229: } ! 230: else ! 231: { /* printable character */ ! 232: *ptr++ = c; ! 233: } ! 234: ! 235: ++s; ! 236: } ! 237: ! 238: *ptr = '\0'; ! 239: prs(buffer); ! 240: } ! 241: ! 242: ! 243: void ! 244: prn_buff(n) ! 245: int n; ! 246: { ! 247: itos(n); ! 248: ! 249: prs_buff(numbuf); ! 250: } ! 251: char * ! 252: quotedstring(s) ! 253: register char *s; ! 254: { ! 255: register char *t = s; ! 256: register char *outp=locstak(); ! 257: register quoting=0; ! 258: while(*t) ! 259: if(any(*t++, " \t\n\\\"'`;&|$*[](){}<>")){ ! 260: while(*s){ ! 261: if(*s == '\''){ ! 262: if(quoting) ! 263: pushstak(*s); /* end quote */ ! 264: pushstak('\\'); ! 265: quoting=0; ! 266: }else if(!quoting){ ! 267: pushstak('\''); ! 268: quoting=1; ! 269: } ! 270: pushstak(*s++); ! 271: } ! 272: if(quoting) ! 273: pushstak('\''); ! 274: break; ! 275: } ! 276: do ! 277: pushstak(*s); ! 278: while(*s++); ! 279: staktop=stakbot; ! 280: return outp; ! 281: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.