home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaMiscModsCD3.iso / _PROGRAMME / PLAYER / GUI / EasyPlayer.lha / EYP / Source / easyfile.e < prev    next >
Encoding:
Text File  |  1999-09-25  |  2.4 KB  |  83 lines

  1. /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  2. -- EasyPlayer, EYP, Ralph Debusmann 1997-9
  3. */
  4.  
  5. OPT MODULE
  6. OPT EXPORT
  7.  
  8. MODULE 'dos/dos','*modules/reqs','*easyconst'
  9.  
  10. PROC readfile(filename,bufferlen=0,header=NIL,headerlen=0,version=0) HANDLE
  11. DEF file=NIL,headerbuffer=NIL,fib=NIL:PTR TO fileinfoblock,buffer=NIL,filever
  12.     IF (file:=Open(filename,MODE_OLDFILE))=0 THEN Raise(ERR_OPENR)
  13.     IF headerlen
  14.         NEW headerbuffer[headerlen]
  15.         IF Read(file,headerbuffer,headerlen)=-1 THEN Raise(ERR_READHEADER)
  16.         IF StrCmp(headerbuffer,header,headerlen-1)=FALSE THEN Raise(ERR_HEADER)
  17.         IF version
  18.             IF (filever:=Char(headerbuffer+headerlen-1))<>version THEN Raise(ERR_VERSION)
  19.         ENDIF
  20.         END headerbuffer[headerlen]
  21.     ENDIF
  22.     IF bufferlen=0
  23.         NEW fib
  24.         IF (ExamineFH(file,fib))=FALSE THEN Raise(ERR_EXAMINEFH)
  25.         bufferlen:=fib.size-headerlen
  26.         END fib
  27.     ENDIF
  28.     NEW buffer[bufferlen]
  29.     IF Read(file,buffer,bufferlen)=-1 THEN Raise(ERR_READ)
  30.     IF file THEN Close(file)
  31. EXCEPT
  32.     IF file THEN Close(file)
  33.     END headerbuffer[headerlen]
  34.     END fib
  35.     END buffer[bufferlen]
  36.  
  37.     buffer:=NIL
  38.     bufferlen:=0
  39.  
  40.     SELECT exception
  41.         CASE ERR_OPENR
  42.             errorreq('Couldn''t open "%s" for reading.','readfile',[filename])
  43.         CASE ERR_READHEADER
  44.             errorreq('Couldn''t read "%s"''s file header.','readfile',[filename])
  45.         CASE ERR_HEADER
  46.             errorreq('"%s" has an invalid file header ("%s" expected).','readfile',[filename,header])
  47.         CASE ERR_VERSION
  48.             errorreq('"%s" has file version \d, \d expected.','readfile',[filename,filever,version])
  49.         CASE ERR_EXAMINEFH
  50.             errorreq('Couldn''t get length of "%s".','readfile',[filename])
  51.         CASE ERR_READ
  52.             errorreq('Couldn''t read from "%s".','readfile',[filename])
  53.     ENDSELECT
  54.     ReThrow()
  55. ENDPROC buffer,bufferlen
  56.  
  57. /*********************************************************/
  58.  
  59. PROC writefile(filename,buffer,bufferlen,askoverwrite=FALSE) HANDLE
  60. DEF file=0,doit=TRUE
  61.     IF askoverwrite
  62.         IF (file:=Open(filename,MODE_OLDFILE))<>0
  63.             Close(file)
  64.             file:=0
  65.             IF (easyreq('Really overwrite "%s"?',[filename],'EYP Request','Yes|No')=0) THEN doit:=FALSE
  66.         ENDIF
  67.     ENDIF
  68.     IF doit
  69.         IF (file:=Open(filename,MODE_NEWFILE))=0 THEN Raise(ERR_OPENW)
  70.         IF Write(file,buffer,bufferlen)=-1 THEN Raise(ERR_WRITE)
  71.     ENDIF
  72. EXCEPT DO
  73.     IF file THEN Close(file)
  74.  
  75.     SELECT exception
  76.         CASE ERR_OPENW
  77.             errorreq('Couldn''t open "%s" for writing.','writefile',[filename])
  78.         CASE ERR_WRITE
  79.             errorreq('Couldn''t write to "%s".','writefile',[filename])
  80.     ENDSELECT
  81.     ReThrow()
  82. ENDPROC
  83.