3 <H2>Information from source codes</H2>
13 # dmFile.h : $Revision$
36 typedef __int64_t dmFileInteger8;
37 typedef __int32_t dmFileInteger4;
38 typedef __int16_t dmFileInteger2;
39 typedef __int8_t dmFileInteger1;
41 typedef enum dmFileTagDirType {
42 dmFileTagDirTypeFileEnd = 0x00,
43 dmFileTagDirTypeTagDir = 0x14,
44 dmFileTagDirTypeTag = 0x15
47 static char* __dmFileTagDirTypeChar[] = {
48 "FileEnd", "", "", "", "", "", "", "",
49 "", "", "", "", "", "", "", "",
50 "", "", "", "", "TagDir", "Tag"
53 typedef enum dmFileTagDataType {
54 dmFileTagDataTypeInt2 =2,
55 dmFileTagDataTypeInt4 =3,
56 dmFileTagDataTypeUInt2 =4,
57 dmFileTagDataTypeUInt4 =5,
58 dmFileTagDataTypeReal4 =6,
59 dmFileTagDataTypeReal8 =7,
60 dmFileTagDataTypeBool1 =8,
61 dmFileTagDataTypeChar1 =9,
62 dmFileTagDataTypeInt1 =0xa,
63 dmFileTagDataTypeInt8 =0xb,
64 dmFileTagDataTypeUInt8 =0xc,
65 dmFileTagDataTypeStruct =0xf,
66 dmFileTagDataTypeString =0x12,
67 dmFileTagDataTypeArray =0x14,
68 dmFileTagDataTypeTags =0x15,
71 typedef enum dmFileImageDataType {
72 dmFileImageDataTypeInt2 = 1,
73 dmFileImageDataTypeReal4 = 2,
74 dmFileImageDataTypeComplex8 = 3,
75 dmFileImageDataTypeUnknown = 4,
76 dmFileImageDataTypePackedComplex = 5,
77 dmFileImageDataTypeUInt1 = 6,
78 dmFileImageDataTypeInt4 = 7,
79 dmFileImageDataTypeRGBInt4 = 8,
80 dmFileImageDataTypeInt1 = 9,
81 dmFileImageDataTypeUInt2 = 10,
82 dmFileImageDataTypeUInt4 = 11,
83 dmFileImageDataTypeReal8 = 12,
84 dmFileImageDataTypeComplex16= 13,
85 dmFileImageDataTypeBool1 = 14,
86 dmFileImageDataTypeIRGInt4Thumnail = 23
87 } dmFileImageDataType;
89 static size_t __dmFileImageDataTypeSize[] = {
90 0, 2, 3, 8, 0, 4, 1, 4,
91 4, 1, 2, 4, 6, 16, 1, 0,
92 0, 0, 0, 0, 0, 0, 0, 4
95 static size_t __dmFileTagDataTypeSize[] = {
96 0, 0, 2, 4, 2, 4, 4, 8,
97 1, 1, 1, 8, 8, 0, 0, 0,
98 0, 0, 0, 0, 0, 0, 0, 0
102 static char* __dmFileTagDataTypeFormat[] = {
103 0, 0, "%d", "%d", "%u", "%u", "%f", "%f",
104 "%d", "%c", "%d", "%lld", "%llu", 0, 0, 0,
105 0, 0, 0, 0, 0, 0, 0, 0
109 static char* __dmFileTagDataTypeFormat[] = {
110 0, 0, "%#0x", "%#0x", "%#0X", "%#0X", "%f", "%f",
111 "%#0x", "%c", "%#0x", "%#0x", "%#0llX", 0, 0, 0,
112 0, 0, 0, 0, 0, 0, 0, 0
116 static char* __dmFileTagDataTypeChar[] = {
117 "", "", "Int2", "Int4", "UInt2", "UInt4", "Real4", "Real8",
118 "Bool1", "Char1", "Int1", "Int8", "UInt8", "", "", "Struct",
119 "", "", "String", "", "Array", "Tags", "", ""
125 typedef struct dmFile3Header {
126 dmFileInteger4 version;
127 dmFileInteger4 rootLength;
128 dmFileInteger4 byteOrder;
129 } __attribute__((__packed__)) dmFile3Header;
131 typedef struct dmFile4Header {
132 dmFileInteger4 version;
133 dmFileInteger8 rootLength;
134 dmFileInteger4 byteOrder;
135 } __attribute__((__packed__)) dmFile4Header;
137 typedef struct dmFile3TagDirectory dmFile3TagDirectory;
138 typedef struct dmFile4TagDirectory dmFile4TagDirectory;
141 typedef struct dmFile3Tag {
142 dmFileInteger1 tagID;
143 dmFileInteger2 tagNameLength; // Bytes
147 dmFileInteger4 ninfo;
148 dmFileInteger4* info;
149 long pValue; // Offset
150 void* value; // Array or value
151 void** value2; // Struct
152 void** value3; // Array of Struct
154 dmFile3TagDirectory* tagDir;
157 typedef struct dmFile4Tag {
158 dmFileInteger1 tagID;
159 dmFileInteger2 tagNameLength; // Bytes
161 dmFileInteger8 tagLength;
164 dmFileInteger8 ninfo;
165 dmFileInteger8* info;
167 void* value; // Array or value
168 void** value2; // Struct
169 void** value3; // Array of Struct
171 dmFile4TagDirectory* tagDir;
174 // Root Tag Directory
175 struct dmFile3TagDirectory {
176 dmFileInteger1 sortf;
177 dmFileInteger1 closef;
178 dmFileInteger4 numberOfTags;
182 struct dmFile4TagDirectory {
183 dmFileInteger1 sortf;
184 dmFileInteger1 closef;
185 dmFileInteger8 numberOfTags;
189 typedef struct dmFile {
191 dmFileInteger4 version;
192 dmFile3Header Header3;
193 dmFile4Header Header4;
195 dmFile3TagDirectory RootTag3;
196 dmFile4TagDirectory RootTag4;
211 /* prototype begin */
214 extern void dmFileInfo(FILE* fpt, dmFile dm, int mode);
215 extern void dmFileHeaderInfo(FILE* fpt, dmFile dm, int mode);
216 extern void dmFile3TagDirectoryInfo(FILE* fpt, dmFile3TagDirectory tagDir, int layer, int mode);
217 extern void dmFile3TagInfo(FILE* fpt, dmFile3Tag tagr, int layer, int mode);
218 extern void dmFile4TagDirectoryInfo(FILE* fpt, dmFile4TagDirectory tagDir, int layer, int mode);
219 extern void dmFile4TagInfo(FILE* fpt, dmFile4Tag tag, int layer, int mode);
222 extern void dmFileRead(FILE* fpt, dmFile* dm, char* message, int mode);
223 // DM Header and End Read: check file format
224 extern void dmFileHeaderTailRead(FILE* fpt, dmFile* dm, char* message, int mode);
227 extern void dmFile3HeaderRead(FILE* fpt, dmFile* dm, char* message, int mode);
229 extern void dmFile3TagDirectoryHeaderRead(FILE* fpt, dmFile3TagDirectory* dmRoot, char* message, int mode);
230 extern void dmFile3TagHeaderRead(FILE* fpt, dmFile3Tag* dmTag, char* message, int mode);
231 extern void dmFile3TagRead(FILE* fpt, dmFile3Tag* dmTag, char* message, int mode);
232 extern void dmFile3TagDirectoryRead(FILE* fpt, dmFile3TagDirectory* dmTagDir, char* message, int mode);
236 extern void dmFile4HeaderRead(FILE* fpt, dmFile* dm, char* message, int mode);
238 extern void dmFile4TagDirectoryHeaderRead(FILE* fpt, dmFile4TagDirectory* dmRoot, char* message, int mode);
239 extern void dmFile4TagHeaderRead(FILE* fpt, dmFile4Tag* dmTag, char* message, int mode);
240 extern void dmFile4TagRead(FILE* fpt, dmFile4Tag* dmTag, char* message, int mode);
241 extern void dmFile4TagDirectoryRead(FILE* fpt, dmFile4TagDirectory* dmTagDir, char* message, int mode);
244 extern void dmFileValuePrint(FILE* fpt, void* value, dmFileTagDataType valueType, int n);
247 extern void ldm2mrc(mrcImage* mrc, dmFile* dm, int mode);
248 extern void dmFile3TagDirectory2mrc(dmFile* fpt, dmFile3TagDirectory tagDir, int layer, int mode);
249 extern void dmFile4TagDirectory2mrc(dmFile* fpt, dmFile4TagDirectory tagDir, int layer, int mode);
252 extern void dmFileInit(dmFile* dm, int mode);
260 #endif /* DMFILE_H */