1: / C library -- conversions 2: / Overlay modification -- wfj 8/80 3: / stack frame is one word larger... 4: / sccs id @(#)ovdoprnt.s 1.2 8/26/80 5: / 6: 7: / width=-8. 8: / formp=-10. 9: / rjust=-12. 10: / ndfnd=-14. 11: / ndigit=-16. 12: / zfill=-18. 13: width=-10. 14: formp=-12. 15: rjust=-14. 16: ndfnd=-16. 17: ndigit=-18. 18: zfill=-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 30: loop: 31: mov sp,r3 32: mov formp(r5),r1 33: 2: 34: movb (r1)+,r2 35: beq 2f 36: cmp r2,$'% 37: beq 2f 38: movb r2,(r3)+ 39: br 2b 40: 2: 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 52: 2: 53: tst r2 54: bne 2f 55: jmp cret 56: 2: 57: mov sp,r3 58: 2: 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) 66: 2: 67: cmpb *formp(r5),$'0 68: bne 2f 69: mov $'0,zfill(r5) 70: 2: 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) 78: 1: 79: mov $swtab,r1 80: 1: 81: mov (r1)+,r2 82: bne 2f 83: movb r0,(r3)+ 84: jmp prbuf 85: 2: 86: cmp r0,(r1)+ 87: bne 1b 88: jmp (r2) 89: .data 90: swtab: 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: 107: longorunsg: 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: 121: octal: 122: clr r0 123: br 1f 124: loct: 125: mov (r4)+,r0 126: 1: 127: mov $8.,r2 128: br 2f 129: 130: hex: 131: clr r0 132: br 1f 133: 134: lhex: 135: mov (r4)+,r0 136: 1: 137: mov $16.,r2 138: 2: 139: mov (r4)+,r1 140: br compute 141: 142: decimal: 143: mov (r4)+,r1 144: sxt r0 145: bmi 3f 146: br 2f 147: 148: unsigned: 149: clr r0 150: br 1f 151: 152: long: 153: mov (r4)+,r0 154: bge 1f 155: mov (r4)+,r1 156: 3: 157: neg r0 158: neg r1 159: sbc r0 160: movb $'-,(r3)+ 161: br 2f 162: 163: lunsigned: 164: mov (r4)+,r0 165: 1: 166: mov (r4)+,r1 167: 2: 168: mov $10.,r2 169: 170: / 171: / Algorithm courtesy Keith Davis 172: / 173: compute: 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)+ 184: 1: 185: jsr pc,1f 186: mov (sp)+,r4 187: mov (sp)+,r5 188: br prbuf 189: 190: 1: 191: clr r0 192: mov r4,r1 193: beq 2f 194: div r2,r0 195: mov r0,r4 196: mov r1,r0 197: 2: 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 207: 2: 208: mov r1,-(sp) 209: mov r0,r5 210: bne 2f 211: tst r4 212: beq 1f 213: 2: 214: jsr pc,1b 215: 1: 216: mov (sp)+,r0 217: add $'0,r0 218: cmp r0,$'9 219: ble 1f 220: add $'a-'0-10.,r0 221: 1: 222: movb r0,(r3)+ 223: rts pc 224: 225: charac: 226: mov $' ,zfill(r5) 227: mov (r4)+,r0 228: bic $!377,r0 229: beq prbuf 230: movb r0,(r3)+ 231: br prbuf 232: 233: string: 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) 242: 1: 243: tstb (r2)+ 244: beq 1f 245: inc r3 246: sob r1,1b 247: 1: 248: mov (r4)+,r2 249: br prstr 250: 251: remote: 252: mov (r4)+,r4 253: mov (r4)+,formp(r5) 254: jmp loop 255: 256: prbuf: 257: mov sp,r2 258: prstr: 259: sub r2,r3 260: mov width(r5),r1 261: sub r3,r1 262: bge 1f 263: clr r1 264: 1: 265: tst rjust(r5) 266: bne 1f 267: neg r1 268: 1: 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: 278: gnum: 279: clr ndfnd(r5) 280: clr r1 281: 1: 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 289: 2: 290: cmp r0,$9. 291: bhi 1f 292: 3: 293: inc ndfnd(r5) 294: mul $10.,r1 295: add r0,r1 296: br 1b 297: 1: 298: add $'0,r0 299: rts r3 300: 301: .data 302: nulstr: 303: <(null)\0>