diff options
| -rw-r--r-- | src/blocks/group.c | 12 | ||||
| -rw-r--r-- | src/blocks/ram.c | 12 | ||||
| -rw-r--r-- | src/blocks/scheme.c | 7 | ||||
| -rw-r--r-- | src/blocks/scheme.h | 11 | ||||
| -rw-r--r-- | src/blocks/text.c | 11 | ||||
| -rw-r--r-- | src/config.c | 22 | ||||
| -rw-r--r-- | src/config.h | 1 |
7 files changed, 71 insertions, 5 deletions
diff --git a/src/blocks/group.c b/src/blocks/group.c new file mode 100644 index 0000000..fb4457e --- /dev/null +++ b/src/blocks/group.c @@ -0,0 +1,12 @@ +#include "scheme.h" + +const block_scheme_t block_group_scheme = { + .name = "group", + .block = { + .type = BLOCK_GROUP, + }, + .size = 0, + .entries = NULL, + .verify = NULL, +}; + diff --git a/src/blocks/ram.c b/src/blocks/ram.c new file mode 100644 index 0000000..a626413 --- /dev/null +++ b/src/blocks/ram.c @@ -0,0 +1,12 @@ +#include "scheme.h" + +const block_scheme_t block_ram_scheme = { + .name = "ram", + .block = { + .type = BLOCK_TEXT, + }, + .size = 0, + .entries = NULL, + .verify = NULL, +}; + diff --git a/src/blocks/scheme.c b/src/blocks/scheme.c index 7a49b90..c474de3 100644 --- a/src/blocks/scheme.c +++ b/src/blocks/scheme.c @@ -1,5 +1,12 @@ #include "scheme.h" +extern const block_scheme_t block_text_scheme; +extern const block_scheme_t block_group_scheme; +extern const block_scheme_t block_ram_scheme; + const block_scheme_t *block_schemes[] = { + &block_text_scheme, + &block_group_scheme, + &block_ram_scheme, NULL, }; diff --git a/src/blocks/scheme.h b/src/blocks/scheme.h index b73f181..2bcca97 100644 --- a/src/blocks/scheme.h +++ b/src/blocks/scheme.h @@ -3,14 +3,17 @@ #include "../block.h" -typedef struct block_scheme { +typedef struct block_scheme block_scheme_t; + +typedef bool (*block_scheme_verify_t)(block_t *block, block_scheme_t *scheme); + +struct block_scheme { const char *name; block_t block; size_t size; const config_entry_t *entries; - - bool (*block_scheme_verify_t)(block_t *block, struct block_scheme *scheme); -} block_scheme_t; + block_scheme_verify_t verify; +}; extern const block_scheme_t *block_schemes[]; diff --git a/src/blocks/text.c b/src/blocks/text.c new file mode 100644 index 0000000..0e5fc31 --- /dev/null +++ b/src/blocks/text.c @@ -0,0 +1,11 @@ +#include "scheme.h" + +const block_scheme_t block_text_scheme = { + .name = "text", + .block = { + .type = BLOCK_TEXT, + }, + .size = 0, + .entries = NULL, + .verify = NULL, +}; diff --git a/src/config.c b/src/config.c index 76551fa..38413f4 100644 --- a/src/config.c +++ b/src/config.c @@ -39,6 +39,7 @@ static const config_entry_t block_entries[] = { { "y-padding", CONFIG_INT, NULL, offsetof(block_t, y_padding) }, { "min-width", CONFIG_INT, NULL, offsetof(block_t, min_width) }, { "max-width", CONFIG_INT, NULL, offsetof(block_t, max_width) }, + { "interval", CONFIG_TIME, NULL, offsetof(block_t, update_interval) }, { 0 }, }; @@ -183,6 +184,19 @@ static bool config_read_enum(const char *value, config_enum_t *data, int *result return false; } +static bool config_read_time(const char *value, struct timespec *result) +{ + unsigned int ms; + if (config_read_uint(value, &ms)) { + result->tv_sec = ms / 1000; + result->tv_nsec = (ms % 1000) * 1000000; + return true; + } + + log_debug("Invalid time '%s'", value); + return false; +} + static config_status_t config_read_entry(const config_entry_t *entries, void *result, const char **type, const char *section, const char *key, const char *value) { @@ -256,6 +270,13 @@ static config_status_t config_read_entry(const config_entry_t *entries, void *re } break; + case CONFIG_TIME: + if (config_read_time(value, (struct timespec *)result)) { + log_debug("Set '%s.%s' to '%s'", section, key, value); + return CONFIG_SUCCESS; + } + break; + default: unreachable(); } @@ -384,7 +405,6 @@ void config_read(config_t *config, FILE *file) "s:value", value, "i:line", ini.line); - const char *type; config_status_t status; diff --git a/src/config.h b/src/config.h index 024b6f6..1e674d9 100644 --- a/src/config.h +++ b/src/config.h @@ -16,6 +16,7 @@ typedef enum { CONFIG_BOOL, CONFIG_COLOR, CONFIG_ENUM, + CONFIG_TIME, } config_type_t; typedef struct { |
