diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2020-09-17 14:14:54 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2020-09-17 15:30:27 +0200 |
| commit | 080875a056e76a4279e51687a6fc36d81835e243 (patch) | |
| tree | 565d721279eb8273d3d3002b0d504642c366ef05 /vis-registers.c | |
| parent | aa870086739ac54112544af71bd6db95c28802c2 (diff) | |
| download | vis-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.c | 23 |
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]; |
