home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / s5 / printf.s < prev    next >
Encoding:
Text File  |  1975-05-13  |  2.2 KB  |  239 lines

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