X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.h;h=ab976302fce665088b5aeaf7e73882794fef3759;hb=268045d6b06349f1cf10d5cc6f9516b5caa20dea;hp=657467f40f5c8909854e2a748bee2466684cb2cf;hpb=28f0f8708f4b4f8c4f39f1b23bc5fc7e0fed7579;p=rocksndiamonds.git diff --git a/src/libgame/setup.h b/src/libgame/setup.h index 657467f4..ab976302 100644 --- a/src/libgame/setup.h +++ b/src/libgame/setup.h @@ -15,6 +15,7 @@ #define SETUP_H #include "system.h" +#include "hash.h" /* values for setup file handling */ @@ -55,14 +56,6 @@ /* cookie token for file identifier and version number */ #define TOKEN_STR_FILE_IDENTIFIER "file_identifier" -/* structures for setup file handling */ -struct SetupFileList -{ - char *token; - char *value; - struct SetupFileList *next; -}; - struct TokenInfo { int type; @@ -70,6 +63,25 @@ struct TokenInfo char *text; }; +/* some definitions for list and hash handling */ +typedef struct SetupFileList SetupFileList; +typedef struct hashtable SetupFileHash; + +#define BEGIN_HASH_ITERATION(hash, itr) \ + if (hash != NULL && hashtable_count(hash) > 0) \ + { \ + struct hashtable_itr *itr = hashtable_iterator(hash); \ + do { \ + +#define HASH_ITERATION_TOKEN(itr) ((char *)hashtable_iterator_key(itr)) +#define HASH_ITERATION_VALUE(itr) ((char *)hashtable_iterator_value(itr)) + +#define END_HASH_ITERATION(hash, itr) \ + } while (hashtable_iterator_advance(itr)); \ + free(itr); \ + } \ + + /* sort priorities of level series (also used as level series classes) */ #define LEVELCLASS_TUTORIAL_START 10 #define LEVELCLASS_TUTORIAL_END 99 @@ -181,6 +193,7 @@ char *getCustomImageFilename(char *); char *getCustomSoundFilename(char *); char *getCustomArtworkFilename(char *, int); char *getCustomArtworkConfigFilename(int); +char *getCustomArtworkLevelConfigFilename(int); char *getCustomMusicDirectory(void); void InitTapeDirectory(char *); @@ -203,6 +216,7 @@ void sortTreeInfo(TreeInfo **, int (*compare_function)(const void *, const void *)); char *getUserDataDir(void); +char *getCommonDataDir(void); char *getSetupDir(void); void createDirectory(char *, char *, int); void InitUserDataDirectory(void); @@ -213,10 +227,19 @@ int getFileVersionFromCookieString(const char *); boolean checkCookieString(const char *, const char *); char *getFormattedSetupEntry(char *, char *); + +struct SetupFileList *newSetupFileList(char *, char *); void freeSetupFileList(struct SetupFileList *); -char *getTokenValue(struct SetupFileList *, char *); -struct SetupFileList *loadSetupFileList(char *); -void checkSetupFileListIdentifier(struct SetupFileList *, char *); +char *getListEntry(struct SetupFileList *, char *); +void setListEntry(struct SetupFileList *, char *, char *); +SetupFileList *loadSetupFileList(char *); + +SetupFileHash *newSetupFileHash(); +void freeSetupFileHash(SetupFileHash *); +char *getHashEntry(SetupFileHash *, char *); +void setHashEntry(SetupFileHash *, char *, char *); +SetupFileHash *loadSetupFileHash(char *); +void checkSetupFileHashIdentifier(SetupFileHash *, char *); void setSetupInfo(struct TokenInfo *, int, char *); char *getSetupValue(int, void *); char *getSetupLine(struct TokenInfo *, char *, int);