|
|
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.