OSDN Git Service

Document Added
[eos/optional.git] / doc / Objects / dmFile.html
index 05cd707..55640e7 100644 (file)
@@ -24,6 +24,7 @@
 #define DMFILE_H 
 
 #include <stdio.h>
+#include "mrcImage.h"
 
 /* constant begin */
 
@@ -37,60 +38,168 @@ typedef __int32_t dmFileInteger4;
 typedef __int16_t dmFileInteger2; 
 typedef __int8_t  dmFileInteger1; 
 
+typedef enum dmFileTagDirType {
+       dmFileTagDirTypeFileEnd = 0x00,
+       dmFileTagDirTypeTagDir  = 0x14, 
+       dmFileTagDirTypeTag     = 0x15
+} dmFileTagDirType;
+
+static char* __dmFileTagDirTypeChar[] = {
+       "FileEnd", "", "", "", "", "", "", "", 
+       "", "", "", "", "", "", "", "",
+       "", "", "", "", "TagDir", "Tag"
+};
+
 typedef enum dmFileTagDataType {
-       dmFileTagDataTypeShort=2,
-       dmFileTagDataTypeLong =3,
-       dmFileTagDataTypeUShort =4,
+       dmFileTagDataTypeInt2   =2,
+       dmFileTagDataTypeInt4   =3,
+       dmFileTagDataTypeUInt2  =4,
+       dmFileTagDataTypeUInt4  =5,
+       dmFileTagDataTypeReal4  =6,
+       dmFileTagDataTypeReal8  =7,
+       dmFileTagDataTypeBool1  =8,
+       dmFileTagDataTypeChar1  =9,
+       dmFileTagDataTypeInt1   =0xa,
+       dmFileTagDataTypeInt8   =0xb,
+       dmFileTagDataTypeUInt8  =0xc,
+       dmFileTagDataTypeStruct =0xf,
+       dmFileTagDataTypeString =0x12,
+       dmFileTagDataTypeArray  =0x14,
+       dmFileTagDataTypeTags   =0x15,
 } dmFileTagDataType;
 
-typedef struct dm3FileHeader {
+typedef enum dmFileImageDataType {
+       dmFileImageDataTypeInt2     = 1, 
+       dmFileImageDataTypeReal4    = 2, 
+       dmFileImageDataTypeComplex8 = 3, 
+       dmFileImageDataTypeUnknown  = 4, 
+       dmFileImageDataTypePackedComplex  = 5, 
+       dmFileImageDataTypeUInt1    = 6, 
+       dmFileImageDataTypeInt4     = 7, 
+       dmFileImageDataTypeRGBInt4  = 8, 
+       dmFileImageDataTypeInt1     = 9, 
+       dmFileImageDataTypeUInt2    = 10, 
+       dmFileImageDataTypeUInt4    = 11, 
+       dmFileImageDataTypeReal8    = 12, 
+       dmFileImageDataTypeComplex16= 13, 
+       dmFileImageDataTypeBool1    = 14,
+       dmFileImageDataTypeIRGInt4Thumnail = 23 
+} dmFileImageDataType;
+
+static size_t __dmFileImageDataTypeSize[] = {
+       0, 2, 3, 8, 0,  4, 1, 4, 
+       4, 1, 2, 4, 6, 16, 1, 0,
+       0, 0, 0, 0, 0,  0, 0, 4 
+};
+
+static size_t __dmFileTagDataTypeSize[] = {
+ 0, 0, 2, 4, 2, 4, 4, 8, 
+ 1, 1, 1, 8, 8, 0, 0, 0, 
+ 0, 0, 0, 0, 0, 0, 0, 0
+}; 
+
+/*
+static char* __dmFileTagDataTypeFormat[] = {
+    0,    0, "%d",   "%d",   "%u", "%u", "%f", "%f", 
+ "%d", "%c", "%d", "%lld", "%llu",     0,   0,   0, 
+    0,    0,    0,      0,      0,     0,   0,    0
+}; 
+*/
+
+static char* __dmFileTagDataTypeFormat[] = {
+    0,    0,  "%#0x", "%#0x",   "%#0X", "%#0X", "%f", "%f", 
+ "%#0x", "%c", "%#0x", "%#0x", "%#0llX",     0,    0,   0, 
+    0,    0,      0,     0,       0,     0,    0,    0
+}; 
+
+
+static char* __dmFileTagDataTypeChar[] = {
+     "",      "", "Int2",   "Int4", "UInt2", "UInt4", "Real4",  "Real8", 
+"Bool1", "Char1", "Int1",   "Int8", "UInt8",      "",      "", "Struct", 
+     "",      "", "String",     "", "Array",  "Tags",      "",       ""
+}; 
+
+
+
+// Header
+typedef struct dmFile3Header {
        dmFileInteger4 version;
        dmFileInteger4 rootLength;
        dmFileInteger4 byteOrder;
-} dm3FileHeader;
+} __attribute__((__packed__)) dmFile3Header;
 
-typedef struct dm4FileHeader {
+typedef struct dmFile4Header {
        dmFileInteger4 version;
        dmFileInteger8 rootLength;
        dmFileInteger4 byteOrder;
-} dm4FileHeader;
+} __attribute__((__packed__)) dmFile4Header;
+
+typedef struct dmFile3TagDirectory dmFile3TagDirectory;
+typedef struct dmFile4TagDirectory dmFile4TagDirectory; 
 
-typedef struct dm3FileTagDirectrory {
+// Tag 
+typedef struct dmFile3Tag {
        dmFileInteger1 tagID;
        dmFileInteger2 tagNameLength; // Bytes
        char*          tagName;
-       dmFileInteger8 tagDataSize;   // Bytes
-} dm3FileTagDirectrory;
+       // Tag
+       char           seperator[4];
+       dmFileInteger4 ninfo; 
+       dmFileInteger4* info; 
+       long            pValue; // Offset       
+       void*           value;  // Array or value 
+       void**          value2; // Struct
+       void**          value3; // Array of Struct
+       // TagDirectory 
+       dmFile3TagDirectory* tagDir;
+} dmFile3Tag;
 
-typedef struct dm4FileTagDirectrory {
+typedef struct dmFile4Tag {
        dmFileInteger1 tagID;
        dmFileInteger2 tagNameLength; // Bytes
        char*          tagName;
-       dmFileInteger8 tagDataSize;   // Bytes
-} dm4FileTagDirectrory;
+       dmFileInteger8 tagLength;
+       // Tag
+       char           seperator[4];
+       dmFileInteger8 ninfo; 
+       dmFileInteger8* info; 
+       long            pValue;
+       void*           value;  // Array or value 
+       void**          value2; // Struct
+       void**          value3; // Array of Struct
+       // TagDirectory
+       dmFile4TagDirectory* tagDir;
+} dmFile4Tag;
 
-typedef struct dm3FileRootTagDirectory {
+// Root Tag Directory
+struct dmFile3TagDirectory {
        dmFileInteger1 sortf;
        dmFileInteger1 closef;
        dmFileInteger4 numberOfTags;
-} dm3FileRootTagDirectory;
+       dmFile3Tag* Tags;
+} ;  
 
-typedef struct dm4FileRootTagDirectory {
+struct dmFile4TagDirectory {
        dmFileInteger1 sortf;
        dmFileInteger1 closef;
        dmFileInteger8 numberOfTags;
-} dm4FileRootTagDirectory;
+       dmFile4Tag* Tags;
+} ; 
 
 typedef struct dmFile {
        // Header
        dmFileInteger4 version;
-       dm3FileHeader Header3;
-       dm4FileHeader Header4;
+       dmFile3Header Header3;
+       dmFile4Header Header4;
        // Root Tag
-       dm3FileRootTagDirectory RootTag3;
-       dm4FileRootTagDirectory RootTag4;
-
+       dmFile3TagDirectory RootTag3;
+       dmFile4TagDirectory RootTag4;
+       // Tail
        dmFileInteger8 Tail;
+
+       // 
+       mrcImage thumnail;
+       mrcImage image;
 } dmFile;
 
 /* struct end */
@@ -103,10 +212,44 @@ extern "C" {
 
 // in dfFileInfo.c
 extern void dmFileInfo(FILE* fpt, dmFile dm, int mode);
+extern void dmFileHeaderInfo(FILE* fpt, dmFile dm, int mode);
+extern void dmFile3TagDirectoryInfo(FILE* fpt, dmFile3TagDirectory tagDir, int layer, int mode);
+extern void dmFile3TagInfo(FILE* fpt, dmFile3Tag tagr, int layer, int mode);
+extern void dmFile4TagDirectoryInfo(FILE* fpt, dmFile4TagDirectory tagDir, int layer, int mode);
+extern void dmFile4TagInfo(FILE* fpt, dmFile4Tag tag, int layer, int mode);
 
 // in dmFileRead.c
 extern void dmFileRead(FILE* fpt, dmFile* dm, char* message, int mode);
+// DM Header and End Read: check file format
+extern void dmFileHeaderTailRead(FILE* fpt, dmFile* dm, char* message, int mode);
+// DM3
+// Header 
+extern void dmFile3HeaderRead(FILE* fpt, dmFile* dm, char* message, int mode);
+//
+extern void dmFile3TagDirectoryHeaderRead(FILE* fpt, dmFile3TagDirectory* dmRoot, char* message, int mode);
+extern void dmFile3TagHeaderRead(FILE* fpt, dmFile3Tag* dmTag, char* message, int mode);
+extern void dmFile3TagRead(FILE* fpt, dmFile3Tag* dmTag, char* message, int mode);
+extern void dmFile3TagDirectoryRead(FILE* fpt, dmFile3TagDirectory* dmTagDir, char* message, int mode);
+
+// DM4
+// Header
+extern void dmFile4HeaderRead(FILE* fpt, dmFile* dm, char* message, int mode);
+//  
+extern void dmFile4TagDirectoryHeaderRead(FILE* fpt, dmFile4TagDirectory* dmRoot, char* message, int mode);
+extern void dmFile4TagHeaderRead(FILE* fpt, dmFile4Tag* dmTag, char* message, int mode);
+extern void dmFile4TagRead(FILE* fpt, dmFile4Tag* dmTag, char* message, int mode);
+extern void dmFile4TagDirectoryRead(FILE* fpt, dmFile4TagDirectory* dmTagDir, char* message, int mode);
+
+// in dmFileUtil.c
+extern void dmFileValuePrint(FILE* fpt, void* value, dmFileTagDataType valueType, int n); 
+
+// in dm2mrc.c 
+extern void ldm2mrc(mrcImage* mrc, dmFile* dm, int mode);
+extern void dmFile3TagDirectory2mrc(dmFile* fpt, dmFile3TagDirectory tagDir, int layer, int mode);
+extern void dmFile4TagDirectory2mrc(dmFile* fpt, dmFile4TagDirectory tagDir, int layer, int mode);
 
+// in dmFileInit.c
+extern void dmFileInit(dmFile* dm, int mode);
 
 /* prototype end */