home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Basic / MAXONB32.DMS / in.adf / Includes.lha / BH / BLib / IFFBufIO.bas < prev    next >
Encoding:
BASIC Source File  |  1994-04-29  |  1.3 KB  |  59 lines

  1. ''
  2. '' $Id$
  3. ''
  4. '' Buffered DOS IFF I/O routines
  5. ''
  6. '' (c) Copyright 1994 HiSoft
  7. ''
  8.  
  9. 'REM $INCLUDE Exec.bh
  10. 'REM $INCLUDE DOS.bh
  11. 'REM $INCLUDE IFFParse.bh
  12. 'REM $INCLUDE Utility.bc
  13.  
  14. '
  15. ' Buffered file I/O hook functions which IFFParse will call.
  16. ' A RETURN of 0 indicates success (no ERROR).
  17. '
  18. ' iffparse.library calls this code via the Hook
  19. '
  20. FUNCTION bufferedDOSStream&(BYVAL h&, BYVAL iff&, BYVAL actionpkt&)
  21.     LOCAL stream&, nbytes&, buf&, r&, command&
  22.  
  23.     stream& = PEEKL(iff& + iff_Stream%)
  24.     nbytes& = PEEKL(actionpkt& + sc_NBytes%)
  25.     buf& = PEEKL(actionpkt& + sc_Buf%)
  26.     command& = PEEKL(actionpkt& + sc_Command%)
  27.  
  28.     SELECT CASE command&
  29.         CASE IFFSCC_READ&
  30.             r& = FRead&(stream&, buf&, 1, nbytes&)
  31.             IF r& = nbytes& THEN r& = 0 ELSE r& = IFFERR_READ&
  32.  
  33.         CASE IFFSCC_WRITE&
  34.             r& = FWrite&(stream&, buf&, 1, nbytes&)
  35.             IF r& = nbytes& THEN r& = 0 ELSE r& = IFFERR_WRITE&
  36.  
  37.         CASE IFFSCC_SEEK&
  38.             r& = Flush&(stream&)
  39.             r& = Seek&(stream&, nbytes&, OFFSET_CURRENT&)
  40.             IF r& = -1 THEN r& = IFFERR_SEEK& ELSE r& = 0
  41.  
  42.         CASE REMAINDER
  43.             r& = 0
  44.     END SELECT
  45.     bufferedDOSStream& = r&
  46. END FUNCTION
  47.  
  48. SUB initIFFasBufferedDOS(BYVAL iff&)
  49. STATIC hookinitialised_flag,h%(1)
  50.     
  51.     IF hookinitialised_flag= 0 THEN
  52.             DIM h%(Hook_sizeof% \ 2)
  53.             INITHOOK VARPTR(h%(0)),VARPTRS(bufferedDOSStream&)
  54.             hookinitialised_flag=-1
  55.     END IF
  56.     
  57.     InitIFF iff&, IFFF_FSEEK& OR IFFF_RSEEK&, VARPTR(h%(0))
  58. END SUB
  59.