aboutsummaryrefslogtreecommitdiff
path: root/vis-registers.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2017-07-11 22:28:08 +0200
committerMarc André Tanner <mat@brain-dump.org>2017-07-11 22:38:20 +0200
commit3ca61b3354c02e7f961e3cd6808a94fd9b740586 (patch)
treebfe5e89e393c9c1f78ff5549e6c054420888e741 /vis-registers.c
parentebee314027fb8ba47052dc016bc44758fa58f5fc (diff)
downloadvis-3ca61b3354c02e7f961e3cd6808a94fd9b740586.tar.gz
vis-3ca61b3354c02e7f961e3cd6808a94fd9b740586.tar.xz
vis: cleanup register related API
Also expose all register slots through the Lua API.
Diffstat (limited to 'vis-registers.c')
-rw-r--r--vis-registers.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/vis-registers.c b/vis-registers.c
index 742194b..503c50b 100644
--- a/vis-registers.c
+++ b/vis-registers.c
@@ -226,23 +226,39 @@ static Register *register_from(Vis *vis, enum VisRegister id) {
return NULL;
}
-bool vis_register_put(Vis *vis, enum VisRegister id, const char *data, size_t len) {
+bool vis_register_set(Vis *vis, enum VisRegister id, Array *data) {
Register *reg = register_from(vis, id);
if (!reg)
return false;
- return register_put(vis, reg, data, len);
-}
-
-const char *vis_register_get(Vis *vis, enum VisRegister id, size_t *len) {
- return vis_register_slot_get(vis, id, 0, len);
+ size_t len = array_length(data);
+ for (size_t i = 0; i < len; i++) {
+ Buffer *buf = register_buffer(reg, i);
+ if (!buf)
+ return false;
+ TextString *string = array_get(data, i);
+ if (!buffer_put(buf, string->data, string->len))
+ return false;
+ }
+ return register_resize(reg, len);
}
-const char *vis_register_slot_get(Vis *vis, enum VisRegister id, size_t slot, size_t *len) {
+Array vis_register_get(Vis *vis, enum VisRegister id) {
+ Array data;
+ array_init_sized(&data, sizeof(TextString));
Register *reg = register_from(vis, id);
- if (reg)
- return register_slot_get(vis, reg, slot, len);
- *len = 0;
- return NULL;
+ if (reg) {
+ size_t len = array_length(&reg->values);
+ array_reserve(&data, len);
+ for (size_t i = 0; i < len; i++) {
+ Buffer *buf = array_get(&reg->values, i);
+ TextString string = {
+ .data = buffer_content(buf),
+ .len = buffer_length(buf),
+ };
+ array_add(&data, &string);
+ }
+ }
+ return data;
}
const RegisterDef vis_registers[] = {