xref: /original-bsd/usr.bin/ex/OTHER/ovdoprnt.s (revision c35f7ea3)
1/ C library -- conversions
2/ Overlay modification -- wfj 8/80
3/ stack frame is one word larger...
4/ sccs id @(#)ovdoprnt.s	1.2 08/26/80
5/
6
7/ width=-8.
8/ formp=-10.
9/ rjust=-12.
10/ ndfnd=-14.
11/ ndigit=-16.
12/ zfill=-18.
13width=-10.
14formp=-12.
15rjust=-14.
16ndfnd=-16.
17ndigit=-18.
18zfill=-20.
19.globl	__doprnt
20
21.globl	__strout
22.globl	csv
23.globl	cret
24
25__doprnt:
26	jsr	r5,csv
27	sub	$128.+12.,sp
28	mov	4(r5),formp(r5)		/ format
29	mov	6(r5),r4
30loop:
31	mov	sp,r3
32	mov	formp(r5),r1
332:
34	movb	(r1)+,r2
35	beq	2f
36	cmp	r2,$'%
37	beq	2f
38	movb	r2,(r3)+
39	br	2b
402:
41	mov	r1,formp(r5)
42	cmp	r3,sp
43	beq	2f
44	mov	sp,r0
45	mov	8(r5),-(sp)
46	clr	-(sp)
47	mov	r3,-(sp)
48	sub	r0,(sp)
49	mov	r0,-(sp)
50	jsr	pc,__strout
51	add	$8,sp
522:
53	tst	r2
54	bne	2f
55	jmp	cret
562:
57	mov	sp,r3
582:
59	clr	rjust(r5)
60	clr	ndigit(r5)
61	mov	$' ,zfill(r5)
62	cmpb	*formp(r5),$'-
63	bne	2f
64	inc	formp(r5)
65	inc	rjust(r5)
662:
67	cmpb	*formp(r5),$'0
68	bne	2f
69	mov	$'0,zfill(r5)
702:
71	jsr	r3,gnum
72	mov	r1,width(r5)
73	clr	ndfnd(r5)
74	cmp	r0,$'.
75	bne	1f
76	jsr	r3,gnum
77	mov	r1,ndigit(r5)
781:
79	mov	$swtab,r1
801:
81	mov	(r1)+,r2
82	bne	2f
83	movb	r0,(r3)+
84	jmp	prbuf
852:
86	cmp	r0,(r1)+
87	bne	1b
88	jmp	(r2)
89	.data
90swtab:
91	decimal;	'd
92	octal;		'o
93	hex;		'x
94	charac;		'c
95	string;		's
96	longorunsg;	'l
97	longorunsg;	'L
98	unsigned;	'u
99	remote;		'r
100	long;		'D
101	loct;		'O
102	lhex;		'X
103	lunsigned;	'U
104	0;  0
105	.text
106
107longorunsg:
108	movb	*formp(r5),r0
109	inc	formp(r5)
110	cmp	r0,$'o
111	beq	loct
112	cmp	r0,$'x
113	beq	lhex
114	cmp	r0,$'d
115	beq	long
116	cmp	r0,$'u
117	beq	lunsigned
118	dec	formp(r5)
119	br	unsigned
120
121octal:
122	clr	r0
123	br	1f
124loct:
125	mov	(r4)+,r0
1261:
127	mov	$8.,r2
128	br	2f
129
130hex:
131	clr	r0
132	br	1f
133
134lhex:
135	mov	(r4)+,r0
1361:
137	mov	$16.,r2
1382:
139	mov	(r4)+,r1
140	br	compute
141
142decimal:
143	mov	(r4)+,r1
144	sxt	r0
145	bmi	3f
146	br	2f
147
148unsigned:
149	clr	r0
150	br	1f
151
152long:
153	mov	(r4)+,r0
154	bge	1f
155	mov	(r4)+,r1
1563:
157	neg	r0
158	neg	r1
159	sbc	r0
160	movb	$'-,(r3)+
161	br	2f
162
163lunsigned:
164	mov	(r4)+,r0
1651:
166	mov	(r4)+,r1
1672:
168	mov	$10.,r2
169
170/
171/ Algorithm courtesy Keith Davis
172/
173compute:
174	mov	r5,-(sp)
175	mov	r4,-(sp)
176	mov	r0,r4
177	mov	ndigit(r5),r0
178	mov	r1,r5
179	ashc	$0,r4
180	beq	1f
181	tst	r0
182	beq	1f
183	movb	$'0,(r3)+
1841:
185	jsr	pc,1f
186	mov	(sp)+,r4
187	mov	(sp)+,r5
188	br	prbuf
189
1901:
191	clr	r0
192	mov	r4,r1
193	beq	2f
194	div	r2,r0
195	mov	r0,r4
196	mov	r1,r0
1972:
198	mov	r5,r1
199	asl	r2
200	div	r2,r0
201	asr	r2
202	asl	r0
203	cmp	r2,r1
204	bgt	2f
205	sub	r2,r1
206	inc	r0
2072:
208	mov	r1,-(sp)
209	mov	r0,r5
210	bne	2f
211	tst	r4
212	beq	1f
2132:
214	jsr	pc,1b
2151:
216	mov	(sp)+,r0
217	add	$'0,r0
218	cmp	r0,$'9
219	ble	1f
220	add	$'a-'0-10.,r0
2211:
222	movb	r0,(r3)+
223	rts	pc
224
225charac:
226	mov	$' ,zfill(r5)
227	mov	(r4)+,r0
228	bic	$!377,r0
229	beq	prbuf
230	movb	r0,(r3)+
231	br	prbuf
232
233string:
234	mov	$' ,zfill(r5)
235	mov	ndigit(r5),r1
236	mov	(r4),r2
237	mov	r2,r3
238	bne	1f
239	mov	$nulstr,r2
240	mov	r2,r3
241	mov	r2,(r4)
2421:
243	tstb	(r2)+
244	beq	1f
245	inc	r3
246	sob	r1,1b
2471:
248	mov	(r4)+,r2
249	br	prstr
250
251remote:
252	mov	(r4)+,r4
253	mov	(r4)+,formp(r5)
254	jmp	loop
255
256prbuf:
257	mov	sp,r2
258prstr:
259	sub	r2,r3
260	mov	width(r5),r1
261	sub	r3,r1
262	bge	1f
263	clr	r1
2641:
265	tst	rjust(r5)
266	bne	1f
267	neg	r1
2681:
269	mov	zfill(r5),-(sp)
270	mov	8(r5),-(sp)
271	mov	r1,-(sp)
272	mov	r3,-(sp)
273	mov	r2,-(sp)
274	jsr	pc,__strout
275	add	$10.,sp
276	jmp	loop
277
278gnum:
279	clr	ndfnd(r5)
280	clr	r1
2811:
282	movb	*formp(r5),r0
283	inc	formp(r5)
284	sub	$'0,r0
285	cmp	r0,$'*-'0
286	bne	2f
287	mov	(r4)+,r0
288	br	3f
2892:
290	cmp	r0,$9.
291	bhi	1f
2923:
293	inc	ndfnd(r5)
294	mul	$10.,r1
295	add	r0,r1
296	br	1b
2971:
298	add	$'0,r0
299	rts	r3
300
301.data
302nulstr:
303	<(null)\0>
304