home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Distributions / ucb / spencer_2bsd.tar.gz / 2bsd.tar / src / pascal / fpdata / printf.s < prev    next >
Encoding:
Text File  |  1980-02-17  |  2.8 KB  |  291 lines

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