/*------------------------------------------------------------------------------ FILE : Interface.h CREATED : 98/05/21 AUTHOR : Catalin Cocos CONTENTS: user end functions ------------------------------------------------------------------------------*/ #ifndef __LDT_INTERFACE__ #define __LDT_INTERFACE__ #include "hash.h" /* to export the dynamic array and the hash */ /* * To export code. */ #undef CPA_EXPORT #if defined(CPA_WANTS_IMPORT) #define CPA_EXPORT __declspec(dllimport) #elif defined(CPA_WANTS_EXPORT) #define CPA_EXPORT __declspec(dllexport) #else /* CPA_WANTS_IMPORT */ #define CPA_EXPORT #endif /* CPA_WANTS_IMPORT */ /* Constants --------------*/ #define LDT_REG_SECTION 0 /* registers section callbacks */ #define LDT_REG_FILE 1 /* registers file callbacks */ /* Types */ /* result of parsing a line */ typedef enum eParseResult_ { ParseResult_EOF, ParseResult_Directive, ParseResult_BeginSection, ParseResult_EndSection, ParseResult_Entry, ParseResult_Error } LDT_tdeParseResult; typedef void * HREF; /* ________________________________________________________________________________________________ Exported structures ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ /* link flags */ #define LDT_LF_ALLOCATED 0x00010000 #define LDT_LF_LOADED 0x00020000 #define LDT_LF_ALLFILE 0x00040000 #define LDT_LF_FILE 0x00080000 #define LDT_LF_VOLATILE 0x00100000 /* the callback registration */ typedef struct LDT_tdst_CallbackEntry_ LDT_tdst_CallbackEntry; /* the section link */ typedef struct LDT_tdst_Link_ LDT_tdst_Link; struct LDT_tdst_CallbackEntry_ { char* szType; /* the section type */ int (*Create) ( LDT_tdst_Link* ); /* the creation function */ int ( *Load ) ( LDT_tdst_Link* ); /* the loading function */ }; #pragma pack ( push, default_packing ) #pragma pack ( 1 ) struct LDT_tdst_Link_ { char* szFile; /* the file containing the section - stored in a string table */ char* szParent; /* the section parent */ char* szName; /* the section name */ LDT_tdst_CallbackEntry* Type; unsigned long dwFlags; /* flags */ void* pObject; /* the allocated memory structure or NULL */ LDT_tdst_Link* pParent; /* the section that requested the loading */ unsigned short wUnsolvedRefs; /* number of references to postprocess */ }; #pragma pack ( pop, default_packing ) /* ________________________________________________________________________________________________ Exported methods ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ /* Initialization/Closing functions -------------------------------------*/ CPA_EXPORT int LDT_Initialize(); CPA_EXPORT int LDT_Close(); CPA_EXPORT void LDT_CleanUpRegistrations(); /* Linking persistence management functions ------------------------------------------*/ CPA_EXPORT void LDT_SetLinkingPersistence (unsigned short Level); CPA_EXPORT void LDT_Forget(unsigned short Level); /* Reference solving function -------------------------------------*/ CPA_EXPORT int LDT_Flush(); CPA_EXPORT int LDT_FlushAndForget(unsigned short Level); /* Loading functions -------------------------------------*/ CPA_EXPORT void* LDT_LoadSection( char* ); CPA_EXPORT void* LDT_LoadSectionAt( char*, void* ); CPA_EXPORT LDT_tdst_Link* LDT_GetLink( char *szSection ); /* In-callback link manipulation functions -------------------------------------*/ CPA_EXPORT void LDT_SetVolatileSubsection( LDT_tdst_Link* ); /* In-callback parsing functions -------------------------------------*/ CPA_EXPORT void LDT_SkipSection(); CPA_EXPORT char *LDT_szGetParam( int i ); CPA_EXPORT LDT_tdeParseResult LDT_GetNextEntry(); CPA_EXPORT char *LDT_szGetSectionName(); CPA_EXPORT char *LDT_szGetSectionType(); CPA_EXPORT char *LDT_szGetEntryName(); CPA_EXPORT int LDT_iGetNbParams(); CPA_EXPORT void LDT_SplitSectionName( char *szSection, char *szFile, char *szParent, char *szType, char *szId ); CPA_EXPORT int LDT_ComputeSectionName( LDT_tdst_Link *, char * ); /* reference delaying methods */ CPA_EXPORT HREF LDT_CreateRefsTable( ); CPA_EXPORT void LDT_AddToRefsTable( HREF hRef, LDT_tdst_Link *pObj, int iType, short xCount, ... ); CPA_EXPORT int LDT_GetRefFromTable( HREF hRef, LDT_tdst_Link **pObj, LDT_tdst_Link **pGetFrom, int *iType, short *xCount, long **pVal ); CPA_EXPORT void LDT_FreeRefValues( long *p ); CPA_EXPORT HREF LDT_RegisterSolver( void(* Solve)(HREF), int iPri ); /* File values methods */ CPA_EXPORT unsigned long LDT_GetFileLong( int i ); CPA_EXPORT double LDT_GetFileDouble( int i ); CPA_EXPORT void LDT_SetFileLong( int i, unsigned long ul ); CPA_EXPORT void LDT_SetFileDouble( int i, double d ); CPA_EXPORT unsigned long LDT_GetTempLong( int i ); CPA_EXPORT void LDT_SetTempLong( int i, unsigned long ul ); /* Default Callbacks -----------------------*/ CPA_EXPORT int LDT_Default_NULL_Create( LDT_tdst_Link* ); CPA_EXPORT int LDT_Default_Load( LDT_tdst_Link* ); /* Type Registration functions ---------------------------------*/ CPA_EXPORT int LDT_RegisterType( char* szType, int (*) ( LDT_tdst_Link* ), int (*) ( LDT_tdst_Link* ), int); CPA_EXPORT LDT_tdst_CallbackEntry* LDT_IsTypeRegistered( char* szType, int ); CPA_EXPORT int LDT_UnregisterType( char* szType, int ); /* Path Registration functions ---------------------------------*/ CPA_EXPORT int LDT_AddBaseDirectory( char* szBasePath ); CPA_EXPORT int LDT_RegisterPath( char* szPath, char* szFileTypes ); /* CPA_EXPORT void LDT_DeletePath( char* szPath ); */ /* CPA_EXPORT void LDT_EraseRegisteredPaths(); */ /* File finding function ---------------------------------*/ CPA_EXPORT int LDT_SearchFile( char* szFile, char* Buffer ); /* Link-Value association functions ---------------------------------*/ CPA_EXPORT void LDT_SetLinkValue( LDT_tdst_Link*, unsigned long ); CPA_EXPORT unsigned long LDT_GetLinkValue( LDT_tdst_Link* ); CPA_EXPORT unsigned long LDT_RemoveLinkValue( LDT_tdst_Link* pLink ); /* Access to the referenced files history list I HATE to do this, but it sewems that the material editor is in desperate need of such a list. ------------------------------------------------------------------------------------------------*/ CPA_EXPORT int LDT_GetReferencedFilesNumber(); CPA_EXPORT const char* LDT_GetReferencedFile(int idx); /* ________________________________________________________________________________________________ Exported macros ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ */ /* In-callback memory allocation/deallocation macros ------------------------------------------------------*/ #ifdef LDT_USE_MMG #include "Mem.h" #define LDT_M_malloc LDT_malloc_Mmg #define LDT_M_free LDT_free_Mmg #define LDT_M_realloc LDT_realloc_Mmg #else #define LDT_M_malloc malloc #define LDT_M_free free #define LDT_M_realloc realloc #endif /* LDT_USE_MMG */ #endif