aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-09-08 14:42:22 +0200
committerFederico Angelilli <code@fedang.net>2024-09-08 14:42:22 +0200
commitfeae7fb2bed5357a5e685063e3f6ff005bfc0bd5 (patch)
treee45b8568ed14bc2cc50d6697439adf25752326df /src
parent43238419974e599a84f17b5faa8fb52401bdfe90 (diff)
Add blocks schemes and time config
Diffstat (limited to 'src')
-rw-r--r--src/blocks/group.c12
-rw-r--r--src/blocks/ram.c12
-rw-r--r--src/blocks/scheme.c7
-rw-r--r--src/blocks/scheme.h11
-rw-r--r--src/blocks/text.c11
-rw-r--r--src/config.c22
-rw-r--r--src/config.h1
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 {