1: #
2: #include "0x.h"
3: #include "opcode.h"
4:
5: pwrite(opc, subopc, av)
6: {
7: register char *ap, *cp;
8: register i;
9: int w, w1, sign, decpt;
10: char *acp;
11: long along;
12: double adouble;
13: int k2,k3;
14:
15: ap = &av;
16: if (opc == O_WRITLN || opc == O_PAGE)
17: opc = O_WRITC;
18: switch(opc) {
19: case O_WRIT2:
20: along = ap->pint;
21: ap += 2;
22: w = 10;
23: break;
24: case O_WRIT4:
25: along = ap->plong;
26: ap += 4;
27: w = 10;
28: break;
29: case O_WRITC:
30: acp = ap;
31: ap += 2;
32: w = 1;
33: break;
34: case O_WRITB:
35: i = ap->pint;
36: ap += 2;
37: w = 10;
38: break;
39: case O_WRITG:
40: w1 = ap->pint;
41: ap += 2;
42: acp = ap;
43: ap += (w1 + 1) & ~1;
44: w = 0;
45: break;
46: case O_WRIT8:
47: case O_WRIT82:
48: adouble = ap->pdouble;
49: ap += 8;
50: w = 22;
51: break;
52: case O_WRHEX2:
53: case O_WROCT2:
54: (&along)->pint = 0;
55: (&along)->p2int = ap->pint;
56: ap += 2;
57: w = opc == O_WROCT2 ? 11 : 8;
58: break;
59: case O_WRHEX2+1: /* ugh, cc string table too small */
60: case O_WROCT2+1: /* ugh, cc string table too small */
61: along = ap->plong;
62: ap += 4;
63: w = opc == O_WROCT2+1 ? 11 : 8;
64: break;
65: }
66: again:
67: switch(subopc & 07) {
68: case 0:
69: break;
70: case 2:
71: w = ap->pint;
72: ap += 2;
73: break;
74: case 4:
75: w = ap->plong;
76: ap += 4;
77: break;
78: }
79: if (opc == O_WRIT82 && (i = (subopc >> 3) & 07) != 0) {
80: subopc = i;
81: w1 = w;
82: goto again;
83: }
84: switch(opc) {
85: case O_WROCT2+1:
86: case O_WROCT2:
87: while (w > 11) {
88: pputch(' ');
89: w--;
90: }
91: if (w > 0)
92: wro(along, w);
93: break;
94: case O_WRHEX2:
95: case O_WRHEX2+1:
96: while (w > 8) {
97: pputch(' ');
98: w--;
99: }
100: if (w > 0)
101: wrhex(along, w);
102: break;
103: case O_WRIT2:
104: case O_WRIT4:
105: pwril(w, along);
106: break;
107: case O_WRITC:
108: while (w > 1) {
109: pputch(' ');
110: w--;
111: }
112: pputch(*acp);
113: break;
114: case O_WRITB:
115: if (i) {
116: acp = "true";
117: w1 = 4;
118: } else {
119: acp = "false";
120: w1 = 5;
121: }
122: case O_WRITG:
123: cp = acp;
124: while (w > w1) {
125: pputch(' ');
126: w--;
127: }
128: while(w1 > 0) {
129: pputch(*cp++);
130: w1--;
131: }
132: break;
133: case O_WRIT8:
134: if (adouble == 0.0) {
135: do
136: pputch(' ');
137: while (--w > 0);
138: pputch('0');
139: break;
140: }
141: if (w <= 9)
142: w = 3;
143: else
144: w -= 6;
145: do
146: pputch(' ');
147: while (--w > 17);
148: cp = ecvt(adouble, w+1, &decpt, &sign);
149: pputch(sign ? '-' : ' ');
150: pputch(*cp++);
151: pputch('.');
152: do
153: pputch(*cp++);
154: while (--w > 0);
155: pputch('e');
156: if (--decpt >= 0)
157: pputch('+');
158: else {
159: pputch('-');
160: decpt = -decpt;
161: }
162: pputch(decpt / 10 + '0');
163: pputch(decpt % 10 + '0');
164: break;
165: case O_WRIT82:
166: if (adouble == 0.0) {
167: do
168: pputch(' ');
169: while(--w1 > 1);
170: pputch('0');
171: break;
172: }
173: if (w < 0)
174: w = 0;
175: cp = fcvt(adouble, w, &decpt, &sign);
176: cp[17] = '\0';
177: if (decpt > 0) {
178: w1 = w1-w-decpt-2;
179: k2 = decpt;
180: k3 = 0;
181: } else {
182: w1 = w1-w-3;
183: k2 = 0;
184: if (w+decpt >= 0)
185: k3 = -decpt;
186: else
187: k3 = w;
188: w -= k3;
189: }
190: while (w1 > 0) {
191: pputch(' ');
192: w1--;
193: }
194: pputch(sign ? '-' : ' ');
195: if (k2 <= 0)
196: pputch('0');
197: else
198: do
199: pputch(*cp ? *cp++ : '0');
200: while (--k2 > 0);
201: pputch('.');
202: if (k3 <= 0 && w <= 0) {
203: pputch('0');
204: break;
205: }
206: while(k3 > 0) {
207: pputch('0');
208: k3--;
209: }
210: while(w > 0) {
211: pputch(*cp ? *cp++ : '0');
212: w--;
213: }
214: break;
215: }
216: return(ap);
217: }
218:
219: wro(l, w)
220: long l;
221: {
222: register c;
223:
224: c = (&l)->p2int & 07;
225: l >>= 3;
226: (&l)->pint &= 017777;
227: if (w > 1 || l != 0)
228: wro(l, w-1);
229: pputch(c | '0');
230: }
231:
232: wrhex(l, w)
233: long l;
234: {
235: register c;
236:
237: c = (&l)->p2int & 017;
238: l >>= 4;
239: (&l)->pint &= 07777;
240: if (w > 1 || l != 0)
241: wrhex(l, w-1);
242: pputch(c <= 9 ? c | '0' : 'a' + (c - 10));
243: }
Defined functions
pwrite
defined in line
5; used 8 times
wro
defined in line
219; used 2 times