ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/gr2lib/trunk/gr2lib/core/coreclasses/header/granny_file.cs
Revision: 102
Committed: Sat Jul 17 13:54:18 2010 UTC (13 years, 4 months ago) by william
File size: 5785 byte(s)
Log Message:
add compiler directive to write exceptions to console or not

File Contents

# User Rev Content
1 william 94 using System;
2     using System.Collections.Generic;
3     using System.Linq;
4     using System.Text;
5     using gr2lib.core.interfaces;
6     using gr2lib.core.exceptions;
7     using gr2lib.core.apiversion;
8     using gr2lib.core.coreclasses.header;
9     using gr2lib.core.coretypes;
10     using gr2lib.core.helpers;
11     using gr2lib.core.coretypes.implementation;
12    
13     namespace gr2lib.core.header
14     {
15     public class granny_file : igranny_file
16     {
17     //private const int GrannyGRNExtraTagCount = 4;
18     //private const int GrannyGRNMagixValueCount = 4;
19     //private const int GrannyGRNReservedUnusedCount = 3;
20     //private const int GrannyGRNReservedCount = 2;
21     public granny_file()
22     {
23     granny2apiloader _loader = new granny2apiloader();
24     this.IsByteReversed = false;
25     this.Header = new granny_header();
26     this.SourceMagicValue = new granny_magic();
27     this.SectionCount = 0;
28     this.Sections = IntPtr.Zero;
29     this.Marshalled = false;
30     this.IsUserMemory = false;
31     this.ConversionBuffer = IntPtr.Zero;
32    
33     this.NativePointer = IntPtr.Zero;
34     this.NativeFilePointer = IntPtr.Zero;
35    
36     this.GrannyFileInfo = new grnfileinfo();
37     }
38    
39     private void Initialize()
40     {
41     }
42    
43     public void Dispose()
44     {
45     if (NativeFilePointer == IntPtr.Zero) return;
46     coreapi.FreeFile(NativeFilePointer);
47     }
48    
49     internal static void ReadFromMemory(string filename, ref granny_file grn_file)
50     {
51     //if (grn_file.NativePointer == IntPtr.Zero) return;
52     gr2lib.core.coretypes.native.granny_file native = Helpers.ReadFromMemory<gr2lib.core.coretypes.native.granny_file>(grn_file.NativePointer);
53     granny_file managed = new granny_file();
54     managed.NativePointer = grn_file.NativeFilePointer;
55    
56     // process
57    
58 william 102
59 william 94 managed.IsByteReversed = native.IsByteReversed;
60     managed.SectionCount = native.SectionCount;
61     managed.Sections = native.Sections;
62     managed.Marshalled = native.Marshalled;
63     managed.IsUserMemory = native.IsUserMemory;
64     managed.ConversionBuffer = native.ConversionBuffer;
65    
66     if (native.Header != IntPtr.Zero)
67     {
68     managed.Header = granny_header.ReadFromMemory(native.Header);
69     managed.Header.TypeTag = coreapi.GrannyGetFileTypeTag(grn_file.NativePointer);
70     }
71     else
72     {
73     managed.Header = new granny_header();
74     }
75    
76     if (native.SourceMagicValue != IntPtr.Zero)
77     {
78     managed.SourceMagicValue = granny_magic.ReadFromMemory(native.SourceMagicValue);
79     }
80     else
81     {
82     managed.SourceMagicValue = new granny_magic();
83     }
84    
85     grn_file.NativeFilePointer = coreapi.GetFileInfo(grn_file.NativePointer);
86     managed.NativeFilePointer = grn_file.NativeFilePointer;
87     managed.GrannyFileInfo = grnfileinfo.ReadFromMemory(managed.NativeFilePointer);
88    
89     grn_file = managed;
90     }
91    
92    
93    
94     public static granny_file ReadFromFile(string filename)
95     {
96     granny_file grn_file = new granny_file();
97     grn_file.NativePointer = coreapi.GrannyReadEntireFile(filename);
98     if (grn_file.NativePointer == null || grn_file.NativePointer == IntPtr.Zero)
99     {
100     Console.WriteLine("Error: unable to load {0} as a Granny file.", filename);
101     }
102    
103     ReadFromMemory(filename, ref grn_file);
104     coreapi.FreeFile(grn_file.NativePointer);
105     return grn_file;
106     }
107    
108     #region INativePointer Members
109     private IntPtr _NativePointer;
110     public IntPtr NativePointer { get { return _NativePointer; } set { _NativePointer = value; } }
111     private IntPtr _NativeFilePointer;
112     public IntPtr NativeFilePointer { get { return _NativeFilePointer; } set { _NativeFilePointer = value; } }
113     #endregion
114    
115     #region igranny2header members
116    
117     private bool _IsByteReversed;
118     private granny_header _header;
119     private granny_magic _SourceMagicValue;
120     private int _SectionCount;
121     private IntPtr _Sections;
122     private bool _Marshalled;
123     private bool _IsUserMemory;
124     private IntPtr _ConversionBuffer;
125    
126    
127     private grnfileinfo _GrannyFileInfo;
128    
129     public grnfileinfo GrannyFileInfo { get { return _GrannyFileInfo; } set { _GrannyFileInfo = value; } }
130     public bool IsByteReversed { get { return _IsByteReversed; } set { _IsByteReversed = value; } }
131     public granny_header Header { get { return _header; } set { _header = value; } }
132     public granny_magic SourceMagicValue { get { return _SourceMagicValue; } set { _SourceMagicValue = value; } }
133     public int SectionCount { get { return _SectionCount; } set { _SectionCount = value; } }
134     public IntPtr Sections { get { return _Sections; } set { _Sections = value; } }
135     public bool Marshalled { get { return _Marshalled; } set { _Marshalled = value; } }
136     public bool IsUserMemory { get { return _IsUserMemory; } set { _IsUserMemory = value; } }
137     public IntPtr ConversionBuffer { get { return _ConversionBuffer; } set { _ConversionBuffer = value; } }
138 william 102
139    
140     public bool HaveHeader { get { if (Header == null) return false; return true; } }
141     public bool HaveMagic { get { if (SourceMagicValue == null) return false; return true; } }
142 william 94 #endregion
143     }
144     }