92 CHECK_ALLOCATION(settings = (
struct settings *) malloc(
sizeof(
struct settings)));
93 memset(settings, 0,
sizeof(
struct settings));
109 if (settings == NULL) {
110 fprintf(stderr,
"settings_destroy(): internal error, " 111 "settings = NULL!\n");
115 #ifdef UNSTABLE_DEVEL 117 printf(
"settings_destroy(): there are remaining settings!\n");
120 if (settings->
name != NULL) {
122 if (settings->
name[i] != NULL) {
123 #ifdef UNSTABLE_DEVEL 124 printf(
"settings_destroy(): setting '%s'" 125 " was not properly deleted before " 126 "exiting!\n", settings->
name[i]);
128 free(settings->
name[i]);
132 free(settings->
name);
134 fprintf(stderr,
"settings_destroy(): internal error, " 135 "settings->name = NULL, but there were settings?" 136 " (n_settings = %i)\n", settings->
n_settings);
149 if (settings->
ptr != NULL)
152 if (settings->
parent != NULL) {
166 static int settings_read(
struct settings *
settings,
int i, uint64_t *valuep)
172 *valuep = *((
int *) settings->
ptr[i]);
175 *valuep = *((int8_t *) settings->
ptr[i]);
178 *valuep = *((int16_t *) settings->
ptr[i]);
181 *valuep = *((int32_t *) settings->
ptr[i]);
184 *valuep = *((int64_t *) settings->
ptr[i]);
187 *valuep = *((uint *) settings->
ptr[i]);
190 *valuep = *((uint8_t *) settings->
ptr[i]);
193 *valuep = *((uint16_t *) settings->
ptr[i]);
196 *valuep = *((uint32_t *) settings->
ptr[i]);
199 *valuep = *((uint64_t *) settings->
ptr[i]);
204 default:printf(
"settings_read(): FATAL ERROR! Unknown storage type" 218 static int settings_write(
struct settings *settings,
int i, uint64_t *valuep)
226 *((
int *) settings->
ptr[i]) = *valuep;
230 *((int8_t *) settings->
ptr[i]) = *valuep;
234 *((int16_t *) settings->
ptr[i]) = *valuep;
238 *((int32_t *) settings->
ptr[i]) = *valuep;
242 *((int64_t *) settings->
ptr[i]) = *valuep;
246 printf(
"settings_write(): ERROR! Strings cannot be " 247 "written like this.\n");
249 default:printf(
"settings_read(): FATAL ERROR! Unknown storage type" 267 size_t name_buflen =
strlen(prefix) + 100;
275 snprintf(name, name_buflen,
"%s.%s", prefix, settings->
name[i]);
283 printf(
"%s = ", name);
285 settings_read(settings, i, &value);
289 printf(
"%" PRIi64, value);
292 printf(
"0x%02" PRIx8, (int8_t) value);
295 printf(
"0x%04" PRIx16, (int16_t) value);
298 printf(
"0x%08" PRIx32, (int32_t) value);
301 printf(
"0x%016" PRIx64, (int64_t) value);
304 printf(value?
"true" :
"false");
307 printf(value?
"yes" :
"no");
310 printf(
"\"%s\"", *((
char **)settings->
ptr[i]));
312 default:printf(
"FATAL ERROR! Unknown presentation " 335 int type,
int format,
void *
ptr)
340 if (strcmp(settings->
name[i], name) == 0)
345 fprintf(stderr,
"settings_add(): name '%s' is already" 371 ((
struct settings *)ptr)->parent = settings;
388 if (strcmp(settings->
name[i], name) == 0)
393 #ifdef UNSTABLE_DEVEL 394 fprintf(stderr,
"settings_remove(): attempting to remove" 395 " non-existant setting '%s'\n", name);
402 settings->
ptr[i] != NULL) {
403 struct settings *subsettings = (
struct settings *) settings->
ptr[i];
405 fprintf(stderr,
"settings_remove(): attempting to " 406 "remove non-emtpy setting '%s'\n", name);
407 fprintf(stderr,
"Remaining settings are:\n");
409 fprintf(stderr,
"\t%s\n", subsettings->
name[i]);
415 free(settings->
name[i]);
421 memmove(&settings->
name[i], &settings->
name[i+1],
422 m *
sizeof(settings->
name[0]));
430 memmove(&settings->
ptr[i], &settings->
ptr[i+1],
431 m *
sizeof(settings->
ptr[0]));
469 int writeflag, uint64_t *valuep)
480 size_t settings_name_len =
strlen(settings->
name[i]);
482 if (strncmp(fullname, settings->
name[i],
483 settings_name_len) != 0)
487 if (fullname[settings_name_len] ==
'\0') {
489 return settings_write(settings, i, valuep);
491 return settings_read(settings, i, valuep);
495 if (fullname[settings_name_len] ==
'.') {
498 (
struct settings *)settings->
ptr[i],
499 fullname + settings_name_len + 1,
#define SETTINGS_TYPE_UINT8
#define SETTINGS_FORMAT_YESNO
#define SETTINGS_TYPE_UINT
#define SETTINGS_TYPE_INT64
struct settings * settings_new(void)
void settings_remove(struct settings *settings, const char *name)
#define SETTINGS_FORMAT_HEX8
#define SETTINGS_TYPE_STRING
#define SETTINGS_TYPE_UINT64
#define SETTINGS_FORMAT_HEX16
int settings_access(struct settings *settings, const char *fullname, int writeflag, uint64_t *valuep)
void settings_remove_all(struct settings *settings)
#define SETTINGS_TYPE_INT32
#define SETTINGS_FORMAT_DECIMAL
#define SETTINGS_NAME_NOT_FOUND
#define CHECK_ALLOCATION(ptr)
#define SETTINGS_FORMAT_HEX64
#define SETTINGS_TYPE_INT16
#define SETTINGS_FORMAT_STRING
#define SETTINGS_FORMAT_HEX32
void settings_add(struct settings *settings, const char *name, int writable, int type, int format, void *ptr)
void settings_debugdump(struct settings *settings, const char *prefix, int recurse)
int * presentation_format
#define SETTINGS_TYPE_SUBSETTINGS
void COMBINE() strlen(struct cpu *cpu, struct arm_instr_call *ic, int low_addr)
#define SETTINGS_FORMAT_BOOL
#define SETTINGS_READONLY
#define GLOBAL_SETTINGS_NAME
void settings_destroy(struct settings *settings)
addr & if(addr >=0x24 &&page !=NULL)
#define SETTINGS_TYPE_UINT16
#define SETTINGS_TYPE_INT
#define SETTINGS_TYPE_UINT32
#define SETTINGS_TYPE_INT8