diff options
Diffstat (limited to 'settings.h')
-rw-r--r-- | settings.h | 61 |
1 files changed, 37 insertions, 24 deletions
diff --git a/settings.h b/settings.h index 7dff53dcb..3b588593f 100644 --- a/settings.h +++ b/settings.h @@ -3,33 +3,46 @@ #ifndef SETTINGS_H #define SETTINGS_H +/* Convention/Type of settings. This will be merged mostly with the SaveLoad + * SLE_ enums. So it looks a bit strange. The layout is as follows: + * bits 0-7: the type (size) of the variable. Eg int8, uint8, bool, etc. Same as VarTypes + * bits 8-15: the generic variable type. Eg string, oneofmany, number, intlist + * bits 16-31: the size of a string, an intlist (which is an implicit array). */ +/* XXX - the GenericType will NOT be shifted in the final implementation, just for compatility */ enum SettingDescType { - SDT_INTX, // must be 0 - SDT_ONEOFMANY, - SDT_MANYOFMANY, - SDT_BOOLX, - SDT_STRING, - SDT_STRINGBUF, - SDT_INTLIST, - SDT_STRINGQUOT, // string with quotation marks around it - SDT_CHAR, - - SDT_INT8 = 0 << 4, - SDT_UINT8 = 1 << 4, - SDT_INT16 = 2 << 4, - SDT_UINT16 = 3 << 4, - SDT_INT32 = 4 << 4, - SDT_UINT32 = 5 << 4, - SDT_CALLBX = 6 << 4, + /* 4 bytes allocated a maximum of 16 types for GenericType */ + SDT_NUMX = 0 << 8, // value must be 0!!, refers to any number-type + SDT_BOOLX = 1 << 8, // a boolean number + SDT_ONEOFMANY = 2 << 8, // bitmasked number where only ONE bit may be set + SDT_MANYOFMANY = 3 << 8, // bitmasked number where MULTIPLE bits may be set + SDT_INTLIST = 4 << 8, // list of integers seperated by a comma ',' + SDT_STRING = 5 << 8, // string which is only a pointer, so needs dynamic allocation + SDT_STRINGBUF = 6 << 8, // string with a fixed length, preset buffer + SDT_STRINGQUOT = 7 << 8, // string with quotation marks around it (enables spaces in string) + SDT_CHAR = 8 << 8, // single character + /* 7 more possible primitives */ - SDT_UINT = SDT_UINT32, - SDT_INT = SDT_INT32, - - SDT_NOSAVE = 1 << 8, - - SDT_CALLB = SDT_INTX | SDT_CALLBX, + /* 4 bytes allocated a maximum of 16 types for NumberType */ + SDT_INT8 = 0 << 4, + SDT_UINT8 = 1 << 4, + SDT_INT16 = 2 << 4, + SDT_UINT16 = 3 << 4, + SDT_INT32 = 4 << 4, + SDT_UINT32 = 5 << 4, + SDT_INT64 = 6 << 4, + SDT_UINT64 = 7 << 4, + /* 8 more possible primitives */ + /* Shortcut values */ SDT_BOOL = SDT_BOOLX | SDT_UINT8, + SDT_UINT = SDT_UINT32, + SDT_INT = SDT_INT32, + SDT_STR = SDT_STRING, + SDT_STRB = SDT_STRINGBUF, + SDT_STRQ = SDT_STRINGQUOT, + + /* The value is read from the configuration file but not saved */ + SDT_NOSAVE = 1 << 31, }; typedef enum { @@ -42,7 +55,7 @@ typedef struct SettingDesc { int flags; const void *def; void *ptr; - const void *b; + const void *many; } SettingDesc; void IConsoleSetPatchSetting(const char *name, const char *value); |