|
|
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.