summaryrefslogtreecommitdiffstats
path: root/sys/teken
diff options
context:
space:
mode:
Diffstat (limited to 'sys/teken')
-rw-r--r--sys/teken/sequences1
-rw-r--r--sys/teken/teken.c19
-rw-r--r--sys/teken/teken_subr.h18
3 files changed, 35 insertions, 3 deletions
diff --git a/sys/teken/sequences b/sys/teken/sequences
index 957665a..cf720b0 100644
--- a/sys/teken/sequences
+++ b/sys/teken/sequences
@@ -88,6 +88,7 @@ ICH Insert character ^[ [ @ n
IL Insert line ^[ [ L n
IND Index ^[ D
NEL Next line ^[ E
+OSC Operating System Command ^[ ]
RI Reverse index ^[ M
RIS Reset to Initial State ^[ c
RM Reset Mode ^[ [ l r
diff --git a/sys/teken/teken.c b/sys/teken/teken.c
index c8d6b09..81b8ac0 100644
--- a/sys/teken/teken.c
+++ b/sys/teken/teken.c
@@ -56,6 +56,7 @@ static FILE *df;
#define TS_WRAPPED 0x10 /* Next character should be printed on col 0. */
#define TS_8BIT 0x20 /* UTF-8 disabled. */
#define TS_CONS25 0x40 /* cons25 emulation. */
+#define TS_INSTRING 0x80 /* Inside string. */
/* Character that blanks a cell. */
#define BLANK ' '
@@ -176,6 +177,24 @@ static void
teken_input_char(teken_t *t, teken_char_t c)
{
+ /*
+ * There is no support for DCS and OSC. Just discard strings
+ * until we receive characters that may indicate string
+ * termination.
+ */
+ if (t->t_stateflags & TS_INSTRING) {
+ switch (c) {
+ case '\x1B':
+ t->t_stateflags &= ~TS_INSTRING;
+ break;
+ case '\a':
+ t->t_stateflags &= ~TS_INSTRING;
+ return;
+ default:
+ return;
+ }
+ }
+
switch (c) {
case '\0':
break;
diff --git a/sys/teken/teken_subr.h b/sys/teken/teken_subr.h
index b8ebcdc..ad10abb 100644
--- a/sys/teken/teken_subr.h
+++ b/sys/teken/teken_subr.h
@@ -425,10 +425,11 @@ teken_subr_delete_line(teken_t *t, unsigned int nrows)
}
static void
-teken_subr_device_control_string(teken_t *t __unused)
+teken_subr_device_control_string(teken_t *t)
{
- teken_printf("device control string???\n");
+ teken_printf("Unsupported device control string\n");
+ t->t_stateflags |= TS_INSTRING;
}
static void
@@ -744,6 +745,14 @@ teken_subr_next_line(teken_t *t)
}
static void
+teken_subr_operating_system_command(teken_t *t)
+{
+
+ teken_printf("Unsupported operating system command\n");
+ t->t_stateflags |= TS_INSTRING;
+}
+
+static void
teken_subr_pan_down(teken_t *t, unsigned int nrows)
{
@@ -1258,7 +1267,10 @@ static void
teken_subr_string_terminator(teken_t *t __unused)
{
- teken_printf("string terminator???\n");
+ /*
+ * Strings are already terminated in teken_input_char() when ^[
+ * is inserted.
+ */
}
static void
OpenPOWER on IntegriCloud