3 <H2>Information from source codes</H2>
22 # dmFile.h : $Revision$
45 typedef __int64_t dmFileInteger8;
46 typedef __int32_t dmFileInteger4;
47 typedef __int16_t dmFileInteger2;
48 typedef __int8_t dmFileInteger1;
50 typedef enum dmFileTagDirType {
51 dmFileTagDirTypeFileEnd = 0x00,
52 dmFileTagDirTypeTagDir = 0x14,
53 dmFileTagDirTypeTag = 0x15
56 static char* __dmFileTagDirTypeChar[] = {
57 "FileEnd", "", "", "", "", "", "", "",
58 "", "", "", "", "", "", "", "",
59 "", "", "", "", "TagDir", "Tag"
62 typedef enum dmFileTagDataType {
63 dmFileTagDataTypeInt2 =2,
64 dmFileTagDataTypeInt4 =3,
65 dmFileTagDataTypeUInt2 =4,
66 dmFileTagDataTypeUInt4 =5,
67 dmFileTagDataTypeReal4 =6,
68 dmFileTagDataTypeReal8 =7,
69 dmFileTagDataTypeBool1 =8,
70 dmFileTagDataTypeChar1 =9,
71 dmFileTagDataTypeInt1 =0xa,
72 dmFileTagDataTypeInt8 =0xb,
73 dmFileTagDataTypeUInt8 =0xc,
74 dmFileTagDataTypeStruct =0xf,
75 dmFileTagDataTypeString =0x12,
76 dmFileTagDataTypeArray =0x14,
77 dmFileTagDataTypeTags =0x15,
80 typedef enum dmFileImageDataType {
81 dmFileImageDataTypeInt2 = 1,
82 dmFileImageDataTypeReal4 = 2,
83 dmFileImageDataTypeComplex8 = 3,
84 dmFileImageDataTypeUnknown = 4,
85 dmFileImageDataTypePackedComplex = 5,
86 dmFileImageDataTypeUInt1 = 6,
87 dmFileImageDataTypeInt4 = 7,
88 dmFileImageDataTypeRGBInt4 = 8,
89 dmFileImageDataTypeInt1 = 9,
90 dmFileImageDataTypeUInt2 = 10,
91 dmFileImageDataTypeUInt4 = 11,
92 dmFileImageDataTypeReal8 = 12,
93 dmFileImageDataTypeComplex16= 13,
94 dmFileImageDataTypeBool1 = 14,
95 dmFileImageDataTypeIRGInt4Thumnail = 23
96 } dmFileImageDataType;
98 static size_t __dmFileImageDataTypeSize[] = {
99 0, 2, 3, 8, 0, 4, 1, 4,
100 4, 1, 2, 4, 6, 16, 1, 0,
101 0, 0, 0, 0, 0, 0, 0, 4
104 static size_t __dmFileTagDataTypeSize[] = {
105 0, 0, 2, 4, 2, 4, 4, 8,
106 1, 1, 1, 8, 8, 0, 0, 0,
107 0, 0, 0, 0, 0, 0, 0, 0
111 static char* __dmFileTagDataTypeFormat[] = {
112 0, 0, "%d", "%d", "%u", "%u", "%f", "%f",
113 "%d", "%c", "%d", "%lld", "%llu", 0, 0, 0,
114 0, 0, 0, 0, 0, 0, 0, 0
118 static char* __dmFileTagDataTypeFormat[] = {
119 0, 0, "%#0x", "%#0x", "%#0X", "%#0X", "%f", "%f",
120 "%#0x", "%c", "%#0x", "%#0x", "%#0llX", 0, 0, 0,
121 0, 0, 0, 0, 0, 0, 0, 0
125 static char* __dmFileTagDataTypeChar[] = {
126 "", "", "Int2", "Int4", "UInt2", "UInt4", "Real4", "Real8",
127 "Bool1", "Char1", "Int1", "Int8", "UInt8", "", "", "Struct",
128 "", "", "String", "", "Array", "Tags", "", ""
134 typedef struct dmFile3Header {
135 dmFileInteger4 version;
136 dmFileInteger4 rootLength;
137 dmFileInteger4 byteOrder;
138 } __attribute__((__packed__)) dmFile3Header;
140 typedef struct dmFile4Header {
141 dmFileInteger4 version;
142 dmFileInteger8 rootLength;
143 dmFileInteger4 byteOrder;
144 } __attribute__((__packed__)) dmFile4Header;
146 typedef struct dmFile3TagDirectory dmFile3TagDirectory;
147 typedef struct dmFile4TagDirectory dmFile4TagDirectory;
150 typedef struct dmFile3Tag {
151 dmFileInteger1 tagID;
152 dmFileInteger2 tagNameLength; // Bytes
156 dmFileInteger4 ninfo;
157 dmFileInteger4* info;
158 long pValue; // Offset
159 void* value; // Array or value
160 void** value2; // Struct
161 void** value3; // Array of Struct
163 dmFile3TagDirectory* tagDir;
166 typedef struct dmFile4Tag {
167 dmFileInteger1 tagID;
168 dmFileInteger2 tagNameLength; // Bytes
170 dmFileInteger8 tagLength;
173 dmFileInteger8 ninfo;
174 dmFileInteger8* info;
176 void* value; // Array or value
177 void** value2; // Struct
178 void** value3; // Array of Struct
180 dmFile4TagDirectory* tagDir;
183 // Root Tag Directory
184 struct dmFile3TagDirectory {
185 dmFileInteger1 sortf;
186 dmFileInteger1 closef;
187 dmFileInteger4 numberOfTags;
191 struct dmFile4TagDirectory {
192 dmFileInteger1 sortf;
193 dmFileInteger1 closef;
194 dmFileInteger8 numberOfTags;
198 typedef struct dmFile {
200 dmFileInteger4 version;
201 dmFile3Header Header3;
202 dmFile4Header Header4;
204 dmFile3TagDirectory RootTag3;
205 dmFile4TagDirectory RootTag4;
220 /* prototype begin */
223 extern void dmFileInfo(FILE* fpt, dmFile dm, int mode);
224 extern void dmFileHeaderInfo(FILE* fpt, dmFile dm, int mode);
225 extern void dmFile3TagDirectoryInfo(FILE* fpt, dmFile3TagDirectory tagDir, int layer, int mode);
226 extern void dmFile3TagInfo(FILE* fpt, dmFile3Tag tagr, int layer, int mode);
227 extern void dmFile4TagDirectoryInfo(FILE* fpt, dmFile4TagDirectory tagDir, int layer, int mode);
228 extern void dmFile4TagInfo(FILE* fpt, dmFile4Tag tag, int layer, int mode);
231 extern void dmFileRead(FILE* fpt, dmFile* dm, char* message, int mode);
232 // DM Header and End Read: check file format
233 extern void dmFileHeaderTailRead(FILE* fpt, dmFile* dm, char* message, int mode);
236 extern void dmFile3HeaderRead(FILE* fpt, dmFile* dm, char* message, int mode);
238 extern void dmFile3TagDirectoryHeaderRead(FILE* fpt, dmFile3TagDirectory* dmRoot, char* message, int mode);
239 extern void dmFile3TagHeaderRead(FILE* fpt, dmFile3Tag* dmTag, char* message, int mode);
240 extern void dmFile3TagRead(FILE* fpt, dmFile3Tag* dmTag, char* message, int mode);
241 extern void dmFile3TagDirectoryRead(FILE* fpt, dmFile3TagDirectory* dmTagDir, char* message, int mode);
245 extern void dmFile4HeaderRead(FILE* fpt, dmFile* dm, char* message, int mode);
247 extern void dmFile4TagDirectoryHeaderRead(FILE* fpt, dmFile4TagDirectory* dmRoot, char* message, int mode);
248 extern void dmFile4TagHeaderRead(FILE* fpt, dmFile4Tag* dmTag, char* message, int mode);
249 extern void dmFile4TagRead(FILE* fpt, dmFile4Tag* dmTag, char* message, int mode);
250 extern void dmFile4TagDirectoryRead(FILE* fpt, dmFile4TagDirectory* dmTagDir, char* message, int mode);
253 extern void dmFileValuePrint(FILE* fpt, void* value, dmFileTagDataType valueType, int n);
256 extern void ldm2mrc(mrcImage* mrc, dmFile* dm, int mode);
257 extern void dmFile3TagDirectory2mrc(dmFile* fpt, dmFile3TagDirectory tagDir, int layer, int mode);
258 extern void dmFile4TagDirectory2mrc(dmFile* fpt, dmFile4TagDirectory tagDir, int layer, int mode);
261 extern void dmFileInit(dmFile* dm, int mode);
269 #endif /* DMFILE_H */