public static void SaveProject(string filename) { try { byte[] data = SaveVersion0(); byte[] everything = new byte[HEADER_SIZE + data.Length]; everything[0] = 0; // version Util.StringToByteArray(watermark).CopyTo(everything, 1); data.CopyTo(everything, HEADER_SIZE); File.WriteAllBytes(filename, TryZip(everything)); unsavedChanges = false; currentFile = filename; } catch (Exception e) { MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private static byte[] SaveVersion1() { int size = Data.GetROMSize(); byte[] romSettings = new byte[31]; romSettings[0] = (byte)Data.GetROMMapMode(); romSettings[1] = (byte)Data.GetROMSpeed(); Util.IntegerIntoByteArray(size, romSettings, 2); for (int i = 0; i < 0x15; i++) { romSettings[6 + i] = (byte)Data.GetROMByte(Util.ConvertSNEStoPC(0xFFC0 + i)); } for (int i = 0; i < 4; i++) { romSettings[27 + i] = (byte)Data.GetROMByte(Util.ConvertSNEStoPC(0xFFDC + i)); } // TODO put selected offset in save file List <byte> label = new List <byte>(), comment = new List <byte>(); Dictionary <int, string> all_labels = Data.GetAllLabels(), all_comments = Data.GetAllComments(); Util.IntegerIntoByteList(all_labels.Count, label); foreach (KeyValuePair <int, string> pair in all_labels) { Util.IntegerIntoByteList(pair.Key, label); for (int i = 0; i < pair.Value.Length; i++) { label.Add((byte)pair.Value[i]); } label.Add(0); } Util.IntegerIntoByteList(all_comments.Count, comment); foreach (KeyValuePair <int, string> pair in all_comments) { Util.IntegerIntoByteList(pair.Key, comment); for (int i = 0; i < pair.Value.Length; i++) { comment.Add((byte)pair.Value[i]); } comment.Add(0); } byte[] romLocation = Util.StringToByteArray(currentROMFile); byte[] data = new byte[romSettings.Length + romLocation.Length + 8 * size + label.Count + comment.Count]; romSettings.CopyTo(data, 0); for (int i = 0; i < romLocation.Length; i++) { data[romSettings.Length + i] = romLocation[i]; } for (int i = 0; i < size; i++) { data[romSettings.Length + romLocation.Length + i] = (byte)Data.GetDataBank(i); } for (int i = 0; i < size; i++) { data[romSettings.Length + romLocation.Length + size + i] = (byte)Data.GetDirectPage(i); } for (int i = 0; i < size; i++) { data[romSettings.Length + romLocation.Length + 2 * size + i] = (byte)(Data.GetDirectPage(i) >> 8); } for (int i = 0; i < size; i++) { data[romSettings.Length + romLocation.Length + 3 * size + i] = (byte)(Data.GetXFlag(i) ? 1 : 0); } for (int i = 0; i < size; i++) { data[romSettings.Length + romLocation.Length + 4 * size + i] = (byte)(Data.GetMFlag(i) ? 1 : 0); } for (int i = 0; i < size; i++) { data[romSettings.Length + romLocation.Length + 5 * size + i] = (byte)Data.GetFlag(i); } for (int i = 0; i < size; i++) { data[romSettings.Length + romLocation.Length + 6 * size + i] = (byte)Data.GetArchitechture(i); } for (int i = 0; i < size; i++) { data[romSettings.Length + romLocation.Length + 7 * size + i] = (byte)Data.GetInOutPoint(i); } // ??? label.CopyTo(data, romSettings.Length + romLocation.Length + 8 * size); comment.CopyTo(data, romSettings.Length + romLocation.Length + 8 * size + label.Count); // ??? return(data); }