1: / C library -- conversions
   2: 
   3: width=-8.
   4: formp=-10.
   5: rjust=-12.
   6: ndfnd=-14.
   7: ndigit=-16.
   8: zfill=-18.
   9: .globl  __doprnt
  10: 
  11: .globl  pfloat
  12: .globl  pscien
  13: .globl  pgen
  14: 
  15: .globl  __strout
  16: .globl  csv
  17: .globl  cret
  18: 
  19: __doprnt:
  20:         jsr     r5,csv
  21:         sub     $128.+12.,sp
  22:         mov     4(r5),formp(r5)         / format
  23:         mov     6(r5),r4
  24: loop:
  25:         mov     sp,r3
  26:         mov     formp(r5),r1
  27: 2:
  28:         movb    (r1)+,r2
  29:         beq     2f
  30:         cmp     r2,$'%
  31:         beq     2f
  32:         movb    r2,(r3)+
  33:         br      2b
  34: 2:
  35:         mov     r1,formp(r5)
  36:         cmp     r3,sp
  37:         beq     2f
  38:         mov     sp,r0
  39:         mov     8(r5),-(sp)
  40:         clr     -(sp)
  41:         mov     r3,-(sp)
  42:         sub     r0,(sp)
  43:         mov     r0,-(sp)
  44:         jsr     pc,__strout
  45:         add     $8,sp
  46: 2:
  47:         tst     r2
  48:         bne     2f
  49:         jmp     cret
  50: 2:
  51:         mov     sp,r3
  52: 2:
  53:         clr     rjust(r5)
  54:         clr     ndigit(r5)
  55:         mov     $' ,zfill(r5)
  56:         cmpb    *formp(r5),$'-
  57:         bne     2f
  58:         inc     formp(r5)
  59:         inc     rjust(r5)
  60: 2:
  61:         cmpb    *formp(r5),$'0
  62:         bne     2f
  63:         mov     $'0,zfill(r5)
  64: 2:
  65:         jsr     r3,gnum
  66:         mov     r1,width(r5)
  67:         clr     ndfnd(r5)
  68:         cmp     r0,$'.
  69:         bne     1f
  70:         jsr     r3,gnum
  71:         mov     r1,ndigit(r5)
  72: 1:
  73:         mov     $swtab,r1
  74: 1:
  75:         mov     (r1)+,r2
  76:         bne     2f
  77:         movb    r0,(r3)+
  78:         jmp     prbuf
  79: 2:
  80:         cmp     r0,(r1)+
  81:         bne     1b
  82:         jmp     (r2)
  83:         .data
  84: swtab:
  85:         decimal;        'd
  86:         octal;          'o
  87:         hex;            'x
  88:         float;          'f
  89:         scien;          'e
  90:         general;        'g
  91:         charac;         'c
  92:         string;         's
  93:         longorunsg;     'l
  94:         longorunsg;     'L
  95:         unsigned;       'u
  96:         remote;         'r
  97:         long;           'D
  98:         loct;           'O
  99:         lhex;           'X
 100:         lunsigned;      'U
 101:         0;  0
 102:         .text
 103: 
 104: general:
 105:         mov     ndigit(r5),r0
 106:         mov     ndfnd(r5),r2
 107:         jsr     pc,pgen
 108:         jbr     prbuf
 109: 
 110: longorunsg:
 111:         movb    *formp(r5),r0
 112:         inc     formp(r5)
 113:         cmp     r0,$'o
 114:         beq     loct
 115:         cmp     r0,$'x
 116:         beq     lhex
 117:         cmp     r0,$'d
 118:         beq     long
 119:         cmp     r0,$'u
 120:         beq     lunsigned
 121:         dec     formp(r5)
 122:         br      unsigned
 123: 
 124: octal:
 125:         clr     r0
 126:         br      1f
 127: loct:
 128:         mov     (r4)+,r0
 129: 1:
 130:         mov     $8.,r2
 131:         br      2f
 132: 
 133: hex:
 134:         clr     r0
 135:         br      1f
 136: 
 137: lhex:
 138:         mov     (r4)+,r0
 139: 1:
 140:         mov     $16.,r2
 141: 2:
 142:         mov     (r4)+,r1
 143:         br      compute
 144: 
 145: decimal:
 146:         mov     (r4)+,r1
 147:         sxt     r0
 148:         bmi     3f
 149:         br      2f
 150: 
 151: unsigned:
 152:         clr     r0
 153:         br      1f
 154: 
 155: long:
 156:         mov     (r4)+,r0
 157:         bge     1f
 158:         mov     (r4)+,r1
 159: 3:
 160:         neg     r0
 161:         neg     r1
 162:         sbc     r0
 163:         movb    $'-,(r3)+
 164:         br      2f
 165: 
 166: lunsigned:
 167:         mov     (r4)+,r0
 168: 1:
 169:         mov     (r4)+,r1
 170: 2:
 171:         mov     $10.,r2
 172: 
 173: /
 174: / Algorithm courtesy Keith Davis
 175: /
 176: compute:
 177:         mov     r5,-(sp)
 178:         mov     r4,-(sp)
 179:         mov     r0,r4
 180:         mov     ndigit(r5),r0
 181:         mov     r1,r5
 182:         ashc    $0,r4
 183:         beq     1f
 184:         tst     r0
 185:         beq     1f
 186:         movb    $'0,(r3)+
 187: 1:
 188:         jsr     pc,1f
 189:         mov     (sp)+,r4
 190:         mov     (sp)+,r5
 191:         br      prbuf
 192: 
 193: 1:
 194:         clr     r0
 195:         mov     r4,r1
 196:         beq     2f
 197:         div     r2,r0
 198:         mov     r0,r4
 199:         mov     r1,r0
 200: 2:
 201:         mov     r5,r1
 202:         asl     r2
 203:         div     r2,r0
 204:         asr     r2
 205:         asl     r0
 206:         cmp     r2,r1
 207:         bgt     2f
 208:         sub     r2,r1
 209:         inc     r0
 210: 2:
 211:         mov     r1,-(sp)
 212:         mov     r0,r5
 213:         bne     2f
 214:         tst     r4
 215:         beq     1f
 216: 2:
 217:         jsr     pc,1b
 218: 1:
 219:         mov     (sp)+,r0
 220:         add     $'0,r0
 221:         cmp     r0,$'9
 222:         ble     1f
 223:         add     $'a-'0-10.,r0
 224: 1:
 225:         movb    r0,(r3)+
 226:         rts     pc
 227: 
 228: charac:
 229:         mov     $' ,zfill(r5)
 230:         mov     (r4)+,r0
 231:         bic     $!377,r0
 232:         beq     prbuf
 233:         movb    r0,(r3)+
 234:         br      prbuf
 235: 
 236: string:
 237:         mov     $' ,zfill(r5)
 238:         mov     ndigit(r5),r1
 239:         mov     (r4),r2
 240:         mov     r2,r3
 241:         bne     1f
 242:         mov     $nulstr,r2
 243:         mov     r2,r3
 244:         mov     r2,(r4)
 245: 1:
 246:         tstb    (r2)+
 247:         beq     1f
 248:         inc     r3
 249:         sob     r1,1b
 250: 1:
 251:         mov     (r4)+,r2
 252:         br      prstr
 253: 
 254: float:
 255:         mov     ndigit(r5),r0
 256:         mov     ndfnd(r5),r2
 257:         jsr     pc,pfloat
 258:         br      prbuf
 259: 
 260: scien:
 261:         mov     ndigit(r5),r0
 262:         inc     r0
 263:         tst     ndfnd(r5)
 264:         bne     1f
 265:         mov     $7,r0
 266: 1:
 267:         mov     pc,r2
 268:         jsr     pc,pscien
 269:         br      prbuf
 270: 
 271: remote:
 272:         mov     (r4)+,r4
 273:         mov     (r4)+,formp(r5)
 274:         jmp     loop
 275: 
 276: prbuf:
 277:         mov     sp,r2
 278: prstr:
 279:         sub     r2,r3
 280:         mov     width(r5),r1
 281:         sub     r3,r1
 282:         bge     1f
 283:         clr     r1
 284: 1:
 285:         tst     rjust(r5)
 286:         bne     1f
 287:         neg     r1
 288: 1:
 289:         mov     zfill(r5),-(sp)
 290:         mov     8(r5),-(sp)
 291:         mov     r1,-(sp)
 292:         mov     r3,-(sp)
 293:         mov     r2,-(sp)
 294:         jsr     pc,__strout
 295:         add     $10.,sp
 296:         jmp     loop
 297: 
 298: gnum:
 299:         clr     ndfnd(r5)
 300:         clr     r1
 301: 1:
 302:         movb    *formp(r5),r0
 303:         inc     formp(r5)
 304:         sub     $'0,r0
 305:         cmp     r0,$'*-'0
 306:         bne     2f
 307:         mov     (r4)+,r0
 308:         br      3f
 309: 2:
 310:         cmp     r0,$9.
 311:         bhi     1f
 312: 3:
 313:         inc     ndfnd(r5)
 314:         mul     $10.,r1
 315:         add     r0,r1
 316:         br      1b
 317: 1:
 318:         add     $'0,r0
 319:         rts     r3
 320: 
 321: .data
 322: nulstr:
 323:         <(null)\0>

Defined functions

__doprnt declared in line 9; defined in line 19; used 4 times
charac defined in line 228; used 1 times
  • in line 91
compute defined in line 176; used 1 times
decimal defined in line 145; used 1 times
  • in line 85
float defined in line 254; used 1 times
  • in line 88
formp defined in line 4; used 12 times
general defined in line 104; used 1 times
  • in line 90
gnum defined in line 298; used 2 times
hex defined in line 133; used 1 times
  • in line 87
lhex defined in line 137; used 2 times
loct defined in line 127; used 2 times
long defined in line 155; used 2 times
longorunsg defined in line 110; used 2 times
loop defined in line 24; used 2 times
lunsigned defined in line 166; used 2 times
ndfnd defined in line 6; used 6 times
ndigit defined in line 7; used 7 times
octal defined in line 124; used 1 times
  • in line 86
prbuf defined in line 276; used 7 times
prstr defined in line 278; used 1 times
remote defined in line 271; used 1 times
  • in line 96
rjust defined in line 5; used 3 times
scien defined in line 260; used 1 times
  • in line 89
string defined in line 236; used 1 times
  • in line 92
unsigned defined in line 151; used 2 times
width defined in line 3; used 2 times
zfill defined in line 8; used 5 times

Defined variables

nulstr defined in line 322; used 1 times
swtab defined in line 84; used 1 times
  • in line 73
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 836
Valid CSS Valid XHTML 1.0 Strict