diff --git a/Modules/flmodule.c b/Modules/flmodule.c
index 0cc08da..90b8115 100644
--- a/Modules/flmodule.c
+++ b/Modules/flmodule.c
@@ -24,10 +24,9 @@
 
 /* FL module -- interface to Mark Overmars' FORMS Library. */
 
-/* As distributed, this code works with FORMS 2.0.
-   If you #define the symbol FL_V15 it will work with FORMS 1.5 (I hope),
-   and possibly also with previous versions.
-   (You must also edit FL.py to set _v15 to 1.) */
+/* This code works with FORMS version 2.2a.
+   FORMS can be ftp'ed from ftp.cs.ruu.nl (131.211.80.17), directory
+   /pub/SGI/FORMS. */
 
 /* A half-hearted attempt has been made to allow programs using this
  * module to exploit parallelism (through the threads module). No provisions
@@ -269,6 +268,35 @@
 	return generic_call(g, args, fl_unfreeze_object);
 }
 
+static object *
+generic_activate_object(g, args)
+	genericobject *g;
+	object *args;
+{
+	return generic_call(g, args, fl_activate_object);
+}
+
+static object *
+generic_deactivate_object(g, args)
+	genericobject *g;
+	object *args;
+{
+	return generic_call(g, args, fl_deactivate_object);
+}
+
+static object *
+generic_set_object_shortcut(g, args)
+	genericobject *g;
+	object *args;
+{
+	char *str;
+	if (!getargs(args, "s", &str))
+		return NULL;
+	fl_set_object_shortcut(g->ob_generic, str);
+	INCREF(None);
+	return None;
+}
+
 static struct methodlist generic_methods[] = {
 	{"set_call_back",	generic_set_call_back},
 	{"delete_object",	generic_delete_object},
@@ -277,10 +305,9 @@
 	{"redraw_object",	generic_redraw_object},
 	{"freeze_object",	generic_freeze_object},
 	{"unfreeze_object",	generic_unfreeze_object},
-#if 0
-	{"handle_object",	generic_handle_object},
-	{"handle_object_direct",generic_handle_object_direct},
-#endif
+	{"activate_object",	generic_activate_object},
+	{"deactivate_object",	generic_deactivate_object},
+	{"set_object_shortcut",	generic_set_object_shortcut},
 	{NULL,			NULL}		/* sentinel */
 };
 
@@ -314,7 +341,7 @@
 	{"pushed",	T_INT,		OFF(pushed),	RO},
 	{"focus",	T_INT,		OFF(focus),	RO},
 	{"belowmouse",	T_INT,		OFF(belowmouse),RO},
-	{"frozen",	T_INT,		OFF(frozen),	RO},
+/*	{"frozen",	T_INT,		OFF(frozen),	RO},	*/
 	{"active",	T_INT,		OFF(active)},
 	{"input",	T_INT,		OFF(input)},
 	{"visible",	T_INT,		OFF(visible),	RO},
@@ -518,7 +545,7 @@
 }
 
 
-/* voide func (object, int, string) */
+/* void func (object, int, string) */
 static object *
 call_forms_INiINstr (func, obj, args)
 	void (*func)(FL_OBJECT *, int, char *);
@@ -537,10 +564,10 @@
 }
 
 #ifdef UNUSED
-/* void func (object, float) */
+/* void func (object, int, int) */
 static object *
 call_forms_INiINi (func, obj, args)
-	void (*func)(FL_OBJECT *, float, float);
+	void (*func)(FL_OBJECT *, int, int);
 	FL_OBJECT *obj;
 	object *args;
 {
@@ -848,6 +875,15 @@
 {
 	return call_forms_Ri (fl_get_button, g-> ob_generic, args);
 }
+
+static object *
+get_button_numb(g, args)
+	genericobject *g;
+	object *args;
+{
+	return call_forms_Ri (fl_get_button_numb, g-> ob_generic, args);
+}
+
 static object *
 set_button_shortcut(g, args)
 	genericobject *g;
@@ -859,9 +895,8 @@
 static struct methodlist button_methods[] = {
 	{"set_button",		set_button},
 	{"get_button",		get_button},
-#ifndef FL_V15
+	{"get_button_numb",	get_button_numb},
 	{"set_button_shortcut",	set_button_shortcut},
-#endif /* !FL_V15 */
 	{NULL,			NULL}		/* sentinel */
 };
 
@@ -1034,48 +1069,9 @@
 	{NULL,				NULL}		/* sentinel */
 };
 
-#ifdef FL_V15
-/* Class : Defaults */
-
-static object *
-get_default(g, args)
-	genericobject *g;
-	object *args;
-{
-	char c;
-
-	if (!getnoarg(args)) return NULL;
-
-	c = fl_get_default (g->ob_generic);
-
-	return mkvalue("c", c);
-}
-
-static struct methodlist default_methods[] = {
-	{"get_default",		get_default},
-	{NULL,			NULL}		/* sentinel */
-};
-#endif /* FL_V15 */
-
 
 /* Class: Dials */
 
-#ifdef FL_V15
-static object *
-set_dial (g, args)
-	genericobject *g;
-	object *args;
-{
-	float f1, f2, f3;
-
-	if (!getargs(args, "(fff)", &f1, &f2, &f3))
-		return NULL;
-	fl_set_dial (g->ob_generic, f1, f2, f3);
-	INCREF(None);
-	return None;
-}
-#endif /* FL_V15 */
-
 static object *
 get_dial_value(g, args)
 	genericobject *g;
@@ -1108,7 +1104,6 @@
 	return call_forms_OUTfOUTf (fl_get_dial_bounds, g-> ob_generic, args);
 }
 
-#ifndef FL_V15
 static object *
 set_dial_step (g, args)
 	genericobject *g;
@@ -1116,20 +1111,13 @@
 {
 	return call_forms_INf (fl_set_dial_step, g-> ob_generic, args);
 }
-#endif /* !FL_V15 */
 
 static struct methodlist dial_methods[] = {
-#ifdef FL_V15
-	{"set_dial",		set_dial},
-	{"get_dial",		get_dial_value},
-#endif /* FL_V15 */
 	{"set_dial_value",	set_dial_value},
 	{"get_dial_value",	get_dial_value},
 	{"set_dial_bounds",	set_dial_bounds},
 	{"get_dial_bounds",	get_dial_bounds},
-#ifndef FL_V15
 	{"set_dial_step",	set_dial_step},
-#endif /* !FL_V15 */
 	{NULL,			NULL}		/* sentinel */
 };
 
@@ -1159,7 +1147,6 @@
 	return call_forms_INfINf (fl_set_input_color, g-> ob_generic, args);
 }
 
-#ifndef FL_V15
 static object *
 set_input_return (g, args)
 	genericobject *g;
@@ -1167,15 +1154,12 @@
 {
 	return call_forms_INi (fl_set_input_return, g-> ob_generic, args);
 }
-#endif /* !FL_V15 */
 
 static struct methodlist input_methods[] = {
 	{"set_input",		set_input},
 	{"get_input",		get_input},
 	{"set_input_color",	set_input_color},
-#ifndef FL_V15
 	{"set_input_return",	set_input_return},
-#endif /* !FL_V15 */
 	{NULL,			NULL}		/* sentinel */
 };
 
@@ -1227,22 +1211,6 @@
 
 /* Class: Sliders */
 
-#ifdef FL_V15
-static object *
-set_slider (g, args)
-	genericobject *g;
-	object *args;
-{
-	float f1, f2, f3;
-
-	if (!args(args, "(fff)", &f1, &f2, &f3))
-		return NULL;
-	fl_set_slider (g->ob_generic, f1, f2, f3);
-	INCREF(None);
-	return None;
-}
-#endif /* FL_V15 */
-
 static object *
 get_slider_value(g, args)
 	genericobject *g;
@@ -1299,7 +1267,6 @@
 	return call_forms_INi (fl_set_slider_precision, g-> ob_generic, args);
 }
 
-#ifndef FL_V15
 static object *
 set_slider_step (g, args)
 	genericobject *g;
@@ -1307,14 +1274,9 @@
 {
 	return call_forms_INf (fl_set_slider_step, g-> ob_generic, args);
 }
-#endif /* !FL_V15 */
 
 
 static struct methodlist slider_methods[] = {
-#ifdef FL_V15
-	{"set_slider",		set_slider},
-	{"get_slider",		get_slider_value},
-#endif /* FL_V15 */
 	{"set_slider_value",	set_slider_value},
 	{"get_slider_value",	get_slider_value},
 	{"set_slider_bounds",	set_slider_bounds},
@@ -1322,9 +1284,7 @@
 	{"set_slider_return",	set_slider_return},
 	{"set_slider_size",	set_slider_size},
 	{"set_slider_precision",set_slider_precision},
-#ifndef FL_V15
 	{"set_slider_step",	set_slider_step},
-#endif /* !FL_V15 */
 	{NULL,			NULL}		/* sentinel */
 };
 
@@ -1488,6 +1448,22 @@
 }
 
 static object *
+form_call_INfINf(func, f, args)
+	FL_FORM *f;
+	object *args;
+	void (*func)(FL_FORM *, float, float);
+{
+	float a, b;
+
+	if (!getargs(args, "(ff)", &a, &b)) return NULL;
+
+	(*func)(f, a, b);
+
+	INCREF(None);
+	return None;
+}
+
+static object *
 form_hide_form(f, args)
 	formobject *f;
 	object *args;
@@ -1535,6 +1511,22 @@
 }
 
 static object *
+form_set_form_size(f, args)
+	formobject *f;
+	object *args;
+{
+	return form_call_INiINi(fl_set_form_size, f-> ob_form, args);
+}
+
+static object *
+form_scale_form(f, args)
+	formobject *f;
+	object *args;
+{
+	return form_call_INfINf(fl_scale_form, f-> ob_form, args);
+}
+
+static object *
 generic_add_object(f, args, func, internal_methods)
 	formobject *f;
 	object *args;
@@ -1627,16 +1619,6 @@
 	return generic_add_object(f, args, fl_add_counter, counter_methods);
 }
 
-#ifdef FL_V15
-static object *
-form_add_default(f, args)
-	formobject *f;
-	object *args;
-{
-	return generic_add_object(f, args, fl_add_default, default_methods);
-}
-#endif /* FL_V15 */
-
 static object *
 form_add_clock(f, args)
 	formobject *f;
@@ -1719,16 +1701,6 @@
 	return form_call(fl_unfreeze_form, f-> ob_form, args);
 }
 
-#ifdef FL_V15
-static object *
-form_remove_form(f, args)
-	formobject *f;
-	object *args;
-{
-	return form_call(fl_remove_form, f-> ob_form, args);
-}
-#endif /* FL_V15 */
-
 static object *
 form_activate_form(f, args)
 	formobject *f;
@@ -1845,11 +1817,10 @@
 	{"hide_form",		form_hide_form},
 	{"redraw_form",		form_redraw_form},
 	{"set_form_position",	form_set_form_position},
+	{"set_form_size",	form_set_form_size},
+	{"scale_form",		form_scale_form},
 	{"freeze_form",		form_freeze_form},
 	{"unfreeze_form",	form_unfreeze_form},
-#ifdef FL_V15
-	{"remove_form",		form_remove_form},
-#endif /* FL_V15 */
 	{"activate_form",	form_activate_form},
 	{"deactivate_form",	form_deactivate_form},
 	{"bgn_group",		form_bgn_group},
@@ -1869,9 +1840,6 @@
 	{"add_valslider",	form_add_valslider},
 	{"add_dial",		form_add_dial},
 	{"add_counter",		form_add_counter},
-#ifdef FL_V15
-	{"add_default",		form_add_default},
-#endif /* FL_V15 */
 	{"add_box",		form_add_box},
 	{"add_clock",		form_add_clock},
 	{"add_choice",		form_add_choice},
@@ -2136,7 +2104,6 @@
 }
 #endif
 
-#ifndef FL_V15
 static object *
 forms_set_graphics_mode(dummy, args)
 	object *dummy;
@@ -2192,8 +2159,6 @@
 	return None;
 }
 
-#endif /* !FL_V15 */
-
 
 static object *
 forms_qdevice(self, args)
@@ -2552,12 +2517,10 @@
 	{"get_directory",	forms_get_directory},
 	{"get_pattern",		forms_get_pattern},
 	{"get_filename",	forms_get_filename},
-#ifndef FL_V15
 	{"set_graphics_mode",	forms_set_graphics_mode},
 	{"get_rgbmode",		forms_get_rgbmode},
 	{"show_errors",		forms_show_errors},
 	{"set_font_name",	forms_set_font_name},
-#endif /* !FL_V15 */
 	{NULL,			NULL}		/* sentinel */
 };
 
@@ -2566,7 +2529,5 @@
 {
 	initmodule("fl", forms_methods);
 	foreground();
-#ifndef FL_V15
 	fl_init();
-#endif /* !FL_V15 */
 }
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index 8b1bccf..67e3cf7 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -27,9 +27,6 @@
 #include "allobjects.h"
 
 #include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
 
 #include "modsupport.h"
 
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 097c4da..68c5ac7 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -469,7 +469,7 @@
 #endif /* unix */
 
 
-#ifdef TURBO_C /* Maybe also for MS-DOS? */
+#ifdef TURBO_C
 
 #ifndef CLOCKS_PER_SEC
 #define CLOCKS_PER_SEC 55	/* 54.945 msec per tick (18.2 HZ clock) */
@@ -492,3 +492,14 @@
 }
 
 #endif /* TURBO_C */
+
+#ifdef MSDOS
+
+floatsleep(secs)
+      double secs;
+{
+      clock_t t= clock( );
+      while( (clock()-t)/CLOCKS_PER_SEC<secs )
+              ;
+}
+#endif /* MSDOS */
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 15263d3..99cdba2 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -30,10 +30,7 @@
 
 #define BUF(v) GETSTRINGVALUE((stringobject *)v)
 
-#include "errno.h"
-#ifndef errno
-extern int errno;
-#endif
+#include <errno.h>
 
 typedef struct {
 	OB_HEAD
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 25ae6d8..9994523 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -31,10 +31,6 @@
 #include "modsupport.h"
 
 #include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
 #include <ctype.h>
 #include <math.h>
 
diff --git a/Parser/intrcheck.c b/Parser/intrcheck.c
index 4636b3f..f5891ee 100644
--- a/Parser/intrcheck.c
+++ b/Parser/intrcheck.c
@@ -131,7 +131,20 @@
 intcatcher(sig)
 	int sig; /* Not used by required by interface */
 {
-	interrupted = 1;
+	extern void goaway PROTO((int));
+	static char message[] =
+"python: to interrupt a truly hanging Python program, interrupt once more.\n";
+	switch (interrupted++) {
+	case 0:
+		break;
+	case 1:
+		write(2, message, strlen(message));
+		break;
+	case 2:
+		interrupted = 0;
+		goaway(1);
+		break;
+	}
 	signal(SIGINT, intcatcher);
 }
 
diff --git a/Parser/pgenmain.c b/Parser/pgenmain.c
index 57cdc61..1b759d5 100644
--- a/Parser/pgenmain.c
+++ b/Parser/pgenmain.c
@@ -47,6 +47,13 @@
 char *askfile PROTO((void));
 #endif
 
+void
+goaway(sts)
+	int sts;
+{
+	exit(sts);
+}
+
 int
 main(argc, argv)
 	int argc;
@@ -62,7 +69,7 @@
 #else
 	if (argc != 2) {
 		fprintf(stderr, "usage: %s grammar\n", argv[0]);
-		exit(2);
+		goaway(2);
 	}
 	filename = argv[1];
 #endif
@@ -70,7 +77,7 @@
 	fp = fopen("graminit.c", "w");
 	if (fp == NULL) {
 		perror("graminit.c");
-		exit(1);
+		goaway(1);
 	}
 	printf("Writing graminit.c ...\n");
 	printgrammar(g, fp);
@@ -78,12 +85,12 @@
 	fp = fopen("graminit.h", "w");
 	if (fp == NULL) {
 		perror("graminit.h");
-		exit(1);
+		goaway(1);
 	}
 	printf("Writing graminit.h ...\n");
 	printnonterminals(g, fp);
 	fclose(fp);
-	exit(0);
+	goaway(0);
 }
 
 grammar *
@@ -97,7 +104,7 @@
 	fp = fopen(filename, "r");
 	if (fp == NULL) {
 		perror(filename);
-		exit(1);
+		goaway(1);
 	}
 	g0 = meta_grammar();
 	n = NULL;
@@ -105,12 +112,12 @@
 	fclose(fp);
 	if (n == NULL) {
 		fprintf(stderr, "Parsing error.\n");
-		exit(1);
+		goaway(1);
 	}
 	g = pgen(n);
 	if (g == NULL) {
 		printf("Bad grammar.\n");
-		exit(1);
+		goaway(1);
 	}
 	return g;
 }
@@ -124,12 +131,12 @@
 	printf("Input file name: ");
 	if (fgets(buf, sizeof buf, stdin) == NULL) {
 		printf("EOF\n");
-		exit(1);
+		goaway(1);
 	}
 	/* XXX The (unsigned char *) case is needed by THINK C 3.0 */
 	if (sscanf(/*(unsigned char *)*/buf, " %s ", name) != 1) {
 		printf("No file\n");
-		exit(1);
+		goaway(1);
 	}
 	return name;
 }
@@ -140,7 +147,7 @@
 	char *msg;
 {
 	fprintf(stderr, "pgen: FATAL ERROR: %s\n", msg);
-	exit(1);
+	goaway(1);
 }
 
 #ifdef macintosh
diff --git a/Python/ceval.c b/Python/ceval.c
index 8ed4663..b8d6de2 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1652,7 +1652,7 @@
 	err_setval(error_type, error_value);
 }
 
-void
+static void
 mergelocals()
 {
 	locals_2_fast(current_frame, 1);
diff --git a/Python/compile.c b/Python/compile.c
index a8cd4e9..0eb06cb 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -39,8 +39,7 @@
 #include "structmember.h"
 
 #include <ctype.h>
-
-extern int errno;
+#include <errno.h>
 
 #define OFF(x) offsetof(codeobject, x)
 
diff --git a/Python/errors.c b/Python/errors.c
index 9f53255..6b8a183 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -59,9 +59,6 @@
 #include "modsupport.h"
 
 #include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
 
 #include "errcode.h"
 
diff --git a/Python/fmod.c b/Python/fmod.c
index 8301b94..027c662 100644
--- a/Python/fmod.c
+++ b/Python/fmod.c
@@ -27,8 +27,6 @@
 #include <math.h>
 #include <errno.h>
 
-extern int errno;
-
 double
 fmod(x, y)
 	double x, y;
diff --git a/Python/frozenmain.c b/Python/frozenmain.c
index 8bc136a..2aee249 100644
--- a/Python/frozenmain.c
+++ b/Python/frozenmain.c
@@ -38,7 +38,6 @@
 {
 	char *p;
 	int n, inspect, sts;
-	int n;
 
 	if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
 		debugging = 1;
@@ -63,8 +62,7 @@
 	else
 		sts = 0;
 
-	if (inspect && isatty((int)fileno(stdin)) &&
-	    (filename != NULL || command != NULL))
+	if (inspect && isatty((int)fileno(stdin)))
 		sts = run(stdin, "<stdin>") != 0;
 
 	goaway(sts);
diff --git a/Python/getcwd.c b/Python/getcwd.c
index 675c4a6..e3c3bfc 100644
--- a/Python/getcwd.c
+++ b/Python/getcwd.c
@@ -30,8 +30,6 @@
 #include <stdio.h>
 #include <errno.h>
 
-extern int errno;
-
 #ifndef NO_GETWD
 
 /* Default: Version for BSD systems -- use getwd() */
diff --git a/Python/marshal.c b/Python/marshal.c
index 93503d1..e61815c 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -34,7 +34,6 @@
 #include "marshal.h"
 
 #include <errno.h>
-extern int errno;
 
 #define TYPE_NULL	'0'
 #define TYPE_NONE	'N'
diff --git a/Python/modsupport.c b/Python/modsupport.c
index d998ad8..beb5c34 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -314,6 +314,8 @@
 	return ok;
 }
 
+#ifdef UNUSED
+
 int
 getlongtuplearg(args, a, n)
 	object *args;
@@ -394,6 +396,8 @@
 	return 1;
 }
 
+#endif /* UNUSED */
+
 
 /* Generic function to create a value -- the inverse of getargs() */
 /* After an original idea and first implementation by Steven Miale */
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index b85be92..d518f24 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -284,7 +284,7 @@
 	return run_err_node(err, n, filename, globals, locals);
 }
 
-object *
+static object *
 run_err_node(err, n, filename, globals, locals)
 	int err;
 	node *n;
@@ -298,7 +298,7 @@
 	return run_node(n, filename, globals, locals);
 }
 
-object *
+static object *
 run_node(n, filename, globals, locals)
 	node *n;
 	char *filename;
@@ -307,7 +307,7 @@
 	return eval_node(n, filename, globals, locals);
 }
 
-object *
+static object *
 eval_node(n, filename, globals, locals)
 	node *n;
 	char *filename;
@@ -392,7 +392,7 @@
 extern int threads_started;
 #endif
 
-void
+static void
 cleanup()
 {
 	object *exitfunc = sysget("exitfunc");
@@ -461,7 +461,7 @@
 }
 
 #ifdef HANDLE_SIGNALS
-SIGTYPE
+static SIGTYPE
 sighandler(sig)
 	int sig;
 {
@@ -472,7 +472,7 @@
 }
 #endif
 
-void
+static void
 initsigs()
 {
 	initintr();
