Annotation of 43BSD/ucb/ex/ovdoprnt.s, revision 1.1.1.1

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>

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.