summaryrefslogtreecommitdiff
path: root/usr.bin/nerve/nerve.c
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-07-18 01:34:29 -0400
committerIan Moffett <ian@osmora.org>2025-07-18 01:34:29 -0400
commitd681314c69a82177be48e630c401f3bd99285d5c (patch)
treead4919a5ca2a8153b2724e7612f9343189a810f0 /usr.bin/nerve/nerve.c
parent21be10fa3f6b24516b8f9ba1cc43e43f7a8c27c9 (diff)
usr: nerve: Add 'consfeat' nerve
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'usr.bin/nerve/nerve.c')
-rw-r--r--usr.bin/nerve/nerve.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/usr.bin/nerve/nerve.c b/usr.bin/nerve/nerve.c
index 277159f..f78a01f 100644
--- a/usr.bin/nerve/nerve.c
+++ b/usr.bin/nerve/nerve.c
@@ -45,9 +45,11 @@
/* Nerve numeric defs (see string defs) */
#define NERVE_UNKNOWN -1
#define NERVE_CONSATTR 0x0000
+#define NERVE_CONSFEAT 0x0001
/* Nerve string defs (see numeric defs) */
#define SNERVE_CONSATTR "consattr"
+#define SNERVE_CONSFEAT "consfeat"
/* Misc defines */
#define NERVE_PACKET_LEN 16
@@ -106,6 +108,7 @@ help(void)
"verb 'poke': Poke a control (/ctl) nerve\n"
"???????????????? NERVES ????????????????\n"
"consattr: Console attributes\n"
+ "consfeat: Console features\n"
);
}
@@ -172,12 +175,14 @@ poke_nerve(const char *nerve, struct verb_handler *h)
case 'c':
if (strcmp(nerve, SNERVE_CONSATTR) == 0) {
nerve_idx = NERVE_CONSATTR;
- error = get_nerve_payload(h->argc, h->argv, &payload);
+ } else if (strcmp(nerve, SNERVE_CONSFEAT) == 0) {
+ nerve_idx = NERVE_CONSFEAT;
+ }
- if (error < 0) {
- printf("[!] nerve error\n");
- return -1;
- }
+ error = get_nerve_payload(h->argc, h->argv, &payload);
+ if (error < 0) {
+ printf("[!] nerve error\n");
+ return -1;
}
}
@@ -195,6 +200,16 @@ poke_nerve(const char *nerve, struct verb_handler *h)
close(fd);
break;
}
+ case NERVE_CONSFEAT:
+ {
+ struct console_feat f;
+ int fd;
+
+ f.ansi_esc = payload.packet[0] & 0xFF;
+ f.show_curs = payload.packet[1] & 0xFF;
+
+ fd = open("/ctl/console/feat", O_WRONLY);
+ write(fd, &f, sizeof(f));
close(fd);
break;
}