home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++ Library:
- * Modul "istream_long"
- * Jens Gelhar 08.05.93, 15.04.94
-
- xdef op__rightshift__istream__TRl,op__rightshift__istream__TRUl
- xdef _fgetulong
-
- xref fgetc__P06stream,ungetc__iP06stream,strtouvl__PCcPPci
- xref _fgetlong
- xref _errno
-
- op__rightshift__istream__TRl:
- move.l 4(a7),a0
- move.l (a0),a0
- move.l (a0),-(a7)
- jsr _fgetlong
- addq.l #4,a7
- move.l 8(a7),a0
- movem.l d0/d1,(a0)
- move.l 4(a7),d0
- rts
-
- op__rightshift__istream__TRUl: ; (istream*, unsigned long long&)
- move.l 4(a7),a0
- move.l (a0),a0
- move.l (a0),-(a7)
- bsr.b _fgetulong
- addq.l #4,a7
- move.l 8(a7),a0
- movem.l d0/d1,(a0)
- move.l 4(a7),d0
- rts
-
- _fgetulong:
- ; 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
- bra.b glNoSign
- glPlus: jsr fgetc__P06stream
- glNoSign:
- cmp.b #'9',d0
- bhi glErr
- cmp.b #'0',d0
- blo.b glErr
- bne.b glDec
- ; erste Ziffer ist 0:
- move.b d0,(a2)+
- jsr fgetc__P06stream
- cmp.b #'X',d0
- beq.b glHex
- cmp.b #'x',d0
- bne.b glLoop
- glHex:
- glDec: move.b d0,(a2)+
- jsr fgetc__P06stream
- glLoop: cmp.b #'0',d0
- blo.b glEnd
- cmp.b #'9',d0
- bls.b glDig
- cmp.b #'A',d0
- blo.b glEnd
- cmp.b #'F',d0
- bls.b glDig
- cmp.b #'a',d0
- blo.b glEnd
- cmp.b #'f',d0
- bhi.b glEnd
- glDig: ; gültige Ziffer
- move.b d0,(a2)+
- moveq #80,d0
- add.l a7,d0
- cmp.l d0,a2
- bhs.b glEnd
- jsr fgetc__P06stream
- bra.b glLoop
- 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
- clr.l -(a7) ; Basis: unbekannt
- pea 4(a7) ; Endzeiger
- pea 16(a7) ; String
- jsr strtouvl__PCcPPci
- lea 12(a7),a7
- move.l (a7)+,a0
- tst.b (a0) ; Bis ans Ende ausgewertet?
- beq.b glRet
- glErr: moveq #-1,d0
- moveq #-1,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
-
-