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