home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC6.DMS / in.adf / libsrc.lha / LIBSRC / istream_long.asm < prev    next >
Encoding:
Assembly Source File  |  1994-04-15  |  1.9 KB  |  109 lines

  1.  
  2. * Maxon C++ Library:
  3. * Modul "istream_long"
  4. * Jens Gelhar 08.05.93, 15.04.94
  5.  
  6.     xdef    op__rightshift__istream__TRl,op__rightshift__istream__TRUl
  7.     xdef    _fgetulong
  8.  
  9.     xref    fgetc__P06stream,ungetc__iP06stream,strtouvl__PCcPPci
  10.     xref    _fgetlong
  11.     xref    _errno
  12.  
  13. op__rightshift__istream__TRl:
  14.     move.l    4(a7),a0
  15.     move.l    (a0),a0
  16.     move.l    (a0),-(a7)
  17.     jsr    _fgetlong
  18.     addq.l    #4,a7
  19.     move.l    8(a7),a0
  20.     movem.l    d0/d1,(a0)
  21.     move.l    4(a7),d0
  22.     rts
  23.  
  24. op__rightshift__istream__TRUl:    ; (istream*, unsigned long long&)
  25.     move.l 4(a7),a0
  26.     move.l (a0),a0
  27.     move.l (a0),-(a7)
  28.     bsr.b    _fgetulong
  29.     addq.l    #4,a7
  30.     move.l    8(a7),a0
  31.     movem.l    d0/d1,(a0)
  32.     move.l    4(a7),d0
  33.     rts
  34.  
  35. _fgetulong:
  36.     ; Stackparameter: stream*
  37.     move.l    a2,-(a7)
  38.     lea    -80(a7),a7
  39.     move.l    84+4(a7),-(a7)    ; stream
  40.     lea    4(a7),a2
  41. glOverrd:
  42.     jsr    fgetc__P06stream
  43.     cmp.l    #' ',d0
  44.     bls.b    glOverrd
  45.     cmp.b    #'+',d0
  46.     beq.b    glPlus
  47.     bra.b    glNoSign
  48. glPlus:    jsr    fgetc__P06stream
  49. glNoSign:
  50.     cmp.b    #'9',d0
  51.     bhi    glErr
  52.     cmp.b    #'0',d0
  53.     blo.b    glErr
  54.     bne.b    glDec
  55.     ; erste Ziffer ist 0:
  56.     move.b    d0,(a2)+
  57.     jsr    fgetc__P06stream
  58.     cmp.b    #'X',d0
  59.     beq.b    glHex
  60.     cmp.b    #'x',d0
  61.     bne.b    glLoop
  62. glHex:
  63. glDec:    move.b    d0,(a2)+
  64.     jsr    fgetc__P06stream
  65. glLoop:    cmp.b    #'0',d0
  66.     blo.b    glEnd
  67.     cmp.b    #'9',d0
  68.     bls.b    glDig
  69.     cmp.b    #'A',d0
  70.     blo.b    glEnd
  71.     cmp.b    #'F',d0
  72.     bls.b    glDig
  73.     cmp.b    #'a',d0
  74.     blo.b    glEnd
  75.     cmp.b    #'f',d0
  76.     bhi.b    glEnd
  77. glDig:    ; gültige Ziffer
  78.     move.b    d0,(a2)+
  79.     moveq    #80,d0
  80.     add.l    a7,d0
  81.     cmp.l    d0,a2
  82.     bhs.b    glEnd
  83.     jsr    fgetc__P06stream
  84.     bra.b    glLoop
  85. glEnd:    clr.b    (a2)
  86.     move.l    d0,-(a7)
  87.     jsr    ungetc__iP06stream
  88.     addq.l    #4,a7
  89.     ; Zahl gelesen, liegt bei 4(a7) auf dem Stack
  90.     clr.l    -(a7)        ; unser Ende-Pointer
  91.     clr.l    -(a7)        ; Basis: unbekannt
  92.     pea    4(a7)        ; Endzeiger
  93.     pea    16(a7)        ; String
  94.     jsr    strtouvl__PCcPPci
  95.     lea    12(a7),a7
  96.     move.l    (a7)+,a0
  97.     tst.b    (a0)        ; Bis ans Ende ausgewertet?
  98.     beq.b    glRet
  99. glErr:    moveq    #-1,d0
  100.     moveq    #-1,d1
  101.     move.l    #1001,_errno    ; ENONUM
  102. glRet:    addq.l    #4,a7        ; stream* vom Stack nehmen
  103.     lea    80(a7),a7
  104.     move.l    (a7)+,a2
  105.     rts
  106.  
  107.     end
  108.  
  109.