X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.h;h=30952c650e9b963aa26b0d658003d56599d79af9;hb=4386c0ac1665619412148f1eb907f6d366a70d7d;hp=618e7cb0a2f343a521851c610156ac5f52be2c73;hpb=ea933dd51bfca7ddcc6b75465476cce57afd1682;p=rocksndiamonds.git diff --git a/src/libgame/setup.h b/src/libgame/setup.h index 618e7cb0..30952c65 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 */ @@ -25,31 +26,33 @@ #define TYPE_KEY_X11 (1 << 4) #define TYPE_INTEGER (1 << 5) #define TYPE_STRING (1 << 6) +#define TYPE_TOKEN (1 << 7) #define TYPE_BOOLEAN_STYLE (TYPE_BOOLEAN | \ TYPE_SWITCH | \ TYPE_YES_NO) /* additional values for setup screen */ -#define TYPE_ENTER_MENU (1 << 7) -#define TYPE_LEAVE_MENU (1 << 8) -#define TYPE_EMPTY (1 << 9) -#define TYPE_KEYTEXT (1 << 10) - -#define TYPE_GHOSTED (1 << 11) -#define TYPE_QUERY (1 << 12) - -#define TYPE_VALUE (TYPE_BOOLEAN_STYLE | \ - TYPE_KEY | \ - TYPE_KEY_X11 | \ - TYPE_INTEGER | \ +#define TYPE_ENTER_MENU (1 << 8) +#define TYPE_LEAVE_MENU (1 << 9) +#define TYPE_EMPTY (1 << 10) +#define TYPE_KEYTEXT (1 << 11) + +#define TYPE_GHOSTED (1 << 12) +#define TYPE_QUERY (1 << 13) + +#define TYPE_VALUE (TYPE_BOOLEAN_STYLE | \ + TYPE_KEY | \ + TYPE_KEY_X11 | \ + TYPE_INTEGER | \ + TYPE_STRING | \ + TYPE_TOKEN) + +#define TYPE_SKIP_ENTRY (TYPE_EMPTY | \ + TYPE_KEY | \ TYPE_STRING) -#define TYPE_SKIP_ENTRY (TYPE_EMPTY | \ - TYPE_KEY | \ - TYPE_STRING) - -#define TYPE_ENTER_OR_LEAVE_MENU (TYPE_ENTER_MENU | \ +#define TYPE_ENTER_OR_LEAVE_MENU (TYPE_ENTER_MENU | \ TYPE_LEAVE_MENU) /* cookie token for file identifier and version number */ @@ -62,6 +65,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 @@ -173,6 +195,7 @@ char *getCustomImageFilename(char *); char *getCustomSoundFilename(char *); char *getCustomArtworkFilename(char *, int); char *getCustomArtworkConfigFilename(int); +char *getCustomArtworkLevelConfigFilename(int); char *getCustomMusicDirectory(void); void InitTapeDirectory(char *); @@ -206,12 +229,19 @@ int getFileVersionFromCookieString(const char *); boolean checkCookieString(const char *, const char *); char *getFormattedSetupEntry(char *, char *); -void freeSetupFileList(struct SetupFileList *); + struct SetupFileList *newSetupFileList(char *, char *); -char *getTokenValue(struct SetupFileList *, char *); -void setTokenValue(struct SetupFileList *, char *, char *); -struct SetupFileList *loadSetupFileList(char *); -void checkSetupFileListIdentifier(struct SetupFileList *, char *); +void freeSetupFileList(struct SetupFileList *); +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);