Information from source codes

../src/dmFileInfo.c:

../src/dmFileRead.c:

../src/dmFileUtil.c:

dmFile.h

/*
# dmFile.h : $Revision$  
# $Date$ 
# Created by $Author$
# Usage : dmFile.h 
# Attention
#   $Loccker$
#  	$State$ 
#
*/
/* $Log$ */
#ifndef DMFILE_H 
#define DMFILE_H 

#include 

/* constant begin */


/* constant end */

/* struct begin */

typedef __int64_t dmFileInteger8; 
typedef __int32_t dmFileInteger4; 
typedef __int16_t dmFileInteger2; 
typedef __int8_t  dmFileInteger1; 

typedef enum dmFileTagDataType {
	dmFileTagDataTypeInt2   =2,
	dmFileTagDataTypeInt4   =3,
	dmFileTagDataTypeUInt2  =4,
	dmFileTagDataTypeUInt4  =5,
	dmFileTagDataTypeReal4  =6,
	dmFileTagDataTypeReal8  =7,
	dmFileTagDataTypeBool1  =8,
	dmFileTagDataTypeChar1  =9,
	dmFileTagDataTypeInt1   =0xa,
	dmFileTagDataTypeInt8   =0xb,
	dmFileTagDataTypeStruct =0xf,
	dmFileTagDataTypeString =0x12,
	dmFileTagDataTypeArray  =0x14,
} dmFileTagDataType;

static size_t __dmFileTagDataTypeSize[24] = {
 0, 0, 2, 4, 2, 4, 4, 8, 1, 1,
 1, 8, 0, 0, 0,	0, 0, 0, 0, 0,
 0, 0, 0, 0
}; 

static char* __dmFileTagDataTypeFormat[24] = {
 0, 0, "%d", "%d", "%u", "%u", "%f", "%f", "%d", "%c",
 "%d", "%d", 0, 0, 0,	0, 0, 0, 0, 0,
 0, 0, 0, 0
}; 

// Header
typedef struct dmFile3Header {
	dmFileInteger4 version;
	dmFileInteger4 rootLength;
	dmFileInteger4 byteOrder;
} dmFile3Header;

typedef struct dmFile4Header {
	dmFileInteger4 version;
	dmFileInteger8 rootLength;
	dmFileInteger4 byteOrder;
} dmFile4Header;

typedef struct dmFile3TagDirectory dmFile3TagDirectory;
typedef struct dmFile4TagDirectory dmFile4TagDirectory; 

// Tag 
typedef struct dmFile3Tag {
	dmFileInteger1 tagID;
	dmFileInteger2 tagNameLength; // Bytes
	char*          tagName;
	// Tag
	dmFileInteger1 seperator[4];
	dmFileInteger4 ninfo; 
	dmFileInteger4* info; 
	void*           value;
	void**          value2;
	// TagDirectory 
	dmFile3TagDirectory* tagDir;
} dmFile3Tag;

typedef struct dmFile4Tag {
	dmFileInteger1 tagID;
	dmFileInteger2 tagNameLength; // Bytes
	char*          tagName;
	// Tag
	dmFileInteger1 seperator[4];
	// TagDirectory
	dmFile4TagDirectory* tagDir;
} dmFile4Tag;

// Root Tag Directory
struct dmFile3TagDirectory {
	dmFileInteger1 sortf;
	dmFileInteger1 closef;
	dmFileInteger4 numberOfTags;
	dmFile3Tag* Tags;
} ;  

struct dmFile4TagDirectory {
	dmFileInteger1 sortf;
	dmFileInteger1 closef;
	dmFileInteger8 numberOfTags;
	dmFile4Tag* Tags;
} ; 

typedef struct dmFile {
	// Header
	dmFileInteger4 version;
	dmFile3Header Header3;
	dmFile4Header Header4;
	// Root Tag
	dmFile3TagDirectory RootTag3;
	dmFile4TagDirectory RootTag4;
	// Tail
	dmFileInteger8 Tail;
} dmFile;

/* struct end */

#ifdef __cplusplus
extern "C" {
#endif

/* prototype begin */

// in dfFileInfo.c
extern void dmFileInfo(FILE* fpt, dmFile dm, 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);

// 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);

// in dmFileUtil.c
extern void dmFileValuePrint(FILE* fpt, void* value, dmFileTagDataType valueType, int n); 

/* prototype end */

#ifdef __cplusplus
};
#endif

#endif  /* DMFILE_H */