home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / MAXONC3_6OF8.DMS / in.adf / LIBSRC.LHA / LIBSRC / istream_float.asm < prev    next >
Encoding:
Assembly Source File  |  1994-04-15  |  2.3 KB  |  133 lines

  1.  
  2. * Maxon C++ Library:
  3. * Modul "istream_float"
  4. * Jens Gelhar 16.04.92, 15.04.94
  5.  
  6.     xdef    op__rightshift__istream__TRd,op__rightshift__istream__TRf
  7.     xdef    op__rightshift__istream__TRD
  8.     xdef    _fgetdouble
  9.  
  10.     xref    fgetc__P06stream,ungetc__iP06stream,strtod__PCcPPc
  11.     xref    lib_double2float,_errno
  12.  
  13. op__rightshift__istream__TRD
  14. op__rightshift__istream__TRd:    ; (istream&, double &)
  15.     move.l    4(a7),a0
  16.     move.l    (a0),a0
  17.     move.l    (a0),-(a7)
  18.     bsr.b    _fgetdouble
  19.     addq.l    #4,a7
  20.     move.l    8(a7),a0
  21.     movem.l    d0/d1,(a0)
  22.     move.l    4(a7),d0
  23.     rts
  24.  
  25. op__rightshift__istream__TRf:    ; (istream*, float&)
  26.     move.l    4(a7),a0
  27.     move.l    (a0),a0
  28.     move.l    (a0),-(a7)
  29.     bsr.b    _fgetdouble
  30.     jsr    lib_double2float
  31.     addq.l    #4,a7
  32.     move.l    8(a7),a0
  33.     move.l    d0,(a0)
  34.     move.l    4(a7),d0
  35.     rts
  36.  
  37. _fgetdouble:    ; Stackparameter: stream*
  38.     move.l    a2,-(a7)
  39.     lea    -80(a7),a7
  40.     move.l    84+4(a7),-(a7)   ; stream
  41.     lea    4(a7),a2
  42. glOverrd
  43.     jsr    fgetc__P06stream
  44.     cmp.l    #' ',d0
  45.     bls.b    glOverrd
  46.     cmp.b    #'+',d0
  47.     beq.b    glPlus
  48.     cmp.b    #'-',d0
  49.     bne.b    glNoSign
  50.     move.b    d0,(a2)+
  51. glPlus    jsr    fgetc__P06stream
  52. glNoSign
  53.     cmp.b    #'.',d0
  54.     beq.b    glKomma
  55.     cmp.b    #'9',d0
  56.     bhi    glErr
  57.     cmp.b    #'0',d0
  58.     blo    glErr
  59.     move.b    d0,(a2)+
  60.     jsr    fgetc__P06stream
  61. glLoop    ; Vorkommastellen:
  62.     cmp.b    #'0',d0
  63.     blo.b    glKomma
  64.     cmp.b    #'9',d0
  65.     bhi.b    glKomma
  66.     move.b    d0,(a2)+
  67.     moveq    #80,d0
  68.     add.l    a7,d0
  69.     cmp.l    d0,a2
  70.     bhs.b    glEnd
  71.     jsr    fgetc__P06stream
  72.     bra.b    glLoop
  73. glKomma    cmp.b    #'.',d0
  74.     bne.b    glExpo
  75. glNachK    move.b    d0,(a2)+
  76.     moveq    #80,d0
  77.     add.l    a7,d0
  78.     cmp.l    d0,a2
  79.     bhs.b    glEnd
  80.     jsr    fgetc__P06stream
  81.     cmp.b    #'0',d0
  82.     blo.b    glExpo
  83.     cmp.b    #'9',d0
  84.     bls.b    glNachK
  85. glExpo    cmp.b    #'e',d0
  86.     beq.b    glexp
  87.     cmp.b    #'E',d0
  88.     bne.b    glEnd
  89. glexp    move.b    d0,(a2)+
  90.     jsr    fgetc__P06stream
  91.     cmp.b    #'+',d0
  92.     beq.b    glsigExp
  93.     cmp.b    #'-',d0
  94.     bne.b    glexpDig
  95. glsigExp
  96.     move.b    d0,(a2)+
  97.     jsr fgetc__P06stream
  98. glexpDig
  99.     cmp.b    #'0',d0
  100.     blo.b    glEnd
  101.     cmp.b    #'9',d0
  102.     bhi.b    glEnd
  103.     move.b    d0,(a2)+
  104.     moveq    #80,d0
  105.     add.l    a7,d0
  106.     cmp.l    d0,a2
  107.     bhs.b    glEnd
  108.     jsr    fgetc__P06stream
  109.     bra.b    glexpDig
  110. glEnd    clr.b    (a2)
  111.     move.l    d0,-(a7)
  112.     jsr    ungetc__iP06stream
  113.     addq.l    #4,a7
  114.     ; Zahl gelesen, liegt bei 4(a7) auf dem Stack
  115.     clr.l    -(a7)     ; unser Ende-Pointer
  116.     move.l    a7,-(a7) ; Endzeiger
  117.     pea    12(a7)      ; String
  118.     jsr    strtod__PCcPPc
  119.     addq.l    #8,a7
  120.     move.l    (a7)+,a0
  121.     tst.b    (a0)        ; Bis ans Ende ausgewertet?
  122.     beq.b    glRet
  123. glErr    move.l    #$7FFFFFFF,d0
  124.     moveq    #$FFFFFFFF,d1
  125.     move.l    #1001,_errno    ; ENONUM
  126. glRet    addq.l    #4,a7        ; stream* vom Stack nehmen
  127.     lea    80(a7),a7
  128.     move.l    (a7)+,a2
  129.     rts
  130.  
  131.     end
  132.  
  133.