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