|
|
1.1 ! root 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>
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.