home *** CD-ROM | disk | FTP | other *** search
- /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- -- EasyPlayer, EYP, Ralph Debusmann 1997-9
- */
-
- OPT MODULE
- OPT EXPORT
-
- MODULE 'dos/dos','*modules/reqs','*easyconst'
-
- PROC readfile(filename,bufferlen=0,header=NIL,headerlen=0,version=0) HANDLE
- DEF file=NIL,headerbuffer=NIL,fib=NIL:PTR TO fileinfoblock,buffer=NIL,filever
- IF (file:=Open(filename,MODE_OLDFILE))=0 THEN Raise(ERR_OPENR)
- IF headerlen
- NEW headerbuffer[headerlen]
- IF Read(file,headerbuffer,headerlen)=-1 THEN Raise(ERR_READHEADER)
- IF StrCmp(headerbuffer,header,headerlen-1)=FALSE THEN Raise(ERR_HEADER)
- IF version
- IF (filever:=Char(headerbuffer+headerlen-1))<>version THEN Raise(ERR_VERSION)
- ENDIF
- END headerbuffer[headerlen]
- ENDIF
- IF bufferlen=0
- NEW fib
- IF (ExamineFH(file,fib))=FALSE THEN Raise(ERR_EXAMINEFH)
- bufferlen:=fib.size-headerlen
- END fib
- ENDIF
- NEW buffer[bufferlen]
- IF Read(file,buffer,bufferlen)=-1 THEN Raise(ERR_READ)
- IF file THEN Close(file)
- EXCEPT
- IF file THEN Close(file)
- END headerbuffer[headerlen]
- END fib
- END buffer[bufferlen]
-
- buffer:=NIL
- bufferlen:=0
-
- SELECT exception
- CASE ERR_OPENR
- errorreq('Couldn''t open "%s" for reading.','readfile',[filename])
- CASE ERR_READHEADER
- errorreq('Couldn''t read "%s"''s file header.','readfile',[filename])
- CASE ERR_HEADER
- errorreq('"%s" has an invalid file header ("%s" expected).','readfile',[filename,header])
- CASE ERR_VERSION
- errorreq('"%s" has file version \d, \d expected.','readfile',[filename,filever,version])
- CASE ERR_EXAMINEFH
- errorreq('Couldn''t get length of "%s".','readfile',[filename])
- CASE ERR_READ
- errorreq('Couldn''t read from "%s".','readfile',[filename])
- ENDSELECT
- ReThrow()
- ENDPROC buffer,bufferlen
-
- /*********************************************************/
-
- PROC writefile(filename,buffer,bufferlen,askoverwrite=FALSE) HANDLE
- DEF file=0,doit=TRUE
- IF askoverwrite
- IF (file:=Open(filename,MODE_OLDFILE))<>0
- Close(file)
- file:=0
- IF (easyreq('Really overwrite "%s"?',[filename],'EYP Request','Yes|No')=0) THEN doit:=FALSE
- ENDIF
- ENDIF
- IF doit
- IF (file:=Open(filename,MODE_NEWFILE))=0 THEN Raise(ERR_OPENW)
- IF Write(file,buffer,bufferlen)=-1 THEN Raise(ERR_WRITE)
- ENDIF
- EXCEPT DO
- IF file THEN Close(file)
-
- SELECT exception
- CASE ERR_OPENW
- errorreq('Couldn''t open "%s" for writing.','writefile',[filename])
- CASE ERR_WRITE
- errorreq('Couldn''t write to "%s".','writefile',[filename])
- ENDSELECT
- ReThrow()
- ENDPROC
-