home *** CD-ROM | disk | FTP | other *** search
- ''
- '' $Id$
- ''
- '' Buffered DOS IFF I/O routines
- ''
- '' (c) Copyright 1994 HiSoft
- ''
-
- 'REM $INCLUDE Exec.bh
- 'REM $INCLUDE DOS.bh
- 'REM $INCLUDE IFFParse.bh
- 'REM $INCLUDE Utility.bc
-
- '
- ' Buffered file I/O hook functions which IFFParse will call.
- ' A RETURN of 0 indicates success (no ERROR).
- '
- ' iffparse.library calls this code via the Hook
- '
- FUNCTION bufferedDOSStream&(BYVAL h&, BYVAL iff&, BYVAL actionpkt&)
- LOCAL stream&, nbytes&, buf&, r&, command&
-
- stream& = PEEKL(iff& + iff_Stream%)
- nbytes& = PEEKL(actionpkt& + sc_NBytes%)
- buf& = PEEKL(actionpkt& + sc_Buf%)
- command& = PEEKL(actionpkt& + sc_Command%)
-
- SELECT CASE command&
- CASE IFFSCC_READ&
- r& = FRead&(stream&, buf&, 1, nbytes&)
- IF r& = nbytes& THEN r& = 0 ELSE r& = IFFERR_READ&
-
- CASE IFFSCC_WRITE&
- r& = FWrite&(stream&, buf&, 1, nbytes&)
- IF r& = nbytes& THEN r& = 0 ELSE r& = IFFERR_WRITE&
-
- CASE IFFSCC_SEEK&
- r& = Flush&(stream&)
- r& = Seek&(stream&, nbytes&, OFFSET_CURRENT&)
- IF r& = -1 THEN r& = IFFERR_SEEK& ELSE r& = 0
-
- CASE REMAINDER
- r& = 0
- END SELECT
- bufferedDOSStream& = r&
- END FUNCTION
-
- SUB initIFFasBufferedDOS(BYVAL iff&)
- STATIC hookinitialised_flag,h%(1)
-
- IF hookinitialised_flag= 0 THEN
- DIM h%(Hook_sizeof% \ 2)
- INITHOOK VARPTR(h%(0)),VARPTRS(bufferedDOSStream&)
- hookinitialised_flag=-1
- END IF
-
- InitIFF iff&, IFFF_FSEEK& OR IFFF_RSEEK&, VARPTR(h%(0))
- END SUB
-