Code archives/File Utilities/Bank IO commands
This code has been declared by its author to be Public Domain code.
Download source code
| These functions were made to export models directly to memory, so they could be encypted BEFORE ever going to hard disk. the calls work exactly like those of normal file operations the new bank will dynamically scale to fit whatever data is written to it |
;;//// BANK IO COMMANDS BY Jeff Frazier / Rifraf ;;//// These functions were made to export models directly to memory, so ;;//// they could be encypted BEFORE ever going to hard disk. ;;//// the calls work exactly like those of normal file operations ;;//// the new bank will dynamically scale to fit whatever data is ;;//// written to it ;;;-------------Example---------------;;.................... ; . ; . ;SeedRnd(MilliSecs()) ;f=Bank_Openfile() ;For i=1 To 5 ;Bank_writeint(f,Rand(1,32)) ;Next ;bank_writestring(f,"Hello there") ;For i=1 To 5 ;Bank_writefloat(f,Rnd(1,32)) ;Next ;bank_writestring(f,"Hello again") ;For i=1 To 5 ;Bank_writebyte(f,Rnd(1,32)) ;Next ;bank_seekfile(f,bank_filepos(f)-4) ;bank_writestring(f,"Final hello ") ; ;;; write data to a file using normal file functions . ; ;m$="testme.dat" ; ;bank_dump(f,m$) ; ;;; cleanup the bank ; ;Bank_CLOSEFILE(f) ; ;;;--------------------------------------------------------- ;F=OpenFile("TESTME.DAT") ;For I=1 To 5 ; DebugLog ReadInt(f) ; Next ;DebugLog ReadString$(f) ;For I=1 To 5 ; DebugLog ReadFloat(f) ; Next ;DebugLog ReadString$(f) ;For I=1 To 1 ; DebugLog ReadByte(f) ; Next ;DebugLog ReadString$(f) ;While Not Eof(f) ;DebugLog ReadByte(f) ;Wend ;CloseFile f ;WaitKey ;End ;bank file system Type Bankoffset Field offset Field bankid End Type Function BANK_OPENFILE() bo.bankoffset=New bankoffset bo\bankid=CreateBank(1) Return bo\bankid End Function Function BANK_CLOSEFILE(bank) Thisbank.bankoffset=Findbank(bank) FreeBank THISBANK\BANKID Delete thisbank End Function Function Bank_EOF(bank) Thisbank.bankoffset=Findbank(bank) If thisbank\offset=>BankSize(bank) Then Return True Return False End Function Function Bank_SeekFile(bank,offset) Thisbank.bankoffset=Findbank(bank) thisbank\offset=offset End Function Function Bank_FILEPOS(bank) Thisbank.bankoffset=Findbank(bank) Return thisbank\offset End Function ;;;;;;;;;;;;;;;;;;;WRITE FUNCTIONS;;;;;;;;;;;;;;;;;;;;;;;; Function Bank_Writeint(bank,intdata) Thisbank.bankoffset=Findbank(bank) If thisbank.bankoffset=Null Then RuntimeError "I/O bank does not exist : Bank_WriteInt" If thisbank\offset+4>(BankSize(thisbank\bankid)) Then neededsize=4-((BankSize(thisbank\bankid))-thisbank\offset) Bankresize(thisbank.bankoffset,neededsize) EndIf PokeInt(thisbank\bankid,thisbank\offset,intdata) thisbank\offset=thisbank\offset+4 End Function Function Bank_WriteFloat(bank,floatData#) Thisbank.bankoffset=Findbank(bank) If thisbank.bankoffset=Null Then RuntimeError "I/O bank does not exist : Bank_WriteFloat" If thisbank\offset+4>(BankSize(thisbank\bankid)) Then neededsize=4-((BankSize(thisbank\bankid))-thisbank\offset) Bankresize(thisbank.bankoffset,neededsize) EndIf PokeFloat(thisbank\bankid,thisbank\offset,floatData#) thisbank\offset=thisbank\offset+4 End Function Function Bank_WriteByte(bank,bytedata) Thisbank.bankoffset=Findbank(bank) If thisbank\offset+1>(BankSize(thisbank\bankid)) Then neededsize=1-((BankSize(thisbank\bankid))-thisbank\offset) Bankresize(thisbank.bankoffset,neededsize) EndIf Thisbank.bankoffset=Findbank(bank) If thisbank.bankoffset=Null Then RuntimeError "I/O bank does not exist : Bank_WriteByte" PokeByte(thisbank\bankid,thisbank\offset,byteData) thisbank\offset=thisbank\offset+1 End Function Function Bank_WriteString(bank,stringdata$) Thisbank.bankoffset=Findbank(bank) If thisbank.bankoffset=Null Then RuntimeError "I/O bank does not exist : Bank_WriteString" Length=Len(Stringdata$) Bank_Writeint(thisbank\bankid,length) For I=1 To Length bank_Writebyte(thisbank\bankid,Asc(Mid$(stringdata$,I,1))) Next End Function ;;;;;;;;;;;;;;;;;;;READ FUNCTIONS;;;;;;;;;;;;;;;;;;;;;;;; Function Bank_ReadInt(bank) Local THISV Thisbank.bankoffset=Findbank(bank) If thisbank.bankoffset=Null Then RuntimeError "I/O bank does not exist : Bank_ReadInt" If thisbank\offset+4>(BankSize(thisbank\bankid)) Then RuntimeError "Bank io read, past eof: Bank_ReadInt" THISV = PeekInt(thisbank\bankid,thisbank\offset) thisbank\offset=thisbank\offset+4 Return THISV End Function Function Bank_ReadFloat#(bank) Local THISV# Thisbank.bankoffset=Findbank(bank) If thisbank.bankoffset=Null Then RuntimeError "I/O bank does not exist : Bank_Readfloat" If thisbank\offset+4>(BankSize(thisbank\bankid)) Then RuntimeError "Bank io read, past eof: Bank_ReadFloat" THISV#= PeekFloat(thisbank\bankid,thisbank\offset) thisbank\offset=thisbank\offset+4 Return THISV# End Function Function Bank_ReadByte(bank) Local THISV Thisbank.bankoffset=Findbank(bank) If thisbank.bankoffset=Null Then RuntimeError "I/O bank does not exist : Bank_ReadByte" If thisbank\offset+1>(BankSize(thisbank\bankid)) Then RuntimeError "Bank io read, past eof: Bank_ReadByte" THISV= PeekByte(thisbank\bankid,thisbank\offset) thisbank\offset=thisbank\offset+1 Return THISV End Function Function Bank_ReadString$(bank) Local StringV$="" Local THISV THISV=Bank_ReadInt(bank) For I=1 To thisv Stringv$=stringv$+Chr$(bank_readbyte(bank)) Next Return Stringv$ End Function ;;;;;;;;;;;;;;;;;;;MISC;;;;;;;;;;;;;;;;;;;;;;;; Function Findbank.bankoffset(b_id) For bo.bankoffset=Each bankoffset If bo\bankid=b_id Then Return bo.bankoffset Next Return Null End Function ; BankSize, ResizeBank, CopyBank Example Function BankResize(bo.bankoffset,size) This=BankSize(bo\bankid) ResizeBank bo\bankid,(this+size) End Function Function BANK_DUMP(b_id,fn$) Thisbank.bankoffset=Findbank(b_id) If thisbank.bankoffset=Null Then RuntimeError "I/O bank does not exist : Bank_Dump" sz=BankSize(thisbank\bankid) f=WriteFile(fn$) WriteBytes (thisbank\bankid,f,0,sz) CloseFile f End Function |