# Patch #4 for x3270 3.2.  Prevents the 'Save Changed Options in File' option
# from saving information about default keymaps.

--- x3270-3.2/keymap.c.orig	Thu Aug  9 14:35:02 2001
+++ x3270-3.2/keymap.c	Mon Jul 29 13:59:29 2002
@@ -95,7 +95,7 @@
 
 /* Keymap initialization. */
 void
-keymap_init(const char *km)
+keymap_init(const char *km, Boolean interactive)
 {
 	static Boolean initted = False;
 
@@ -103,7 +103,7 @@
 		if ((km = (char *)getenv("KEYMAP")) == CN)
 			if ((km = (char *)getenv("KEYBD")) == CN)
 				km = "@server";
-	setup_keymaps(km, initted);
+	setup_keymaps(km, interactive);
 	if (!initted) {
 		initted = True;
 		last_nvt = IN_ANSI;
@@ -131,7 +131,9 @@
 	if (last_nvt != IN_ANSI || last_3270 != IN_3270) {
 		last_nvt = IN_ANSI;
 		last_3270 = IN_3270;
-		keymap_init(last_keymap);
+
+		/* Switch between 3270 and NVT keymaps. */
+		keymap_init(last_keymap, False);
 	}
 }
 
@@ -148,12 +150,8 @@
 	/* Make sure it starts with "base". */
 	if (km == CN)
 		km = "base";
-	else {
-		char *k = XtMalloc(5 + strlen(km) + 1);
-
-		(void) sprintf(k, "base,%s", km);
-		km = k;
-	}
+	else
+		km = xs_buffer("base,%s", km);
 
 	if (do_popup)
 		keymap_changed = True;
@@ -263,13 +261,15 @@
 	char *path, *path_nvt, *path_3270;
 	Boolean is_from_server = False;
 
-	if (appres.key_map == (char *)NULL)
-		appres.key_map = XtNewString(name);
-	else {
-		char *t = xs_buffer("%s,%s", appres.key_map, name);
+	if (strcmp(name, "base")) {
+		if (appres.key_map == (char *)NULL)
+			appres.key_map = XtNewString(name);
+		else {
+			char *t = xs_buffer("%s,%s", appres.key_map, name);
 
-		XtFree(appres.key_map);
-		appres.key_map = t;
+			XtFree(appres.key_map);
+			appres.key_map = t;
+		}
 	}
 
 	/* Translate '@server' to a vendor-specific keymap. */
--- x3270-3.2/keymapc.h.orig	Wed Dec  8 15:17:03 1999
+++ x3270-3.2/keymapc.h	Mon Jul 29 13:59:29 2002
@@ -20,7 +20,7 @@
 extern char *keymap_trace;
 
 extern void do_keymap_display(Widget w, XtPointer userdata, XtPointer calldata);
-extern void keymap_init(const char *km);
+extern void keymap_init(const char *km, Boolean interactive);
 extern XtTranslations lookup_tt(const char *name, char *table);
 extern void PA_End_action(Widget w, XEvent *event, String *params,
     Cardinal *num_params);
--- x3270-3.2/main.c.orig	Wed Apr 10 14:55:53 2002
+++ x3270-3.2/main.c	Mon Jul 29 13:59:29 2002
@@ -355,7 +355,7 @@
 
 	XtAppAddActions(appcontext, actions, actioncount);
 
-	keymap_init(appres.key_map);
+	keymap_init(appres.key_map, False);
 
 	if (appres.apl_mode) {
 		appres.compose_map = XtNewString(Apl);
--- x3270-3.2/menubar.c.orig	Mon Apr  8 14:45:58 2002
+++ x3270-3.2/menubar.c	Mon Jul 29 13:59:29 2002
@@ -1257,7 +1257,7 @@
 	if (s != CN && !*s)
 		s = CN;
 	XtPopdown(keymap_shell);
-	keymap_init(s);
+	keymap_init(s, True);
 }
 
 /* Callback from the "Keymap" menu option */
