Annotation of researchv10no/cmd/PDP11/fpp/aux/format.s, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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