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

  1.  
  2. * Maxon C++
  3. * Library-Modul "seek.o"
  4. * Jens Gelhar 21.04.92, 20.02.94, 15,04,94
  5.  
  6.     xdef    _fseek,fseek__P06streamji
  7.     xdef    _ftell,ftell__P06stream
  8.     xdef    _rewind,rewind__P06stream
  9.     xdef    _fgetpos,fgetpos__P06streamPi
  10.     xdef    _fsetpos,fsetpos__P06streamPCi
  11.  
  12.     xref    _DosBase,fflush__P06stream,_errno
  13.  
  14. Seek        = -66
  15. IoErr        = -132
  16.  
  17. str_ungetch    = 4
  18. str_error    = 7
  19. str_bufptr    = 8
  20.  
  21. _fsetpos:
  22. fsetpos__P06streamPCi:
  23.     move.l    4+4(a7),a0
  24.     move.l    #-1,-(a7)
  25.     move.l    (a0),-(a7)       ; Offset
  26.     move.l    4+4(a7),-(a7)
  27.     bsr.b    _fseek
  28.     lea    12(a7),a7
  29.     rts
  30.  
  31. _rewind:
  32. rewind__P06stream:
  33.     move.l    #-1,-(a7)
  34.     clr.l    -(a7)
  35.     move.l    1*4+4(a7),-(a7)
  36.     bsr.b    _fseek
  37.     lea    12(a7),a7
  38.     rts
  39.  
  40. _fseek:
  41. fseek__P06streamji:
  42.     movem.l    d2-d3/a2/a6,-(a7)
  43. par1    = 4*4+4
  44.     ; ab par1(a7): FILE*, offset, modus
  45.     move.l    par1(a7),a0
  46.     tst.l    (a0)
  47.     beq.b    skerr1      ; keine Filehandle
  48.     clr.b    str_ungetch(a0)
  49.     clr.b    str_error(a0)
  50.     tst.l    str_bufptr(a0)
  51.     beq.b    sk1
  52.     move.l    a0,-(a7)
  53.     jsr    fflush__P06stream     ; Puffer leeren!
  54.     move.l    (a7)+,a0
  55. sk1:    move.l     (a0),d1
  56.     movem.l par1+4(a7),d2/d3
  57.     tst.l    d3
  58.     bpl.b    sk2
  59.     tst.l    d2
  60.     bmi.b    skOK
  61. sk2:    move.l _DosBase,a6
  62.     jsr    Seek(a6)
  63.     tst.l    d0
  64.     bpl.b    skOK
  65.     move.l    _DosBase,a6
  66.     jsr    IoErr(a6)
  67.     move.l    d0,_errno
  68.     bra.b    skerr2
  69. skOK:    moveq    #0,d0
  70. skret:    movem.l    (a7)+,d2-d3/a2/a6
  71.     rts
  72. skerr1:    moveq    #-1,d0
  73. skerr2:    move.l    par1(a7),a0
  74.     move.b    d0,str_error(a0)
  75.     bra.b    skret
  76.  
  77. _ftell:
  78. ftell__P06stream:
  79.     movem.l    d2-d3/a2/a6,-(a7)
  80. par2    = 4*4+4
  81.     move.l    par2(a7),a0
  82.     move.l    (a0),d1
  83.     beq.b    .err1
  84.     tst.l    str_bufptr(a0)
  85.     beq.b    .nobuf
  86.     move.l    a0,-(a7)
  87.     jsr    fflush__P06stream    ; Puffer leeren!
  88.     move.l    (a7)+,a0
  89.     bra.b    .get            ; "EOF" nicht testen
  90. .nobuf    cmp.b    #-1,7(a0)
  91.     beq.b    .err1            ; EoF?
  92. .get    moveq    #0,d2
  93.     moveq    #0,d3
  94.     move.l    _DosBase,a6
  95.     jsr    Seek(a6)
  96. .ret    movem.l (a7)+,d2-d3/a2/a6
  97.     rts
  98. .err1    moveq    #-1,d0
  99.     bra.b    .ret
  100.  
  101. _fgetpos:
  102. fgetpos__P06streamPi:
  103.     move.l    4(a7),-(a7)
  104.     bsr.b    _ftell
  105.     addq.l    #4,a7
  106.     move.l    4+4(a7),a0
  107.     move.l    d0,(a0)
  108.     rts
  109.  
  110.     end
  111.  
  112.