home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MCD.DMS / in.adf / libsrc / istream_short.asm < prev    next >
Encoding:
Assembly Source File  |  1995-03-08  |  994 b   |  60 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.     move.l    4(a7),d0
  39.     rts
  40.  
  41. op__rightshift__istream__TRUs:    ; (istream*, unsigned short&)
  42.     move.l    4(a7),a0
  43.     move.l    (a0),a0
  44.     move.l    (a0),-(a7)
  45.     jsr    _fgetlong
  46.     addq.l    #4,a7
  47.     move.l    8(a7),a0
  48.     tst.l    d1
  49.     bne.b    .Err
  50.     cmp.l    #$FFFF,d0
  51.     bls.b    .OK
  52. .Err    moveq    #-1,d0
  53.     move.l    #1000,_errno     ; ERANGE
  54. .OK    move.w    d0,(a0)
  55.     move.l    4(a7),d0
  56.     rts
  57.  
  58.     end
  59.  
  60.