jcs
/subtext
/amendments
/651
ansi: Minor fixes
jcs made amendment 651 1 day ago
--- ansi.c Sat Dec 6 14:56:58 2025
+++ ansi.c Tue Sep 22 16:10:45 2026
@@ -50,7 +50,7 @@ ansi_reset(struct session *s)
char *
ansi(struct session *s, ...)
{
- char ansi_tmp[10];
+ char ansi_tmp[20];
char *ansi_out;
va_list ap;
short attr, val, val2, n;
@@ -109,67 +109,61 @@ ansi(struct session *s, ...)
/* these require N args */
case ANSI_DOWN_N:
+ val = va_arg(ap, short);
if (s->vt100) {
- snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dB",
- va_arg(ap, short));
+ snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dB", val);
len = strlcat(ansi_out, ansi_tmp, sizeof(ansi_buf[0]));
} else if (s->vt52) {
- val = va_arg(ap, short);
for (n = 0; n < val; n++)
len = strlcat(ansi_out, "\33B", sizeof(ansi_buf[0]));
}
break;
case ANSI_FORWARD_N:
+ val = va_arg(ap, short);
if (s->vt100) {
- snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dC",
- va_arg(ap, short));
+ snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dC", val);
len = strlcat(ansi_out, ansi_tmp, sizeof(ansi_buf[0]));
} else if (s->vt52) {
- val = va_arg(ap, short);
for (n = 0; n < val; n++)
len = strlcat(ansi_out, "\33C", sizeof(ansi_buf[0]));
}
break;
case ANSI_BACK_N:
+ val = va_arg(ap, short);
if (s->vt100) {
- snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dD",
- va_arg(ap, short));
+ snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dD", val);
len = strlcat(ansi_out, ansi_tmp, sizeof(ansi_buf[0]));
} else if (s->vt52) {
- val = va_arg(ap, short);
for (n = 0; n < val; n++)
len = strlcat(ansi_out, "\33D", sizeof(ansi_buf[0]));
}
break;
case ANSI_UP_N:
+ val = va_arg(ap, short);
if (s->vt100) {
- snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dF",
- va_arg(ap, short));
+ snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dF", val);
len = strlcat(ansi_out, ansi_tmp, sizeof(ansi_buf[0]));
} else if (s->vt52) {
- val = va_arg(ap, short);
for (n = 0; n < val; n++)
len = strlcat(ansi_out, "\33A", sizeof(ansi_buf[0]));
}
break;
case ANSI_INSERT_LINES_N:
+ val = va_arg(ap, short);
if (s->vt100) {
- snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dL",
- va_arg(ap, short));
+ snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dL", val);
len = strlcat(ansi_out, ansi_tmp, sizeof(ansi_buf[0]));
} else if (s->vt52) {
- val = va_arg(ap, short);
for (n = 0; n < val; n++)
len = strlcat(ansi_out, "\33L", sizeof(ansi_buf[0]));
}
break;
case ANSI_DELETE_LINES_N:
+ val = va_arg(ap, short);
if (s->vt100) {
- snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dM",
- va_arg(ap, short));
+ snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%dM", val);
len = strlcat(ansi_out, ansi_tmp, sizeof(ansi_buf[0]));
} else if (s->vt52) {
- val = va_arg(ap, short);
for (n = 0; n < val; n++)
len = strlcat(ansi_out, "\33M", sizeof(ansi_buf[0]));
}
@@ -196,16 +190,17 @@ ansi(struct session *s, ...)
case ANSI_CURSOR_LINE_COL:
val = va_arg(ap, short);
val2 = va_arg(ap, short);
- if (s->vt100)
+ if (s->vt100) {
/* line, column */
snprintf(ansi_tmp, sizeof(ansi_tmp), "\33[%d;%dH", val, val2);
- else if (s->vt52)
+ len = strlcat(ansi_out, ansi_tmp, sizeof(ansi_buf[0]));
+ } else if (s->vt52) {
/* column, line as chr(col)+31,chr(line)+31 */
snprintf(ansi_tmp, sizeof(ansi_tmp), "\33Y%c%c",
val2 + 31, val + 31);
- len = strlcat(ansi_out, ansi_tmp, sizeof(ansi_buf[0]));
+ len = strlcat(ansi_out, ansi_tmp, sizeof(ansi_buf[0]));
+ }
break;
-
case ANSI_SAVE_CURSOR:
if (s->vt100)
len = strlcat(ansi_out, "\33[s", sizeof(ansi_buf[0]));
@@ -218,7 +213,6 @@ ansi(struct session *s, ...)
else if (s->vt52)
len = strlcat(ansi_out, "\338", sizeof(ansi_buf[0]));
break;
-
default:
panic("ansi: Unknown ANSI attribute %d", attr);
}