Submitting a patch for a basic VT52
Robert Morin
robert.morin at gmail.com
Wed Aug 3 14:36:47 UTC 2005
Hi,
I made a patch to support VT52 (basic arrows only). If anyone is interested.
Robert Morin
diff -urN minicom-2.1/src/config.c minicom-2.1.modif/src/config.c
--- minicom-2.1/src/config.c 2005-08-03 10:23:05.955633696 -0400
+++ minicom-2.1.modif/src/config.c 2005-08-03 09:50:10.072013664 -0400
@@ -25,6 +25,7 @@
* jl 05.04.99 - logging options menu
* er 18-Apr-99 - the P_MULTILINE option
* jl 11.02.2000 - the P_STOPB option
+ * rm 08.03.2005 - Add VT52 basic support.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -37,6 +38,13 @@
#include "minicom.h"
#include "intl.h"
+const char *terminal_type[] = {
+ "<NO GOOD>",
+ "VT100",
+ "VT52",
+ "ANSI"
+};
+
void doconv(); /* jl 04.09.97 */
/* Read in parameters. */
@@ -1158,7 +1166,7 @@
w = wopen(20, 7, 59, 14, BDOUBLE, stdattr, mfcolor, mbcolor, 0, 0, 1);
wtitle(w, TMID, _("Terminal settings"));
wprintf(w, "\n");
- wprintf(w, "%s %s\n", terminal_emulation, terminal == VT100 ? "VT102"
: "ANSI");
+ wprintf(w, "%s %s\n", terminal_emulation, terminal_type[ terminal ]);
wprintf(w, "%s %s\n", backspace_key_sends, P_BACKSPACE);
wprintf(w, "%s %s\n", status_line, _(P_STATLINE));
wprintf(w, "%s %d\n", msg_nl_delay, vt_nl_delay);
@@ -1179,15 +1187,15 @@
return(new_term);
case 'A':
if (new_term < 0) new_term = terminal;
- if (new_term == VT100) {
- new_term = ANSI;
- psets(P_BACKSPACE, "BS");
- } else {
- new_term = VT100;
+ new_term++;
+ if ( new_term > ANSI ) new_term = VT100;
+ if (new_term == VT100 || new_term == VT52) {
psets(P_BACKSPACE, "DEL");
+ } else {
+ psets(P_BACKSPACE, "BS");
}
wlocate(w, strlen (terminal_emulation) + 1, 1);
- wprintf(w, "%s ", new_term == VT100 ? "VT102" : "ANSI");
+ wprintf(w, "%s ", terminal_type[ new_term ]);
wlocate(w, strlen (backspace_key_sends) + 1, 2);
wprintf(w, "%s ", P_BACKSPACE);
keyboard(KSETBS, P_BACKSPACE[0] == 'B' ? 8 : 127);
diff -urN minicom-2.1/src/main.c minicom-2.1.modif/src/main.c
--- minicom-2.1/src/main.c 2003-05-10 14:20:19.000000000 -0400
+++ minicom-2.1.modif/src/main.c 2005-08-03 09:50:59.736463520 -0400
@@ -13,6 +13,7 @@
* jl 22.06.97 log it when DCD drops
* jl 02.06.98 added call duration to the "Gone offline" log line
* jl 14.06.99 moved lockfile creation to before serial port opening
+ * rm 08.03.2005 - Add VT52 basic support.
*
*/
#ifdef HAVE_CONFIG_H
@@ -565,6 +566,9 @@
case VT100:
wputs(st, "VT102");
break;
+ case VT52:
+ wputs(st, "VT52");
+ break;
case ANSI:
wputs(st, "ANSI");
break;
diff -urN minicom-2.1/src/vt100.c minicom-2.1.modif/src/vt100.c
--- minicom-2.1/src/vt100.c 2003-04-04 15:23:47.000000000 -0500
+++ minicom-2.1.modif/src/vt100.c 2005-08-03 09:51:21.433165120 -0400
@@ -17,6 +17,7 @@
*
* // jl 04.09.97 character map conversions in and out
* jl 06.07.98 use conversion tables with the capture file
+ * rm 08.03.2005 - Add VT52 basic support.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -54,58 +55,59 @@
char *vt100_st;
char *vt100_app;
char *ansi;
+ char *vt52;
};
/* Escape sequences for different terminal types. */
static struct escseq vt_keys[] = {
#ifndef _DGUX_SOURCE
- { K_F1, "OP", "OP", "OP" },
- { K_F2, "OQ", "OQ", "OQ" },
- { K_F3, "OR", "OR", "OR" },
- { K_F4, "OS", "OS", "OS" },
- { K_F5, "[16~", "[16~", "OT" },
- { K_F6, "[17~", "[17~", "OU" },
- { K_F7, "[18~", "[18~", "OV" },
- { K_F8, "[19~", "[19~", "OW" },
- { K_F9, "[20~", "[20~", "OX" },
- { K_F10, "[21~", "[21~", "OY" },
- { K_F11, "[23~", "[23~", "OY" },
- { K_F12, "[24~", "[24~", "OY" },
- { K_HOME, "[1~", "[1~", "[H" },
- { K_PGUP, "[5~", "[5~", "[V" },
- { K_UP, "[A", "OA", "[A" },
- { K_LT, "[D", "OD", "[D" },
- { K_RT, "[C", "OC", "[C" },
- { K_DN, "[B", "OB", "[B" },
- { K_END, "[4~", "[4~", "[Y" },
- { K_PGDN, "[6~", "[6~", "[U" },
- { K_INS, "[2~", "[2~", "[@" },
- { K_DEL, "[3~", "[3~", "\177" },
- { 0, NULL, NULL, NULL }
+ { K_F1, "OP", "OP", "OP", "" },
+ { K_F2, "OQ", "OQ", "OQ", "" },
+ { K_F3, "OR", "OR", "OR", "" },
+ { K_F4, "OS", "OS", "OS", "" },
+ { K_F5, "[16~", "[16~", "OT", "" },
+ { K_F6, "[17~", "[17~", "OU", "" },
+ { K_F7, "[18~", "[18~", "OV", "" },
+ { K_F8, "[19~", "[19~", "OW", "" },
+ { K_F9, "[20~", "[20~", "OX", "" },
+ { K_F10, "[21~", "[21~", "OY", "" },
+ { K_F11, "[23~", "[23~", "OY", "" },
+ { K_F12, "[24~", "[24~", "OY", "" },
+ { K_HOME, "[1~", "[1~", "[H", "H" },
+ { K_PGUP, "[5~", "[5~", "[V", "" },
+ { K_UP, "[A", "OA", "[A", "A" },
+ { K_LT, "[D", "OD", "[D", "D" },
+ { K_RT, "[C", "OC", "[C", "C" },
+ { K_DN, "[B", "OB", "[B", "B" },
+ { K_END, "[4~", "[4~", "[Y", "" },
+ { K_PGDN, "[6~", "[6~", "[U", "" },
+ { K_INS, "[2~", "[2~", "[@", "" },
+ { K_DEL, "[3~", "[3~", "\177", "\177" },
+ { 0, NULL, NULL, NULL, NULL }
#else
- { K_F1, "[17~", "[17~", "OP" },
- { K_F2, "[18~", "[18~", "OQ" },
- { K_F3, "[19~", "[19~", "OR" },
- { K_F4, "[20~", "[20~", "OS" },
- { K_F5, "[21~", "[21~", "OT" },
- { K_F6, "[23~", "[23~", "OU" },
- { K_F7, "[24~", "[24~", "OV" },
- { K_F8, "[25~", "[25~", "OW" },
- { K_F9, "[26~", "[26~", "OX" },
- { K_F10, "[28~", "[28~", "OY" },
- { K_F11, "[29~", "[29~", "OZ" },
- { K_F12, "[31~", "[31~", "OA" },
- { K_HOME, "OP", "OP", "[H" },
- { K_PGUP, "OQ", "OQ", "[V" },
- { K_UP, "[A", "OA", "[A" },
- { K_LT, "[D", "OD", "[D" },
- { K_RT, "[C", "OC", "[C" },
- { K_DN, "[B", "OB", "[B" },
- { K_END, "OR", "OR", "[Y" },
- { K_PGDN, "OS", "OS", "[U" },
- { K_INS, "[1~", "[1~", "[@" },
- { K_DEL, "[3~", "[3~", "\177" },
- { 0, NULL, NULL, NULL }
+ { K_F1, "[17~", "[17~", "OP", "" },
+ { K_F2, "[18~", "[18~", "OQ", "" },
+ { K_F3, "[19~", "[19~", "OR", "" },
+ { K_F4, "[20~", "[20~", "OS", "" },
+ { K_F5, "[21~", "[21~", "OT", "" },
+ { K_F6, "[23~", "[23~", "OU", "" },
+ { K_F7, "[24~", "[24~", "OV", "" },
+ { K_F8, "[25~", "[25~", "OW", "" },
+ { K_F9, "[26~", "[26~", "OX", "" },
+ { K_F10, "[28~", "[28~", "OY", "" },
+ { K_F11, "[29~", "[29~", "OZ", "" },
+ { K_F12, "[31~", "[31~", "OA", "" },
+ { K_HOME, "OP", "OP", "[H", "H" },
+ { K_PGUP, "OQ", "OQ", "[V", "" },
+ { K_UP, "[A", "OA", "[A", "A" },
+ { K_LT, "[D", "OD", "[D", "D" },
+ { K_RT, "[C", "OC", "[C", "C" },
+ { K_DN, "[B", "OB", "[B", "B" },
+ { K_END, "OR", "OR", "[Y", "" },
+ { K_PGDN, "OS", "OS", "[U", "" },
+ { K_INS, "[1~", "[1~", "[@", "" },
+ { K_DEL, "[3~", "[3~", "\177", "\177" },
+ { 0, NULL, NULL, NULL, NULL }
#endif
};
@@ -352,24 +354,37 @@
case 'P': /* ESC P (DCS, Device Control String) */
esc_s = 7;
return;
+ case 'A':
+ case 'B':
+#if 0
case 'D': /* Cursor down */
case 'M': /* Cursor up */
+#endif
x = vt_win->curx;
- if (c == 'D') { /* Down. */
+ if (c == 'D' || c == 'B') { /* Down. */
y = vt_win->cury + 1;
if (y == newy2 + 1)
wscroll(vt_win, S_UP);
else if (vt_win->cury < vt_win->ys)
wlocate(vt_win, x, y);
}
- if (c == 'M') { /* Up. */
+ if (c == 'M' || c == 'A') { /* Up. */
y = vt_win->cury - 1;
if (y == newy1 - 1)
wscroll(vt_win, S_DOWN);
else if (y >= 0)
wlocate(vt_win, x, y);
}
- break;
+ break;
+ case 'C': /* Cursor right */
+ case 'D': /* Cursor left */
+ x = vt_win->curx;
+ y = vt_win->cury;
+ x += ((c == 'C') - (c == 'D'));
+ if (x < 0) x = 0;
+ if (x >= vt_win->xs) x = vt_win->xs - 1;
+ wlocate(vt_win, x, y);
+ break;
case 'E': /* CR + NL */
wputs(vt_win, "\r\n");
break;
@@ -407,7 +422,9 @@
case 'Z': /* Report terminal type */
if (vt_type == VT100)
v_termout("\033[?1;0c", 0);
- else
+ else if (vt_type == VT52)
+ v_termout("\033/Z", 0);
+ else /* ANSI */
v_termout("\033[?c", 0);
break;
case 'c': /* Reset to initial state */
@@ -564,7 +581,7 @@
}
break;
case 'c': /* Identify Terminal Type */
- if (vt_type == VT100) {
+ if (vt_type == VT100 || vt_type == VT52) {
v_termout("\033[?1;2c", 0);
break;
}
@@ -950,7 +967,7 @@
/* Process <31 chars first, even in an escape sequence. */
switch(c) {
case 5: /* AnswerBack for vt100's */
- if (vt_type != VT100) {
+ if (vt_type != VT100 || vt_type == VT52) {
go_on = 1;
break;
}
@@ -1021,7 +1038,7 @@
fputc(P_CONVCAP[0]=='Y'? vt_inmap[c]: c, vt_capfp);
c = vt_inmap[c]; /* conversion 04.09.97 / jl */
#if TRANSLATE
- if (vt_type == VT100 && vt_asis == 0) {
+ if ((vt_type == VT100 || vt_type == VT52 )&& vt_asis == 0) {
if (vt_insert)
winschar2(vt_win, vt_trans[vt_charset][c], 1);
else
@@ -1093,11 +1110,14 @@
/* Now send appropriate escape code. */
v_termout("\033", 0);
- if (vt_type == VT100) {
+ if (vt_type == VT100 ) {
if (vt_cursor == NORMAL)
v_termout(vt_keys[f].vt100_st, 0);
else
v_termout(vt_keys[f].vt100_app, 0);
- } else
+ } else if ( vt_type == ANSI ) {
v_termout(vt_keys[f].ansi, 0);
+ } else if ( vt_type == VT52 ) {
+ v_termout(vt_keys[f].vt52, 0 );
+ }
}
diff -urN minicom-2.1/src/vt100.h minicom-2.1.modif/src/vt100.h
--- minicom-2.1/src/vt100.h 2003-03-30 13:55:54.000000000 -0500
+++ minicom-2.1.modif/src/vt100.h 2005-08-03 09:42:19.015625120 -0400
@@ -18,6 +18,7 @@
/* Don't change - hardcoded in minicom's dial.c */
#define VT100 1
+#define VT52 2
#define ANSI 3
/* Prototypes from vt100.c */
More information about the minicom-devel
mailing list