settings.h
author Darkvater
Mon, 20 Feb 2006 19:42:39 +0000
changeset 3046 f81bee40701f
parent 3020 87640f57ec0f
child 3115 1f4949f5dc5d
permissions -rw-r--r--
(svn r3626) - Merge the SlGlobVarList (global variables) and SaveLoad (offset in struct, variable determined runtime) structs. The only difference between these two is the last element that either holds the address or the offset in the struct. Which one to take is determined by which function is called; SlObject or SlGlobList.
/* $Id$ */

#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 {
	/* 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 */

	/* 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 {
	IGT_VARIABLES = 0, // values of the form "landscape = hilly"
	IGT_LIST = 1,      // a list of values, seperated by \n and terminated by the next group block
} IniGroupType;

typedef struct SettingDesc {
	const char *name;
	uint32 flags;
	const void *def;
	void *ptr;
	const void *many;
} SettingDesc;

void IConsoleSetPatchSetting(const char *name, const char *value);
void IConsoleGetPatchSetting(const char *name);

#endif /* SETTINGS_H */