You can read a file into a buffer like: fsize&=GetFileSize&:(file$) REM GetFileSize is in sysram1.opx or systinfo.opx, not sure pBuffAddr&=ALLOC(fsize&) REM alloc a buffer to hold the file ret%=IOOPEN(FileHandle%,file$,0) IF ret%<0 RETURN ret% REM if something goes wrong ENDIF REM read your file into buffer ret%=IOREAD(FileHandle%,pBuffAddr&,fsize&) IF ret%<0 IOCLOSE(FileHandle%) RETURN ret% REM if something goes wrong ENDIF IOCLOSE(FileHandle%) Now you may be able to use the code I listed before, except that you have to change the size long: len&=fsize& REM Instead of len&=LEN(data$) and write the buffer like: IOWRITE(id%,pBuffAddr&,len&) REM instead of IOWRITE(id%,ADDR(data$)+1,len&) And remember to free the buffer when you have finished: FREEALLOC(pBuffAddr&) I can't remember if you have to change the footer, but it is worth trying out this code first. Roger