Example #1
0
        public override void SaveAsBmd(string OutputPath, DataGridView dgv)
        {
            try
            {
                int FilledRowCount = dgv.Rows.Count - 1;

                FileStream OutputStream = File.Open(OutputPath, FileMode.Create, FileAccess.Write);

                List <MuDef.MUFile_GenericFilter> TmpList     = new List <MuDef.MUFile_GenericFilter>(dgv.Rows.Count);
                MuDef.MUFile_GenericFilter        CurrentItem = new MuDef.MUFile_GenericFilter();


                for (int i = 0; i < FilledRowCount; i++)
                {
                    CurrentItem.Text = dgv.Rows[i].Cells[0].Value.ToString();
                    TmpList.Add(CurrentItem);
                }

                int ItemSize  = Marshal.SizeOf(typeof(MuDef.MUFile_GenericFilter));
                int TotalSize = ItemSize * cTotalStructCount;

                byte[] FileBuffer = new byte[TotalSize + 1];

                //write
                for (int i = 0; i < FilledRowCount; i++)
                {
                    byte[] buf = StructureToByteArray(TmpList[i]);
                    XorFilter(ref buf, Marshal.SizeOf(typeof(MuDef.MUFile_GenericFilter)));
                    buf.CopyTo(FileBuffer, i * ItemSize);
                }

                OutputStream.Write(FileBuffer, 0, TotalSize);

                byte[] crc_bytes = BitConverter.GetBytes(GetCRC(FileBuffer, TotalSize));

                OutputStream.Write(crc_bytes, 0, sizeof(int));

                OutputStream.Flush();
                OutputStream.Close();
            }
            catch { MessageBox.Show("Failed to save file"); }
        }
Example #2
0
        public override object[] GetStructures()
        {
            object[] Res = new object[cTotalStructCount];

            int SizeOfItem = Marshal.SizeOf(typeof(MuDef.MUFile_GenericFilter));

            MuDef.MUFile_GenericFilter CurrentItem = new MuDef.MUFile_GenericFilter();

            m_FileBuffer = new byte[SizeOfItem * cTotalStructCount];

            try
            {
                while ((m_FileStream.Read(m_FileBuffer, SizeOfItem * m_CurrentLine, SizeOfItem)) == SizeOfItem)
                {
                    object Item = Marshal.PtrToStructure(
                        Marshal.UnsafeAddrOfPinnedArrayElement(m_FileBuffer, SizeOfItem * m_CurrentLine++),
                        typeof(MuDef.MUFile_GenericFilter));
                    XorFilter(ref Item);

                    CurrentItem = (MuDef.MUFile_GenericFilter)Item;

                    Res[m_CurrentLine] = (object)CurrentItem;
                }
            }
            //todo: prevent
            catch (IndexOutOfRangeException)
            {
            }
            catch (Exception)
            {
                MessageBox.Show("Failed to read file structures.");
            }
            CloseSourceFile();

            return(Res);
        }