# 2.11BSD#431 - /usr/src/bin/csh/doprnt11.s

##### Functions

    __doprnt          X

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

#### Defined functions

__doprnt declared in line 45; defined in line 46; used 2 times

- in line 45
- in /usr/src/bin/csh/printf.c line 18

charac defined in line 229; used 1 times

- in line 23

compute defined in line 177; used 1 times

- in line 144

decimal defined in line 146; used 1 times

- in line 20

formp defined in line 39; used 12 times

- in line 49-53(2), 62, 83-88(3), 112-113(2), 122, 257, 286-287(2)

gnum defined in line 282; used 2 times

- in line 92-97(2)

hex defined in line 134; used 1 times

- in line 22

lhex defined in line 138; used 2 times

- in line 31, 117

loct defined in line 128; used 2 times

- in line 30, 115

long defined in line 156; used 2 times

- in line 29, 119

longorunsg defined in line 111; used 2 times

- in line 25-26(2)

loop defined in line 51; used 2 times

- in line 258, 280

lunsigned defined in line 167; used 2 times

- in line 32, 121

ndfnd defined in line 41; used 3 times

- in line 94, 283, 297

ndigit defined in line 42; used 4 times

- in line 81, 98, 181, 239

octal defined in line 125; used 1 times

- in line 21

prbuf defined in line 260; used 4 times

- in line 105, 192, 233-235(2)

prstr defined in line 262; used 1 times

- in line 253

remote defined in line 255; used 1 times

- in line 28

rjust defined in line 40; used 3 times

- in line 80, 86, 269

string defined in line 237; used 1 times

- in line 24

unsigned defined in line 152; used 2 times

- in line 27, 123

width defined in line 38; used 2 times

- in line 93, 264

zfill defined in line 43; used 5 times

- in line 82, 90, 230, 238, 273

#### Defined variables

nulstr defined in line 16; used 1 times

- in line 243

swtab defined in line 19; used 1 times

- in line 100

Last modified: 1987-02-24 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1248 |