00001
00002
00003
00004
00005
00006
00007
00016 #ifndef DB__H
00017 #define DB__H
00018
00019
00020 #ifdef __cplusplus
00021 extern "C" {
00022 #endif
00023
00024
00025 #include "../feature.h"
00026 #include "../MESSAGE/message.h"
00027 #include "../GENERIC/generic.h"
00028 #include "../fat/fat.h"
00029
00030
00034 #define DB_MAXLFN 32
00035
00038 #define DB_REGIST2SRAM
00039
00042 #define DB_MAX_ID 0x018
00043
00046 #define DB_OPENMAX 4
00049 #define DB_MAXRECLEN 512
00052 #define DB_MAXFIELDLEN 256
00055 #define DB_MAXNAMELEN 32
00056
00057 #define DB_INVALID_ENTRY 0xFFFF
00058 #define DB_INVALID_HDL 0xFFFF
00059 #define DB_INVALID_ID 0xFFFF
00060 #define DB_INVALID_MDB 0xFFFFFFFFL
00061
00062 #define DB_HEADER_SIGNATURE 0x574F4944L
00063 #define DB_SAI_SIGNATURE 0x05181971L
00064 #define DB_PAI_SIGNATURE 0x01162002L
00065
00066 #define DB_SAIFIRSTENTRY 3
00067 #define DB_SAIENTRYNUMOFFSET 4
00068
00069 #define DB_MINPAILEN 32
00070 #define DB_PAIHEADERLEN 8
00071
00072 #define DB_ID_OFFSET 15
00073 #define DB_PNAME_OFFSET 16
00074
00075 #define DB_FLDDLMT '#'
00076 #define DB_RECDLMT '%'
00077 #define DB_BAGDLMT '$'
00078 #define DB_ESCCHAR '/'
00079
00080
00081 #define RECORD_DELETED 0x0001
00082
00083
00084 #define PAI_FREE 0x0001
00085
00086
00087 typedef unsigned short DB_ID;
00088 typedef unsigned short DB_FLAG;
00089 typedef unsigned short DB_ENTRY;
00090 typedef unsigned short DB_FIELDIDX;
00091 typedef unsigned short DB_HDL;
00092 typedef unsigned short DB_FIELDLEN;
00093 typedef unsigned short DB_RECLEN;
00094 typedef void DB_DATA;
00095 typedef unsigned short DB_DATALEN;
00096 typedef char * DB_FNAME;
00097 typedef unsigned short * DB_DSPDATA;
00098 typedef unsigned short DB_DSPDATALEN;
00099 typedef unsigned short DB_DSPDATAIDX;
00100 typedef unsigned long DB_MDBOFFSET;
00101 typedef unsigned long DB_PAIOFFSET;
00102 typedef unsigned long DB_SAIOFFSET;
00103
00106 typedef enum
00107 {
00108 MDB,
00109 SAI,
00110 PAI,
00111 Invalid_ext
00112 } DB_FEXTNAME;
00113
00116 struct DB_dinode;
00117 typedef struct DB_dinode
00118 {
00119 struct DB_dinode * prev;
00120 struct DB_dinode * next;
00121 struct DB_dinode * parent;
00122 struct DB_dinode * child;
00123 DB_MDBOFFSET mdb;
00124 DB_DATA * data;
00125 DB_RECLEN len;
00126 DB_ID id;
00127 } st_DBDINODE;
00128
00131 struct DB_idnode;
00132 typedef struct DB_idnode
00133 {
00134 struct DB_idnode * prev;
00135 struct DB_idnode * next;
00136 struct DB_idnode * parent;
00137 struct DB_idnode * child;
00138 DB_ID id;
00139 } st_DBIDNODE;
00140
00141
00144 typedef struct
00145 {
00146 unsigned short counter;
00147 st_DBIDNODE node[DB_MAX_ID];
00148 } st_DBIDTREE;
00149
00152 typedef struct
00153 {
00154 unsigned short len;
00155 unsigned short attribute;
00156 unsigned short status;
00157 unsigned short numOfKeys;
00158 unsigned short numOfFields;
00159
00160
00161 unsigned short recordStartHi;
00162 unsigned short recordStartLo;
00163
00164
00165 unsigned short ptrXIMhi;
00166 unsigned short ptrXIMlo;
00167
00168 unsigned short reserved[6];
00169 unsigned short id;
00170 } st_DBHEADER;
00171
00172 #define DB_ROOT 0x0001
00173 #define DB_REMOVABLE 0x0002
00174
00177 typedef struct
00178 {
00179 DB_ID id;
00180 unsigned short attribute;
00181 unsigned short status;
00182 unsigned short numOfKeys;
00183 unsigned short numOfFields;
00184 unsigned short numOfSAIent;
00185 unsigned short numOfPAIent;
00186 unsigned long ptrXIM;
00187 BOOL bVirtual;
00188 } st_DBINFO;
00189
00192 typedef struct
00193 {
00194 DB_SAIOFFSET idx;
00195 DB_PAIOFFSET pai;
00196
00197 BOOL free;
00198 File * dbfile;
00199 File * idxfile;
00200 unsigned short step;
00201 } st_DBQUERYCTL;
00202
00203
00206 typedef struct
00207 {
00208 #ifdef DB_REGIST2SRAM
00209 unsigned long fname;
00210 #else
00211 DB_FNAME fname;
00212 #endif
00213 unsigned short len;
00214 } st_DBREGIST;
00215
00218 typedef struct
00219 {
00220 unsigned short dlen;
00221 unsigned short flag;
00222 unsigned short entryNum;
00223 unsigned short reserved[3];
00224 } st_DBPAICTL;
00225
00228 typedef struct
00229 {
00230 DB_ID idedhisi;
00231 DB_ID unidedhisi;
00232 DB_ID failedhisi;
00233 DB_ID audio;
00234 DB_ID pcaudio;
00235 } st_DBNAV;
00236
00237
00238 extern const char strDBBUPDIR[];
00239 extern const char strDBDIR[];
00240 extern const char strAUDIODIR[];
00241 extern const char strAUDIO[];
00242 extern const char strPCAUDIO[];
00243 extern const char strFAILEDHISI[];
00244 extern const char strIDEDHISI[];
00245 extern const char strUNIDEDHISI[];
00246
00247 extern st_DBREGIST DB_registration[];
00248 extern st_DBIDTREE DB_idtree;
00249 extern st_DBQUERYCTL DB_qctl[];
00250 extern st_DBINFO DB_qinfo[];
00251 extern st_DBNAV DBnav;
00252
00253 extern LCK_Obj LCK_db;
00254 #define DB_LOCK(tick) LCK_pend(&LCK_db, tick)
00255 #define DB_UNLOCK() LCK_post(&LCK_db)
00256
00257
00258 BOOL DB_add2child(DB_MDBOFFSET,DB_ID,const DB_DATA *);
00259 BOOL DB_deleteRecord(DB_ID, DB_ENTRY);
00260 BOOL DB_deleteRecordByMdb(DB_ID, DB_MDBOFFSET);
00261 BOOL DB_removeRecord(DB_ID, DB_ENTRY, DB_ENTRY);
00262 DB_FIELDLEN DB_getField(const DB_DATA *,DB_FIELDIDX,DB_DATA *,st_DBINFO *);
00263 DB_ENTRY DB_getSaiByMdb(ULONG,DB_ID);
00264 DB_MDBOFFSET DB_getMdbByRecord(DB_ID, const unsigned short *);
00265 #if 1
00266 st_DBINFO * DB_info(DB_HDL);
00267 #else
00268 BOOL DB_info(DB_ID, st_DBINFO *);
00269 #endif
00270 BOOL DB_init(void);
00271 DB_ID DB_mount(const DB_FNAME);
00272 DB_HDL DB_queryFirst(DB_ID,DB_FIELDIDX,DB_ENTRY,DB_ENTRY,DB_DATA *);
00273 BOOL DB_queryNext(DB_HDL, DB_ENTRY, DB_DATA *);
00274 BOOL DB_queryClose(DB_HDL);
00275 BOOL DB_umount(DB_ID);
00276 DB_ID DB_parentID(DB_ID);
00277 #define DB_rootID(id) DB__rootID(id)
00278 DB_ID DB_childID(DB_ID, DB_FIELDIDX);
00279 #define DB_fieldIndex(id) DB__fieldIndex(id)
00280
00281 void DB_setSyncMark(const char *);
00282 BOOL DB_checkSyncMark(const char *);
00283
00284 BOOL DB__addSAIentry(DB_ID,DB_ENTRY,DB_MDBOFFSET,DB_PAIOFFSET);
00285 BOOL DB__cdDBdir(const DB_FNAME);
00286 BOOL DB__deleteChildRecord(DB_ID, DB_ENTRY);
00287 DB_FIELDIDX DB__fieldIndex(DB_ID);
00288 DB_FIELDLEN DB__getField(const DB_DATA *,DB_FIELDIDX,DB_DATA *);
00289 BOOL DB__getRecord(File *, DB_DATA *);
00290 BOOL DB__info(DB_ID, st_DBINFO *);
00291 DB_DATA * DB__locateField(const DB_DATA *, DB_FIELDIDX);
00292 DB_FNAME DB__name(DB_ID, DB_FEXTNAME);
00293 DB_RECLEN DB__recordLen(const DB_DATA *);
00294 BOOL DB__recordPosition(DB_ID,DB_ENTRY *,const DB_DATA *,BOOL);
00295 BOOL DB__removePAIentry(DB_ID,DB_MDBOFFSET,DB_PAIOFFSET,unsigned short *);
00296 DB_ID DB__rootID(DB_ID);
00297 DB_ID DB__register(const DB_FNAME, st_DBIDNODE *, st_DBIDNODE *);
00298
00299
00300 #ifdef __cplusplus
00301 }
00302 #endif
00303
00304
00305 #endif
00306
00307
00308
00309