31#include <ADF_ArrayList.h>
45#define KF_BT_SUPERINDEX 2
50#define KF_BIG_ENDIAN 1
51#define KF_LITTLE_ENDIAN 2
54#define KF_SIG "SUPERINDEX "
55#define KF_EMPTY_SIG "EMPTY "
56#define KF_SIG_LENGTH 32
59#define KF_BLOCKLENGTH 4096
60#define KF_N_DATATYPES 4
63#define KF_SECTION_NAME_LENGTH 32
65#define KF_NUM_SUPERINDEX_BLOCK_ENTRIES32 ((KF_BLOCKLENGTH-sizeof(KFSuperIndexBlockHeader32))/sizeof(KFSuperIndexBlockEntry32))
66#define KF_NUM_INDEX_BLOCK_ENTRIES32 ((KF_BLOCKLENGTH-sizeof(KFIndexBlockHeader32))/sizeof(KFIndexBlockEntry32))
67#define KF_NUM_SUPERINDEX_BLOCK_ENTRIES64 ((KF_BLOCKLENGTH-sizeof(KFSuperIndexBlockHeader64))/sizeof(KFSuperIndexBlockEntry64))
68#define KF_NUM_INDEX_BLOCK_ENTRIES64 ((KF_BLOCKLENGTH-sizeof(KFIndexBlockHeader64))/sizeof(KFIndexBlockEntry64))
75 typedef long long INT64;
82 char name[KF_SIG_LENGTH];
87} KFSuperIndexBlockHeader32;
89 char name[KF_SIG_LENGTH];
94} KFSuperIndexBlockHeader64;
100 char name[KF_SECTION_NAME_LENGTH];
105} KFSuperIndexBlockEntry32;
107 char name[KF_SECTION_NAME_LENGTH];
112} KFSuperIndexBlockEntry64;
118 char name[KF_SECTION_NAME_LENGTH];
122 INT32 mxtype[KF_N_DATATYPES];
124} KFIndexBlockHeader32;
126 char name[KF_SECTION_NAME_LENGTH];
130 INT64 mxtype[KF_N_DATATYPES];
132} KFIndexBlockHeader64;
138 char name[KF_SECTION_NAME_LENGTH];
146} KFIndexBlockEntry32;
148 char name[KF_SECTION_NAME_LENGTH];
156} KFIndexBlockEntry64;
162 KFSuperIndexBlockHeader32 header;
163 KFSuperIndexBlockEntry32 entries[KF_NUM_SUPERINDEX_BLOCK_ENTRIES32];
164} KFSuperIndexBlock32;
166 KFSuperIndexBlockHeader64 header;
167 KFSuperIndexBlockEntry64 entries[KF_NUM_SUPERINDEX_BLOCK_ENTRIES64];
168} KFSuperIndexBlock64;
174 INT32 index[KF_N_DATATYPES];
175} KFDataBlockHeader32;
177 INT64 index[KF_N_DATATYPES];
178} KFDataBlockHeader64;
193 int indexHeaderLength;
194 int indexEntryLength;
195 int superIndexHeaderLength;
196 int superIndexEntryLength;
202 ArrayList indexBlockRuns;
203 ArrayList dataBlockRuns;
206 int totalIndexBlocks;
207 char name[KF_SECTION_NAME_LENGTH+1];
220 char name[KF_SECTION_NAME_LENGTH+1];
227extern char *KFTypeNames[];
230int getHostByteOrder();
234int openKFFile(KFFile *kf,
const char *name);
235void closeKFFile (KFFile *kf);
237int getKFVariableLength(KFFile *kf,
const char *name);
239int getKFVariableUsedLength(KFFile *kf,
const char *name);
241int getKFVariableType(KFFile *kf,
const char *name);
254int getKFData(KFFile *kf,
const char *name,
void *buf);