aboutsummaryrefslogtreecommitdiff
path: root/vis-registers.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2020-09-17 14:14:54 +0200
committerMarc André Tanner <mat@brain-dump.org>2020-09-17 15:30:27 +0200
commit080875a056e76a4279e51687a6fc36d81835e243 (patch)
tree565d721279eb8273d3d3002b0d504642c366ef05 /vis-registers.c
parentaa870086739ac54112544af71bd6db95c28802c2 (diff)
downloadvis-080875a056e76a4279e51687a6fc36d81835e243.tar.gz
vis-080875a056e76a4279e51687a6fc36d81835e243.tar.xz
vis: provide reverse mapping function for register names
Diffstat (limited to 'vis-registers.c')
-rw-r--r--vis-registers.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/vis-registers.c b/vis-registers.c
index 58fc7ec..6de3374 100644
--- a/vis-registers.c
+++ b/vis-registers.c
@@ -197,14 +197,15 @@ bool register_resize(Register *reg, size_t count) {
}
enum VisRegister vis_register_from(Vis *vis, char reg) {
- switch (reg) {
- case '@': return VIS_MACRO_LAST_RECORDED;
- }
+
+ if (reg == '@')
+ return VIS_MACRO_LAST_RECORDED;
if ('a' <= reg && reg <= 'z')
return VIS_REG_a + reg - 'a';
if ('A' <= reg && reg <= 'Z')
return VIS_REG_A + reg - 'A';
+
for (size_t i = 0; i < LENGTH(vis_registers); i++) {
if (vis_registers[i].name == reg)
return i;
@@ -212,6 +213,22 @@ enum VisRegister vis_register_from(Vis *vis, char reg) {
return VIS_REG_INVALID;
}
+char vis_register_to(Vis *vis, enum VisRegister reg) {
+
+ if (reg == VIS_MACRO_LAST_RECORDED)
+ return '@';
+
+ if (VIS_REG_a <= reg && reg <= VIS_REG_z)
+ return 'a' + reg - VIS_REG_a;
+ if (VIS_REG_A <= reg && reg <= VIS_REG_Z)
+ return 'A' + reg - VIS_REG_A;
+
+ if (reg < LENGTH(vis_registers))
+ return vis_registers[reg].name;
+
+ return '\0';
+}
+
void vis_register(Vis *vis, enum VisRegister reg) {
if (VIS_REG_A <= reg && reg <= VIS_REG_Z) {
vis->action.reg = &vis->registers[VIS_REG_a + reg - VIS_REG_A];