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

  1.  
  2. * Maxon C++ Library:
  3. * Modul "istream_short"
  4. * Jens Gelhar 16.04.92, 15.04.95
  5.  
  6.     xdef    op__rightshift__istream__TRs,op__rightshift__istream__TRUs
  7.  
  8.     xref    fgetc__P06stream,ungetc__iP06stream,strtol__PCcPPci
  9.     xref    _errno,_fgetlong
  10.  
  11. op__rightshift__istream__TRs:    ; (istream&, short&)
  12.     move.l    4(a7),a0
  13.     move.l    (a0),a0
  14.     move.l    (a0),-(a7)
  15.     jsr    _fgetlong
  16.     addq.l    #4,a7
  17.     move.l    8(a7),a0
  18.     tst.l    d1
  19.     beq.b    .Plus
  20.     addq.l    #1,d1
  21.     beq.b    .Minus
  22.     tst.l    d1
  23.     bmi.b    .MinInt
  24.     bra.b    .MaxInt
  25. .Plus
  26.     cmp.l    #$7FFF,d0
  27.     bls.b    .Ok
  28. .MaxInt
  29.     move.w    #$7FFF,d0
  30.     bra.b    .Err
  31. .Minus
  32.     cmp.l    #$FFFF8000,d0
  33.     bge.b    .Ok
  34. .MinInt
  35.     move.w    #$8000,d0
  36. .Err    move.l    #1000,_errno     ; ERANGE
  37. .Ok    move.w    d0,(a0)
  38.     movem.l    (a7)+,a0/d1
  39.     move.l    4(a7),d0
  40.     rts
  41.  
  42. op__rightshift__istream__TRUs:    ; (istream*, unsigned short&)
  43.     move.l    4(a7),a0
  44.     move.l    (a0),a0
  45.     move.l    (a0),-(a7)
  46.     jsr    _fgetlong
  47.     addq.l    #4,a7
  48.     move.l    8(a7),a0
  49.     tst.l    d1
  50.     bne.b    .Err
  51.     cmp.l    #$FFFF,d0
  52.     bls.b    .OK
  53. .Err    moveq    #-1,d0
  54.     move.l    #1000,_errno     ; ERANGE
  55. .OK    move.w    d0,(a0)
  56.     move.l    4(a7),d0
  57.     rts
  58.  
  59.     end
  60.  
  61.