| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- #Import "<mojo>"
- Class DataConversion
- Method StringToInt:Int(val:String)
- Return Int(val)
- End
- Method IntToString:String(val:Int)
- Return String(val)
- End
- End
- Class FileSystem Extends DataConversion
-
- Field fileData:String=""
-
- Field index:StringMap<FileStream>
-
- Field _header:String="MKYDATA"
-
- Method LoadAll:Void()
-
- Local numFiles:Int=0
-
- Local stream:FileStream
-
- Local len:Int=0
-
- Local ptri:Int=0
-
- ' Self.fileData=LoadState() '********************************************************* fix this ****************
-
- Self.index=New StringMap<FileStream>
-
- If(Self.fileData.Length>0)
-
- If(Self.fileData.StartsWith(Self._header))
-
- Self.index.Clear()
-
- ptri+=Self._header.Length
-
- numFiles=Self.StringToInt(Self.fileData.Mid(ptri,3)) '.[ptr..ptr+3])
-
- ptri+=3
-
- If(numFiles>0)
-
- For Local n:Int=1 To numFiles
-
- stream=New FileStream()
-
- len=Int(Self.fileData.Mid(ptri,3)) ',[ptr..ptr+3])
-
- ptri+=3
-
- If(len>0)
-
- stream.filename=Self.fileData.Mid(ptri,len) '[ptr..ptr+len]
-
- ptri+=len
-
- End
-
- len=Int(Self.fileData.Mid(ptri,3)) '[ptr..ptr+3])
-
- ptri+=3
-
- If(len>0)
-
- stream.data=Self.fileData.Mid(ptri,len) '[ptr..ptr+len]
-
- ptri+=len
-
- End
-
- Self.index.Add(stream.filename,stream)
-
- End
- End
- End
- Else
- ' SaveState("") '********************************** fix this *********************************************8
- End
- End
-
- Method New()
- Self.LoadAll()
- End
-
- Method FileExists:Bool(filename:String)
-
- filename=filename.ToLower()
-
- If(Self.index.Contains(filename))
-
- Return True
-
- Else
-
- Return False
-
- End
-
- End
-
- Method ReadFile:FileStream(filename:String)
-
- filename=filename.ToLower()
-
- Local f:FileStream
-
- f=Self.index.Get(filename)
- f.fileptr=0
-
- Return f
-
- End
-
- Method WriteFile:FileStream(filename:String)
-
- Local f:FileStream= New FileStream()
-
- f.filename=filename.ToLower()
-
- f.fileptr=0
-
- Self.index.Add(f.filename.ToLower(),f)
-
- Return f
-
- End
-
- Method SaveAll:Void()
-
- Local f:FileStream
-
- Self.fileData=Self._header
-
- Self.fileData=Self.fileData+Self.IntToString(Self.index.Count())
-
- If(Self.index.Count()>0)
-
- For f = Eachin Self.index.Values
-
- Self.fileData=Self.fileData+Self.IntToString(f.filename.Length)
-
- If(f.filename.Length>0)
-
- Self.fileData=Self.fileData+f.filename
-
- End
-
- Self.fileData=Self.fileData+Self.IntToString(f.data.Length)
-
- If(f.data.Length>0)
-
- Self.fileData=Self.fileData+f.data
-
- End
-
- End
-
- End
-
- ' SaveState(Self.fileData) '************************* fix ***************************
- End
- End
- Class FileStream Extends DataConversion
-
- Field filename:String=""
-
- Field data:String=""
-
- Field fileptr:Int=0
-
- Method ReadString:String()
-
- Local result:String=""
-
- Local strLen:Int=Int(Self.data.Mid(Self.fileptr,3)) '[Self.fileptr..Self.fileptr+3])
-
- Self.fileptr+=3
-
- If(strLen>0)
-
- result=Self.data.Mid(Self.fileptr,strLen) '[Self.fileptr..Self.fileptr+strLen]
-
- Self.fileptr+=strLen
-
- End
-
- Return result
-
- End
-
- Method ReadInt:Int()
-
- Local result:String=""
-
- result=Self.data.Mid(Self.fileptr,3) '[Self.fileptr..Self.fileptr+3]
-
- Self.fileptr+=3
-
- Return Int(result)
-
- End
-
- Method WriteString:Void(val:String)
-
- Self.data=Self.data+Self.IntToString(val.Length)
-
- If(val.Length>0)
-
- Self.data=Self.data+val
-
- End
-
- End
-
- Method WriteInt:Void(val:Int)
-
- Self.data=Self.data+Self.IntToString(val)
-
- End
-
- End
|