public bool importFile(int fnum, bool isid, byte[] data) { DinnerEntry e = fileInfo(fnum, isid); FileHeader hdr = readHeader(fnum, isid); byte[] fl; if (e.compressed && hdr.compressed && hdr.tot_size != e.size) { UInt32 decompsz = (uint)data.Length; if (e.header) { hdr = new FileHeader(data); fl = data; data = new byte[fl.Length - FileHeader.size]; Array.Copy(fl, FileHeader.size, data, 0, data.Length); hdr.setSize(decompsz); } else { hdr.setSize(decompsz); } byte[] cmpr = RNC.compress(data); data = new byte[cmpr.Length + FileHeader.size]; Array.Copy(hdr.buf, 0, data, 0, FileHeader.size); Array.Copy(cmpr, 0, data, FileHeader.size, cmpr.Length); } int resize = data.Length - (int)e.size; if (resize != 0) { resizeDisk(resize, ref e); } Array.Copy(data, 0, diskbuf, e.offset, data.Length); return(true); }
public byte[] readFile(int fnum, bool isid) { DinnerEntry e = fileInfo(fnum, isid); FileHeader hdr = readHeader(fnum, isid); byte[] res = null; if (e.compressed && hdr.compressed && hdr.tot_size != e.size) { byte[] fl = new byte[e.size - FileHeader.size]; Array.Copy(diskbuf, e.offset + FileHeader.size, fl, 0, e.size - FileHeader.size); res = RNC.decompress(fl); if (e.header) { fl = res; res = new byte[fl.Length + FileHeader.size]; Array.Copy(hdr.buf, res, FileHeader.size); Array.Copy(fl, 0, res, FileHeader.size, fl.Length); } } else { res = new byte[e.size]; Array.Copy(diskbuf, e.offset, res, 0, e.size); } return(res); }
public FileHeader readHeader(int fnum, bool isid) { DinnerEntry e = fileInfo(fnum, isid); byte[] finfo = new byte[FileHeader.size]; Array.Copy(diskbuf, e.offset, finfo, 0, FileHeader.size); return(new FileHeader(finfo)); }
public void setDinner(DinnerEntry e) { for (int i = 0; i < dinners.Length; i++) { if (dinners[i].id == e.id) { dinners[i] = e; dinners[i].resized = true; return; } } }
public void resizeDisk(int resize, ref DinnerEntry e) { for (int i = 0; i < dinners.Length; i++) { dinners[i].resized = false; } uint prevsz = e.size; e.size = (uint)((int)e.size + resize); uint curpos = normpos(e.offset + prevsz); uint newpos = normpos(e.offset + e.size); setDinner(e); if (curpos == newpos) { return; } DinnerEntry ce; while (!(ce = findDinnerByOffset(curpos)).isEmpty()) { ce.old_offset = ce.offset; ce.offset = newpos; // Console.WriteLine(String.Format("found {0:d} @{1:X8}->@{2:X8} size={3:X4}", ce.id,ce.old_offset,ce.offset, ce.size)); setDinner(ce); curpos += ce.size; newpos += ce.size; normpos(ref curpos); normpos(ref newpos); } for (int i = 0; i < dinners.Length; i++) { dinners[i].resized = false; } // if (newpos != diskbuf.Length) { byte[] prevbuf = diskbuf; diskbuf = new byte[newpos]; Array.Copy(prevbuf, diskbuf, e.offset); curpos = normpos(e.offset + e.size); while (!(ce = findDinnerByOffset(curpos)).isEmpty()) { // Console.WriteLine(String.Format("moveing {0:d} {1:X8}->{2:X8} {3:X4}",ce.id,ce.old_offset,ce.offset,ce.size)); Array.Copy(prevbuf, ce.old_offset, diskbuf, ce.offset, ce.size); curpos += ce.size; normpos(ref curpos); setDinner(ce); } } }
public byte[] readFile(int fnum, bool isid) { DinnerEntry e = fileInfo(fnum, isid); FileHeader hdr = readHeader(fnum, isid); byte[] res = null; if (e.compressed && hdr.compressed && hdr.tot_size != e.size) { throw new Exception("Cant get compressed file"); } else { res = new byte[e.size]; Array.Copy(diskbuf, e.offset, res, 0, e.size); } return(res); }
public bool readDinner() { FileStream fs = new FileStream(path + disk_file, FileMode.Open); diskbuf = new byte[fs.Length]; fs.Read(diskbuf, 0, (int)fs.Length); fs.Close(); BinaryReader br = new BinaryReader(new FileStream(path + dinner_file, FileMode.Open)); dinnerSize = br.ReadUInt32(); version = getVersion(); dinners = new DinnerEntry[dinnerSize]; for (uint i = 0; i < dinnerSize; i++) { dinners[i] = new DinnerEntry(br, version); } br.Close(); return(true); }
public bool importFile(int fnum, bool isid, byte[] data) { DinnerEntry e = fileInfo(fnum, isid); FileHeader hdr = readHeader(fnum, isid); byte[] fl; if (e.compressed && hdr.compressed && hdr.tot_size != e.size) { UInt32 decompsz = (uint)data.Length; if (e.header) { hdr = new FileHeader(data); fl = data; data = new byte[fl.Length - FileHeader.size]; Array.Copy(fl, FileHeader.size, data, 0, data.Length); hdr.setSize(decompsz); } else { hdr.setSize(decompsz); } byte[] cmpr = RNCCompressor.compress(data); data = new byte[cmpr.Length + FileHeader.size]; Array.Copy(hdr.buf, 0, data, 0, FileHeader.size); Array.Copy(cmpr, 0, data, FileHeader.size, cmpr.Length); } int resize = data.Length - (int)e.size; if (resize != 0) { resizeDisk(resize, ref e); } if (InstallPack) { FileStream f = new FileStream(Path.Combine(path, fnum.ToString() + ".bin"), FileMode.Create); f.Write(data, 0, data.Length); f.Close(); } Array.Copy(data, 0, diskbuf, e.offset, data.Length); return(true); }
public void setDinner(DinnerEntry e) { for (int i=0;i<dinners.Length;i++) if (dinners[i].id == e.id) { dinners[i] = e; dinners[i].resized = true; return; } }
public void resizeDisk(int resize,ref DinnerEntry e) { for (int i = 0; i < dinners.Length; i++) dinners[i].resized = false; uint prevsz = e.size; e.size = (uint)((int)e.size+resize); uint curpos = normpos(e.offset + prevsz); uint newpos = normpos(e.offset + e.size); setDinner(e); if (curpos == newpos) return; DinnerEntry ce; while (!(ce = findDinnerByOffset(curpos)).isEmpty()) { ce.old_offset = ce.offset; ce.offset = newpos; // Console.WriteLine(String.Format("found {0:d} @{1:X8}->@{2:X8} size={3:X4}", ce.id,ce.old_offset,ce.offset, ce.size)); setDinner(ce); curpos += ce.size; newpos += ce.size; normpos(ref curpos); normpos(ref newpos); } for (int i = 0; i < dinners.Length; i++) dinners[i].resized = false; // if (newpos != diskbuf.Length) { byte[] prevbuf = diskbuf; diskbuf=new byte[newpos]; Array.Copy(prevbuf, diskbuf, e.offset); curpos = normpos(e.offset + e.size); while (!(ce = findDinnerByOffset(curpos)).isEmpty()) { // Console.WriteLine(String.Format("moveing {0:d} {1:X8}->{2:X8} {3:X4}",ce.id,ce.old_offset,ce.offset,ce.size)); Array.Copy(prevbuf, ce.old_offset, diskbuf, ce.offset, ce.size); curpos += ce.size; normpos(ref curpos); setDinner(ce); } } }
public bool readDinner() { FileStream fs = new FileStream(path + disk_file, FileMode.Open); diskbuf=new byte[fs.Length]; fs.Read(diskbuf,0,(int)fs.Length); fs.Close(); BinaryReader br=new BinaryReader(new FileStream(path+dinner_file,FileMode.Open)); dinnerSize=br.ReadUInt32(); version = getVersion(); dinners = new DinnerEntry[dinnerSize]; for (uint i=0;i<dinnerSize;i++) dinners[i]=new DinnerEntry(br,version); br.Close(); return true; }