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);
        }