|
|
1.1 root 1: / C library -- format
2:
3:
4: .globl _format
5:
6: .globl pfloat
7: .globl pscien
8:
9: .globl csv
10: .globl cret
11:
12: _format:
13: jsr r5,csv
14: sub $126.,sp
15: mov 6(r5),formp / format
16: mov r5,r4
17: add $8.,r4 / arglist
18: loop:
19: movb *formp,r0
20: beq 1f
21: inc formp
22: cmp r0,$'%
23: beq 2f
24: 3:
25: mov r0,(sp)
26: jsr pc,*4(r5)
27: br loop
28: 1:
29: mov $' ,paddch
30: jmp cret
31: 2:
32: clr rjust
33: clr ndigit
34: mov paddch,padd
35: cmpb *formp,$'-
36: bne 2f
37: inc formp
38: inc rjust
39: 2:
40: cmpb *formp,$'0
41: jne 2f
42: mov $'0,padd
43: 2:
44: jsr r3,gnum
45: mov r1,width
46: clr ndfnd
47: cmp r0,$'.
48: bne 1f
49: jsr r3,gnum
50: mov r1,ndigit
51: 1:
52: mov sp,r3
53: add $4,r3
54: mov $swtab,r1
55: 1:
56: mov (r1)+,r2
57: beq 3b
58: cmp r0,(r1)+
59: bne 1b
60: jmp (r2)
61: .data
62: swtab:
63: decimal; 'd
64: octal; 'o
65: hex; 'x
66: float; 'f
67: scien; 'e
68: charac; 'c
69: string; 's
70: longorunsg; 'l
71: unsigned; 'u
72: remote; 'r
73: chgpadd; '>
74: long; 'D
75: loct; 'O
76: lhex; 'X
77: 0; 0
78: .text
79:
80: decimal:
81: mov (r4)+,r1
82: bge 1f
83: neg r1
84: movb $'-,(r3)+
85: br 1f
86:
87: longorunsg:
88: / movb *formp,r0
89: / inc formp
90: / cmp r0,$'o
91: / beq loct
92: / cmp r0,$'x
93: / beq lhex
94: / cmp r0,$'d
95: / beq long
96: / dec formp
97: / br unsigned
98:
99: unsigned:
100: mov (r4)+,r1
101: 1:
102: jsr pc,1f
103: jbr prbuf
104: 1:
105: clr r0
106: div $10.,r0
107: mov r1,-(sp)
108: mov r0,r1
109: beq 1f
110: jsr pc,1b
111: 1:
112: mov (sp)+,r0
113: add $'0,r0
114: movb r0,(r3)+
115: rts pc
116:
117: long:
118: mov (r4)+,r2
119: mov (r4)+,r0
120: mov r4,-(sp)
121: mov r3,r4
122: mov r0,r3
123: tst r2
124: bpl 1f
125: neg r2
126: neg r3
127: sbc r2
128: movb $'-,(r4)+
129: 1:
130: jsr pc,1f
131: mov r4,r3
132: mov (sp)+,r4
133: br prbuf
134:
135: 1:
136: clr r1
137: mov $32.,r0
138: 3:
139: ashc $1,r2
140: rol r1
141: cmp r1,$10.
142: blo 2f
143: sub $10.,r1
144: inc r3
145: 2:
146: sob r0,3b
147: add $'0,r1
148: mov r1,-(sp)
149: ashc $0,r2
150: beq 1f
151: jsr pc,1b
152: 1:
153: movb (sp)+,(r4)+
154: rts pc
155:
156:
157: charac:
158: movb (r4)+,(r3)+
159: bne 1f
160: dec r3
161: 1:
162: movb (r4)+,(r3)+
163: bne prbuf
164: dec r3
165: br prbuf
166:
167: string:
168: mov ndigit,r1
169: clr r3
170: mov (r4),r2
171: bne 1f
172: mov $nulstr,r2
173: mov r2,(r4)
174: 1:
175: tstb (r2)+
176: beq 1f
177: inc r3
178: sob r1,1b
179: 1:
180: mov (r4)+,r2
181: br prstr
182:
183: lhex:
184: mov (r4)+,r0
185: br 1f
186: hex:
187: clr r0
188: 1:
189: mov $1f,r2
190: .data
191: 1:
192: -4; !17; 170000
193: .text
194: br 2f
195:
196: loct:
197: mov (r4)+,r0
198: br 1f
199: octal:
200: clr r0
201: 1:
202: mov $1f,r2
203: .data
204: 1:
205: -3; !7; 160000
206: .text
207: 2:
208: mov (r4)+,r1
209: ashc $0,r0
210: beq 2f
211: tst ndigit
212: beq 2f
213: movb $'0,(r3)+
214: 2:
215: jsr pc,1f
216: br prbuf
217: 1:
218: mov r1,-(sp)
219: ashc (r2),r0
220: bic 4(r2),r0
221: ashc $0,r0
222: beq 1f
223: jsr pc,1b
224: 1:
225: mov (sp)+,r0
226: bic 2(r2),r0
227: add $'0,r0
228: cmp r0,$'9
229: ble 1f
230: add $'A-'0-10.,r0
231: 1:
232: movb r0,(r3)+
233: rts pc
234:
235: float:
236: mov ndigit,r0
237: mov ndfnd,r2
238: jsr pc,pfloat
239: br prbuf
240:
241: scien:
242: mov ndigit,r0
243: mov ndfnd,r2
244: jsr pc,pscien
245: br prbuf
246:
247: remote:
248: mov (r4)+,r4
249: mov (r4)+,formp
250: jmp loop
251:
252: prbuf:
253: mov sp,r2
254: add $4,r2
255: sub r2,r3
256: prstr:
257: mov r4,-(sp)
258: mov padd,-(sp)
259: mov r3,r4
260: neg r3
261: add width,r3
262: ble 1f
263: tst rjust
264: bne 1f
265: 2:
266: jsr pc,*4(r5)
267: sob r3,2b
268: 1:
269: tst r4
270: beq 2f
271: 1:
272: movb (r2)+,(sp)
273: jsr pc,*4(r5)
274: sob r4,1b
275: 2:
276: tst r3
277: ble 1f
278: mov padd,(sp)
279: 2:
280: jsr pc,*4(r5)
281: sob r3,2b
282: 1:
283: tst (sp)+
284: mov (sp)+,r4
285: jmp loop
286:
287: chgpadd:
288: movb *formp,paddch
289: jeq loop
290: inc formp
291: jmp loop
292: gnum:
293: clr ndfnd
294: clr r1
295: 1:
296: movb *formp,r0
297: inc formp
298: sub $'0,r0
299: cmp r0,$'*-'0
300: bne 2f
301: mov (r4)+,r0
302: br 3f
303: 2:
304: cmp r0,$9.
305: bhi 1f
306: 3:
307: inc ndfnd
308: mul $10.,r1
309: add r0,r1
310: br 1b
311: 1:
312: add $'0,r0
313: rts r3
314:
315: .bss
316: width: .=.+2
317: formp: .=.+2
318: rjust: .=.+2
319: ndfnd: .=.+2
320: ndigit: .=.+2
321: padd: .=.+2
322: .data
323: paddch:
324: ' /default pad is space
325: nulstr:
326: <(null)\0>
327: .even
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.