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 | |
| parent | aa870086739ac54112544af71bd6db95c28802c2 (diff) | |
| download | vis-080875a056e76a4279e51687a6fc36d81835e243.tar.gz vis-080875a056e76a4279e51687a6fc36d81835e243.tar.xz | |
vis: provide reverse mapping function for register names
| -rw-r--r-- | vis-registers.c | 23 | ||||
| -rw-r--r-- | vis.h | 3 |
2 files changed, 22 insertions, 4 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]; @@ -757,8 +757,9 @@ enum VisRegister { * @defgroup vis_registers * @{ */ -/** Translate single character register name to corresponding constant. */ +/** Translate between single character register name and corresponding constant. */ enum VisRegister vis_register_from(Vis*, char reg); +char vis_register_to(Vis*, enum VisRegister); /** * Specify register to use. * @rst |
