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