mirror of
https://github.com/mamedev/mame.git
synced 2024-11-16 07:48:32 +01:00
88 lines
2 KiB
C
88 lines
2 KiB
C
/* readbinaryplist.h -- header to read preference files
|
|
|
|
Roger B. Dannenberg, Jun 2008
|
|
*/
|
|
|
|
#include <stdint.h> /* for uint8_t ... */
|
|
|
|
#ifndef TRUE
|
|
#define TRUE 1
|
|
#define FALSE 0
|
|
#endif
|
|
|
|
#define MAX_KEY_SIZE 256
|
|
|
|
enum
|
|
{
|
|
// Object tags (high nybble)
|
|
kTAG_SIMPLE = 0x00, // Null, true, false, filler, or invalid
|
|
kTAG_INT = 0x10,
|
|
kTAG_REAL = 0x20,
|
|
kTAG_DATE = 0x30,
|
|
kTAG_DATA = 0x40,
|
|
kTAG_ASCIISTRING = 0x50,
|
|
kTAG_UNICODESTRING = 0x60,
|
|
kTAG_UID = 0x80,
|
|
kTAG_ARRAY = 0xA0,
|
|
kTAG_DICTIONARY = 0xD0,
|
|
|
|
// "simple" object values
|
|
kVALUE_NULL = 0x00,
|
|
kVALUE_FALSE = 0x08,
|
|
kVALUE_TRUE = 0x09,
|
|
kVALUE_FILLER = 0x0F,
|
|
|
|
kVALUE_FULLDATETAG = 0x33 // Dates are tagged with a whole byte.
|
|
};
|
|
|
|
|
|
typedef struct pldata_struct {
|
|
uint8_t *data;
|
|
size_t len;
|
|
} pldata_node, *pldata_ptr;
|
|
|
|
|
|
typedef struct array_struct {
|
|
struct value_struct **array;
|
|
uint64_t length;
|
|
} array_node, *array_ptr;
|
|
|
|
|
|
// a dict_node is a list of <key, value> pairs
|
|
typedef struct dict_struct {
|
|
struct value_struct *key;
|
|
struct value_struct *value;
|
|
struct dict_struct *next;
|
|
} dict_node, *dict_ptr;
|
|
|
|
|
|
// an value_node is a value with a tag telling the type
|
|
typedef struct value_struct {
|
|
int tag;
|
|
union {
|
|
int64_t integer;
|
|
uint64_t uinteger;
|
|
double real;
|
|
char *string;
|
|
pldata_ptr data;
|
|
array_ptr array;
|
|
struct dict_struct *dict;
|
|
};
|
|
} value_node, *value_ptr;
|
|
|
|
|
|
value_ptr bplist_read_file(char *filename);
|
|
value_ptr bplist_read_user_pref(char *filename);
|
|
value_ptr bplist_read_system_pref(char *filename);
|
|
void bplist_free_data(void);
|
|
|
|
/*************** functions for accessing values ****************/
|
|
|
|
char *value_get_asciistring(value_ptr v);
|
|
value_ptr value_dict_lookup_using_string(value_ptr v, char *key);
|
|
value_ptr value_dict_lookup_using_path(value_ptr v, char *path);
|
|
|
|
/*************** functions for debugging ***************/
|
|
|
|
void plist_print(value_ptr v);
|
|
|