home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++ Library:
- * Modul "istream_float"
- * Jens Gelhar 16.04.92, 15.04.94
-
- xdef op__rightshift__istream__TRd,op__rightshift__istream__TRf
- xdef op__rightshift__istream__TRD
- xdef _fgetdouble
-
- xref fgetc__P06stream,ungetc__iP06stream,strtod__PCcPPc
- xref lib_double2float,_errno
-
- op__rightshift__istream__TRD
- op__rightshift__istream__TRd: ; (istream&, double &)
- move.l 4(a7),a0
- move.l (a0),a0
- move.l (a0),-(a7)
- bsr.b _fgetdouble
- addq.l #4,a7
- move.l 8(a7),a0
- movem.l d0/d1,(a0)
- move.l 4(a7),d0
- rts
-
- op__rightshift__istream__TRf: ; (istream*, float&)
- move.l 4(a7),a0
- move.l (a0),a0
- move.l (a0),-(a7)
- bsr.b _fgetdouble
- jsr lib_double2float
- addq.l #4,a7
- move.l 8(a7),a0
- move.l d0,(a0)
- move.l 4(a7),d0
- rts
-
- _fgetdouble: ; Stackparameter: stream*
- move.l a2,-(a7)
- lea -80(a7),a7
- move.l 84+4(a7),-(a7) ; stream
- lea 4(a7),a2
- glOverrd
- jsr fgetc__P06stream
- cmp.l #' ',d0
- bls.b glOverrd
- cmp.b #'+',d0
- beq.b glPlus
- cmp.b #'-',d0
- bne.b glNoSign
- move.b d0,(a2)+
- glPlus jsr fgetc__P06stream
- glNoSign
- cmp.b #'.',d0
- beq.b glKomma
- cmp.b #'9',d0
- bhi glErr
- cmp.b #'0',d0
- blo glErr
- move.b d0,(a2)+
- jsr fgetc__P06stream
- glLoop ; Vorkommastellen:
- cmp.b #'0',d0
- blo.b glKomma
- cmp.b #'9',d0
- bhi.b glKomma
- move.b d0,(a2)+
- moveq #80,d0
- add.l a7,d0
- cmp.l d0,a2
- bhs.b glEnd
- jsr fgetc__P06stream
- bra.b glLoop
- glKomma cmp.b #'.',d0
- bne.b glExpo
- glNachK move.b d0,(a2)+
- moveq #80,d0
- add.l a7,d0
- cmp.l d0,a2
- bhs.b glEnd
- jsr fgetc__P06stream
- cmp.b #'0',d0
- blo.b glExpo
- cmp.b #'9',d0
- bls.b glNachK
- glExpo cmp.b #'e',d0
- beq.b glexp
- cmp.b #'E',d0
- bne.b glEnd
- glexp move.b d0,(a2)+
- jsr fgetc__P06stream
- cmp.b #'+',d0
- beq.b glsigExp
- cmp.b #'-',d0
- bne.b glexpDig
- glsigExp
- move.b d0,(a2)+
- jsr fgetc__P06stream
- glexpDig
- cmp.b #'0',d0
- blo.b glEnd
- cmp.b #'9',d0
- bhi.b glEnd
- move.b d0,(a2)+
- moveq #80,d0
- add.l a7,d0
- cmp.l d0,a2
- bhs.b glEnd
- jsr fgetc__P06stream
- bra.b glexpDig
- glEnd clr.b (a2)
- move.l d0,-(a7)
- jsr ungetc__iP06stream
- addq.l #4,a7
- ; Zahl gelesen, liegt bei 4(a7) auf dem Stack
- clr.l -(a7) ; unser Ende-Pointer
- move.l a7,-(a7) ; Endzeiger
- pea 12(a7) ; String
- jsr strtod__PCcPPc
- addq.l #8,a7
- move.l (a7)+,a0
- tst.b (a0) ; Bis ans Ende ausgewertet?
- beq.b glRet
- glErr move.l #$7FFFFFFF,d0
- moveq #$FFFFFFFF,d1
- move.l #1001,_errno ; ENONUM
- glRet addq.l #4,a7 ; stream* vom Stack nehmen
- lea 80(a7),a7
- move.l (a7)+,a2
- rts
-
- end
-
-