Beispiel #1
0
        public BinaryReaderX createCfg(int part)
        {
            long bk;

            BinaryWriterX br = new BinaryWriterX(new MemoryStream());

            br.WriteStruct <Header>(headerList[part]);

            for (int j = 0; j < editorEntries[part].Count; j++)
            {
                if (j > 0)
                {
                    EditorStruct bk2 = editorEntries[part][j];

                    var success1 = (headerList[part].dataOffset > br.BaseStream.Length) ? bk2.entryOffset = 0 : bk2.entryOffset = (uint)br.BaseStream.Length - headerList[part].dataOffset;

                    bk = br.BaseStream.Position;
                    var success2 = (headerList[part].dataOffset > br.BaseStream.Length) ? br.BaseStream.Position = headerList[part].dataOffset : br.BaseStream.Position = br.BaseStream.Length;
                    br.Write(Encoding.GetEncoding("shift-jis").GetBytes(Labels[labelCount++].Text));
                    br.Write((byte)0x00);
                    br.BaseStream.Position = bk;

                    editorEntries[part][j] = bk2;
                }

                br.WriteStruct <EditorStruct>(editorEntries[part][j]);
            }

            if (editorRest[part] != null)
            {
                br.Write(editorRest[part]);
            }
            else
            {
                for (int j = 0; j < textEntries[part].Count; j++)
                {
                    if (j > 0 && textEntries[part][j].entryOffset != 0xFFFFFFFF)
                    {
                        TextStruct bk2 = textEntries[part][j];

                        var success1 = (headerList[part].dataOffset > br.BaseStream.Length) ? bk2.entryOffset = 0 : bk2.entryOffset = (uint)br.BaseStream.Length - headerList[part].dataOffset;

                        bk = br.BaseStream.Position;
                        var success2 = (headerList[part].dataOffset > br.BaseStream.Length) ? br.BaseStream.Position = headerList[part].dataOffset : br.BaseStream.Position = br.BaseStream.Length;
                        br.Write(Encoding.GetEncoding("shift-jis").GetBytes(Labels[labelCount++].Text));
                        br.Write((byte)0x00);
                        br.BaseStream.Position = bk;

                        textEntries[part][j] = bk2;
                    }

                    br.WriteStruct <TextStruct>(textEntries[part][j]);
                }
                if (textRest[part] != null)
                {
                    br.Write(textRest[part]);
                }
            }

            br.BaseStream.Position = 0x8;
            br.Write((int)(br.BaseStream.Length - headerList[part].dataOffset));

            br.BaseStream.Position = br.BaseStream.Length;
            while (br.BaseStream.Position % 16 != 0)
            {
                br.Write((byte)0xFF);
            }

            return(new BinaryReaderX(br.BaseStream));
        }
Beispiel #2
0
        public void Save(string filename)
        {
            long bk;

            using (var bw = new BinaryWriterX(File.Create(filename)))
            {
                bw.WriteStruct(cfgHeader);

                for (int j = 0; j < editorEntries.Count; j++)
                {
                    if (j > 0)
                    {
                        EditorStruct bk2 = editorEntries[j];

                        var success1 = (cfgHeader.dataOffset > bw.BaseStream.Length) ? bk2.entryOffset = 0 : bk2.entryOffset = (uint)bw.BaseStream.Length - cfgHeader.dataOffset;

                        bk = bw.BaseStream.Position;
                        var success2 = (cfgHeader.dataOffset > bw.BaseStream.Length) ? bw.BaseStream.Position = cfgHeader.dataOffset : bw.BaseStream.Position = bw.BaseStream.Length;
                        bw.Write(Encoding.GetEncoding("shift-jis").GetBytes(Labels[labelCount++].Text));
                        bw.Write((byte)0x00);
                        bw.BaseStream.Position = bk;

                        editorEntries[j] = bk2;
                    }

                    bw.WriteStruct <EditorStruct>(editorEntries[j]);
                }

                if (editorRest != null)
                {
                    bw.Write(editorRest);
                }
                else
                {
                    for (int j = 0; j < textEntries.Count; j++)
                    {
                        if (j > 0 && textEntries[j].entryOffset != 0xFFFFFFFF)
                        {
                            TextStruct bk2 = textEntries[j];

                            var success1 = (cfgHeader.dataOffset > bw.BaseStream.Length) ? bk2.entryOffset = 0 : bk2.entryOffset = (uint)bw.BaseStream.Length - cfgHeader.dataOffset;

                            bk = bw.BaseStream.Position;
                            var success2 = (cfgHeader.dataOffset > bw.BaseStream.Length) ? bw.BaseStream.Position = cfgHeader.dataOffset : bw.BaseStream.Position = bw.BaseStream.Length;
                            bw.Write(Encoding.GetEncoding("shift-jis").GetBytes(Labels[labelCount++].Text));
                            bw.Write((byte)0x00);
                            bw.BaseStream.Position = bk;

                            textEntries[j] = bk2;
                        }

                        bw.WriteStruct(textEntries[j]);
                    }
                    if (textRest != null)
                    {
                        bw.Write(textRest);
                    }
                }

                bw.BaseStream.Position = 0x8;
                bw.Write((int)(bw.BaseStream.Length - cfgHeader.dataOffset));

                bw.BaseStream.Position = bw.BaseStream.Length;
                bw.WriteAlignment(0x10, 0xff);
            }
        }