# 2.11BSD#431 - /usr/src/ucb/pascal/pxp/printf.s

##### Functions

    _atof             X
    _printf           X
    fltused           X
    pfloat            X
    pscien            X

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

#### Defined functions

_atof declared in line 4; defined in line 13; used 1 times

- in line 4

_printf declared in line 3; defined in line 17; used 69 times

- in line 3
- in /usr/src/ucb/pascal/pxp/error.c line 40, 86-95(5)
- in /usr/src/ucb/pascal/pxp/main.c line 220-221(2)
- in /usr/src/ucb/pascal/pxp/nl.c line 423, 435-450(7), 460-464(3), 474-484(4), 491-504(5), 511-514(2), 522-536(6), 542
- in /usr/src/ucb/pascal/pxp/pmon.c line 210-219(4), 343
- in /usr/src/ucb/pascal/pxp/pp.c line 66, 78, 88, 97, 107, 195, 201, 245, 261, 272, 297, 319
- in /usr/src/ucb/pascal/pxp/yycomm.c line 308
- in /usr/src/ucb/pascal/pxp/yycosts.c line 222, 236-240(4)
- in /usr/src/ucb/pascal/pxp/yyerror.c line 61-66(2)
- in /usr/src/ucb/pascal/pxp/yyput.c line 188, 211, 279
- in /usr/src/ucb/pascal/pxp/yyrecover.c line 208-212(3)

charac defined in line 146; used 1 times

- in line 67

decimal defined in line 75; used 1 times

- in line 62

fltused declared in line 4; defined in line 14; used 1 times

- in line 4

gnum defined in line 261; used 2 times

- in line 43-48(2)

long defined in line 106; used 1 times

- in line 86

longorunsg defined in line 82; used 1 times

- in line 69

loop defined in line 23; used 2 times

- in line 32, 259

pfloat declared in line 4; defined in line 15; used 1 times

- in line 4

prbuf defined in line 226; used 4 times

- in line 92, 122, 152-154(2)

prstr defined in line 230; used 1 times

- in line 167

pscien declared in line 4; defined in line 16; used 1 times

- in line 4

string defined in line 156; used 1 times

- in line 68

unsigned defined in line 88; used 1 times

- in line 84

#### Defined variables

formp defined in line 286; used 7 times

- in line 20-26(3), 83-85(2), 265-266(2)

ndigit defined in line 289; used 3 times

- in line 37, 49, 157

swtab defined in line 61; used 1 times

- in line 53

width defined in line 285; used 2 times

- in line 44, 235

Last modified: 1981-07-10 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 721 |