aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vis-registers.c23
-rw-r--r--vis.h3
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];
diff --git a/vis.h b/vis.h
index bdc452e..9d8bd28 100644
--- a/vis.h
+++ b/vis.h
@@ -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