move io and keyval to libio and libkeyval
This commit is contained in:
68
status/libkeyval.c
Normal file
68
status/libkeyval.c
Normal file
@@ -0,0 +1,68 @@
|
||||
/* 2025 DTB. Public domain. */
|
||||
|
||||
#undef NDEBUG /* LOAD-BEARING ASSERTS! */
|
||||
#include <assert.h> /* assert(3) */
|
||||
#include <stdlib.h> /* atoi(3) */
|
||||
#include <string.h> /* strcmp(3) */
|
||||
#include "libkeyval.h"
|
||||
|
||||
static struct State state = { 0 };
|
||||
|
||||
void
|
||||
cpy(char *key) {
|
||||
state.settings[state.setting_last].key = key;
|
||||
state.settings[state.setting_last].val = get(key);
|
||||
assert(++state.setting_last < state_settings_size);
|
||||
}
|
||||
|
||||
void
|
||||
del(char *key) {
|
||||
size_t i;
|
||||
for (i = idx(key); i < state.setting_last; ++i) {
|
||||
state.settings[i].key = state.settings[i + 1].key;
|
||||
state.settings[i].val = state.settings[i + 1].val;
|
||||
}
|
||||
--state.setting_last;
|
||||
}
|
||||
|
||||
char *
|
||||
get(char *key) { return state.settings[idx(key)].val; }
|
||||
|
||||
int
|
||||
getd(char *key) { return atoi(get(key)); }
|
||||
|
||||
size_t
|
||||
idx(char *key) {
|
||||
size_t r;
|
||||
for (r = 0; state.settings[r].key != NULL
|
||||
&& strcmp(state.settings[r].key, key) != 0;
|
||||
++r);
|
||||
return (state.settings[r].key == NULL) ? state.setting_last : r;
|
||||
}
|
||||
|
||||
void
|
||||
keyval_init(void) {
|
||||
/* Unnecessary, but means a wrong state.setting_last won't blow up. */
|
||||
(void)memset(&state.settings[state.setting_last],
|
||||
state_settings_size - state.setting_last, '\0');
|
||||
#include "settings.c"
|
||||
}
|
||||
|
||||
size_t
|
||||
ren(char *key, char *new) {
|
||||
size_t i;
|
||||
if ((i = idx(key)) != state.setting_last)
|
||||
{ state.settings[i].key = new; }
|
||||
return i;
|
||||
}
|
||||
|
||||
size_t
|
||||
set(char *key, char *val) {
|
||||
size_t i;
|
||||
i = idx(key);
|
||||
state.settings[i].key = key;
|
||||
state.settings[i].val = val;
|
||||
if (i == state.setting_last)
|
||||
{ assert(++state.setting_last < state_settings_size); }
|
||||
return i;
|
||||
}
|
||||
Reference in New Issue
Block a user