using System; using System.Collections.Generic; using System.Linq; using System.Text; using gr2lib.core.interfaces; using gr2lib.core.exceptions; using gr2lib.core.apiversion; using gr2lib.core.coreclasses.header; using gr2lib.core.coretypes; using gr2lib.core.helpers; using gr2lib.core.coretypes.implementation; namespace gr2lib.core.header { public class granny_file : igranny_file { //private const int GrannyGRNExtraTagCount = 4; //private const int GrannyGRNMagixValueCount = 4; //private const int GrannyGRNReservedUnusedCount = 3; //private const int GrannyGRNReservedCount = 2; public granny_file() { granny2apiloader _loader = new granny2apiloader(); this.IsByteReversed = false; this.Header = new granny_header(); this.SourceMagicValue = new granny_magic(); this.SectionCount = 0; this.Sections = IntPtr.Zero; this.Marshalled = false; this.IsUserMemory = false; this.ConversionBuffer = IntPtr.Zero; this.NativePointer = IntPtr.Zero; this.NativeFilePointer = IntPtr.Zero; this.GrannyFileInfo = new grnfileinfo(); } private void Initialize() { } public void Dispose() { if (NativeFilePointer == IntPtr.Zero) return; coreapi.FreeFile(NativeFilePointer); } //internal static granny_file ReadFromMemory(IntPtr pointer) //{ // if (pointer == IntPtr.Zero) return null; // gr2lib.core.coretypes.native.granny_file native = Helpers.ReadFromMemory(pointer); // granny_file managed = new granny_file(); // managed.NativePointer = pointer; // // process // return managed; //} internal static void ReadFromMemory(string filename, ref granny_file grn_file) { //if (grn_file.NativePointer == IntPtr.Zero) return; gr2lib.core.coretypes.native.granny_file native = Helpers.ReadFromMemory(grn_file.NativePointer); granny_file managed = new granny_file(); managed.NativePointer = grn_file.NativeFilePointer; // process managed.IsByteReversed = native.IsByteReversed; managed.SectionCount = native.SectionCount; managed.Sections = native.Sections; managed.Marshalled = native.Marshalled; managed.IsUserMemory = native.IsUserMemory; managed.ConversionBuffer = native.ConversionBuffer; if (native.Header != IntPtr.Zero) { managed.Header = granny_header.ReadFromMemory(native.Header); managed.Header.TypeTag = coreapi.GrannyGetFileTypeTag(grn_file.NativePointer); } else { managed.Header = new granny_header(); } if (native.SourceMagicValue != IntPtr.Zero) { managed.SourceMagicValue = granny_magic.ReadFromMemory(native.SourceMagicValue); } else { managed.SourceMagicValue = new granny_magic(); } grn_file.NativeFilePointer = coreapi.GetFileInfo(grn_file.NativePointer); managed.NativeFilePointer = grn_file.NativeFilePointer; managed.GrannyFileInfo = grnfileinfo.ReadFromMemory(managed.NativeFilePointer); grn_file = managed; } //public static void ReadFromFile(string filename, out granny_file grn_file) //{ // grn_file = new granny_file(); // grn_file.NativePointer = coreapi.GrannyReadEntireFile(filename); // if (grn_file.NativePointer == null || grn_file.NativePointer == IntPtr.Zero) // { // Console.WriteLine("Error: unable to load {0} as a Granny file.", filename); // } // grn_file.NativeFilePointer = coreapi.GetFileInfo(grn_file.NativePointer); // ReadFromMemory(out grn_file); // coreapi.FreeFile(grn_file.NativePointer); //} public static granny_file ReadFromFile(string filename) { granny_file grn_file = new granny_file(); grn_file.NativePointer = coreapi.GrannyReadEntireFile(filename); if (grn_file.NativePointer == null || grn_file.NativePointer == IntPtr.Zero) { Console.WriteLine("Error: unable to load {0} as a Granny file.", filename); } ReadFromMemory(filename, ref grn_file); coreapi.FreeFile(grn_file.NativePointer); return grn_file; } #region INativePointer Members private IntPtr _NativePointer; public IntPtr NativePointer { get { return _NativePointer; } set { _NativePointer = value; } } private IntPtr _NativeFilePointer; public IntPtr NativeFilePointer { get { return _NativeFilePointer; } set { _NativeFilePointer = value; } } #endregion #region igranny2header members private bool _IsByteReversed; private granny_header _header; private granny_magic _SourceMagicValue; private int _SectionCount; private IntPtr _Sections; private bool _Marshalled; private bool _IsUserMemory; private IntPtr _ConversionBuffer; private grnfileinfo _GrannyFileInfo; public grnfileinfo GrannyFileInfo { get { return _GrannyFileInfo; } set { _GrannyFileInfo = value; } } public bool IsByteReversed { get { return _IsByteReversed; } set { _IsByteReversed = value; } } public granny_header Header { get { return _header; } set { _header = value; } } public granny_magic SourceMagicValue { get { return _SourceMagicValue; } set { _SourceMagicValue = value; } } public int SectionCount { get { return _SectionCount; } set { _SectionCount = value; } } public IntPtr Sections { get { return _Sections; } set { _Sections = value; } } public bool Marshalled { get { return _Marshalled; } set { _Marshalled = value; } } public bool IsUserMemory { get { return _IsUserMemory; } set { _IsUserMemory = value; } } public IntPtr ConversionBuffer { get { return _ConversionBuffer; } set { _ConversionBuffer = value; } } #endregion } }