OcadFileHeader ReadFileHeader() { OcadFileHeader fh = new OcadFileHeader(); fh.Read(reader); return fh; }
OcadSetup ReadSetup(OcadFileHeader fh) { OcadSetup setup = new OcadSetup(); setup.Read(reader, fh.SetupPos, fh.SetupSize); return setup; }
// Write the given map to an OCAD file. // version = 6,7,8 -- the OCAD version // usedSavedOcadInfo utilizes symbol information that was saved away if this file was // loaded from OCAD, for better round tripping. Setup structure information and // symbol header information is always used. public void WriteMap(Map map, string filename, int version, bool useSavedOcadInfo) { using (map.Read()) { this.map = map; this.version = version; this.filename = filename; //this.useOcadSaved = useSavedOcadInfo; if (version < 6 || version > 9) throw new ArgumentException("Bad version number", "version"); OcadFileHeader fileHeader = new OcadFileHeader(); using (writer = new BinaryWriter(new FileStream(filename, FileMode.Create, FileAccess.ReadWrite), Encoding.GetEncoding(1252))) { fileHeader.OCADMark = 3245; if (version == 6) fileHeader.SectionMark = 0; else if (version == 7) fileHeader.SectionMark = 7; else if (version == 8) fileHeader.SectionMark = 2; else fileHeader.SectionMark = 0; fileHeader.Version = (short) version; fileHeader.Subversion = 0; // other fields will be filled in later and re-written at the end fileHeader.Write(writer); if (version <= 8) { WriteSymbolHeader(); fileHeader.SetupPos = WriteSetup(out fileHeader.SetupSize); } fileHeader.FirstSymBlk = WriteSymbols(); fileHeader.FirstIdxBlk = WriteObjects(); if (version >= 8) fileHeader.FirstStIndexBlk = WriteStringParameters(); // rewrite the file header writer.Seek(0, SeekOrigin.Begin); fileHeader.Write(writer); } } }