home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Distributions / ucb / spencer_2bsd.tar.gz / 2bsd.tar / src / px / 30atof.s < prev    next >
Text File  |  1980-02-17  |  1KB  |  131 lines

  1. / C library -- ascii to floating
  2.  
  3. /    f = atof(p)
  4. /    char *p;
  5.  
  6. ldfps = 170100^tst
  7. stfps = 170200^tst
  8.  
  9. .globl    _atof
  10.  
  11. .globl    csv, cret
  12.  
  13. _atof:
  14.     jsr    r5,csv
  15.     stfps    -(sp)
  16.     ldfps    $200
  17.     movf    fr1,-(sp)
  18.     clr    -(sp)
  19.     clrf    fr0
  20.     clr    r2
  21.     mov    4(r5),r3
  22. 1:
  23.     movb    (r3)+,r0
  24.     cmp    $' ,r0
  25.     beq    1b
  26.     cmpb    r0,$'-
  27.     bne    2f
  28.     inc    (sp)
  29. 1:
  30.     movb    (r3)+,r0
  31. 2:
  32.     sub    $'0,r0
  33.     cmp    r0,$9.
  34.     bhi    2f
  35.     jsr    pc,digit
  36.         br 1b
  37.     inc    r2
  38.     br    1b
  39. 2:
  40.     cmpb    r0,$'.-'0
  41.     bne    2f
  42. 1:
  43.     movb    (r3)+,r0
  44.     sub    $'0,r0
  45.     cmp    r0,$9.
  46.     bhi    2f
  47.     jsr    pc,digit
  48.         dec r2
  49.     br    1b
  50. 2:
  51.     cmpb    r0,$'E-'0
  52.     beq    3f
  53.     cmpb    r0,$'e-'0
  54.     bne    1f
  55. 3:
  56.     clr    r4
  57.     clr    r1
  58.     cmpb    (r3),$'-
  59.     bne    3f
  60.     inc    r4
  61.     inc    r3
  62. 3:
  63.     movb    (r3)+,r0
  64.     sub    $'0,r0
  65.     cmp    r0,$9.
  66.     bhi    3f
  67.     mul    $10.,r1
  68.     add    r0,r1
  69.     br    3b
  70. 3:
  71.     tst    r4
  72.     bne    3f
  73.     neg    r1
  74. 3:
  75.     sub    r1,r2
  76. 1:
  77.     movf    $one,fr1
  78.     mov    r2,-(sp)
  79.     beq    2f
  80.     bgt    1f
  81.     neg    r2
  82. 1:
  83.     cmp    r2,$38.
  84.     blos    1f
  85.     clrf    fr0
  86.     tst    (sp)+
  87.     bmi    out
  88.     movf    $huge,fr0
  89.     br    out
  90. 1:
  91.     mulf    $ten,fr1
  92.     sob    r2,1b
  93. 2:
  94.     tst    (sp)+
  95.     bge    1f
  96.     divf    fr1,fr0
  97.     br    2f
  98. 1:
  99.     mulf    fr1,fr0
  100.     cfcc
  101.     bvc    2f
  102.     movf    $huge,fr0
  103. 2:
  104. out:
  105.     tst    (sp)+
  106.     beq    1f
  107.     negf    fr0
  108. 1:
  109.     movf    (sp)+,fr1
  110.     ldfps    (sp)+
  111.     jmp    cret
  112. /
  113. /
  114. digit:
  115.     cmpf    $big,fr0
  116.     cfcc
  117.     blt    1f
  118.     mulf    $ten,fr0
  119.     movif    r0,fr1
  120.     addf    fr1,fr0
  121.     rts    pc
  122. 1:
  123.     add    $2,(sp)
  124.     rts    pc
  125. /
  126. /
  127. one    = 40200
  128. ten    = 41040
  129. big    = 56200
  130. huge    = 77777
  131.