about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--CHANGES83
-rw-r--r--INSTALLATION2
-rw-r--r--WWW/Library/Implementation/HTAccess.c4
-rw-r--r--WWW/Library/Implementation/HTAnchor.c12
-rw-r--r--WWW/Library/Implementation/HTAtom.c2
-rw-r--r--WWW/Library/Implementation/HTFTP.c50
-rw-r--r--WWW/Library/Implementation/HTFile.c6
-rw-r--r--WWW/Library/Implementation/HTFormat.c4
-rw-r--r--WWW/Library/Implementation/HTGopher.c2
-rw-r--r--WWW/Library/Implementation/HTMIME.c8
-rw-r--r--WWW/Library/Implementation/HTMLDTD.h6
-rw-r--r--WWW/Library/Implementation/HTMLGen.c2
-rw-r--r--WWW/Library/Implementation/HTNews.c24
-rw-r--r--WWW/Library/Implementation/HTParse.c14
-rw-r--r--WWW/Library/Implementation/HTParse.h6
-rw-r--r--WWW/Library/Implementation/HTPlain.c50
-rw-r--r--WWW/Library/Implementation/HTString.c10
-rw-r--r--WWW/Library/Implementation/HTTCP.c4
-rw-r--r--WWW/Library/Implementation/HTTelnet.c2
-rw-r--r--WWW/Library/Implementation/HTUU.c10
-rw-r--r--WWW/Library/Implementation/HTUtils.h8
-rw-r--r--WWW/Library/Implementation/SGML.c82
-rw-r--r--WWW/Library/Implementation/www_tcp.h7
-rw-r--r--aclocal.m412
-rw-r--r--config.hin2
-rwxr-xr-xconfigure941
-rw-r--r--configure.in2
-rw-r--r--docs/OS-390.announce4
-rw-r--r--lynx.cfg6
-rw-r--r--lynx.hlp367
-rw-r--r--lynx.man5
-rw-r--r--src/GridText.c170
-rw-r--r--src/HTAlert.c176
-rw-r--r--src/HTFWriter.c4
-rw-r--r--src/HTML.c103
-rw-r--r--src/LYBookmark.c15
-rw-r--r--src/LYCharUtils.c102
-rw-r--r--src/LYCookie.c84
-rw-r--r--src/LYCurses.c81
-rw-r--r--src/LYEditmap.c2
-rw-r--r--src/LYForms.c4
-rw-r--r--src/LYGetFile.c6
-rw-r--r--src/LYGlobalDefs.h12
-rw-r--r--src/LYHash.c2
-rw-r--r--src/LYHash.h3
-rw-r--r--src/LYHistory.c2
-rw-r--r--src/LYKeymap.c2
-rw-r--r--src/LYLeaks.c2
-rw-r--r--src/LYMail.c8
-rw-r--r--src/LYMain.c11
-rw-r--r--src/LYNews.c12
-rw-r--r--src/LYOptions.c45
-rw-r--r--src/LYPrettySrc.c8
-rw-r--r--src/LYReadCFG.c42
-rw-r--r--src/LYReadCFG.h1
-rw-r--r--src/LYStrings.c236
-rw-r--r--src/LYStyle.c70
-rw-r--r--src/LYUtils.c114
-rw-r--r--src/LYUtils.h4
-rw-r--r--src/LYrcFile.c2
-rw-r--r--src/UCAuto.c4
-rw-r--r--src/UCdomap.c52
-rw-r--r--src/Xsystem.c5
-rw-r--r--src/chrtrans/makeuctb.c19
-rw-r--r--src/makefile.in3
-rw-r--r--userdefs.h4
66 files changed, 1756 insertions, 1391 deletions
diff --git a/CHANGES b/CHANGES
index 44043eb5..d6f2a094 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,89 @@
 Changes since Lynx 2.8 release
 ===============================================================================
 
+2000-10-25 (2.8.4dev.12)
+* add a configure check for video library on OS/2 EMX, needed to link with
+  slang.  Arrow keys do not work -TD
+* use macro UCH to fix gcc's char-used-as-subscript warnings, and to replace
+  existing casts to unsigned char, making the code more readable -TD
+* merge variants of HTReadProgress() -TD
+* modify SHOW_KB_RATE in lynx.cfg to allow disabling logic that
+  shows transfer rate during download.  If EXP_READPROGRESS is defined, make
+  this alterable from the command line and options menu as well (from
+  discussion by Karen Lewellen <klewellen@delphi.com>) -TD
+* add the pathname that caused a problem to the error message in
+  CF_PATH_SYNTAX, lest someone be confused when tilde is not expanded
+  (addresses a problem reported by Lawrence Kwan <lawrence@interlog.com>) -TD
+* remove redundant leading newlines in "lynx -version" output (reported by Sven
+  Guckes) -TD
+* add dependency in src/makefile.in for building chrtrans/makeuctb$x, used by
+  UCdomap.o -IZ
+* fix CF_PATH_SYNTAX square brackets for OS/2 EMX case, lost by not disabling
+  m4's quotes for that line (report by IZ) -TD
+* remove older/unused variant of code to set screen size in LYCurses.c by
+  setting environment variables -PG
+* one of the ".po" files is zipped as type binary rather than ASCII, so it does
+  not unzip on OS/390 with the "-a" option.  The "-aa" works better since it
+  forces text conversion regardless of the type of the archived file -PG
+* change definitions of LYCharINTERRUPT1 and LYCharINTERRUPT2 to accommodate
+  EBCDIC -PG
+> the remainder (most of the functional changes in this patch) from IZ:
+* add "typeless" notion to color style logic:
+  a) reverts to the style "foo" (from "foo.classname") if the style
+     "foo.classname" was not configured;
+  b) For input elements of type=typename uses style
+     "input.type.typename" if this style is configured (but
+     "input.classname" is not!);
+  c) Same for typeless elements, with typename="".
+  This allows the following:
+    input.type.submit:normal:blue:black
+    # match "link":
+    input:normal:green
+    textarea:normal:white:cyan
+    # type-less input is the same as type=text (similar to textarea)
+    input.type.:normal:white:cyan
+    input.type.text:normal:white:cyan
+  If your "link" is configured as normal:green, then input elements of types
+  other than typeless, text, or submit will be shown in the same style as link. 
+  The textareas and text input elements are shown in the same style (but
+  different from "link" style), and submit "buttons" are shown yet in another
+  style.
+* implement styles in "dynamic areas" of documents.  Three flavors of them are
+  active text-edit fields, non-active ones, and links/radiobuttons, etc.
+  This patch is concerned with the first flavor only.  Two subflavors are
+  document's text-edit areas, and Lynx's ones (such as where you input the URL
+  after `g').  Each one of them has 3 elements:  scroll symbols ("arrows"),
+  after-the-end padding, and the actual input string. 
+  The patch
+    a) makes styles for these 2*3 elements customizable;
+    b) uses ACS chars (if available) for the arrows (instead of `{'/`}').
+  [It would be nice to make non-active text-areas to have customizable
+   styles for padding, and have scroll arrows too...]
+  Here is my customization for testing:
+    edit.active:normal:red:cyan
+    edit.prompt:normal:green:cyan
+    edit.active.arrow:normal:yellow:cyan
+    edit.prompt.arrow:normal:yellow:gray
+    edit.active.pad:normal:gray:cyan
+    edit.prompt.pad:normal:white:black
+* modify LYSystem() to allow changing size of lynx window with OS/2 EMX
+  at runtime.  Example:
+    !mode 110,30;exit
+* use new macros LYCharINTERRUPT1, LYCharINTERRUPT2 and LYCharIsINTERRUPT() to
+  make it simpler to find uses of ^C and ^G
+* modify key mappings so the keymap file overrides the terminfo/termcap
+  description rather than the reverse
+* make unrecognized keynames emit diagnostic when tracing (but ignores them the
+  same way the older code did).  Trace info about each keycode received
+* provide better tracing of style choices, both when styles are assigned into
+  text-lines, and when lss directives are converted to "numeric colors"
+* add similar tracing for links and contents of user-editable stuff
+* slightly expand the cache of colors to better accomodate 16-color terminals,
+  and fixes a misprint in handling background-color == maxcolor
+* modify logic in color styles initialization using flag default_color_reset to
+  override ncurses use_default_colors() logic if the "default" color style tag
+  is found in lynx.lss
+
 2000-10-18 (2.8.4dev.11)
 * include LYLeaks.h in LYPrettySrc.c to allow leak-checking -TD
 * modify configure script macro CF_RECHECK_FUNC to ensure that we add a given
diff --git a/INSTALLATION b/INSTALLATION
index abb4a21b..8e46be5e 100644
--- a/INSTALLATION
+++ b/INSTALLATION
@@ -873,7 +873,7 @@ V. Compile instructions -- 386 DOS
     userdefs.h and lynx.cfg, which have unix-style end of lines. You would
     be well advised to use an editor that can handle end of lines terminated
     with a single LF character. You can also unpack the source code using
-    unzip386 or unzip with the -a switch to convert unix LF to dos CRLF.
+    unzip386 or unzip with the -a or -aa switch to convert unix LF to dos CRLF.
     That will make texts more readable under DOS. If you compile lynx
     regularly, you may automate the procedure by creating a batch file such
     as the following.
diff --git a/WWW/Library/Implementation/HTAccess.c b/WWW/Library/Implementation/HTAccess.c
index 4d44a317..786c9619 100644
--- a/WWW/Library/Implementation/HTAccess.c
+++ b/WWW/Library/Implementation/HTAccess.c
@@ -1268,12 +1268,12 @@ PUBLIC BOOL HTSearch ARGS2(
     for (e = s + strlen(s); e > s && WHITE(*(e-1)); e--) /* Scan */
 	;	/* Skip trailers */
     for (q = escaped, p = s; p < e; p++) {	/* Scan stripped field */
-	unsigned char c = (unsigned char)TOASCII(*p);
+	unsigned char c = UCH(TOASCII(*p));
 	if (WHITE(*p)) {
 	    *q++ = '+';
 	} else if (HTCJK != NOCJK) {
 	    *q++ = *p;
-	} else if (c>=32 && c<=(unsigned char)127 && isAcceptable[c-32]) {
+	} else if (c>=32 && c<=UCH(127) && isAcceptable[c-32]) {
 	    *q++ = *p;				/* 930706 TBL for MVS bug */
 	} else {
 	    *q++ = '%';
diff --git a/WWW/Library/Implementation/HTAnchor.c b/WWW/Library/Implementation/HTAnchor.c
index 42dcb4dc..e4373848 100644
--- a/WWW/Library/Implementation/HTAnchor.c
+++ b/WWW/Library/Implementation/HTAnchor.c
@@ -959,8 +959,8 @@ PUBLIC void HTAnchor_setTitle ARGS2(
 	if (title) {
 	    StrAllocCopy(me->title, title);
 	    for (i = 0; me->title[i]; i++) {
-		if ((unsigned char)me->title[i] == 1 ||
-		    (unsigned char)me->title[i] == 2) {
+		if (UCH(me->title[i]) == 1 ||
+		    UCH(me->title[i]) == 2) {
 		    me->title[i] = ' ';
 		}
 	    }
@@ -985,8 +985,8 @@ PUBLIC void HTAnchor_appendTitle ARGS2(
     if (me) {
 	StrAllocCat(me->title, title);
 	for (i = 0; me->title[i]; i++) {
-	    if ((unsigned char)me->title[i] == 1 ||
-		(unsigned char)me->title[i] == 2) {
+	    if (UCH(me->title[i]) == 1 ||
+		UCH(me->title[i]) == 2) {
 		me->title[i] = ' ';
 	    }
 	}
@@ -1043,8 +1043,8 @@ PUBLIC void HTAnchor_setRevTitle ARGS2(
     if (me) {
 	StrAllocCopy(me->RevTitle, title);
 	for (i = 0; me->RevTitle[i]; i++) {
-	    if ((unsigned char)me->RevTitle[i] == 1 ||
-		(unsigned char)me->RevTitle[i] == 2) {
+	    if (UCH(me->RevTitle[i]) == 1 ||
+		UCH(me->RevTitle[i]) == 2) {
 		me->RevTitle[i] = ' ';
 	    }
 	}
diff --git a/WWW/Library/Implementation/HTAtom.c b/WWW/Library/Implementation/HTAtom.c
index f2cfdffc..cb5fc7c4 100644
--- a/WWW/Library/Implementation/HTAtom.c
+++ b/WWW/Library/Implementation/HTAtom.c
@@ -36,7 +36,7 @@ PRIVATE void free_atoms NOPARAMS;
 /*
  *	Alternate hashing function.
  */
-#define HASH_FUNCTION(cp_hash) ((strlen(cp_hash) * (unsigned char)*cp_hash) % HASH_SIZE)
+#define HASH_FUNCTION(cp_hash) ((strlen(cp_hash) * UCH(*cp_hash)) % HASH_SIZE)
 
 PUBLIC HTAtom * HTAtom_for ARGS1(CONST char *, string)
 {
diff --git a/WWW/Library/Implementation/HTFTP.c b/WWW/Library/Implementation/HTFTP.c
index 82c8ccbf..49983c79 100644
--- a/WWW/Library/Implementation/HTFTP.c
+++ b/WWW/Library/Implementation/HTFTP.c
@@ -306,7 +306,7 @@ PRIVATE int next_data_char NOARGS
 	return FROMASCII(c);
     }
 #else
-    return (unsigned char)(*data_read_pointer++);
+    return UCH(*data_read_pointer++);
 #endif /* NOT_ASCII */
 }
 
@@ -1408,7 +1408,7 @@ PRIVATE BOOLEAN is_ls_date ARGS1(
 	char *,		s)
 {
     /* must start with three alpha characters */
-    if (!isalpha(*s++) || !isalpha(*s++) || !isalpha(*s++))
+    if (!isalpha(UCH(*s++)) || !isalpha(UCH(*s++)) || !isalpha(UCH(*s++)))
 	return FALSE;
 
     /* space or HT_NON_BREAK_SPACE */
@@ -1419,14 +1419,14 @@ PRIVATE BOOLEAN is_ls_date ARGS1(
     s++;
 
     /* space or digit */
-    if (!(*s == ' ' || isdigit(*s))) {
+    if (!(*s == ' ' || isdigit(UCH(*s)))) {
 	s++;
 	return FALSE;
     }
     s++;
 
     /* digit */
-    if (!isdigit(*s++))
+    if (!isdigit(UCH(*s++)))
 	return FALSE;
 
     /* space */
@@ -1434,29 +1434,29 @@ PRIVATE BOOLEAN is_ls_date ARGS1(
 	return FALSE;
 
     /* space or digit */
-    if (!(*s == ' ' || isdigit(*s))) {
+    if (!(*s == ' ' || isdigit(UCH(*s)))) {
 	s++;
 	return FALSE;
     }
     s++;
 
     /* digit */
-    if (!isdigit(*s++))
+    if (!isdigit(UCH(*s++)))
 	return FALSE;
 
     /* colon or digit */
-    if (!(*s == ':' || isdigit(*s))) {
+    if (!(*s == ':' || isdigit(UCH(*s)))) {
 	s++;
 	return FALSE;
     }
     s++;
 
     /* digit */
-    if (!isdigit(*s++))
+    if (!isdigit(UCH(*s++)))
 	return FALSE;
 
     /* space or digit */
-    if (!(*s == ' ' || isdigit(*s))) {
+    if (!(*s == ' ' || isdigit(UCH(*s)))) {
 	s++;
 	return FALSE;
     }
@@ -1539,7 +1539,7 @@ PRIVATE void parse_ls_line ARGS2(
     int    size_num=0;
 
     for (i = strlen(line) - 1;
-	 (i > 13) && (!isspace(line[i]) || !is_ls_date(&line[i-12])); i--)
+	 (i > 13) && (!isspace(UCH(line[i])) || !is_ls_date(&line[i-12])); i--)
 	; /* null body */
     line[i] = '\0';
     if (i > 13) {
@@ -1555,7 +1555,7 @@ PRIVATE void parse_ls_line ARGS2(
 	}
     }
     j = i - 14;
-    while (isdigit(line[j])) {
+    while (isdigit(UCH(line[j]))) {
 	size_num += (line[j] - '0') * base;
 	base *= 10;
 	j--;
@@ -1605,9 +1605,9 @@ PRIVATE void parse_dls_line ARGS3(
 	return;
     }
     if (len < 24 || line[23] != ' ' ||
-	(isspace(line[0]) && !*pspilledname)) {
+	(isspace(UCH(line[0])) && !*pspilledname)) {
 	/* this isn't the expected "dls" format! */
-	if (!isspace(line[0]))
+	if (!isspace(UCH(line[0])))
 	    *cps = '\0';
 	if (*pspilledname && !*line) {
 	    entry_info->filename = *pspilledname;
@@ -1631,7 +1631,7 @@ PRIVATE void parse_dls_line ARGS3(
     if (line[j] == '=' || line[j] == '-') {
 	StrAllocCopy(entry_info->type, ENTRY_IS_DIRECTORY);
     } else {
-	while (isdigit(line[j])) {
+	while (isdigit(UCH(line[j]))) {
 	    size_num += (line[j] - '0') * base;
 	    base *= 10;
 	    j--;
@@ -1742,8 +1742,8 @@ PRIVATE void parse_vms_dir_entry ARGS2(
 
     /** Track down the date. **/
     if ((cpd=strchr(cp, '-')) != NULL &&
-	strlen(cpd) > 9 && isdigit(*(cpd-1)) &&
-	isalpha(*(cpd+1)) && *(cpd+4) == '-') {
+	strlen(cpd) > 9 && isdigit(UCH(*(cpd-1))) &&
+	isalpha(UCH(*(cpd+1))) && *(cpd+4) == '-') {
 
 	/** Month **/
 	*(cpd+2) = (char) TOLOWER(*(cpd+2));
@@ -1751,7 +1751,7 @@ PRIVATE void parse_vms_dir_entry ARGS2(
 	sprintf(date, "%.3s ", cpd+1);
 
 	/** Day **/
-	if (isdigit(*(cpd-2)))
+	if (isdigit(UCH(*(cpd-2))))
 	    sprintf(date+4, "%.2s ", cpd-2);
 	else
 	    sprintf(date+4, "%c%.1s ", HT_NON_BREAK_SPACE, cpd-1);
@@ -1771,13 +1771,13 @@ PRIVATE void parse_vms_dir_entry ARGS2(
     if ((cpd=strchr(cp, '/')) != NULL) {
 	/* Appears be in used/allocated format */
 	cps = cpd;
-	while (isdigit(*(cps-1)))
+	while (isdigit(UCH(*(cps-1))))
 	    cps--;
 	if (cps < cpd)
 	    *cpd = '\0';
 	entry_info->size = atoi(cps);
 	cps = cpd+1;
-	while (isdigit(*cps))
+	while (isdigit(UCH(*cps)))
 	    cps++;
 	*cps = '\0';
 	ialloc = atoi(cpd+1);
@@ -1790,7 +1790,7 @@ PRIVATE void parse_vms_dir_entry ARGS2(
 	/* Now let's hunt for a lone, size number    */
 	while ((cps=strtok(NULL, sp)) != NULL) {
 	    cpd = cps;
-	    while (isdigit(*cpd))
+	    while (isdigit(UCH(*cpd)))
 		cpd++;
 	    if (*cpd == '\0') {
 		/* Assume it's blocks */
@@ -1839,7 +1839,7 @@ PRIVATE void parse_ms_windows_dir_entry ARGS2(
 	cps = LYSkipBlanks(cps);
 	cpd = LYSkipNonBlanks(cps);
 	*cpd++ = '\0';
-	if (isdigit(*cps)) {
+	if (isdigit(UCH(*cps))) {
 	    entry_info->size = atoi(cps);
 	} else {
 	    StrAllocCopy(entry_info->type, ENTRY_IS_DIRECTORY);
@@ -2057,7 +2057,7 @@ PRIVATE void parse_cms_dir_entry ARGS2(
 	cp = LYSkipBlanks(cp);
 	cps = LYSkipNonBlanks(cp);
 	*cps++ = '\0';
-	if (isdigit(*cp)) {
+	if (isdigit(UCH(*cp))) {
 	    RecordLength = atoi(cp);
 	}
     }
@@ -2068,7 +2068,7 @@ PRIVATE void parse_cms_dir_entry ARGS2(
 	cp = LYSkipBlanks(cp);
 	cps = LYSkipNonBlanks(cp);
 	*cps++ = '\0';
-	if (isdigit(*cp)) {
+	if (isdigit(UCH(*cp))) {
 	    Records = atoi(cp);
 	}
 	if (Records > 0 && RecordLength > 0) {
@@ -2087,7 +2087,7 @@ PRIVATE void parse_cms_dir_entry ARGS2(
     if (((cps < end) &&
 	 (cps = strchr(cpd, ':')) != NULL) &&
 	(cps < (end - 3) &&
-	 isdigit(*(cps+1)) && isdigit(*(cps+2)) && *(cps+3) == ':')) {
+	 isdigit(UCH(*(cps+1))) && isdigit(UCH(*(cps+2))) && *(cps+3) == ':')) {
 	cps += 3;
 	*cps = '\0';
 	if ((cps - cpd) >= 14) {
@@ -2269,7 +2269,7 @@ PRIVATE EntryInfo * parse_dir_entry ARGS3(
 		**  Strip off " -> pathname".
 		*/
 		for (i = len - 1; (i > 3) &&
-				  (!isspace(entry[i]) ||
+				  (!isspace(UCH(entry[i])) ||
 				   (entry[i-1] != '>')	||
 				   (entry[i-2] != '-') ||
 				   (entry[i-3] != ' ')); i--)
diff --git a/WWW/Library/Implementation/HTFile.c b/WWW/Library/Implementation/HTFile.c
index c0a44bb3..41627cdb 100644
--- a/WWW/Library/Implementation/HTFile.c
+++ b/WWW/Library/Implementation/HTFile.c
@@ -264,7 +264,7 @@ PRIVATE void LYListFmtParse ARGS5(
 		if (s == end)
 			break;
 		start = ++s;
-		while (isdigit(*s) || *s == '.' || *s == '-' || *s == ' ' ||
+		while (isdigit(UCH(*s)) || *s == '.' || *s == '-' || *s == ' ' ||
 		    *s == '#' || *s == '+' || *s == '\'')
 			s++;
 		c = *s;		/* the format char. or \0 */
@@ -1037,7 +1037,7 @@ PUBLIC HTFormat HTCharsetFormat ARGS3(
 	    */
 	    BOOL given_is_8859
 		= (BOOL) (!strncmp(cp4, "iso-8859-", 9) &&
-		   isdigit((unsigned char)cp4[9]));
+		   isdigit(UCH(cp4[9])));
 	    BOOL given_is_8859like
 		= (BOOL) (given_is_8859 ||
 		   !strncmp(cp4, "windows-", 8) ||
@@ -1057,7 +1057,7 @@ PUBLIC HTFormat HTCharsetFormat ARGS3(
 	    if (given_is_8859) {
 		cp1 = &cp4[10];
 		while (*cp1 &&
-		       isdigit((unsigned char)(*cp1)))
+		       isdigit(UCH(*cp1)))
 		    cp1++;
 		*cp1 = '\0';
 	    }
diff --git a/WWW/Library/Implementation/HTFormat.c b/WWW/Library/Implementation/HTFormat.c
index 68b5f7c3..c589749d 100644
--- a/WWW/Library/Implementation/HTFormat.c
+++ b/WWW/Library/Implementation/HTFormat.c
@@ -256,7 +256,7 @@ PUBLIC int HTGetCharacter NOARGS
 	ch = *input_pointer++;
     } while (ch == (char) 13); /* Ignore ASCII carriage return */
 
-    return FROMASCII((unsigned char)ch);
+    return FROMASCII(UCH(ch));
 }
 
 /*  Match maintype to any MIME type starting with maintype,
@@ -1007,7 +1007,7 @@ PUBLIC void HTCopyNoCR ARGS3(
 	character = HTGetCharacter();
 	if (character == EOF)
 	    break;
-	(*targetClass.put_character)(sink, (unsigned char) character);
+	(*targetClass.put_character)(sink, UCH(character));
     }
 }
 
diff --git a/WWW/Library/Implementation/HTGopher.c b/WWW/Library/Implementation/HTGopher.c
index d960e373..33940a63 100644
--- a/WWW/Library/Implementation/HTGopher.c
+++ b/WWW/Library/Implementation/HTGopher.c
@@ -403,7 +403,7 @@ PRIVATE void parse_menu ARGS2(
 		    HTSprintf0(&address, "//%s/%c", host, gtype);
 
 		    for(r = selector; *r; r++) { /* Encode selector string */
-			if (acceptable[(unsigned char)*r]) {
+			if (acceptable[UCH(*r)]) {
 			    HTSprintf(&address, "%c", *r);
 			} else {
 			    HTSprintf(&address, "%c%c%c",
diff --git a/WWW/Library/Implementation/HTMIME.c b/WWW/Library/Implementation/HTMIME.c
index 2e555000..c0b0e89b 100644
--- a/WWW/Library/Implementation/HTMIME.c
+++ b/WWW/Library/Implementation/HTMIME.c
@@ -285,7 +285,7 @@ PRIVATE int pumpData ARGS1(HTStream *, me)
 		    */
 		    BOOL given_is_8859
 			= (BOOL) (!strncmp(cp4, "iso-8859-", 9) &&
-				  isdigit((unsigned char)cp4[9]));
+				  isdigit(UCH(cp4[9])));
 		    BOOL given_is_8859like
 			= (BOOL) (given_is_8859 ||
 				  !strncmp(cp4, "windows-", 8) ||
@@ -305,7 +305,7 @@ PRIVATE int pumpData ARGS1(HTStream *, me)
 		    if (given_is_8859) {
 			cp1 = &cp4[10];
 			while (*cp1 &&
-			       isdigit((unsigned char)(*cp1)))
+			       isdigit(UCH(*cp1)))
 			    cp1++;
 			*cp1 = '\0';
 		    }
@@ -507,9 +507,9 @@ PRIVATE int dispatchField ARGS1(HTStream *, me)
 		    cp1++;
 		    while (*cp1 != '\0' && WHITE(*cp1))
 			cp1++;
-		    if (isdigit((unsigned char)*cp1)) {
+		    if (isdigit(UCH(*cp1))) {
 			cp0 = cp1;
-			while (isdigit((unsigned char)*cp1))
+			while (isdigit(UCH(*cp1)))
 			    cp1++;
 			if (*cp0 == '0' && cp1 == (cp0 + 1)) {
 			    me->anchor->no_cache = TRUE;
diff --git a/WWW/Library/Implementation/HTMLDTD.h b/WWW/Library/Implementation/HTMLDTD.h
index d732e7b4..9c44e2c2 100644
--- a/WWW/Library/Implementation/HTMLDTD.h
+++ b/WWW/Library/Implementation/HTMLDTD.h
@@ -16,10 +16,10 @@
 #include <HTFont.h>
 
 /*
-**  Valid mane chars for tag parsing.
+**  Valid name chars for tag parsing.
 */
-#define IsNmStart(c) (isalpha((unsigned char)c))
-#define IsNmChar(c) (isalnum((unsigned char)c) || \
+#define IsNmStart(c) (isalpha(UCH(c)))
+#define IsNmChar(c) (isalnum(UCH(c)) || \
 		      c == '_' || c=='-' || c == '.' || c==':')
 
 
diff --git a/WWW/Library/Implementation/HTMLGen.c b/WWW/Library/Implementation/HTMLGen.c
index 86f06c2a..ae94493a 100644
--- a/WWW/Library/Implementation/HTMLGen.c
+++ b/WWW/Library/Implementation/HTMLGen.c
@@ -180,7 +180,7 @@ PRIVATE void HTMLGen_put_character ARGS2(
 	HTStructured *,		me,
 	char,			c)
 {
-    if (me->escape_specials && (unsigned char)c < 32) {
+    if (me->escape_specials && UCH(c) < 32) {
 	if (c == HT_NON_BREAK_SPACE || c == HT_EN_SPACE ||
 	    c == LY_SOFT_HYPHEN) { /* recursion... */
 	    HTMLGen_put_character(me, '&');
diff --git a/WWW/Library/Implementation/HTNews.c b/WWW/Library/Implementation/HTNews.c
index 41506116..ded9af8c 100644
--- a/WWW/Library/Implementation/HTNews.c
+++ b/WWW/Library/Implementation/HTNews.c
@@ -616,9 +616,9 @@ PRIVATE char * author_address ARGS1(char *,email)
     if ((at = strrchr(address, '@')) && at > address) {
 	p = (at - 1);
 	e = (at + 1);
-	while (p > address && !isspace((unsigned char)*p))
+	while (p > address && !isspace(UCH(*p)))
 	    p--;
-	while (*e && !isspace((unsigned char)*e))
+	while (*e && !isspace(UCH(*e)))
 	    e++;
 	*e = 0;
 	return HTStrip(p);
@@ -628,10 +628,10 @@ PRIVATE char * author_address ARGS1(char *,email)
     **	Default to the first word.
     */
     p = address;
-    while (isspace((unsigned char)*p))
+    while (isspace(UCH(*p)))
 	p++; /* find first non-space */
     e = p;
-    while (!isspace((unsigned char)*e) && *e != '\0')
+    while (!isspace(UCH(*e)) && *e != '\0')
 	e++; /* find next space or end */
     *e = '\0'; /* terminate space */
 
@@ -799,7 +799,7 @@ PRIVATE BOOLEAN valid_header ARGS1(
     */
     colon = strchr(line, ':');
     space = strchr(line, ' ');
-    if (isalpha(line[0]) && colon && space == colon + 1)
+    if (isalpha(UCH(line[0])) && colon && space == colon + 1)
 	return(TRUE);
 
     /*
@@ -1085,11 +1085,11 @@ PRIVATE int read_article ARGS1(
 		    /*
 		    **	End of article?
 		    */
-		    if ((unsigned char)full_line[1] < ' ') {
+		    if (UCH(full_line[1]) < ' ') {
 			done = YES;
 			break;
 		    }
-		} else if ((unsigned char)full_line[0] < ' ') {
+		} else if (UCH(full_line[0]) < ' ') {
 		    break;		/* End of Header? */
 
 		} else if (match(full_line, "SUBJECT:")) {
@@ -1401,7 +1401,7 @@ PRIVATE int read_article ARGS1(
 		/*
 		**  End of article?
 		*/
-		if ((unsigned char)line[1] < ' ') {
+		if (UCH(line[1]) < ' ') {
 		    done = YES;
 		    break;
 		} else {			/* Line starts with dot */
@@ -1638,7 +1638,7 @@ PRIVATE int read_list ARGS1(char *, arg)
 		/*
 		**  End of article?
 		*/
-		if ((unsigned char)line[1] < ' ') {
+		if (UCH(line[1]) < ' ') {
 		    done = YES;
 		    break;
 		} else {			/* Line starts with dot */
@@ -1838,7 +1838,7 @@ PRIVATE int read_group ARGS3(
 			/*
 			**  End of article?
 			*/
-			if ((unsigned char)line[1] < ' ') {
+			if (UCH(line[1]) < ' ') {
 			    done = YES;
 			    break;
 			} else {		/* Line starts with dot */
@@ -1947,7 +1947,7 @@ PRIVATE int read_group ARGS3(
 			    /*
 			    **	End of article?
 			    */
-			    done = (BOOL) ((unsigned char)line[1] < ' ');
+			    done = (BOOL) (UCH(line[1]) < ' ');
 			    break;
 
 			case 'S':
@@ -2413,7 +2413,7 @@ PRIVATE int HTLoadNews ARGS4(
 		LYstrncpy(groupName, p1, sizeof(groupName) - 1);
 		*slash = '/';
 		(void)sscanf(slash+1, "%d-%d", &first, &last);
-		if ((first > 0) && (isdigit(*(slash+1))) &&
+		if ((first > 0) && (isdigit(UCH(*(slash+1)))) &&
 		    (strchr(slash+1, '-') == NULL || first == last)) {
 		    /*
 		    **	We got a number greater than 0, which will be
diff --git a/WWW/Library/Implementation/HTParse.c b/WWW/Library/Implementation/HTParse.c
index 8a4a9ede..c7255995 100644
--- a/WWW/Library/Implementation/HTParse.c
+++ b/WWW/Library/Implementation/HTParse.c
@@ -292,7 +292,7 @@ PUBLIC char * HTParse ARGS3(
 		if ((p2 = strchr(result, '@')) != NULL)
 		   tail = (p2 + 1);
 		p2 = strchr(tail, ':');
-		if (p2 != NULL && !isdigit((unsigned char)p2[1]))
+		if (p2 != NULL && !isdigit(UCH(p2[1])))
 		    /*
 		    **	Colon not followed by a port number.
 		    */
@@ -732,7 +732,7 @@ PUBLIC char * HTEscape ARGS2(
     char * result;
     int unacceptable = 0;
     for (p = str; *p; p++)
-	if (!ACCEPTABLE((unsigned char)TOASCII(*p)))
+	if (!ACCEPTABLE(UCH(TOASCII(*p))))
 	    unacceptable++;
     result = (char *)calloc(1, (p-str + unacceptable + unacceptable + 1));
     if (result == NULL)
@@ -770,7 +770,7 @@ PUBLIC char * HTEscapeSP ARGS2(
     char * result;
     int unacceptable = 0;
     for (p = str; *p; p++)
-	if (!(*p == ' ' || ACCEPTABLE((unsigned char)TOASCII(*p))))
+	if (!(*p == ' ' || ACCEPTABLE(UCH(TOASCII(*p)))))
 	    unacceptable++;
     result = (char *)calloc(1, (p-str + unacceptable + unacceptable + 1));
     if (result == NULL)
@@ -822,8 +822,8 @@ PUBLIC char * HTUnEscape ARGS1(
 	     *	Tests shouldn't be needed, but better safe than sorry.
 	     */
 	    p[1] && p[2] &&
-	    isxdigit((unsigned char)p[1]) &&
-	    isxdigit((unsigned char)p[2])) {
+	    isxdigit(UCH(p[1])) &&
+	    isxdigit(UCH(p[2]))) {
 	    p++;
 	    if (*p)
 		*q = (char) (from_hex(*p++) * 16);
@@ -869,8 +869,8 @@ PUBLIC char * HTUnEscapeSome ARGS2(
     while (*p != '\0') {
 	if (*p == HEX_ESCAPE &&
 	    p[1] && p[2] &&	/* tests shouldn't be needed, but.. */
-	    isxdigit((unsigned char)p[1]) &&
-	    isxdigit((unsigned char)p[2]) &&
+	    isxdigit(UCH(p[1])) &&
+	    isxdigit(UCH(p[2])) &&
 	    (testcode = (char) FROMASCII(from_hex(p[1])*16 +
 		from_hex(p[2]))) && /* %00 no good*/
 	    strchr(do_trans, testcode)) { /* it's one of the ones we want */
diff --git a/WWW/Library/Implementation/HTParse.h b/WWW/Library/Implementation/HTParse.h
index 2f3c522c..0f433bb0 100644
--- a/WWW/Library/Implementation/HTParse.h
+++ b/WWW/Library/Implementation/HTParse.h
@@ -36,9 +36,9 @@
 **  The following are valid mask values.  The terms are the BNF names
 **  in the URL document.
 */
-#define URL_XALPHAS     (unsigned char) 1
-#define URL_XPALPHAS    (unsigned char) 2
-#define URL_PATH        (unsigned char) 4
+#define URL_XALPHAS     UCH(1)
+#define URL_XPALPHAS    UCH(2)
+#define URL_PATH        UCH(4)
 
 
 /*	Strip white space off a string.				HTStrip()
diff --git a/WWW/Library/Implementation/HTPlain.c b/WWW/Library/Implementation/HTPlain.c
index 4e5cbb56..1ef4ca57 100644
--- a/WWW/Library/Implementation/HTPlain.c
+++ b/WWW/Library/Implementation/HTPlain.c
@@ -135,10 +135,10 @@ PRIVATE void HTPlain_put_character ARGS2(
 	HTPlain_write(me, &c, 1);
 	return;
     }
-    HTPlain_lastraw = (unsigned char)c;
+    HTPlain_lastraw = UCH(c);
     if (c == '\r') {
 	HText_appendCharacter(me->text, '\n');
-    } else if (TOASCII((unsigned char)c) >= 127) {  /* S/390 -- gil -- 0305 */
+    } else if (TOASCII(UCH(c)) >= 127) {  /* S/390 -- gil -- 0305 */
 	/*
 	**  For now, don't repeat everything here
 	**  that has been done below - KW
@@ -146,23 +146,23 @@ PRIVATE void HTPlain_put_character ARGS2(
 	HTPlain_write(me, &c, 1);
     } else if (HTCJK != NOCJK) {
 	HText_appendCharacter(me->text, c);
-    } else if (TOASCII((unsigned char)c) >= 127 && TOASCII((unsigned char)c) < 161 &&
+    } else if (TOASCII(UCH(c)) >= 127 && TOASCII(UCH(c)) < 161 &&
 	       HTPassHighCtrlRaw) {
 	HText_appendCharacter(me->text, c);
-    } else if ((unsigned char)c == CH_NBSP) { /* S/390 -- gil -- 0341 */
+    } else if (UCH(c) == CH_NBSP) { /* S/390 -- gil -- 0341 */
 	HText_appendCharacter(me->text, ' ');
-    } else if ((unsigned char)c == CH_SHY) {
+    } else if (UCH(c) == CH_SHY) {
 	return;
-    } else if (((unsigned char)c >= ' ' && TOASCII((unsigned char)c) < 127) ||
+    } else if ((UCH(c) >= ' ' && TOASCII(UCH(c)) < 127) ||
 	       c == '\n' || c == '\t') {
 	HText_appendCharacter(me->text, c);
-    } else if (TOASCII((unsigned char)c) > 160) {
+    } else if (TOASCII(UCH(c)) > 160) {
 	if (!HTPassEightBitRaw &&
 	    !((me->outUCLYhndl == LATIN1) ||
 	      (me->outUCI->enc & (UCT_CP_SUPERSETOF_LAT1)))) {
 	    int len, high, low, i, diff = 1;
 	    CONST char * name;
-	    UCode_t value = (UCode_t)FROMASCII((TOASCII((unsigned char)c) - 160));
+	    UCode_t value = (UCode_t)FROMASCII((TOASCII(UCH(c)) - 160));
 
 	    name = HTMLGetEntityName(value);
 	    len =  strlen(name);
@@ -233,7 +233,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 	}
 #else
 	if (*p == '\b') {
-	    if (HTPlain_lastraw >= (unsigned char)' ' &&
+	    if (HTPlain_lastraw >= UCH(' ') &&
 		HTPlain_lastraw != '\r' && HTPlain_lastraw != '\n') {
 		if (!HTPlain_bs_pending) {
 		    HTPlain_bs_pending = 1;
@@ -249,12 +249,12 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 	} else if (*p == '_') {
 		if (!HTPlain_bs_pending) {
 		    HTPlain_bs_pending = 2;
-		    HTPlain_lastraw = (unsigned char)*p;
+		    HTPlain_lastraw = UCH(*p);
 		    continue;
 #if 0
 		} else if (HTPlain_bs_pending != 2) {
 		    HTPlain_bs_pending--; /* 1 -> 0, 3 -> 2 */
-		    HTPlain_lastraw = (unsigned char)*p;
+		    HTPlain_lastraw = UCH(*p);
 		    continue;
 #endif
 		}
@@ -272,9 +272,9 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 	}
 
 	if (HTPlain_bs_pending &&
-	    !((unsigned char)*p >= ' ' && *p != '\r' && *p != '\n' &&
-	      (HTPlain_lastraw == (unsigned char)*p ||
-	       HTPlain_lastraw == (unsigned char)'_' ||
+	    !(UCH(*p) >= ' ' && *p != '\r' && *p != '\n' &&
+	      (HTPlain_lastraw == UCH(*p) ||
+	       HTPlain_lastraw == UCH('_') ||
 	       *p == '_'))) {
 	    if (HTPlain_bs_pending >= 2)
 		HText_appendCharacter(me->text, '_');
@@ -298,7 +298,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 	} else {
 	    HTPlain_bs_pending = 0;
 	}
-	HTPlain_lastraw = (unsigned char)*p;
+	HTPlain_lastraw = UCH(*p);
 	if (*p == '\r') {
 	    HText_appendCharacter(me->text, '\n');
 	    continue;
@@ -308,7 +308,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 	**  whenever that's appropriate.  - FM
 	*/
 	c = *p;
-	c_unsign = (unsigned char)c;
+	c_unsign = UCH(c);
 	code = (UCode_t)c_unsign;
 	saved_char_in = '\0';
 	/*
@@ -343,7 +343,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 			code = me->utf_char;
 			if (code > 0 && code < 256) {
 			    c = FROMASCII((char)code);
-			    c_unsign = (unsigned char)c;
+			    c_unsign = UCH(c);
 			}
 		    } else {
 			/*
@@ -409,7 +409,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 	**  to Unicode (if appropriate). - FM
 	*/
 	if (!(me->T.decode_utf8 &&
-	      (unsigned char)(*p) > 127)) {
+	      UCH(*p) > 127)) {
 #ifdef NOTDEFINED
 	    if (me->T.strip_raw_char_in)
 		saved_char_in = c;
@@ -426,7 +426,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 		    saved_char_in = c;
 		if (code < 256) {
 			c = FROMASCII((char)code);
-			c_unsign = (unsigned char)c;
+			c_unsign = UCH(c);
 		}
 	    }
 	    } else if (code < 32 && code != 0 &&
@@ -442,7 +442,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 		    saved_char_in = c;
 		    if (code < 256) {
 			c = FROMASCII((char)code);
-			c_unsign = (unsigned char)c;
+			c_unsign = UCH(c);
 		    }
 		} else {
 		    uck = -1;
@@ -460,7 +460,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 			continue;
 		    } else if (uck < 0) {
 			me->utf_buf[0] = '\0';
-			code = (unsigned char)c;
+			code = UCH(c);
 		    } else {
 			c = replace_buf[0];
 			if (c && replace_buf[1]) {
@@ -469,11 +469,11 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 			}
 		    }
 		    me->utf_buf[0] = '\0';
-		    code = (unsigned char)c;
+		    code = UCH(c);
 		} /*  Next line end of ugly stuff for C0. - KW */
 	    } else {
 		me->utf_buf[0] = '\0';
-		code = (unsigned char)c;
+		code = UCH(c);
 	    }
 	}
 	/*
@@ -588,8 +588,8 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 	    }
 #ifdef NOTDEFINED
 	} else if (me->T.strip_raw_char_in &&
-		   (unsigned char)*p >= 192 &&
-		   (unsigned char)*p < 255) {
+		   UCH(*p) >= 192 &&
+		   UCH(*p) < 255) {
 	    /*
 	    **	KOI special: strip high bit, gives
 	    **	(somewhat) readable ASCII.
diff --git a/WWW/Library/Implementation/HTString.c b/WWW/Library/Implementation/HTString.c
index c57d51c4..b81e60d1 100644
--- a/WWW/Library/Implementation/HTString.c
+++ b/WWW/Library/Implementation/HTString.c
@@ -215,7 +215,7 @@ PUBLIC int AS_casecomp ARGS2(
 
     for ( ; ; p++, q++) {
 	if (!(*p && *q))
-	    return ((unsigned char) *p - (unsigned char) *q);
+	    return (UCH(*p)  - UCH(*q));
 	diff = TOASCII(TOLOWER(*p))
 	     - TOASCII(TOLOWER(*q));
 	if (diff)
@@ -239,7 +239,7 @@ PUBLIC int AS_ncmp ARGS3(
 
     for ( ; (p-a) < n; p++, q++) {
 	if (!(*p && *q))
-	    return ((unsigned char) *p - (unsigned char) *q);
+	    return (UCH(*p) - UCH(*q));
 	diff = TOASCII(*p)
 	     - TOASCII(*q);
 	if (diff)
@@ -599,7 +599,7 @@ PUBLIC_IF_FIND_LEAKS char * StrAllocVsprintf ARGS4(
 	    while (*++fmt != '\0' && !done) {
 		fmt_ptr[f++] = *fmt;
 
-		if (isdigit(*fmt)) {
+		if (isdigit(UCH(*fmt))) {
 		    int num = *fmt - '0';
 		    if (state == Flags && num != 0)
 			state = Width;
@@ -623,7 +623,7 @@ PUBLIC_IF_FIND_LEAKS char * StrAllocVsprintf ARGS4(
 		    }
 		    sprintf(&fmt_ptr[--f], "%d", ival);
 		    f = strlen(fmt_ptr);
-		} else if (isalpha(*fmt)) {
+		} else if (isalpha(UCH(*fmt))) {
 		    done = TRUE;
 		    switch (*fmt) {
 		    case 'Z': /* FALLTHRU */
@@ -847,7 +847,7 @@ PUBLIC char *HTQuoteParameter ARGS1(
 
     for (i=0; i < last; ++i)
 	if (strchr("\\&#$^*?(){}<>\"';`|", parameter[i]) != 0
-	 || isspace(parameter[i]))
+	 || isspace(UCH(parameter[i])))
 	    ++quoted;
 
     result = (char *)malloc(last + 5*quoted + 3);
diff --git a/WWW/Library/Implementation/HTTCP.c b/WWW/Library/Implementation/HTTCP.c
index 673e4727..c4fae8f2 100644
--- a/WWW/Library/Implementation/HTTCP.c
+++ b/WWW/Library/Implementation/HTTCP.c
@@ -360,7 +360,7 @@ PUBLIC BOOL valid_hostname ARGS1(
 	} else if (++iseg > 63) {
 	    return NO;
 	}
-	if (!isalnum((unsigned char)*cp) &&
+	if (!isalnum(UCH(*cp)) &&
 	    *cp != '-' && *cp != '_' &&
 	    *cp != '$' && *cp != '+') {
 	    return NO;
@@ -1282,7 +1282,7 @@ PRIVATE int HTParseInet ARGS2(
 	while (*strptr) {
 	    if (*strptr == '.') {
 		dotcount_ip++;
-	    } else if (!isdigit(*strptr)) {
+	    } else if (!isdigit(UCH(*strptr))) {
 		break;
 	    }
 	    strptr++;
diff --git a/WWW/Library/Implementation/HTTelnet.c b/WWW/Library/Implementation/HTTelnet.c
index 9f5f3a14..393e6051 100644
--- a/WWW/Library/Implementation/HTTelnet.c
+++ b/WWW/Library/Implementation/HTTelnet.c
@@ -70,7 +70,7 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
 	 */
 	for(cp = (strchr(host, '@') ? strchr(host, '@') : host); *cp != '\0';
 		cp++)	{
-	    if(!isalnum(*cp) && *cp != '_' && *cp != '-' &&
+	    if(!isalnum(UCH(*cp)) && *cp != '_' && *cp != '-' &&
 				*cp != ':' && *cp != '.' && *cp != '@') {
 		*cp = '\0';
 		break;
diff --git a/WWW/Library/Implementation/HTUU.c b/WWW/Library/Implementation/HTUU.c
index 76ce8117..580be9da 100644
--- a/WWW/Library/Implementation/HTUU.c
+++ b/WWW/Library/Implementation/HTUU.c
@@ -147,7 +147,7 @@ PUBLIC int HTUU_decode ARGS3(char *,		bufcoded,
       first = 0;
       for(j=0; j<256; j++) pr2six[j] = MAXVAL+1;
 
-      for(j=0; j<64; j++) pr2six[(unsigned char)six2pr[j]] = (unsigned char)j;
+      for(j=0; j<64; j++) pr2six[UCH(six2pr[j])] = UCH(j);
 #if 0
       pr2six['A']= 0; pr2six['B']= 1; pr2six['C']= 2; pr2six['D']= 3;
       pr2six['E']= 4; pr2six['F']= 5; pr2six['G']= 6; pr2six['H']= 7;
@@ -177,7 +177,7 @@ PUBLIC int HTUU_decode ARGS3(char *,		bufcoded,
     * the output buffer, adjust the number of input bytes downwards.
     */
    bufin = bufcoded;
-   while(pr2six[(unsigned char)*(bufin++)] <= MAXVAL);
+   while(pr2six[UCH(*(bufin++))] <= MAXVAL);
    nprbytes = bufin - bufcoded - 1;
    nbytesdecoded = ((nprbytes+3)/4) * 3;
    if(nbytesdecoded > outbufsize) {
@@ -187,9 +187,9 @@ PUBLIC int HTUU_decode ARGS3(char *,		bufcoded,
    bufin = bufcoded;
 
    while (nprbytes > 0) {
-      *(bufout++) = (unsigned char) ((DEC(*bufin) << 2) | (DEC(bufin[1]) >> 4));
-      *(bufout++) = (unsigned char) ((DEC(bufin[1]) << 4) | (DEC(bufin[2]) >> 2));
-      *(bufout++) = (unsigned char) ((DEC(bufin[2]) << 6) | (DEC(bufin[3])));
+      *(bufout++) = UCH((DEC(bufin[0]) << 2) | (DEC(bufin[1]) >> 4));
+      *(bufout++) = UCH((DEC(bufin[1]) << 4) | (DEC(bufin[2]) >> 2));
+      *(bufout++) = UCH((DEC(bufin[2]) << 6) | (DEC(bufin[3])));
       bufin += 4;
       nprbytes -= 4;
    }
diff --git a/WWW/Library/Implementation/HTUtils.h b/WWW/Library/Implementation/HTUtils.h
index 686d784c..aaef1923 100644
--- a/WWW/Library/Implementation/HTUtils.h
+++ b/WWW/Library/Implementation/HTUtils.h
@@ -358,12 +358,12 @@ extern BOOL LYOutOfMemory;	/* Declared in LYexit.c - FM */
 /*      Inline Function WHITE: Is character c white space? */
 /*      For speed, include all control characters */
 
-#define WHITE(c) (((unsigned char)(TOASCII(c))) <= 32)
+#define WHITE(c) ((UCH(TOASCII(c))) <= 32)
 
 /*     Inline Function LYIsASCII: Is character c a traditional ASCII
 **     character (i.e. <128) after converting from host character set.  */
 
-#define LYIsASCII(c) (TOASCII((unsigned char)(c)) < 128)
+#define LYIsASCII(c) (TOASCII(UCH(c)) < 128)
 
 /*
 
@@ -454,8 +454,8 @@ Upper- and Lowercase macros
 
 #ifndef TOLOWER
   /* Pyramid and Mips can't uppercase non-alpha */
-#define TOLOWER(c) (isupper((unsigned char)c) ? tolower((unsigned char)c) : ((unsigned char)c))
-#define TOUPPER(c) (islower((unsigned char)c) ? toupper((unsigned char)c) : ((unsigned char)c))
+#define TOLOWER(c) (isupper(UCH(c)) ? tolower(UCH(c)) : UCH(c))
+#define TOUPPER(c) (islower(UCH(c)) ? toupper(UCH(c)) : UCH(c))
 #endif /* TOLOWER */
 
 #define FREE(x) if (x != 0) {free((char *)x); x = NULL;}
diff --git a/WWW/Library/Implementation/SGML.c b/WWW/Library/Implementation/SGML.c
index efa921dc..430e36d0 100644
--- a/WWW/Library/Implementation/SGML.c
+++ b/WWW/Library/Implementation/SGML.c
@@ -1482,7 +1482,7 @@ PRIVATE void SGML_character ARGS2(
 #endif
 
     c = c_in;
-    clong = (unsigned char)c;	/* a.k.a. unsign_c */
+    clong = UCH(c);	/* a.k.a. unsign_c */
 
     if (context->T.decode_utf8) {
 	/*
@@ -1490,7 +1490,7 @@ PRIVATE void SGML_character ARGS2(
 	**  Incomplete characters silently ignored.
 	**  From Linux kernel's console.c. - KW
 	*/
-	if (TOASCII((unsigned char)c) > 127) { /* S/390 -- gil -- 0710 */
+	if (TOASCII(UCH(c)) > 127) { /* S/390 -- gil -- 0710 */
 	    /*
 	    **	We have an octet from a multibyte character. - FM
 	    */
@@ -1669,7 +1669,7 @@ top:
 */
 top0a:
     *(context->utf_buf) = '\0';
-    clong = (unsigned char)c;
+    clong = UCH(c);
 /*
 **  We jump to here from above if we have converted
 **  the input, or a multibyte sequence across calls,
@@ -1704,7 +1704,7 @@ top1:
 	    sjis_1st = '\0';
 	} else {
 	    if (context->state == S_text) {
-		if (0xA1 <= (unsigned char)c && (unsigned char)c <= 0xDF) {
+		if (0xA1 <= UCH(c) && UCH(c) <= 0xDF) {
 		    JISx0201TO0208_SJIS(c, &sjis_hi, &sjis_lo);
 		    PUTC(sjis_hi);
 		    PUTC(sjis_lo);
@@ -1739,7 +1739,7 @@ top1:
      * we have to care them here. -- TH
      */
     if ((HTCJK==JAPANESE) && (context->state==S_in_kanji) &&
-	!IS_JAPANESE_2BYTE(context->kanji_buf,(unsigned char)c)) {
+	!IS_JAPANESE_2BYTE(context->kanji_buf, UCH(c))) {
 #ifdef CONV_JISX0201KANA_JISX0208KANA
 	if (IS_SJIS_X0201KANA(context->kanji_buf)) {
 	    unsigned char sjis_hi, sjis_lo;
@@ -1900,9 +1900,9 @@ top1:
 		    PUTC(c);
 		} else if (clong == 0xfffd && saved_char_in &&
 		    HTPassEightBitRaw &&
-		    (unsigned char)saved_char_in >=
+		    UCH(saved_char_in) >=
 		    LYlowest_eightbit[context->outUCLYhndl]) {
-		    PUTUTF8((0xf000 | (unsigned char)saved_char_in));
+		    PUTUTF8((0xf000 | UCH(saved_char_in)));
 		} else {
 		    PUTUTF8(clong);
 		}
@@ -2042,8 +2042,8 @@ top1:
 	**  Check for a strippable koi8-r 8-bit character. - FM
 	*/
 	} else if (context->T.strip_raw_char_in && saved_char_in &&
-		   ((unsigned char)saved_char_in >= 0xc0) &&
-		   ((unsigned char)saved_char_in < 255)) {
+		   (UCH(saved_char_in) >= 0xc0) &&
+		   (UCH(saved_char_in) < 255)) {
 	    /*
 	    **	KOI8 special: strip high bit, gives (somewhat) readable
 	    **	ASCII or KOI7 - it was constructed that way! - KW
@@ -2055,7 +2055,7 @@ top1:
 	**  If we don't actually want the character,
 	**  make it safe and output that now. - FM
 	*/
-	} else if (TOASCII((unsigned char)c) <	 /* S/390 -- gil -- 0997 */
+	} else if (TOASCII(UCH(c)) <	 /* S/390 -- gil -- 0997 */
 			LYlowest_eightbit[context->outUCLYhndl] ||
 		   (context->T.trans_from_uni && !HTPassEightBitRaw)) {
 #ifdef NOTUSED_FOTEMODS
@@ -2245,7 +2245,7 @@ top1:
     */
     case S_entity:
 	if (TOASCII(unsign_c) < 127 && (string->size ?	/* S/390 -- gil -- 1029 */
-		  isalnum((unsigned char)c) : isalpha((unsigned char)c))) {
+		  isalnum(UCH(c)) : isalpha(UCH(c)))) {
 	    /* Should probably use IsNmStart/IsNmChar above (is that right?),
 	       but the world is not ready for that - there's &nbsp: (note
 	       colon!) and stuff around. */
@@ -2331,10 +2331,10 @@ top1:
     **	Check for a numeric entity.
     */
     case S_cro:
-	if (TOASCII(unsign_c) < 127 && TOLOWER((unsigned char)c) == 'x') {  /* S/390 -- gil -- 1060 */
+	if (TOASCII(unsign_c) < 127 && TOLOWER(UCH(c)) == 'x') {  /* S/390 -- gil -- 1060 */
 	    context->isHex = TRUE;
 	    context->state = S_incro;
-	} else if (TOASCII(unsign_c) < 127 && isdigit((unsigned char)c)) {
+	} else if (TOASCII(unsign_c) < 127 && isdigit(UCH(c))) {
 	    /*
 	    **	Accept only valid ASCII digits. - FM
 	    */
@@ -2368,8 +2368,8 @@ top1:
 	/* S/390 -- gil -- 1075 */ /* CTRACE((tfp, "%s: %d: numeric %d %d\n",
 			    __FILE__, __LINE__, unsign_c, c)); */
 	if ((TOASCII(unsign_c) < 127) &&
-	    (context->isHex ? isxdigit((unsigned char)c) :
-			      isdigit((unsigned char)c))) {
+	    (context->isHex ? isxdigit(UCH(c)) :
+			      isdigit(UCH(c)))) {
 	    /*
 	    **	Accept only valid hex or ASCII digits. - FM
 	    */
@@ -3254,7 +3254,7 @@ top1:
 	    break;
 	}
 	context->first_dash = FALSE;
-	if (context->end_comment && !isspace(c))
+	if (context->end_comment && !isspace(UCH(c)))
 	    context->end_comment = FALSE;
 
     S_comment_put_c:
@@ -3268,10 +3268,10 @@ top1:
 		    context->T.trans_from_uni)) {
 	    if (clong == 0xfffd && saved_char_in &&
 		HTPassEightBitRaw &&
-		(unsigned char)saved_char_in >=
+		UCH(saved_char_in) >=
 		LYlowest_eightbit[context->outUCLYhndl]) {
 		HTChunkPutUtf8Char(string,
-				   (0xf000 | (unsigned char)saved_char_in));
+				   (0xf000 | UCH(saved_char_in)));
 	    } else {
 		HTChunkPutUtf8Char(string, clong);
 	    }
@@ -3682,10 +3682,10 @@ top1:
 		    context->T.trans_from_uni)) {
 	    if (clong == 0xfffd && saved_char_in &&
 		HTPassEightBitRaw &&
-		(unsigned char)saved_char_in >=
+		UCH(saved_char_in) >=
 		LYlowest_eightbit[context->outUCLYhndl]) {
 		HTChunkPutUtf8Char(string,
-				   (0xf000 | (unsigned char)saved_char_in));
+				   (0xf000 | UCH(saved_char_in)));
 	    } else {
 		HTChunkPutUtf8Char(string, clong);
 	    }
@@ -3744,10 +3744,10 @@ top1:
 		    context->T.trans_from_uni)) {
 	    if (clong == 0xfffd && saved_char_in &&
 		HTPassEightBitRaw &&
-		(unsigned char)saved_char_in >=
+		UCH(saved_char_in) >=
 		LYlowest_eightbit[context->outUCLYhndl]) {
 		HTChunkPutUtf8Char(string,
-				   (0xf000 | (unsigned char)saved_char_in));
+				   (0xf000 | UCH(saved_char_in)));
 	    } else {
 		HTChunkPutUtf8Char(string, clong);
 	    }
@@ -3811,10 +3811,10 @@ top1:
 		    context->T.trans_from_uni)) {
 	    if (clong == 0xfffd && saved_char_in &&
 		HTPassEightBitRaw &&
-		(unsigned char)saved_char_in >=
+		UCH(saved_char_in) >=
 		LYlowest_eightbit[context->outUCLYhndl]) {
 		HTChunkPutUtf8Char(string,
-				   (0xf000 | (unsigned char)saved_char_in));
+				   (0xf000 | UCH(saved_char_in)));
 	    } else {
 		HTChunkPutUtf8Char(string, clong);
 	    }
@@ -4609,15 +4609,15 @@ PUBLIC unsigned char * SJIS_TO_JIS1 ARGS3(
 	register unsigned char,		LO,
 	register unsigned char *,	JCODE)
 {
-    HI -= (unsigned char) ((HI <= 0x9F) ? 0x71 : 0xB1);
-    HI = (unsigned char) ((HI << 1) + 1);
+    HI -= UCH((HI <= 0x9F) ? 0x71 : 0xB1);
+    HI = UCH((HI << 1) + 1);
     if (0x7F < LO)
 	LO--;
     if (0x9E <= LO) {
-	LO -= (unsigned char) 0x7D;
+	LO -= UCH(0x7D);
 	HI++;
     } else {
-	LO -= (unsigned char) 0x1F;
+	LO -= UCH(0x1F);
     }
     JCODE[0] = HI;
     JCODE[1] = LO;
@@ -4630,15 +4630,15 @@ PUBLIC unsigned char * JIS_TO_SJIS1 ARGS3(
 	register unsigned char *,	SJCODE)
 {
     if (HI & 1)
-	LO += (unsigned char) 0x1F;
+	LO += UCH(0x1F);
     else
-	LO += (unsigned char) 0x7D;
+	LO += UCH(0x7D);
     if (0x7F <= LO)
 	LO++;
 
-    HI = (unsigned char) (((HI - 0x21) >> 1) + 0x81);
+    HI = UCH(((HI - 0x21) >> 1) + 0x81);
     if (0x9F < HI)
-	HI += (unsigned char) 0x40;
+	HI += UCH(0x40);
     SJCODE[0] = HI;
     SJCODE[1] = LO;
     return SJCODE;
@@ -4651,7 +4651,7 @@ PUBLIC unsigned char * EUC_TO_SJIS1 ARGS3(
 {
     if (HI == 0x8E)
 	JISx0201TO0208_EUC(HI, LO, &HI, &LO);
-    JIS_TO_SJIS1((unsigned char) (HI & 0x7F), (unsigned char) (LO & 0x7F), SJCODE);
+    JIS_TO_SJIS1(UCH(HI & 0x7F), UCH(LO & 0x7F), SJCODE);
     return SJCODE;
 }
 
@@ -4663,7 +4663,7 @@ PUBLIC void JISx0201TO0208_SJIS ARGS3(
     unsigned char SJCODE[2];
 
     JISx0201TO0208_EUC(0x8E, I, OHI, OLO);
-    JIS_TO_SJIS1((unsigned char)(*OHI & 0x7F), (unsigned char)(*OLO & 0x7F), SJCODE);
+    JIS_TO_SJIS1(UCH(*OHI & 0x7F), UCH(*OLO & 0x7F), SJCODE);
     *OHI = SJCODE[0];
     *OLO = SJCODE[1];
 }
@@ -4711,7 +4711,7 @@ PUBLIC unsigned char * EUC_TO_SJIS ARGS2(
     for (sp = src, dp = dst; *sp;) {
 	if (*sp & 0x80) {
 	    if (sp[1] && (sp[1] & 0x80)) {
-		JIS_TO_SJIS1((unsigned char)(sp[0] & 0x7F), (unsigned char)(sp[1] & 0x7F), dp);
+		JIS_TO_SJIS1(UCH(sp[0] & 0x7F), UCH(sp[1] & 0x7F), dp);
 		dp += 2;
 		sp += 2;
 	    } else {
@@ -4749,16 +4749,16 @@ PUBLIC unsigned char *EUC_TO_JIS ARGS4(
 		continue;
 	    }
 	    if (!kana_mode) {
-		kana_mode = (unsigned char) ~kana_mode;
+		kana_mode = UCH(~kana_mode);
 		dp = Strcpy(dp, toK);
 	    }
 	    if (*sp & 0x80) {
-		*dp++ = (unsigned char) (cch & ~0x80);
-		*dp++ = (unsigned char) (*sp++ & ~0x80);
+		*dp++ = UCH(cch & ~0x80);
+		*dp++ = UCH(*sp++ & ~0x80);
 	    }
 	} else {
 	    if (kana_mode) {
-		kana_mode = (unsigned char) ~kana_mode;
+		kana_mode = UCH(~kana_mode);
 		dp = Strcpy(dp, toA);
 	    }
 	    *dp++ = cch;
@@ -4797,8 +4797,8 @@ PRIVATE CONST unsigned char *repairJIStoEUC ARGS2(
 	if (!IS_JIS7(ch1, ch2))
 	    return 0;
 
-	*d++ = (unsigned char) (0x80 | ch1);
-	*d++ = (unsigned char) (0x80 | ch2);
+	*d++ = UCH(0x80 | ch1);
+	*d++ = UCH(0x80 | ch2);
     }
     return 0;
 }
diff --git a/WWW/Library/Implementation/www_tcp.h b/WWW/Library/Implementation/www_tcp.h
index e808919b..4ab53b08 100644
--- a/WWW/Library/Implementation/www_tcp.h
+++ b/WWW/Library/Implementation/www_tcp.h
@@ -112,6 +112,11 @@ Default values
 #ifdef __CYGWIN__
 #define _WINDOWS_NSL
 #define WIN_EX
+#else
+#ifdef WIN_EX
+#define HAVE_FTIME 1
+#define HAVE_SYS_TIMEB_H 1
+#endif
 #endif /* __CYGWIN__ */
 
 #ifdef HAVE_FCNTL_H
@@ -156,6 +161,8 @@ extern unsigned char IBM1047[];
 #endif /* EBCDIC */
 #endif /* !TOASCII */
 
+/* convert a char to an unsigned, needed if we have signed characters for ctype.h */
+#define UCH(ch) ((unsigned char)(ch))
 
 /*
 IBM-PC running Windows NT
diff --git a/aclocal.m4 b/aclocal.m4
index 9113dd2a..e11d007e 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -2184,7 +2184,9 @@ AC_DEFUN([CF_PATH_SYNTAX],[
 case ".[$]$1" in #(vi
 ./*) #(vi
   ;;
+changequote(,)dnl
 .[a-zA-Z]:[\\/]*) #(vi OS/2 EMX
+changequote([,])dnl
   ;;
 .\[$]{*prefix}*) #(vi
   eval $1="[$]$1"
@@ -2198,7 +2200,7 @@ case ".[$]$1" in #(vi
   $1=`echo [$]$1 | sed -e s@NONE@$ac_default_prefix@`
   ;;
 *)
-  AC_ERROR(expected a pathname)
+  AC_ERROR(expected a pathname, not "[$]$1")
   ;;
 esac
 ])dnl
@@ -2420,6 +2422,14 @@ cf_slang_LIBS1="$LIBS"
 CF_TERMCAP_LIBS
 cf_slang_LIBS2="$LIBS"
 AC_CHECK_FUNC(acos,,[CF_RECHECK_FUNC(acos,m,LIBS)])
+case $host_os in #(vi
+os2*)
+	CF_FIND_LIBRARY(video,video,
+		[#include <sys/video.h>],
+		[v_init()],
+		v_init)
+	;;
+esac
 CF_FIND_LIBRARY(slang,slang,
 	[#include <slang.h>],
 	[SLtt_get_screen_size()],
diff --git a/config.hin b/config.hin
index a37d7298..2ba62ee7 100644
--- a/config.hin
+++ b/config.hin
@@ -62,6 +62,7 @@
 #undef HAVE_DEFINE_KEY
 #undef HAVE_DIRENT_H		/* defined by AC_HEADER_DIRENT */
 #undef HAVE_FCNTL_H		/* have <fcntl.h> */
+#undef HAVE_FTIME
 #undef HAVE_GAI_STRERROR	/* CF_CHECK_IPV6 */
 #undef HAVE_GETADDRINFO		/* CF_CHECK_IPV6 */
 #undef HAVE_GETATTRS
@@ -116,6 +117,7 @@
 #undef HAVE_SYS_IOCTL_H		/* have <sys/ioctl.h> */
 #undef HAVE_SYS_NDIR_H		/* defined by AC_HEADER_DIRENT */
 #undef HAVE_SYS_PARAM_H		/* defined by AM_GNU_GETTEXT */
+#undef HAVE_SYS_TIMEB_H		/* have <sys/timeb.h> */
 #undef HAVE_SYS_WAIT_H		/* have <sys/wait.h> */
 #undef HAVE_TERMIOS_H		/* have <termios.h> */
 #undef HAVE_TERMIO_H		/* have <termio.h> */
diff --git a/configure b/configure
index 2b2725fc..65ed7d9f 100755
--- a/configure
+++ b/configure
@@ -3921,7 +3921,7 @@ fi
 case ".$withval" in #(vi
 ./*) #(vi
   ;;
-.a-zA-Z:\\/*) #(vi OS/2 EMX
+.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX
   ;;
 .\${*prefix}*) #(vi
   eval withval="$withval"
@@ -8092,16 +8092,163 @@ fi
 
 fi
 
+case $host_os in #(vi
+os2*)
+	
+	eval 'cf_cv_have_lib_'video'=no'
+	cf_libdir=""
+	echo $ac_n "checking for v_init""... $ac_c" 1>&6
+echo "configure:8102: checking for v_init" >&5
+if eval "test \"`echo '$''{'ac_cv_func_v_init'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 8107 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char v_init(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char v_init();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_v_init) || defined (__stub___v_init)
+choke me
+#else
+v_init();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:8130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_v_init=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_v_init=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'v_init`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  eval 'cf_cv_have_lib_'video'=yes'
+else
+  echo "$ac_t""no" 1>&6
+
+		cf_save_LIBS="$LIBS"
+		echo $ac_n "checking for v_init in -lvideo""... $ac_c" 1>&6
+echo "configure:8150: checking for v_init in -lvideo" >&5
+		LIBS="-lvideo $LIBS"
+		cat > conftest.$ac_ext <<EOF
+#line 8153 "configure"
+#include "confdefs.h"
+#include <sys/video.h>
+int main() {
+v_init()
+; return 0; }
+EOF
+if { (eval echo configure:8160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  echo "$ac_t""yes" 1>&6
+			 eval 'cf_cv_have_lib_'video'=yes'
+			
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  echo "$ac_t""no" 1>&6
+			cf_search=""
+
+test "$libdir" != NONE && \
+test -d $libdir && \
+cf_search="$cf_search $libdir $libdir/video"
+
+test "$exec_prefix" != NONE && \
+test -d $exec_prefix && \
+cf_search="$cf_search $exec_prefix/lib $exec_prefix/lib/video"
+
+test "$prefix" != NONE && \
+test "$prefix" != "$exec_prefix" && \
+test -d $prefix && \
+cf_search="$cf_search $prefix/lib $prefix/lib/video $prefix/video/lib"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+cf_search="$cf_search /usr/local/lib /usr/local/lib/video /usr/local/video/lib"
+
+test "$prefix" != /usr && \
+cf_search="$cf_search /usr/lib /usr/lib/video /usr/video/lib"
+
+test "$prefix" != / && \
+cf_search="$cf_search /lib /lib/video /video/lib"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+cf_search="$cf_search /opt/lib /opt/lib/video /opt/video/lib"
+
+cf_search="$cf_search $HOME/lib $HOME/lib/video $HOME/video/lib"
+
+			for cf_libdir in $cf_search
+			do
+				echo $ac_n "checking for -lvideo in $cf_libdir""... $ac_c" 1>&6
+echo "configure:8204: checking for -lvideo in $cf_libdir" >&5
+				LIBS="-L$cf_libdir -lvideo $cf_save_LIBS"
+				cat > conftest.$ac_ext <<EOF
+#line 8207 "configure"
+#include "confdefs.h"
+#include <sys/video.h>
+int main() {
+v_init()
+; return 0; }
+EOF
+if { (eval echo configure:8214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  echo "$ac_t""yes" 1>&6
+			 		 eval 'cf_cv_have_lib_'video'=yes'
+					 break
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  echo "$ac_t""no" 1>&6
+					 LIBS="$cf_save_LIBS"
+fi
+rm -f conftest*
+			done
+			
+fi
+rm -f conftest*
+		
+fi
+
+eval 'cf_found_library=$cf_cv_have_lib_'video
+
+if test $cf_found_library = no ; then
+	{ echo "configure: error: Cannot link video library" 1>&2; exit 1; }
+fi
+
+
+	;;
+esac
 
 	eval 'cf_cv_have_lib_'slang'=no'
 	cf_libdir=""
 	echo $ac_n "checking for SLtt_get_screen_size""... $ac_c" 1>&6
-echo "configure:8100: checking for SLtt_get_screen_size" >&5
+echo "configure:8247: checking for SLtt_get_screen_size" >&5
 if eval "test \"`echo '$''{'ac_cv_func_SLtt_get_screen_size'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8105 "configure"
+#line 8252 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char SLtt_get_screen_size(); below.  */
@@ -8124,7 +8271,7 @@ SLtt_get_screen_size();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_SLtt_get_screen_size=yes"
 else
@@ -8144,17 +8291,17 @@ else
 
 		cf_save_LIBS="$LIBS"
 		echo $ac_n "checking for SLtt_get_screen_size in -lslang""... $ac_c" 1>&6
-echo "configure:8148: checking for SLtt_get_screen_size in -lslang" >&5
+echo "configure:8295: checking for SLtt_get_screen_size in -lslang" >&5
 		LIBS="-lslang $LIBS"
 		cat > conftest.$ac_ext <<EOF
-#line 8151 "configure"
+#line 8298 "configure"
 #include "confdefs.h"
 #include <slang.h>
 int main() {
 SLtt_get_screen_size()
 ; return 0; }
 EOF
-if { (eval echo configure:8158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 eval 'cf_cv_have_lib_'slang'=yes'
@@ -8198,17 +8345,17 @@ cf_search="$cf_search $HOME/lib $HOME/lib/slang $HOME/slang/lib"
 			for cf_libdir in $cf_search
 			do
 				echo $ac_n "checking for -lslang in $cf_libdir""... $ac_c" 1>&6
-echo "configure:8202: checking for -lslang in $cf_libdir" >&5
+echo "configure:8349: checking for -lslang in $cf_libdir" >&5
 				LIBS="-L$cf_libdir -lslang $cf_save_LIBS"
 				cat > conftest.$ac_ext <<EOF
-#line 8205 "configure"
+#line 8352 "configure"
 #include "confdefs.h"
 #include <slang.h>
 int main() {
 SLtt_get_screen_size()
 ; return 0; }
 EOF
-if { (eval echo configure:8212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 		 eval 'cf_cv_have_lib_'slang'=yes'
@@ -8237,7 +8384,7 @@ fi
 
 cf_slang_LIBS3="$LIBS"
 echo $ac_n "checking if we can link slang without termcap""... $ac_c" 1>&6
-echo "configure:8241: checking if we can link slang without termcap" >&5
+echo "configure:8388: checking if we can link slang without termcap" >&5
 if test -n "`echo $cf_slang_LIBS1 | sed -e 's/ //g'`" ; then
 	cf_exclude=`echo ".$cf_slang_LIBS2" | sed -e "s@$cf_slang_LIBS1@@" -e 's@^.@@'`
 else
@@ -8245,14 +8392,14 @@ else
 fi
 LIBS=`echo ".$cf_slang_LIBS3" | sed -e "s@$cf_exclude@@" -e 's@^.@@'`
 cat > conftest.$ac_ext <<EOF
-#line 8249 "configure"
+#line 8396 "configure"
 #include "confdefs.h"
 #include <slang.h>
 int main() {
 SLtt_get_screen_size()
 ; return 0; }
 EOF
-if { (eval echo configure:8256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -8269,13 +8416,13 @@ test $cf_result = no && LIBS="$cf_slang_LIBS3"
 
 
 echo $ac_n "checking if we must tell slang this is UNIX""... $ac_c" 1>&6
-echo "configure:8273: checking if we must tell slang this is UNIX" >&5
+echo "configure:8420: checking if we must tell slang this is UNIX" >&5
 if eval "test \"`echo '$''{'cf_cv_slang_unix'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 8279 "configure"
+#line 8426 "configure"
 #include "confdefs.h"
 #include <slang.h>
 int main() {
@@ -8289,7 +8436,7 @@ SLang_TT_Baud_Rate = 1
 
 ; return 0; }
 EOF
-if { (eval echo configure:8293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_slang_unix=yes
 else
@@ -8315,7 +8462,7 @@ eval cf_libdir=$libdir
 cf_libdir=`echo $cf_libdir | sed -e s@'^NONE/'@$prefix/@ -e s@'^NONE/'@$ac_default_prefix/@`
 
 echo $ac_n "checking for location of config-file""... $ac_c" 1>&6
-echo "configure:8319: checking for location of config-file" >&5
+echo "configure:8466: checking for location of config-file" >&5
 LYNX_CFG_FILE=$cf_libdir/lynx.cfg
 cat >> confdefs.h <<EOF
 #define LYNX_CFG_FILE "$LYNX_CFG_FILE"
@@ -8327,7 +8474,7 @@ CHARSET_DEFS=
 
 
 echo $ac_n "checking if you want only a few charsets""... $ac_c" 1>&6
-echo "configure:8331: checking if you want only a few charsets" >&5
+echo "configure:8478: checking if you want only a few charsets" >&5
 
 # Check whether --with-charsets or --without-charsets was given.
 if test "${with_charsets+set}" = set; then
@@ -8388,12 +8535,12 @@ fi
 
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:8392: checking for ANSI C header files" >&5
+echo "configure:8539: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8397 "configure"
+#line 8544 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -8401,7 +8548,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8405: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8552: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8418,7 +8565,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 8422 "configure"
+#line 8569 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -8436,7 +8583,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 8440 "configure"
+#line 8587 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -8457,7 +8604,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 8461 "configure"
+#line 8608 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -8468,7 +8615,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:8472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -8492,12 +8639,12 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:8496: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:8643: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8501 "configure"
+#line 8648 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -8506,7 +8653,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:8510: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8657: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -8531,12 +8678,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:8535: checking for $ac_hdr that defines DIR" >&5
+echo "configure:8682: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8540 "configure"
+#line 8687 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -8544,7 +8691,7 @@ int main() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:8548: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8695: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -8569,7 +8716,7 @@ done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
 echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:8573: checking for opendir in -ldir" >&5
+echo "configure:8720: checking for opendir in -ldir" >&5
 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8577,7 +8724,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8581 "configure"
+#line 8728 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8588,7 +8735,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:8592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8610,7 +8757,7 @@ fi
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:8614: checking for opendir in -lx" >&5
+echo "configure:8761: checking for opendir in -lx" >&5
 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8618,7 +8765,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8622 "configure"
+#line 8769 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8629,7 +8776,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:8633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8661,6 +8808,7 @@ for ac_hdr in \
 	sys/filio.h \
 	sys/ioctl.h \
 	sys/param.h \
+	sys/timeb.h \
 	sys/time.h \
 	syslog.h \
 	termio.h \
@@ -8670,17 +8818,17 @@ for ac_hdr in \
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8674: checking for $ac_hdr" >&5
+echo "configure:8822: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8679 "configure"
+#line 8827 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8684: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8708,13 +8856,13 @@ done
 
 
 echo $ac_n "checking termio.h and termios.h""... $ac_c" 1>&6
-echo "configure:8712: checking termio.h and termios.h" >&5
+echo "configure:8860: checking termio.h and termios.h" >&5
 if eval "test \"`echo '$''{'cf_cv_termio_and_termios'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 8718 "configure"
+#line 8866 "configure"
 #include "confdefs.h"
 
 #if HAVE_TERMIO_H
@@ -8727,7 +8875,7 @@ int main() {
 putchar (0x0a)
 ; return 0; }
 EOF
-if { (eval echo configure:8731: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_termio_and_termios=yes
 else
@@ -8747,13 +8895,13 @@ EOF
 
 
 echo $ac_n "checking for sigaction and structs""... $ac_c" 1>&6
-echo "configure:8751: checking for sigaction and structs" >&5
+echo "configure:8899: checking for sigaction and structs" >&5
 if eval "test \"`echo '$''{'cf_cv_func_sigaction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 8757 "configure"
+#line 8905 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -8768,7 +8916,7 @@ struct sigaction act;
 	
 ; return 0; }
 EOF
-if { (eval echo configure:8772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_func_sigaction=yes
 else
@@ -8792,17 +8940,17 @@ for ac_hdr in sys/wait.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8796: checking for $ac_hdr" >&5
+echo "configure:8944: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8801 "configure"
+#line 8949 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8806: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8954: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8839,17 +8987,17 @@ for ac_hdr in wait.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8843: checking for $ac_hdr" >&5
+echo "configure:8991: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8848 "configure"
+#line 8996 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8853: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9001: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8879,17 +9027,17 @@ for ac_hdr in waitstatus.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8883: checking for $ac_hdr" >&5
+echo "configure:9031: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8888 "configure"
+#line 9036 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8893: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9041: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8930,13 +9078,13 @@ fi
 
 
 echo $ac_n "checking for union wait""... $ac_c" 1>&6
-echo "configure:8934: checking for union wait" >&5
+echo "configure:9082: checking for union wait" >&5
 if eval "test \"`echo '$''{'cf_cv_type_unionwait'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 8940 "configure"
+#line 9088 "configure"
 #include "confdefs.h"
 $cf_wait_headers
 int main() {
@@ -8947,7 +9095,7 @@ int x;
 	
 ; return 0; }
 EOF
-if { (eval echo configure:8951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9099: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_type_unionwait=no
 	 echo compiles ok w/o union wait 1>&5
@@ -8958,7 +9106,7 @@ else
   rm -rf conftest*
   
 	cat > conftest.$ac_ext <<EOF
-#line 8962 "configure"
+#line 9110 "configure"
 #include "confdefs.h"
 $cf_wait_headers
 int main() {
@@ -8973,7 +9121,7 @@ union wait x;
 	
 ; return 0; }
 EOF
-if { (eval echo configure:8977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9125: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_type_unionwait=yes
 	 echo compiles ok with union wait and possibly macros too 1>&5
@@ -9000,20 +9148,20 @@ EOF
 if test $cf_cv_type_unionwait = yes; then
 
 	echo $ac_n "checking if union wait can be used as wait-arg""... $ac_c" 1>&6
-echo "configure:9004: checking if union wait can be used as wait-arg" >&5
+echo "configure:9152: checking if union wait can be used as wait-arg" >&5
 	if eval "test \"`echo '$''{'cf_cv_arg_union_wait'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 		cat > conftest.$ac_ext <<EOF
-#line 9010 "configure"
+#line 9158 "configure"
 #include "confdefs.h"
 $cf_wait_headers
 int main() {
 union wait x; wait(&x)
 ; return 0; }
 EOF
-if { (eval echo configure:9017: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9165: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_arg_union_wait=yes
 else
@@ -9033,20 +9181,20 @@ EOF
 
 
 	echo $ac_n "checking if union wait can be used as waitpid-arg""... $ac_c" 1>&6
-echo "configure:9037: checking if union wait can be used as waitpid-arg" >&5
+echo "configure:9185: checking if union wait can be used as waitpid-arg" >&5
 	if eval "test \"`echo '$''{'cf_cv_arg_union_waitpid'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 		cat > conftest.$ac_ext <<EOF
-#line 9043 "configure"
+#line 9191 "configure"
 #include "confdefs.h"
 $cf_wait_headers
 int main() {
 union wait x; waitpid(0, &x, 0)
 ; return 0; }
 EOF
-if { (eval echo configure:9050: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_arg_union_waitpid=yes
 else
@@ -9072,17 +9220,17 @@ for ac_hdr in stdarg.h varargs.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9076: checking for $ac_hdr" >&5
+echo "configure:9224: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9081 "configure"
+#line 9229 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9086: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9109,13 +9257,13 @@ fi
 done
 
 echo $ac_n "checking for standard varargs""... $ac_c" 1>&6
-echo "configure:9113: checking for standard varargs" >&5
+echo "configure:9261: checking for standard varargs" >&5
 if eval "test \"`echo '$''{'cf_cv_ansi_varargs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 9119 "configure"
+#line 9267 "configure"
 #include "confdefs.h"
 
 #if HAVE_STDARG_H
@@ -9130,7 +9278,7 @@ int main() {
 return 0;} int foo(char *fmt,...){va_list args;va_start(args,fmt);va_end(args)
 ; return 0; }
 EOF
-if { (eval echo configure:9134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ansi_varargs=yes
 else
@@ -9150,12 +9298,12 @@ EOF
 
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:9154: checking for uid_t in sys/types.h" >&5
+echo "configure:9302: checking for uid_t in sys/types.h" >&5
 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9159 "configure"
+#line 9307 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -9184,7 +9332,7 @@ EOF
 fi
 
 echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6
-echo "configure:9188: checking type of array argument to getgroups" >&5
+echo "configure:9336: checking type of array argument to getgroups" >&5
 if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -9192,7 +9340,7 @@ else
   ac_cv_type_getgroups=cross
 else
   cat > conftest.$ac_ext <<EOF
-#line 9196 "configure"
+#line 9344 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Rendell for this test.  */
@@ -9217,7 +9365,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:9221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
     ac_cv_type_getgroups=gid_t
 else
@@ -9231,7 +9379,7 @@ fi
 
 if test $ac_cv_type_getgroups = cross; then
         cat > conftest.$ac_ext <<EOF
-#line 9235 "configure"
+#line 9383 "configure"
 #include "confdefs.h"
 #include <unistd.h>
 EOF
@@ -9255,12 +9403,12 @@ EOF
 
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:9259: checking for pid_t" >&5
+echo "configure:9407: checking for pid_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9264 "configure"
+#line 9412 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -9288,12 +9436,12 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:9292: checking for uid_t in sys/types.h" >&5
+echo "configure:9440: checking for uid_t in sys/types.h" >&5
 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9297 "configure"
+#line 9445 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -9322,12 +9470,12 @@ EOF
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:9326: checking for mode_t" >&5
+echo "configure:9474: checking for mode_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9331 "configure"
+#line 9479 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -9358,17 +9506,17 @@ fi
 
 ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
-echo "configure:9362: checking for vfork.h" >&5
+echo "configure:9510: checking for vfork.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9367 "configure"
+#line 9515 "configure"
 #include "confdefs.h"
 #include <vfork.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9372: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9393,18 +9541,18 @@ else
 fi
 
 echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:9397: checking for working vfork" >&5
+echo "configure:9545: checking for working vfork" >&5
 if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test "$cross_compiling" = yes; then
   echo $ac_n "checking for vfork""... $ac_c" 1>&6
-echo "configure:9403: checking for vfork" >&5
+echo "configure:9551: checking for vfork" >&5
 if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9408 "configure"
+#line 9556 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vfork(); below.  */
@@ -9427,7 +9575,7 @@ vfork();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_vfork=yes"
 else
@@ -9449,7 +9597,7 @@ fi
 ac_cv_func_vfork_works=$ac_cv_func_vfork
 else
   cat > conftest.$ac_ext <<EOF
-#line 9453 "configure"
+#line 9601 "configure"
 #include "confdefs.h"
 /* Thanks to Paul Eggert for this test.  */
 #include <stdio.h>
@@ -9544,7 +9692,7 @@ main() {
   }
 }
 EOF
-if { (eval echo configure:9548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_vfork_works=yes
 else
@@ -9568,13 +9716,13 @@ fi
 
 
 echo $ac_n "checking if we should use fcntl or ioctl""... $ac_c" 1>&6
-echo "configure:9572: checking if we should use fcntl or ioctl" >&5
+echo "configure:9720: checking if we should use fcntl or ioctl" >&5
 if eval "test \"`echo '$''{'cf_cv_fionbio'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 9578 "configure"
+#line 9726 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -9586,7 +9734,7 @@ int main() {
 	
 ; return 0; }
 EOF
-if { (eval echo configure:9590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_fionbio=ioctl
 else
@@ -9595,7 +9743,7 @@ else
   rm -rf conftest*
   
 cat > conftest.$ac_ext <<EOF
-#line 9599 "configure"
+#line 9747 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -9612,7 +9760,7 @@ int main() {
 	
 ; return 0; }
 EOF
-if { (eval echo configure:9616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_fionbio=fcntl
 else
@@ -9635,20 +9783,20 @@ EOF
 
 
 echo $ac_n "checking for broken/missing definition of remove""... $ac_c" 1>&6
-echo "configure:9639: checking for broken/missing definition of remove" >&5
+echo "configure:9787: checking for broken/missing definition of remove" >&5
 if eval "test \"`echo '$''{'cf_cv_baddef_remove'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 9645 "configure"
+#line 9793 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 remove("dummy")
 ; return 0; }
 EOF
-if { (eval echo configure:9652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_baddef_remove=no
 else
@@ -9656,7 +9804,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 9660 "configure"
+#line 9808 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 		int __unlink(name) { return unlink(name); } 
@@ -9664,7 +9812,7 @@ int main() {
 remove("dummy")
 ; return 0; }
 EOF
-if { (eval echo configure:9668: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_baddef_remove=yes
 else
@@ -9688,13 +9836,13 @@ EOF
 
 
 echo $ac_n "checking for lstat""... $ac_c" 1>&6
-echo "configure:9692: checking for lstat" >&5
+echo "configure:9840: checking for lstat" >&5
 if eval "test \"`echo '$''{'ac_cv_func_lstat'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 9698 "configure"
+#line 9846 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -9703,7 +9851,7 @@ int main() {
 lstat(".", (struct stat *)0)
 ; return 0; }
 EOF
-if { (eval echo configure:9707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_lstat=yes
 else
@@ -9726,6 +9874,7 @@ fi
 
 for ac_func in \
 	cuserid \
+	ftime \
 	getcwd \
 	getgroups \
 	gettimeofday \
@@ -9747,12 +9896,12 @@ for ac_func in \
 
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9751: checking for $ac_func" >&5
+echo "configure:9900: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9756 "configure"
+#line 9905 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9775,7 +9924,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9805,12 +9954,12 @@ for ac_func in \
 
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9809: checking for $ac_func" >&5
+echo "configure:9958: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9814 "configure"
+#line 9963 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9833,7 +9982,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9864,12 +10013,12 @@ for ac_func in strstr
 do
 
 echo $ac_n "checking for $ac_func declaration""... $ac_c" 1>&6
-echo "configure:9868: checking for $ac_func declaration" >&5
+echo "configure:10017: checking for $ac_func declaration" >&5
 if eval "test \"`echo '$''{'ac_cv_func_decl_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9873 "configure"
+#line 10022 "configure"
 #include "confdefs.h"
 #include <string.h>
 int main() {
@@ -9878,11 +10027,11 @@ extern	int	${ac_func}();
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:9882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10031: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
 cat > conftest.$ac_ext <<EOF
-#line 9886 "configure"
+#line 10035 "configure"
 #include "confdefs.h"
 #include <string.h>
 int main() {
@@ -9891,7 +10040,7 @@ int	(*p)() = ${ac_func};
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:9895: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10044: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
 eval "ac_cv_func_decl_$ac_func=yes"
@@ -9933,12 +10082,12 @@ for ac_func in getgrgid getgrnam
 do
 
 echo $ac_n "checking for $ac_func declaration""... $ac_c" 1>&6
-echo "configure:9937: checking for $ac_func declaration" >&5
+echo "configure:10086: checking for $ac_func declaration" >&5
 if eval "test \"`echo '$''{'ac_cv_func_decl_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9942 "configure"
+#line 10091 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -9949,11 +10098,11 @@ extern	int	${ac_func}();
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:9953: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10102: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
 cat > conftest.$ac_ext <<EOF
-#line 9957 "configure"
+#line 10106 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -9964,7 +10113,7 @@ int	(*p)() = ${ac_func};
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:9968: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
 eval "ac_cv_func_decl_$ac_func=yes"
@@ -10006,13 +10155,13 @@ done
 
 
 echo $ac_n "checking if TRUE/FALSE are defined""... $ac_c" 1>&6
-echo "configure:10010: checking if TRUE/FALSE are defined" >&5
+echo "configure:10159: checking if TRUE/FALSE are defined" >&5
 if eval "test \"`echo '$''{'cf_cv_bool_defs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 10016 "configure"
+#line 10165 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -10021,7 +10170,7 @@ int main() {
 int x = TRUE, y = FALSE
 ; return 0; }
 EOF
-if { (eval echo configure:10025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10174: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_bool_defs=yes
 else
@@ -10048,13 +10197,13 @@ fi
 
 
 echo $ac_n "checking if external errno is declared""... $ac_c" 1>&6
-echo "configure:10052: checking if external errno is declared" >&5
+echo "configure:10201: checking if external errno is declared" >&5
 if eval "test \"`echo '$''{'cf_cv_dcl_errno'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 10058 "configure"
+#line 10207 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_STDLIB_H
@@ -10067,7 +10216,7 @@ int main() {
 long x = (long) errno
 ; return 0; }
 EOF
-if { (eval echo configure:10071: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10220: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval 'cf_cv_dcl_'errno'=yes'
 else
@@ -10098,13 +10247,13 @@ fi
 # It's possible (for near-UNIX clones) that the data doesn't exist
 
 echo $ac_n "checking if external errno exists""... $ac_c" 1>&6
-echo "configure:10102: checking if external errno exists" >&5
+echo "configure:10251: checking if external errno exists" >&5
 if eval "test \"`echo '$''{'cf_cv_have_errno'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 10108 "configure"
+#line 10257 "configure"
 #include "confdefs.h"
 
 #undef errno
@@ -10114,7 +10263,7 @@ int main() {
 errno = 2
 ; return 0; }
 EOF
-if { (eval echo configure:10118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval 'cf_cv_have_'errno'=yes'
 else
@@ -10146,21 +10295,21 @@ fi
 
 
 echo $ac_n "checking if we can set errno""... $ac_c" 1>&6
-echo "configure:10150: checking if we can set errno" >&5
+echo "configure:10299: checking if we can set errno" >&5
 if eval "test \"`echo '$''{'cf_cv_set_errno'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 if test "$cross_compiling" = yes; then
   cat > conftest.$ac_ext <<EOF
-#line 10157 "configure"
+#line 10306 "configure"
 #include "confdefs.h"
 #include <errno.h>
 int main() {
 errno = 255
 ; return 0; }
 EOF
-if { (eval echo configure:10164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_set_errno=maybe
 else
@@ -10172,7 +10321,7 @@ fi
 rm -f conftest*
 else
   cat > conftest.$ac_ext <<EOF
-#line 10176 "configure"
+#line 10325 "configure"
 #include "confdefs.h"
 
 #include <errno.h>
@@ -10182,7 +10331,7 @@ int main()
 	exit(errno != 255);
 }
 EOF
-if { (eval echo configure:10186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cf_cv_set_errno=yes
 else
@@ -10205,20 +10354,20 @@ EOF
 
 
 echo $ac_n "checking for setlocale()""... $ac_c" 1>&6
-echo "configure:10209: checking for setlocale()" >&5
+echo "configure:10358: checking for setlocale()" >&5
 if eval "test \"`echo '$''{'cf_cv_locale'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 10215 "configure"
+#line 10364 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 setlocale(LC_ALL, "")
 ; return 0; }
 EOF
-if { (eval echo configure:10222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_locale=yes
 else
@@ -10239,13 +10388,13 @@ EOF
 
 
 echo $ac_n "checking if NGROUPS is defined""... $ac_c" 1>&6
-echo "configure:10243: checking if NGROUPS is defined" >&5
+echo "configure:10392: checking if NGROUPS is defined" >&5
 if eval "test \"`echo '$''{'cf_cv_ngroups'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 10249 "configure"
+#line 10398 "configure"
 #include "confdefs.h"
 
 #if HAVE_SYS_PARAM_H
@@ -10259,7 +10408,7 @@ int main() {
 int x = NGROUPS
 ; return 0; }
 EOF
-if { (eval echo configure:10263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10412: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ngroups=yes
 else
@@ -10267,7 +10416,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 10271 "configure"
+#line 10420 "configure"
 #include "confdefs.h"
 
 #if HAVE_SYS_PARAM_H
@@ -10281,7 +10430,7 @@ int main() {
 int x = NGROUPS_MAX
 ; return 0; }
 EOF
-if { (eval echo configure:10285: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10434: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ngroups=NGROUPS_MAX
 else
@@ -10315,13 +10464,13 @@ for cf_name in sys_nerr sys_errlist
 do
     
 echo $ac_n "checking if external $cf_name is declared""... $ac_c" 1>&6
-echo "configure:10319: checking if external $cf_name is declared" >&5
+echo "configure:10468: checking if external $cf_name is declared" >&5
 if eval "test \"`echo '$''{'cf_cv_dcl_$cf_name'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 10325 "configure"
+#line 10474 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_STDLIB_H
@@ -10334,7 +10483,7 @@ int main() {
 long x = (long) $cf_name
 ; return 0; }
 EOF
-if { (eval echo configure:10338: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10487: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval 'cf_cv_dcl_'$cf_name'=yes'
 else
@@ -10365,13 +10514,13 @@ fi
 # It's possible (for near-UNIX clones) that the data doesn't exist
 
 echo $ac_n "checking if external $cf_name exists""... $ac_c" 1>&6
-echo "configure:10369: checking if external $cf_name exists" >&5
+echo "configure:10518: checking if external $cf_name exists" >&5
 if eval "test \"`echo '$''{'cf_cv_have_$cf_name'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 10375 "configure"
+#line 10524 "configure"
 #include "confdefs.h"
 
 #undef $cf_name
@@ -10381,7 +10530,7 @@ int main() {
 $cf_name = 2
 ; return 0; }
 EOF
-if { (eval echo configure:10385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval 'cf_cv_have_'$cf_name'=yes'
 else
@@ -10417,17 +10566,17 @@ for ac_hdr in lastlog.h paths.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:10421: checking for $ac_hdr" >&5
+echo "configure:10570: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10426 "configure"
+#line 10575 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10431: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10580: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10454,13 +10603,13 @@ fi
 done
 
 echo $ac_n "checking for lastlog path""... $ac_c" 1>&6
-echo "configure:10458: checking for lastlog path" >&5
+echo "configure:10607: checking for lastlog path" >&5
 if eval "test \"`echo '$''{'cf_cv_path_lastlog'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 10464 "configure"
+#line 10613 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10475,7 +10624,7 @@ int main() {
 char *path = _PATH_LASTLOG
 ; return 0; }
 EOF
-if { (eval echo configure:10479: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10628: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_path_lastlog="_PATH_LASTLOG"
 else
@@ -10502,7 +10651,7 @@ EOF
 
 
 echo $ac_n "checking for utmp implementation""... $ac_c" 1>&6
-echo "configure:10506: checking for utmp implementation" >&5
+echo "configure:10655: checking for utmp implementation" >&5
 if eval "test \"`echo '$''{'cf_cv_have_utmp'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -10510,7 +10659,7 @@ else
 	cf_cv_have_utmp=no
 for cf_header in utmpx utmp ; do
 	cat > conftest.$ac_ext <<EOF
-#line 10514 "configure"
+#line 10663 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10526,7 +10675,7 @@ struct $cf_header x;
 	
 ; return 0; }
 EOF
-if { (eval echo configure:10530: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10679: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_have_utmp=$cf_header
 	 break
@@ -10536,7 +10685,7 @@ else
   rm -rf conftest*
   
 	cat > conftest.$ac_ext <<EOF
-#line 10540 "configure"
+#line 10689 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10552,7 +10701,7 @@ struct $cf_header x;
 	
 ; return 0; }
 EOF
-if { (eval echo configure:10556: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10705: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_have_utmp=$cf_header
 	 cat >> confdefs.h <<\EOF
@@ -10587,13 +10736,13 @@ EOF
 
 if test $cf_cv_have_utmp != no ; then
 echo $ac_n "checking if utmp.ut_host is declared""... $ac_c" 1>&6
-echo "configure:10591: checking if utmp.ut_host is declared" >&5
+echo "configure:10740: checking if utmp.ut_host is declared" >&5
 if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_host'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 10597 "configure"
+#line 10746 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10602,7 +10751,7 @@ int main() {
 struct $cf_cv_have_utmp x; char *y = &x.ut_host[0]
 ; return 0; }
 EOF
-if { (eval echo configure:10606: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10755: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_have_utmp_ut_host=yes
 else
@@ -10626,7 +10775,7 @@ fi
 
 if test $cf_cv_have_utmp != no ; then
 echo $ac_n "checking for exit-status in $cf_cv_have_utmp""... $ac_c" 1>&6
-echo "configure:10630: checking for exit-status in $cf_cv_have_utmp" >&5
+echo "configure:10779: checking for exit-status in $cf_cv_have_utmp" >&5
 if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_xstatus'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -10638,7 +10787,7 @@ for cf_result in \
 	ut_exit.ut_exit
 do
 cat > conftest.$ac_ext <<EOF
-#line 10642 "configure"
+#line 10791 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10647,7 +10796,7 @@ int main() {
 struct $cf_cv_have_utmp x; long y = x.$cf_result = 0
 ; return 0; }
 EOF
-if { (eval echo configure:10651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_have_utmp_ut_xstatus=$cf_result
 	 break
@@ -10679,13 +10828,13 @@ fi
 
 if test $cf_cv_have_utmp != no ; then
 echo $ac_n "checking if utmp.ut_xtime is declared""... $ac_c" 1>&6
-echo "configure:10683: checking if utmp.ut_xtime is declared" >&5
+echo "configure:10832: checking if utmp.ut_xtime is declared" >&5
 if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_xtime'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 10689 "configure"
+#line 10838 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10694,7 +10843,7 @@ int main() {
 struct $cf_cv_have_utmp x; long y = x.ut_xtime = 0
 ; return 0; }
 EOF
-if { (eval echo configure:10698: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10847: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_have_utmp_ut_xtime=yes
 else
@@ -10702,7 +10851,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 10706 "configure"
+#line 10855 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10711,7 +10860,7 @@ int main() {
 struct $cf_cv_have_utmp x; long y = x.ut_tv.tv_sec
 ; return 0; }
 EOF
-if { (eval echo configure:10715: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10864: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_have_utmp_ut_xtime=define
 else
@@ -10746,13 +10895,13 @@ fi
 
 if test $cf_cv_have_utmp != no ; then
 echo $ac_n "checking if utmp.ut_session is declared""... $ac_c" 1>&6
-echo "configure:10750: checking if utmp.ut_session is declared" >&5
+echo "configure:10899: checking if utmp.ut_session is declared" >&5
 if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_session'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 10756 "configure"
+#line 10905 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10761,7 +10910,7 @@ int main() {
 struct $cf_cv_have_utmp x; long y = x.ut_session
 ; return 0; }
 EOF
-if { (eval echo configure:10765: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10914: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_have_utmp_ut_session=yes
 else
@@ -10786,14 +10935,14 @@ fi
 	
 
 echo $ac_n "checking if $cf_cv_have_utmp is SYSV flavor""... $ac_c" 1>&6
-echo "configure:10790: checking if $cf_cv_have_utmp is SYSV flavor" >&5
+echo "configure:10939: checking if $cf_cv_have_utmp is SYSV flavor" >&5
 if eval "test \"`echo '$''{'cf_cv_sysv_utmp'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 test "$cf_cv_have_utmp" = "utmp" && cf_prefix="ut" || cf_prefix="utx"
 cat > conftest.$ac_ext <<EOF
-#line 10797 "configure"
+#line 10946 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10807,7 +10956,7 @@ struct $cf_cv_have_utmp x;
 	end${cf_prefix}ent();
 ; return 0; }
 EOF
-if { (eval echo configure:10811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_sysv_utmp=yes
 else
@@ -10830,13 +10979,13 @@ fi
 
 
 echo $ac_n "checking if external h_errno exists""... $ac_c" 1>&6
-echo "configure:10834: checking if external h_errno exists" >&5
+echo "configure:10983: checking if external h_errno exists" >&5
 if eval "test \"`echo '$''{'cf_cv_have_h_errno'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 10840 "configure"
+#line 10989 "configure"
 #include "confdefs.h"
 
 #undef h_errno
@@ -10846,7 +10995,7 @@ int main() {
 h_errno = 2
 ; return 0; }
 EOF
-if { (eval echo configure:10850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval 'cf_cv_have_'h_errno'=yes'
 else
@@ -10876,13 +11025,13 @@ fi
 
 
 echo $ac_n "checking if character set is EBCDIC""... $ac_c" 1>&6
-echo "configure:10880: checking if character set is EBCDIC" >&5
+echo "configure:11029: checking if character set is EBCDIC" >&5
 if eval "test \"`echo '$''{'cf_cv_ebcdic'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 10886 "configure"
+#line 11035 "configure"
 #include "confdefs.h"
  
 int main() {
@@ -10895,7 +11044,7 @@ make an error "Character set is not EBCDIC"
 #endif 
 ; return 0; }
 EOF
-if { (eval echo configure:10899: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
    # TryCompile action if true
 cf_cv_ebcdic=yes 
@@ -10929,7 +11078,7 @@ esac
 if test $cf_cv_screen != slang ; then
 	
 echo $ac_n "checking if curses supports alternate-character set""... $ac_c" 1>&6
-echo "configure:10933: checking if curses supports alternate-character set" >&5
+echo "configure:11082: checking if curses supports alternate-character set" >&5
 if eval "test \"`echo '$''{'cf_cv_alt_char_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -10937,7 +11086,7 @@ else
 for mapname in acs_map _acs_map
 do
 	cat > conftest.$ac_ext <<EOF
-#line 10941 "configure"
+#line 11090 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -10946,7 +11095,7 @@ int main() {
 chtype x = $mapname['l']; $mapname['m'] = 0
 ; return 0; }
 EOF
-if { (eval echo configure:10950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11099: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_alt_char_set=$mapname
 	 break
@@ -10969,13 +11118,13 @@ EOF
 
 	
 echo $ac_n "checking if curses supports fancy attributes""... $ac_c" 1>&6
-echo "configure:10973: checking if curses supports fancy attributes" >&5
+echo "configure:11122: checking if curses supports fancy attributes" >&5
 if eval "test \"`echo '$''{'cf_cv_fancy_curses'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 10979 "configure"
+#line 11128 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -10988,7 +11137,7 @@ attrset(A_UNDERLINE|A_BOLD|A_REVERSE);
 	
 ; return 0; }
 EOF
-if { (eval echo configure:10992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_fancy_curses=yes
 else
@@ -11011,13 +11160,13 @@ EOF
 
 if test "$cf_cv_ncurses_version" != no ; then
 echo $ac_n "checking for obsolete/broken version of ncurses""... $ac_c" 1>&6
-echo "configure:11015: checking for obsolete/broken version of ncurses" >&5
+echo "configure:11164: checking for obsolete/broken version of ncurses" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_broken'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 11021 "configure"
+#line 11170 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -11031,7 +11180,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:11035: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11184: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ncurses_broken=no
 else
@@ -11056,13 +11205,13 @@ fi
 
 	
 echo $ac_n "checking if curses supports color attributes""... $ac_c" 1>&6
-echo "configure:11060: checking if curses supports color attributes" >&5
+echo "configure:11209: checking if curses supports color attributes" >&5
 if eval "test \"`echo '$''{'cf_cv_color_curses'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 11066 "configure"
+#line 11215 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -11077,7 +11226,7 @@ chtype x = COLOR_BLUE;
 	
 ; return 0; }
 EOF
-if { (eval echo configure:11081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_color_curses=yes
 else
@@ -11111,17 +11260,17 @@ unistd.h \
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11115: checking for $ac_hdr" >&5
+echo "configure:11264: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 11120 "configure"
+#line 11269 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11125: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11274: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11152,17 +11301,17 @@ if test "$ISC" = yes ; then
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11156: checking for $ac_hdr" >&5
+echo "configure:11305: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 11161 "configure"
+#line 11310 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11166: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11315: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11197,16 +11346,16 @@ if test "$ac_cv_header_termios_h" = yes ; then
 	esac
 	if test "$termios_bad" = maybe ; then
 	echo $ac_n "checking whether termios.h needs _POSIX_SOURCE""... $ac_c" 1>&6
-echo "configure:11201: checking whether termios.h needs _POSIX_SOURCE" >&5
+echo "configure:11350: checking whether termios.h needs _POSIX_SOURCE" >&5
 	cat > conftest.$ac_ext <<EOF
-#line 11203 "configure"
+#line 11352 "configure"
 #include "confdefs.h"
 #include <termios.h>
 int main() {
 struct termios foo; int x = foo.c_iflag
 ; return 0; }
 EOF
-if { (eval echo configure:11210: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11359: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   termios_bad=no
 else
@@ -11215,7 +11364,7 @@ else
   rm -rf conftest*
   
 		cat > conftest.$ac_ext <<EOF
-#line 11219 "configure"
+#line 11368 "configure"
 #include "confdefs.h"
 
 #define _POSIX_SOURCE
@@ -11224,7 +11373,7 @@ int main() {
 struct termios foo; int x = foo.c_iflag
 ; return 0; }
 EOF
-if { (eval echo configure:11228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11377: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   termios_bad=unknown
 else
@@ -11247,7 +11396,7 @@ fi
 
 
 echo $ac_n "checking declaration of size-change""... $ac_c" 1>&6
-echo "configure:11251: checking declaration of size-change" >&5
+echo "configure:11400: checking declaration of size-change" >&5
 if eval "test \"`echo '$''{'cf_cv_sizechange'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -11261,7 +11410,7 @@ do
     CFLAGS="$cf_save_CFLAGS"
     test -n "$cf_opts" && CFLAGS="$CFLAGS -D$cf_opts"
     cat > conftest.$ac_ext <<EOF
-#line 11265 "configure"
+#line 11414 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #ifdef HAVE_TERMIOS_H
@@ -11300,7 +11449,7 @@ int main() {
 	
 ; return 0; }
 EOF
-if { (eval echo configure:11304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11453: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_sizechange=yes
 else
@@ -11339,20 +11488,20 @@ fi
 
 	
 echo $ac_n "checking if ttytype is declared in curses library""... $ac_c" 1>&6
-echo "configure:11343: checking if ttytype is declared in curses library" >&5
+echo "configure:11492: checking if ttytype is declared in curses library" >&5
 if eval "test \"`echo '$''{'cf_cv_have_ttytype'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 11349 "configure"
+#line 11498 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 char *x = &ttytype[1]; *x = 1
 ; return 0; }
 EOF
-if { (eval echo configure:11356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_have_ttytype=yes
 else
@@ -11373,13 +11522,13 @@ EOF
 
 	
 echo $ac_n "checking if we must define _XOPEN_SOURCE_EXTENDED""... $ac_c" 1>&6
-echo "configure:11377: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
+echo "configure:11526: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
 if eval "test \"`echo '$''{'cf_cv_need_xopen_extension'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 11383 "configure"
+#line 11532 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -11389,7 +11538,7 @@ int main() {
 	long x = winnstr(stdscr, "", 0)
 ; return 0; }
 EOF
-if { (eval echo configure:11393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_need_xopen_extension=no
 else
@@ -11397,7 +11546,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 11401 "configure"
+#line 11550 "configure"
 #include "confdefs.h"
 
 #define _XOPEN_SOURCE_EXTENDED
@@ -11408,7 +11557,7 @@ int main() {
 	long x = winnstr(stdscr, "", 0)
 ; return 0; }
 EOF
-if { (eval echo configure:11412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_need_xopen_extension=yes
 else
@@ -11447,9 +11596,9 @@ do
 cf_tr_func=`echo "$cf_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
 
 	echo $ac_n "checking for ${cf_func}""... $ac_c" 1>&6
-echo "configure:11451: checking for ${cf_func}" >&5
+echo "configure:11600: checking for ${cf_func}" >&5
 	
-echo "(line 11453) testing ${cf_func} ..." 1>&5
+echo "(line 11602) testing ${cf_func} ..." 1>&5
 
 	if eval "test \"`echo '$''{'cf_cv_func_$cf_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -11458,7 +11607,7 @@ else
 		eval cf_result='$ac_cv_func_'$cf_func
 		if test ".$cf_result" != ".no"; then
 			cat > conftest.$ac_ext <<EOF
-#line 11462 "configure"
+#line 11611 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_XCURSES
@@ -11478,7 +11627,7 @@ long foo = (long)(&${cf_func});
 			
 ; return 0; }
 EOF
-if { (eval echo configure:11482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -11510,7 +11659,7 @@ fi
 
 
 echo $ac_n "checking if configuration info should be browsable""... $ac_c" 1>&6
-echo "configure:11514: checking if configuration info should be browsable" >&5
+echo "configure:11663: checking if configuration info should be browsable" >&5
 
 # Check whether --enable-config-info or --disable-config-info was given.
 if test "${enable_config_info+set}" = set; then
@@ -11534,7 +11683,7 @@ EOF
 
 
 echo $ac_n "checking if new-style forms-based options screen should be used""... $ac_c" 1>&6
-echo "configure:11538: checking if new-style forms-based options screen should be used" >&5
+echo "configure:11687: checking if new-style forms-based options screen should be used" >&5
 
 # Check whether --enable-forms-options or --disable-forms-options was given.
 if test "${enable_forms_options+set}" = set; then
@@ -11558,7 +11707,7 @@ EOF
 
 
 echo $ac_n "checking if old-style options menu should be used""... $ac_c" 1>&6
-echo "configure:11562: checking if old-style options menu should be used" >&5
+echo "configure:11711: checking if old-style options menu should be used" >&5
 
 # Check whether --enable-menu-options or --disable-menu-options was given.
 if test "${enable_menu_options+set}" = set; then
@@ -11582,7 +11731,7 @@ EOF
 
 
 echo $ac_n "checking if experimental address-list page should be used""... $ac_c" 1>&6
-echo "configure:11586: checking if experimental address-list page should be used" >&5
+echo "configure:11735: checking if experimental address-list page should be used" >&5
 
 # Check whether --enable-addrlist-page or --disable-addrlist-page was given.
 if test "${enable_addrlist_page+set}" = set; then
@@ -11606,7 +11755,7 @@ EOF
 
 
 echo $ac_n "checking if experimental charset-selection logic should be used""... $ac_c" 1>&6
-echo "configure:11610: checking if experimental charset-selection logic should be used" >&5
+echo "configure:11759: checking if experimental charset-selection logic should be used" >&5
 
 # Check whether --enable-charset-choice or --disable-charset-choice was given.
 if test "${enable_charset_choice+set}" = set; then
@@ -11630,7 +11779,7 @@ EOF
 
 
 echo $ac_n "checking if experimental CJK logic should be used""... $ac_c" 1>&6
-echo "configure:11634: checking if experimental CJK logic should be used" >&5
+echo "configure:11783: checking if experimental CJK logic should be used" >&5
 
 # Check whether --enable-cjk or --disable-cjk was given.
 if test "${enable_cjk+set}" = set; then
@@ -11654,7 +11803,7 @@ EOF
 
 
 echo $ac_n "checking if color-style code should be used""... $ac_c" 1>&6
-echo "configure:11658: checking if color-style code should be used" >&5
+echo "configure:11807: checking if color-style code should be used" >&5
 
 # Check whether --enable-color-style or --disable-color-style was given.
 if test "${enable_color_style+set}" = set; then
@@ -11702,7 +11851,7 @@ EOF
 	echo "$ac_t""yes" 1>&6
 
 	echo $ac_n "checking for location of style-sheet file""... $ac_c" 1>&6
-echo "configure:11706: checking for location of style-sheet file" >&5
+echo "configure:11855: checking for location of style-sheet file" >&5
 	LYNX_LSS_FILE=$cf_libdir/lynx.lss
 	cat >> confdefs.h <<EOF
 #define LYNX_LSS_FILE "$LYNX_LSS_FILE"
@@ -11720,7 +11869,7 @@ test ".$cf_cv_func_use_default_colors" = ".yes" && use_dft_colors=maybe
 
 if test "$use_dft_colors" != no ; then
 echo $ac_n "checking if you want to use default-colors""... $ac_c" 1>&6
-echo "configure:11724: checking if you want to use default-colors" >&5
+echo "configure:11873: checking if you want to use default-colors" >&5
 
 # Check whether --enable-default-colors or --disable-default-colors was given.
 if test "${enable_default_colors+set}" = set; then
@@ -11745,7 +11894,7 @@ EOF
 fi
 
 echo $ac_n "checking if experimental file-upload logic should be used""... $ac_c" 1>&6
-echo "configure:11749: checking if experimental file-upload logic should be used" >&5
+echo "configure:11898: checking if experimental file-upload logic should be used" >&5
 
 # Check whether --enable-file-upload or --disable-file-upload was given.
 if test "${enable_file_upload+set}" = set; then
@@ -11769,7 +11918,7 @@ EOF
 
 
 echo $ac_n "checking if experimental htmlized lynx.cfg should be built""... $ac_c" 1>&6
-echo "configure:11773: checking if experimental htmlized lynx.cfg should be built" >&5
+echo "configure:11922: checking if experimental htmlized lynx.cfg should be built" >&5
 
 # Check whether --enable-htmlized-cfg or --disable-htmlized-cfg was given.
 if test "${enable_htmlized_cfg+set}" = set; then
@@ -11799,7 +11948,7 @@ fi
 
 ### check for ipv6 support
 echo $ac_n "checking whether to enable ipv6""... $ac_c" 1>&6
-echo "configure:11803: checking whether to enable ipv6" >&5
+echo "configure:11952: checking whether to enable ipv6" >&5
 
 # Check whether --enable-ipv6 or --disable-ipv6 was given.
 if test "${enable_ipv6+set}" = set; then
@@ -11820,7 +11969,7 @@ if test "$enableval" = "yes"; then
 	
 
 echo $ac_n "checking ipv6 stack type""... $ac_c" 1>&6
-echo "configure:11824: checking ipv6 stack type" >&5
+echo "configure:11973: checking ipv6 stack type" >&5
 if eval "test \"`echo '$''{'cf_cv_ipv6type'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -11840,7 +11989,7 @@ do
 		;;
 	inria) #(vi
 				cat > conftest.$ac_ext <<EOF
-#line 11844 "configure"
+#line 11993 "configure"
 #include "confdefs.h"
 dnl
 #include <netinet/in.h>
@@ -11858,7 +12007,7 @@ rm -f conftest*
 		;;
 	kame) #(vi
 				cat > conftest.$ac_ext <<EOF
-#line 11862 "configure"
+#line 12011 "configure"
 #include "confdefs.h"
 dnl
 #include <netinet/in.h>
@@ -11876,7 +12025,7 @@ rm -f conftest*
 		;;
 	linux-glibc) #(vi
 				cat > conftest.$ac_ext <<EOF
-#line 11880 "configure"
+#line 12029 "configure"
 #include "confdefs.h"
 dnl
 #include <features.h>
@@ -11903,7 +12052,7 @@ rm -f conftest*
 		;;
 	toshiba) #(vi
 		cat > conftest.$ac_ext <<EOF
-#line 11907 "configure"
+#line 12056 "configure"
 #include "confdefs.h"
 dnl
 #include <sys/param.h>
@@ -11921,7 +12070,7 @@ rm -f conftest*
 		;;
 	v6d) #(vi
 		cat > conftest.$ac_ext <<EOF
-#line 11925 "configure"
+#line 12074 "configure"
 #include "confdefs.h"
 dnl
 #include </usr/local/v6/include/sys/v6config.h>
@@ -11939,7 +12088,7 @@ rm -f conftest*
 		;;
 	zeta)
 		cat > conftest.$ac_ext <<EOF
-#line 11943 "configure"
+#line 12092 "configure"
 #include "confdefs.h"
 dnl
 #include <sys/param.h>
@@ -11972,7 +12121,7 @@ cf_ipv6lib=none
 cf_ipv6dir=none
 
 echo $ac_n "checking for ipv6 library if required""... $ac_c" 1>&6
-echo "configure:11976: checking for ipv6 library if required" >&5
+echo "configure:12125: checking for ipv6 library if required" >&5
 case $cf_cv_ipv6type in #(vi
 solaris) #(vi
 	;;
@@ -12006,7 +12155,7 @@ echo "$ac_t""$cf_ipv6lib" 1>&6
 if test "$cf_ipv6lib" != "none"; then
 
 	cat > conftest.$ac_ext <<EOF
-#line 12010 "configure"
+#line 12159 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -12017,7 +12166,7 @@ int main() {
 getaddrinfo(0, 0, 0, 0)
 ; return 0; }
 EOF
-if { (eval echo configure:12021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -12070,12 +12219,12 @@ rm -f conftest*
 	eval 'cf_cv_have_lib_'$cf_ipv6lib'=no'
 	cf_libdir=""
 	echo $ac_n "checking for getaddrinfo""... $ac_c" 1>&6
-echo "configure:12074: checking for getaddrinfo" >&5
+echo "configure:12223: checking for getaddrinfo" >&5
 if eval "test \"`echo '$''{'ac_cv_func_getaddrinfo'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 12079 "configure"
+#line 12228 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char getaddrinfo(); below.  */
@@ -12098,7 +12247,7 @@ getaddrinfo();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_getaddrinfo=yes"
 else
@@ -12118,10 +12267,10 @@ else
 
 		cf_save_LIBS="$LIBS"
 		echo $ac_n "checking for getaddrinfo in -l$cf_ipv6lib""... $ac_c" 1>&6
-echo "configure:12122: checking for getaddrinfo in -l$cf_ipv6lib" >&5
+echo "configure:12271: checking for getaddrinfo in -l$cf_ipv6lib" >&5
 		LIBS="-l$cf_ipv6lib $LIBS"
 		cat > conftest.$ac_ext <<EOF
-#line 12125 "configure"
+#line 12274 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -12132,7 +12281,7 @@ int main() {
 getaddrinfo(0, 0, 0, 0)
 ; return 0; }
 EOF
-if { (eval echo configure:12136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 eval 'cf_cv_have_lib_'$cf_ipv6lib'=yes'
@@ -12176,10 +12325,10 @@ cf_search="$cf_search $HOME/lib $HOME/lib/$cf_ipv6dir $HOME/$cf_ipv6dir/lib"
 			for cf_libdir in $cf_search
 			do
 				echo $ac_n "checking for -l$cf_ipv6lib in $cf_libdir""... $ac_c" 1>&6
-echo "configure:12180: checking for -l$cf_ipv6lib in $cf_libdir" >&5
+echo "configure:12329: checking for -l$cf_ipv6lib in $cf_libdir" >&5
 				LIBS="-L$cf_libdir -l$cf_ipv6lib $cf_save_LIBS"
 				cat > conftest.$ac_ext <<EOF
-#line 12183 "configure"
+#line 12332 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -12190,7 +12339,7 @@ int main() {
 getaddrinfo(0, 0, 0, 0)
 ; return 0; }
 EOF
-if { (eval echo configure:12194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 		 eval 'cf_cv_have_lib_'$cf_ipv6lib'=yes'
@@ -12223,7 +12372,7 @@ fi
 
 
 echo $ac_n "checking working getaddrinfo""... $ac_c" 1>&6
-echo "configure:12227: checking working getaddrinfo" >&5
+echo "configure:12376: checking working getaddrinfo" >&5
 if eval "test \"`echo '$''{'cf_cv_getaddrinfo'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12232,7 +12381,7 @@ if test "$cross_compiling" = yes; then
   cf_cv_getaddrinfo=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 12236 "configure"
+#line 12385 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -12311,7 +12460,7 @@ int main()
 }
 
 EOF
-if { (eval echo configure:12315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:12464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cf_cv_getaddrinfo=yes
 else
@@ -12354,7 +12503,7 @@ fi
 fi
 
 echo $ac_n "checking if experimental element-justification logic should be used""... $ac_c" 1>&6
-echo "configure:12358: checking if experimental element-justification logic should be used" >&5
+echo "configure:12507: checking if experimental element-justification logic should be used" >&5
 
 # Check whether --enable-justify-elts or --disable-justify-elts was given.
 if test "${enable_justify_elts+set}" = set; then
@@ -12378,7 +12527,7 @@ EOF
 
 
 echo $ac_n "checking if experimental keyboard-layout logic should be used""... $ac_c" 1>&6
-echo "configure:12382: checking if experimental keyboard-layout logic should be used" >&5
+echo "configure:12531: checking if experimental keyboard-layout logic should be used" >&5
 
 # Check whether --enable-kbd-layout or --disable-kbd-layout was given.
 if test "${enable_kbd_layout+set}" = set; then
@@ -12402,7 +12551,7 @@ EOF
 
 
 echo $ac_n "checking if experimental JavaScript support should be used""... $ac_c" 1>&6
-echo "configure:12406: checking if experimental JavaScript support should be used" >&5
+echo "configure:12555: checking if experimental JavaScript support should be used" >&5
 
 # Check whether --enable-libjs or --disable-libjs was given.
 if test "${enable_libjs+set}" = set; then
@@ -12426,7 +12575,7 @@ EOF
 
 
 echo $ac_n "checking if html source should be colorized""... $ac_c" 1>&6
-echo "configure:12430: checking if html source should be colorized" >&5
+echo "configure:12579: checking if html source should be colorized" >&5
 
 # Check whether --enable-prettysrc or --disable-prettysrc was given.
 if test "${enable_prettysrc+set}" = set; then
@@ -12450,7 +12599,7 @@ EOF
 
 
 echo $ac_n "checking if read-progress message should show ETA""... $ac_c" 1>&6
-echo "configure:12454: checking if read-progress message should show ETA" >&5
+echo "configure:12603: checking if read-progress message should show ETA" >&5
 
 # Check whether --enable-read-eta or --disable-read-eta was given.
 if test "${enable_read_eta+set}" = set; then
@@ -12474,7 +12623,7 @@ EOF
 
 
 echo $ac_n "checking if scrollbar code should be used""... $ac_c" 1>&6
-echo "configure:12478: checking if scrollbar code should be used" >&5
+echo "configure:12627: checking if scrollbar code should be used" >&5
 
 # Check whether --enable-scrollbar or --disable-scrollbar was given.
 if test "${enable_scrollbar+set}" = set; then
@@ -12505,7 +12654,7 @@ EOF
 fi
 
 echo $ac_n "checking if source caching should be used""... $ac_c" 1>&6
-echo "configure:12509: checking if source caching should be used" >&5
+echo "configure:12658: checking if source caching should be used" >&5
 
 # Check whether --enable-source-cache or --disable-source-cache was given.
 if test "${enable_source_cache+set}" = set; then
@@ -12532,7 +12681,7 @@ EOF
 
 
 echo $ac_n "checking if alternative line-edit bindings should be used""... $ac_c" 1>&6
-echo "configure:12536: checking if alternative line-edit bindings should be used" >&5
+echo "configure:12685: checking if alternative line-edit bindings should be used" >&5
 
 # Check whether --enable-alt-bindings or --disable-alt-bindings was given.
 if test "${enable_alt_bindings+set}" = set; then
@@ -12556,7 +12705,7 @@ EOF
 
 
 echo $ac_n "checking if you want to use extended HTML DTD logic""... $ac_c" 1>&6
-echo "configure:12560: checking if you want to use extended HTML DTD logic" >&5
+echo "configure:12709: checking if you want to use extended HTML DTD logic" >&5
 
 # Check whether --enable-extended-dtd or --disable-extended-dtd was given.
 if test "${enable_extended_dtd+set}" = set; then
@@ -12580,7 +12729,7 @@ EOF
 
 
 echo $ac_n "checking if partial-display should be used""... $ac_c" 1>&6
-echo "configure:12584: checking if partial-display should be used" >&5
+echo "configure:12733: checking if partial-display should be used" >&5
 
 # Check whether --enable-partial or --disable-partial was given.
 if test "${enable_partial+set}" = set; then
@@ -12604,7 +12753,7 @@ EOF
 
 
 echo $ac_n "checking if you want to use external commands""... $ac_c" 1>&6
-echo "configure:12608: checking if you want to use external commands" >&5
+echo "configure:12757: checking if you want to use external commands" >&5
 
 # Check whether --enable-externs or --disable-externs was given.
 if test "${enable_externs+set}" = set; then
@@ -12631,7 +12780,7 @@ EOF
 fi
 
 echo $ac_n "checking if you want to use setfont support""... $ac_c" 1>&6
-echo "configure:12635: checking if you want to use setfont support" >&5
+echo "configure:12784: checking if you want to use setfont support" >&5
 
 # Check whether --enable-font-switch or --disable-font-switch was given.
 if test "${enable_font_switch+set}" = set; then
@@ -12655,7 +12804,7 @@ EOF
 
 
 echo $ac_n "checking if you want cgi-link support""... $ac_c" 1>&6
-echo "configure:12659: checking if you want cgi-link support" >&5
+echo "configure:12808: checking if you want cgi-link support" >&5
 
 # Check whether --enable-cgi-links or --disable-cgi-links was given.
 if test "${enable_cgi_links+set}" = set; then
@@ -12674,7 +12823,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking if you want change-exec support""... $ac_c" 1>&6
-echo "configure:12678: checking if you want change-exec support" >&5
+echo "configure:12827: checking if you want change-exec support" >&5
 
 # Check whether --enable-change-exec or --disable-change-exec was given.
 if test "${enable_change_exec+set}" = set; then
@@ -12698,7 +12847,7 @@ EOF
 
 
 echo $ac_n "checking if you want exec-links support""... $ac_c" 1>&6
-echo "configure:12702: checking if you want exec-links support" >&5
+echo "configure:12851: checking if you want exec-links support" >&5
 
 # Check whether --enable-exec-links or --disable-exec-links was given.
 if test "${enable_exec_links+set}" = set; then
@@ -12722,7 +12871,7 @@ EOF
 
 
 echo $ac_n "checking if you want exec-scripts support""... $ac_c" 1>&6
-echo "configure:12726: checking if you want exec-scripts support" >&5
+echo "configure:12875: checking if you want exec-scripts support" >&5
 
 # Check whether --enable-exec-scripts or --disable-exec-scripts was given.
 if test "${enable_exec_scripts+set}" = set; then
@@ -12746,7 +12895,7 @@ EOF
 
 
 echo $ac_n "checking if you want internal-links feature""... $ac_c" 1>&6
-echo "configure:12750: checking if you want internal-links feature" >&5
+echo "configure:12899: checking if you want internal-links feature" >&5
 
 # Check whether --enable-internal-links or --disable-internal-links was given.
 if test "${enable_internal_links+set}" = set; then
@@ -12770,7 +12919,7 @@ EOF
 
 
 echo $ac_n "checking if you want to fork NSL requests""... $ac_c" 1>&6
-echo "configure:12774: checking if you want to fork NSL requests" >&5
+echo "configure:12923: checking if you want to fork NSL requests" >&5
 
 # Check whether --enable-nsl-fork or --disable-nsl-fork was given.
 if test "${enable_nsl_fork+set}" = set; then
@@ -12794,7 +12943,7 @@ EOF
 
 
 echo $ac_n "checking if you want to log URL requests via syslog""... $ac_c" 1>&6
-echo "configure:12798: checking if you want to log URL requests via syslog" >&5
+echo "configure:12947: checking if you want to log URL requests via syslog" >&5
 
 # Check whether --enable-syslog or --disable-syslog was given.
 if test "${enable_syslog+set}" = set; then
@@ -12818,7 +12967,7 @@ EOF
 
 
 echo $ac_n "checking if persistent-cookie logic should be used""... $ac_c" 1>&6
-echo "configure:12822: checking if persistent-cookie logic should be used" >&5
+echo "configure:12971: checking if persistent-cookie logic should be used" >&5
 
 # Check whether --enable-persistent-cookies or --disable-persistent-cookies was given.
 if test "${enable_persistent_cookies+set}" = set; then
@@ -12842,7 +12991,7 @@ EOF
 
 
 echo $ac_n "checking if you want to underline links""... $ac_c" 1>&6
-echo "configure:12846: checking if you want to underline links" >&5
+echo "configure:12995: checking if you want to underline links" >&5
 
 # Check whether --enable-underlines or --disable-underlines was given.
 if test "${enable_underlines+set}" = set; then
@@ -12866,7 +13015,7 @@ EOF
 
 
 echo $ac_n "checking if help files should be gzip'ed""... $ac_c" 1>&6
-echo "configure:12870: checking if help files should be gzip'ed" >&5
+echo "configure:13019: checking if help files should be gzip'ed" >&5
 
 # Check whether --enable-gzip-help or --disable-gzip-help was given.
 if test "${enable_gzip_help+set}" = set; then
@@ -12895,7 +13044,7 @@ fi
 
 
 echo $ac_n "checking if you want to use zlib for decompression of some gzip files""... $ac_c" 1>&6
-echo "configure:12899: checking if you want to use zlib for decompression of some gzip files" >&5
+echo "configure:13048: checking if you want to use zlib for decompression of some gzip files" >&5
 
 # Check whether --with-zlib or --without-zlib was given.
 if test "${with_zlib+set}" = set; then
@@ -12909,16 +13058,16 @@ echo "$ac_t""$use_zlib" 1>&6
 
 if test ".$use_zlib" != ".no" ; then
 	echo $ac_n "checking if we need to add -I option to get zlib.h""... $ac_c" 1>&6
-echo "configure:12913: checking if we need to add -I option to get zlib.h" >&5
+echo "configure:13062: checking if we need to add -I option to get zlib.h" >&5
 	cat > conftest.$ac_ext <<EOF
-#line 12915 "configure"
+#line 13064 "configure"
 #include "confdefs.h"
 #include <zlib.h>
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:12922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13071: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""no" 1>&6
 else
@@ -12972,12 +13121,12 @@ rm -f conftest*
 	eval 'cf_cv_have_lib_'z'=no'
 	cf_libdir=""
 	echo $ac_n "checking for gzopen""... $ac_c" 1>&6
-echo "configure:12976: checking for gzopen" >&5
+echo "configure:13125: checking for gzopen" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gzopen'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 12981 "configure"
+#line 13130 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gzopen(); below.  */
@@ -13000,7 +13149,7 @@ gzopen();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gzopen=yes"
 else
@@ -13020,17 +13169,17 @@ else
 
 		cf_save_LIBS="$LIBS"
 		echo $ac_n "checking for gzopen in -lz""... $ac_c" 1>&6
-echo "configure:13024: checking for gzopen in -lz" >&5
+echo "configure:13173: checking for gzopen in -lz" >&5
 		LIBS="-lz $LIBS"
 		cat > conftest.$ac_ext <<EOF
-#line 13027 "configure"
+#line 13176 "configure"
 #include "confdefs.h"
 #include <zlib.h>
 int main() {
 gzopen("name","mode")
 ; return 0; }
 EOF
-if { (eval echo configure:13034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 eval 'cf_cv_have_lib_'z'=yes'
@@ -13074,17 +13223,17 @@ cf_search="$cf_search $HOME/lib $HOME/lib/z $HOME/z/lib"
 			for cf_libdir in $cf_search
 			do
 				echo $ac_n "checking for -lz in $cf_libdir""... $ac_c" 1>&6
-echo "configure:13078: checking for -lz in $cf_libdir" >&5
+echo "configure:13227: checking for -lz in $cf_libdir" >&5
 				LIBS="-L$cf_libdir -lz $cf_save_LIBS"
 				cat > conftest.$ac_ext <<EOF
-#line 13081 "configure"
+#line 13230 "configure"
 #include "confdefs.h"
 #include <zlib.h>
 int main() {
 gzopen("name","mode")
 ; return 0; }
 EOF
-if { (eval echo configure:13088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 		 eval 'cf_cv_have_lib_'z'=yes'
@@ -13118,7 +13267,7 @@ EOF
 fi
 
 echo $ac_n "checking if you want to exclude FINGER code""... $ac_c" 1>&6
-echo "configure:13122: checking if you want to exclude FINGER code" >&5
+echo "configure:13271: checking if you want to exclude FINGER code" >&5
 
 # Check whether --enable-finger or --disable-finger was given.
 if test "${enable_finger+set}" = set; then
@@ -13142,7 +13291,7 @@ EOF
 
 
 echo $ac_n "checking if you want to exclude GOPHER code""... $ac_c" 1>&6
-echo "configure:13146: checking if you want to exclude GOPHER code" >&5
+echo "configure:13295: checking if you want to exclude GOPHER code" >&5
 
 # Check whether --enable-gopher or --disable-gopher was given.
 if test "${enable_gopher+set}" = set; then
@@ -13166,7 +13315,7 @@ EOF
 
 
 echo $ac_n "checking if you want to exclude NEWS code""... $ac_c" 1>&6
-echo "configure:13170: checking if you want to exclude NEWS code" >&5
+echo "configure:13319: checking if you want to exclude NEWS code" >&5
 
 # Check whether --enable-news or --disable-news was given.
 if test "${enable_news+set}" = set; then
@@ -13190,7 +13339,7 @@ EOF
 
 
 echo $ac_n "checking if you want to exclude FTP code""... $ac_c" 1>&6
-echo "configure:13194: checking if you want to exclude FTP code" >&5
+echo "configure:13343: checking if you want to exclude FTP code" >&5
 
 # Check whether --enable-ftp or --disable-ftp was given.
 if test "${enable_ftp+set}" = set; then
@@ -13219,7 +13368,7 @@ EOF
 # All DirEd functions that were enabled on compilation can be disabled
 # or modified at run time via DIRED_MENU symbols in lynx.cfg.
 echo $ac_n "checking if directory-editor code should be used""... $ac_c" 1>&6
-echo "configure:13223: checking if directory-editor code should be used" >&5
+echo "configure:13372: checking if directory-editor code should be used" >&5
 
 # Check whether --enable-dired or --disable-dired was given.
 if test "${enable_dired+set}" = set; then
@@ -13246,7 +13395,7 @@ EOF
 
 
 	echo $ac_n "checking if you wish to allow extracting from archives via DirEd""... $ac_c" 1>&6
-echo "configure:13250: checking if you wish to allow extracting from archives via DirEd" >&5
+echo "configure:13399: checking if you wish to allow extracting from archives via DirEd" >&5
 	
 # Check whether --enable-dired-dearchive or --disable-dired-dearchive was given.
 if test "${enable_dired_dearchive+set}" = set; then
@@ -13265,7 +13414,7 @@ fi
 	echo "$ac_t""$enableval" 1>&6
 
 	echo $ac_n "checking if DirEd mode should override keys""... $ac_c" 1>&6
-echo "configure:13269: checking if DirEd mode should override keys" >&5
+echo "configure:13418: checking if DirEd mode should override keys" >&5
 	
 # Check whether --enable-dired-override or --disable-dired-override was given.
 if test "${enable_dired_override+set}" = set; then
@@ -13291,7 +13440,7 @@ fi
 	echo "$ac_t""$enableval" 1>&6
 
 	echo $ac_n "checking if you wish to allow permissions commands via DirEd""... $ac_c" 1>&6
-echo "configure:13295: checking if you wish to allow permissions commands via DirEd" >&5
+echo "configure:13444: checking if you wish to allow permissions commands via DirEd" >&5
 	
 # Check whether --enable-dired-permit or --disable-dired-permit was given.
 if test "${enable_dired_permit+set}" = set; then
@@ -13317,7 +13466,7 @@ fi
 	echo "$ac_t""$enableval" 1>&6
 
 	echo $ac_n "checking if you wish to allow executable-permission commands via DirEd""... $ac_c" 1>&6
-echo "configure:13321: checking if you wish to allow executable-permission commands via DirEd" >&5
+echo "configure:13470: checking if you wish to allow executable-permission commands via DirEd" >&5
 	
 # Check whether --enable-dired-xpermit or --disable-dired-xpermit was given.
 if test "${enable_dired_xpermit+set}" = set; then
@@ -13336,7 +13485,7 @@ fi
 	echo "$ac_t""$enableval" 1>&6
 
 	echo $ac_n "checking if you wish to allow "tar" commands from DirEd""... $ac_c" 1>&6
-echo "configure:13340: checking if you wish to allow "tar" commands from DirEd" >&5
+echo "configure:13489: checking if you wish to allow "tar" commands from DirEd" >&5
 	
 # Check whether --enable-dired-tar or --disable-dired-tar was given.
 if test "${enable_dired_tar+set}" = set; then
@@ -13362,7 +13511,7 @@ fi
 	echo "$ac_t""$enableval" 1>&6
 
 	echo $ac_n "checking if you wish to allow "uudecode" commands from DirEd""... $ac_c" 1>&6
-echo "configure:13366: checking if you wish to allow "uudecode" commands from DirEd" >&5
+echo "configure:13515: checking if you wish to allow "uudecode" commands from DirEd" >&5
 	
 # Check whether --enable-dired-uudecode or --disable-dired-uudecode was given.
 if test "${enable_dired_uudecode+set}" = set; then
@@ -13388,7 +13537,7 @@ fi
 	echo "$ac_t""$enableval" 1>&6
 
 	echo $ac_n "checking if you wish to allow "zip" and "unzip" commands from DirEd""... $ac_c" 1>&6
-echo "configure:13392: checking if you wish to allow "zip" and "unzip" commands from DirEd" >&5
+echo "configure:13541: checking if you wish to allow "zip" and "unzip" commands from DirEd" >&5
 	
 # Check whether --enable-dired-zip or --disable-dired-zip was given.
 if test "${enable_dired_zip+set}" = set; then
@@ -13414,7 +13563,7 @@ fi
 	echo "$ac_t""$enableval" 1>&6
 
 	echo $ac_n "checking if you wish to allow "gzip" and "gunzip" commands from DirEd""... $ac_c" 1>&6
-echo "configure:13418: checking if you wish to allow "gzip" and "gunzip" commands from DirEd" >&5
+echo "configure:13567: checking if you wish to allow "gzip" and "gunzip" commands from DirEd" >&5
 	
 # Check whether --enable-dired-gzip or --disable-dired-gzip was given.
 if test "${enable_dired_gzip+set}" = set; then
@@ -13441,7 +13590,7 @@ fi
 fi
 
 echo $ac_n "checking if you want long-directory listings""... $ac_c" 1>&6
-echo "configure:13445: checking if you want long-directory listings" >&5
+echo "configure:13594: checking if you want long-directory listings" >&5
 
 # Check whether --enable-long-list or --disable-long-list was given.
 if test "${enable_long_list+set}" = set; then
@@ -13467,7 +13616,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking if parent-directory references are permitted""... $ac_c" 1>&6
-echo "configure:13471: checking if parent-directory references are permitted" >&5
+echo "configure:13620: checking if parent-directory references are permitted" >&5
 
 # Check whether --enable-parent-dir-refs or --disable-parent-dir-refs was given.
 if test "${enable_parent_dir_refs+set}" = set; then
@@ -13492,7 +13641,7 @@ if test $cf_cv_screen = pdcurses ; then
 # Uses ac_ vars as temps to allow command line to override cache and checks.
 # --without-x overrides everything else, but does not touch the cache.
 echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:13496: checking for X" >&5
+echo "configure:13645: checking for X" >&5
 
 
 # Check whether --with-x or --without-x was given.
@@ -13555,12 +13704,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 13559 "configure"
+#line 13708 "configure"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13564: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13713: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -13629,14 +13778,14 @@ if test "$ac_x_libraries" = NO; then
   ac_save_LIBS="$LIBS"
   LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13633 "configure"
+#line 13782 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:13640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   LIBS="$ac_save_LIBS"
 # We can link X programs with no special library path.
@@ -13736,7 +13885,7 @@ clix*)
 	# FIXME: modify the library lookup in autoconf to
 	# allow _s.a suffix ahead of .a
 	echo $ac_n "checking for open in -lc_s""... $ac_c" 1>&6
-echo "configure:13740: checking for open in -lc_s" >&5
+echo "configure:13889: checking for open in -lc_s" >&5
 ac_lib_var=`echo c_s'_'open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13744,7 +13893,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc_s  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13748 "configure"
+#line 13897 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13755,7 +13904,7 @@ int main() {
 open()
 ; return 0; }
 EOF
-if { (eval echo configure:13759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13772,7 +13921,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   LIBS="-lc_s $LIBS"
 	echo $ac_n "checking for gethostname in -lbsd""... $ac_c" 1>&6
-echo "configure:13776: checking for gethostname in -lbsd" >&5
+echo "configure:13925: checking for gethostname in -lbsd" >&5
 ac_lib_var=`echo bsd'_'gethostname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13780,7 +13929,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbsd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13784 "configure"
+#line 13933 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13791,7 +13940,7 @@ int main() {
 gethostname()
 ; return 0; }
 EOF
-if { (eval echo configure:13795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13808,7 +13957,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   LIBS="-lbsd $LIBS"
 	echo $ac_n "checking for gethostname in -lnsl_s""... $ac_c" 1>&6
-echo "configure:13812: checking for gethostname in -lnsl_s" >&5
+echo "configure:13961: checking for gethostname in -lnsl_s" >&5
 ac_lib_var=`echo nsl_s'_'gethostname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13816,7 +13965,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl_s  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13820 "configure"
+#line 13969 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13827,7 +13976,7 @@ int main() {
 gethostname()
 ; return 0; }
 EOF
-if { (eval echo configure:13831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13844,7 +13993,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   LIBS="-lnsl_s $LIBS"
 	echo $ac_n "checking for XOpenDisplay in -lX11_s""... $ac_c" 1>&6
-echo "configure:13848: checking for XOpenDisplay in -lX11_s" >&5
+echo "configure:13997: checking for XOpenDisplay in -lX11_s" >&5
 ac_lib_var=`echo X11_s'_'XOpenDisplay | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13852,7 +14001,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lX11_s  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13856 "configure"
+#line 14005 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13863,7 +14012,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:13867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13880,7 +14029,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   LIBS="-lX11_s $LIBS"
 	echo $ac_n "checking for XtAppInitialize in -lXt_s""... $ac_c" 1>&6
-echo "configure:13884: checking for XtAppInitialize in -lXt_s" >&5
+echo "configure:14033: checking for XtAppInitialize in -lXt_s" >&5
 ac_lib_var=`echo Xt_s'_'XtAppInitialize | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13888,7 +14037,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXt_s  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13892 "configure"
+#line 14041 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13899,7 +14048,7 @@ int main() {
 XtAppInitialize()
 ; return 0; }
 EOF
-if { (eval echo configure:13903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13940,7 +14089,7 @@ fi
 	;;
 *)
 	echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:13944: checking for socket in -lsocket" >&5
+echo "configure:14093: checking for socket in -lsocket" >&5
 ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13948,7 +14097,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13952 "configure"
+#line 14101 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13959,7 +14108,7 @@ int main() {
 socket()
 ; return 0; }
 EOF
-if { (eval echo configure:13963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14112: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13987,7 +14136,7 @@ else
 fi
 
 	echo $ac_n "checking for gethostname in -lnsl""... $ac_c" 1>&6
-echo "configure:13991: checking for gethostname in -lnsl" >&5
+echo "configure:14140: checking for gethostname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -13995,7 +14144,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 13999 "configure"
+#line 14148 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14006,7 +14155,7 @@ int main() {
 gethostname()
 ; return 0; }
 EOF
-if { (eval echo configure:14010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14057,17 +14206,17 @@ else
     case "`(uname -sr) 2>/dev/null`" in
     "SunOS 5"*)
       echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:14061: checking whether -R must be followed by a space" >&5
+echo "configure:14210: checking whether -R must be followed by a space" >&5
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
-#line 14064 "configure"
+#line 14213 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:14071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -14083,14 +14232,14 @@ rm -f conftest*
       else
 	LIBS="$ac_xsave_LIBS -R $x_libraries"
 	cat > conftest.$ac_ext <<EOF
-#line 14087 "configure"
+#line 14236 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:14094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -14122,7 +14271,7 @@ rm -f conftest*
     # libraries were built with DECnet support.  And karl@cs.umb.edu says
     # the Alpha needs dnet_stub (dnet does not exist).
     echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:14126: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:14275: checking for dnet_ntoa in -ldnet" >&5
 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14130,7 +14279,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14134 "configure"
+#line 14283 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14141,7 +14290,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:14145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14163,7 +14312,7 @@ fi
 
     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
       echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:14167: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:14316: checking for dnet_ntoa in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14171,7 +14320,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14175 "configure"
+#line 14324 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14182,7 +14331,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:14186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14211,12 +14360,12 @@ fi
     # The nsl library prevents programs from opening the X display
     # on Irix 5.2, according to dickey@clark.net.
     echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:14215: checking for gethostbyname" >&5
+echo "configure:14364: checking for gethostbyname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14220 "configure"
+#line 14369 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -14239,7 +14388,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -14260,7 +14409,7 @@ fi
 
     if test $ac_cv_func_gethostbyname = no; then
       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:14264: checking for gethostbyname in -lnsl" >&5
+echo "configure:14413: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14268,7 +14417,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14272 "configure"
+#line 14421 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14279,7 +14428,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:14283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14309,12 +14458,12 @@ fi
     # -lsocket must be given before -lnsl if both are needed.
     # We assume that if connect needs -lnsl, so does gethostbyname.
     echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:14313: checking for connect" >&5
+echo "configure:14462: checking for connect" >&5
 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14318 "configure"
+#line 14467 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -14337,7 +14486,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14490: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -14358,7 +14507,7 @@ fi
 
     if test $ac_cv_func_connect = no; then
       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:14362: checking for connect in -lsocket" >&5
+echo "configure:14511: checking for connect in -lsocket" >&5
 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14366,7 +14515,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14370 "configure"
+#line 14519 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14377,7 +14526,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:14381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14530: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14401,12 +14550,12 @@ fi
 
     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:14405: checking for remove" >&5
+echo "configure:14554: checking for remove" >&5
 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14410 "configure"
+#line 14559 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -14429,7 +14578,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
@@ -14450,7 +14599,7 @@ fi
 
     if test $ac_cv_func_remove = no; then
       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:14454: checking for remove in -lposix" >&5
+echo "configure:14603: checking for remove in -lposix" >&5
 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14458,7 +14607,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14462 "configure"
+#line 14611 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14469,7 +14618,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:14473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14493,12 +14642,12 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:14497: checking for shmat" >&5
+echo "configure:14646: checking for shmat" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14502 "configure"
+#line 14651 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -14521,7 +14670,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
@@ -14542,7 +14691,7 @@ fi
 
     if test $ac_cv_func_shmat = no; then
       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:14546: checking for shmat in -lipc" >&5
+echo "configure:14695: checking for shmat in -lipc" >&5
 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14550,7 +14699,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lipc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14554 "configure"
+#line 14703 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14561,7 +14710,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:14565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14594,7 +14743,7 @@ fi
   # libraries we check for below, so use a different variable.
   #  --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
   echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
-echo "configure:14598: checking for IceConnectionNumber in -lICE" >&5
+echo "configure:14747: checking for IceConnectionNumber in -lICE" >&5
 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14602,7 +14751,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lICE $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14606 "configure"
+#line 14755 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14613,7 +14762,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:14617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14640,7 +14789,7 @@ fi
 	LDFLAGS="$LDFLAGS $X_LIBS"
 	CFLAGS="$CFLAGS $X_CFLAGS"
 	echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:14644: checking for XOpenDisplay in -lX11" >&5
+echo "configure:14793: checking for XOpenDisplay in -lX11" >&5
 ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14648,7 +14797,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14652 "configure"
+#line 14801 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14659,7 +14808,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:14663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14812: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14680,7 +14829,7 @@ else
 fi
 
 	echo $ac_n "checking for XtAppInitialize in -lXt""... $ac_c" 1>&6
-echo "configure:14684: checking for XtAppInitialize in -lXt" >&5
+echo "configure:14833: checking for XtAppInitialize in -lXt" >&5
 ac_lib_var=`echo Xt'_'XtAppInitialize | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14688,7 +14837,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14692 "configure"
+#line 14841 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14699,7 +14848,7 @@ int main() {
 XtAppInitialize()
 ; return 0; }
 EOF
-if { (eval echo configure:14703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14756,7 +14905,7 @@ fi
 
 
 echo $ac_n "checking for XextCreateExtension in -lXext""... $ac_c" 1>&6
-echo "configure:14760: checking for XextCreateExtension in -lXext" >&5
+echo "configure:14909: checking for XextCreateExtension in -lXext" >&5
 ac_lib_var=`echo Xext'_'XextCreateExtension | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14764,7 +14913,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXext  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14768 "configure"
+#line 14917 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14775,7 +14924,7 @@ int main() {
 XextCreateExtension()
 ; return 0; }
 EOF
-if { (eval echo configure:14779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14812,13 +14961,13 @@ do
 		if test $cf_path != default ; then
 			CFLAGS="-I$cf_path/include $cf_save"
 			echo $ac_n "checking for $cf_test in $cf_path""... $ac_c" 1>&6
-echo "configure:14816: checking for $cf_test in $cf_path" >&5
+echo "configure:14965: checking for $cf_test in $cf_path" >&5
 		else
 			echo $ac_n "checking for $cf_test""... $ac_c" 1>&6
-echo "configure:14819: checking for $cf_test" >&5
+echo "configure:14968: checking for $cf_test" >&5
 		fi
 		cat > conftest.$ac_ext <<EOF
-#line 14822 "configure"
+#line 14971 "configure"
 #include "confdefs.h"
 
 #include <X11/Intrinsic.h>
@@ -14827,7 +14976,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:14831: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14980: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -14853,21 +15002,21 @@ rm -f conftest*
 			if test $cf_path != default ; then
 				LIBS="-L$cf_path/lib $cf_lib $LIBS"
 				echo $ac_n "checking for $cf_lib in $cf_path""... $ac_c" 1>&6
-echo "configure:14857: checking for $cf_lib in $cf_path" >&5
+echo "configure:15006: checking for $cf_lib in $cf_path" >&5
 			else
 				LIBS="$cf_lib $LIBS"
 				echo $ac_n "checking for $cf_test in $cf_lib""... $ac_c" 1>&6
-echo "configure:14861: checking for $cf_test in $cf_lib" >&5
+echo "configure:15010: checking for $cf_test in $cf_lib" >&5
 			fi
 			cat > conftest.$ac_ext <<EOF
-#line 14864 "configure"
+#line 15013 "configure"
 #include "confdefs.h"
 
 int main() {
 $cf_test()
 ; return 0; }
 EOF
-if { (eval echo configure:14871: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15020: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -14908,7 +15057,7 @@ EOF
 LDFLAGS="$LDFLAGS $X_LIBS"
 CFLAGS="$CFLAGS $X_CFLAGS"
 echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:14912: checking for XOpenDisplay in -lX11" >&5
+echo "configure:15061: checking for XOpenDisplay in -lX11" >&5
 ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -14916,7 +15065,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14920 "configure"
+#line 15069 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14927,7 +15076,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:14931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14948,14 +15097,14 @@ else
 fi
 
 echo $ac_n "checking for XCurses library""... $ac_c" 1>&6
-echo "configure:14952: checking for XCurses library" >&5
+echo "configure:15101: checking for XCurses library" >&5
 if eval "test \"`echo '$''{'cf_cv_lib_XCurses'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 LIBS="-lXCurses $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 14959 "configure"
+#line 15108 "configure"
 #include "confdefs.h"
 
 #include <xcurses.h>
@@ -14965,7 +15114,7 @@ int main() {
 XCursesExit();
 ; return 0; }
 EOF
-if { (eval echo configure:14969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_lib_XCurses=yes
 else
@@ -14999,7 +15148,7 @@ fi
 else
 	
 echo $ac_n "checking if we can include termio.h with curses""... $ac_c" 1>&6
-echo "configure:15003: checking if we can include termio.h with curses" >&5
+echo "configure:15152: checking if we can include termio.h with curses" >&5
 if eval "test \"`echo '$''{'cf_cv_termio_and_curses'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -15008,7 +15157,7 @@ else
     CFLAGS="$CFLAGS -DHAVE_CONFIG_H -I. -I${srcdir-.} -I${srcdir-.}/src -I${srcdir-.}/WWW/Library/Implementation"
     touch lynx_cfg.h
     cat > conftest.$ac_ext <<EOF
-#line 15012 "configure"
+#line 15161 "configure"
 #include "confdefs.h"
 
 #include <LYCurses.h>
@@ -15017,7 +15166,7 @@ int main() {
 putchar(0x0a)
 ; return 0; }
 EOF
-if { (eval echo configure:15021: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15170: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_termio_and_curses=yes
 else
diff --git a/configure.in b/configure.in
index 2fbd77b5..8f024648 100644
--- a/configure.in
+++ b/configure.in
@@ -493,6 +493,7 @@ AC_CHECK_HEADERS( \
 	sys/filio.h \
 	sys/ioctl.h \
 	sys/param.h \
+	sys/timeb.h \
 	sys/time.h \
 	syslog.h \
 	termio.h \
@@ -518,6 +519,7 @@ CF_REMOVE_BROKEN
 CF_FUNC_LSTAT
 AC_CHECK_FUNCS( \
 	cuserid \
+	ftime \
 	getcwd \
 	getgroups \
 	gettimeofday \
diff --git a/docs/OS-390.announce b/docs/OS-390.announce
index 8d748dc1..7611ee97 100644
--- a/docs/OS-390.announce
+++ b/docs/OS-390.announce
@@ -18,9 +18,9 @@ o Alternatively, download the PKZIPped archive lynx2-8-3.zip in BINARY.
 
 o Unpack with:
 
-	unzip -a lynx2-8-3.zip
+	unzip -aa lynx2-8-3.zip
 
-  The "-a" is needed to convert the ASCII archive
+  The "-aa" is needed to convert the ASCII archive
   to EBCDIC.  (unzip is not shipped with OS/390.  You can
   obtain it from:
 
diff --git a/lynx.cfg b/lynx.cfg
index 57ceb5a1..22a5633e 100644
--- a/lynx.cfg
+++ b/lynx.cfg
@@ -603,7 +603,11 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
 .h2 SHOW_KB_RATE
 # While getting large files, Lynx shows the approximate rate of transfer.
 # Set this to change the units shown:
-# TRUE for KB/sec or FALSE for bytes/sec:  default is TRUE.
+# TRUE or KB for KB/sec.
+# FALSE or BYTES for bytes/sec.
+# KB,ETA to show KB/sec with estimated completion time.
+# BYTES,ETA to show BYTES/sec with estimated completion time.
+# NONE to disable the display of transfer rate altogether.
 #SHOW_KB_RATE:TRUE
 
 
diff --git a/lynx.hlp b/lynx.hlp
index 4dbf01ad..c05d2bf9 100644
--- a/lynx.hlp
+++ b/lynx.hlp
@@ -525,54 +525,61 @@
               lynx.cfg.   The  command  line  switch  toggles the
               default.
 
+       -show_rate
+              If  enabled  the  transfer   rate   is   shown   in
+              bytes/second.   If  disabled,  no  transfer rate is
+              shown.  Use lynx.cfg or the options menu to  select
+              KB/second and/or ETA.
+
        -soft_dquotes
-              toggles emulation of the old  Netscape  and  Mosaic
+              toggles  emulation  of  the old Netscape and Mosaic
               bug  which  treated  '>'  as  a  co-terminator  for
               double-quotes and tags.
 
        -source
-              works the same as  dump  but  outputs  HTML  source
+              works  the  same  as  dump  but outputs HTML source
+
               instead of formatted text.
 
        -stack_dump
               disable SIGINT cleanup handler
 
        -startfile_ok
-              allow   non-http   startfile   and   homepage  with
+              allow  non-http   startfile   and   homepage   with
               -validate.
 
        -stdin read the startfile from standard input (UNIX only).
 
        -tagsoup
-              initialize  parser,  using Tag Soup DTD rather than
+              initialize parser, using Tag Soup DTD  rather  than
               SortaSGML.
 
        -telnet
               disable recognition of telnet commands.
 
        -term=TERM
-              tell Lynx  what  terminal  type  to  assume  it  is
-              talking   to.   (This  may  be  useful  for  remote
-              execution, when, for example, Lynx  connects  to  a
-              remote  TCP/IP  port  that starts a script that, in
+              tell  Lynx  what  terminal  type  to  assume  it is
+              talking  to.   (This  may  be  useful  for   remote
+              execution,  when,  for  example, Lynx connects to a
+              remote TCP/IP port that starts a  script  that,  in
               turn, starts another Lynx process.)
 
        -timeout=N
-              For win32, sets the network read-timeout,  where  N
+              For  win32,  sets the network read-timeout, where N
               is given in seconds.
 
-       -tlog  toggles  between  using a Lynx Trace Log and stderr
+       -tlog  toggles between using a Lynx Trace Log  and  stderr
               for trace output from the session.
 
        -tna   turns on "Textfields Need Activation" mode.
 
-       -trace turns on Lynx trace  mode.   Destination  of  trace
+       -trace turns  on  Lynx  trace  mode.  Destination of trace
               output depends on -tlog.
 
        -traversal
-              traverse  all  http  links  derived from startfile.
-              When used with -crawl, each link that  begins  with
-              the  same  string as startfile is output to a file,
+              traverse all http  links  derived  from  startfile.
+              When  used  with -crawl, each link that begins with
+              the same string as startfile is output to  a  file,
               intended for indexing.  See CRAWL.announce for more
               information.
 
@@ -580,27 +587,28 @@
               toggles use of _underline_ format in dumps.
 
        -use_mouse
-              turn  on mouse support, if available.  Clicking the
+              turn on mouse support, if available.  Clicking  the
               left mouse button on a link traverses it.  Clicking
               the right mouse button pops back.  Click on the top
-              line to scroll up.  Click on  the  bottom  line  to
-              scroll  down.   The  first few positions in the top
-              and bottom line may  invoke  additional  functions.
-              Lynx  must  be  compiled  with  ncurses or slang to
+              line  to  scroll  up.   Click on the bottom line to
+              scroll down.  The first few positions  in  the  top
+              and  bottom  line  may invoke additional functions.
+
+              Lynx must be compiled  with  ncurses  or  slang  to
               support this feature.  If ncurses is used, clicking
-              the  middle  mouse  button  pops  up a simple menu.
-              Mouse clicks may only work reliably while  Lynx  is
+              the middle mouse button  pops  up  a  simple  menu.
+              Mouse  clicks  may only work reliably while Lynx is
               idle waiting for input.
 
        -useragent=Name
               set alternate Lynx User-Agent header.
 
        -validate
-              accept  only  http URLs (for validation).  Complete
+              accept only http URLs (for  validation).   Complete
               security restrictions also are implemented.
 
        -verbose
-              toggle [LINK], [IMAGE] and [INLINE]  comments  with
+              toggle  [LINK],  [IMAGE] and [INLINE] comments with
               filenames of these images.
 
        -version
@@ -610,222 +618,223 @@
               enable vi-like key movement.
 
        -wdebug
-              enable  Waterloo tcp/ip packet debug (print to watt
-              debugfile).  This  applies  only  to  DOS  versions
+              enable Waterloo tcp/ip packet debug (print to  watt
+              debugfile).   This  applies  only  to  DOS versions
               compiled with WATTCP or WATT-32.
 
        -width=NUMBER
-              number  of columns for formatting of dumps, default
+              number of columns for formatting of dumps,  default
               is 80.
 
        -with_backspaces
-              emit backspaces in output if -dumping or  -crawling
+              emit  backspaces in output if -dumping or -crawling
               (like 'man' does)
 
 2 COMMANDS
-       o  Use Up arrow and Down arrow to scroll through hypertext
+       o Use Up arrow and Down arrow to scroll through  hypertext
        links.
-       o  Right  arrow  or  Return  will  follow  a   highlighted
+       o   Right  arrow  or  Return  will  follow  a  highlighted
        hypertext link.
        o Left Arrow will retreat from a link.
        o Type "H" or "?" for online help and descriptions of key-
        stroke commands.
-       o Type "K" for a complete list of the  current  key-stroke
+       o  Type  "K" for a complete list of the current key-stroke
        command mappings.
 
 2 ENVIRONMENT
-       In  addition  to  various "standard" environment variables
-       such as HOME,  PATH,  USER,  DISPLAY,  TMPDIR,  etc,  Lynx
-       utilizes  several  Lynx-specific environment variables, if
+       In addition to various  "standard"  environment  variables
+       such  as  HOME,  PATH,  USER,  DISPLAY,  TMPDIR, etc, Lynx
+       utilizes several Lynx-specific environment  variables,  if
        they exist.
 
-       Others may be created or modified by Lynx to pass data  to
-       an  external  program,  or  for  other reasons.  These are
+       Others  may be created or modified by Lynx to pass data to
+
+       an external program, or  for  other  reasons.   These  are
        listed separately below.
 
-       See also the sections on SIMULATED CGI SUPPORT and  NATIVE
+       See  also the sections on SIMULATED CGI SUPPORT and NATIVE
        LANGUAGE SUPPORT, below.
 
        Note:  Not all environment variables apply to all types of
-       platforms supported by Lynx, though most do.  Feedback  on
+       platforms  supported by Lynx, though most do.  Feedback on
        platform dependencies is solicited.
 
        Environment Variables Used By Lynx:
 
-       COLORTERM           If   set,  color  capability  for  the
+       COLORTERM           If  set,  color  capability  for   the
                            terminal is forced on at startup time.
-                           The   actual  value  assigned  to  the
+                           The  actual  value  assigned  to   the
                            variable is ignored.  This variable is
                            only  meaningful  if  Lynx  was  built
-                           using   the   slang    screen-handling
+                           using    the   slang   screen-handling
                            library.
 
-       LYNX_CFG            This  variable,  if set, will override
-                           the default location and name  of  the
-                           global  configuration  file (normally,
+       LYNX_CFG            This variable, if set,  will  override
+                           the  default  location and name of the
+                           global configuration  file  (normally,
                            lynx.cfg)  that  was  defined  by  the
                            LYNX_CFG_FILE    constant    in    the
-                           userdefs.h file, during  installation.
-                           See   the  userdefs.h  file  for  more
+                           userdefs.h  file, during installation.
+                           See  the  userdefs.h  file  for   more
                            information.
 
-       LYNX_LSS            This variable, if set,  specifies  the
+       LYNX_LSS            This  variable,  if set, specifies the
                            location of the default Lynx character
                            style  sheet  file.   [Currently  only
-                           meaningful  if  Lynx  was  built using
+                           meaningful if  Lynx  was  built  using
                            experimental color style support.]
 
-       LYNX_SAVE_SPACE     This variable, if set,  will  override
+       LYNX_SAVE_SPACE     This  variable,  if set, will override
                            the  default  path  prefix  for  files
-                           saved to disk that is defined  in  the
-                           lynx.cfg  SAVE_SPACE:  statement.  See
+                           saved  to  disk that is defined in the
+                           lynx.cfg SAVE_SPACE:  statement.   See
                            the    lynx.cfg    file    for    more
                            information.
 
-       LYNX_TEMP_SPACE     This  variable,  if set, will override
-                           the default path prefix for  temporary
-                           files    that   was   defined   during
-                           installation, as  well  as  any  value
-                           that  may  be  assigned  to the TMPDIR
+       LYNX_TEMP_SPACE     This variable, if set,  will  override
+                           the  default path prefix for temporary
+                           files   that   was   defined    during
+                           installation,  as  well  as  any value
+                           that may be  assigned  to  the  TMPDIR
                            variable.
 
-       MAIL                This variable  specifies  the  default
+       MAIL                This  variable  specifies  the default
                            inbox Lynx will check for new mail, if
-                           such  checking  is  enabled   in   the
+                           such   checking   is  enabled  in  the
                            lynx.cfg file.
 
-       NEWS_ORGANIZATION   This  variable,  if  set, provides the
-                           string  used  in   the   Organization:
-                           header  of  USENET  news postings.  It
-                           will  override  the  setting  of   the
-                           ORGANIZATION  environment variable, if
-                           it is also  set  (and,  on  UNIX,  the
+       NEWS_ORGANIZATION   This variable, if  set,  provides  the
+                           string   used   in  the  Organization:
+                           header of USENET  news  postings.   It
+                           will   override  the  setting  of  the
+                           ORGANIZATION environment variable,  if
+                           it  is  also  set  (and,  on UNIX, the
                            contents of an /etc/organization file,
                            if present).
 
-       NNTPSERVER          If set, this  variable  specifies  the
-                           default  NNTP server that will be used
-                           for USENET news  reading  and  posting
+       NNTPSERVER          If  set,  this  variable specifies the
+                           default NNTP server that will be  used
+                           for  USENET  news  reading and posting
                            with Lynx, via news: URL's.
 
-       ORGANIZATION        This  variable,  if  set, provides the
-                           string  used  in   the   Organization:
-                           header  of  USENET  news postings.  On
+       ORGANIZATION        This variable, if  set,  provides  the
+                           string   used   in  the  Organization:
+                           header of USENET  news  postings.   On
                            UNIX, it will override the contents of
                            an /etc/organization file, if present.
 
        PROTOCOL_proxy      Lynx supports the use of proxy servers
-                           that  can act as firewall gateways and
-                           caching servers.  They are  preferable
+                           that can act as firewall gateways  and
+                           caching  servers.  They are preferable
                            to  the  older  gateway  servers  (see
-                           WWW_access_GATEWAY,   below).     Each
-                           protocol  used  by  Lynx,  (http, ftp,
+                           WWW_access_GATEWAY,    below).    Each
+                           protocol used  by  Lynx,  (http,  ftp,
                            gopher, etc), can be mapped separately
-                           by  setting  environment  variables of
+                           by setting  environment  variables  of
                            the  form  PROTOCOL_proxy  (literally:
                            http_proxy,  ftp_proxy,  gopher_proxy,
                            etc),                               to
                            "http://some.server.dom:port/".    See
-                           Lynx  Users   Guide   for   additional
+                           Lynx   Users   Guide   for  additional
                            details and examples.
 
-       WWW_access_GATEWAY  Lynx  still  supports  use  of gateway
-                           servers, with  the  servers  specified
+       WWW_access_GATEWAY  Lynx still  supports  use  of  gateway
+                           servers,  with  the  servers specified
                            via   "WWW_access_GATEWAY"   variables
-                           (where "access" is lower case and  can
+                           (where  "access" is lower case and can
                            be "http", "ftp", "gopher" or "wais"),
                            however most gateway servers have been
-                           discontinued.   Note  that  you do not
-                           include a terminal '/'  for  gateways,
-                           but   do   for  proxies  specified  by
-                           PROTOCOL_proxy environment  variables.
+                           discontinued.  Note that  you  do  not
+                           include  a  terminal '/' for gateways,
+                           but  do  for  proxies   specified   by
+                           PROTOCOL_proxy  environment variables.
                            See Lynx Users Guide for details.
 
-       WWW_HOME            This  variable,  if set, will override
-                           the default startup URL  specified  in
+       WWW_HOME            This variable, if set,  will  override
+                           the  default  startup URL specified in
                            any of the Lynx configuration files.
 
        Environment Variables Set or Modified By Lynx:
 
        LYNX_PRINT_DATE     This  variable  is  set  by  the  Lynx
-                           p(rint) function, to the Date:  string
-                           seen  in  the  document's "Information
-                           about" page (= cmd), if  any.   It  is
-                           created   for   use   by  an  external
+
+                           p(rint)  function, to the Date: string
+                           seen in  the  document's  "Information
+                           about"  page  (=  cmd), if any.  It is
+                           created  for  use   by   an   external
                            program,  as  defined  in  a  lynx.cfg
                            PRINTER: definition statement.  If the
-
                            field does not exist for the document,
-                           the  variable  is set to a null string
+                           the variable is set to a  null  string
                            under UNIX, or "No Date" under VMS.
 
        LYNX_PRINT_LASTMOD  This  variable  is  set  by  the  Lynx
-                           p(rint)  function,  to  the  Last Mod:
-                           string   seen   in   the    document's
-                           "Information  about"  page (= cmd), if
-                           any.  It is  created  for  use  by  an
+                           p(rint) function,  to  the  Last  Mod:
+                           string    seen   in   the   document's
+                           "Information about" page (=  cmd),  if
+                           any.   It  is  created  for  use by an
                            external  program,  as  defined  in  a
                            lynx.cfg      PRINTER:      definition
                            statement.   If  the  field  does  not
-                           exist for the document,  the  variable
+                           exist  for  the document, the variable
                            is set to a null string under UNIX, or
                            "No LastMod" under VMS.
 
        LYNX_PRINT_TITLE    This  variable  is  set  by  the  Lynx
                            p(rint)  function,  to  the  Linkname:
-                           string   seen   in   the    document's
-                           "Information  about"  page (= cmd), if
-                           any.  It is  created  for  use  by  an
+                           string    seen   in   the   document's
+                           "Information about" page (=  cmd),  if
+                           any.   It  is  created  for  use by an
                            external  program,  as  defined  in  a
                            lynx.cfg      PRINTER:      definition
                            statement.   If  the  field  does  not
-                           exist for the document,  the  variable
+                           exist  for  the document, the variable
                            is set to a null string under UNIX, or
                            "No Title" under VMS.
 
        LYNX_PRINT_URL      This  variable  is  set  by  the  Lynx
-                           p(rint)  function,  to the URL: string
-                           seen in  the  document's  "Information
-                           about"  page  (=  cmd), if any.  It is
-                           created  for  use   by   an   external
+                           p(rint) function, to the  URL:  string
+                           seen  in  the  document's "Information
+                           about" page (= cmd), if  any.   It  is
+                           created   for   use   by  an  external
                            program,  as  defined  in  a  lynx.cfg
                            PRINTER: definition statement.  If the
                            field does not exist for the document,
-                           the variable is set to a  null  string
+                           the  variable  is set to a null string
                            under UNIX, or "No URL" under VMS.
 
-       LYNX_TRACE          If  set,  causes Lynx to write a trace
-                           file as  if  the  -trace  option  were
+       LYNX_TRACE          If set, causes Lynx to write  a  trace
+                           file  as  if  the  -trace  option were
                            supplied.
 
-       LYNX_VERSION        This  variable  is always set by Lynx,
+       LYNX_VERSION        This variable is always set  by  Lynx,
                            and may be used by an external program
-                           to  determine  if  it  was  invoked by
-                           Lynx.  See also the  comments  in  the
+                           to determine  if  it  was  invoked  by
+                           Lynx.   See  also  the comments in the
                            distribution's  sample  mailcap  file,
                            for notes on usage in such a file.
 
-       TERM                Normally, this  variable  is  used  by
-                           Lynx  to  determine  the terminal type
-                           being  used  to  invoke   Lynx.    If,
-                           however,  it  is unset at startup time
-                           (or has the value  "unknown"),  or  if
-                           the  -term command-line option is used
+       TERM                Normally,  this  variable  is  used by
+                           Lynx to determine  the  terminal  type
+                           being   used   to  invoke  Lynx.   If,
+                           however, it is unset at  startup  time
+                           (or  has  the  value "unknown"), or if
+                           the -term command-line option is  used
                            (see OPTIONS section above), Lynx will
-                           set  or  modify  its value to the user
-                           specified terminal type (for the  Lynx
-                           execution   environment).    Note:  If
-                           set/modified by Lynx,  the  values  of
-                           the  LINES  and/or COLUMNS environment
+                           set or modify its value  to  the  user
+                           specified  terminal type (for the Lynx
+                           execution  environment).    Note:   If
+                           set/modified  by  Lynx,  the values of
+                           the LINES and/or  COLUMNS  environment
                            variables may also be changed.
 
 2 SIMULATED CGI SUPPORT
-       If built with the cgi-links option  enabled,  Lynx  allows
-       access  to  a  cgi script directly without the need for an
+       If  built  with  the cgi-links option enabled, Lynx allows
+       access to a cgi script directly without the  need  for  an
        http daemon.
 
-       When executing such "lynxcgi scripts"  (if  enabled),  the
-       following  variables  may  be  set  for  simulating  a CGI
+       When  executing  such  "lynxcgi scripts" (if enabled), the
+       following variables  may  be  set  for  simulating  a  CGI
        environment:
 
        CONTENT_LENGTH
@@ -854,121 +863,121 @@
 
        SERVER_SOFTWARE
 
-       Other environment  variables  are  not  inherited  by  the
+       Other  environment  variables  are  not  inherited  by the
        script, unless they are provided via a LYNXCGI_ENVIRONMENT
-       statement in the configuration  file.   See  the  lynx.cfg
-       file,    and    the    (draft)   CGI   1.1   Specification
+       statement  in  the  configuration  file.  See the lynx.cfg
+
+       file,   and   the   (draft)    CGI    1.1    Specification
        <http://Web.Golux.Com/coar/cgi/draft-coar-cgi-v11-00.txt>
        for the definition and usage of these variables.
 
        The CGI Specification, and other associated documentation,
-       should be consulted for general information on CGI  script
-
+       should  be consulted for general information on CGI script
        programming.
 
 2 NATIVE LANGUAGE SUPPORT
-       If  configured and installed with Native Language Support,
-       Lynx will display status and other messages in your  local
-       language.    See   the   file   ABOUT_NLS  in  the  source
-       distribution,  or  at  your  local  GNU  site,  for   more
+       If configured and installed with Native Language  Support,
+       Lynx  will display status and other messages in your local
+       language.   See  the  file   ABOUT_NLS   in   the   source
+       distribution,   or  at  your  local  GNU  site,  for  more
        information about internationalization.
 
-       The  following  environment variables may be used to alter
+       The following environment variables may be used  to  alter
        default settings:
 
-       LANG                This variable, if set,  will  override
-                           the  default  message language.  It is
+       LANG                This  variable,  if set, will override
+                           the default message language.   It  is
                            an ISO 639 two-letter code identifying
-                           the  language.  Language codes are NOT
+                           the language.  Language codes are  NOT
                            the same as the country codes given in
                            ISO 3166.
 
-       LANGUAGE            This  variable,  if set, will override
+       LANGUAGE            This variable, if set,  will  override
                            the default message language.  This is
-                           a   GNU   extension  that  has  higher
-                           priority  for  setting   the   message
+                           a  GNU  extension  that   has   higher
+                           priority   for   setting  the  message
                            catalog than LANG or LC_ALL.
 
        LC_ALL              and
 
-       LC_MESSAGES         These  variables,  if set, specify the
-                           notion of native  language  formatting
+       LC_MESSAGES         These variables, if set,  specify  the
+                           notion  of  native language formatting
                            style.  They are POSIXly correct.
 
-       LINGUAS             This   variable,   if   set  prior  to
+       LINGUAS             This  variable,  if   set   prior   to
                            configuration,  limits  the  installed
                            languages to specific values.  It is a
-                           space-separated  list  of   two-letter
+                           space-separated   list  of  two-letter
                            codes.  Currently, it is hard-coded to
                            a wish list.
 
-       NLSPATH             This variable, if set, is used as  the
+       NLSPATH             This  variable, if set, is used as the
                            path prefix for message catalogs.
 
 2 NOTES
        This is the Lynx v2.8.3 Release
 
-       If  you  wish  to contribute to the further development of
-       Lynx, subscribe  to  our  mailing  list.   Send  email  to
-       <majordomo@sig.net>  with "subscribe lynx-dev" as the only
+       If you wish to contribute to the  further  development  of
+       Lynx,  subscribe  to  our  mailing  list.   Send  email to
+       <majordomo@sig.net> with "subscribe lynx-dev" as the  only
        line in the body of your message.
 
-       Send  bug  reports,  comments,   suggestions   to   <lynx-
+       Send   bug   reports,   comments,  suggestions  to  <lynx-
        dev@sig.net> after subscribing.
 
-       Unsubscribe  by  sending email to <majordomo@sig.net> with
-       "unsubscribe lynx-dev" as the only line  in  the  body  of
-       your  message.  Do not send the unsubscribe message to the
+       Unsubscribe by sending email to  <majordomo@sig.net>  with
+       "unsubscribe  lynx-dev"  as  the  only line in the body of
+       your message.  Do not send the unsubscribe message to  the
        lynx-dev list, itself.
 
 2 SEE ALSO
-       catgets(3),  curses(3),  environ(7),  execve(2),   ftp(1),
-       gettext(GNU),   localeconv(3),  ncurses(3),  setlocale(3),
+       catgets(3),   curses(3),  environ(7),  execve(2),  ftp(1),
+       gettext(GNU),  localeconv(3),  ncurses(3),   setlocale(3),
        slang(?), termcap(5), terminfo(5), wget(GNU)
 
-       Note that man page availability and section  numbering  is
-       somewhat  platform  dependent, and may vary from the above
+       Note  that  man page availability and section numbering is
+       somewhat platform dependent, and may vary from  the  above
        references.
 
-       A section shown as (GNU), is intended to denote  that  the
-       topic  may be available via an info page, instead of a man
-       page (i.e., try "info  subject",  rather  than  "man  subject").
+       A  section  shown as (GNU), is intended to denote that the
+       topic may be available via an info page, instead of a  man
+       page  (i.e.,  try  "info  subject",  rather than "man subject").
 
-       A  section  shown as (?) denotes that documentation on the
+       A section shown as (?) denotes that documentation  on  the
        topic exists, but is not part of an established documentation
-       retrieval system (see the distribution files associated
-       with the topic, or contact your System  Administrator
+       retrieval system (see the distribution files  associated
+       with the topic, or contact your System Administrator
        for further information).
 
 2 ACKNOWLEDGMENTS
        Lynx has incorporated code from a variety of sources along
        the way.  The earliest versions of Lynx included code from
-       Earl  Fogel  of  Computing  Services  at the University of
-       Saskatchewan, who implemented HYPERREZ in the  Unix  envi-
-       ronment.    HYPERREZ  was  developed  by  Niel  Larson  of
-       Think.com and served as the model for the  early  versions
-       of  Lynx.  Those versions also incorporated libraries from
-       the Unix Gopher clients developed  at  the  University  of
-       Minnesota,  and the later versions of Lynx rely on the WWW
-       client library code developed by Tim Berners-Lee  and  the
-       WWW  community.   Also a special thanks to Foteos Macrides
-       who ported much of Lynx to VMS and did or  organized  most
-       of  its  development  since the departures of Lou Montulli
-       and Garrett Blythe from the University of  Kansas  in  the
-       summer  of  1994 through the release of v2.7.2, and to ev-
-       eryone on the net who has contributed to  Lynx's  develop-
+       Earl Fogel of Computing  Services  at  the  University  of
+       Saskatchewan,  who  implemented HYPERREZ in the Unix envi-
+       ronment.   HYPERREZ  was  developed  by  Niel  Larson   of
+       Think.com  and  served as the model for the early versions
+       of Lynx.  Those versions also incorporated libraries  from
+       the  Unix  Gopher  clients  developed at the University of
+       Minnesota, and the later versions of Lynx rely on the  WWW
+       client  library  code developed by Tim Berners-Lee and the
+       WWW community.  Also a special thanks to  Foteos  Macrides
+       who  ported  much of Lynx to VMS and did or organized most
+       of its development since the departures  of  Lou  Montulli
+       and  Garrett  Blythe  from the University of Kansas in the
+       summer of 1994 through the release of v2.7.2, and  to  ev-
+       eryone  on  the net who has contributed to Lynx's develop-
        ment either directly (through patches, comments or bug re-
-       ports) or indirectly (through inspiration and  development
+       ports)  or indirectly (through inspiration and development
        of other systems).
 
 2 AUTHORS
-       Lou  Montulli,  Garrett  Blythe,  Craig  Lavender, Michael
+       Lou Montulli,  Garrett  Blythe,  Craig  Lavender,  Michael
        Grobe, Charles Rezac
        Academic Computing Services
        University of Kansas
+
        Lawrence, Kansas 66047
 
        Foteos Macrides
        Worcester Foundation for Biomedical Research
        Shrewsbury, Massachusetts 01545
-
diff --git a/lynx.man b/lynx.man
index af88a945..95d61a89 100644
--- a/lynx.man
+++ b/lynx.man
@@ -562,6 +562,11 @@ systems without FANCY_CURSES capabilities.  The default
 configuration can be changed in userdefs.h or lynx.cfg.
 The command line switch toggles the default.
 .TP
+.B -show_rate
+If enabled the transfer rate is shown in bytes/second.
+If disabled, no transfer rate is shown.
+Use lynx.cfg or the options menu to select KB/second and/or ETA.
+.TP
 .B -soft_dquotes
 toggles emulation of the old Netscape and Mosaic bug which
 treated '>' as a co-terminator for double-quotes and tags.
diff --git a/src/GridText.c b/src/GridText.c
index 57eed192..e8e40d5b 100644
--- a/src/GridText.c
+++ b/src/GridText.c
@@ -91,7 +91,7 @@ struct _HTStream {			/* only know it as object */
 
 #define TITLE_LINES  1
 #define IS_UTF_EXTRA(ch) (text->T.output_utf8 && \
-			  ((unsigned char)(ch)&0xc0) == 0x80)
+			  (UCH((ch))&0xc0) == 0x80)
 /* a test in compact form: how many extra UTF-8 chars after initial? - kw */
 #define UTF8_XNEGLEN(c) (c&0xC0? 0 :c&32? 1 :c&16? 2 :c&8? 3 :c&4? 4 :c&2? 5:0)
 #define UTF_XLEN(c) UTF8_XNEGLEN(((char)~(c)))
@@ -1290,7 +1290,7 @@ PRIVATE int display_line ARGS4(
 
 	    case LY_SOFT_HYPHEN:
 		if (*data != '\0' ||
-		    isspace((unsigned char)LastDisplayChar) ||
+		    isspace(UCH(LastDisplayChar)) ||
 		    LastDisplayChar == '-') {
 		    /*
 		     *  Ignore the soft hyphen if it is not the last
@@ -1326,7 +1326,7 @@ PRIVATE int display_line ARGS4(
 #endif /* SHOW_WHEREIS_TARGETS */
 #endif /* USE_COLOR_STYLE */
 		i++;
-		if (text->T.output_utf8 && !isascii((unsigned char)buffer[0])) {
+		if (text->T.output_utf8 && !isascii(UCH(buffer[0]))) {
 		    text->has_utf8 = YES;
 		    if ((*buffer & 0xe0) == 0xc0) {
 			utf_extra = 1;
@@ -1359,7 +1359,7 @@ PRIVATE int display_line ARGS4(
 		    buffer[1] = '\0';
 		    data += utf_extra;
 		    utf_extra = 0;
-		} else if (HTCJK != NOCJK && !isascii((unsigned char)buffer[0])
+		} else if (HTCJK != NOCJK && !isascii(UCH(buffer[0]))
 #ifndef CONV_JISX0201KANA_JISX0208KANA
 		    && kanji_code != SJIS
 #endif
@@ -1391,7 +1391,7 @@ PRIVATE int display_line ARGS4(
 #if 0	/* last-ditch attempt to prevent 0x9B to screen - disabled  */
 #if defined(UNIX) || defined(VMS)
 		    if (!dump_output_immediately &&
-			(unsigned char)buffer[0] == 128+27) {
+			UCH(buffer[0]) == 128+27) {
 			addstr("~^");
 			buffer[0] ^= 0xc0;
 		    }
@@ -1969,7 +1969,7 @@ PRIVATE void display_page ARGS3(
 			/*
 			 *  Output all the printable target chars.
 			 */
-			if (text->T.output_utf8 && !isascii((unsigned char)tmp[0])) {
+			if (text->T.output_utf8 && !isascii(UCH(tmp[0]))) {
 			    if ((*tmp & 0xe0) == 0xc0) {
 				utf_extra = 1;
 			    } else if ((*tmp & 0xf0) == 0xe0) {
@@ -2001,7 +2001,7 @@ PRIVATE void display_page ARGS3(
 			    tmp[1] = '\0';
 			    written += (utf_extra + 1);
 			    utf_extra = 0;
-			} else if (HTCJK != NOCJK && !isascii((unsigned char)tmp[0])) {
+			} else if (HTCJK != NOCJK && !isascii(UCH(tmp[0]))) {
 			    /*
 			     *  For CJK strings, by Masanobu Kimura.
 			     */
@@ -2013,7 +2013,7 @@ PRIVATE void display_page ARGS3(
 #if 0	/* last-ditch attempt to prevent 0x9B to screen - disabled  */
 #if defined(UNIX) || defined(VMS)
 			    if (!dump_output_immediately &&
-				(unsigned char)tmp[0] == 128+27) {
+				UCH(tmp[0]) == 128+27) {
 				addstr("~^");
 				tmp[0] ^= 0xc0;
 			    }
@@ -3096,7 +3096,7 @@ PRIVATE void split_line ARGS2(
 		*jp = ' ';	/* substitute it */
 		continue;
 	    }
-	    if (text->T.output_utf8 && !isascii((unsigned char)c)) {
+	    if (text->T.output_utf8 && !isascii(UCH(c))) {
 		int utf_extra = 0;
 		if ((c & 0xe0) == 0xc0) {
 		    utf_extra = 1;
@@ -3636,13 +3636,13 @@ PUBLIC void HText_appendCharacter ARGS2(
      *  processing stage anyway. - kw
      */
 #ifndef   EBCDIC  /* S/390 -- gil -- 1514 */
-    if ((unsigned char)ch >= 128 && HTCJK == NOCJK &&
+    if (UCH(ch) >= 128 && HTCJK == NOCJK &&
 	!text->T.transp && !text->T.output_utf8 &&
-	(unsigned char)ch < LYlowest_eightbit[current_char_set])
+	UCH(ch) < LYlowest_eightbit[current_char_set])
 	return;
 #endif /* EBCDIC */
 #endif /* !USE_SLANG */
-    if ((unsigned char)ch == 155 && HTCJK == NOCJK) {	/* octal 233 */
+    if (UCH(ch) == 155 && HTCJK == NOCJK) {	/* octal 233 */
 	if (!HTPassHighCtrlRaw &&
 	    !text->T.transp && !text->T.output_utf8 &&
 	    (155 < LYlowest_eightbit[current_char_set])) {
@@ -3810,11 +3810,11 @@ PUBLIC void HText_appendCharacter ARGS2(
 		     )
 #endif
 		    ) &&
-		    ((unsigned char)ch >= 0xA1) &&
-		    ((unsigned char)ch <= 0xDF)) {
+		    (UCH(ch) >= 0xA1) &&
+		    (UCH(ch) <= 0xDF)) {
 #ifdef CONV_JISX0201KANA_JISX0208KANA
-		    unsigned char c = (unsigned char)ch;
-		    unsigned char kb = (unsigned char)text->kanji_buf;
+		    unsigned char c = UCH(ch);
+		    unsigned char kb = UCH(text->kanji_buf);
 		    JISx0201TO0208_SJIS(c,
 					(unsigned char *)&kb,
 					(unsigned char *)&c);
@@ -3892,11 +3892,11 @@ PUBLIC void HText_appendCharacter ARGS2(
 		return;
 
 	    for (i = (text->permissible_split + 1); line->data[i]; i++) {
-		if (!IsSpecialAttrChar((unsigned char)line->data[i]) &&
-		    !isspace((unsigned char)line->data[i]) &&
-		    (unsigned char)line->data[i] != '-' &&
-		    (unsigned char)line->data[i] != HT_NON_BREAK_SPACE &&
-		    (unsigned char)line->data[i] != HT_EN_SPACE) {
+		if (!IsSpecialAttrChar(UCH(line->data[i])) &&
+		    !isspace(UCH(line->data[i])) &&
+		    UCH(line->data[i]) != '-' &&
+		    UCH(line->data[i]) != HT_NON_BREAK_SPACE &&
+		    UCH(line->data[i]) != HT_EN_SPACE) {
 		    break;
 		}
 	    }
@@ -4248,8 +4248,8 @@ check_WrapSource:
 	line = text->last_line; /* May have changed */
 
 	if (HTCJK != NOCJK && text->kanji_buf) {
-	    hi = (unsigned char)text->kanji_buf;
-	    lo = (unsigned char)ch;
+	    hi = UCH(text->kanji_buf);
+	    lo = UCH(ch);
 
 	    if (HTCJK == JAPANESE) {
 		if (text->kcode != JIS) {
@@ -4346,7 +4346,7 @@ check_WrapSource:
 	}
 #if 0
 	if (HTCJK != NOCJK && text->kanji_buf) {
-	    hi = (unsigned char)text->kanji_buf, lo = (unsigned char)ch;
+	    hi = UCH(text->kanji_buf), lo = UCH(ch);
 	    if (HTCJK == JAPANESE && text->kcode == NOKANJI) {
 		if (IS_SJIS(hi, lo, text->in_sjis) && IS_EUC(hi, lo)) {
 		    text->kcode = NOKANJI;
@@ -4381,9 +4381,9 @@ check_WrapSource:
 	}
 #endif
 #ifndef CONV_JISX0201KANA_JISX0208KANA
-	else if ((HTCJK == JAPANESE) && IS_SJIS_X0201KANA((unsigned char)(ch)) &&
+	else if ((HTCJK == JAPANESE) && IS_SJIS_X0201KANA(UCH((ch))) &&
 		 (kanji_code == EUC)) {
-	    line->data[line->size++] = (unsigned char) 0x8e;
+	    line->data[line->size++] = UCH(0x8e);
 	    line->data[line->size++] = ch;
 	}
 #endif
@@ -4554,8 +4554,8 @@ PRIVATE HTLine * insert_blanks_in_line ARGS6(
 	     line->data[ioldb] == LY_UNDERLINE_START_CHAR ||
 	     !IsSpecialAttrChar(line->data[ioldb])) &&
 	    (!(text && text->T.output_utf8) ||
-	     (unsigned char)line->data[ioldb] < 128 ||
-	     ((unsigned char)(line->data[ioldb] & 0xc0) == 0xc0))) {
+	     UCH(line->data[ioldb]) < 128 ||
+	     (UCH((line->data[ioldb] & 0xc0)) == 0xc0))) {
 	    /*
 	     *  A new displayable character starts here.  Time to check
 	     *  whether this is a position to insert spaces.
@@ -5186,7 +5186,7 @@ PUBLIC BOOL HText_isAnchorBlank ARGS2(
 	k = j = (last->size - i);
 	while (j < (int)last->size) {
 	    if (!IsSpecialAttrChar(last->data[j]) &&
-		!isspace((unsigned char)last->data[j]) &&
+		!isspace(UCH(last->data[j])) &&
 		last->data[j] != HT_NON_BREAK_SPACE &&
 		last->data[j] != HT_EN_SPACE)
 		break;
@@ -5243,7 +5243,7 @@ PUBLIC BOOL HText_isAnchorBlank ARGS2(
 	    }
 	    while (j < (int)prev->size) {
 		if (!IsSpecialAttrChar(prev->data[j]) &&
-		    !isspace((unsigned char)prev->data[j]) &&
+		    !isspace(UCH(prev->data[j])) &&
 		    prev->data[j] != HT_NON_BREAK_SPACE &&
 		    prev->data[j] != HT_EN_SPACE)
 		    break;
@@ -5372,7 +5372,7 @@ PUBLIC void HText_endAnchor ARGS2(
 	k = j = (last->size - i);
 	while (j < (int)last->size) {
 	    if (!IsSpecialAttrChar(last->data[j]) &&
-		!isspace((unsigned char)last->data[j]) &&
+		!isspace(UCH(last->data[j])) &&
 		last->data[j] != HT_NON_BREAK_SPACE &&
 		last->data[j] != HT_EN_SPACE)
 		break;
@@ -5429,7 +5429,7 @@ PUBLIC void HText_endAnchor ARGS2(
 	    }
 	    while (j < (int)prev->size) {
 		if (!IsSpecialAttrChar(prev->data[j]) &&
-		    !isspace((unsigned char)prev->data[j]) &&
+		    !isspace(UCH(prev->data[j])) &&
 		    prev->data[j] != HT_NON_BREAK_SPACE &&
 		    prev->data[j] != HT_EN_SPACE)
 		    break;
@@ -5525,7 +5525,7 @@ PUBLIC void HText_endAnchor ARGS2(
 		if (start->data[j] == ']') {
 		    j--;
 		    NumSize++;
-		    while (j >= 0 && isdigit((unsigned char)start->data[j])) {
+		    while (j >= 0 && isdigit(UCH(start->data[j]))) {
 			j--;
 			NumSize++;
 		    }
@@ -5568,7 +5568,7 @@ PUBLIC void HText_endAnchor ARGS2(
 			    j--;
 			i = (j + 1);
 			while (j >= 0 &&
-			       isdigit((unsigned char)prev->data[j])) {
+			       isdigit(UCH(prev->data[j]))) {
 			    j--;
 			    NumSize++;
 			}
@@ -5640,12 +5640,12 @@ PUBLIC void HText_endAnchor ARGS2(
 		    i = (j + 1);
 		    if ((j >= 2) &&
 			(prev->data[j] == ']' &&
-			 isdigit((unsigned char)prev->data[j - 1]))) {
+			 isdigit(UCH(prev->data[j - 1])))) {
 			j--;
 			NumSize++;
 			k = (j + 1);
 			while (j >= 0 &&
-			       isdigit((unsigned char)prev->data[j])) {
+			       isdigit(UCH(prev->data[j]))) {
 			    j--;
 			    NumSize++;
 			}
@@ -5986,13 +5986,13 @@ re_parse:
 	 *  if they exist, but only on HYPERTEXT_ANCHORS.
 	 */
 	if (anchor_ptr->link_type & HYPERTEXT_ANCHOR) {
-	    ch = (unsigned char)line_ptr->data[anchor_ptr->line_pos];
+	    ch = UCH(line_ptr->data[anchor_ptr->line_pos]);
 	    while (isspace(ch) ||
 		   IsSpecialAttrChar(ch)) {
 		anchor_ptr->line_pos++;
 		anchor_ptr->extent--;
 		cur_shift++;
-		ch = (unsigned char)line_ptr->data[anchor_ptr->line_pos];
+		ch = UCH(line_ptr->data[anchor_ptr->line_pos]);
 	    }
 	}
 	if (anchor_ptr->extent < 0) {
@@ -8771,13 +8771,13 @@ PRIVATE int HText_TrueLineSize ARGS3(
 
     if (IgnoreSpaces) {
 	for (i = 0; i < line->size; i++) {
-	    if (!IsSpecialAttrChar((unsigned char)line->data[i]) &&
+	    if (!IsSpecialAttrChar(UCH(line->data[i])) &&
 		(!(text && text->T.output_utf8) ||
-		 (unsigned char)line->data[i] < 128 ||
-		 ((unsigned char)(line->data[i] & 0xc0) == 0xc0)) &&
-		!isspace((unsigned char)line->data[i]) &&
-		(unsigned char)line->data[i] != HT_NON_BREAK_SPACE &&
-		(unsigned char)line->data[i] != HT_EN_SPACE) {
+		 UCH(line->data[i]) < 128 ||
+		 (UCH((line->data[i] & 0xc0)) == 0xc0)) &&
+		!isspace(UCH(line->data[i])) &&
+		UCH(line->data[i]) != HT_NON_BREAK_SPACE &&
+		UCH(line->data[i]) != HT_EN_SPACE) {
 		true_size++;
 	    }
 	}
@@ -8785,8 +8785,8 @@ PRIVATE int HText_TrueLineSize ARGS3(
 	for (i = 0; i < line->size; i++) {
 	    if (!IsSpecialAttrChar(line->data[i]) &&
 		(!(text && text->T.output_utf8) ||
-		 (unsigned char)line->data[i] < 128 ||
-		 ((unsigned char)(line->data[i] & 0xc0) == 0xc0))) {
+		 UCH(line->data[i]) < 128 ||
+		 (UCH(line->data[i] & 0xc0) == 0xc0))) {
 		true_size++;
 	    }
 	}
@@ -9270,8 +9270,8 @@ PRIVATE char * HText_skipOptionNumPrefix ARGS1(
 	char *cp = opname;
 
 	if ((cp && *cp && *cp++ == '(') &&
-	    *cp && isdigit(*cp++)) {
-	    while (*cp && isdigit(*cp))
+	    *cp && isdigit(UCH(*cp++))) {
+	    while (*cp && isdigit(UCH(*cp)))
 		++cp;
 	    if (*cp && *cp++ == ')') {
 		int i = (cp - opname);
@@ -9331,8 +9331,8 @@ PUBLIC char * HText_setLastOptionValue ARGS7(
      */
     if (*value) {
 	cp = &value[strlen(value)-1];
-	while ((cp >= value) && (isspace((unsigned char)*cp) ||
-				 IsSpecialAttrChar((unsigned char)*cp)))
+	while ((cp >= value) && (isspace(UCH(*cp)) ||
+				 IsSpecialAttrChar(UCH(*cp))))
 	    cp--;
 	*(cp+1) = '\0';
     }
@@ -9341,8 +9341,8 @@ PUBLIC char * HText_setLastOptionValue ARGS7(
      *  Find first non space
      */
     cp = value;
-    while (isspace((unsigned char)*cp) ||
-	   IsSpecialAttrChar((unsigned char)*cp))
+    while (isspace(UCH(*cp)) ||
+	   IsSpecialAttrChar(UCH(*cp)))
 	cp++;
     if (HTCurSelectGroupType == F_RADIO_TYPE &&
 	LYSelectPopups &&
@@ -9353,8 +9353,8 @@ PUBLIC char * HText_setLastOptionValue ARGS7(
 	 */
 	if ((cp1 = HText_skipOptionNumPrefix(cp)) > cp) {
 	    i = 0, j = (cp1 - cp);
-	    while (isspace((unsigned char)cp1[i]) ||
-		   IsSpecialAttrChar((unsigned char)cp1[i])) {
+	    while (isspace(UCH(cp1[i])) ||
+		   IsSpecialAttrChar(UCH(cp1[i]))) {
 		i++;
 	    }
 	    if (i > 0) {
@@ -9434,15 +9434,15 @@ PUBLIC char * HText_setLastOptionValue ARGS7(
 	 *  changed the string. - kw
 	 */
 	cp = value;
-	while (isspace((unsigned char)*cp) ||
-	       IsSpecialAttrChar((unsigned char)*cp))
+	while (isspace(UCH(*cp)) ||
+	       IsSpecialAttrChar(UCH(*cp)))
 	    cp++;
 	for (i = 0, j = 0; cp[i]; i++) {
 	    if (cp[i] == HT_NON_BREAK_SPACE ||
 		cp[i] == HT_EN_SPACE) {
 		cp[j++] = ' ';
 	    } else if (cp[i] != LY_SOFT_HYPHEN &&
-		       !IsSpecialAttrChar((unsigned char)cp[i])) {
+		       !IsSpecialAttrChar(UCH(cp[i]))) {
 		cp[j++] = cp[i];
 	    }
 	}
@@ -11774,7 +11774,7 @@ PRIVATE void cleanup_line_for_textarea ARGS2(
      *  Whack off trailing whitespace from the line.
      */
     for (i = len, p = line + (len - 1); i != 0; p--, i--) {
-	if (isspace (*p))
+	if (isspace(UCH(*p)))
 	    *p = '\0';
 	else
 	    break;
@@ -11830,14 +11830,14 @@ PRIVATE void cleanup_line_for_textarea ARGS2(
 	 */
 	for (p = line, s = tbuf; *s != '\0'; p++, s++) {
 #ifndef EBCDIC
-	    *p = (((unsigned char)*s  < (unsigned char)' ')       ||
-		  ((unsigned char)*s == (unsigned char)'\177')    ||
-		  (((unsigned char)*s > (unsigned char)'\177') &&
-		   ((unsigned char)*s <
-		    (unsigned char)LYlowest_eightbit[current_char_set])))
+	    *p = ((UCH(*s)  < UCH(' '))       ||
+		  (UCH(*s) == UCH('\177'))    ||
+		  ((UCH(*s) > UCH('\177')) &&
+		   (UCH(*s) <
+		    UCH(LYlowest_eightbit[current_char_set]))))
 		 ? (char) SPLAT : *s;
 #else
-	    *p = ((unsigned char)*s < (unsigned char)' ') ? SPLAT : *s;
+	    *p = (UCH(*s) < UCH(' ')) ? SPLAT : *s;
 #endif
 	}
 	*p = '\0';
@@ -11944,7 +11944,7 @@ PRIVATE int increment_tagged_htline ARGS6(
 		    plx   = TRUE;
 		    break;
 		}
-		if (isdigit (*t++) != 0) {
+		if (isdigit(UCH(*t++)) != 0) {
 		    n++;
 		    continue;
 		} else {
@@ -12039,7 +12039,7 @@ PRIVATE int increment_tagged_htline ARGS6(
 		 *  Go hunting again for just digits, followed by tag end ']'.
 		 */
 		while (*t != ']') {
-		    if (isdigit (*t++) != 0) {
+		    if (isdigit(UCH(*t++)) != 0) {
 			n++;
 			continue;
 		    } else {
@@ -12573,7 +12573,7 @@ PUBLIC int HText_ExtEditForm ARGS1(
     /*
      *	Nuke any blank lines from the end of the edited data.
      */
-    while ((size != 0) && (isspace (ebuf[size-1]) || (ebuf[size-1] == '\0')))
+    while ((size != 0) && (isspace(UCH(ebuf[size-1])) || (ebuf[size-1] == '\0')))
 	ebuf[--size] = '\0';
 
     /*
@@ -12628,16 +12628,16 @@ PUBLIC int HText_ExtEditForm ARGS1(
 	if (wanted_fieldlen_wrap > 0 && len0+len > wanted_fieldlen_wrap) {
 	    for (i = wanted_fieldlen_wrap-len0;
 		 i+len0 >= wanted_fieldlen_wrap/4; i--) {
-		if (isspace((unsigned char)lp[i])) {
+		if (isspace(UCH(lp[i]))) {
 		    len = i + 1;
 		    cp = lp + i;
 		    if (cp[1] != '\n' &&
-			isspace((unsigned char)cp[1]) &&
-			!isspace((unsigned char)cp[2])) {
+			isspace(UCH(cp[1])) &&
+			!isspace(UCH(cp[2]))) {
 			len++;
 			cp++;
 		    }
-		    if (!isspace((unsigned char)cp[1])) {
+		    if (!isspace(UCH(cp[1]))) {
 			while (*cp && *cp != '\r' && *cp != '\n' &&
 			       (cp - lp) <= len + (3 * wanted_fieldlen_wrap/4))
 			    cp++;	/* search for next line break */
@@ -12645,9 +12645,9 @@ PUBLIC int HText_ExtEditForm ARGS1(
 			    cp++;
 			if (*cp == '\n' &&
 			    (cp[1] == '\r' || cp[1] == '\n' ||
-			     !isspace((unsigned char)cp[1]))) {
+			     !isspace(UCH(cp[1])))) {
 			    *cp = ' ';
-			    while (isspace((unsigned char)*(cp-1))) {
+			    while (isspace(UCH(*(cp-1)))) {
 				skip_num++;
 				cp--;
 			    }
@@ -12661,7 +12661,7 @@ PUBLIC int HText_ExtEditForm ARGS1(
 	if (wanted_fieldlen_wrap > 0 && len0+len > wanted_fieldlen_wrap) {
 	    i = len-1;
 	    while (len0+i+1 > wanted_fieldlen_wrap &&
-		   isspace((unsigned char)lp[i]))
+		   isspace(UCH(lp[i])))
 		i--;
 	    if (len0+i+1 > wanted_fieldlen_wrap)
 		len = wanted_fieldlen_wrap - len0;
@@ -12677,7 +12677,7 @@ PUBLIC int HText_ExtEditForm ARGS1(
 	     *  First try to find a space character for wrapping - kw
 	     */
 	    for (i = MAX_LINE - len0 - 1; i > 0; i--) {
-		if (isspace((unsigned char)lp[i])) {
+		if (isspace(UCH(lp[i]))) {
 		    len = i;
 		    break;
 		}
@@ -12720,7 +12720,7 @@ PUBLIC int HText_ExtEditForm ARGS1(
 	 *  And do the next line of edited text, for the next anchor ...
 	 */
 	lp += len;
-	if (*lp && isspace((unsigned char)*lp)) lp++;
+	if (*lp && isspace(UCH(*lp))) lp++;
 
 	end_anchor = anchor_ptr;
 	anchor_ptr = anchor_ptr->next;
@@ -13281,7 +13281,7 @@ PRIVATE void redraw_part_of_line ARGS4(
 
 	    case LY_SOFT_HYPHEN:
 		if (*data != '\0' ||
-		    isspace((unsigned char)LastDisplayChar) ||
+		    isspace(UCH(LastDisplayChar)) ||
 		    LastDisplayChar == '-') {
 		    /*
 		     *  Ignore the soft hyphen if it is not the last
@@ -13305,7 +13305,7 @@ PRIVATE void redraw_part_of_line ARGS4(
 
 	    default:
 		i++;
-		if (text->T.output_utf8 && !isascii((unsigned char)buffer[0])) {
+		if (text->T.output_utf8 && !isascii(UCH(buffer[0]))) {
 		    if ((*buffer & 0xe0) == 0xc0) {
 			utf_extra = 1;
 		    } else if ((*buffer & 0xf0) == 0xe0) {
@@ -13337,7 +13337,7 @@ PRIVATE void redraw_part_of_line ARGS4(
 		    buffer[1] = '\0';
 		    data += utf_extra;
 		    utf_extra = 0;
-		} else if (HTCJK != NOCJK && !isascii((unsigned char)buffer[0])) {
+		} else if (HTCJK != NOCJK && !isascii(UCH(buffer[0]))) {
 		    /*
 		     *  For CJK strings, by Masanobu Kimura.
 		     */
@@ -13361,7 +13361,7 @@ PRIVATE void redraw_part_of_line ARGS4(
 #if 0	/* last-ditch attempt to prevent 0x9B to screen - disabled  */
 #if defined(UNIX) || defined(VMS)
 		    if (!dump_output_immediately &&
-			(unsigned char)buffer[0] == 128+27) {
+			UCH(buffer[0]) == 128+27) {
 			addstr("~^");
 			buffer[0] ^= 0xc0;
 		    }
@@ -13710,7 +13710,7 @@ PRIVATE void move_to_glyph ARGS10(
 
 	    case LY_SOFT_HYPHEN:
 		if (*data != '\0' ||
-		    isspace((unsigned char)LastDisplayChar) ||
+		    isspace(UCH(LastDisplayChar)) ||
 		    LastDisplayChar == '-') {
 		    /*
 		     *  Ignore the soft hyphen if it is not the last
@@ -13742,7 +13742,7 @@ PRIVATE void move_to_glyph ARGS10(
 		    if (i == XP - 1) {
 			i_after_tgt = i;
 		    } else if (i == XP - 2 && HTCJK != NOCJK &&
-			       !isascii((unsigned char)buffer[0])) {
+			       !isascii(UCH(buffer[0]))) {
 			i_after_tgt = i;
 			cp_tgt = NULL;
 			if (drawing) {
@@ -13800,7 +13800,7 @@ PRIVATE void move_to_glyph ARGS10(
 		    }
 
 		i++;
-		if (utf_flag && !isascii((unsigned char)buffer[0])) {
+		if (utf_flag && !isascii(UCH(buffer[0]))) {
 		    hadutf8 = YES;
 		    if ((*buffer & 0xe0) == 0xc0) {
 			utf_extra = 1;
@@ -13849,7 +13849,7 @@ PRIVATE void move_to_glyph ARGS10(
 		    buffer[1] = '\0';
 		    sdata += utf_extra; data += utf_extra;
 		    utf_extra = 0;
-		} else if (HTCJK != NOCJK && !isascii((unsigned char)buffer[0])) {
+		} else if (HTCJK != NOCJK && !isascii(UCH(buffer[0]))) {
 		    /*
 		     *  For CJK strings, by Masanobu Kimura.
 		     */
@@ -13877,7 +13877,7 @@ PRIVATE void move_to_glyph ARGS10(
 #if 0	/* last-ditch attempt to prevent 0x9B to screen - disabled  */
 #if defined(UNIX) || defined(VMS)
 			if (!dump_output_immediately &&
-			    (unsigned char)buffer[0] == 128+27) {
+			    UCH(buffer[0]) == 128+27) {
 			    addstr("~^");
 			    buffer[0] ^= 0xc0;
 			}
diff --git a/src/HTAlert.c b/src/HTAlert.c
index b698481d..28ea7867 100644
--- a/src/HTAlert.c
+++ b/src/HTAlert.c
@@ -24,6 +24,10 @@
 
 #include <HTParse.h>
 
+#if defined(HAVE_FTIME) && defined(HAVE_SYS_TIMEB_H)
+#include <sys/timeb.h>
+#endif
+
 /*	Issue a message about a problem.		HTAlert()
 **	--------------------------------
 */
@@ -125,7 +129,6 @@ PUBLIC void HTProgress ARGS1(
 #endif
 }
 
-#ifdef EXP_READPROGRESS
 PRIVATE char *sprint_bytes ARGS3(
 	char *,		s,
 	long,		n,
@@ -142,9 +145,9 @@ PRIVATE char *sprint_bytes ARGS3(
     }
 
     u = kbunits;
-    if (LYshow_kb_rate && (n >= 10 * kb_units))
+    if ((LYTransferRate == rateBYTES) && (n >= 10 * kb_units))
 	sprintf(s, "%ld", n/kb_units);
-    else if (LYshow_kb_rate && (n >= kb_units))
+    else if ((LYTransferRate == rateBYTES) && (n >= kb_units))
 	sprintf(s, "%.2g", ((double)n)/kb_units);
     else {
 	sprintf(s, "%ld", n);
@@ -155,7 +158,6 @@ PRIVATE char *sprint_bytes ARGS3(
 	sprintf(s + strlen(s), " %s", u);
     return u;
 }
-#endif /* EXP_READPROGRESS */
 
 /*	Issue a read-progress message.			HTReadProgress()
 **	------------------------------
@@ -164,83 +166,30 @@ PUBLIC void HTReadProgress ARGS2(
 	long,		bytes,
 	long,		total)
 {
-#ifdef WIN_EX	/* 1998/07/08 (Wed) 16:09:47 */
-
-#include <sys/timeb.h>
-#define	kb_units 1024L
-    static double now, first, last;
-    static long bytes_last;
-
-    double transfer_rate;
-    char line[MAX_LINE];
-    struct timeb tb;
-    char *units = "bytes";
-
-    ftime(&tb);
-    now = tb.time + (double)tb.millitm / 1000;
-
-    if (bytes == 0) {
-	first = last = now;
-	bytes_last = bytes;
-    } else if ((bytes > 0) && (now > first)) {
-	transfer_rate = (double)bytes / (now - first);   /* bytes/sec */
-
-	if (now != last) {
-	    last = now;
-	    bytes_last = bytes;
-	}
-	if (LYshow_kb_rate && (total >= kb_units || bytes >= kb_units)) {
-	    if (total > 0)
-		total /= 1024;
-	    bytes /= 1024;
-	    units = "KB";
-	}
-
-	if (total >  0)
-	    sprintf (line, "Read %3d%%, %ld of %ld %s.",
-		(int) (bytes * 100 / total), bytes, total, units);
-	else
-	    sprintf (line, "Read %ld %s of data.", bytes, units);
-
-	if (transfer_rate > 0.0) {
-	    int n;
-	    n = strlen(line);
-	    if (LYshow_kb_rate) {
-		sprintf (line + n, " %6.2f KB/sec.", transfer_rate / 1024.0);
-	    } else {
-		int t_rate;
-
-		t_rate = (int)transfer_rate;
-		if (t_rate < 1000)
-		    sprintf (line + n, " %6d bytes/sec.", t_rate);
-		else
-		    sprintf (line + n, " %6d,%03d bytes/sec.",
-					t_rate / 1000, t_rate % 1000);
-	    }
-	}
-	if (total <  0) {
-	    if (total < -1)
-		strcat(line, " (Press 'z' to abort)");
-	}
-	statusline(line);
-    }
-#else /* !WIN_EX */
-#ifdef EXP_READPROGRESS
     static long bytes_last, total_last;
     static long transfer_rate = 0;
     static char *line = NULL;
     char bytesp[80], totalp[80], transferp[80];
     int renew = 0;
     char *was_units;
-#if HAVE_GETTIMEOFDAY
+
+#ifdef HAVE_GETTIMEOFDAY
     struct timeval tv;
     int dummy = gettimeofday(&tv, (struct timezone *)0);
     double now = tv.tv_sec + tv.tv_usec/1000000. ;
     static double first, last, last_active;
 #else
+#if defined(HAVE_FTIME) && defined(HAVE_SYS_TIMEB_H)
+    static double now, first, last;
+    struct timeb tb;
+
+    ftime(&tb);
+    now = tb.time + (double)tb.millitm / 1000;
+#else
     time_t now = time((time_t *)0);  /* once per second */
     static time_t first, last, last_active;
 #endif
+#endif
 
     if (bytes == 0) {
 	first = last = last_active = now;
@@ -261,7 +210,7 @@ PUBLIC void HTReadProgress ARGS2(
 	 * rate is not constant when we have partial content in a proxy, so
 	 * interpolation lies - will check every second at least for sure.
 	 */
-#if HAVE_GETTIMEOFDAY
+#ifdef HAVE_GETTIMEOFDAY
 	if (now >= last + 0.2)
 	    renew = 1;
 #else
@@ -284,92 +233,37 @@ PUBLIC void HTReadProgress ARGS2(
 	    else
 		was_units = 0;
 	    sprint_bytes(bytesp, bytes, was_units);
-	    sprint_bytes(transferp, transfer_rate, 0);
 
 	    if (total > 0)
 		HTSprintf0 (&line, gettext("Read %s of %s of data"), bytesp, totalp);
 	    else
 		HTSprintf0 (&line, gettext("Read %s of data"), bytesp);
-	    if (transfer_rate > 0)
-		HTSprintf (&line, gettext(", %s/sec"), transferp);
-	    if (now - last_active >= 5)
-		HTSprintf (&line, gettext(" (stalled for %ld sec)"), (long)(now - last_active));
-	    if (total > 0 && transfer_rate)
-		HTSprintf (&line, gettext(", ETA %ld sec"), (long)((total - bytes)/transfer_rate));
-	    StrAllocCat (line, ".");
-	    if (total < -1)
-		StrAllocCat(line, gettext(" (Press 'z' to abort)"));
-
-	    /* do not store the message for history page. */
-	    statusline(line);
-	    CTRACE((tfp, "%s\n", line));
-	}
-    }
-#else /* !EXP_READPROGRESS */
-    static long kb_units = 1024;
-    static time_t first, last;
-    static long bytes_last;
-    static long transfer_rate = 0;
-    static char *line = NULL;
-    long divisor;
-    time_t now = time((time_t *)0);  /* once per second */
-    static char *units = "bytes";
-
-    if (bytes == 0) {
-	first = last = now;
-	bytes_last = bytes;
-    } else if ((bytes > 0) &&
-	       (now != first))
-		/* 1 sec delay for transfer_rate calculation :-( */ {
-	if (transfer_rate <= 0)    /* the very first time */
-	    transfer_rate = (bytes) / (now - first);   /* bytes/sec */
 
-	/*
-	 * Optimal refresh time:  every 0.2 sec, use interpolation.  Transfer
-	 * rate is not constant when we have partial content in a proxy, so
-	 * interpolation lies - will check every second at least for sure.
-	 */
-	if (((bytes - bytes_last) > (transfer_rate / 5)) || (now != last)) {
-
-	    bytes_last += (transfer_rate / 5);	/* until we got next second */
-
-	    if (now != last) {
-		last = now;
-		bytes_last = bytes;
-		transfer_rate = (bytes_last) / (last - first); /* more accurate here */
+	    if (LYTransferRate != rateOFF
+	     && transfer_rate > 0) {
+		sprint_bytes(transferp, transfer_rate, 0);
+		HTSprintf (&line, gettext(", %s/sec"), transferp);
 	    }
 
-	    units = gettext("bytes");
-	    divisor = 1;
-	    if (LYshow_kb_rate
-	      && (total >= kb_units || bytes >= kb_units)) {
-		units = gettext("KB");
-		divisor = kb_units;
-		bytes /= divisor;
-		if (total > 0) total /= divisor;
+#ifdef EXP_READPROGRESS
+	    if (LYTransferRate == rateEtaBYTES
+	     || LYTransferRate == rateEtaKB) {
+		if (now - last_active >= 5)
+		    HTSprintf (&line, gettext(" (stalled for %ld sec)"), (long)(now - last_active));
+		if (total > 0 && transfer_rate)
+		    HTSprintf (&line, gettext(", ETA %ld sec"), (long)((total - bytes)/transfer_rate));
 	    }
+#endif
 
-	    if (total >  0)
-		HTSprintf0 (&line, gettext("Read %ld of %ld %s of data"), bytes, total, units);
-	    else
-		HTSprintf0 (&line, gettext("Read %ld %s of data"), bytes, units);
-	    if ((transfer_rate > 0)
-		  && (!LYshow_kb_rate || (bytes * divisor >= kb_units)))
-		HTSprintf (&line, gettext(", %ld %s/sec."), transfer_rate / divisor, units);
-	    else
-		HTSprintf (&line, ".");
-	    if (total <  0) {
-		if (total < -1)
-		    StrAllocCat(line, gettext(" (Press 'z' to abort)"));
-	    }
+	    StrAllocCat (line, ".");
+	    if (total < -1)
+		StrAllocCat(line, gettext(" (Press 'z' to abort)"));
 
 	    /* do not store the message for history page. */
 	    statusline(line);
 	    CTRACE((tfp, "%s\n", line));
 	}
     }
-#endif /* EXP_READPROGRESS */
-#endif /* WIN_EX */
 }
 
 PRIVATE BOOL conf_cancelled = NO; /* used by HTConfirm only - kw */
@@ -464,7 +358,7 @@ PUBLIC int HTConfirmDefault ARGS2(CONST char *, Msg, int, Dft)
 		c = TOUPPER(*msg_no);
 	    }
 #endif /* VMS */
-	    if (c == 7 || c == 3) { /* remember we had ^G or ^C */
+	    if (LYCharIsINTERRUPT(c)) { /* remember we had ^G or ^C */
 		conf_cancelled = YES;
 		result = NO;
 	    } else if (c == TOUPPER(*msg_yes)) {
@@ -916,8 +810,8 @@ PUBLIC BOOL HTConfirmCookie ARGS4(
 		return TRUE;
 
 	    case 'N':
-	    case 7:	/* Ctrl-G */
-	    case 3:	/* Ctrl-C */
+	    case LYCharINTERRUPT2:	/* Ctrl-G */
+	    case LYCharINTERRUPT1:	/* Ctrl-C */
 		/*
 		**  Reject the cookie.
 		*/
diff --git a/src/HTFWriter.c b/src/HTFWriter.c
index 6329cdc0..0ac88e8e 100644
--- a/src/HTFWriter.c
+++ b/src/HTFWriter.c
@@ -826,7 +826,7 @@ PUBLIC HTStream* HTSaveToFile ARGS3(
 	    _statusline(CANNOT_DISPLAY_FILE_D_OR_C);
 	}
 
-	while (c != 'D' && c != 'C' && c != 7) {
+	while (c != 'D' && c != 'C' && !LYCharIsINTERRUPT(c)) {
 	    c = LYgetch_single();
 #ifdef VMS
 	    /*
@@ -843,7 +843,7 @@ PUBLIC HTStream* HTSaveToFile ARGS3(
 	/*
 	 *  Cancel on 'C', 'c' or Control-G or Control-C.
 	 */
-	if (c == 'C' || c == 7) {
+	if (c == 'C' || LYCharIsINTERRUPT(c)) {
 	    _statusline(CANCELLING_FILE);
 	    LYCancelDownload = TRUE;
 	    FREE(ret_obj);
diff --git a/src/HTML.c b/src/HTML.c
index f346f2de..0fbce76f 100644
--- a/src/HTML.c
+++ b/src/HTML.c
@@ -428,13 +428,13 @@ PUBLIC void HTML_put_character ARGS2(HTStructured *, me, char, c)
 #if 0 /* Should this check be done in HText_appendCharacter? */
 		if (last_kcode == EUC) {
 		    if (save_ch1 && !save_ch2) {
-			if ((unsigned char)c & 0x80) {
+			if (UCH(c) & 0x80) {
 			    save_ch2 = c;
 			}
 			HText_appendCharacter(me->text, save_ch1);
 			HText_appendCharacter(me->text, save_ch2);
 			save_ch1 = save_ch2 = '\0';
-		    } else if ((unsigned char)c & 0x80) {
+		    } else if (UCH(c) & 0x80) {
 			save_ch1 = c;
 			save_ch2 = '\0';
 		    } else {
@@ -955,6 +955,7 @@ PRIVATE int HTML_start_element ARGS6(
     int status = HT_OK;
 #ifdef USE_COLOR_STYLE
     char* class_name;
+    int class_used = 0;
 #  if OPT_SCN
 #    if !OMIT_SCN_KEEPING
     char* Style_className_end_was = Style_className_end+1;
@@ -1100,8 +1101,9 @@ PRIVATE int HTML_start_element ARGS6(
 	force_current_tag_style = FALSE;
     }
 
+    CTRACE((tfp, "CSS.elt:<%s>\n", HTML_dtd.tags[element_number].name));
 
-    if (current_tag_style == -1) {
+    if (current_tag_style == -1) {	/* Append class_name */
 #if !OPT_SCN
 	strcpy (myHash, HTML_dtd.tags[element_number].name);
 #else
@@ -1109,6 +1111,8 @@ PRIVATE int HTML_start_element ARGS6(
 #endif
 	if (class_name[0])
 	{
+	    int ohcode = hcode;
+	    char *oend = Style_className_end;
 #if !OPT_SCN
 	    int len = strlen(myHash);
 	    sprintf(myHash, ".%.*s", (int)sizeof(myHash) - len - 2, class_name);
@@ -1124,7 +1128,18 @@ PRIVATE int HTML_start_element ARGS6(
 	    hcode = hash_code_aggregate_char('.', hcode);
 	    hcode = hash_code_aggregate_lower_str(class_name, hcode);
 #endif
+	    if (!hashStyles[hcode].name) { /* None such -> classless version */
+		hcode = ohcode;
+		*oend = '\0';
+		CTRACE((tfp, "STYLE.start_element: <%s> (class <%s> not configured), hcode=%d.\n",
+			HTML_dtd.tags[element_number].name, class_name, hcode));
+	    } else {
+		CTRACE((tfp, "STYLE.start_element: <%s>.<%s>, hcode=%d.\n",
+			HTML_dtd.tags[element_number].name, class_name, hcode));
+		class_used = 1;
+	    }
 	}
+
 #if !OPT_SCN
 	strtolower(myHash);
 	hcode = hash_code(myHash);
@@ -1155,13 +1170,6 @@ PRIVATE int HTML_start_element ARGS6(
 	    fprintf(tfp, " ca=%d\n", hashStyles[hcode].color);
     }
 #endif
-
-	/* seems that this condition is always true - HV */
-	if (displayStyles[element_number + STARTAT].color > -2) /* actually set */
-	{
-	    CTRACE((tfp, "CSSTRIM: start_element: top <%s>\n", HTML_dtd.tags[element_number].name));
-	    HText_characterStyle(me->text, hcode, 1);
-	}
     } else { /* (current_tag_style!=-1)	 */
 	if (class_name[0]) {
 #if !OPT_SCN
@@ -1179,7 +1187,8 @@ PRIVATE int HTML_start_element ARGS6(
 	    class_string[0] = '\0';
 	}
 	hcode = current_tag_style;
-	HText_characterStyle(me->text, hcode , 1);
+	CTRACE((tfp, "STYLE.start_element: <%s>, hcode=%d.\n",
+		HTML_dtd.tags[element_number].name, hcode));
 	current_tag_style = -1;
     }
 
@@ -1192,8 +1201,33 @@ PRIVATE int HTML_start_element ARGS6(
 #   endif
 #endif
 
+#if OPT_SCN && !OMIT_SCN_KEEPING	/* Can be done in other cases too... */
+    if (!class_used && ElementNumber == HTML_INPUT) { /* For some other too? */
+	char *type = "", *oend = Style_className_end;
+	int l, ohcode = hcode;
+
+	if (present && present[HTML_INPUT_TYPE] && value[HTML_INPUT_TYPE])
+	    type = (char *)value[HTML_INPUT_TYPE];
+	l = strlen(type);
+
+	*Style_className_end = '.';
+	memcpy(Style_className_end+1, "type.", 5 );
+	memcpy(Style_className_end+6, type, l+1 );
+	Style_className_end += l+6;
+	hcode = hash_code_aggregate_lower_str(".type.", hcode);
+	hcode = hash_code_aggregate_lower_str(type, hcode);
+	if (!hashStyles[hcode].name) { /* None such -> classless version */
+	    hcode = ohcode;
+	    *oend = '\0';
+	    CTRACE((tfp, "STYLE.start_element: type <%s> not configured.\n", type));
+	} else {
+	    CTRACE((tfp, "STYLE.start_element: <%s>.type.<%s>, hcode=%d.\n",
+		    HTML_dtd.tags[element_number].name, type, hcode));
+	}
+    }
+#endif	/* OPT_SCN && !OMIT_SCN_KEEPING */
 
-
+    HText_characterStyle(me->text, hcode, 1);
 #endif /* USE_COLOR_STYLE */
 
     /*
@@ -1642,7 +1676,7 @@ PRIVATE int HTML_start_element ARGS6(
 	    {
 		char *tmp = 0;
 		HTSprintf0(&tmp, "link.%s.%s", value[HTML_LINK_CLASS], title);
-		CTRACE((tfp, "CSSTRIM:link=%s\n", tmp));
+		CTRACE((tfp, "STYLE.link: using style <%s>\n", tmp));
 
 		HText_characterStyle(me->text, hash_code(tmp), 1);
 		HTML_put_string(me, title);
@@ -2170,7 +2204,7 @@ PRIVATE int HTML_start_element ARGS6(
 	    width = LYcols - 1 -
 		    me->new_style->leftIndent - me->new_style->rightIndent;
 	    if (present && present[HTML_HR_WIDTH] && value[HTML_HR_WIDTH] &&
-		isdigit(*value[HTML_HR_WIDTH]) &&
+		isdigit(UCH(*value[HTML_HR_WIDTH])) &&
 		value[HTML_HR_WIDTH][strlen(value[HTML_HR_WIDTH])-1] == '%') {
 		char *percent = NULL;
 		int Percent, Width;
@@ -2268,7 +2302,7 @@ PRIVATE int HTML_start_element ARGS6(
 		    value[HTML_TAB_TO] && *value[HTML_TAB_TO]) ||
 		   (present[HTML_TAB_INDENT] &&
 		    value[HTML_TAB_INDENT] &&
-		    isdigit(*value[HTML_TAB_INDENT]))) {
+		    isdigit(UCH(*value[HTML_TAB_INDENT])))) {
 	    int column, target = -1;
 	    int enval = 2;
 
@@ -2284,7 +2318,7 @@ PRIVATE int HTML_start_element ARGS6(
 		}
 	    } else if (!(temp && *temp) && present[HTML_TAB_INDENT] &&
 		       value[HTML_TAB_INDENT] &&
-		       isdigit(*value[HTML_TAB_INDENT])) {
+		       isdigit(UCH(*value[HTML_TAB_INDENT]))) {
 		/*
 		 *  The INDENT value is in "en" (enval per column) units.
 		 *  Divide it by enval, rounding odd values up. - FM
@@ -2399,7 +2433,7 @@ PRIVATE int HTML_start_element ARGS6(
 	break; /* ignore */
 
     case HTML_SUP:
-	if (isxdigit((unsigned char)HText_getLastChar(me->text))) {
+	if (isxdigit(UCH(HText_getLastChar(me->text)))) {
 	    HText_appendCharacter(me->text, '^');
 	}
 	CHECK_ID(HTML_GEN_ID);
@@ -2828,9 +2862,9 @@ PRIVATE int HTML_start_element ARGS6(
 		if (present && present[HTML_LI_VALUE] &&
 		    ((value[HTML_LI_VALUE] != NULL) &&
 		     (*value[HTML_LI_VALUE] != '\0')) &&
-		    ((isdigit(*value[HTML_LI_VALUE])) ||
+		    ((isdigit(UCH(*value[HTML_LI_VALUE]))) ||
 		     (*value[HTML_LI_VALUE] == '-' &&
-		      isdigit(*(value[HTML_LI_VALUE] + 1))))) {
+		      isdigit(UCH(*(value[HTML_LI_VALUE] + 1)))))) {
 		    seqnum = atoi(value[HTML_LI_VALUE]);
 		    if (seqnum <= OL_VOID)
 			seqnum = OL_VOID + 1;
@@ -5068,7 +5102,7 @@ PRIVATE int HTML_start_element ARGS6(
 		 */
 	    }
 
-	    CTRACE((tfp, "Ok, we're trying [%s]\n", NONNULL(I.type)));
+	    CTRACE((tfp, "Ok, we're trying type=[%s]\n", NONNULL(I.type)));
 
 	    /*
 	     *	Check for an unclosed TEXTAREA.
@@ -5177,7 +5211,7 @@ PRIVATE int HTML_start_element ARGS6(
 		}
 		FREE(href);
 	    }
-	    CTRACE((tfp, "2.Ok, we're trying [%s] (present=%p)\n", NONNULL(I.type), present));
+	    CTRACE((tfp, "2.Ok, we're trying type=[%s] (present=%p)\n", NONNULL(I.type), present));
 	    /* text+file don't go in here */
 	    if ((UseALTasVALUE == TRUE) ||
 		(present && present[HTML_INPUT_VALUE] &&
@@ -5202,7 +5236,7 @@ PRIVATE int HTML_start_element ARGS6(
 		    HTMLSetCharacterHandling(current_char_set);
 		}
 
-		CTRACE((tfp, "3.Ok, we're trying [%s]\n", NONNULL(I.type)));
+		CTRACE((tfp, "3.Ok, we're trying type=[%s]\n", NONNULL(I.type)));
 		if (!I.type)
 		    me->UsePlainSpace = TRUE;
 		else if (!strcasecomp(I.type, "text") ||
@@ -5223,7 +5257,7 @@ PRIVATE int HTML_start_element ARGS6(
 		if (me->UsePlainSpace && !me->HiddenValue) {
 		    I.value_cs = current_char_set;
 		}
-		CTRACE((tfp, "4.Ok, we're trying [%s]\n", NONNULL(I.type)));
+		CTRACE((tfp, "4.Ok, we're trying type=[%s]\n", NONNULL(I.type)));
 		TRANSLATE_AND_UNESCAPE_ENTITIES6(
 		    &I_value,
 		    ATTR_CS_IN,
@@ -5503,7 +5537,7 @@ PRIVATE int HTML_start_element ARGS6(
 
 	if (present && present[HTML_TEXTAREA_COLS] &&
 	    value[HTML_TEXTAREA_COLS] &&
-	    isdigit((unsigned char)*value[HTML_TEXTAREA_COLS]))
+	    isdigit(UCH(*value[HTML_TEXTAREA_COLS])))
 	    StrAllocCopy(me->textarea_cols, value[HTML_TEXTAREA_COLS]);
 	else {
 	    int width;
@@ -5520,7 +5554,7 @@ PRIVATE int HTML_start_element ARGS6(
 
 	if (present && present[HTML_TEXTAREA_ROWS] &&
 	    value[HTML_TEXTAREA_ROWS] &&
-	    isdigit((unsigned char)*value[HTML_TEXTAREA_ROWS]))
+	    isdigit(UCH(*value[HTML_TEXTAREA_ROWS])))
 	    me->textarea_rows = atoi(value[HTML_TEXTAREA_ROWS]);
 	else
 	    me->textarea_rows = 4;
@@ -5978,7 +6012,7 @@ PRIVATE int HTML_start_element ARGS6(
 	    int span = 1;
 	    if (present && present[HTML_COL_SPAN] &&
 		value[HTML_COL_SPAN] &&
-		isdigit((unsigned char)*value[HTML_COL_SPAN]))
+		isdigit(UCH(*value[HTML_COL_SPAN])))
 		span = atoi(value[HTML_COL_SPAN]);
 	    if (present && present[HTML_COL_ALIGN] && value[HTML_COL_ALIGN]) {
 		if (!strcasecomp(value[HTML_COL_ALIGN], "center")) {
@@ -6017,11 +6051,11 @@ PRIVATE int HTML_start_element ARGS6(
 	    int colspan = 1, rowspan = 1;
 	    if (present && present[HTML_TD_COLSPAN] &&
 		value[HTML_TD_COLSPAN] &&
-		isdigit((unsigned char)*value[HTML_TD_COLSPAN]))
+		isdigit(UCH(*value[HTML_TD_COLSPAN])))
 		colspan = atoi(value[HTML_TD_COLSPAN]);
 	    if (present && present[HTML_TD_ROWSPAN] &&
 		value[HTML_TD_ROWSPAN] &&
-		isdigit((unsigned char)*value[HTML_TD_ROWSPAN]))
+		isdigit(UCH(*value[HTML_TD_ROWSPAN])))
 		rowspan = atoi(value[HTML_TD_ROWSPAN]);
 	    if (present && present[HTML_TD_ALIGN] && value[HTML_TD_ALIGN]) {
 		if (!strcasecomp(value[HTML_TD_ALIGN], "center")) {
@@ -6098,7 +6132,7 @@ PRIVATE int HTML_start_element ARGS6(
 
     if (ReallyEmptyTagNum(element_number))
     {
-	CTRACE((tfp, "STYLE:begin_element:ending EMPTY element style\n"));
+	CTRACE((tfp, "STYLE.begin_element:ending \"EMPTY\" element style\n"));
 #if !defined(USE_HASH)
 	HText_characterStyle(me->text, element_number+STARTAT, STACK_OFF);
 #else
@@ -6309,11 +6343,11 @@ PRIVATE int HTML_end_element ARGS3(
 		     *  being called for. - kw
 		     */
 		    CTRACE((tfp,
-		        "HTML:end_element[%d]: %s (level %d), %s - %s\n",
+			"HTML:end_element[%d]: %s (level %d), %s - %s\n",
 			(int) STACKLEVEL(me),
-		        "Special OBJECT->FIG handling", me->objects_figged_open,
-		        "treating as end FIG",
-		        NONNULL(me->sp->style->name)));
+			"Special OBJECT->FIG handling", me->objects_figged_open,
+			"treating as end FIG",
+			NONNULL(me->sp->style->name)));
 		    me->objects_figged_open--;
 		    element_number = HTML_FIG;
 		}
@@ -7714,7 +7748,8 @@ End_Object:
 
 	if (!ReallyEmptyTagNum(element_number))
 	{
-	    CTRACE((tfp, "STYLE:end_element: ending non-EMPTY style\n"));
+	    CTRACE((tfp, "STYLE.end_element: ending non-\"EMPTY\" style <%s...>\n",
+		    HTML_dtd.tags[element_number].name));
 #if !defined(USE_HASH)
 	    HText_characterStyle(me->text, element_number+STARTAT, STACK_OFF);
 #else
diff --git a/src/LYBookmark.c b/src/LYBookmark.c
index 6e75e9aa..512c9af0 100644
--- a/src/LYBookmark.c
+++ b/src/LYBookmark.c
@@ -698,11 +698,10 @@ get_advanced_choice:
 #ifdef VMS
 	if (HadVMSInterrupt) {
 	    HadVMSInterrupt = FALSE;
-	    c = 7;
+	    c = LYCharINTERRUPT2;
 	}
 #endif /* VMS */
-	if (LYisNonAlnumKeyname(c, LYK_PREV_DOC) ||
-	    c == 7 || c == 3) {
+	if (LYisNonAlnumKeyname(c, LYK_PREV_DOC) || LYCharIsINTERRUPT(c)) {
 	    /*
 	     *	Treat left-arrow, ^G, or ^C as cancel.
 	     */
@@ -839,7 +838,7 @@ draw_bookmark_choices:
     MBM_tmp_count = 0;
     for (c = MBM_from; c <= MBM_to; c++) {
 	move(3+MBM_tmp_count, 5);
-	addch((unsigned char)(c + 'A'));
+	addch(UCH((c + 'A')));
 	addstr(" : ");
 	if (MBM_A_subdescript[c])
 	    addstr(MBM_A_subdescript[c]);
@@ -986,7 +985,7 @@ PRIVATE  BOOLEAN havevisible ARGS1(CONST char *, Title)
     long unicode;
 
     for ( ; *p; p++) {
-	c = (unsigned char)(TOASCII(*p));
+	c = UCH(TOASCII(*p));
 	if (c > 32 && c < 127)
 	    return(TRUE);
 	if (c <= 32 || c == 127)
@@ -1013,7 +1012,7 @@ PRIVATE  BOOLEAN have8bit ARGS1(CONST char *, Title)
     CONST char *p = Title;
 
     for ( ; *p; p++) {
-	if ((unsigned char)*p > 127)
+	if (UCH(*p) > 127)
 	return(TRUE);
     }
     return(FALSE); /* if we came here */
@@ -1052,7 +1051,7 @@ PRIVATE  char* title_convert8bit ARGS1(CONST char *, Title)
     for ( ; *p; p++) {
 	char temp[2];
 	LYstrncpy(temp, p, sizeof(temp)-1);
-	if ((unsigned char)*temp <= 127) {
+	if (UCH(*temp) <= 127) {
 	    StrAllocCat(comment, temp);
 	    StrAllocCat(ncr, temp);
 	} else {
@@ -1077,7 +1076,7 @@ PRIVATE  char* title_convert8bit ARGS1(CONST char *, Title)
      *  skip '>'.
      */
     for (q = p0 = comment; *p0; p0++) {
-	if ((unsigned char)(TOASCII(*p0)) >= 32 &&
+	if (UCH(TOASCII(*p0)) >= 32 &&
 	    *p0 != '>' &&
 	    (q == comment || *p0 != '-' || *(q-1) != '-')) {
 	    *q++ = *p0;
diff --git a/src/LYCharUtils.c b/src/LYCharUtils.c
index b3e09e74..87b5b728 100644
--- a/src/LYCharUtils.c
+++ b/src/LYCharUtils.c
@@ -190,9 +190,9 @@ PUBLIC void LYEntify ARGS2(
 		    break;
 	    }
 	    if (*(p+1) != '\0' &&
-		(IS_EUC((unsigned char)*p, (unsigned char)*(p+1)) ||
-		 IS_SJIS((unsigned char)*p, (unsigned char)*(p+1), in_sjis) ||
-		 IS_BIG5((unsigned char)*p, (unsigned char)*(p+1)))) {
+		(IS_EUC(UCH(*p), UCH(*(p+1))) ||
+		 IS_SJIS(UCH(*p), UCH(*(p+1)), in_sjis) ||
+		 IS_BIG5(UCH(*p), UCH(*(p+1))))) {
 		*q++ = *p++;
 		*q++ = *p;
 		continue;
@@ -237,7 +237,7 @@ PUBLIC void LYTrimHead ARGS1(
     if (!str || *str == '\0')
 	return;
 
-    while (str[i] != '\0' && WHITE(str[i]) && (unsigned char)str[i] != (unsigned char)CH_ESC)   /* S/390 -- gil -- 1669 */
+    while (str[i] != '\0' && WHITE(str[i]) && UCH(str[i]) != UCH(CH_ESC))   /* S/390 -- gil -- 1669 */
 	i++;
     if (i > 0) {
 	for (j = 0; str[i] != '\0'; i++) {
@@ -358,7 +358,7 @@ PUBLIC char *LYFindEndOfComment ARGS1(
 		    return cp;
 		if (*cp == '-') {
 		    state = start1;
-		} else if (!(WHITE(*cp) && (unsigned char)*cp != (unsigned char)CH_ESC)) {  /* S/390 -- gil -- 1686 */
+		} else if (!(WHITE(*cp) && UCH(*cp) != UCH(CH_ESC))) {  /* S/390 -- gil -- 1686 */
 		    /*
 		     *	Invalid comment, so return the first
 		     *	'>' from the start of the string. - FM
@@ -1029,7 +1029,7 @@ PUBLIC void LYExpandString ARGS2(
 	**  whenever that's appropriate.  - FM
 	*/
 	c = p[i];
-	c_unsign = (unsigned char)c;
+	c_unsign = UCH(c);
 	code = (UCode_t)c_unsign;
 	saved_char_in = '\0';
 	/*
@@ -1070,7 +1070,7 @@ PUBLIC void LYExpandString ARGS2(
 			*/
 			if (code > 0 && code < 256) {
 			    c = ((char)(code & 0xff));
-			    c_unsign = (unsigned char)c;
+			    c_unsign = UCH(c);
 			}
 		    } else {
 			/*
@@ -1139,7 +1139,7 @@ PUBLIC void LYExpandString ARGS2(
 	**  to Unicode (if appropriate). - FM
 	*/
 	if (!(me->T.decode_utf8 &&
-	      (unsigned char)p[i] > 127)) {
+	      UCH(p[i]) > 127)) {
 #ifdef NOTDEFINED
 	    if (me->T.strip_raw_char_in)
 		saved_char_in = c;
@@ -1156,7 +1156,7 @@ PUBLIC void LYExpandString ARGS2(
 		    saved_char_in = c;
 		    if (code < 256) {
 			c = ((char)(code & 0xff));
-			c_unsign = (unsigned char)c;
+			c_unsign = UCH(c);
 		    }
 		}
 	    } else if (code < ' ' && code != 0 &&  /* S/390 -- gil -- 1720 */
@@ -1172,7 +1172,7 @@ PUBLIC void LYExpandString ARGS2(
 		    saved_char_in = c;
 		    if (code < 256) {
 			c = ((char)(code & 0xff));
-			c_unsign = (unsigned char)c;
+			c_unsign = UCH(c);
 		    }
 		} else {
 		    uck = -1;
@@ -1190,7 +1190,7 @@ PUBLIC void LYExpandString ARGS2(
 			continue;
 		    } else if (uck < 0) {
 			utf_buf[0] = '\0';
-			code = (unsigned char)c;
+			code = UCH(c);
 		    } else {
 			c = replace_buf[0];
 			if (c && replace_buf[1]) {
@@ -1199,11 +1199,11 @@ PUBLIC void LYExpandString ARGS2(
 			}
 		    }
 		    utf_buf[0] = '\0';
-		    code = (unsigned char)c;
+		    code = UCH(c);
 		} /*  Next line end of ugly stuff for C0. - KW */
 	    } else {
 		utf_buf[0] = '\0';
-		code = (unsigned char)c;
+		code = UCH(c);
 	    }
 	}
 	/*
@@ -1397,8 +1397,8 @@ PUBLIC void LYExpandString ARGS2(
 	**  Check for a strippable koi8-r 8-bit character. - FM
 	*/
 	if (me->T.strip_raw_char_in &&
-	    (unsigned char)saved_char_in >= 192 &&
-	    (unsigned char)saved_char_in < 255 &&
+	    UCH(saved_char_in) >= 192 &&
+	    UCH(saved_char_in) < 255 &&
 	    saved_char_in) {
 	    /*
 	    **	KOI8 special: strip high bit, gives (somewhat) readable
@@ -1765,18 +1765,18 @@ PUBLIC char ** LYUCFullyTranslateString ARGS9(
     while (*p || (state != S_text && state != S_nonascii_text)) {
 	switch(state) {
 	case S_text:
-	    code = (unsigned char)(*p);
+	    code = UCH(*p);
 #ifdef KANJI_CODE_OVERRIDE
 	    if (HTCJK == JAPANESE && last_kcode == SJIS) {
 		if (sjis_1st == '\0' && (IS_SJIS_HI1(code)||IS_SJIS_HI2(code))){
-		    sjis_1st = (unsigned char)code;
+		    sjis_1st = UCH(code);
 		} else if (sjis_1st && IS_SJIS_LO(code)) {
 		    sjis_1st = '\0';
 		} else {
 #ifdef CONV_JISX0201KANA_JISX0208KANA
 		    if (0xA1 <= code && code <= 0xDF) {
 			sjis_str[2] = '\0';
-			JISx0201TO0208_SJIS((unsigned char)code,
+			JISx0201TO0208_SJIS(UCH(code),
 						sjis_str, sjis_str + 1);
 			REPLACE_STRING(sjis_str);
 			p++;
@@ -1915,7 +1915,7 @@ PUBLIC char ** LYUCFullyTranslateString ARGS9(
 			    state = S_check_uni;
 			    break;
 			} else {
-			    *(unsigned char *)p = (unsigned char)160;
+			    *(unsigned char *)p = UCH(160);
 			}
 		    }
 		} else if ((*p) == LY_SOFT_HYPHEN) {
@@ -1929,7 +1929,7 @@ PUBLIC char ** LYUCFullyTranslateString ARGS9(
 			state = S_check_uni;
 			break;
 		    } else {
-			*(unsigned char *)p = (unsigned char)173;
+			*(unsigned char *)p = UCH(173);
 		    }
 		} else if (code < 127 || T.transp) {
 		    state = S_got_outchar;
@@ -1952,7 +1952,7 @@ PUBLIC char ** LYUCFullyTranslateString ARGS9(
 		    puni = p;
 		    code = UCGetUniFromUtf8String(&puni);
 		    if (code <= 0) {
-			code = (unsigned char)(*p);
+			code = UCH(*p);
 		    } else {
 			what = P_utf8;
 		    }
@@ -1971,12 +1971,12 @@ PUBLIC char ** LYUCFullyTranslateString ARGS9(
 		code = UCTransToUni(*p, cs_from);
 		if (code <= 0) {
 		    /* What else can we do? */
-		    code = (unsigned char)(*p);
+		    code = UCH(*p);
 		}
 #ifdef NOTUSED_FOTEMODS
 	    } else if (T.strip_raw_char_in &&
-		       (unsigned char)(*p) >= 0xc0 &&
-		       (unsigned char)(*p) < 255) {
+		       UCH(*p) >= 0xc0 &&
+		       UCH(*p) < 255) {
 		code = ((*p & 0x7f));
 		state = S_got_outchar;
 		break;
@@ -2008,17 +2008,17 @@ PUBLIC char ** LYUCFullyTranslateString ARGS9(
 		*/
 		if (*pp == '#' && len > 2 &&
 		    (*(pp+1) == 'x' || *(pp+1) == 'X') &&
-		    (unsigned char)*(pp+2) < 127 &&
-		    isxdigit((unsigned char)*(pp+2))) {
+		    UCH(*(pp+2)) < 127 &&
+		    isxdigit(UCH(*(pp+2)))) {
 		    what = P_hex;
 		    state = S_ncr;
 		} else if (*pp == '#' && len > 2 &&
-			   (unsigned char)*(pp+1) < 127 &&
-			   isdigit((unsigned char)*(pp+1))) {
+			   UCH(*(pp+1)) < 127 &&
+			   isdigit(UCH(*(pp+1)))) {
 		    what = P_decimal;
 		    state = S_ncr;
-		} else if ((unsigned char)*pp < 127 &&
-			   isalpha((unsigned char)*pp)) {
+		} else if (UCH(*pp) < 127 &&
+			   isalpha(UCH(*pp))) {
 		    what = P_named;
 		    state = S_named;
 		} else {
@@ -2036,9 +2036,9 @@ PUBLIC char ** LYUCFullyTranslateString ARGS9(
 		    p += 2;
 		}
 		cp = p;
-		while (*p && (unsigned char)*p < 127 &&
-		       (what == P_hex ? isxdigit((unsigned char)*p) :
-					isdigit((unsigned char)*p))) {
+		while (*p && UCH(*p) < 127 &&
+		       (what == P_hex ? isxdigit(UCH(*p)) :
+					isdigit(UCH(*p)))) {
 		    p++;
 		}
 		/*
@@ -2417,27 +2417,27 @@ PUBLIC char ** LYUCFullyTranslateString ARGS9(
 		state = S_done;
 #ifdef NOTUSED_FOTEMODS
 	    } else if (T.strip_raw_char_in &&
-		(unsigned char)(*p) >= 0xc0 &&
-		(unsigned char)(*p) < 255) {
+		UCH(*p) >= 0xc0 &&
+		UCH(*p) < 255) {
 		code = (((*p) & 0x7f));
 		state = S_got_outchar;
 #endif /* NOTUSED_FOTEMODS */
 	    } else if (!T.output_utf8 && stype == st_HTML && !hidden &&
 		!(HTPassEightBitRaw &&
-		 (unsigned char)(*p) >= lowest_8)) {
+		 UCH(*p) >= lowest_8)) {
 		sprintf(replace_buf, "U%.2lX", code);
 		state = S_got_outstring;
 	    } else {
 		puni = p;
-		code = (unsigned char)(*p);
+		code = UCH(*p);
 		state = S_got_outchar;
 	    }
 	    break;
 
 	case S_named:
 	    cp = ++p;
-	    while (*cp && (unsigned char)*cp < 127 &&
-		   isalnum((unsigned char)*cp))
+	    while (*cp && UCH(*cp) < 127 &&
+		   isalnum(UCH(*cp)))
 		cp++;
 	    cpe = *cp;
 	    *cp = '\0';
@@ -2735,9 +2735,9 @@ PUBLIC void LYHandleMETA ARGS4(
 			cp++;
 			while (*cp != '\0' && WHITE(*cp))
 			    cp++;
-			if (isdigit((unsigned char)*cp)) {
+			if (isdigit(UCH(*cp))) {
 			    cp0 = cp;
-			    while (isdigit((unsigned char)*cp))
+			    while (isdigit(UCH(*cp)))
 				cp++;
 			    if (*cp0 == '0' && cp == (cp0 + 1)) {
 				me->node_anchor->no_cache = TRUE;
@@ -2926,7 +2926,7 @@ PUBLIC void LYHandleMETA ARGS4(
 		 */
 		BOOL given_is_8859
 		    = (BOOL) (!strncmp(cp4, "iso-8859-", 9) &&
-		       isdigit((unsigned char)cp4[9]));
+		       isdigit(UCH(cp4[9])));
 		BOOL given_is_8859like
 		    = (BOOL) (given_is_8859 || !strncmp(cp4, "windows-", 8) ||
 			!strncmp(cp4, "cp12", 4) ||
@@ -2941,7 +2941,7 @@ PUBLIC void LYHandleMETA ARGS4(
 		if (given_is_8859) {
 		    cp1 = &cp4[10];
 		    while (*cp1 &&
-			   isdigit((unsigned char)(*cp1)))
+			   isdigit(UCH((*cp1))))
 			cp1++;
 		    *cp1 = '\0';
 		}
@@ -2975,9 +2975,9 @@ PUBLIC void LYHandleMETA ARGS4(
 	 *  Look for the Seconds field. - FM
 	 */
 	cp = LYSkipBlanks(content);
-	if (*cp && isdigit(*cp)) {
+	if (*cp && isdigit(UCH(*cp))) {
 	    cp1 = cp;
-	    while (*cp1 && isdigit(*cp1))
+	    while (*cp1 && isdigit(UCH(*cp1)))
 		cp1++;
 	    if (*cp1)
 		*cp1++ = '\0';
@@ -2991,10 +2991,10 @@ PUBLIC void LYHandleMETA ARGS4(
 	    while (*cp1) {
 		if (!strncasecomp(cp1, "URL", 3)) {
 		    cp = (cp1 + 3);
-		    while (*cp && (*cp == '=' || isspace((unsigned char)*cp)))
+		    while (*cp && (*cp == '=' || isspace(UCH(*cp))))
 			cp++;
 		    cp1 = cp;
-		    while (*cp1 && !isspace((unsigned char)*cp1))
+		    while (*cp1 && !isspace(UCH(*cp1)))
 			cp1++;
 		    *cp1 = '\0';
 		    if (*cp)
@@ -3938,7 +3938,7 @@ PUBLIC BOOLEAN LYCommentHacks ARGS2(
 	char *messageid = NULL;
 	char *p;
 	for (cp = comment+17; *cp; cp++) {
-	    if ((unsigned char)*cp >= 127 || !isgraph((unsigned char)*cp)) {
+	    if (UCH(*cp) >= 127 || !isgraph(UCH(*cp))) {
 		break;
 	    }
 	}
@@ -3951,7 +3951,7 @@ PUBLIC BOOLEAN LYCommentHacks ARGS2(
 	if (!LYUCTranslateHTMLString(&messageid, 0, 0, NO, NO, YES, st_URL))
 	    return FALSE;
 	for (p = messageid; *p; p++) {
-	    if ((unsigned char)*p >= 127 || !isgraph((unsigned char)*p)) {
+	    if (UCH(*p) >= 127 || !isgraph(UCH(*p))) {
 		break;
 	    }
 	}
@@ -3982,7 +3982,7 @@ PUBLIC BOOLEAN LYCommentHacks ARGS2(
 	char *subject = NULL;
 	char *p;
 	for (cp = comment+14; *cp; cp++) {
-	    if ((unsigned char)*cp >= 127 || !isprint((unsigned char)*cp)) {
+	    if (UCH(*cp) >= 127 || !isprint(UCH(*cp))) {
 		return FALSE;
 	    }
 	}
@@ -4003,7 +4003,7 @@ PUBLIC BOOLEAN LYCommentHacks ARGS2(
 	if (!LYUCTranslateHTMLString(&subject, 0, 0, NO, YES, NO, st_HTML))
 	    return FALSE;
 	for (p = subject; *p; p++) {
-	    if ((unsigned char)*p >= 127 || !isprint((unsigned char)*p)) {
+	    if (UCH(*p) >= 127 || !isprint(UCH(*p))) {
 		FREE(subject);
 		return FALSE;
 	    }
diff --git a/src/LYCookie.c b/src/LYCookie.c
index 972cf2c3..400b3ebb 100644
--- a/src/LYCookie.c
+++ b/src/LYCookie.c
@@ -241,17 +241,17 @@ PRIVATE BOOLEAN port_matches ARGS2(
 {
     CONST char *number = list;
 
-    if (!(number && isdigit(*number)))
+    if (!(number && isdigit(UCH(*number))))
 	return(FALSE);
 
     while (*number != '\0') {
 	if (atoi(number) == port) {
 	    return(TRUE);
 	}
-	while (isdigit(*number)) {
+	while (isdigit(UCH(*number))) {
 	    number++;
 	}
-	while (*number != '\0' && !isdigit(*number)) {
+	while (*number != '\0' && !isdigit(UCH(*number))) {
 	    number++;
 	}
     }
@@ -760,7 +760,7 @@ PRIVATE char * scan_cookie_sublist ARGS6(
 		    StrAllocCat(header, "\"");
 		    len += (strlen(co->path) + 10);
 		}
-		if (co->PortList && isdigit((unsigned char)*co->PortList)) {
+		if (co->PortList && isdigit(UCH(*co->PortList))) {
 		    /*
 		     *	Append the port attribute. - FM
 		     */
@@ -842,7 +842,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
 	 *  Get the attribute name.
 	 */
 	attr_start = p;
-	while (*p != '\0' && !isspace((unsigned char)*p) &&
+	while (*p != '\0' && !isspace(UCH(*p)) &&
 	       *p != '=' && *p != ';' && *p != ',')
 	    p++;
 	attr_end = p;
@@ -881,7 +881,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
 		!strncasecomp(attr_start, "Expires", 7)) {
 		int spaces = 6;
 		value_start = p;
-		if (isdigit((unsigned char)*p)) {
+		if (isdigit(UCH(*p))) {
 		    /*
 		     *	No alphabetic day field. - FM
 		     */
@@ -890,18 +890,18 @@ PRIVATE void LYProcessSetCookies ARGS6(
 		    /*
 		     *	Skip the alphabetic day field. - FM
 		     */
-		    while (*p != '\0' && isalpha((unsigned char)*p)) {
+		    while (*p != '\0' && isalpha(UCH(*p))) {
 			p++;
 		    }
-		    while (*p == ',' || isspace((unsigned char)*p)) {
+		    while (*p == ',' || isspace(UCH(*p))) {
 			p++;
 		    }
 		    spaces--;
 		}
 		while (*p != '\0' && *p != ';' && *p != ',' && spaces) {
 		    p++;
-		    if (isspace((unsigned char)*p)) {
-			while (isspace((unsigned char)*(p + 1)))
+		    if (isspace(UCH(*p))) {
+			while (isspace(UCH(*(p + 1))))
 			    p++;
 			spaces--;
 		    } else if (*p == '-') {
@@ -918,14 +918,14 @@ PRIVATE void LYProcessSetCookies ARGS6(
 	     */
 	    } else if ((attr_end - attr_start) == 4 &&
 		       !strncasecomp(attr_start, "port", 4) &&
-		       isdigit((unsigned char)*p)) {
+		       isdigit(UCH(*p))) {
 		/*
 		 *  The value starts as an unquoted number.
 		 */
 		CONST char *cp, *cp1;
 		value_start = p;
 		while (1) {
-		    while (isdigit((unsigned char)*p))
+		    while (isdigit(UCH(*p)))
 			p++;
 		    value_end = p;
 		    p = LYSkipCBlanks(p);
@@ -933,9 +933,9 @@ PRIVATE void LYProcessSetCookies ARGS6(
 			break;
 		    if (*p == ',') {
 			cp = LYSkipCBlanks(p + 1);
-			if (*cp != '\0' && isdigit((unsigned char)*cp)) {
+			if (*cp != '\0' && isdigit(UCH(*cp))) {
 			    cp1 = cp;
-			    while (isdigit((unsigned char)*cp1))
+			    while (isdigit(UCH(*cp1)))
 				cp1++;
 			    cp1 = LYSkipCBlanks(cp1);
 			    if (*cp1 == '\0' || *cp1 == ',' || *cp1 == ';') {
@@ -951,11 +951,11 @@ PRIVATE void LYProcessSetCookies ARGS6(
 		     *	Trim trailing spaces.
 		     */
 		    if ((value_end > value_start) &&
-			isspace((unsigned char)*(value_end - 1))) {
+			isspace(UCH(*(value_end - 1)))) {
 			value_end--;
 			while ((value_end > (value_start + 1)) &&
-			       isspace((unsigned char)*value_end) &&
-			       isspace((unsigned char)*(value_end - 1))) {
+			       isspace(UCH(*value_end)) &&
+			       isspace(UCH(*(value_end - 1)))) {
 			    value_end--;
 			}
 		    }
@@ -995,11 +995,11 @@ PRIVATE void LYProcessSetCookies ARGS6(
 		 *  Trim trailing spaces.
 		 */
 		if ((value_end > value_start) &&
-		    isspace((unsigned char)*(value_end - 1))) {
+		    isspace(UCH(*(value_end - 1)))) {
 		    value_end--;
 		    while ((value_end > (value_start + 1)) &&
-			   isspace((unsigned char)*value_end) &&
-			   isspace((unsigned char)*(value_end - 1))) {
+			   isspace(UCH(*value_end)) &&
+			   isspace(UCH(*(value_end - 1)))) {
 			value_end--;
 		    }
 		}
@@ -1123,7 +1123,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
 			if (ptr != NULL && ptr[1] != '\0') {
 			    ptr = value;
 			    while (*ptr == '.' ||
-				   isdigit((unsigned char)*ptr))
+				   isdigit(UCH(*ptr)))
 				ptr++;
 			    if (*ptr != '\0') {
 				CTRACE((tfp,
@@ -1163,7 +1163,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
 		    cur_cookie->PortList == NULL) {
 		    char *cp = value;
 		    while ((*cp != '\0') &&
-			   (isdigit((unsigned char)*cp) ||
+			   (isdigit(UCH(*cp)) ||
 			    *cp == ',' || *cp == ' ')) {
 			cp++;
 		    }
@@ -1366,7 +1366,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
 	 *  Get the attribute name.
 	 */
 	attr_start = p;
-	while (*p != '\0' && !isspace((unsigned char)*p) &&
+	while (*p != '\0' && !isspace(UCH(*p)) &&
 	       *p != '=' && *p != ';' && *p != ',')
 	    p++;
 	attr_end = p;
@@ -1401,7 +1401,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
 		!strncasecomp(attr_start, "Expires", 7)) {
 		int spaces = 6;
 		value_start = p;
-		if (isdigit((unsigned char)*p)) {
+		if (isdigit(UCH(*p))) {
 		    /*
 		     *	No alphabetic day field. - FM
 		     */
@@ -1410,18 +1410,18 @@ PRIVATE void LYProcessSetCookies ARGS6(
 		    /*
 		     *	Skip the alphabetic day field. - FM
 		     */
-		    while (*p != '\0' && isalpha((unsigned char)*p)) {
+		    while (*p != '\0' && isalpha(UCH(*p))) {
 			p++;
 		    }
-		    while (*p == ',' || isspace((unsigned char)*p)) {
+		    while (*p == ',' || isspace(UCH(*p))) {
 			p++;
 		    }
 		    spaces--;
 		}
 		while (*p != '\0' && *p != ';' && *p != ',' && spaces) {
 		    p++;
-		    if (isspace((unsigned char)*p)) {
-			while (isspace((unsigned char)*(p + 1)))
+		    if (isspace(UCH(*p))) {
+			while (isspace(UCH(*(p + 1))))
 			    p++;
 			spaces--;
 		    } else if (*p == '-') {
@@ -1438,14 +1438,14 @@ PRIVATE void LYProcessSetCookies ARGS6(
 	     */
 	    } else if ((attr_end - attr_start) == 4 &&
 		       !strncasecomp(attr_start, "port", 4) &&
-		       isdigit((unsigned char)*p)) {
+		       isdigit(UCH(*p))) {
 		/*
 		 *  The value starts as an unquoted number.
 		 */
 		CONST char *cp, *cp1;
 		value_start = p;
 		while (1) {
-		    while (isdigit((unsigned char)*p))
+		    while (isdigit(UCH(*p)))
 			p++;
 		    value_end = p;
 		    p = LYSkipCBlanks(p);
@@ -1453,9 +1453,9 @@ PRIVATE void LYProcessSetCookies ARGS6(
 			break;
 		    if (*p == ',') {
 			cp = LYSkipCBlanks(p + 1);
-			if (*cp != '\0' && isdigit((unsigned char)*cp)) {
+			if (*cp != '\0' && isdigit(UCH(*cp))) {
 			    cp1 = cp;
-			    while (isdigit((unsigned char)*cp1))
+			    while (isdigit(UCH(*cp1)))
 				cp1++;
 			    cp1 = LYSkipCBlanks(cp1);
 			    if (*cp1 == '\0' || *cp1 == ',' || *cp1 == ';') {
@@ -1471,11 +1471,11 @@ PRIVATE void LYProcessSetCookies ARGS6(
 		     *	Trim trailing spaces.
 		     */
 		    if ((value_end > value_start) &&
-			isspace((unsigned char)*(value_end - 1))) {
+			isspace(UCH(*(value_end - 1)))) {
 			value_end--;
 			while ((value_end > (value_start + 1)) &&
-			       isspace((unsigned char)*value_end) &&
-			       isspace((unsigned char)*(value_end - 1))) {
+			       isspace(UCH(*value_end)) &&
+			       isspace(UCH(*(value_end - 1)))) {
 			    value_end--;
 			}
 		    }
@@ -1515,11 +1515,11 @@ PRIVATE void LYProcessSetCookies ARGS6(
 		 *  Trim trailing spaces.
 		 */
 		if ((value_end > value_start) &&
-		    isspace((unsigned char)*(value_end - 1))) {
+		    isspace(UCH(*(value_end - 1)))) {
 		    value_end--;
 		    while ((value_end > (value_start + 1)) &&
-			   isspace((unsigned char)*value_end) &&
-			   isspace((unsigned char)*(value_end - 1))) {
+			   isspace(UCH(*value_end)) &&
+			   isspace(UCH(*(value_end - 1)))) {
 			value_end--;
 		    }
 		}
@@ -1643,7 +1643,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
 			if (ptr != NULL && ptr[1] != '\0') {
 			    ptr = value;
 			    while (*ptr == '.' ||
-				   isdigit((unsigned char)*ptr))
+				   isdigit(UCH(*ptr)))
 				ptr++;
 			    if (*ptr != '\0') {
 				CTRACE((tfp,
@@ -1683,7 +1683,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
 		    cur_cookie->PortList == NULL) {
 		    char *cp = value;
 		    while ((*cp != '\0') &&
-			   (isdigit((unsigned char)*cp) ||
+			   (isdigit(UCH(*cp)) ||
 			    *cp == ',' || *cp == ' ')) {
 			cp++;
 		    }
@@ -2436,8 +2436,8 @@ PRIVATE int LYHandleCookies ARGS4 (
 				return(HT_NO_DATA);
 
 			    case 'C':
-			    case 7:	/* Ctrl-G */
-			    case 3:	/* Ctrl-C */
+			    case LYCharINTERRUPT2:	/* Ctrl-G */
+			    case LYCharINTERRUPT1:	/* Ctrl-C */
 				/*
 				 *  Cancelled. - FM
 				 */
diff --git a/src/LYCurses.c b/src/LYCurses.c
index 41cc1946..de225c6f 100644
--- a/src/LYCurses.c
+++ b/src/LYCurses.c
@@ -297,7 +297,7 @@ PUBLIC void setStyle ARGS4(int,style,int,color,int,cattr,int,mono)
 PUBLIC void setHashStyle ARGS5(int,style,int,color,int,cattr,int,mono,char*,element)
 {
     bucket* ds = &hashStyles[style];
-    CTRACE((tfp, "CSS(SET): <%s> hash=%d, ca=%d, ma=%d\n", element, style, color, mono));
+    CTRACE((tfp, "CSS(SET): <%s> hash=%d, ca=%#x, ma=%#x\n", element, style, color, mono));
     ds->color = color;
     ds->cattr = cattr;
     ds->mono = mono;
@@ -393,16 +393,11 @@ PUBLIC void curses_w_style ARGS3(
 	 */
 	if (!ds->name) break;
 #endif
-	if (style != s_alink) {
-	    CTRACE((tfp, "CACHED: <%s> @(%d,%d)\n", ds->name, YP, XP));
-	    if (win == stdscr) cached_styles[YP][XP] = style;
-	}
-	LYAttrset(win, ds->color, ds->mono);
-	break;
-
+	/* FALL THROUGH */
     case ABS_ON: /* change without remembering the previous style */
-	    /* don't cache style changes for active links */
-	if (style != s_alink) {
+	    /* don't cache style changes for active links and edits */
+	if ( style != s_alink && style != s_aedit
+	     && style != s_aedit_pad && style != s_aedit_arr ) {
 	    CTRACE((tfp, "CACHED: <%s> @(%d,%d)\n", ds->name, YP, XP));
 	    if (win == stdscr) cached_styles[YP][XP] = style;
 	}
@@ -457,7 +452,7 @@ void attribute ARGS2(int,style,int,dir)
 #endif
 #endif /* USE_COLOR_STYLE */
 
-PRIVATE int lynx_called_initscr;
+PRIVATE BOOL lynx_called_initscr = FALSE;
 
 #if HAVE_USE_DEFAULT_COLORS && USE_DEFAULT_COLORS
 /*
@@ -469,7 +464,7 @@ PUBLIC int lynx_default_colors NOARGS
     int code = 0;
     if (lynx_called_initscr) {
 	code = -1;
-	if (use_default_colors() == OK) {
+	if (!default_color_reset && use_default_colors() == OK) {
 	    default_fg = DEFAULT_COLOR;
 	    default_bg = DEFAULT_COLOR;
 	    code = 1;
@@ -689,6 +684,7 @@ static WINDOW *LYscreen = NULL;
 
 PUBLIC void start_curses NOARGS
 {
+    int keypad_on = 0;
 #ifdef USE_SLANG
     static int slinit;
 
@@ -821,6 +817,11 @@ PUBLIC void start_curses NOARGS
 	 */
 #if defined(HAVE_NEWTERM) && !defined(NCURSES) && !defined(HAVE_RESIZETERM)
 	{
+	    /*
+	     * Put screen geometry in environment variables used by
+	     * XOpen curses before calling newterm().  I believe this
+	     * completes work left unfinished by AJL & FM -- gil
+	     */
 	    static char lines_putenv[] = "LINES=abcde",
 			cols_putenv[]  = "COLUMNS=abcde";
 	    BOOLEAN savesize;
@@ -845,7 +846,15 @@ PUBLIC void start_curses NOARGS
 	size_change(0);
 	recent_sizechange = FALSE; /* prevent mainloop drawing 1st doc twice */
 #endif /* SIGWINCH */
+
 #if defined(USE_KEYMAPS) && defined(NCURSES_VERSION)
+#  if HAVE_KEYPAD
+	/* Need to switch keypad on before initializing keymaps, otherwise
+	   when the keypad is switched on, some keybindings may be overriden. */
+	keypad(stdscr,TRUE);
+	keypad_on = 1;
+#  endif /* HAVE_KEYPAD */
+
 	if (-1 == lynx_initialize_keymaps ()) {
 	    endwin();
 	    exit (-1);
@@ -938,7 +947,8 @@ PUBLIC void start_curses NOARGS
     noecho();
 
 #if HAVE_KEYPAD
-    keypad(stdscr,TRUE);
+    if (!keypad_on)
+	keypad(stdscr,TRUE);
 #endif /* HAVE_KEYPAD */
 
     lynx_enable_mouse (1);
@@ -1185,28 +1195,6 @@ PUBLIC BOOLEAN setup ARGS1(
     char *term_putenv = NULL;
     char *buffer = NULL;
     char *cp;
-#if defined(HAVE_SIZECHANGE) && !defined(USE_SLANG) && defined(NOTDEFINED)
-/*
- *  Hack to deal with a problem in sysV curses, that screen can't be
- *  resized to greater than the size used by initscr, which can only
- *  be called once.  So set environment variables LINES and COLUMNS
- *  to some suitably large size to force initscr to allocate enough
- *  space.  Later we get the real window size for setting LYlines
- *  and LYcols. - AJL & FM
- *
- *  Has problems, so we don't use this hack, but the code is here
- *  if someone wants to play with it some more. - FM
- */
-    char *lines_putenv = NULL;
-    char *cols_putenv = NULL;
-
-    if (getenv("LINES") == NULL && getenv("COLUMNS") == NULL) {
-	StrAllocCopy(lines_putenv, "LINES=120");
-	(void) putenv(lines_putenv);
-	StrAllocCopy(cols_putenv, "COLUMNS=240");
-	(void) putenv(cols_putenv);
-    }
-#endif /* HAVE_SIZECHANGE && !USE_SLANG && NOTDEFINED */
 
    /*
     *  If the display was not set by a command line option then
@@ -1270,29 +1258,6 @@ PUBLIC BOOLEAN setup ARGS1(
     }
 #endif /* HAVE_TTYTYPE */
 
-#if defined(HAVE_SIZECHANGE) && !defined(USE_SLANG) && defined(NOTDEFINED)
-    if (lines_putenv != NULL) {
-	/*
-	 *  Use SIGWINCH handler to set the true window size. - AJL && FM
-	 *
-	 *  Has problems, so we don't use this hack, but the code is here
-	 *  if someone wants to play with it some more. - FM
-	 */
-	size_change(0);
-	lines_putenv[6] = '\0';
-	(void) putenv(lines_putenv);
-	cols_putenv[8] = '\0';
-	(void) putenv(cols_putenv);
-	FREE(lines_putenv);
-	FREE(cols_putenv);
-    } else {
-	LYlines = LINES;
-	LYcols = COLS;
-    }
-#else
-    LYlines = LINES;
-    LYcols = COLS;
-#endif /* HAVE_SIZECHANGE && !USE_SLANG && USE_NOTDEFINED */
 #if defined(PDCURSES_EXP) && defined(WIN_EX) && defined(CJK_EX) /* 1999/08/26 (Thu) 17:53:38 */
     {
 	extern int current_codepage;	/* PDCurses lib. */
diff --git a/src/LYEditmap.c b/src/LYEditmap.c
index b9bcce32..575c89f3 100644
--- a/src/LYEditmap.c
+++ b/src/LYEditmap.c
@@ -992,7 +992,7 @@ PUBLIC int EditBinding ARGS1(
     } else if (xlkc & LKC_MOD3) {
 	xleac = LKC_TO_LEC_M3(c);
     } else {
-	xleac = (unsigned char)LYLineEditors[current_lineedit][c];
+	xleac = UCH(LYLineEditors[current_lineedit][c]);
     }
 #endif
     /*
diff --git a/src/LYForms.c b/src/LYForms.c
index b9a5b314..26ce0379 100644
--- a/src/LYForms.c
+++ b/src/LYForms.c
@@ -489,7 +489,7 @@ again:
 #ifdef VMS
 	if (HadVMSInterrupt) {
 	    HadVMSInterrupt = FALSE;
-	    ch = 7;
+	    ch = LYCharINTERRUPT2;
 	}
 #endif /* VMS */
 
@@ -594,7 +594,7 @@ again:
 #ifdef VMS
 	    if (HadVMSInterrupt) {
 		HadVMSInterrupt = FALSE;
-		ch = 7;
+		ch = LYCharINTERRUPT2;
 	    }
 #endif /* VMS */
 	    break;
diff --git a/src/LYGetFile.c b/src/LYGetFile.c
index 9807e870..4c37ed5b 100644
--- a/src/LYGetFile.c
+++ b/src/LYGetFile.c
@@ -176,7 +176,7 @@ Try_Redirected_URL:
 			FREE(temp);
 			return(NULLFILE);
 		    }
-		} else if (isdigit((unsigned char)*cp)) {
+		} else if (isdigit(UCH(*cp))) {
 		    HTAlert(URL_PORT_BAD);
 		    FREE(temp);
 		    return(NULLFILE);
@@ -1153,7 +1153,7 @@ PUBLIC int follow_link_number ARGS4(
 	return(DO_NOTHING);
     }
     *num = atoi(p);
-    while ( isdigit(*p) )
+    while ( isdigit(UCH(*p)) )
 	++p;
     c = *p; /* reuse c; 0 or g or p or + or - */
     switch ( c ) {
@@ -1437,7 +1437,7 @@ PUBLIC BOOLEAN exec_ok ARGS3(
     else
 	allowed_extra_chars = " _-:./@~$+=\t";
     for (cp = linktext; *cp != '\0'; cp++) {
-	if (!isalnum(*cp) && !strchr(allowed_extra_chars, *cp)) {
+	if (!isalnum(UCH(*cp)) && !strchr(allowed_extra_chars, *cp)) {
 	    char *buf = 0;
 
 	    HTSprintf0(&buf,
diff --git a/src/LYGlobalDefs.h b/src/LYGlobalDefs.h
index f03d7cf2..05392c96 100644
--- a/src/LYGlobalDefs.h
+++ b/src/LYGlobalDefs.h
@@ -126,6 +126,16 @@ extern BOOLEAN LYUseFormsOptions; /* use Forms-based options menu */
 #define LYUseFormsOptions FALSE	/* simplify ifdef'ing in LYMainLoop.c */
 #endif
 
+typedef enum {
+    rateOFF = 0
+    , rateBYTES = 1
+    , rateKB
+#ifdef EXP_READPROGRESS
+    , rateEtaBYTES
+    , rateEtaKB
+#endif
+} TransferRate;
+
 extern BOOLEAN LYCursesON;  	/* start_curses()->TRUE, stop_curses()->FALSE */
 extern BOOLEAN LYJumpFileURL;   /* URL from the jump file shortcuts? */
 extern BOOLEAN LYNewsPosting;	/* News posting supported if TRUE */
@@ -137,7 +147,6 @@ extern BOOLEAN LYforce_no_cache;
 extern BOOLEAN LYinternal_flag; /* don't need fresh copy, was internal link */
 extern BOOLEAN LYoverride_no_cache;  /* don't need fresh copy, from history */
 extern BOOLEAN LYresubmit_posts;
-extern BOOLEAN LYshow_kb_rate;	/* show KB/sec in HTReadProgress */
 extern BOOLEAN bold_H1;
 extern BOOLEAN bold_headers;
 extern BOOLEAN bold_name_anchors;
@@ -188,6 +197,7 @@ extern char *system_mail_flags;
 extern char *unchecked_box;	/* form boxes */
 extern char *unchecked_radio;	/* form radio buttons */
 extern char *x_display;
+extern int LYTransferRate;	/* see enum TransferRate */
 extern int display_lines;	/* number of lines in the display */
 extern int dump_output_width;
 extern int keypad_mode;		/* NUMBERS_AS_ARROWS or LINKS_ARE_NUMBERED */
diff --git a/src/LYHash.c b/src/LYHash.c
index d32669f0..f355729e 100644
--- a/src/LYHash.c
+++ b/src/LYHash.c
@@ -16,7 +16,7 @@
 #define HASH_SIZE CSHASHSIZE
 #endif
 
-#define HASH_OF(h, v) ((int)((h) * 3 + (unsigned char)(v)) % HASH_SIZE)
+#define HASH_OF(h, v) ((int)((h) * 3 + UCH(v)) % HASH_SIZE)
 
 PUBLIC int hash_code ARGS1 (char*, string)
 {
diff --git a/src/LYHash.h b/src/LYHash.h
index 8fc83b8f..b42f1ed6 100644
--- a/src/LYHash.h
+++ b/src/LYHash.h
@@ -42,7 +42,8 @@ extern int	s_alink, s_a, s_status,
 #ifdef USE_SCROLLBAR
 		s_sb_bar, s_sb_bg, s_sb_aa, s_sb_naa,
 #endif
-		s_whereis;
+		s_whereis, s_aedit, s_aedit_pad, s_aedit_arr, 
+		s_prompt_edit, s_prompt_edit_pad, s_prompt_edit_arr;
 #define CACHEW 128
 #define CACHEH 64
 
diff --git a/src/LYHistory.c b/src/LYHistory.c
index b318aa3e..3592724d 100644
--- a/src/LYHistory.c
+++ b/src/LYHistory.c
@@ -570,7 +570,7 @@ PUBLIC BOOLEAN historytarget ARGS1(
     BOOLEAN treat_as_intern = FALSE;
 
     if ((!newdoc || !newdoc->address) ||
-	strlen(newdoc->address) < 10 || !isdigit(*(newdoc->address+9)))
+	strlen(newdoc->address) < 10 || !isdigit(UCH(*(newdoc->address+9))))
 	return(FALSE);
 
     if ((number = atoi(newdoc->address+9)) > nhist || number < 0)
diff --git a/src/LYKeymap.c b/src/LYKeymap.c
index b36d0ebf..3eb5cd9a 100644
--- a/src/LYKeymap.c
+++ b/src/LYKeymap.c
@@ -1341,7 +1341,7 @@ PUBLIC int lkcstring_to_lkc ARGS1(
 	c = *src;
     else if (strlen(src) == 2 && *src == '^')
 	c = src[1] & 037;
-    else if (strlen(src) >= 2 && isdigit(*src)) {
+    else if (strlen(src) >= 2 && isdigit(UCH(*src))) {
 	if (sscanf(src, "%i", &c) != 1)
 	    return (-1);
 #ifdef USE_KEYMAPS
diff --git a/src/LYLeaks.c b/src/LYLeaks.c
index d690f9a9..fe0cb852 100644
--- a/src/LYLeaks.c
+++ b/src/LYLeaks.c
@@ -122,7 +122,7 @@ PUBLIC void LYLeaks NOARGS
 		 i_counter < ALp_head->st_Bytes &&
 		 i_counter < MAX_CONTENT_LENGTH;
 		 i_counter++) {
-		if (isprint(value[i_counter])) {
+		if (isprint(UCH(value[i_counter]))) {
 		    fprintf(Fp_leakagesink, "%c", value[i_counter]);
 		} else {
 		    fprintf(Fp_leakagesink, "|");
diff --git a/src/LYMail.c b/src/LYMail.c
index 8cda4971..d1a06c51 100644
--- a/src/LYMail.c
+++ b/src/LYMail.c
@@ -47,7 +47,7 @@ PRIVATE void SafeHTUnEscape ARGS1(
      {
 	/* FIXME: this is no longer explicitly 7-bit ASCII,
 	   but are there portability problems? */
-	if ((!LYIsASCII(string[i])) || !isprint(string[i]))
+	if ((!LYIsASCII(string[i])) || !isprint(UCH(string[i])))
 	{
 	   string[i] = '?';
 	   flg = TRUE;
@@ -72,7 +72,7 @@ PRIVATE void comma_append ARGS2(
     char *,	src)
 {
     if (*src) {
-	while (*src == ',' || isspace((unsigned char)*src))
+	while (*src == ',' || isspace(UCH(*src)))
 	    src++;
 	if (*src) {
 	    if (EMPTY(*dst)) {
@@ -1457,7 +1457,7 @@ PUBLIC void reply_by_mail ARGS4(
 	LYCloseTempFP(fd);	/* Close the tmpfile. */
 	scrollok(stdscr,FALSE); /* Stop scrolling.    */
 
-	if (term_letter || c == 7 || c == 3)
+	if (term_letter || LYCharIsINTERRUPT(c))
 	    goto cleanup;
 
 	/*
@@ -1494,7 +1494,7 @@ PUBLIC void reply_by_mail ARGS4(
 		refresh();
 		c = LYgetch();
 		addstr("\n");
-		if (term_letter || c == 7 || c == 3) {
+		if (term_letter || LYCharIsINTERRUPT(c)) {
 		    goto cancelled;
 		}
 		i = (LYlines - 2);
diff --git a/src/LYMain.c b/src/LYMain.c
index fcd8d5c6..a06c4bf3 100644
--- a/src/LYMain.c
+++ b/src/LYMain.c
@@ -169,7 +169,6 @@ PUBLIC BOOLEAN LYforce_no_cache = FALSE;
 PUBLIC BOOLEAN LYoverride_no_cache = FALSE;/*override no-cache b/c history etc*/
 PUBLIC BOOLEAN LYinternal_flag = FALSE; /* override no-cache b/c internal link*/
 PUBLIC BOOLEAN LYresubmit_posts = ALWAYS_RESUBMIT_POSTS;
-PUBLIC BOOLEAN LYshow_kb_rate = TRUE;
 PUBLIC BOOLEAN LYUserSpecifiedURL = TRUE;/* always TRUE  the first time */
 PUBLIC BOOLEAN LYJumpFileURL = FALSE;	 /* always FALSE the first time */
 PUBLIC BOOLEAN jump_buffer = JUMPBUFFER; /* TRUE if offering default shortcut */
@@ -429,6 +428,7 @@ BOOLEAN persistent_cookies = FALSE;	/* disabled by default! */
 PUBLIC char *LYCookieFile = NULL;	/* cookie read file */
 PUBLIC char *LYCookieSaveFile = NULL;	/* cookie save file */
 #endif /* EXP_PERSISTENT_COOKIES */
+PUBLIC int LYTransferRate = rateBYTES;
 PUBLIC char *XLoadImageCommand = NULL;	/* Default image viewer for X */
 PUBLIC BOOLEAN LYNoISMAPifUSEMAP = FALSE; /* Omit ISMAP link if MAP present? */
 PUBLIC int LYHiddenLinks = HIDDENLINKS_SEPARATE; /* Show hidden links? */
@@ -2895,8 +2895,7 @@ PRIVATE int version_fun ARGS1(
 {
     SetOutputMode( O_TEXT );
 
-    printf("\n");
-    printf(gettext("\n%s Version %s (%s)\n"),
+    printf(gettext("%s Version %s (%s)\n"),
 	  LYNX_NAME, LYNX_VERSION,
 	  LYVersionDate());
 #ifdef SYSTEM_NAME
@@ -3432,6 +3431,12 @@ with the PREV_DOC command or from the History List"
       "show_cursor",	4|TOGGLE_ARG,		&LYUseDefShoCur,
       "toggles hiding of the cursor in the lower right corner"
    ),
+#ifdef EXP_READPROGRESS
+   PARSE_SET(
+      "show_rate",	4|TOGGLE_ARG,		&LYTransferRate,
+      "toggles display of transfer rate"
+   ),
+#endif
    PARSE_SET(
       "soft_dquotes",	4|TOGGLE_ARG,		&soft_dquotes,
       "toggles emulation of the old Netscape and Mosaic bug which\n\
diff --git a/src/LYNews.c b/src/LYNews.c
index 119b4bf8..14b88930 100644
--- a/src/LYNews.c
+++ b/src/LYNews.c
@@ -50,9 +50,9 @@ PRIVATE BOOLEAN message_has_content ARGS2(
 	    if (*cp == '\n') {
 		break;
 	    } else if (*cp != ' ') {
-		if (!firstnonblank && isgraph((unsigned char)*cp)) {
+		if (!firstnonblank && isgraph(UCH(*cp))) {
 		    firstnonblank = *cp;
-		} else if (!isspace((unsigned char)*cp)) {
+		} else if (!isspace(UCH(*cp))) {
 		    *nonspaces = TRUE;
 		}
 	    }
@@ -60,9 +60,9 @@ PRIVATE BOOLEAN message_has_content ARGS2(
 	if (*cp != '\n') {
 	    int c;
 	    while ((c = getc(fp)) != EOF && c != '\n') {
-		if (!firstnonblank && isgraph((unsigned char)c)) {
+		if (!firstnonblank && isgraph(UCH(c))) {
 		    firstnonblank = (char)c;
-		} else if (!isspace((unsigned char)*cp)) {
+		} else if (!isspace(UCH(*cp))) {
 		    *nonspaces = TRUE;
 		}
 	    }
@@ -177,7 +177,7 @@ PUBLIC char *LYNewsPost ARGS2(
 	}
 	HTUnEscape(References);
 	if (!((cp = strchr(References, '@')) && cp > References + 1 &&
-	      isalnum(cp[1]))) {
+	      isalnum(UCH(cp[1])))) {
 	    FREE(References);
 	}
     }
@@ -366,7 +366,7 @@ PUBLIC char *LYNewsPost ARGS2(
 	}
 	LYCloseTempFP(fd);		/* Close the temp file. */
 	scrollok(stdscr, FALSE);	/* Stop scrolling.	*/
-	if (term_message || c == 7 || c == 3)
+	if (term_message || LYCharIsINTERRUPT(c))
 	    goto cleanup;
 
 	/*
diff --git a/src/LYOptions.c b/src/LYOptions.c
index 1ce2d238..2894fe62 100644
--- a/src/LYOptions.c
+++ b/src/LYOptions.c
@@ -523,7 +523,7 @@ draw_options:
     while (response != 'R' &&
 	   !LYisNonAlnumKeyname(response, LYK_PREV_DOC) &&
 	   response != '>' && !term_options &&
-	   response != 7 &&  response != 3) {
+	   LYCharIsINTERRUPT(response)) {
 	if (AddValueAccepted == TRUE) {
 	    _statusline(VALUE_ACCEPTED);
 	    AddValueAccepted = FALSE;
@@ -535,7 +535,7 @@ draw_options:
 
 	refresh();
 	response = LYgetch_single();
-	if (term_options || response == 7 || response == 3)
+	if (term_options || LYCharIsINTERRUPT(response))
 	    response = 'R';
 	if (LYisNonAlnumKeyname(response, LYK_REFRESH)) {
 	    lynx_force_repaint();
@@ -1711,7 +1711,7 @@ PRIVATE int boolean_choice ARGS4(
 	if (term_options == FALSE) {
 	    response = LYgetch_single();
 	}
-	if (term_options || response == 7) {
+	if (term_options || LYCharIsINTERRUPT(response)) {
 	     /*
 	      *  Control-C or Control-G.
 	      */
@@ -1877,7 +1877,7 @@ draw_bookmark_list:
 	for (a = ((MBM_V_MAXFILES/2 + 1) * (MBM_current - 1));
 		      a <= (MBM_current * MBM_V_MAXFILES/2 ); a++) {
 	    move((3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current - 1)), 5);
-	    addch((unsigned char)(a + 'A'));
+	    addch(UCH(a + 'A'));
 	    addstr(" : ");
 	    if (MBM_A_subdescript[a])
 		addstr(MBM_A_subdescript[a]);
@@ -1890,7 +1890,7 @@ draw_bookmark_list:
     } else {
 	for (a = 0; a <= MBM_V_MAXFILES; a++) {
 	    move(3 + a, 5);
-	    addch((unsigned char)(a + 'A'));
+	    addch(UCH(a + 'A'));
 	    addstr(" : ");
 	    if (MBM_A_subdescript[a])
 		addstr(MBM_A_subdescript[a]);
@@ -1940,8 +1940,7 @@ draw_bookmark_list:
 
     while (!term_options &&
 	   !LYisNonAlnumKeyname(response, LYK_PREV_DOC) &&
-	   response != 7 && response != 3 &&
-	   response != '>') {
+	   !LYCharIsINTERRUPT(response) && response != '>') {
 
 	move((LYlines - 2), 0);
 	lynx_start_prompt_color ();
@@ -1955,8 +1954,7 @@ draw_bookmark_list:
 	/*
 	 *  Check for a cancel.
 	 */
-	if (term_options ||
-	    response == 7 || response == 3 ||
+	if (term_options || LYCharIsINTERRUPT(response) ||
 	    LYisNonAlnumKeyname(response, LYK_PREV_DOC))
 	    continue;
 
@@ -2057,7 +2055,7 @@ draw_bookmark_list:
 			     5);
 		    else
 			move((3 + a), 5);
-		    addch((unsigned char)(a + 'A'));
+		    addch(UCH(a + 'A'));
 		    addstr(" : ");
 		    if (MBM_A_subdescript[a])
 			addstr(MBM_A_subdescript[a]);
@@ -2336,6 +2334,17 @@ static OptValues ftp_sort_values[] = {
 	{ FILE_BY_DATE,		"By Date",		"ftp_by_date" },
 	{ 0, 0, 0 }};
 
+#ifdef EXP_READPROGRESS
+static char * show_rate_string		= "show_rate";
+static OptValues rate_values[] = {
+	{ rateOFF,		"Do not show rate",	"rate_off" },
+	{ rateBYTES,		"Show Bytes/sec rate",	"rate_bytes" },
+	{ rateKB,		"Show KB/sec rate",	"rate_kb" },
+	{ rateEtaBYTES,		"Show Bytes/sec, ETA",	"rate_eta_bytes" },
+	{ rateEtaKB,		"Show KB/sec, ETA",	"rate_eta_kb" },
+	{ 0, 0, 0 }};
+#endif /* EXP_READPROGRESS */
+
 /*
  * Headers transferred to remote server
  */
@@ -2457,7 +2466,7 @@ PRIVATE PostPair * break_data ARGS1(
 		     */
 		    if (i > 0
 		    && q[count].value[i+1] == '+'
-		    && isalnum(q[count].value[i+2])) {
+		    && isalnum(UCH(q[count].value[i+2]))) {
 			q[count].value[i++] = ' ';
 			i++;
 			continue;
@@ -2891,6 +2900,12 @@ PUBLIC int postoptions ARGS1(
 	    show_dotfiles = (BOOL) code;
 	}
 
+	/* Show Transfer Rate: enumerated value */
+	if (!strcmp(data[i].tag, show_rate_string)
+	 && GetOptValues(rate_values, data[i].value, &code)) {
+	    LYTransferRate = code;
+	}
+
 	/* Preferred Document Character Set: INPUT */
 	if (!strcmp(data[i].tag, preferred_doc_char_string)) {
 	    if (strcmp(pref_charset, data[i].value)) {
@@ -3522,6 +3537,14 @@ PRIVATE int gen_options ARGS1(
     EndSelect(fp0);
 #endif /* ENABLE_OPTS_CHANGE_EXEC */
 
+#ifdef EXP_READPROGRESS
+    /* Local Directory Sort: SELECT */
+    PutLabel(fp0, gettext("Show transfer rate"));
+    BeginSelect(fp0, show_rate_string);
+    PutOptValues(fp0, LYTransferRate, rate_values);
+    EndSelect(fp0);
+#endif /* EXP_READPROGRESS */
+
     /*
      * Special Files and Screens
      */
diff --git a/src/LYPrettySrc.c b/src/LYPrettySrc.c
index 3f3ca1aa..97e4c67e 100644
--- a/src/LYPrettySrc.c
+++ b/src/LYPrettySrc.c
@@ -197,9 +197,9 @@ PUBLIC int html_src_parse_tagspec ARGS4(
 			after_excl = TRUE;
 			break;
 		    default:
-			if (isalpha(*p) || *p == '_') {
+			if (isalpha(UCH(*p)) || *p == '_') {
 			    tagstart = p;
-			    while (*p && ( isalnum(*p) || *p == '_') )
+			    while (*p && ( isalnum(UCH(*p)) || *p == '_') )
 				 ++p;
 			    tagend = p;
 			    state = HTSRC_CK_after_tagname;
@@ -252,9 +252,9 @@ PUBLIC int html_src_parse_tagspec ARGS4(
 			return 1;
 		    default: {
 			char save, save1;
-			if ( isalpha(*p) || *p == '_' ) {
+			if ( isalpha(UCH(*p)) || *p == '_' ) {
 			    classstart = p;
-			    while (*p && ( isalnum(*p) || *p == '_') ) ++p;
+			    while (*p && ( isalnum(UCH(*p)) || *p == '_') ) ++p;
 			    classend = p;
 			    save = *classend;
 			    *classend = '\0';
diff --git a/src/LYReadCFG.c b/src/LYReadCFG.c
index 36d2b79d..625b4a1c 100644
--- a/src/LYReadCFG.c
+++ b/src/LYReadCFG.c
@@ -366,6 +366,8 @@ PRIVATE int ColorCode ARGS1(
 #define ColorCode(color) (color)
 #endif
 
+BOOL default_color_reset = FALSE;
+
 /*
  *  Validator for COLOR fields.
  */
@@ -378,18 +380,24 @@ PUBLIC int check_color ARGS2(
     CTRACE((tfp, "check_color(%s,%d)\n", color, the_default));
     if (!strcasecomp(color, "default")) {
 #if USE_DEFAULT_COLORS
-	the_default = DEFAULT_COLOR;
+	if (!default_color_reset)
+	    the_default = DEFAULT_COLOR;
 #endif	/* USE_DEFAULT_COLORS */
-	CTRACE((tfp, "=> %d\n", the_default));
+	CTRACE((tfp, "=> default %d\n", the_default));
 	return the_default;
     }
     if (!strcasecomp(color, "nocolor"))
 	return NO_COLOR;
 
     for (i = 0; i < 16; i++) {
-	if (!strcasecomp(color, Color_Strings[i]))
-	    return ColorCode(i);
+	if (!strcasecomp(color, Color_Strings[i])) {
+	    int c = ColorCode(i);
+
+	    CTRACE((tfp, "=> %d\n", c));
+	    return c;
+	}
     }
+    CTRACE((tfp, "=> ERR_COLOR\n"));
     return ERR_COLOR;
 }
 #endif /* USE_COLOR_STYLE || USE_COLOR_TABLE */
@@ -1101,6 +1109,24 @@ static int system_editor_fun ARGS1(
     return 0;
 }
 
+#ifdef EXP_READPROGRESS
+static int transfer_rate_fun ARGS1(
+	char *,		value)
+{
+    static Config_Enum table[] = {
+	{ "NONE",	rateOFF },
+	{ "KB",		rateKB },
+	{ "TRUE",	rateKB },
+	{ "BYTES",	rateBYTES },
+	{ "FALSE",	rateBYTES },
+	{ "KB,ETA",	rateEtaKB },
+	{ "BYTES,ETA",	rateEtaBYTES },
+	{ NULL,		-1 },
+    };
+    config_enum(table, value, &LYTransferRate);
+    return 0;
+}
+#endif
 static int viewer_fun ARGS1(
 	char *,		value)
 {
@@ -1558,7 +1584,9 @@ static Config_Type Config_Table [] =
      PARSE_SET("seek_frag_map_in_cur", CONF_BOOL, &LYSeekFragMAPinCur),
      PARSE_SET("set_cookies", CONF_BOOL, &LYSetCookies),
      PARSE_SET("show_cursor", CONF_BOOL, &LYShowCursor),
-     PARSE_SET("show_kb_rate", CONF_BOOL, &LYshow_kb_rate),
+#ifdef EXP_READPROGRESS
+     PARSE_SET("show_kb_rate", CONF_FUN, transfer_rate_fun),
+#endif
      PARSE_ENV("snews_proxy", CONF_ENV, 0 ),
      PARSE_ENV("snewspost_proxy", CONF_ENV, 0 ),
      PARSE_ENV("snewsreply_proxy", CONF_ENV, 0 ),
@@ -1771,7 +1799,7 @@ PRIVATE void do_read_cfg ARGS5(
 	 */
 	name = LYSkipBlanks(buffer);
 
-	if (ispunct(*name))
+	if (ispunct(UCH(*name)))
 	    continue;
 
 	LYTrimTrailing(name);
@@ -1798,7 +1826,7 @@ PRIVATE void do_read_cfg ARGS5(
 	    cp = value;
 	if ((cp = strchr (cp, '#')) != 0) {
 	    cp--;
-	    if (isspace ((unsigned char) *cp))
+	    if (isspace(UCH(*cp)))
 		*cp = 0;
 	}
 
diff --git a/src/LYReadCFG.h b/src/LYReadCFG.h
index 328712f6..07733e1b 100644
--- a/src/LYReadCFG.h
+++ b/src/LYReadCFG.h
@@ -39,6 +39,7 @@
 
 extern int default_fg;
 extern int default_bg;
+extern BOOL default_color_reset;
 
 #if HAVE_USE_DEFAULT_COLORS && USE_DEFAULT_COLORS
 extern int lynx_default_colors NOPARAMS;
diff --git a/src/LYStrings.c b/src/LYStrings.c
index 33b0ded1..51625738 100644
--- a/src/LYStrings.c
+++ b/src/LYStrings.c
@@ -535,8 +535,8 @@ PUBLIC char *LYstrncpy ARGS3(
     return val;
 }
 
-#define IS_NEW_GLYPH(ch) (utf_flag && ((unsigned char)(ch)&0xc0) != 0x80)
-#define IS_UTF_EXTRA(ch) (utf_flag && ((unsigned char)(ch)&0xc0) == 0x80)
+#define IS_NEW_GLYPH(ch) (utf_flag && (UCH(ch)&0xc0) != 0x80)
+#define IS_UTF_EXTRA(ch) (utf_flag && (UCH(ch)&0xc0) == 0x80)
 
 /*
  *  LYmbcsstrncpy() terminates strings with a null byte.
@@ -615,7 +615,7 @@ PUBLIC char * LYmbcs_skip_glyphs ARGS3(
  *  width characters in CJK mode count as one.) - kw
  */
 PUBLIC int LYmbcsstrlen ARGS3(
-	char *, 	str,
+	char *,		str,
 	BOOL,		utf_flag,
 	BOOL,		count_gcells)
 {
@@ -707,7 +707,7 @@ PRIVATE WINDOW *my_subwindow;
 PUBLIC void LYsubwindow ARGS1(WINDOW *, param)
 {
     if (param != 0) {
-        my_subwindow = param;
+	my_subwindow = param;
 #if defined(NCURSES) || defined(PDCURSES)
 	keypad(my_subwindow, TRUE);
 #if defined(HAVE_GETBKGD) /* not defined in ncurses 1.8.7 */
@@ -799,7 +799,7 @@ PUBLIC void ena_csi ARGS1(
 #define define_key(string, code) \
 	SLkm_define_keysym (string, code, Keymap_List)
 #define expand_substring(dst, first, last, final) \
-	SLexpand_escaped_string(dst, (char *)first, (char *)last)
+	(SLexpand_escaped_string(dst, (char *)first, (char *)last), 1)
 static SLKeyMap_List_Type *Keymap_List;
 /* This value should be larger than anything in LYStrings.h */
 #define MOUSE_KEYSYM 0x0400
@@ -937,9 +937,10 @@ PRIVATE CONST char *expand_tichar (CONST char *first, char **result, char *final
     return first;
 }
 
-PRIVATE void expand_substring (char* dst, CONST char* first, CONST char* last, char *final)
+PRIVATE int expand_substring (char* dst, CONST char* first, CONST char* last, char *final)
 {
     int ch;
+
     while (first < last) {
 	switch (ch = *first++) {
 	case ESCAPE:
@@ -949,9 +950,12 @@ PRIVATE void expand_substring (char* dst, CONST char* first, CONST char* last, c
 	    ch = *first++;
 	    if (ch == LPAREN) {
 		CONST char *s = strchr(first, RPAREN);
+		char *was = dst;
 		if (s == 0)
 		    s = first + strlen(first);
 		first = expand_tiname(first, s-first, &dst, final);
+		if (dst == was)
+		    return 0;
 		if (*first)
 		    first++;
 	    } else if (ch == '?') {		/* ASCII delete? */
@@ -972,6 +976,7 @@ PRIVATE void expand_substring (char* dst, CONST char* first, CONST char* last, c
 	}
     }
     *dst = '\0';
+    return 1;
 }
 #endif
 
@@ -999,10 +1004,8 @@ PRIVATE BOOLEAN unescape_string ARGS3(char*, src, char *, dst, char *, final)
 	    dst[1] = '\0';
 	    ok = TRUE;
 	}
-    } else if (*src == DQUOTE) {
-	expand_substring(dst, src + 1, src + strlen(src) - 1, final);
-	ok = TRUE;
-    }
+    } else if (*src == DQUOTE)
+	ok = expand_substring(dst, src + 1, src + strlen(src) - 1, final);
     return ok;
 }
 
@@ -1040,11 +1043,11 @@ PUBLIC int map_string_to_keysym ARGS2(CONST char*, str, int*,keysym)
 	if (*str) {
 	    size_t len = strlen(str);
 	    if (len == 1)
-		return (*keysym = ((unsigned char)str[0])|modifier);
+		return (*keysym = (UCH(str[0]))|modifier);
 	    else if (len == 2 && str[0] == '^' &&
-		     (isalpha(str[1]) ||
+		     (isalpha(UCH(str[1])) ||
 		      (TOASCII(str[1]) >= '@' && TOASCII(str[1]) <= '_')))
-		return (*keysym = FROMASCII((unsigned char)str[1]&0x1f)|modifier);
+		return (*keysym = FROMASCII(UCH(str[1]&0x1f))|modifier);
 	    else if (len == 2 && str[0] == '^' &&
 		     str[1] == '?')
 		return (*keysym = CH_DEL|modifier);
@@ -1052,16 +1055,16 @@ PUBLIC int map_string_to_keysym ARGS2(CONST char*, str, int*,keysym)
 		char buf[BUFSIZ];
 		expand_substring(buf, str, str + HTMIN(len, 28), buf + sizeof(buf) - 1);
 		if (strlen(buf) <= 1)
-		    return (*keysym = ((unsigned char)buf[0])|modifier);
+		    return (*keysym = (UCH(buf[0]))|modifier);
 	    }
 	}
     }
     if (*str == SQUOTE) {
 	unescaped_char(str, keysym);
-    } else if (isdigit(*str)) {
+    } else if (isdigit(UCH(*str))) {
 	char *tmp;
 	long value = strtol(str, &tmp, 0);
-	if (!isalnum(*tmp)) {
+	if (!isalnum(UCH(*tmp))) {
 	    *keysym = value;
 #ifndef USE_SLANG
 	    if (*keysym > 255)
@@ -1108,7 +1111,7 @@ PRIVATE char *skip_keysym ARGS1(char *, parse)
 	    escaped = 1;
 	} else if (*parse == DQUOTE || *parse == SQUOTE) {
 	    quoted = *parse;
-	} else if (isspace(*parse)) {
+	} else if (isspace(UCH(*parse))) {
 	    break;
 	}
 	parse++;
@@ -1128,7 +1131,7 @@ PRIVATE int setkey_cmd (char *parse)
 
     CTRACE((tfp, "KEYMAP(PA): in=%s", parse));	/* \n-terminated */
     if ((s = skip_keysym(parse)) != 0) {
-	if (isspace(*s)) {
+	if (isspace(UCH(*s))) {
 	    *s++ = '\0';
 	    s = LYSkipBlanks(s);
 	    if ((t = skip_keysym(s)) == 0) {
@@ -1137,8 +1140,11 @@ PRIVATE int setkey_cmd (char *parse)
 	    }
 	    if (t != s)
 		*t = '\0';
-	    if (map_string_to_keysym (s, &keysym) >= 0
-	     && unescape_string(parse, buf, buf + sizeof(buf) - 1)) {
+	    if (map_string_to_keysym (s, &keysym) >= 0) {
+		if (!unescape_string(parse, buf, buf + sizeof(buf) - 1)) {
+		    CTRACE((tfp, "KEYMAP(SKIP) could unescape key\n"));
+		    return 0;		/* Trace the failure and continue. */
+		}
 		if (LYTraceLogFP == 0) {
 		    CTRACE((tfp, "KEYMAP(DEF) keysym=%#x\n", keysym));
 		} else {
@@ -1553,11 +1559,13 @@ re_read:
 	    if (sigint)
 		sigint = FALSE;
 #endif /* IGNORE_CTRL_C */
-	    return(7); /* use ^G to cancel whatever called us. */
+	    CTRACE((tfp, "GETCH: Translate ^C to ^G.\n"));
+	    return(LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */
 	}
     }
 #endif /* !USE_SLANG || VMS */
 
+    CTRACE((tfp, "GETCH: Got %#x.\n", c));
 #ifdef MISC_EXP
     if (LYNoZapKey > 1 && errno != EINTR &&
 	(c == EOF
@@ -1634,12 +1642,12 @@ re_read:
 	    goto re_read;
 	}
 #endif /* IGNORE_CTRL_C */
-	return(7); /* use ^G to cancel whatever called us. */
+	return(LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */
     }
 #else  /* not USE_SLANG: */
     if (feof(stdin) || ferror(stdin) || c == EOF) {
 	if (recent_sizechange)
-	    return(7); /* use ^G to cancel whatever called us. */
+	    return(LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */
 #ifdef IGNORE_CTRL_C
 	if (sigint) {
 	    sigint = FALSE;
@@ -1657,7 +1665,7 @@ re_read:
     }
 #endif /* USE_SLANG */
 
-    if (c == CH_ESC || (csi_is_csi && c == (unsigned char)CH_ESC_PAR)) { /* handle escape sequence  S/390 -- gil -- 2024 */
+    if (c == CH_ESC || (csi_is_csi && c == UCH(CH_ESC_PAR))) { /* handle escape sequence  S/390 -- gil -- 2024 */
 	done_esc = TRUE;		/* Flag: we did it, not keypad() */
 	b = GetChar();
 
@@ -1979,13 +1987,13 @@ re_read:
 #endif /* HAVE_SIZECHANGE || USE_SLANG */
 	    if (!recent_sizechange) {
 #if 0			/* assumption seems flawed? */
-	        /*  Not detected by us or already processed by us.  It can
+		/*  Not detected by us or already processed by us.  It can
 		 *  happens that ncurses lags behind us in detecting the
 		 *  change, since its own SIGTSTP handler is not installed
 		 *  so detecting happened *at the end* of the last refresh.
 		 *  Tell it to refresh again... - kw
 		 */
-	        refresh();
+		refresh();
 #endif
 #if defined(NCURSES)
 		/*
@@ -1996,12 +2004,12 @@ re_read:
 		 */
 		recent_sizechange = TRUE;
 #endif
-	        /*
+		/*
 		 *  May be just the delayed effect of mainloop()'s call
 		 *  to resizeterm().  Pretend we haven't read anything
 		 *  yet, don't return. - kw
 		 */
-	        goto re_read;
+		goto re_read;
 	    }
 	   /*
 	    *  Yep, we agree there was a change.  Return now so that
@@ -2368,8 +2376,8 @@ PUBLIC int LYgetch NOARGS
 PUBLIC int LYgetch_choice NOARGS
 {
     int ch = LYReadCmdKey(FOR_CHOICE);
-    if (ch == 3)
-	ch = 7;			/* treat ^C the same as ^G */
+    if (ch == LYCharINTERRUPT1)
+	ch = LYCharINTERRUPT2;			/* treat ^C the same as ^G */
     return ch;
 }
 
@@ -2379,8 +2387,8 @@ PUBLIC int LYgetch_choice NOARGS
 PUBLIC int LYgetch_input NOARGS
 {
     int ch = LYReadCmdKey(FOR_INPUT);
-    if (ch == 3)
-	ch = 7;			/* treat ^C the same as ^G */
+    if (ch == LYCharINTERRUPT1)
+	ch = LYCharINTERRUPT2;			/* treat ^C the same as ^G */
     return ch;
 }
 
@@ -2391,8 +2399,8 @@ PUBLIC int LYgetch_input NOARGS
 PUBLIC int LYgetch_single NOARGS
 {
     int ch = LYReadCmdKey(FOR_SINGLEKEY);
-    if (ch == 3)
-	ch = 7;			/* treat ^C the same as ^G */
+    if (ch == LYCharINTERRUPT1)
+	ch = LYCharINTERRUPT2;			/* treat ^C the same as ^G */
     else if (ch > 0 && ch < 256)
 	ch = TOUPPER(ch);	/* will ignore case of result */
     return ch;
@@ -2410,12 +2418,12 @@ PUBLIC void LYLowerCase ARGS1(
 #ifdef SUPPORT_MULTIBYTE_EDIT	/* 1998/11/23 (Mon) 17:04:55 */
     {
 	if (buffer[i] & 0x80) {
-	    if ((kanji_code == SJIS) && IS_SJIS_X0201KANA((unsigned char)(buffer[i]))) {
+	    if ((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH((buffer[i])))) {
 		continue;
 	    }
 	    i++;
 	} else {
-	    buffer[i] = (unsigned char) TOLOWER(buffer[i]);
+	    buffer[i] = UCH(TOLOWER(buffer[i]));
 	}
     }
 #else
@@ -2435,7 +2443,7 @@ PUBLIC void LYUpperCase ARGS1(
 #ifdef SUPPORT_MULTIBYTE_EDIT	/* 1998/11/23 (Mon) 17:05:10 */
     {
 	if (buffer[i] & 0x80) {
-	    if ((kanji_code == SJIS) && IS_SJIS_X0201KANA((unsigned char)(buffer[i]))) {
+	    if ((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH((buffer[i])))) {
 		continue;
 	    }
 	    i++;
@@ -2457,7 +2465,7 @@ PUBLIC void LYRemoveBlanks ARGS1(
     if (buffer != 0) {
 	size_t i, j;
 	for (i = j = 0; buffer[i]; i++)
-	    if (!isspace((unsigned char)(buffer[i])))
+	    if (!isspace(UCH((buffer[i]))))
 		buffer[j++] = buffer[i];
 	buffer[j] = 0;
     }
@@ -2469,7 +2477,7 @@ PUBLIC void LYRemoveBlanks ARGS1(
 PUBLIC char * LYSkipBlanks ARGS1(
 	char *,		buffer)
 {
-    while (isspace((unsigned char)(*buffer)))
+    while (isspace(UCH((*buffer))))
 	buffer++;
     return buffer;
 }
@@ -2480,7 +2488,7 @@ PUBLIC char * LYSkipBlanks ARGS1(
 PUBLIC char * LYSkipNonBlanks ARGS1(
 	char *,		buffer)
 {
-    while (*buffer != 0 && !isspace((unsigned char)(*buffer)))
+    while (*buffer != 0 && !isspace(UCH((*buffer))))
 	buffer++;
     return buffer;
 }
@@ -2491,7 +2499,7 @@ PUBLIC char * LYSkipNonBlanks ARGS1(
 PUBLIC CONST char * LYSkipCBlanks ARGS1(
 	CONST char *,	buffer)
 {
-    while (isspace((unsigned char)(*buffer)))
+    while (isspace(UCH((*buffer))))
 	buffer++;
     return buffer;
 }
@@ -2502,7 +2510,7 @@ PUBLIC CONST char * LYSkipCBlanks ARGS1(
 PUBLIC CONST char * LYSkipCNonBlanks ARGS1(
 	CONST char *,	buffer)
 {
-    while (*buffer != 0 && !isspace((unsigned char)(*buffer)))
+    while (*buffer != 0 && !isspace(UCH((*buffer))))
 	buffer++;
     return buffer;
 }
@@ -2525,7 +2533,7 @@ PUBLIC void LYTrimTrailing ARGS1(
 	char *,		buffer)
 {
     size_t i = strlen(buffer);
-    while (i != 0 && isspace((unsigned char)buffer[i-1]))
+    while (i != 0 && isspace(UCH(buffer[i-1])))
 	buffer[--i] = 0;
 }
 
@@ -2637,7 +2645,7 @@ PRIVATE int prev_pos ARGS2(
 	    int c;
 	    c = Buf[i];
 	    if (!(isascii(c) ||
-		  ((kanji_code == SJIS) && IS_SJIS_X0201KANA((unsigned char)c)))) {
+		  ((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH(c))))) {
 		i++;
 	    }
 	    i++;
@@ -2656,7 +2664,7 @@ PUBLIC int LYEdit1 ARGS4(
 	int,		action,
 	BOOL,		maxMessage)
 {   /* returns 0    character processed
-     *         ch   otherwise
+     *	       ch   otherwise
      */
     int i;
     int length;
@@ -2716,10 +2724,10 @@ PUBLIC int LYEdit1 ARGS4(
 				return 0;
 			    }
 			}
-			ch = (unsigned char)utfbuf[i];
+			ch = UCH(utfbuf[i]);
 		    }
 		} else {
-		    ch = (unsigned char)ucode;
+		    ch = UCH(ucode);
 		}
 	    } else {
 		ch = UCTransUniChar(ucode, current_char_set);
@@ -2739,7 +2747,7 @@ PUBLIC int LYEdit1 ARGS4(
 	    for(i = length; i >= Pos; i--)    /* Make room */
 		Buf[i+1] = Buf[i];
 	    Buf[length+1]='\0';
-	    Buf[Pos] = (unsigned char) ch;
+	    Buf[Pos] = UCH(ch);
 	    Pos++;
 	} else if (maxMessage) {
 	    _statusline(MAXLEN_REACHED_DEL_OR_MOV);
@@ -2768,7 +2776,7 @@ PUBLIC int LYEdit1 ARGS4(
 	    for(i = length; i >= Pos; i--)    /* Make room */
 		Buf[i+1] = Buf[i];
 	    Buf[length+1]='\0';
-	    Buf[Pos] = (unsigned char) ch;
+	    Buf[Pos] = UCH(ch);
 	    Pos++;
 	} else {
 	    if (maxMessage) {
@@ -2800,7 +2808,7 @@ PUBLIC int LYEdit1 ARGS4(
 	    pos0 = prev_pos(edit, Pos);
 	    while (Pos &&
 		   (HTCJK == NOCJK || isascii(Buf[pos0])) &&
-		   !isalnum(Buf[pos0])) {
+		   !isalnum(UCH(Buf[pos0]))) {
 		Pos = pos0;
 		pos0 = prev_pos(edit, Pos);
 	    }
@@ -2810,7 +2818,9 @@ PUBLIC int LYEdit1 ARGS4(
 		    pos0 = prev_pos(edit, Pos);
 		}
 	    } else {
-		while (Pos && isascii(Buf[pos0]) && isalnum(Buf[pos0])) {
+		while (Pos
+		 && isascii(UCH(Buf[pos0]))
+		 && isalnum(UCH(Buf[pos0]))) {
 		    Pos = pos0;
 		    pos0 = prev_pos(edit, Pos);
 		}
@@ -2833,11 +2843,11 @@ PUBLIC int LYEdit1 ARGS4(
 	    while (!isascii(Buf[Pos]))
 		Pos += 2;
 	} else {
-	    while (isascii(Buf[Pos]) && isalnum(Buf[Pos]))
+	    while (isascii(UCH(Buf[Pos])) && isalnum(UCH(Buf[Pos])))
 		Pos++;	/* '\0' is not a/n */
 	}
-	while ((HTCJK == NOCJK || isascii(Buf[Pos])) &&
-	       !isalnum(Buf[Pos]) && Buf[Pos])
+	while ((HTCJK == NOCJK || isascii(UCH(Buf[Pos]))) &&
+	       !isalnum(UCH(Buf[Pos])) && Buf[Pos])
 	    Pos++;
 #endif /* SUPPORT_MULTIBYTE_EDIT */
 	break;
@@ -3070,7 +3080,7 @@ PUBLIC int LYEdit1 ARGS4(
 		for(i = length; i >= Pos; i--)    /* Make room */
 		    Buf[i+yanklen] = Buf[i];
 		for (i = 0; i < yanklen; i++)
-		    Buf[Pos++] = (unsigned char) killbuffer[i];
+		    Buf[Pos++] = UCH(killbuffer[i]);
 
 	    } else if (maxMessage) {
 		_statusline(MAXLEN_REACHED_DEL_OR_MOV);
@@ -3129,7 +3139,7 @@ PUBLIC int get_popup_number ARGS3(
 
     *rel = '\0';
     num = atoi(p);
-    while ( isdigit(*p) )
+    while ( isdigit(UCH(*p)) )
 	++p;
     switch ( *p ) {
     case '+': case '-':
@@ -3160,6 +3170,20 @@ PUBLIC int get_popup_number ARGS3(
     return num;
 }
 
+#ifdef USE_COLOR_STYLE
+#  define TmpStyleOn(s)		curses_style((s), STACK_ON)
+#  define TmpStyleOff(s)	curses_style((s), STACK_OFF)
+#else
+#  define TmpStyleOn(s)
+#  define TmpStyleOff(s)
+#endif	/* defined USE_COLOR_STYLE */
+
+#ifndef ACS_LARROW
+#  define ACS_LARROW '{'
+#endif
+#ifndef ACS_RARROW
+#  define ACS_RARROW '}'
+#endif
 
 PUBLIC void LYRefreshEdit ARGS1(
 	EDREC *,	edit)
@@ -3174,6 +3198,9 @@ PUBLIC void LYRefreshEdit ARGS1(
     int begin_multi = 0;
     int end_multi = 0;
 #endif /* SUPPORT_MULTIBYTE_EDIT */
+#ifdef USE_COLOR_STYLE
+    int estyle, prompting = 0;
+#endif
 
     buffer[0] = buffer[1] = buffer[2] = '\0';
     if (!edit->dirty || (DspWdth == 0))
@@ -3257,13 +3284,18 @@ PUBLIC void LYRefreshEdit ARGS1(
      *  should only be needed for color styles.  The curses function
      *  may be used directly to avoid complications. - kw
      */
-    if (edit->sy == (LYlines - 1)) {
-	if (s_normal != NOSTYLE) {
-	    curses_style(s_normal, ABS_ON);
-	} else {
-	    attrset(A_NORMAL);	/* need to do something about colors? */
-	}
-    }
+    if (edit->sy == (LYlines - 1))
+	prompting = 1;
+    if (prompting)
+	estyle = s_prompt_edit;
+    else
+	estyle = s_aedit;
+    CTRACE((tfp, "STYLE.getstr: switching to <edit.%s>.\n",
+	    prompting ? "prompt" : "active"));
+    if (estyle != NOSTYLE)
+	curses_style(estyle, STACK_ON);
+    else
+	attrset(A_NORMAL);	/* need to do something about colors? */
 #endif
     if (edit->hidden) {
 	for (i = 0; i < nrdisplayed; i++)
@@ -3271,7 +3303,7 @@ PUBLIC void LYRefreshEdit ARGS1(
     } else {
 	for (i = 0; i < nrdisplayed; i++)
 	    if ((buffer[0] = str[i]) == 1 || buffer[0] == 2 ||
-		((unsigned char)buffer[0] == 160 &&
+		(UCH(buffer[0]) == 160 &&
 		 !(HTPassHighCtrlRaw || HTCJK != NOCJK ||
 		   (LYCharSet_UC[current_char_set].enc != UCT_ENC_8859 &&
 		    !(LYCharSet_UC[current_char_set].like8859
@@ -3308,37 +3340,40 @@ PUBLIC void LYRefreshEdit ARGS1(
      *	Erase rest of input area.
      */
     padsize = DspWdth-nrdisplayed;
-    while (padsize--)
-	addch((unsigned char)edit->pad);
+    if (padsize) {
+	TmpStyleOn(prompting ? s_prompt_edit_pad : s_aedit_pad);
+	while (padsize--)
+	    addch(UCH(edit->pad));
+	TmpStyleOff(prompting ? s_prompt_edit_pad : s_aedit_pad);
+    }
 
     /*
      *	Scrolling indicators.
      */
     if (edit->panon) {
 	if ((DspStart + nrdisplayed) < length) {
-#ifndef SUPPORT_MULTIBYTE_EDIT
-	    move(edit->sy, edit->sx+nrdisplayed-1);
-	    addch('}');
-#else /* SUPPORT_MULTIBYTE_EDIT */
-	    if (end_multi) {
-		move(edit->sy, edit->sx+nrdisplayed-2);
-		addstr(" }");
-	    } else {
-		move(edit->sy, edit->sx+nrdisplayed-1);
-		addch('}');
-	}
-#endif /* SUPPORT_MULTIBYTE_EDIT */
+	    int add_space = 0;
+
+	    TmpStyleOn(prompting ? s_prompt_edit_arr : s_aedit_arr);
+#ifdef SUPPORT_MULTIBYTE_EDIT
+	    if (end_multi)
+		add_space = 1;
+#endif
+	    move(edit->sy, edit->sx + nrdisplayed - 1 - add_space);
+	    if (add_space)
+		addch(' ');		/* Needed with styles? */
+	    addch(ACS_RARROW);
+	    TmpStyleOff(prompting ? s_prompt_edit_arr : s_aedit_arr);
 	}
 	if (DspStart) {
+	    TmpStyleOn(prompting ? s_prompt_edit_arr : s_aedit_arr);
 	    move(edit->sy, edit->sx);
-#ifndef SUPPORT_MULTIBYTE_EDIT
-	    addch('{');
-#else /* SUPPORT_MULTIBYTE_EDIT */
+	    addch(ACS_LARROW);
+#ifdef SUPPORT_MULTIBYTE_EDIT
 	    if (begin_multi)
-		addstr("{ ");
-	    else
-	    addch('{');
+		addch(' ');		/* Needed with styles? */
 #endif /* SUPPORT_MULTIBYTE_EDIT */
+	    TmpStyleOff(prompting ? s_prompt_edit_arr : s_aedit_arr);
 	}
     }
 
@@ -3349,6 +3384,11 @@ PUBLIC void LYRefreshEdit ARGS1(
 	lynx_force_repaint();
 #endif /* !USE_SLANG && !defined(USE_MULTIBYTE_CURSES) */
 #endif /* SUPPORT_MULTIBYTE_EDIT */
+
+#ifdef USE_COLOR_STYLE
+    if (estyle != NOSTYLE)
+	curses_style(estyle, STACK_OFF);
+#endif
     refresh();
 }
 
@@ -3399,7 +3439,7 @@ PRIVATE char **sortedList ARGS2(
     unsigned k, jk;
     char **result = calloc(count + 1, sizeof(char *));
 
-    if (result == 0) 
+    if (result == 0)
 	outofmem(__FILE__, "sortedList");
 
     while (!HTList_isEmpty(list))
@@ -3768,7 +3808,7 @@ redraw:
 	LYstowCursor(form_window, row, 1);
 
 	c = LYgetch_choice();
-	if (term_options || c == 7) {	/* Control-C or Control-G */
+	if (term_options || LYCharIsINTERRUPT(c)) { /* Control-C or Control-G */
 	    cmd = LYK_QUIT;
 #ifndef USE_SLANG
 	} else if (c == MOUSE_KEY) {
@@ -4476,7 +4516,7 @@ again:
 #ifdef VMS
 	    HadVMSInterrupt = FALSE;
 #endif /* VMS */
-	    ch = 7;
+	    ch = LYCharINTERRUPT2;
 	}
 
 	if (recall != NORECALL && (ch == UPARROW || ch == DNARROW)) {
@@ -5246,17 +5286,17 @@ PUBLIC int UPPER8 ARGS2(int,ch1, int,ch2)
     if (ch1 == ch2)
 	return 0;
     if (!ch2)
-	return (unsigned char)ch1;
+	return UCH(ch1);
     else if (!ch1)
-	return -(unsigned char)ch2;
+	return -UCH(ch2);
 
     /* case-insensitive match for us-ascii */
-    if ((unsigned char)TOASCII(ch1) < 128 && (unsigned char)TOASCII(ch2) < 128)
+    if (UCH(TOASCII(ch1)) < 128 && UCH(TOASCII(ch2)) < 128)
 	return(TOUPPER(ch1) - TOUPPER(ch2));
 
     /* case-insensitive match for upper half */
-    if ((unsigned char)TOASCII(ch1) > 127 &&  /* S/390 -- gil -- 2066 */
-	(unsigned char)TOASCII(ch2) > 127)
+    if (UCH(TOASCII(ch1)) > 127 &&  /* S/390 -- gil -- 2066 */
+	UCH(TOASCII(ch2)) > 127)
     {
 	if (DisplayCharsetMatchLocale)
 	   return(TOUPPER(ch1) - TOUPPER(ch2)); /* old-style */
@@ -5265,7 +5305,7 @@ PUBLIC int UPPER8 ARGS2(int,ch1, int,ch2)
 	    long uni_ch2 = UCTransToUni((char)ch2, current_char_set);
 	    long uni_ch1;
 	    if (uni_ch2 < 0)
-		return (unsigned char)ch1;
+		return UCH(ch1);
 	    uni_ch1 = UCTransToUni((char)ch1, current_char_set);
 	    return(UniToLowerCase(uni_ch1) - UniToLowerCase(uni_ch2));
 	}
@@ -5297,12 +5337,12 @@ PUBLIC int UPPER8 ARGS2(int,ch1, int,ch2)
 {
 
     /* case-insensitive match for us-ascii */
-    if ((unsigned char)TOASCII(ch1) < 128 && (unsigned char)TOASCII(ch2) < 128)
+    if (UCH(TOASCII(ch1)) < 128 && UCH(TOASCII(ch2)) < 128)
 	return(TOUPPER(ch1) - TOUPPER(ch2));
 
     /* case-insensitive match for upper half */
-    if ((unsigned char)TOASCII(ch1) > 127 &&  /* S/390 -- gil -- 2066 */
-	(unsigned char)TOASCII(ch2) > 127)
+    if (UCH(TOASCII(ch1)) > 127 &&  /* S/390 -- gil -- 2066 */
+	UCH(TOASCII(ch2)) > 127)
     {
 	if (DisplayCharsetMatchLocale)
 	   return(TOUPPER(ch1) - TOUPPER(ch2)); /* old-style */
@@ -5329,7 +5369,7 @@ PUBLIC int UPPER8 ARGS2(int,ch1, int,ch2)
 	/* check to be sure we have not lost any strange characters */
 	/* which are not found in def7_uni.tbl but _equal_ in fact. */
 	/* this also applied for "x-transparent" display mode.	    */
-	if ((unsigned char)ch1==(unsigned char)ch2)
+	if (UCH(ch1) == UCH(ch2))
 	    return(0);	 /* match */
 	}
     }
@@ -5406,7 +5446,7 @@ static unsigned char index_64[256] = {
 };
 
 #define GETC(str,len)  (len > 0 ? len--,*str++ : EOF)
-#define INVALID_B64(c) (index_64[(unsigned char)c] == XX)
+#define INVALID_B64(c) (index_64[UCH(c)] == XX)
 #endif
 
 PUBLIC void base64_encode ARGS3(
diff --git a/src/LYStyle.c b/src/LYStyle.c
index 01869a18..63852d0e 100644
--- a/src/LYStyle.c
+++ b/src/LYStyle.c
@@ -1,6 +1,6 @@
 /* character level styles for Lynx
  * (c) 1996 Rob Partington -- donated to the Lyncei (if they want it :-)
- * @Id: LYStyle.c 1.38 Thu, 24 Aug 2000 18:30:11 -0700 dickey @
+ * @Id: LYStyle.c 1.39 Wed, 25 Oct 2000 09:35:28 -0700 dickey @
  */
 #include <HTUtils.h>
 #include <HTML.h>
@@ -70,10 +70,13 @@ PUBLIC int	s_alink  = NOSTYLE, s_a     = NOSTYLE, s_status = NOSTYLE,
 		s_sb_bar = NOSTYLE, s_sb_bg = NOSTYLE,
 		s_sb_aa = NOSTYLE, s_sb_naa = NOSTYLE,
 #endif
-		s_whereis= NOSTYLE;
+		s_whereis = NOSTYLE, s_aedit = NOSTYLE,
+		s_aedit_pad = NOSTYLE, s_aedit_arr = NOSTYLE, 
+		s_prompt_edit = NOSTYLE, s_prompt_edit_pad = NOSTYLE,
+		s_prompt_edit_arr = NOSTYLE;
 
 /* start somewhere safe */
-#define MAX_COLOR 8
+#define MAX_COLOR 16
 PRIVATE int colorPairs = 0;
 PRIVATE unsigned char our_pairs[2][MAX_COLOR][MAX_COLOR];
 
@@ -133,6 +136,7 @@ PRIVATE void parse_attributes ARGS5(char*,mono,char*,fg,char*,bg,int,style,char*
 	CTRACE((tfp, "CSS(DEF):default_fg=%d, default_bg=%d\n", fA, bA));
 	default_fg = fA;
 	default_bg = bA;
+	default_color_reset = TRUE;
 	return;
     }
     if (fA == NO_COLOR) {
@@ -142,7 +146,7 @@ PRIVATE void parse_attributes ARGS5(char*,mono,char*,fg,char*,bg,int,style,char*
 	    cA = A_BOLD;
 	if (fA >= COLORS)
 	    fA %= COLORS;
-	if (bA > COLORS)
+	if (bA >= COLORS)
 	    bA %= COLORS;
     } else {
 	cA = A_BOLD;
@@ -288,6 +292,36 @@ where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n\n"), buffer);
 	parse_attributes(mono,fg,bg,DSTYLE_WHEREIS,"whereis");
 	s_whereis  = hash_code("whereis");
     }
+    else if (!strncasecomp(element, "edit.active.pad", 15))
+    {
+	parse_attributes(mono,fg,bg,DSTYLE_ELEMENTS,"edit.active.pad");
+	s_aedit_pad = hash_code("edit.active.pad");
+    }
+    else if (!strncasecomp(element, "edit.active.arrow", 17))
+    {
+	parse_attributes(mono,fg,bg,DSTYLE_ELEMENTS,"edit.active.arrow");
+	s_aedit_arr  = hash_code("edit.active.arrow");
+    }
+    else if (!strncasecomp(element, "edit.active", 11))
+    {
+	parse_attributes(mono,fg,bg,DSTYLE_ELEMENTS,"edit.active");
+	s_aedit  = hash_code("edit.active");
+    }
+    else if (!strncasecomp(element, "edit.prompt.pad", 15))
+    {
+	parse_attributes(mono,fg,bg,DSTYLE_ELEMENTS,"edit.prompt.pad");
+	s_prompt_edit_pad = hash_code("edit.prompt.pad");
+    }
+    else if (!strncasecomp(element, "edit.prompt.arrow", 17))
+    {
+	parse_attributes(mono,fg,bg,DSTYLE_ELEMENTS,"edit.prompt.arrow");
+	s_prompt_edit_arr  = hash_code("edit.prompt.arrow");
+    }
+    else if (!strncasecomp(element, "edit.prompt", 11))
+    {
+	parse_attributes(mono,fg,bg,DSTYLE_ELEMENTS,"edit.prompt");
+	s_prompt_edit  = hash_code("edit.prompt");
+    }
     /* Ok, it must be a HTML element, so look through the list until we
     * find it
     */
@@ -408,10 +442,24 @@ PUBLIC void parse_userstyles NOARGS
 		parse_style(name);
 	}
     }
+    if (s_prompt_edit == NOSTYLE)
+	s_prompt_edit = s_normal;
+    if (s_prompt_edit_arr == NOSTYLE)
+	s_prompt_edit_arr = s_prompt_edit;
+    if (s_prompt_edit_pad == NOSTYLE)
+	s_prompt_edit_pad = s_prompt_edit;
+    if (s_aedit == NOSTYLE)
+	s_aedit = s_alink;
+    if (s_aedit_arr == NOSTYLE)
+	s_aedit_arr = s_aedit;
+    if (s_aedit_pad == NOSTYLE)
+	s_aedit_pad = s_aedit;
 }
 
 
-/* Add a STYLE: option line to our list */
+/* Add a STYLE: option line to our list.  Process "default:" early
+   for it to have the same semantic as other lines: works at any place
+   of the style file, the first line overrides the later ones. */
 PRIVATE void HStyle_addStyle ARGS1(char*,buffer)
 {
     char *name = NULL;
@@ -419,6 +467,15 @@ PRIVATE void HStyle_addStyle ARGS1(char*,buffer)
     if (lss_styles == NULL)
 	lss_styles = HTList_new();
     strtolower(name);
+    if (!strncasecomp(name, "default:", 8)) /* default fg/bg */
+    {
+	CTRACE( (tfp, "READCSS.default%s:%s\n",
+		 (default_color_reset ? ".ignore" : ""),
+		 name ? name : "!?! empty !?!"));
+	if (!default_color_reset)
+	    parse_style(name);
+	return;				/* do not need to process it again */
+    }
     CTRACE((tfp, "READCSS:%s\n", name ? name : "!?! empty !?!"));
     HTList_addObject (lss_styles, name);
 }
@@ -503,7 +560,6 @@ PUBLIC void TrimColorClass ARGS3(
 	    *end='\0';
     }
     *phcode = hash_code(lookfrom && *lookfrom ? lookfrom : &tmp[1]);
-    CTRACE((tfp, "CSS:%s (trimmed %s)\n", NONNULL(styleclassname), tmp));
 }
 
 /* This function is designed as faster analog to TrimColorClass.
@@ -519,6 +575,7 @@ PUBLIC void FastTrimColorClass ARGS5 (
     char* tag_start = *pstylename_end;
     BOOLEAN found = FALSE;
 
+    CTRACE((tfp, "STYLE.fast-trim: [%s] from [%s]: ", tag_name, stylename));
     while (tag_start >= stylename)
     {
 	for (; (tag_start >= stylename) && (*tag_start != ';') ; --tag_start)
@@ -533,6 +590,7 @@ PUBLIC void FastTrimColorClass ARGS5 (
 	*tag_start = '\0';
 	*pstylename_end = tag_start;
     }
+    CTRACE((tfp, found ? "success.\n" : "failed.\n"));
     *phcode = hash_code(tag_start+1);
 }
 
diff --git a/src/LYUtils.c b/src/LYUtils.c
index 6adefb15..02cfcce3 100644
--- a/src/LYUtils.c
+++ b/src/LYUtils.c
@@ -228,11 +228,6 @@ PUBLIC void highlight ARGS3(
 	if (flag == ON || links[cur].type == WWW_FORM_LINK_TYPE)
 #endif
 	{
-
-#ifdef USE_COLOR_STYLE
-#define LXP (links[cur].lx)
-#define LYP (links[cur].ly)
-#endif
 #ifndef USE_COLOR_STYLE
 	if (links[cur].type == WWW_FORM_LINK_TYPE ||
 	    !links[cur].hightext) {
@@ -247,12 +242,13 @@ PUBLIC void highlight ARGS3(
 	    target1_drawn = YES;
 #endif
 	}
-#else
-	move(links[cur].ly, links[cur].lx);
-	if (flag == ON) {
-	    LynxChangeStyle(s_alink, STACK_ON, 0);
-	} else {
-	    int s, x;
+#else	/* here USE_COLOR_STYLE defined */
+	int s = s_alink;
+
+#  define LXP (links[cur].lx)
+#  define LYP (links[cur].ly)
+	if (flag != ON) {
+	    int x;
 		/*
 		 *  This is where we try to restore the original style when
 		 *  a link is unhighlighted.  The purpose of cached_styles[][]
@@ -262,6 +258,8 @@ PUBLIC void highlight ARGS3(
 		 *  until we find one.
 		 */
 	    if (LYP >= 0 && LYP < CACHEH && LXP >= 0 && LXP < CACHEW) {
+		CTRACE((tfp, "STYLE.highlight.off: cached style @(%d,%d): ",
+			LYP, LXP));
 		s = cached_styles[LYP][LXP];
 		if (s == 0) {
 		    for (x = LXP-1; x >= 0; x--) {
@@ -270,17 +268,27 @@ PUBLIC void highlight ARGS3(
 				s = cached_styles[LYP][x];
 				cached_styles[LYP][LXP] = s;
 			    }
+			    CTRACE((tfp, "found %d, x_offset=%d.\n",
+				    cached_styles[LYP][x], (int)x-LXP));
 			    break;
 			}
 		    }
-		    if (s == 0)
+		    if (s == 0) {
+			CTRACE((tfp, "not found, assume <a>.\n"));
 			s = s_a;
+		    }
+		} else {
+		    CTRACE((tfp, "found %d.\n", s));
 		}
 	    } else {
+		CTRACE((tfp, "STYLE.highlight.off: can't use cache.\n"));
 		s = s_a;
 	    }
-	    LynxChangeStyle(s, STACK_ON, 0);
+	} else {
+	    CTRACE((tfp, "STYLE.highlight.on: @(%d,%d).\n", LYP, LXP));
 	}
+	move(LYP, LXP);
+	LynxChangeStyle(s, STACK_ON, 0);
 #endif
 	}
 
@@ -305,6 +313,7 @@ PUBLIC void highlight ARGS3(
 	    if (flag == OFF) {
 		hl2_drawn = TRUE;
 		redraw_lines_of_link(cur);
+		CTRACE((tfp, "STYLE.highlight.off: NOFIX branch @(%d,%d).\n", LYP, LXP));
 	    } else
 #endif
 	    if (!hl1_drawn) {
@@ -335,6 +344,9 @@ PUBLIC void highlight ARGS3(
 #ifndef USE_COLOR_STYLE
 	    lynx_start_link_color (flag == ON, links[cur].inUnderline);
 #else
+	    CTRACE((tfp, "STYLE.highlight.line2: @(%d,%d), style=%d.\n",
+		    links[cur].ly + 1, links[cur].hightext2_offset,
+		    flag == ON ? s_alink : s_a));
 	    LynxChangeStyle(flag == ON ? s_alink : s_a, ABS_ON, 0);
 #endif
 
@@ -2363,7 +2375,7 @@ PUBLIC int HTCheckForInterrupt NOARGS
      */
 
 	/** Keyboard 'Z' or 'z', or Control-G or Control-C **/
-    if (TOUPPER(c) == 'Z' || c == 7 || c == 3)
+    if (TOUPPER(c) == 'Z' || LYCharIsINTERRUPT(c))
 	return((int)TRUE);
 
 	/* There is a subset of mainloop() actions available at this stage:
@@ -2729,8 +2741,8 @@ PUBLIC int LYCheckForProxyURL ARGS1(
 	cp1++;
 	if (!*cp) {
 	    return(NOT_A_URL_TYPE);
-	} else if (isdigit((unsigned char)*cp1)) {
-	    while (*cp1 && isdigit((unsigned char)*cp1))
+	} else if (isdigit(UCH(*cp1))) {
+	    while (*cp1 && isdigit(UCH(*cp1)))
 		cp1++;
 	    if (*cp1 && !LYIsHtmlSep(*cp1))
 		return(UNKNOWN_URL_TYPE);
@@ -3117,7 +3129,7 @@ PUBLIC BOOLEAN LYCanDoHEAD ARGS1(
 	    FREE(temp);
 	    return TRUE;
 	}
-	if (cp && isdigit(cp[1]) && strchr(cp, '-') == NULL) {
+	if (cp && isdigit(UCH(cp[1])) && strchr(cp, '-') == NULL) {
 	    FREE(temp0);
 	    FREE(temp);
 	    return TRUE;
@@ -3651,7 +3663,7 @@ PUBLIC void change_sug_filename ARGS1(
 		   *cp == '<' || *cp == '>' || *cp == '#' ||
 		   *cp == '%' || *cp == '*' || *cp == '`' ||
 		   *cp == '~' || *cp == '^' || *cp == '|' ||
-		   *cp <  ' ' || ((unsigned char)*cp) > 126) {
+		   *cp <  ' ' || (UCH(*cp)) > 126) {
 	    *cp = '-';
 	}
     }
@@ -4548,7 +4560,7 @@ PUBLIC void LYConvertToURL ARGS2(
 		fragment = NULL;
 		if (strchr(old_string, '[') ||
 		    ((cp = strchr(old_string, ':')) != NULL &&
-		     !isdigit((unsigned char)cp[1])) ||
+		     !isdigit(UCH(cp[1]))) ||
 		    !LYExpandHostForURL((char **)&old_string,
 					URLDomainPrefixes,
 					URLDomainSuffixes)) {
@@ -4586,7 +4598,7 @@ PUBLIC void LYConvertToURL ARGS2(
 	    }
 	    if (strchr(old_string, '[') ||
 		((cp = strchr(old_string, ':')) != NULL &&
-		 !isdigit((unsigned char)cp[1])) ||
+		 !isdigit(UCH(cp[1]))) ||
 		!LYExpandHostForURL((char **)&old_string,
 				    URLDomainPrefixes,
 				    URLDomainSuffixes)) {
@@ -4926,7 +4938,7 @@ PUBLIC int win32_check_interrupt()
     if (kbhit()) {
 	c = getch();
 	/** Keyboard 'Z' or 'z', or Control-G or Control-C **/
-	if (TOUPPER(c) == 'Z' || c == 7 || c == 3 || c == 0x1b) {
+	if (TOUPPER(c) == 'Z' || LYCharIsINTERRUPT(c) || c == 0x1b) {
 	    return TRUE;
 	}
     }
@@ -5039,7 +5051,7 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
      *	filling in the host field. - FM
      */
     if ((StrColon = strrchr(Str, ':')) != NULL &&
-	isdigit((unsigned char)StrColon[1])) {
+	isdigit(UCH(StrColon[1]))) {
 	if (StrColon == Str) {
 	    FREE(Str);
 	    return GotHost;
@@ -5066,8 +5078,8 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
     memset(&hints, 0, sizeof(hints));
     hints.ai_family = PF_UNSPEC;
     hints.ai_socktype = SOCK_STREAM;
-    error = getaddrinfo(host, "80", &hints, &res); 
- 
+    error = getaddrinfo(host, "80", &hints, &res);
+
     if (!error && res)
 #else
     if (LYGetHostByName(host) != NULL)
@@ -5091,7 +5103,7 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
 	FREE(MsgStr);
 	return GotHost;
     }
-    else if (LYCursesON && 
+    else if (LYCursesON &&
 #if defined(__DJGPP__) && !defined(WATT32)
 	HTCheckForInterrupt()
 #else /* normal systems */
@@ -5181,7 +5193,7 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
 	    }
 	    StrAllocCat(Host, DomainSuffix);
 	    if ((HostColon = strrchr(Host, ':')) != NULL &&
-		isdigit((unsigned char)HostColon[1])) {
+		isdigit(UCH(HostColon[1]))) {
 		*HostColon = '\0';
 	    }
 	    StrAllocCopy(host, Host);
@@ -5968,7 +5980,7 @@ PUBLIC time_t LYmktime ARGS2(
      *	Skip any lead alphabetic "Day, " field and
      *	seek a numeric day field. - FM
      */
-    while (*s != '\0' && !isdigit((unsigned char)*s))
+    while (*s != '\0' && !isdigit(UCH(*s)))
 	s++;
     if (*s == '\0')
 	return(0);
@@ -5977,7 +5989,7 @@ PUBLIC time_t LYmktime ARGS2(
      *	Get the numeric day and convert to an integer. - FM
      */
     start = s;
-    while (*s != '\0' && isdigit((unsigned char)*s))
+    while (*s != '\0' && isdigit(UCH(*s)))
 	s++;
     if (*s == '\0' || (s - start) > 2)
 	return(0);
@@ -5989,18 +6001,18 @@ PUBLIC time_t LYmktime ARGS2(
     /*
      *	Get the month string and convert to an integer. - FM
      */
-    while (*s != '\0' && !isalnum((unsigned char)*s))
+    while (*s != '\0' && !isalnum(UCH(*s)))
 	s++;
     if (*s == '\0')
 	return(0);
     start = s;
-    while (*s != '\0' && isalnum((unsigned char)*s))
+    while (*s != '\0' && isalnum(UCH(*s)))
 	s++;
     if ((*s == '\0') ||
-	(s - start) < (isdigit((unsigned char)*(s - 1)) ? 2 : 3) ||
-	(s - start) > (isdigit((unsigned char)*(s - 1)) ? 2 : 9))
+	(s - start) < (isdigit(UCH(*(s - 1))) ? 2 : 3) ||
+	(s - start) > (isdigit(UCH(*(s - 1))) ? 2 : 9))
 	return(0);
-    LYstrncpy(temp, start, (isdigit((unsigned char)*(s - 1)) ? 2 : 3));
+    LYstrncpy(temp, start, (isdigit(UCH(*(s - 1))) ? 2 : 3));
     switch (TOUPPER(temp[0])) {
 	case '0':
 	case '1':
@@ -6080,12 +6092,12 @@ PUBLIC time_t LYmktime ARGS2(
     /*
      *	Get the numeric year string and convert to an integer. - FM
      */
-    while (*s != '\0' && !isdigit((unsigned char)*s))
+    while (*s != '\0' && !isdigit(UCH(*s)))
 	s++;
     if (*s == '\0')
 	return(0);
     start = s;
-    while (*s != '\0' && isdigit((unsigned char)*s))
+    while (*s != '\0' && isdigit(UCH(*s)))
 	s++;
     if ((s - start) == 4) {
 	LYstrncpy(temp, start, 4);
@@ -6114,7 +6126,7 @@ PUBLIC time_t LYmktime ARGS2(
     /*
      *	Get the numeric hour string and convert to an integer. - FM
      */
-    while (*s != '\0' && !isdigit((unsigned char)*s))
+    while (*s != '\0' && !isdigit(UCH(*s)))
 	s++;
     if (*s == '\0') {
 	hour = 0;
@@ -6122,7 +6134,7 @@ PUBLIC time_t LYmktime ARGS2(
 	seconds = 0;
     } else {
 	start = s;
-	while (*s != '\0' && isdigit((unsigned char)*s))
+	while (*s != '\0' && isdigit(UCH(*s)))
 	    s++;
 	if (*s != ':' || (s - start) > 2)
 	    return(0);
@@ -6132,12 +6144,12 @@ PUBLIC time_t LYmktime ARGS2(
 	/*
 	 *  Get the numeric minutes string and convert to an integer. - FM
 	 */
-	while (*s != '\0' && !isdigit((unsigned char)*s))
+	while (*s != '\0' && !isdigit(UCH(*s)))
 	    s++;
 	if (*s == '\0')
 	    return(0);
 	start = s;
-	while (*s != '\0' && isdigit((unsigned char)*s))
+	while (*s != '\0' && isdigit(UCH(*s)))
 	    s++;
 	if (*s != ':' || (s - start) > 2)
 	    return(0);
@@ -6147,12 +6159,12 @@ PUBLIC time_t LYmktime ARGS2(
 	/*
 	 *  Get the numeric seconds string and convert to an integer. - FM
 	 */
-	while (*s != '\0' && !isdigit((unsigned char)*s))
+	while (*s != '\0' && !isdigit(UCH(*s)))
 	    s++;
 	if (*s == '\0')
 	    return(0);
 	start = s;
-	while (*s != '\0' && isdigit((unsigned char)*s))
+	while (*s != '\0' && isdigit(UCH(*s)))
 	    s++;
 	if (*s == '\0' || (s - start) > 2)
 	    return(0);
@@ -6546,7 +6558,7 @@ PUBLIC FILE *LYOpenTemp ARGS3(
 	     || (sb.st_mode & (S_IWOTH | S_IWGRP)) != 0) {
 		make_it = TRUE;
 		CTRACE((tfp, "lynx_temp_space is not our directory %s owner %d mode %03o\n",
-			     lynx_temp_space, sb.st_uid, sb.st_mode & 0777));
+			     lynx_temp_space, (int) sb.st_uid, (int) sb.st_mode & 0777));
 	    }
 	} else {
 	    make_it = TRUE;
@@ -7172,12 +7184,12 @@ PUBLIC BOOLEAN LYValidateFilename ARGS2(
 #if defined(__DJGPP__) || defined(_WINDOWS)
     if (strchr(result, ':') != NULL)
 	cp = NULL;
-    else 
+    else
 #endif /*  __DJGPP__ || _WINDOWS */
 	{
 #ifdef SUPPORT_CHDIR
 	    static char buf[LY_MAXPATH];
-	    cp = Current_Dir(buf);	    
+	    cp = Current_Dir(buf);
 #else
 	    cp = original_dir;
 #endif
@@ -7520,6 +7532,9 @@ PUBLIC int LYSystem ARGS1(
     BOOLEAN sigtstp_saved = FALSE;
 #endif
     int saved_errno = 0;
+#ifdef __EMX__
+    int scrsize[4];
+#endif
 
     fflush(stdout);
     fflush(stderr);
@@ -7539,6 +7554,8 @@ PUBLIC int LYSystem ARGS1(
        Native command-(non)-shell will not tolerate this. */
     {
 	char *space = command, *slash = command;
+
+	_scrsize(scrsize);
 	while (*space && *space != ' ' && *space != '\t')
 	    space++;
 	while (slash < space && *slash != '/')
@@ -7641,6 +7658,15 @@ PUBLIC int LYSystem ARGS1(
 #if !defined(UCX) || !defined(VAXC) /* errno not modifiable ?? */
     set_errno(saved_errno);	/* may have been clobbered */
 #endif
+#ifdef __EMX__			/* Check whether the screen size changed */
+    _scrsize(scrsize+2);
+    if ((scrsize[0] != scrsize[2]) || (scrsize[1] != scrsize[3])) {
+	CTRACE((tfp, "EMX update size...\n"));
+	LYcols = scrsize[2];
+	LYlines = scrsize[3];
+	recent_sizechange = TRUE;
+    }
+#endif
     return code;
 }
 
diff --git a/src/LYUtils.h b/src/LYUtils.h
index 4573192e..6d78a076 100644
--- a/src/LYUtils.h
+++ b/src/LYUtils.h
@@ -34,6 +34,10 @@
 
 #define LYIsPipeCommand(s) ((s)[0] == '|')
 
+#define LYCharINTERRUPT1 (FROMASCII(3)) /* Control-C */
+#define LYCharINTERRUPT2 (FROMASCII(7)) /* Control-G */
+#define LYCharIsINTERRUPT(ch)	((ch) == LYCharINTERRUPT1 || ch == LYCharINTERRUPT2)
+
 #if defined(DOSPATH) || defined(__EMX__)
 #define LYIsPathSep(ch) ((ch) == '/' || (ch) == '\\')
 #else
diff --git a/src/LYrcFile.c b/src/LYrcFile.c
index 3671ca5f..e253d006 100644
--- a/src/LYrcFile.c
+++ b/src/LYrcFile.c
@@ -236,7 +236,7 @@ PUBLIC void read_rc ARGS1(FILE *, fp)
 				/*
 				 *  Skip spaces.
 				 */
-				if (isspace(*MBM_cp1)) {
+				if (isspace(UCH(*MBM_cp1))) {
 				    MBM_cp1++;
 				    continue;
 				} else {
diff --git a/src/UCAuto.c b/src/UCAuto.c
index 86e48f22..5ed8ece8 100644
--- a/src/UCAuto.c
+++ b/src/UCAuto.c
@@ -249,7 +249,7 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
        */
 
     if (!strncmp(name, "iso-8859-1", 10) &&
-	       (!name[10] || !isdigit((unsigned char)name[10]))
+	       (!name[10] || !isdigit(UCH(name[10])))
 	) {
 	if ((lastHasUmap == Is_Set) && !strcmp(lastname, "cp850")) {
 	    /*
@@ -292,7 +292,7 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
 	HasUmap = Dunno; /* distributed lat0 files have bogus map data! */
 	Utf = Is_Unset;
     } else if (!strncmp(name, "iso-8859-", 9)) {
-	if (strlen(name) <= 10 || !isdigit((unsigned char)name[10]))
+	if (strlen(name) <= 10 || !isdigit(UCH(name[10])))
 	    HTSprintf0(&tmpbuf1, "iso0%s", &name[9]);
 	else
 	    HTSprintf0(&tmpbuf1, "iso%s", &name[9]);
diff --git a/src/UCdomap.c b/src/UCdomap.c
index 64875fef..95d126db 100644
--- a/src/UCdomap.c
+++ b/src/UCdomap.c
@@ -380,7 +380,7 @@ PRIVATE unsigned char inverse_translate ARGS1(
     } else {
 	return ((inv_translate && inv_translate[glyph]) ?
 				   inv_translate[glyph] :
-				   (unsigned char)(glyph & 0xff));
+				   UCH(glyph & 0xff));
     }
 }
 
@@ -424,7 +424,7 @@ PRIVATE int con_get_trans_old ARGS1(
 #ifdef NOTDEFINED
 	put_user((ch & ~0xff) ? 0 : ch, arg+i);
 #endif /* NOTDEFINED */
-	arg[i] = (unsigned char)((ch & ~0xff) ? 0 : ch);
+	arg[i] = UCH((ch & ~0xff) ? 0 : ch);
     }
     return 0;
 }
@@ -1224,7 +1224,7 @@ PUBLIC int UCTransChar ARGS3(
 
 #ifndef UC_NO_SHORTCUTS
     if (charset_in == charset_out)
-	return (unsigned char)ch_in;
+	return UCH(ch_in);
 #endif /* UC_NO_SHORTCUTS */
     if (charset_in < 0)
 	return -11;
@@ -1263,7 +1263,7 @@ PUBLIC int UCTransChar ARGS3(
 	}
     }
     UC_translate = set_translate(Gn);
-    unicode = UC_translate[(unsigned char)ch_in];
+    unicode = UC_translate[UCH(ch_in)];
     if (!isdefault) {
 	rc = conv_uni_to_pc(unicode, 0);
 	if (rc >= 0)
@@ -1289,16 +1289,16 @@ PUBLIC long int UCTransToUni ARGS2(
   unsigned char ch_iu;
   int UChndl_in;
 
-  ch_iu = (unsigned char)ch_in;
+  ch_iu = UCH(ch_in);
 #ifndef UC_NO_SHORTCUTS
     if (charset_in == LATIN1)
 	return ch_iu;
-    if ((unsigned char)ch_in < 128 && (unsigned char)ch_in >= 32)
+    if (UCH(ch_in) < 128 && UCH(ch_in) >= 32)
 	return ch_iu;
 #endif /* UC_NO_SHORTCUTS */
     if (charset_in < 0)
 	return -11;
-    if ((unsigned char)ch_in < 32 &&
+    if (UCH(ch_in) < 32 &&
 	LYCharSet_UC[charset_in].enc != UCT_ENC_8BIT_C0)
 	/*
 	 *  Don't translate C0 chars except for specific charsets.
@@ -1313,7 +1313,7 @@ PUBLIC long int UCTransToUni ARGS2(
     }
 
   UC_translate = set_translate(Gn);
-  unicode = UC_translate[(unsigned char)ch_in];
+  unicode = UC_translate[UCH(ch_in)];
 
   return unicode;
 }
@@ -1327,12 +1327,12 @@ PUBLIC int UCReverseTransChar ARGS3(
     int rc = -1;
     int UChndl_in, UChndl_out;
     int isdefault;
-    int i_ch = (unsigned char)ch_out;
+    int i_ch = UCH(ch_out);
     CONST u16 * ut;
 
 #ifndef UC_NO_SHORTCUTS
     if (charset_in == charset_out)
-	return (unsigned char)ch_out;
+	return UCH(ch_out);
 #endif /* UC_NO_SHORTCUTS */
     if (charset_in < 0)
 	return -11;
@@ -1425,7 +1425,7 @@ PUBLIC int UCTransCharStr ARGS6(
     }
 
     UC_translate = set_translate(Gn);
-    unicode = UC_translate[(unsigned char)ch_in];
+    unicode = UC_translate[UCH(ch_in)];
 
     if (chk_single_flag) {
 	if (!isdefault) {
@@ -1644,9 +1644,9 @@ PUBLIC int UCGetLYhndl_byMIME ARGS1(
 #endif
     if ((!strncasecomp(value, "ibm", 3) ||
 	 !strncasecomp(value, "cp-", 3)) &&
-	isdigit((unsigned char)value[3]) &&
-	isdigit((unsigned char)value[4]) &&
-	isdigit((unsigned char)value[5])) {
+	isdigit(UCH(value[3])) &&
+	isdigit(UCH(value[4])) &&
+	isdigit(UCH(value[5]))) {
 	/*
 	 * For "ibmNNN<...>" or "cp-NNN", try "cpNNN<...>"
 	 * if not yet found.  - KW & FM
@@ -1659,9 +1659,9 @@ PUBLIC int UCGetLYhndl_byMIME ARGS1(
 	return getLYhndl_byCP("windows-", value + 3);
     }
     if (!strncasecomp(value, "windows-", 8) &&
-	isdigit((unsigned char)value[8]) &&
-	isdigit((unsigned char)value[9]) &&
-	isdigit((unsigned char)value[10])) {
+	isdigit(UCH(value[8])) &&
+	isdigit(UCH(value[9])) &&
+	isdigit(UCH(value[10]))) {
 	/*
 	 * For "windows-NNN<...>", try "cpNNN<...>" - FM
 	 */
@@ -1813,20 +1813,20 @@ PRIVATE CONST char ** UC_setup_LYCharSets_repl ARGS2(
 	s7 = SevenBitApproximations[i];
 	s8 = ISO_Latin1[i];
 	*p = s7;
-	if (s8 && (unsigned char)(*s8) >= 160 && strlen(s8) == 1) {
+	if (s8 && UCH(*s8) >= 160 && strlen(s8) == 1) {
 	    /*
 	     *	We have an entity that is mapped to
 	     *	one valid eightbit latin1 char.
 	     */
-	    if (ti[(unsigned char)(*s8) - 160] >= lowest8 &&
-		!(s7[0] == ti[(unsigned char)(*s8) - 160] &&
+	    if (ti[UCH(*s8) - 160] >= lowest8 &&
+		!(s7[0] == ti[UCH(*s8) - 160] &&
 		s7[1] == '\0')) {
 		/*
 		 *  ...which in turn is mapped, by our "new method",
 		 *   to another valid eightbit char for this new
 		 *   charset: either to itself...
 		 */
-		if (ti[(unsigned char)(*s8) - 160] == (unsigned char)(*s8)) {
+		if (ti[UCH(*s8) - 160] == UCH(*s8)) {
 		    *p = s8;
 		} else {
 		    /*
@@ -1840,7 +1840,7 @@ PRIVATE CONST char ** UC_setup_LYCharSets_repl ARGS2(
 			FREE(prepl);
 			return NULL;
 		    }
-		    (*p)[0] = ti[(unsigned char)(*s8) - 160];
+		    (*p)[0] = ti[UCH(*s8) - 160];
 		    (*p)[1] = '\0';
 #else
 		    /*
@@ -1851,18 +1851,18 @@ PRIVATE CONST char ** UC_setup_LYCharSets_repl ARGS2(
 		     */
 		    static char dummy[2];	/* one char dummy string */
 
-		    dummy[0] = ti[(unsigned char)(*s8) - 160];
+		    dummy[0] = ti[UCH(*s8) - 160];
 		    *p = HTAtom_name(HTAtom_for(dummy));
 #endif /* NOTDEFINED */
 		}
 		changed = 1;
-	    } else if (tp[(unsigned char)(*s8) - 160] &&
-		       strcmp(s7, tp[(unsigned char)(*s8) - 160])) {
+	    } else if (tp[UCH(*s8) - 160] &&
+		       strcmp(s7, tp[UCH(*s8) - 160])) {
 		/*
 		 *  ...or which is mapped, by our "new method",
 		 *  to a replacement string for this new charset.
 		 */
-		*p = tp[(unsigned char)(*s8) - 160];
+		*p = tp[UCH(*s8) - 160];
 		changed = 1;
 	    }
 	}
diff --git a/src/Xsystem.c b/src/Xsystem.c
index 60782125..84938e0d 100644
--- a/src/Xsystem.c
+++ b/src/Xsystem.c
@@ -1,4 +1,4 @@
-/* @Id: Xsystem.c 1.7 Fri, 31 Mar 2000 16:33:40 -0800 dickey @
+/* @Id: Xsystem.c 1.8 Wed, 25 Oct 2000 09:35:28 -0700 dickey @
  *	like system("cmd") but return with exit code of "cmd"
  *	for Turbo-C/MS-C/LSI-C
  *  This code is in the public domain.
@@ -51,8 +51,7 @@
 
 extern char *mktemp(char *);
 
-#define UCH(c)   ((unsigned char)(c))
-#define isk1(c)  ((0x81<=UCH(c)&&UCH(c)<=0x9F)||(0xE0<=UCH(c)&&UCH(c)<=0xFC))
+#define isk1(c)  ((0x81 <= UCH(c) && UCH(c) <= 0x9F) || (0xE0 <= UCH(c) && UCH(c) <= 0xFC))
 #define isq(c)   ((c) == '"')
 #define isspc(c) ((c) == ' ' || (c) == '\t')
 #define issep(c) (isspc(c) || (c) == '"' || (c) == '\'' || (c) == '<' || (c) == '>' || (c) == 0)
diff --git a/src/chrtrans/makeuctb.c b/src/chrtrans/makeuctb.c
index 14d0dd54..611e737d 100644
--- a/src/chrtrans/makeuctb.c
+++ b/src/chrtrans/makeuctb.c
@@ -26,11 +26,11 @@
 #endif /* exit */
 
 #ifndef TOUPPER
-#define TOUPPER(c) (islower((unsigned char)c) ? toupper((unsigned char)c) : (c))
+#define TOUPPER(c) (islower(UCH(c)) ? toupper(UCH(c)) : (c))
 #endif /* !TOLOWER */
 
 #ifndef TOLOWER
-#define TOLOWER(c) (isupper((unsigned char)c) ? tolower((unsigned char)c) : (c))
+#define TOLOWER(c) (isupper(UCH(c)) ? tolower(UCH(c)) : (c))
 #endif /* !TOLOWER */
 
 #include <UCkd.h>
@@ -112,8 +112,11 @@ PRIVATE int getunicode ARGS1(
     if (*p == '-') {
 	return -2;
     } else if (*p != 'U' || p[1] != '+' ||
-	       !isxdigit(p[2]) || !isxdigit(p[3]) || !isxdigit(p[4]) ||
-	       !isxdigit(p[5]) || isxdigit(p[6])) {
+	       !isxdigit(UCH(p[2])) ||
+	       !isxdigit(UCH(p[3])) ||
+	       !isxdigit(UCH(p[4])) ||
+	       !isxdigit(UCH(p[5])) ||
+	        isxdigit(UCH(p[6]))) {
 	return -1;
     }
     *p0 = p+6;
@@ -559,9 +562,9 @@ PUBLIC int main ARGS2(
 		 *  We had ':'.
 		 */
 		for (ch = *(++p); (ch = *p) != '\0'; p++, p1++) {
-		    if ((unsigned char)ch < 32 || ch == '\\' || ch == '\"' ||
-			(unsigned char)ch >= 127) {
-			sprintf(p1, "\\%.3o", (unsigned char)ch);
+		    if (UCH(ch) < 32 || ch == '\\' || ch == '\"' ||
+			UCH(ch) >= 127) {
+			sprintf(p1, "\\%.3o", UCH(ch));
 #ifdef NOTDEFINED
 			fprintf(stderr, "%s\n", tbuf);
 #endif /* NOTDEFINED */
@@ -763,7 +766,7 @@ PUBLIC int main ARGS2(
 	for (i = 0, p = this_MIMEcharset;
 	     *p && (i < UC_MAXLEN_ID_APPEND-1);
 	     p++, i++) {
-	    id_append[i+1] = isalnum(*p) ? *p : '_';
+	    id_append[i+1] = isalnum(UCH(*p)) ? *p : '_';
 	}
 	id_append[i+1] = '\0';
     }
diff --git a/src/makefile.in b/src/makefile.in
index ca4055b9..bfdaf1cb 100644
--- a/src/makefile.in
+++ b/src/makefile.in
@@ -176,6 +176,9 @@ $(TABLES):
 UCdomap.o: UCdomap.c chrtrans/UCkd.h chrtrans/makeuctb$x chrtrans/makeuctb.c \
 	UCdomap.h $(CMN)UCMap.h $(TABLES) $(top_srcdir)/userdefs.h
 
+chrtrans/makeuctb$x:
+	cd chrtrans; make makeuctb$x
+
 UCAux.o : UCAux.c $(CMN)UCAux.h $(CMN)UCDefs.h
 LYCookie.o: $(top_srcdir)/userdefs.h
 
diff --git a/userdefs.h b/userdefs.h
index 8d4abb0c..e54b1566 100644
--- a/userdefs.h
+++ b/userdefs.h
@@ -1345,11 +1345,11 @@
  * the version definition with the Project Version on checkout.  Just
  * ignore it. - kw */
 /* $Format: "#define LYNX_VERSION \"$ProjectVersion$\""$ */
-#define LYNX_VERSION "2.8.4dev.11"
+#define LYNX_VERSION "2.8.4dev.12"
 #define LYNX_WWW_HOME "http://lynx.browser.org/"
 #define LYNX_WWW_DIST "http://lynx.isc.org/current/"
 /* $Format: "#define LYNX_DATE \"$ProjectDate$\""$ */
-#define LYNX_DATE "Wed, 18 Oct 2000 18:54:01 -0700"
+#define LYNX_DATE "Wed, 25 Oct 2000 09:35:28 -0700"
 #define LYNX_DATE_OFF 5		/* truncate the automatically-generated date */
 #define LYNX_DATE_LEN 11	/* truncate the automatically-generated date */