about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/AttrList.h62
-rw-r--r--src/GridText.c132
-rw-r--r--src/GridText.h381
-rw-r--r--src/HTAlert.h78
-rw-r--r--src/HTForms.h174
-rw-r--r--src/HTInit.c6
-rw-r--r--src/HTML.c59
-rw-r--r--src/HTML.h372
-rw-r--r--src/HTNestedList.h74
-rw-r--r--src/HTSaveToFile.h26
-rw-r--r--src/LYBookmark.c2
-rw-r--r--src/LYBookmark.h29
-rw-r--r--src/LYCgi.h10
-rw-r--r--src/LYCharSets.h123
-rw-r--r--src/LYCharUtils.c33
-rw-r--r--src/LYCharUtils.h161
-rw-r--r--src/LYClean.h20
-rw-r--r--src/LYCookie.c6
-rw-r--r--src/LYCookie.h90
-rw-r--r--src/LYCurses.c17
-rw-r--r--src/LYCurses.h236
-rw-r--r--src/LYDownload.c3
-rw-r--r--src/LYDownload.h14
-rw-r--r--src/LYEdit.h14
-rw-r--r--src/LYEditmap.c6
-rw-r--r--src/LYExtern.h14
-rw-r--r--src/LYGCurses.h161
-rw-r--r--src/LYGetFile.c7
-rw-r--r--src/LYGetFile.h27
-rw-r--r--src/LYGlobalDefs.h816
-rw-r--r--src/LYHash.h116
-rw-r--r--src/LYHistory.c68
-rw-r--r--src/LYHistory.h44
-rw-r--r--src/LYJump.c20
-rw-r--r--src/LYJump.h48
-rw-r--r--src/LYJustify.h38
-rw-r--r--src/LYKeymap.c6
-rw-r--r--src/LYKeymap.h304
-rw-r--r--src/LYList.h12
-rw-r--r--src/LYLocal.c34
-rw-r--r--src/LYLocal.h37
-rw-r--r--src/LYMail.h53
-rw-r--r--src/LYMain.c43
-rw-r--r--src/LYMainLoop.c66
-rw-r--r--src/LYMainLoop.h32
-rw-r--r--src/LYMap.c52
-rw-r--r--src/LYMap.h24
-rw-r--r--src/LYNews.h12
-rw-r--r--src/LYOptions.c4
-rw-r--r--src/LYOptions.h38
-rw-r--r--src/LYPrettySrc.c9
-rw-r--r--src/LYPrettySrc.h108
-rw-r--r--src/LYPrint.c2
-rw-r--r--src/LYPrint.h18
-rw-r--r--src/LYReadCFG.c10
-rw-r--r--src/LYReadCFG.h56
-rw-r--r--src/LYSearch.c3
-rw-r--r--src/LYSearch.h19
-rw-r--r--src/LYShowInfo.c4
-rw-r--r--src/LYShowInfo.h20
-rw-r--r--src/LYSignal.h19
-rw-r--r--src/LYStrings.c9
-rw-r--r--src/LYStrings.h394
-rw-r--r--src/LYStructs.h178
-rw-r--r--src/LYStyle.c10
-rw-r--r--src/LYStyle.h52
-rw-r--r--src/LYTraversal.h20
-rw-r--r--src/LYUpload.h13
-rw-r--r--src/LYUtils.c119
-rw-r--r--src/LYUtils.h431
-rw-r--r--src/LYrcFile.c8
-rw-r--r--src/TRSTable.c35
-rw-r--r--src/TRSTable.h55
-rw-r--r--src/UCAuto.c9
-rw-r--r--src/UCAuto.h10
-rw-r--r--src/UCdomap.h86
-rw-r--r--src/chrtrans/caselower.h4
-rw-r--r--src/chrtrans/makeuctb.c3
-rw-r--r--src/makefile.in3
79 files changed, 3072 insertions, 2839 deletions
diff --git a/src/AttrList.h b/src/AttrList.h
index c466714d..b73babc7 100644
--- a/src/AttrList.h
+++ b/src/AttrList.h
@@ -4,33 +4,36 @@
 #include <HText.h>
 #include <HTMLDTD.h>
 
-enum {
-    ABS_OFF = 0,
-    STACK_OFF = 0,
-    STACK_ON,
-    ABS_ON
-};
+#ifdef __cplusplus
+extern "C" {
+#endif
+    enum {
+	ABS_OFF = 0,
+	STACK_OFF = 0,
+	STACK_ON,
+	ABS_ON
+    };
 
 #define STARTAT 8
 
-enum {
-    DSTYLE_LINK = HTML_A + STARTAT,
-    DSTYLE_STATUS = HTML_ELEMENTS + STARTAT,
-    DSTYLE_ALINK,		/* active link */
-    DSTYLE_NORMAL,		/* default attributes */
-    DSTYLE_OPTION,		/* option on the option screen */
-    DSTYLE_VALUE,		/* value on the option screen */
-    DSTYLE_HIGH,
-    DSTYLE_CANDY,		/* possibly going to vanish */
-    DSTYLE_WHEREIS,		/* whereis search target */
-    DSTYLE_ELEMENTS
-};
-
-typedef struct {
-    int color;			/* color highlighting to be done */
-    int mono;			/* mono highlighting to be done */
-    int cattr;			/* attributes to go with the color */
-} HTCharStyle;
+    enum {
+	DSTYLE_LINK = HTML_A + STARTAT,
+	DSTYLE_STATUS = HTML_ELEMENTS + STARTAT,
+	DSTYLE_ALINK,		/* active link */
+	DSTYLE_NORMAL,		/* default attributes */
+	DSTYLE_OPTION,		/* option on the option screen */
+	DSTYLE_VALUE,		/* value on the option screen */
+	DSTYLE_HIGH,
+	DSTYLE_CANDY,		/* possibly going to vanish */
+	DSTYLE_WHEREIS,		/* whereis search target */
+	DSTYLE_ELEMENTS
+    };
+
+    typedef struct {
+	int color;		/* color highlighting to be done */
+	int mono;		/* mono highlighting to be done */
+	int cattr;		/* attributes to go with the color */
+    } HTCharStyle;
 
 #define HText_characterStyle CTRACE((tfp,"HTC called from %s/%d\n",__FILE__,__LINE__));_internal_HTC
 
@@ -38,16 +41,19 @@ typedef struct {
 #define HText_characterStyle _internal_HTC
 
 #if defined(USE_COLOR_STYLE)
-extern void _internal_HTC(HText *text, int style, int dir);
+    extern void _internal_HTC(HText *text, int style, int dir);
 
 #define TEMPSTRINGSIZE 256
-extern char class_string[TEMPSTRINGSIZE];
+    extern char class_string[TEMPSTRINGSIZE];
 
 /* stack of attributes during page rendering */
 #define MAX_LAST_STYLES 128
-extern int last_styles[MAX_LAST_STYLES];
-extern int last_colorattr_ptr;
+    extern int last_styles[MAX_LAST_STYLES];
+    extern int last_colorattr_ptr;
 
 #endif
 
+#ifdef __cplusplus
+}
+#endif
 #endif
diff --git a/src/GridText.c b/src/GridText.c
index 6f2819a3..acf4503e 100644
--- a/src/GridText.c
+++ b/src/GridText.c
@@ -388,6 +388,38 @@ typedef struct {
     int column;			/* Zero-based column value */
 } HTTabID;
 
+typedef enum {
+    S_text,
+    S_esc,
+    S_dollar,
+    S_paren,
+    S_nonascii_text,
+    S_dollar_paren,
+    S_jisx0201_text
+} eGridState;			/* Escape sequence? */
+
+#ifdef USE_TH_JP_AUTO_DETECT
+typedef enum {			/* Detected Kanji code */
+    DET_SJIS,
+    DET_EUC,
+    DET_NOTYET,
+    DET_MIXED
+} eDetectedKCode;
+
+typedef enum {
+    SJIS_state_neutral,
+    SJIS_state_in_kanji,
+    SJIS_state_has_bad_code
+} eSJIS_status;
+
+typedef enum {
+    EUC_state_neutral,
+    EUC_state_in_kanji,
+    EUC_state_in_kana,
+    EUC_state_has_bad_code
+} eEUC_status;
+#endif
+
 /*	Notes on struct _Htext:
  *	next_line is valid if stale is false.
  *	top_of_screen line means the line at the top of the screen
@@ -436,33 +468,11 @@ struct _HText {
     HTkcode kcode;		/* Kanji code? */
     HTkcode specified_kcode;	/* Specified Kanji code */
 #ifdef USE_TH_JP_AUTO_DETECT
-    enum _detected_kcode {
-	DET_SJIS,
-	DET_EUC,
-	DET_NOTYET,
-	DET_MIXED
-    } detected_kcode;		/* Detected Kanji code */
-    enum _SJIS_status {
-	SJIS_state_neutral,
-	SJIS_state_in_kanji,
-	SJIS_state_has_bad_code
-    } SJIS_status;
-    enum _EUC_status {
-	EUC_state_neutral,
-	EUC_state_in_kanji,
-	EUC_state_in_kana,
-	EUC_state_has_bad_code
-    } EUC_status;
-#endif
-    enum grid_state {
-	S_text,
-	S_esc,
-	S_dollar,
-	S_paren,
-	S_nonascii_text,
-	S_dollar_paren,
-	S_jisx0201_text
-    } state;			/* Escape sequence? */
+    eDetectedKCode detected_kcode;
+    eSJIS_status SJIS_status;
+    eEUC_status EUC_status;
+#endif
+    eGridState state;		/* Escape sequence? */
     int kanji_buf;		/* Lead multibyte */
     int in_sjis;		/* SJIS flag */
     int halted;			/* emergency halt */
@@ -1173,13 +1183,13 @@ HText *HText_new(HTParentAnchor *anchor)
 HText *HText_new2(HTParentAnchor *anchor,
 		  HTStream *stream)
 {
-    HText *this = HText_new(anchor);
+    HText *result = HText_new(anchor);
 
     if (stream) {
-	this->target = stream;
-	this->targetClass = *stream->isa;	/* copy action procedures */
+	result->target = stream;
+	result->targetClass = *stream->isa;	/* copy action procedures */
     }
-    return this;
+    return result;
 }
 
 /*	Free Entire Text
@@ -1236,12 +1246,7 @@ void HText_free(HText *self)
      * Free the hidden links list.  -FM
      */
     if (self->hidden_links) {
-	char *href = NULL;
-	HTList *cur = self->hidden_links;
-
-	while (NULL != (href = (char *) HTList_nextObject(cur)))
-	    FREE(href);
-	HTList_delete(self->hidden_links);
+	LYFreeStringList(self->hidden_links);
 	self->hidden_links = NULL;
     }
 
@@ -2382,10 +2387,7 @@ static void display_page(HText *text, int line_number,
      * Free any un-reallocated links[] entries
      * from the previous page draw.  -FM
      */
-    for (i = nlinks; i < last_nlinks; i++) {
-	LYSetHilite(i, NULL);
-	FREE(links[i].lname);
-    }
+    LYFreeHilites(nlinks, last_nlinks);
     last_nlinks = nlinks;
 
     /*
@@ -3594,7 +3596,7 @@ void HText_appendCharacter(HText *text, int ch)
     if ((HTCJK == JAPANESE) && (text->detected_kcode != DET_MIXED) &&
 	(text->specified_kcode != SJIS) && (text->specified_kcode != EUC)) {
 	unsigned char c;
-	enum _detected_kcode save_d_kcode;
+	eDetectedKCode save_d_kcode;
 
 	c = UCH(ch);
 	save_d_kcode = text->detected_kcode;
@@ -4171,7 +4173,7 @@ void HText_appendCharacter(HText *text, int ch)
 	    (text->T.output_utf8 &&
 	     target_cu + UTF_XLEN(ch) >= LYcols_cu(text))) {
 	    int saved_kanji_buf;
-	    int saved_state;
+	    eGridState saved_state;
 
 	    new_line(text);
 	    line = text->last_line;
@@ -5967,7 +5969,7 @@ HTParentAnchor *HText_nodeAnchor(HText *text)
 HTChildAnchor *HText_childNextNumber(int number, void **prev)
 {
     /* Sorry, TextAnchor is not declared outside this file, use a cast. */
-    TextAnchor *a = *prev;
+    TextAnchor *a = (TextAnchor *) *prev;
 
     if (!HTMainText || number <= 0)
 	return (HTChildAnchor *) 0;	/* Fail */
@@ -7337,18 +7339,8 @@ HTAnchor *HText_linkSelTo(HText *me GCC_UNUSED,
  */
 void HTSearchQueries_free(void)
 {
-    char *query;
-    HTList *cur = search_queries;
-
-    if (!cur)
-	return;
-
-    while (NULL != (query = (char *) HTList_nextObject(cur))) {
-	FREE(query);
-    }
-    HTList_delete(search_queries);
+    LYFreeStringList(search_queries);
     search_queries = NULL;
-    return;
 }
 
 /*
@@ -7391,7 +7383,8 @@ void HTAddSearchQuery(char *query)
 int do_www_search(DocInfo *doc)
 {
     char searchstring[256], temp[256], *cp, *tmpaddress = NULL;
-    int ch, recall;
+    int ch;
+    RecallType recall;
     int QueryTotal;
     int QueryNum;
     BOOLEAN PreviousSearch = FALSE;
@@ -8866,8 +8859,12 @@ static void HText_AddHiddenLink(HText *text, TextAnchor *textanchor)
      */
     if ((dest = HTAnchor_followLink(textanchor->anchor)) &&
 	(text->hiddenlinkflag != HIDDENLINKS_IGNORE ||
-	 HTList_isEmpty(text->hidden_links)))
-	HTList_appendObject(text->hidden_links, HTAnchor_address(dest));
+	 HTList_isEmpty(text->hidden_links))) {
+	char *cp_freeme = NULL;
+
+	HTList_appendObject(text->hidden_links, cp_freeme = HTAnchor_address(dest));
+	FREE(cp_freeme);
+    }
 
     return;
 }
@@ -9281,7 +9278,7 @@ char *HText_setLastOptionValue(HText *text, char *value,
 	/*
 	 * Deal with newlines or tabs.
 	 */
-	convert_to_spaces(value, FALSE);
+	LYReduceBlanks(value);
 
 	if (!op_ptr) {
 	    /*
@@ -10380,7 +10377,8 @@ int HText_SubmitForm(FormInfo * submit_item, DocInfo *doc, char *link_name,
     if (!HTMainText)
 	return 0;
 
-    thisform = HTList_objectAt(HTMainText->forms, form_number - 1);
+    thisform = (PerFormInfo *) HTList_objectAt(HTMainText->forms, form_number
+					       - 1);
     /*  Sanity check */
     if (!thisform) {
 	CTRACE((tfp, "SubmitForm: form %d not in HTMainText's list!\n",
@@ -11526,7 +11524,7 @@ BOOL HText_hasUTF8OutputSet(HText *text)
 void HText_setKcode(HText *text, const char *charset,
 		    LYUCcharset *p_in)
 {
-    BOOL explicit;
+    BOOL charset_explicit;
 
     if (!text)
 	return;
@@ -11537,7 +11535,7 @@ void HText_setKcode(HText *text, const char *charset,
     if (!charset && !p_in) {
 	return;
     }
-    explicit = charset ? TRUE : FALSE;
+    charset_explicit = charset ? TRUE : FALSE;
     /*
      * If no explicit charset string, use the implied one.  - kw
      */
@@ -11563,11 +11561,11 @@ void HText_setKcode(HText *text, const char *charset,
      * is specified explicitely, otherwise text->kcode would cause
      * mishandling Japanese strings.  -- TH
      */
-    if (explicit && (!strcmp(charset, "shift_jis") ||
-		     !strcmp(charset, "x-sjis") ||	/* 1997/11/28 (Fri) 18:11:33 */
-		     !strcmp(charset, "x-shift-jis"))) {
+    if (charset_explicit && (!strcmp(charset, "shift_jis") ||
+			     !strcmp(charset, "x-sjis") ||	/* 1997/11/28 (Fri) 18:11:33 */
+			     !strcmp(charset, "x-shift-jis"))) {
 	text->kcode = SJIS;
-    } else if (explicit
+    } else if (charset_explicit
 #ifdef EXP_JAPANESEUTF8_SUPPORT
 	       && strcmp(charset, "utf-8")
 #endif
@@ -11601,7 +11599,7 @@ void HText_setKcode(HText *text, const char *charset,
 	}
     }
 
-    if (explicit
+    if (charset_explicit
 #ifdef EXP_JAPANESEUTF8_SUPPORT
 	&& strcmp(charset, "utf-8")
 #endif
diff --git a/src/GridText.h b/src/GridText.h
index 40cc7591..e5e2d44f 100644
--- a/src/GridText.h
+++ b/src/GridText.h
@@ -1,4 +1,3 @@
-
 /*	Specialities of GridText as subclass of HText
 */
 #ifndef LYGRIDTEXT_H
@@ -12,13 +11,16 @@
 
 #include <HTFont.h>
 
+#include <HTCJK.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
 #define TABSTOP 8
 #define SPACES  "        "	/* must be at least TABSTOP spaces long */
 #define SPLAT   '.'
-
 #define NOCHOP 0
 #define CHOP   1
-
 /* just for information:
 US-ASCII control characters <32 which are not defined in Unicode standard
 =00	U+0000	NULL
@@ -54,230 +56,229 @@ US-ASCII control characters <32 which are not defined in Unicode standard
 =1E	U+001E	RECORD SEPARATOR
 =1F	U+001F	UNIT SEPARATOR
 =7F	U+007F	DELETE
-*/
-
-extern int HTCurSelectGroupType;
-extern char *HTCurSelectGroupSize;
+*/ extern int HTCurSelectGroupType;
+    extern char *HTCurSelectGroupSize;
 
 #if defined(VMS) && defined(VAXC) && !defined(__DECC)
-extern int HTVirtualMemorySize;
-#endif /* VMS && VAXC && !__DECC */
+    extern int HTVirtualMemorySize;
+#endif				/* VMS && VAXC && !__DECC */
 
-extern HTChildAnchor *HText_childNextNumber(int n, void **prev);
-extern void HText_FormDescNumber(int n, const char **desc);
+    extern HTChildAnchor *HText_childNextNumber(int n, void **prev);
+    extern void HText_FormDescNumber(int n, const char **desc);
 
 /*	Is there any file left?
 */
-extern BOOL HText_canScrollUp(HText *text);
-extern BOOL HText_canScrollDown(void);
+    extern BOOL HText_canScrollUp(HText *text);
+    extern BOOL HText_canScrollDown(void);
 
 /*	Move display within window
 */
-extern void HText_scrollUp(HText *text);	/* One page */
-extern void HText_scrollDown(HText *text);	/* One page */
-extern void HText_scrollTop(HText *text);
-extern void HText_scrollBottom(HText *text);
-extern void HText_pageDisplay(int line_num, char *target);
-extern BOOL HText_pageHasPrevTarget(void);
-
-extern int HText_LinksInLines(HText *text, int line_num, int Lines);
-
-extern void HText_setLastChar(HText *text, char ch);
-extern char HText_getLastChar(HText *text);
-extern void HText_setIgnoreExcess(HText *text, BOOL ignore);
-
-extern int HText_sourceAnchors(HText *text);
-extern void HText_setStale(HText *text);
-extern void HText_refresh(HText *text);
-extern const char *HText_getTitle(void);
-extern const char *HText_getSugFname(void);
-extern void HTCheckFnameForCompression(char **fname,
-				       HTParentAnchor *anchor,
-				       BOOLEAN strip_ok);
-extern const char *HText_getLastModified(void);
-extern const char *HText_getDate(void);
-extern const char *HText_getHttpHeaders(void);
-extern const char *HText_getServer(void);
-extern const char *HText_getOwner(void);
-extern const char *HText_getContentBase(void);
-extern const char *HText_getContentLocation(void);
-extern const char *HText_getMessageID(void);
-extern const char *HText_getRevTitle(void);
+    extern void HText_scrollUp(HText *text);	/* One page */
+    extern void HText_scrollDown(HText *text);	/* One page */
+    extern void HText_scrollTop(HText *text);
+    extern void HText_scrollBottom(HText *text);
+    extern void HText_pageDisplay(int line_num, char *target);
+    extern BOOL HText_pageHasPrevTarget(void);
+
+    extern int HText_LinksInLines(HText *text, int line_num, int Lines);
+
+    extern void HText_setLastChar(HText *text, char ch);
+    extern char HText_getLastChar(HText *text);
+    extern void HText_setIgnoreExcess(HText *text, BOOL ignore);
+
+    extern int HText_sourceAnchors(HText *text);
+    extern void HText_setStale(HText *text);
+    extern void HText_refresh(HText *text);
+    extern const char *HText_getTitle(void);
+    extern const char *HText_getSugFname(void);
+    extern void HTCheckFnameForCompression(char **fname,
+					   HTParentAnchor *anchor,
+					   BOOLEAN strip_ok);
+    extern const char *HText_getLastModified(void);
+    extern const char *HText_getDate(void);
+    extern const char *HText_getHttpHeaders(void);
+    extern const char *HText_getServer(void);
+    extern const char *HText_getOwner(void);
+    extern const char *HText_getContentBase(void);
+    extern const char *HText_getContentLocation(void);
+    extern const char *HText_getMessageID(void);
+    extern const char *HText_getRevTitle(void);
 
 #ifdef USE_COLOR_STYLE
-extern const char *HText_getStyle(void);
+    extern const char *HText_getStyle(void);
 #endif
-extern void HText_setMainTextOwner(const char *owner);
-extern void print_wwwfile_to_fd(FILE *fp, BOOLEAN is_email, BOOLEAN is_reply);
-extern BOOL HText_select(HText *text);
-extern BOOL HText_POSTReplyLoaded(DocInfo *doc);
-extern BOOL HTFindPoundSelector(const char *selector);
-extern int HTGetRelLinkNum(int num, int rel, int cur);
-extern int HTGetLinkInfo(int number,
-			 int want_go,
-			 int *go_line,
-			 int *linknum,
-			 char **hightext,
-			 char **lname);
-extern BOOL HText_TAHasMoreLines(int curlink,
-				 int direction);
-extern int HTGetLinkOrFieldStart(int curlink,
-				 int *go_line,
-				 int *linknum,
-				 int direction,
-				 BOOLEAN ta_skip);
-extern BOOL HText_getFirstTargetInLine(HText *text,
-				       int line_num,
-				       BOOL utf_flag,
-				       int *offset,
-				       int *tLen,
-				       char **data,
-				       const char *target);
-extern int HTisDocumentSource(void);
-extern void HTuncache_current_document(void);
+    extern void HText_setMainTextOwner(const char *owner);
+    extern void print_wwwfile_to_fd(FILE *fp, BOOLEAN is_email, BOOLEAN is_reply);
+    extern BOOL HText_select(HText *text);
+    extern BOOL HText_POSTReplyLoaded(DocInfo *doc);
+    extern BOOL HTFindPoundSelector(const char *selector);
+    extern int HTGetRelLinkNum(int num, int rel, int cur);
+    extern int HTGetLinkInfo(int number,
+			     int want_go,
+			     int *go_line,
+			     int *linknum,
+			     char **hightext,
+			     char **lname);
+    extern BOOL HText_TAHasMoreLines(int curlink,
+				     int direction);
+    extern int HTGetLinkOrFieldStart(int curlink,
+				     int *go_line,
+				     int *linknum,
+				     int direction,
+				     BOOLEAN ta_skip);
+    extern BOOL HText_getFirstTargetInLine(HText *text,
+					   int line_num,
+					   BOOL utf_flag,
+					   int *offset,
+					   int *tLen,
+					   char **data,
+					   const char *target);
+    extern int HTisDocumentSource(void);
+    extern void HTuncache_current_document(void);
 
 #ifdef USE_SOURCE_CACHE
-extern BOOLEAN HTreparse_document(void);
-extern BOOLEAN HTcan_reparse_document(void);
-extern BOOLEAN HTdocument_settings_changed(void);
+    extern BOOLEAN HTreparse_document(void);
+    extern BOOLEAN HTcan_reparse_document(void);
+    extern BOOLEAN HTdocument_settings_changed(void);
 #endif
 
-extern BOOL HTLoadedDocumentEightbit(void);
-extern BOOL HText_LastLineEmpty(HText *me, BOOL IgnoreSpaces);
-extern BOOL HText_PreviousLineEmpty(HText *me, BOOL IgnoreSpaces);
-extern BOOL HText_inLineOne(HText *text);
-extern BOOLEAN HTLoadedDocumentIsHEAD(void);
-extern BOOLEAN HTLoadedDocumentIsSafe(void);
-extern bstring *HTLoadedDocumentPost_data(void);
-extern const char *HTLoadedDocumentBookmark(void);
-extern const char *HTLoadedDocumentCharset(void);
-extern const char *HTLoadedDocumentTitle(void);
-extern const char *HTLoadedDocumentURL(void);
-extern const char *HText_HiddenLinkAt(HText *text, int number);
-extern int HText_HiddenLinkCount(HText *text);
-extern int HText_LastLineOffset(HText *me);
-extern int HText_LastLineSize(HText *me, BOOL IgnoreSpaces);
-extern int HText_PreviousLineSize(HText *me, BOOL IgnoreSpaces);
-extern int HText_getCurrentColumn(HText *text);
-extern int HText_getLines(HText *text);
-extern int HText_getMaximumColumn(HText *text);
-extern int HText_getNumOfBytes(void);
-extern int HText_getNumOfLines(void);
-extern int HText_getTabIDColumn(HText *text, const char *name);
-extern int HText_getTopOfScreen(void);
-extern int do_www_search(DocInfo *doc);
-extern void HText_NegateLineOne(HText *text);
-extern void HText_RemovePreviousLine(HText *text);
-extern void HText_setNodeAnchorBookmark(const char *bookmark);
-extern void HText_setTabID(HText *text, const char *name);
-extern void *HText_pool_calloc(HText *text, unsigned size);
+    extern BOOL HTLoadedDocumentEightbit(void);
+    extern BOOL HText_LastLineEmpty(HText *me, BOOL IgnoreSpaces);
+    extern BOOL HText_PreviousLineEmpty(HText *me, BOOL IgnoreSpaces);
+    extern BOOL HText_inLineOne(HText *text);
+    extern BOOLEAN HTLoadedDocumentIsHEAD(void);
+    extern BOOLEAN HTLoadedDocumentIsSafe(void);
+    extern bstring *HTLoadedDocumentPost_data(void);
+    extern const char *HTLoadedDocumentBookmark(void);
+    extern const char *HTLoadedDocumentCharset(void);
+    extern const char *HTLoadedDocumentTitle(void);
+    extern const char *HTLoadedDocumentURL(void);
+    extern const char *HText_HiddenLinkAt(HText *text, int number);
+    extern int HText_HiddenLinkCount(HText *text);
+    extern int HText_LastLineOffset(HText *me);
+    extern int HText_LastLineSize(HText *me, BOOL IgnoreSpaces);
+    extern int HText_PreviousLineSize(HText *me, BOOL IgnoreSpaces);
+    extern int HText_getCurrentColumn(HText *text);
+    extern int HText_getLines(HText *text);
+    extern int HText_getMaximumColumn(HText *text);
+    extern int HText_getNumOfBytes(void);
+    extern int HText_getNumOfLines(void);
+    extern int HText_getTabIDColumn(HText *text, const char *name);
+    extern int HText_getTopOfScreen(void);
+    extern int do_www_search(DocInfo *doc);
+    extern void HText_NegateLineOne(HText *text);
+    extern void HText_RemovePreviousLine(HText *text);
+    extern void HText_setNodeAnchorBookmark(const char *bookmark);
+    extern void HText_setTabID(HText *text, const char *name);
+    extern void *HText_pool_calloc(HText *text, unsigned size);
 
 /* "simple table" stuff */
-extern int HText_endStblTABLE(HText *);
-extern int HText_trimCellLines(HText *text);
-extern void HText_cancelStbl(HText *);
-extern void HText_endStblCOLGROUP(HText *);
-extern void HText_endStblTD(HText *);
-extern void HText_endStblTR(HText *);
-extern void HText_startStblCOL(HText *, int, short, BOOL);
-extern void HText_startStblRowGroup(HText *, short);
-extern void HText_startStblTABLE(HText *, short);
-extern void HText_startStblTD(HText *, int, int, short, BOOL);
-extern void HText_startStblTR(HText *, short);
+    extern int HText_endStblTABLE(HText *);
+    extern int HText_trimCellLines(HText *text);
+    extern void HText_cancelStbl(HText *);
+    extern void HText_endStblCOLGROUP(HText *);
+    extern void HText_endStblTD(HText *);
+    extern void HText_endStblTR(HText *);
+    extern void HText_startStblCOL(HText *, int, short, BOOL);
+    extern void HText_startStblRowGroup(HText *, short);
+    extern void HText_startStblTABLE(HText *, short);
+    extern void HText_startStblTD(HText *, int, int, short, BOOL);
+    extern void HText_startStblTR(HText *, short);
 
 /* forms stuff */
-extern void HText_beginForm(char *action,
-			    char *method,
-			    char *enctype,
-			    char *title,
-			    const char *accept_cs);
-extern void HText_endForm(HText *text);
-extern void HText_beginSelect(char *name,
-			      int name_cs,
-			      BOOLEAN multiple,
-			      char *len);
-extern int HText_getOptionNum(HText *text);
-extern char *HText_setLastOptionValue(HText *text,
-				      char *value,
-				      char *submit_value,
-				      int order,
-				      BOOLEAN checked,
-				      int val_cs,
-				      int submit_val_cs);
-extern int HText_beginInput(HText *text,
-			    BOOL underline,
-			    InputFieldData * I);
-extern void HText_endInput(HText *text);
-extern int HText_SubmitForm(FormInfo * submit_item, DocInfo *doc,
-			    char *link_name,
-			    char *link_value);
-extern void HText_DisableCurrentForm(void);
-extern void HText_ResetForm(FormInfo * form);
-extern void HText_activateRadioButton(FormInfo * form);
-extern BOOLEAN HText_HaveUserChangedForms(HText *text);
-
-extern HTList *search_queries;	/* Previous isindex and whereis queries */
-extern void HTSearchQueries_free(void);
-extern void HTAddSearchQuery(char *query);
-
-extern void user_message(const char *message,
-			 const char *argument);
+    extern void HText_beginForm(char *action,
+				char *method,
+				char *enctype,
+				char *title,
+				const char *accept_cs);
+    extern void HText_endForm(HText *text);
+    extern void HText_beginSelect(char *name,
+				  int name_cs,
+				  BOOLEAN multiple,
+				  char *len);
+    extern int HText_getOptionNum(HText *text);
+    extern char *HText_setLastOptionValue(HText *text,
+					  char *value,
+					  char *submit_value,
+					  int order,
+					  BOOLEAN checked,
+					  int val_cs,
+					  int submit_val_cs);
+    extern int HText_beginInput(HText *text,
+				BOOL underline,
+				InputFieldData * I);
+    extern void HText_endInput(HText *text);
+    extern int HText_SubmitForm(FormInfo * submit_item, DocInfo *doc,
+				char *link_name,
+				char *link_value);
+    extern void HText_DisableCurrentForm(void);
+    extern void HText_ResetForm(FormInfo * form);
+    extern void HText_activateRadioButton(FormInfo * form);
+    extern BOOLEAN HText_HaveUserChangedForms(HText *text);
+
+    extern HTList *search_queries;	/* Previous isindex and whereis queries */
+    extern void HTSearchQueries_free(void);
+    extern void HTAddSearchQuery(char *query);
+
+    extern void user_message(const char *message,
+			     const char *argument);
 
 #define _user_message(msg, arg)	mustshow = TRUE, user_message(msg, arg)
 
-extern void www_user_search(int start_line,
-			    DocInfo *doc,
-			    char *target,
-			    int direction);
+    extern void www_user_search(int start_line,
+				DocInfo *doc,
+				char *target,
+				int direction);
 
-extern void print_crawl_to_fd(FILE *fp,
-			      char *thelink,
-			      char *thetitle);
-extern char *stub_HTAnchor_address(HTAnchor * me);
+    extern void print_crawl_to_fd(FILE *fp,
+				  char *thelink,
+				  char *thetitle);
+    extern char *stub_HTAnchor_address(HTAnchor * me);
 
-extern void HText_setToolbar(HText *text);
-extern BOOL HText_hasToolbar(HText *text);
+    extern void HText_setToolbar(HText *text);
+    extern BOOL HText_hasToolbar(HText *text);
 
-extern void HText_setNoCache(HText *text);
-extern BOOL HText_hasNoCacheSet(HText *text);
+    extern void HText_setNoCache(HText *text);
+    extern BOOL HText_hasNoCacheSet(HText *text);
 
-extern BOOL HText_hasUTF8OutputSet(HText *text);
-extern void HText_setKcode(HText *text,
-			   const char *charset,
-			   LYUCcharset *p_in);
+    extern BOOL HText_hasUTF8OutputSet(HText *text);
+    extern void HText_setKcode(HText *text,
+			       const char *charset,
+			       LYUCcharset *p_in);
 
-extern void HText_setBreakPoint(HText *text);
+    extern void HText_setBreakPoint(HText *text);
 
-extern BOOL HText_AreDifferent(HTParentAnchor *anchor,
-			       const char *full_address);
+    extern BOOL HText_AreDifferent(HTParentAnchor *anchor,
+				   const char *full_address);
 
-extern int HText_ExtEditForm(LinkInfo * form_link);
-extern void HText_ExpandTextarea(LinkInfo * form_link, int newlines);
-extern int HText_InsertFile(LinkInfo * form_link);
+    extern int HText_ExtEditForm(LinkInfo * form_link);
+    extern void HText_ExpandTextarea(LinkInfo * form_link, int newlines);
+    extern int HText_InsertFile(LinkInfo * form_link);
 
-extern void redraw_lines_of_link(int cur);
-extern void LYMoveToLink(int cur,
-			 const char *target,
-			 const char *hightext,
-			 int flag,
-			 BOOL inU,
-			 BOOL utf_flag);
+    extern void redraw_lines_of_link(int cur);
+    extern void LYMoveToLink(int cur,
+			     const char *target,
+			     const char *hightext,
+			     int flag,
+			     BOOL inU,
+			     BOOL utf_flag);
 
 #ifdef USE_PRETTYSRC
-extern void HTMark_asSource(void);
+    extern void HTMark_asSource(void);
 #endif
 
-extern int HTMainText_Get_UCLYhndl(void);
-
-#include <HTCJK.h>
+    extern int HTMainText_Get_UCLYhndl(void);
 
 #ifdef KANJI_CODE_OVERRIDE
-extern HTkcode last_kcode;
+    extern HTkcode last_kcode;
 #endif
 
-extern HTkcode HText_getKcode(HText *text);
-extern void HText_updateKcode(HText *text, HTkcode kcode);
-extern HTkcode HText_getSpecifiedKcode(HText *text);
-extern void HText_updateSpecifiedKcode(HText *text, HTkcode kcode);
+    extern HTkcode HText_getKcode(HText *text);
+    extern void HText_updateKcode(HText *text, HTkcode kcode);
+    extern HTkcode HText_getSpecifiedKcode(HText *text);
+    extern void HText_updateSpecifiedKcode(HText *text, HTkcode kcode);
 
-#endif /* LYGRIDTEXT_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYGRIDTEXT_H */
diff --git a/src/HTAlert.h b/src/HTAlert.h
index e9a48468..89f60e26 100644
--- a/src/HTAlert.h
+++ b/src/HTAlert.h
@@ -10,8 +10,10 @@
 
 #include <LYCookie.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #define ALERT_PREFIX_LEN 5
-
 /*      Display a message and get the input
  *
  *      On entry,
@@ -19,28 +21,27 @@
  *
  *      On exit,
  *              Return value is malloc'd string which must be freed.
- */
-extern char *HTPrompt(const char *Msg, const char *deflt);
+ */ extern char *HTPrompt(const char *Msg, const char *deflt);
 
 /*      Display a message, don't wait for input
  *
  *      On entry,
  *              The input is a list of parameters for printf.
  */
-extern void HTAlert(const char *Msg);
-extern void HTAlwaysAlert(const char *extra_prefix, const char *Msg);
-extern void HTInfoMsg(const char *Msg);
-extern void HTUserMsg(const char *Msg);
-extern void HTUserMsg2(const char *Msg, const char *Arg);
+    extern void HTAlert(const char *Msg);
+    extern void HTAlwaysAlert(const char *extra_prefix, const char *Msg);
+    extern void HTInfoMsg(const char *Msg);
+    extern void HTUserMsg(const char *Msg);
+    extern void HTUserMsg2(const char *Msg, const char *Arg);
 
 /*      Display a progress message for information (and diagnostics) only
  *
  *      On entry,
  *              The input is a list of parameters for printf.
  */
-extern const char *HTProgressUnits(int kilobytes);
-extern void HTProgress(const char *Msg);
-extern void HTReadProgress(long bytes, long total);
+    extern const char *HTProgressUnits(int kilobytes);
+    extern void HTProgress(const char *Msg);
+    extern void HTReadProgress(long bytes, long total);
 
 #define _HTProgress(msg)	mustshow = TRUE, HTProgress(msg)
 
@@ -48,12 +49,12 @@ extern void HTReadProgress(long bytes, long total);
  *  Indicates whether last HTConfirm was cancelled (^G or ^C) and
  *  resets flag. (so only call once!) - kw
  */
-extern BOOL HTLastConfirmCancelled(void);
+    extern BOOL HTLastConfirmCancelled(void);
 
 /*
  *	Supports logic for forced yes/no prompt results.
  */
-extern int HTForcedPrompt(int Opt, const char *Msg, int Dft);
+    extern int HTForcedPrompt(int Opt, const char *Msg, int Dft);
 
 /*      Display a message, then wait for 'yes' or 'no', allowing default
  *	response if a return or left-arrow is used.
@@ -65,7 +66,7 @@ extern int HTForcedPrompt(int Opt, const char *Msg, int Dft);
  *              If the user enters 'YES', returns TRUE, returns FALSE
  *              otherwise.
  */
-extern int HTConfirmDefault(const char *Msg, int Dft);
+    extern int HTConfirmDefault(const char *Msg, int Dft);
 
 /*      Display a message, then wait for 'yes' or 'no'.
  *
@@ -76,16 +77,16 @@ extern int HTConfirmDefault(const char *Msg, int Dft);
  *              If the user enters 'YES', returns TRUE, returns FALSE
  *              otherwise.
  */
-extern BOOL HTConfirm(const char *Msg);
+    extern BOOL HTConfirm(const char *Msg);
 
-extern BOOL confirm_post_resub(const char *address,
-			       const char *title,
-			       int if_imgmap,
-			       int if_file);
+    extern BOOL confirm_post_resub(const char *address,
+				   const char *title,
+				   int if_imgmap,
+				   int if_file);
 
 /*      Prompt for password without echoing the reply
  */
-extern char *HTPromptPassword(const char *Msg);
+    extern char *HTPromptPassword(const char *Msg);
 
 /*      Prompt both username and password       HTPromptUsernameAndPassword()
  *      ---------------------------------
@@ -108,10 +109,10 @@ extern char *HTPromptPassword(const char *Msg);
  *      are NOT freed.
  *
  */
-extern void HTPromptUsernameAndPassword(const char *Msg,
-					char **username,
-					char **password,
-					BOOL IsProxy);
+    extern void HTPromptUsernameAndPassword(const char *Msg,
+					    char **username,
+					    char **password,
+					    BOOL IsProxy);
 
 /*	Confirm a cookie operation.			HTConfirmCookie()
  *	---------------------------
@@ -127,9 +128,9 @@ extern void HTPromptUsernameAndPassword(const char *Msg,
  *	Returns FALSE on cancel,
  *		TRUE if the cookie should be set.
  */
-extern BOOL HTConfirmCookie(domain_entry * dp, const char *server,
-			    const char *name,
-			    const char *value);
+    extern BOOL HTConfirmCookie(domain_entry * dp, const char *server,
+				const char *name,
+				const char *value);
 
 /*      Confirm redirection of POST.		HTConfirmPostRedirect()
  *	----------------------------
@@ -142,19 +143,22 @@ extern BOOL HTConfirmCookie(domain_entry * dp, const char *server,
  *	  1 for redirect of POST with content,
  *	303 for redirect as GET without content
  */
-extern int HTConfirmPostRedirect(const char *Redirecting_url,
-				 int server_status);
+    extern int HTConfirmPostRedirect(const char *Redirecting_url,
+				     int server_status);
 
-extern void LYSleepAlert(void);
-extern void LYSleepDebug(void);
-extern void LYSleepInfo(void);
-extern void LYSleepMsg(void);
-extern void LYSleepReplay(void);
+    extern void LYSleepAlert(void);
+    extern void LYSleepDebug(void);
+    extern void LYSleepInfo(void);
+    extern void LYSleepMsg(void);
+    extern void LYSleepReplay(void);
 
 #ifdef HAVE_STRERROR
 #define LYStrerror strerror
 #else
-extern char *LYStrerror(int code);
-#endif /* HAVE_STRERROR */
+    extern char *LYStrerror(int code);
+#endif				/* HAVE_STRERROR */
 
-#endif /* HTALERT_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* HTALERT_H */
diff --git a/src/HTForms.h b/src/HTForms.h
index 71ef376d..8cf01eaa 100644
--- a/src/HTForms.h
+++ b/src/HTForms.h
@@ -5,93 +5,93 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
-/* in LYForms.c */
-
+#ifdef __cplusplus
+extern "C" {
+#endif
 /* change_form_link() calls change_form_link_ex() with all its args and FALSE
  * as last arg
- */
-extern int change_form_link(int cur,
-			    DocInfo *newdoc,
-			    BOOLEAN *refresh_screen,
-			    BOOLEAN use_last_tfpos,
-			    BOOLEAN immediate_submit);
-
-extern int change_form_link_ex(int cur,
-			       DocInfo *newdoc,
-			       BOOLEAN *refresh_screen,
-			       BOOLEAN use_last_tfpos,
-			       BOOLEAN immediate_submit,
-			       BOOLEAN draw_only);
+ */ extern int change_form_link(int cur,
+				DocInfo *newdoc,
+				BOOLEAN *refresh_screen,
+				BOOLEAN use_last_tfpos,
+				BOOLEAN immediate_submit);
+
+    extern int change_form_link_ex(int cur,
+				   DocInfo *newdoc,
+				   BOOLEAN *refresh_screen,
+				   BOOLEAN use_last_tfpos,
+				   BOOLEAN immediate_submit,
+				   BOOLEAN draw_only);
 
 /* InputFieldData is used to pass the info between HTML.c and Gridtext.c in
  * HText_beginInput()
  */
-typedef struct _InputFieldData {
-    const char *accept;
-    const char *align;
-    int checked;
-    const char *class;
-    int disabled;
-    const char *error;
-    const char *height;
-    const char *id;
-    const char *lang;
-    const char *max;
-    const char *maxlength;
-    const char *md;
-    const char *min;
-    const char *name;
-    int size;
-    const char *src;
-    const char *type;
-    char *value;
-    const char *width;
-    int name_cs;		/* charset handle for name */
-    int value_cs;		/* charset handle for value */
-    const char *accept_cs;
-} InputFieldData;
+    typedef struct _InputFieldData {
+	const char *accept;
+	const char *align;
+	int checked;
+	const char *iclass;
+	int disabled;
+	const char *error;
+	const char *height;
+	const char *id;
+	const char *lang;
+	const char *max;
+	const char *maxlength;
+	const char *md;
+	const char *min;
+	const char *name;
+	int size;
+	const char *src;
+	const char *type;
+	char *value;
+	const char *width;
+	int name_cs;		/* charset handle for name */
+	int value_cs;		/* charset handle for value */
+	const char *accept_cs;
+    } InputFieldData;
 
 /* The OptionType structure is for a linked list of option entries
  */
-typedef struct _OptionType {
-    char *name;			/* the name of the entry */
-    char *cp_submit_value;	/* the value to submit   */
-    int value_cs;		/* charset value is in   */
-    struct _OptionType *next;	/* the next entry        */
-} OptionType;
+    typedef struct _OptionType {
+	char *name;		/* the name of the entry */
+	char *cp_submit_value;	/* the value to submit   */
+	int value_cs;		/* charset value is in   */
+	struct _OptionType *next;	/* the next entry        */
+    } OptionType;
 
 /*
  * The FormInfo structure is used to contain the form field data within each
  * anchor.  A pointer to this structure is in the TextAnchor struct.
  */
-typedef struct _FormInfo {
-    char *name;			/* the name of the link */
-    int number;			/* which form is the link within */
-    int type;			/* string, int, etc. */
-    char *value;		/* user entered string data */
-    char *orig_value;		/* the original value */
-    int size;			/* width on the screen */
-    unsigned maxlength;		/* max width of data */
-    int group;			/* a group associated with the link
+    typedef struct _FormInfo {
+	char *name;		/* the name of the link */
+	int number;		/* which form is the link within */
+	int type;		/* string, int, etc. */
+	char *value;		/* user entered string data */
+	char *orig_value;	/* the original value */
+	int size;		/* width on the screen */
+	unsigned maxlength;	/* max width of data */
+	int group;		/* a group associated with the link
 				 *  this is used for select's
 				 */
-    int num_value;		/* value of the numerical fields */
-    int hrange;			/* high numerical range */
-    int lrange;			/* low numerical range */
-    OptionType *select_list;	/* array of option choices */
-    char *submit_action;	/* form's action */
-    int submit_method;		/* form's method */
-    char *submit_enctype;	/* form's entype */
-    char *submit_title;		/* form's title */
-    BOOL no_cache;		/* Always resubmit? */
-    char *cp_submit_value;	/* option value to submit */
-    char *orig_submit_value;	/* original submit value */
-    int size_l;			/* The length of the option list */
-    int disabled;		/* If YES, can't change values */
-    int name_cs;
-    int value_cs;
-    char *accept_cs;
-} FormInfo;
+	int num_value;		/* value of the numerical fields */
+	int hrange;		/* high numerical range */
+	int lrange;		/* low numerical range */
+	OptionType *select_list;	/* array of option choices */
+	char *submit_action;	/* form's action */
+	int submit_method;	/* form's method */
+	char *submit_enctype;	/* form's entype */
+	char *submit_title;	/* form's title */
+	BOOL no_cache;		/* Always resubmit? */
+	char *cp_submit_value;	/* option value to submit */
+	char *orig_submit_value;	/* original submit value */
+	int size_l;		/* The length of the option list */
+	int disabled;		/* If YES, can't change values */
+	int name_cs;
+	int value_cs;
+	char *accept_cs;
+    } FormInfo;
 
 /*
  * As structure for info associated with a form.  There is some redundancy
@@ -99,17 +99,17 @@ typedef struct _FormInfo {
  * (as opposed to form fields) per doc is expected to be rather small.  More
  * things which are per form rather than per field could be moved here.  - kw
  */
-typedef struct _PerFormInfo {
-    int number;			/* form number, see GridText.c */
-    /* except for the last two, the following fields aren't actually used.. */
-    int disabled;		/* If YES, can't change values */
-    struct _PerFormInfo *next;	/* pointer to next form in doc */
-    int nfields;		/* number of fields */
-    FormInfo *first_field;
-    FormInfo *last_field;	/* pointer to last field in form */
-    char *accept_cs;
-    char *thisacceptcs;		/* used during submit */
-} PerFormInfo;
+    typedef struct _PerFormInfo {
+	int number;		/* form number, see GridText.c */
+	/* except for the last two, the following fields aren't actually used.. */
+	int disabled;		/* If YES, can't change values */
+	struct _PerFormInfo *next;	/* pointer to next form in doc */
+	int nfields;		/* number of fields */
+	FormInfo *first_field;
+	FormInfo *last_field;	/* pointer to last field in form */
+	char *accept_cs;
+	char *thisacceptcs;	/* used during submit */
+    } PerFormInfo;
 
 #define HYPERTEXT_ANCHOR 1
 #define INPUT_ANCHOR     2	/* forms mode input fields */
@@ -151,7 +151,9 @@ typedef struct _PerFormInfo {
 #define LAST_ORDER   3
 
 /* in LYForms.c */
-extern void show_formlink_statusline(const FormInfo * form,
-				     int for_what);
-
-#endif /* HTFORMS_H */
+    extern void show_formlink_statusline(const FormInfo * form,
+					 int for_what);
+#ifdef __cplusplus
+}
+#endif
+#endif				/* HTFORMS_H */
diff --git a/src/HTInit.c b/src/HTInit.c
index 24f62f61..db684ad1 100644
--- a/src/HTInit.c
+++ b/src/HTInit.c
@@ -236,7 +236,8 @@ static char *GetCommand(char *s, char **t)
 
     s = LYSkipBlanks(s);
     /* marca -- added + 1 for error case -- oct 24, 1993. */
-    s2 = malloc(strlen(s) * 2 + 1);	/* absolute max, if all % signs */
+    s2 = typeMallocn(char, strlen(s) * 2 + 1);	/* absolute max, if all % signs */
+
     if (!s2)
 	ExitWithError(MEMORY_EXHAUSTED_ABORT);
 
@@ -345,7 +346,8 @@ static int ProcessMailcapEntry(FILE *fp, struct MailcapEntry *mc, AcceptMedia me
 	need = len + strlen(rawentry) + 1;
 	if (need > rawentryalloc) {
 	    rawentryalloc += (2000 + need);
-	    rawentry = realloc(rawentry, rawentryalloc);
+	    rawentry = typeRealloc(char, rawentry, rawentryalloc);
+
 	    if (!rawentry)
 		ExitWithError(MEMORY_EXHAUSTED_ABORT);
 	}
diff --git a/src/HTML.c b/src/HTML.c
index 218842ae..821fd3e6 100644
--- a/src/HTML.c
+++ b/src/HTML.c
@@ -698,9 +698,9 @@ static void addClassName(const char *prefix,
     if ((have + need) >= Style_className_len) {
 	Style_className_len += 1024 + 2 * (have + need);
 	if (Style_className == 0) {
-	    Style_className = malloc(Style_className_len);
+	    Style_className = typeMallocn(char, Style_className_len);
 	} else {
-	    Style_className = realloc(Style_className, Style_className_len);
+	    Style_className = typeRealloc(char, Style_className, Style_className_len);
 	}
 	if (Style_className == NULL)
 	    outofmem(__FILE__, "addClassName");
@@ -920,7 +920,7 @@ static int HTML_start_element(HTStructured * me, int element_number,
     HTChildAnchor *ID_A = NULL;	/* HTML_foo_ID anchor */
     int url_type = 0, i = 0;
     char *cp = NULL;
-    HTMLElement ElementNumber = element_number;
+    HTMLElement ElementNumber = (HTMLElement) element_number;
     BOOL intern_flag = FALSE;
     short stbl_align = HT_ALIGN_NONE;
     int status = HT_OK;
@@ -1842,7 +1842,7 @@ static int HTML_start_element(HTStructured * me, int element_number,
 		ElementNumber = HTML_LH;
 	    } else {
 		me->new_style = me->sp[0].style;
-		ElementNumber = me->sp[0].tag_number;
+		ElementNumber = (HTMLElement) me->sp[0].tag_number;
 		UPDATE_STYLE;
 	    }
 	    /*
@@ -3149,8 +3149,7 @@ static int HTML_start_element(HTStructured * me, int element_number,
 					   VERBOSE_IMG(value, HTML_IMG_SRC,
 						       "[INLINE]"))));
 	    else
-		StrAllocCopy(alt_string, (title ?
-					  title : ""));
+		StrAllocCopy(alt_string, NonNull(title));
 	}
 	if (*alt_string == '\0' && map_href) {
 	    StrAllocCopy(alt_string, (temp = MakeNewMapValue(value, "USEMAP")));
@@ -3750,7 +3749,7 @@ static int HTML_start_element(HTStructured * me, int element_number,
 		status = HT_PARSER_OTHER_CONTENT;
 		if (me->sp[0].tag_number == HTML_FIG &&
 		    me->objects_figged_open > 0) {
-		    ElementNumber = HTML_OBJECT_M;
+		    ElementNumber = (HTMLElement) HTML_OBJECT_M;
 		} else {
 		    me->objects_mixed_open++;
 		    SET_SKIP_STACK(HTML_OBJECT);
@@ -4287,7 +4286,7 @@ static int HTML_start_element(HTStructured * me, int element_number,
 	    I.align = NULL;
 	    I.accept = NULL;
 	    I.checked = NO;
-	    I.class = NULL;
+	    I.iclass = NULL;
 	    I.disabled = NO;
 	    I.error = NULL;
 	    I.height = NULL;
@@ -4390,7 +4389,7 @@ static int HTML_start_element(HTStructured * me, int element_number,
 
 	    if (present && present[HTML_BUTTON_CLASS] &&	/* Not yet used. */
 		non_empty(value[HTML_BUTTON_CLASS]))
-		I.class = value[HTML_BUTTON_CLASS];
+		I.iclass = value[HTML_BUTTON_CLASS];
 
 	    if (present && present[HTML_BUTTON_ID] &&
 		non_empty(value[HTML_BUTTON_ID])) {
@@ -4468,14 +4467,14 @@ static int HTML_start_element(HTStructured * me, int element_number,
 	    BOOL HaveSRClink = FALSE;
 	    char *ImageSrc = NULL;
 	    BOOL IsSubmitOrReset = FALSE;
-	    HTkcode kcode = 0;
-	    HTkcode specified_kcode = 0;
+	    HTkcode kcode = NOKANJI;
+	    HTkcode specified_kcode = NOKANJI;
 
 	    /* init */
 	    I.align = NULL;
 	    I.accept = NULL;
 	    I.checked = NO;
-	    I.class = NULL;
+	    I.iclass = NULL;
 	    I.disabled = NO;
 	    I.error = NULL;
 	    I.height = NULL;
@@ -4792,7 +4791,7 @@ static int HTML_start_element(HTStructured * me, int element_number,
 		I.align = value[HTML_INPUT_ALIGN];
 	    if (present && present[HTML_INPUT_CLASS] &&		/* Not yet used. */
 		non_empty(value[HTML_INPUT_CLASS]))
-		I.class = value[HTML_INPUT_CLASS];
+		I.iclass = value[HTML_INPUT_CLASS];
 	    if (present && present[HTML_INPUT_ERROR] &&		/* Not yet used. */
 		non_empty(value[HTML_INPUT_ERROR]))
 		I.error = value[HTML_INPUT_ERROR];
@@ -5150,7 +5149,7 @@ static int HTML_start_element(HTStructured * me, int element_number,
 		I.align = NULL;
 		I.accept = NULL;
 		I.checked = NO;
-		I.class = NULL;
+		I.iclass = NULL;
 		I.disabled = NO;
 		I.error = NULL;
 		I.height = NULL;
@@ -6796,7 +6795,7 @@ static int HTML_end_element(HTStructured * me, int element_number,
 	    I.align = NULL;
 	    I.accept = NULL;
 	    I.checked = NO;
-	    I.class = NULL;
+	    I.iclass = NULL;
 	    I.disabled = NO;
 	    I.error = NULL;
 	    I.height = NULL;
@@ -7072,8 +7071,8 @@ static int HTML_end_element(HTStructured * me, int element_number,
 		    if (*ptr == ' ')
 			HText_appendCharacter(me->text, HT_NON_BREAK_SPACE);
 		    else {
-			HTkcode kcode = 0;
-			HTkcode specified_kcode = 0;
+			HTkcode kcode = NOKANJI;
+			HTkcode specified_kcode = NOKANJI;
 
 			if (HTCJK == JAPANESE) {
 			    kcode = HText_getKcode(me->text);
@@ -7858,10 +7857,14 @@ static void CacheThru_do_free(HTStream *me)
 	    me->status = HT_ERROR;
 	LYCloseTempFP(me->fp);
 	if (me->status == HT_OK) {
+	    char *cp_freeme = 0;
+
 	    me->anchor->source_cache_file = me->filename;
 	    CTRACE((tfp,
 		    "SourceCacheWriter: Committing file %s for URL %s to anchor\n",
-		    me->filename, HTAnchor_address((HTAnchor *) me->anchor)));
+		    me->filename,
+		    cp_freeme = HTAnchor_address((HTAnchor *) me->anchor)));
+	    FREE(cp_freeme);
 	} else {
 	    if (source_cache_file_error == FALSE) {
 		HTAlert(gettext("Source cache error - disk full?"));
@@ -7880,10 +7883,14 @@ static void CacheThru_do_free(HTStream *me)
 	HTAlert(gettext("Source cache error - not enough memory!"));
     }
     if (me->chunk) {
+	char *cp_freeme = NULL;
+
 	me->anchor->source_cache_chunk = me->chunk;
 	CTRACE((tfp,
 		"SourceCacheWriter: Committing memory chunk %p for URL %s to anchor\n",
-		(void *) me->chunk, HTAnchor_address((HTAnchor *) me->anchor)));
+		(void *) me->chunk,
+		cp_freeme = HTAnchor_address((HTAnchor *) me->anchor)));
+	FREE(cp_freeme);
     }
 }
 
@@ -7977,6 +7984,7 @@ static const HTStreamClass PassThruCache =
 static HTStream *CacheThru_new(HTParentAnchor *anchor,
 			       HTStream *target)
 {
+    char *cp_freeme = NULL;
     char filename[LY_MAXPATH];
     HTStream *stream = NULL;
     HTProtocol *p = (HTProtocol *) anchor->protocol;
@@ -8013,6 +8021,7 @@ static HTStream *CacheThru_new(HTParentAnchor *anchor,
     stream->status = HT_OK;
 
     if (LYCacheSource == SOURCE_CACHE_FILE) {
+
 	if (anchor->source_cache_file) {
 	    CTRACE((tfp,
 		    "SourceCacheWriter: If successful, will replace source cache file %s\n",
@@ -8028,8 +8037,9 @@ static HTStream *CacheThru_new(HTParentAnchor *anchor,
 	if (!(stream->fp = LYOpenTemp(filename, HTML_SUFFIX, BIN_W))) {
 	    CTRACE((tfp,
 		    "SourceCacheWriter: Cannot open source cache file for URL %s\n",
-		    HTAnchor_address((HTAnchor *) anchor)));
+		    cp_freeme = HTAnchor_address((HTAnchor *) anchor)));
 	    FREE(stream);
+	    FREE(cp_freeme);
 	    return target;
 	}
 
@@ -8037,7 +8047,9 @@ static HTStream *CacheThru_new(HTParentAnchor *anchor,
 
 	CTRACE((tfp,
 		"SourceCacheWriter: Caching source for URL %s in file %s\n",
-		HTAnchor_address((HTAnchor *) anchor), filename));
+		cp_freeme = HTAnchor_address((HTAnchor *) anchor),
+		filename));
+	FREE(cp_freeme);
     }
 
     if (LYCacheSource == SOURCE_CACHE_MEMORY) {
@@ -8056,8 +8068,9 @@ static HTStream *CacheThru_new(HTParentAnchor *anchor,
 
 	CTRACE((tfp,
 		"SourceCacheWriter: Caching source for URL %s in memory chunk %p\n",
-		HTAnchor_address((HTAnchor *) anchor), (void *) stream->chunk));
-
+		cp_freeme = HTAnchor_address((HTAnchor *) anchor),
+		(void *) stream->chunk));
+	FREE(cp_freeme);
     }
 
     return stream;
diff --git a/src/HTML.h b/src/HTML.h
index a8626270..76376ebd 100644
--- a/src/HTML.h
+++ b/src/HTML.h
@@ -16,27 +16,23 @@
 #include <HTAnchor.h>
 #include <HTMLDTD.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 /* #define ATTR_CS_IN (me->T.output_utf8 ? me->UCLYhndl : 0) */
 #define ATTR_CS_IN me->tag_charset
-
 #define TRANSLATE_AND_UNESCAPE_ENTITIES(s, p, h) \
 	LYUCTranslateHTMLString(s, ATTR_CS_IN, current_char_set, YES, p, h, st_HTML)
-
 #define TRANSLATE_AND_UNESCAPE_ENTITIES5(s,cs_from,cs_to,p,h) \
 	LYUCTranslateHTMLString(s, cs_from, cs_to, YES, p, h, st_HTML)
-
 #define TRANSLATE_AND_UNESCAPE_ENTITIES6(s,cs_from,cs_to,spcls,p,h) \
 	LYUCTranslateHTMLString(s, cs_from, cs_to, spcls, p, h, st_HTML)
-
 #define TRANSLATE_HTML(s,p,h) \
 	LYUCFullyTranslateString(s, me->UCLYhndl, current_char_set, NO, YES, p, h, NO, st_HTML)
-
 #define TRANSLATE_HTML5(s,cs_from,cs_to,p,h) \
 	LYUCFullyTranslateString(s, cs_from, cs_to, NO, YES, p, h, NO, st_HTML)
-
 #define TRANSLATE_HTML7(s,cs_from,cs_to,spcls,p,h,Back) \
 	LYUCFullyTranslateString(s, cs_from, cs_to, NO, spcls, p, h, Back, st_HTML)
-
 /*
  * Strings from attributes which should be converted to some kind of "standard"
  * representation (character encoding), was Latin-1, esp.  URLs (incl. 
@@ -46,8 +42,7 @@
 	LYUCTranslateHTMLString(s, ATTR_CS_IN, ATTR_CS_IN, NO, NO, YES, st_URL)
 #define UNESCAPE_FIELDNAME_TO_STD(s) \
 	LYUCTranslateHTMLString(s, ATTR_CS_IN, ATTR_CS_IN, NO, NO, YES, st_HTML)
-
-extern const HTStructuredClass HTMLPresentation;
+    extern const HTStructuredClass HTMLPresentation;
 
 #ifdef Lynx_HTML_Handler
 /*
@@ -55,180 +50,180 @@ extern const HTStructuredClass HTMLPresentation;
  *	--------------------------------------------------------------------
  */
 
-typedef struct _stack_element {
-    HTStyle *style;
-    int tag_number;
-} stack_element;
+    typedef struct _stack_element {
+	HTStyle *style;
+	int tag_number;
+    } stack_element;
 
 /*		HTML Object
  *		-----------
  */
 #define MAX_NESTING 800		/* Should be checked by parser */
 
-struct _HTStructured {
-    const HTStructuredClass *isa;
-    HTParentAnchor *node_anchor;
-    HText *text;
-
-    HTStream *target;		/* Output stream */
-    HTStreamClass targetClass;	/* Output routines */
-
-    HTChildAnchor *CurrentA;	/* current HTML_A anchor */
-    int CurrentANum;		/* current HTML_A number */
-    char *base_href;		/* current HTML_BASE href */
-    char *map_address;		/* current HTML_MAP address */
-
-    HTChunk title;		/* Grow by 128 */
-    HTChunk object;		/* Grow by 128 */
-    BOOL object_started;
-    BOOL object_declare;
-    BOOL object_shapes;
-    BOOL object_ismap;
-    char *object_usemap;
-    char *object_id;
-    char *object_title;
-    char *object_data;
-    char *object_type;
-    char *object_classid;
-    char *object_codebase;
-    char *object_codetype;
-    char *object_name;
-    int objects_mixed_open, objects_figged_open;
-    HTChunk option;		/* Grow by 128 */
-    BOOL first_option;		/* First OPTION in SELECT? */
-    char *LastOptionValue;
-    BOOL LastOptionChecked;
-    BOOL select_disabled;
-    HTChunk textarea;		/* Grow by 128 */
-    char *textarea_name;
-    int textarea_name_cs;
-    char *textarea_accept_cs;
-    int textarea_cols;
-    int textarea_rows;
-    int textarea_disabled;
-    char *textarea_id;
-    HTChunk math;		/* Grow by 128 */
-    HTChunk style_block;	/* Grow by 128 */
-    HTChunk script;		/* Grow by 128 */
-
-    /*
-     *  Used for nested lists. - FM
-     */
-    int List_Nesting_Level;	/* counter for list nesting level */
-    int OL_Counter[12];		/* counter for ordered lists */
-    char OL_Type[12];		/* types for ordered lists */
-    int Last_OL_Count;		/* last count in ordered lists */
-    char Last_OL_Type;		/* last type in ordered lists */
-
-    int Division_Level;
-    short DivisionAlignments[MAX_NESTING];
-    int Underline_Level;
-    int Quote_Level;
-
-    BOOL UsePlainSpace;
-    BOOL HiddenValue;
-    int lastraw;
-
-    char *comment_start;	/* for literate programming */
-    char *comment_end;
-
-    HTTag *current_tag;
-    BOOL style_change;
-    HTStyle *new_style;
-    HTStyle *old_style;
-    int current_default_alignment;
-    BOOL in_word;		/* Have just had a non-white char */
-    stack_element stack[MAX_NESTING];
-    stack_element *sp;		/* Style stack pointer */
-    BOOL stack_overrun;		/* Was MAX_NESTING exceeded? */
-    int skip_stack;		/* flag to skip next style stack operation */
-
-    /*
-     *  Track if we are in an anchor, paragraph, address, base, etc.
-     */
-    BOOL inA;
-    BOOL inAPPLET;
-    BOOL inAPPLETwithP;
-    BOOL inBadBASE;
-    BOOL inBadHREF;
-    BOOL inBadHTML;
-    BOOL inBASE;
-    BOOL inBoldA;
-    BOOL inBoldH;
-    BOOL inCAPTION;
-    BOOL inCREDIT;
-    BOOL inFIG;
-    BOOL inFIGwithP;
-    BOOL inFONT;
-    BOOL inFORM;
-    BOOL inLABEL;
-    BOOL inP;
-    BOOL inPRE;
-    BOOL inSELECT;
-    BOOL inTABLE;
-    BOOL inTEXTAREA;
-    BOOL inUnderline;
-
-    BOOL needBoldH;
-
-    char *xinclude;		/* if no include strin address passed */
-    /*
-     * UCI and UCLYhndl give the UCInfo and charset registered for the HTML
-     * parser in the node_anchor's UCStages structure.  It indicates what is
-     * fed to the HTML parser as the stream of character data (not necessarily
-     * tags and attributes).  It should currently always be set to be the same
-     * as UCI and UCLhndl for the HTEXT stage in the node_anchor's UCStages
-     * structure, since the HTML parser sends its input character data to the
-     * output without further charset translation.
-     */
-    LYUCcharset *UCI;
-    int UCLYhndl;
-    /*
-     * inUCI and inUCLYhndl indicate the UCInfo and charset which the HTML
-     * parser treats at the input charset.  It is normally set to the UCI and
-     * UCLhndl for the SGML parser in the node_anchor's UCStages structure
-     * (which may be a dummy, based on the MIME parser's UCI and UCLhndl in
-     * that structure, when we are handling a local file or non-http(s)
-     * gateway).  It could be changed temporarily by the HTML parser, for
-     * conversions of attribute strings, but should be reset once done.  - FM
-     */
-    LYUCcharset *inUCI;
-    int inUCLYhndl;
-    /*
-     * outUCI and outUCLYhndl indicate the UCInfo and charset which the HTML
-     * parser treats as the output charset.  It is normally set to its own UCI
-     * and UCLhndl.  It could be changed for conversions of attribute strings,
-     * but should be reset once done.  - FM
-     */
-    LYUCcharset *outUCI;
-    int outUCLYhndl;
-    /*
-     * T holds the transformation rules for conversions of strings between the
-     * input and output charsets by the HTML parser.  - FM
-     */
-    UCTransParams T;
-
-    int tag_charset;		/* charset for attribute values etc. */
-};
-
-extern HTStyle *LYstyles(int style_number);
-extern BOOL LYBadHTML(HTStructured * me);
+    struct _HTStructured {
+	const HTStructuredClass *isa;
+	HTParentAnchor *node_anchor;
+	HText *text;
+
+	HTStream *target;	/* Output stream */
+	HTStreamClass targetClass;	/* Output routines */
+
+	HTChildAnchor *CurrentA;	/* current HTML_A anchor */
+	int CurrentANum;	/* current HTML_A number */
+	char *base_href;	/* current HTML_BASE href */
+	char *map_address;	/* current HTML_MAP address */
+
+	HTChunk title;		/* Grow by 128 */
+	HTChunk object;		/* Grow by 128 */
+	BOOL object_started;
+	BOOL object_declare;
+	BOOL object_shapes;
+	BOOL object_ismap;
+	char *object_usemap;
+	char *object_id;
+	char *object_title;
+	char *object_data;
+	char *object_type;
+	char *object_classid;
+	char *object_codebase;
+	char *object_codetype;
+	char *object_name;
+	int objects_mixed_open, objects_figged_open;
+	HTChunk option;		/* Grow by 128 */
+	BOOL first_option;	/* First OPTION in SELECT? */
+	char *LastOptionValue;
+	BOOL LastOptionChecked;
+	BOOL select_disabled;
+	HTChunk textarea;	/* Grow by 128 */
+	char *textarea_name;
+	int textarea_name_cs;
+	char *textarea_accept_cs;
+	int textarea_cols;
+	int textarea_rows;
+	int textarea_disabled;
+	char *textarea_id;
+	HTChunk math;		/* Grow by 128 */
+	HTChunk style_block;	/* Grow by 128 */
+	HTChunk script;		/* Grow by 128 */
+
+	/*
+	 *  Used for nested lists. - FM
+	 */
+	int List_Nesting_Level;	/* counter for list nesting level */
+	int OL_Counter[12];	/* counter for ordered lists */
+	char OL_Type[12];	/* types for ordered lists */
+	int Last_OL_Count;	/* last count in ordered lists */
+	char Last_OL_Type;	/* last type in ordered lists */
+
+	int Division_Level;
+	short DivisionAlignments[MAX_NESTING];
+	int Underline_Level;
+	int Quote_Level;
+
+	BOOL UsePlainSpace;
+	BOOL HiddenValue;
+	int lastraw;
+
+	char *comment_start;	/* for literate programming */
+	char *comment_end;
+
+	HTTag *current_tag;
+	BOOL style_change;
+	HTStyle *new_style;
+	HTStyle *old_style;
+	int current_default_alignment;
+	BOOL in_word;		/* Have just had a non-white char */
+	stack_element stack[MAX_NESTING];
+	stack_element *sp;	/* Style stack pointer */
+	BOOL stack_overrun;	/* Was MAX_NESTING exceeded? */
+	int skip_stack;		/* flag to skip next style stack operation */
+
+	/*
+	 *  Track if we are in an anchor, paragraph, address, base, etc.
+	 */
+	BOOL inA;
+	BOOL inAPPLET;
+	BOOL inAPPLETwithP;
+	BOOL inBadBASE;
+	BOOL inBadHREF;
+	BOOL inBadHTML;
+	BOOL inBASE;
+	BOOL inBoldA;
+	BOOL inBoldH;
+	BOOL inCAPTION;
+	BOOL inCREDIT;
+	BOOL inFIG;
+	BOOL inFIGwithP;
+	BOOL inFONT;
+	BOOL inFORM;
+	BOOL inLABEL;
+	BOOL inP;
+	BOOL inPRE;
+	BOOL inSELECT;
+	BOOL inTABLE;
+	BOOL inTEXTAREA;
+	BOOL inUnderline;
+
+	BOOL needBoldH;
+
+	char *xinclude;		/* if no include strin address passed */
+	/*
+	 * UCI and UCLYhndl give the UCInfo and charset registered for the HTML
+	 * parser in the node_anchor's UCStages structure.  It indicates what is
+	 * fed to the HTML parser as the stream of character data (not necessarily
+	 * tags and attributes).  It should currently always be set to be the same
+	 * as UCI and UCLhndl for the HTEXT stage in the node_anchor's UCStages
+	 * structure, since the HTML parser sends its input character data to the
+	 * output without further charset translation.
+	 */
+	LYUCcharset *UCI;
+	int UCLYhndl;
+	/*
+	 * inUCI and inUCLYhndl indicate the UCInfo and charset which the HTML
+	 * parser treats at the input charset.  It is normally set to the UCI and
+	 * UCLhndl for the SGML parser in the node_anchor's UCStages structure
+	 * (which may be a dummy, based on the MIME parser's UCI and UCLhndl in
+	 * that structure, when we are handling a local file or non-http(s)
+	 * gateway).  It could be changed temporarily by the HTML parser, for
+	 * conversions of attribute strings, but should be reset once done.  - FM
+	 */
+	LYUCcharset *inUCI;
+	int inUCLYhndl;
+	/*
+	 * outUCI and outUCLYhndl indicate the UCInfo and charset which the HTML
+	 * parser treats as the output charset.  It is normally set to its own UCI
+	 * and UCLhndl.  It could be changed for conversions of attribute strings,
+	 * but should be reset once done.  - FM
+	 */
+	LYUCcharset *outUCI;
+	int outUCLYhndl;
+	/*
+	 * T holds the transformation rules for conversions of strings between the
+	 * input and output charsets by the HTML parser.  - FM
+	 */
+	UCTransParams T;
+
+	int tag_charset;	/* charset for attribute values etc. */
+    };
+
+    extern HTStyle *LYstyles(int style_number);
+    extern BOOL LYBadHTML(HTStructured * me);
 
 /*
  *	Semi-Private functions. - FM
  */
-extern void HTML_put_character(HTStructured * me, char c);
-extern void HTML_put_string(HTStructured * me, const char *s);
-extern void HTML_write(HTStructured * me, const char *s, int l);
-extern int HTML_put_entity(HTStructured * me, int entity_number);
-extern void actually_set_style(HTStructured * me);
+    extern void HTML_put_character(HTStructured * me, char c);
+    extern void HTML_put_string(HTStructured * me, const char *s);
+    extern void HTML_write(HTStructured * me, const char *s, int l);
+    extern int HTML_put_entity(HTStructured * me, int entity_number);
+    extern void actually_set_style(HTStructured * me);
 
 /*	Style buffering avoids dummy paragraph begin/ends.
 */
 #define UPDATE_STYLE if (me->style_change) { actually_set_style(me); }
-#endif /* Lynx_HTML_Handler */
+#endif				/* Lynx_HTML_Handler */
 
-extern void strtolower(char *i);
+    extern void strtolower(char *i);
 
 /*				P U B L I C
 */
@@ -236,25 +231,25 @@ extern void strtolower(char *i);
 /*
  *  HTConverter to present HTML
  */
-extern HTStream *HTMLToPlain(HTPresentation *pres,
-			     HTParentAnchor *anchor,
-			     HTStream *sink);
+    extern HTStream *HTMLToPlain(HTPresentation *pres,
+				 HTParentAnchor *anchor,
+				 HTStream *sink);
 
-extern HTStream *HTMLParsedPresent(HTPresentation *pres,
-				   HTParentAnchor *anchor,
-				   HTStream *sink);
+    extern HTStream *HTMLParsedPresent(HTPresentation *pres,
+				       HTParentAnchor *anchor,
+				       HTStream *sink);
 
-extern HTStream *HTMLToC(HTPresentation *pres,
-			 HTParentAnchor *anchor,
-			 HTStream *sink);
-
-extern HTStream *HTMLPresent(HTPresentation *pres,
+    extern HTStream *HTMLToC(HTPresentation *pres,
 			     HTParentAnchor *anchor,
 			     HTStream *sink);
 
-extern HTStructured *HTML_new(HTParentAnchor *anchor,
-			      HTFormat format_out,
-			      HTStream *target);
+    extern HTStream *HTMLPresent(HTPresentation *pres,
+				 HTParentAnchor *anchor,
+				 HTStream *sink);
+
+    extern HTStructured *HTML_new(HTParentAnchor *anchor,
+				  HTFormat format_out,
+				  HTStream *target);
 
 /*
  * Record error message as a hypertext object.
@@ -270,8 +265,11 @@ extern HTStructured *HTML_new(HTParentAnchor *anchor,
  * On exit,
  *      a return code like HT_LOADED if object exists else 60; 0
  */
-extern int HTLoadError(HTStream *sink,
-		       int number,
-		       const char *message);
-
-#endif /* HTML_H */
+    extern int HTLoadError(HTStream *sink,
+			   int number,
+			   const char *message);
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* HTML_H */
diff --git a/src/HTNestedList.h b/src/HTNestedList.h
index d641b471..5a5f1039 100644
--- a/src/HTNestedList.h
+++ b/src/HTNestedList.h
@@ -1,43 +1,43 @@
 #ifndef HTNESTEDLIST_H
 #define HTNESTEDLIST_H
 
-#define HTML_OL1        HTML_ELEMENTS+1
-#define HTML_OL2        HTML_ELEMENTS+2
-#define HTML_OL3        HTML_ELEMENTS+3
-#define HTML_OL4        HTML_ELEMENTS+4
-#define HTML_OL5        HTML_ELEMENTS+5
-#define HTML_OL6        HTML_ELEMENTS+6
-
-#define HTML_MENU1      HTML_ELEMENTS+7
-#define HTML_MENU2      HTML_ELEMENTS+8
-#define HTML_MENU3      HTML_ELEMENTS+9
-#define HTML_MENU4      HTML_ELEMENTS+10
-#define HTML_MENU5      HTML_ELEMENTS+11
-#define HTML_MENU6      HTML_ELEMENTS+12
-
-#define HTML_DL1        HTML_ELEMENTS+13
-#define HTML_DL2        HTML_ELEMENTS+14
-#define HTML_DL3        HTML_ELEMENTS+15
-#define HTML_DL4        HTML_ELEMENTS+16
-#define HTML_DL5        HTML_ELEMENTS+17
-#define HTML_DL6        HTML_ELEMENTS+18
-
-#define HTML_DLC1       HTML_ELEMENTS+19
-#define HTML_DLC2       HTML_ELEMENTS+20
-#define HTML_DLC3       HTML_ELEMENTS+21
-#define HTML_DLC4       HTML_ELEMENTS+22
-#define HTML_DLC5       HTML_ELEMENTS+23
-#define HTML_DLC6       HTML_ELEMENTS+24
-
-#define HTML_HCENTER  	HTML_ELEMENTS+25
-#define HTML_HLEFT      HTML_ELEMENTS+26
-#define HTML_HRIGHT     HTML_ELEMENTS+27
-
-#define HTML_DCENTER    HTML_ELEMENTS+28
-#define HTML_DLEFT      HTML_ELEMENTS+29
-#define HTML_DRIGHT     HTML_ELEMENTS+30
-
-#define HTML_OBJECT_M   HTML_ELEMENTS+31
+#define HTML_OL1        (HTML_ELEMENTS+1)
+#define HTML_OL2        (HTML_ELEMENTS+2)
+#define HTML_OL3        (HTML_ELEMENTS+3)
+#define HTML_OL4        (HTML_ELEMENTS+4)
+#define HTML_OL5        (HTML_ELEMENTS+5)
+#define HTML_OL6        (HTML_ELEMENTS+6)
+
+#define HTML_MENU1      (HTML_ELEMENTS+7)
+#define HTML_MENU2      (HTML_ELEMENTS+8)
+#define HTML_MENU3      (HTML_ELEMENTS+9)
+#define HTML_MENU4      (HTML_ELEMENTS+10)
+#define HTML_MENU5      (HTML_ELEMENTS+11)
+#define HTML_MENU6      (HTML_ELEMENTS+12)
+
+#define HTML_DL1        (HTML_ELEMENTS+13)
+#define HTML_DL2        (HTML_ELEMENTS+14)
+#define HTML_DL3        (HTML_ELEMENTS+15)
+#define HTML_DL4        (HTML_ELEMENTS+16)
+#define HTML_DL5        (HTML_ELEMENTS+17)
+#define HTML_DL6        (HTML_ELEMENTS+18)
+
+#define HTML_DLC1       (HTML_ELEMENTS+19)
+#define HTML_DLC2       (HTML_ELEMENTS+20)
+#define HTML_DLC3       (HTML_ELEMENTS+21)
+#define HTML_DLC4       (HTML_ELEMENTS+22)
+#define HTML_DLC5       (HTML_ELEMENTS+23)
+#define HTML_DLC6       (HTML_ELEMENTS+24)
+
+#define HTML_HCENTER  	(HTML_ELEMENTS+25)
+#define HTML_HLEFT      (HTML_ELEMENTS+26)
+#define HTML_HRIGHT     (HTML_ELEMENTS+27)
+
+#define HTML_DCENTER    (HTML_ELEMENTS+28)
+#define HTML_DLEFT      (HTML_ELEMENTS+29)
+#define HTML_DRIGHT     (HTML_ELEMENTS+30)
+
+#define HTML_OBJECT_M   (HTML_ELEMENTS+31)
 
 #define LYNX_HTML_EXTRA_ELEMENTS 31
 
diff --git a/src/HTSaveToFile.h b/src/HTSaveToFile.h
index 8ede8d51..35ce3904 100644
--- a/src/HTSaveToFile.h
+++ b/src/HTSaveToFile.h
@@ -8,16 +8,22 @@
 #include <HTStream.h>
 #include <HTFormat.h>
 
-extern HTStream *HTSaveToFile(HTPresentation *pres,
-			      HTParentAnchor *anchor,
-			      HTStream *sink);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern HTStream *HTSaveToFile(HTPresentation *pres,
+				  HTParentAnchor *anchor,
+				  HTStream *sink);
 
-extern HTStream *HTDumpToStdout(HTPresentation *pres,
-				HTParentAnchor *anchor,
-				HTStream *sink);
+    extern HTStream *HTDumpToStdout(HTPresentation *pres,
+				    HTParentAnchor *anchor,
+				    HTStream *sink);
 
-extern HTStream *HTCompressed(HTPresentation *pres,
-			      HTParentAnchor *anchor,
-			      HTStream *sink);
+    extern HTStream *HTCompressed(HTPresentation *pres,
+				  HTParentAnchor *anchor,
+				  HTStream *sink);
 
-#endif /* HTSAVETOFILE_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* HTSAVETOFILE_H */
diff --git a/src/LYBookmark.c b/src/LYBookmark.c
index 0c238fec..2a00a1bc 100644
--- a/src/LYBookmark.c
+++ b/src/LYBookmark.c
@@ -291,7 +291,7 @@ void save_bookmark_link(const char *address,
 	} else {
 	    LYstrncpy(string_buffer, title, sizeof(string_buffer) - 1);
 	}
-	convert_to_spaces(string_buffer, FALSE);
+	LYReduceBlanks(string_buffer);
 	LYMBM_statusline(TITLE_PROMPT);
 	LYgetstr(string_buffer, VISIBLE, sizeof(string_buffer), NORECALL);
 	if (*string_buffer == '\0') {
diff --git a/src/LYBookmark.h b/src/LYBookmark.h
index a0a2816f..ae8257bd 100644
--- a/src/LYBookmark.h
+++ b/src/LYBookmark.h
@@ -1,4 +1,3 @@
-
 #ifndef LYBOOKMARK_H
 #define LYBOOKMARK_H
 
@@ -6,15 +5,21 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
-extern BOOLEAN LYHaveSubBookmarks(void);
-extern const char *get_bookmark_filename(char **name);
-extern int LYMBM2index(int ch);
-extern int LYindex2MBM(int n);
-extern int select_menu_multi_bookmarks(void);
-extern int select_multi_bookmarks(void);
-extern void LYMBM_statusline(const char *text);
-extern void remove_bookmark_link(int cur, char *cur_bookmark_page);
-extern void save_bookmark_link(const char *address, const char *title);
-extern void set_default_bookmark_page(char *value);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOLEAN LYHaveSubBookmarks(void);
+    extern const char *get_bookmark_filename(char **name);
+    extern int LYMBM2index(int ch);
+    extern int LYindex2MBM(int n);
+    extern int select_menu_multi_bookmarks(void);
+    extern int select_multi_bookmarks(void);
+    extern void LYMBM_statusline(const char *text);
+    extern void remove_bookmark_link(int cur, char *cur_bookmark_page);
+    extern void save_bookmark_link(const char *address, const char *title);
+    extern void set_default_bookmark_page(char *value);
 
-#endif /* LYBOOKMARK_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYBOOKMARK_H */
diff --git a/src/LYCgi.h b/src/LYCgi.h
index bd29a780..6b90f2de 100644
--- a/src/LYCgi.h
+++ b/src/LYCgi.h
@@ -5,6 +5,12 @@
 #include <HTUtils.h>
 #endif
 
-extern void add_lynxcgi_environment(const char *variable_name);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern void add_lynxcgi_environment(const char *variable_name);
 
-#endif /* LYGETFILE_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYGETFILE_H */
diff --git a/src/LYCharSets.h b/src/LYCharSets.h
index 26a852a1..a0f0c26a 100644
--- a/src/LYCharSets.h
+++ b/src/LYCharSets.h
@@ -11,42 +11,46 @@
 #include <UCMap.h>
 #endif /* !UCMAP_H */
 
-extern BOOL HTPassEightBitRaw;
-extern BOOL HTPassEightBitNum;
-extern BOOL HTPassHighCtrlRaw;
-extern BOOL HTPassHighCtrlNum;
-extern BOOLEAN LYHaveCJKCharacterSet;
-extern BOOLEAN DisplayCharsetMatchLocale;
-
 #include <HTCJK.h>
-extern HTkcode kanji_code;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOL HTPassEightBitRaw;
+    extern BOOL HTPassEightBitNum;
+    extern BOOL HTPassHighCtrlRaw;
+    extern BOOL HTPassHighCtrlNum;
+    extern BOOLEAN LYHaveCJKCharacterSet;
+    extern BOOLEAN DisplayCharsetMatchLocale;
+
+    extern HTkcode kanji_code;
 
 /*
  *  currently active character set (internal handler)
  */
-extern int current_char_set;
+    extern int current_char_set;
 
 /*
  *  Initializer, calls initialization function for the
  *  CHARTRANS handling. - KW
  */
-extern int LYCharSetsDeclared(void);
-
-extern const char **LYCharSets[];
-extern const char *SevenBitApproximations[];
-extern const char **p_entity_values;
-extern const char *LYchar_set_names[];	/* Full name, not MIME */
-extern int LYlowest_eightbit[];
-extern int LYNumCharsets;
-extern LYUCcharset LYCharSet_UC[];
-extern int UCGetLYhndl_byAnyName(char *value);
-extern void HTMLSetCharacterHandling(int i);
-extern void HTMLSetUseDefaultRawMode(int i, BOOLEAN modeflag);
-extern void HTMLUseCharacterSet(int i);
-extern UCode_t HTMLGetEntityUCValue(const char *name);
-extern void Set_HTCJK(const char *inMIMEname, const char *outMIMEname);
-
-extern const char *HTMLGetEntityName(UCode_t code);
+    extern int LYCharSetsDeclared(void);
+
+    extern const char **LYCharSets[];
+    extern const char *SevenBitApproximations[];
+    extern const char **p_entity_values;
+    extern const char *LYchar_set_names[];	/* Full name, not MIME */
+    extern int LYlowest_eightbit[];
+    extern int LYNumCharsets;
+    extern LYUCcharset LYCharSet_UC[];
+    extern int UCGetLYhndl_byAnyName(char *value);
+    extern void HTMLSetCharacterHandling(int i);
+    extern void HTMLSetUseDefaultRawMode(int i, BOOLEAN modeflag);
+    extern void HTMLUseCharacterSet(int i);
+    extern UCode_t HTMLGetEntityUCValue(const char *name);
+    extern void Set_HTCJK(const char *inMIMEname, const char *outMIMEname);
+
+    extern const char *HTMLGetEntityName(UCode_t code);
 
 /*
  * HTMLGetEntityName calls LYEntityNames for iso-8859-1 entity names only. 
@@ -54,24 +58,24 @@ extern const char *HTMLGetEntityName(UCode_t code);
  * unicode number in general may have several equivalent entity names because
  * of synonyms.
  */
-extern BOOL force_old_UCLYhndl_on_reload;
-extern int forced_UCLYhdnl;
+    extern BOOL force_old_UCLYhndl_on_reload;
+    extern int forced_UCLYhdnl;
 
 #ifndef  EXP_CHARSET_CHOICE
 # define ALL_CHARSETS_IN_O_MENU_SCREEN 1
 #endif
 
 #ifdef EXP_CHARSET_CHOICE
-typedef struct {
-    BOOL hide_display;		/* if FALSE, show in "display-charset" menu */
-    BOOL hide_assumed;		/* if FALSE, show in "assumed-charset" menu */
+    typedef struct {
+	BOOL hide_display;	/* if FALSE, show in "display-charset" menu */
+	BOOL hide_assumed;	/* if FALSE, show in "assumed-charset" menu */
 #ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
-    int assumed_idx;		/* only this field is needed */
+	int assumed_idx;	/* only this field is needed */
 #endif
-} charset_subset_t;
+    } charset_subset_t;
 
 /* each element corresponds to charset in LYCharSets */
-extern charset_subset_t charset_subsets[];
+    extern charset_subset_t charset_subsets[];
 
 /* all zeros by default - i.e., all charsets allowed */
 
@@ -80,10 +84,10 @@ extern charset_subset_t charset_subsets[];
  * lynx.cfg.  It will remain FALSE if no "display_charset_choice" settings were
  * encountered in lynx.cfg
  */
-extern BOOL custom_display_charset;
+    extern BOOL custom_display_charset;
 
 /* similar to custom_display_charset */
-extern BOOL custom_assumed_doc_charset;
+    extern BOOL custom_assumed_doc_charset;
 
 #ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
 
@@ -92,19 +96,19 @@ extern BOOL custom_assumed_doc_charset;
 /*
  * These arrays map index of charset shown in menu to the index in LYCharsets[]
  */
-extern int display_charset_map[];
-extern int assumed_doc_charset_map[];
+    extern int display_charset_map[];
+    extern int assumed_doc_charset_map[];
 
 /* these arrays are NULL terminated */
-extern const char *display_charset_choices[];
-extern const char *assumed_charset_choices[];
+    extern const char *display_charset_choices[];
+    extern const char *assumed_charset_choices[];
 
-extern int displayed_display_charset_idx;
+    extern int displayed_display_charset_idx;
 
 #endif
 /* this will be called after lynx.cfg and .lynxrc are read */
-extern void init_charset_subsets(void);
-#endif /* EXP_CHARSET_CHOICE */
+    extern void init_charset_subsets(void);
+#endif				/* EXP_CHARSET_CHOICE */
 
 #if !defined(NO_AUTODETECT_DISPLAY_CHARSET)
 #  ifdef __EMX__
@@ -116,23 +120,26 @@ extern void init_charset_subsets(void);
 #endif
 
 #ifdef CAN_AUTODETECT_DISPLAY_CHARSET
-extern int auto_display_charset;
+    extern int auto_display_charset;
 #endif
 
 #ifdef CAN_SWITCH_DISPLAY_CHARSET
-enum switch_display_charset_t {
-    SWITCH_DISPLAY_CHARSET_MAYBE,
-    SWITCH_DISPLAY_CHARSET_REALLY,
-    SWITCH_DISPLAY_CHARSET_RESIZE
-};
-extern int Switch_Display_Charset(int ord, enum switch_display_charset_t really);
-extern int Find_Best_Display_Charset(int ord);
-extern char *charsets_directory;
-extern char *charset_switch_rules;
-extern int switch_display_charsets;
-extern int auto_other_display_charset;
-extern int codepages[2];
-extern int real_charsets[2];	/* Non "auto-" charsets for the codepages */
+    enum switch_display_charset_t {
+	SWITCH_DISPLAY_CHARSET_MAYBE,
+	SWITCH_DISPLAY_CHARSET_REALLY,
+	SWITCH_DISPLAY_CHARSET_RESIZE
+    };
+    extern int Switch_Display_Charset(int ord, enum switch_display_charset_t really);
+    extern int Find_Best_Display_Charset(int ord);
+    extern char *charsets_directory;
+    extern char *charset_switch_rules;
+    extern int switch_display_charsets;
+    extern int auto_other_display_charset;
+    extern int codepages[2];
+    extern int real_charsets[2];	/* Non "auto-" charsets for the codepages */
 #endif
 
-#endif /* LYCHARSETS_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYCHARSETS_H */
diff --git a/src/LYCharUtils.c b/src/LYCharUtils.c
index 30581988..e3c42602 100644
--- a/src/LYCharUtils.c
+++ b/src/LYCharUtils.c
@@ -2550,11 +2550,12 @@ void LYHandleMETA(HTStructured * me, const BOOL *present,
 		me->inA = FALSE;
 		me->CurrentANum = 0;
 	    }
-	    me->CurrentA = HTAnchor_findChildAndLink(
-							me->node_anchor,	/* Parent */
-							id_string,	/* Tag */
-							href,	/* Addresss */
-							(void *) 0);	/* Type */
+	    me->CurrentA = HTAnchor_findChildAndLink
+		(
+		    me->node_anchor,	/* Parent */
+		    id_string,	/* Tag */
+		    href,	/* Addresss */
+		    (HTLinkType *) 0);	/* Type */
 	    if (id_string)
 		*cp = '#';
 	    FREE(id_string);
@@ -3203,11 +3204,12 @@ void LYCheckForID(HTStructured * me, const BOOL *present,
 	 * Create the link if we still have a non-zero-length string.  - FM
 	 */
 	if ((temp[0] != '\0') &&
-	    (ID_A = HTAnchor_findChildAndLink(
-						 me->node_anchor,	/* Parent */
-						 temp,	/* Tag */
-						 NULL,	/* Addresss */
-						 (void *) 0))) {	/* Type */
+	    (ID_A = HTAnchor_findChildAndLink
+	     (
+		 me->node_anchor,	/* Parent */
+		 temp,		/* Tag */
+		 NULL,		/* Addresss */
+		 (HTLinkType *) 0))) {	/* Type */
 	    HText_beginAnchor(me->text, me->inUnderline, ID_A);
 	    HText_endAnchor(me->text, 0);
 	}
@@ -3231,11 +3233,12 @@ void LYHandleID(HTStructured * me, const char *id)
     /*
      * Create the link if we still have a non-zero-length string.  - FM
      */
-    if ((ID_A = HTAnchor_findChildAndLink(
-					     me->node_anchor,	/* Parent */
-					     id,	/* Tag */
-					     NULL,	/* Addresss */
-					     (void *) 0)) != NULL) {	/* Type */
+    if ((ID_A = HTAnchor_findChildAndLink
+	 (
+	     me->node_anchor,	/* Parent */
+	     id,		/* Tag */
+	     NULL,		/* Addresss */
+	     (HTLinkType *) 0)) != NULL) {	/* Type */
 	HText_beginAnchor(me->text, me->inUnderline, ID_A);
 	HText_endAnchor(me->text, 0);
     }
diff --git a/src/LYCharUtils.h b/src/LYCharUtils.h
index 45c2b384..83e63c06 100644
--- a/src/LYCharUtils.h
+++ b/src/LYCharUtils.h
@@ -5,89 +5,94 @@
 #include <HTUtils.h>
 #endif /* HTUTILS_H */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #define CHECK_ID(code) LYCheckForID(me, present, value, (int)code)
+    typedef enum {
+	st_HTML = 0,		/* attributes and content found in HTML, probably meant for display */
+	st_URL,			/* URLs, fragments, NAME and ID */
+	st_other
+    } CharUtil_st;
 
-typedef enum {
-    st_HTML = 0,		/* attributes and content found in HTML, probably meant for display */
-    st_URL,			/* URLs, fragments, NAME and ID */
-    st_other
-} CharUtil_st;
-
-extern char **LYUCFullyTranslateString(char **str,
-				       int cs_from,
-				       int cs_to,
-				       BOOLEAN do_ent,
-				       BOOL use_lynx_specials,
-				       BOOLEAN plain_space,
-				       BOOLEAN hidden,
-				       BOOL Back,
-				       CharUtil_st stype);
-extern BOOL LYUCTranslateHTMLString(char **str,
-				    int cs_from,
-				    int cs_to,
-				    BOOL use_lynx_specials,
-				    BOOLEAN plain_space,
-				    BOOLEAN hidden,
-				    CharUtil_st stype);
-extern BOOL LYUCTranslateBackFormData(char **str,
-				      int cs_from,
-				      int cs_to,
-				      BOOLEAN plain_space);
-extern void LYEntify(char **str,
-		     BOOLEAN isTITLE);
-extern void LYTrimHead(char *str);
-extern void LYTrimTail(char *str);
-extern char *LYFindEndOfComment(char *str);
-extern void LYFillLocalFileURL(char **href,
-			       const char *base);
-extern void LYAddMETAcharsetToFD(FILE *fd,
-				 int disp_chndl);
-extern void LYformTitle(char **dst,
-			const char *src);
-extern char *LYParseTagParam(char *from,
-			     const char *name);
-extern void LYParseRefreshURL(char *content,
-			      char **p_seconds,
-			      char **p_address);
+    extern char **LYUCFullyTranslateString(char **str,
+					   int cs_from,
+					   int cs_to,
+					   BOOLEAN do_ent,
+					   BOOL use_lynx_specials,
+					   BOOLEAN plain_space,
+					   BOOLEAN hidden,
+					   BOOL Back,
+					   CharUtil_st stype);
+    extern BOOL LYUCTranslateHTMLString(char **str,
+					int cs_from,
+					int cs_to,
+					BOOL use_lynx_specials,
+					BOOLEAN plain_space,
+					BOOLEAN hidden,
+					CharUtil_st stype);
+    extern BOOL LYUCTranslateBackFormData(char **str,
+					  int cs_from,
+					  int cs_to,
+					  BOOLEAN plain_space);
+    extern void LYEntify(char **str,
+			 BOOLEAN isTITLE);
+    extern void LYTrimHead(char *str);
+    extern void LYTrimTail(char *str);
+    extern char *LYFindEndOfComment(char *str);
+    extern void LYFillLocalFileURL(char **href,
+				   const char *base);
+    extern void LYAddMETAcharsetToFD(FILE *fd,
+				     int disp_chndl);
+    extern void LYformTitle(char **dst,
+			    const char *src);
+    extern char *LYParseTagParam(char *from,
+				 const char *name);
+    extern void LYParseRefreshURL(char *content,
+				  char **p_seconds,
+				  char **p_address);
 
 #ifdef Lynx_HTML_Handler
-extern int OL_CONTINUE;		/* flag for whether CONTINUE is set */
-extern int OL_VOID;		/* flag for whether a count is set */
-extern void LYZero_OL_Counter(HTStructured * me);
-extern char *LYUppercaseA_OL_String(int seqnum);
-extern char *LYLowercaseA_OL_String(int seqnum);
-extern char *LYUppercaseI_OL_String(int seqnum);
-extern char *LYLowercaseI_OL_String(int seqnum);
-extern void LYGetChartransInfo(HTStructured * me);
-extern void LYHandleMETA(HTStructured * me, const BOOL *present,
-			 const char **value,
-			 char **include);
-extern void LYHandlePlike(HTStructured * me, const BOOL *present,
-			  const char **value,
-			  char **include,
-			  int align_idx,
-			  BOOL start);
-extern void LYHandleSELECT(HTStructured * me, const BOOL *present,
-			   const char **value,
-			   char **include,
-			   BOOL start);
-extern int LYLegitimizeHREF(HTStructured * me, char **href,
-			    BOOL force_slash,
-			    BOOL strip_dots);
-extern void LYCheckForContentBase(HTStructured * me);
-extern void LYCheckForID(HTStructured * me, const BOOL *present,
-			 const char **value,
-			 int attribute);
-extern void LYHandleID(HTStructured * me, const char *id);
-extern BOOLEAN LYoverride_default_alignment(HTStructured * me);
-extern void LYEnsureDoubleSpace(HTStructured * me);
-extern void LYEnsureSingleSpace(HTStructured * me);
-extern void LYResetParagraphAlignment(HTStructured * me);
-extern BOOLEAN LYCheckForCSI(HTParentAnchor *anchor,
-			     char **url);
+    extern int OL_CONTINUE;	/* flag for whether CONTINUE is set */
+    extern int OL_VOID;		/* flag for whether a count is set */
+    extern void LYZero_OL_Counter(HTStructured * me);
+    extern char *LYUppercaseA_OL_String(int seqnum);
+    extern char *LYLowercaseA_OL_String(int seqnum);
+    extern char *LYUppercaseI_OL_String(int seqnum);
+    extern char *LYLowercaseI_OL_String(int seqnum);
+    extern void LYGetChartransInfo(HTStructured * me);
+    extern void LYHandleMETA(HTStructured * me, const BOOL *present,
+			     const char **value,
+			     char **include);
+    extern void LYHandlePlike(HTStructured * me, const BOOL *present,
+			      const char **value,
+			      char **include,
+			      int align_idx,
+			      BOOL start);
+    extern void LYHandleSELECT(HTStructured * me, const BOOL *present,
+			       const char **value,
+			       char **include,
+			       BOOL start);
+    extern int LYLegitimizeHREF(HTStructured * me, char **href,
+				BOOL force_slash,
+				BOOL strip_dots);
+    extern void LYCheckForContentBase(HTStructured * me);
+    extern void LYCheckForID(HTStructured * me, const BOOL *present,
+			     const char **value,
+			     int attribute);
+    extern void LYHandleID(HTStructured * me, const char *id);
+    extern BOOLEAN LYoverride_default_alignment(HTStructured * me);
+    extern void LYEnsureDoubleSpace(HTStructured * me);
+    extern void LYEnsureSingleSpace(HTStructured * me);
+    extern void LYResetParagraphAlignment(HTStructured * me);
+    extern BOOLEAN LYCheckForCSI(HTParentAnchor *anchor,
+				 char **url);
 
-#endif /* Lynx_HTML_Handler */
+#endif				/* Lynx_HTML_Handler */
 
 #define LYUCTranslateBackHeaderText LYUCTranslateBackFormData
 
-#endif /* LYCHARUTILS_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYCHARUTILS_H */
diff --git a/src/LYClean.h b/src/LYClean.h
index c9e13ca0..6126c2c6 100644
--- a/src/LYClean.h
+++ b/src/LYClean.h
@@ -5,14 +5,20 @@
 #include <HTUtils.h>
 #endif
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #ifdef VMS
-extern BOOLEAN HadVMSInterrupt;
+    extern BOOLEAN HadVMSInterrupt;
 #endif
 
-extern void cleanup_sig(int sig);
-extern void cleanup(void);
-extern void cleanup_files(void);
-extern void set_alarm(int sig);
-extern void reset_alarm(void);
+    extern void cleanup_sig(int sig);
+    extern void cleanup(void);
+    extern void cleanup_files(void);
+    extern void set_alarm(int sig);
+    extern void reset_alarm(void);
 
-#endif /* LYCLEAN_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYCLEAN_H */
diff --git a/src/LYCookie.c b/src/LYCookie.c
index dbe91ef3..f54f7db0 100644
--- a/src/LYCookie.c
+++ b/src/LYCookie.c
@@ -2048,7 +2048,7 @@ void LYStoreCookies(char *cookie_file)
     if (cookie_handle == NULL)
 	return;
     for (dl = domain_list; dl != NULL; dl = dl->next) {
-	de = dl->object;
+	de = (domain_entry *) (dl->object);
 	if (de == NULL)
 	    /*
 	     * Fote says the first object is NULL.  Go with that.
@@ -2280,7 +2280,7 @@ static int LYHandleCookies(const char *arg,
 			cl = de->cookie_list;
 			while (cl) {
 			    next = cl->next;
-			    co = cl->object;
+			    co = (cookie *) (cl->object);
 			    if (co) {
 				HTList_removeObject(de->cookie_list, co);
 				freeCookie(co);
@@ -2394,7 +2394,7 @@ static int LYHandleCookies(const char *arg,
     HTSprintf0(&buf, "<dl compact>\n");
     PUTS(buf);
     for (dl = domain_list; dl != NULL; dl = dl->next) {
-	de = dl->object;
+	de = (domain_entry *) (dl->object);
 	if (de == NULL)
 	    /*
 	     * First object always is NULL.  - FM
diff --git a/src/LYCookie.h b/src/LYCookie.h
index ffa96453..3b0e109b 100644
--- a/src/LYCookie.h
+++ b/src/LYCookie.h
@@ -7,45 +7,51 @@
 
 #include <HTList.h>
 
-typedef enum {
-    ACCEPT_ALWAYS = 0
-    ,REJECT_ALWAYS
-    ,QUERY_USER
-} behaviour_t;
-
-typedef enum {
-    INVCHECK_QUERY = 0
-    ,INVCHECK_STRICT
-    ,INVCHECK_LOOSE
-} invcheck_behaviour_t;
-
-typedef enum {
-    FLAG_ACCEPT_ALWAYS = 0
-    ,FLAG_REJECT_ALWAYS
-    ,FLAG_QUERY_USER
-    ,FLAG_FROM_FILE
-    ,FLAG_INVCHECK_QUERY
-    ,FLAG_INVCHECK_STRICT
-    ,FLAG_INVCHECK_LOOSE
-} cookie_domain_flags;
-
-struct _domain_entry {
-    char *domain;		/* Domain for which these cookies are valid */
-    behaviour_t bv;
-    invcheck_behaviour_t invcheck_bv;
-    HTList *cookie_list;
-};
-typedef struct _domain_entry domain_entry;
-
-extern void LYSetCookie(const char *SetCookie,
-			const char *SetCookie2,
-			const char *address);
-extern char *LYAddCookieHeader(char *hostname,
-			       char *partialpath,
-			       int port,
-			       BOOL secure);
-extern void LYStoreCookies(char *cookie_file);
-extern void LYLoadCookies(char *cookie_file);
-extern void LYConfigCookies(void);
-
-#endif /* LYCOOKIES_H */
+#ifdef __cplusplus
+extern "C" {
+#endif
+    typedef enum {
+	ACCEPT_ALWAYS = 0
+	,REJECT_ALWAYS
+	,QUERY_USER
+    } behaviour_t;
+
+    typedef enum {
+	INVCHECK_QUERY = 0
+	,INVCHECK_STRICT
+	,INVCHECK_LOOSE
+    } invcheck_behaviour_t;
+
+    typedef enum {
+	FLAG_ACCEPT_ALWAYS = 0
+	,FLAG_REJECT_ALWAYS
+	,FLAG_QUERY_USER
+	,FLAG_FROM_FILE
+	,FLAG_INVCHECK_QUERY
+	,FLAG_INVCHECK_STRICT
+	,FLAG_INVCHECK_LOOSE
+    } cookie_domain_flags;
+
+    struct _domain_entry {
+	char *domain;		/* Domain for which these cookies are valid */
+	behaviour_t bv;
+	invcheck_behaviour_t invcheck_bv;
+	HTList *cookie_list;
+    };
+    typedef struct _domain_entry domain_entry;
+
+    extern void LYSetCookie(const char *SetCookie,
+			    const char *SetCookie2,
+			    const char *address);
+    extern char *LYAddCookieHeader(char *hostname,
+				   char *partialpath,
+				   int port,
+				   BOOL secure);
+    extern void LYStoreCookies(char *cookie_file);
+    extern void LYLoadCookies(char *cookie_file);
+    extern void LYConfigCookies(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYCOOKIES_H */
diff --git a/src/LYCurses.c b/src/LYCurses.c
index 5095c1ee..9221ff82 100644
--- a/src/LYCurses.c
+++ b/src/LYCurses.c
@@ -525,11 +525,11 @@ void wcurses_css(WINDOW * win, char *name,
 
 	CTRACE2(TRACE_STYLE, (tfp, "CSSTRIM:trying to set [%s] style - ", name));
 	if (tmpHash == NOSTYLE) {
-	    char *class = strrchr(name, '.');
+	    char *pclass = strrchr(name, '.');
 
-	    CTRACE2(TRACE_STYLE, (tfp, "undefined, trimming at %p\n", class));
-	    if (class)
-		*class = '\0';
+	    CTRACE2(TRACE_STYLE, (tfp, "undefined, trimming at %p\n", pclass));
+	    if (pclass)
+		*pclass = '\0';
 	    else
 		try_again = 0;
 	} else {
@@ -1397,6 +1397,11 @@ void stop_curses(void)
 }
 
 #ifdef VMS
+
+#ifdef USE_SLANG
+extern void longname(char *, char *);
+#endif /* USE_SLANG */
+
 /*
  * Check terminal type, start curses & setup terminal.
  */
@@ -1406,10 +1411,6 @@ BOOLEAN setup(char *terminal)
     int status;
     char *dummy = 0, *cp, term[81];
 
-#ifdef USE_SLANG
-    extern void longname();
-#endif /* USE_SLANG */
-
     /*
      * If the display was not set by a command line option then see if it is
      * available from the environment.
diff --git a/src/LYCurses.h b/src/LYCurses.h
index 1bb773be..f9c52fe3 100644
--- a/src/LYCurses.h
+++ b/src/LYCurses.h
@@ -284,18 +284,21 @@ typedef struct {
 
 #endif /* USE_SLANG */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #ifdef USE_SLANG
 #define LYstopPopup()		/* nothing */
 #define LYtopwindow() LYwin
 #else
-extern void LYsubwindow(WINDOW * param);
-extern WINDOW *LYtopwindow(void);
+    extern void LYsubwindow(WINDOW * param);
+    extern WINDOW *LYtopwindow(void);
 
 #define LYstopPopup() LYsubwindow(0)
-#endif /* NCURSES */
+#endif				/* NCURSES */
 
-extern void LYbox(WINDOW * win, BOOLEAN formfield);
-extern WINDOW *LYstartPopup(int *top_y, int *left_x, int *height, int *width);
+    extern void LYbox(WINDOW * win, BOOLEAN formfield);
+    extern WINDOW *LYstartPopup(int *top_y, int *left_x, int *height, int *width);
 
 /*
  * Useful macros not in PDCurses or very old ncurses headers.
@@ -311,7 +314,7 @@ extern WINDOW *LYstartPopup(int *top_y, int *left_x, int *height, int *width);
 #endif
 
 #if defined(HAVE_WATTR_GET)
-extern long LYgetattrs(WINDOW * win);
+    extern long LYgetattrs(WINDOW * win);
 
 #else
 #if defined(HAVE_GETATTRS) || defined(getattrs)
@@ -319,11 +322,15 @@ extern long LYgetattrs(WINDOW * win);
 #else
 #define LYgetattrs(win) ((win)->_attrs)
 #endif
-#endif /* HAVE_WATTR_GET */
+#endif				/* HAVE_WATTR_GET */
 
 #if defined(PDCURSES)
 #define HAVE_GETBKGD 1		/* can use fallback definition */
 #define HAVE_NAPMS 1		/* can use millisecond-delays */
+#  if defined(PDC_BUILD) && PDC_BUILD >= 2401
+    extern int saved_scrsize_x;
+    extern int saved_scrsize_y;
+#  endif
 #endif
 
 #ifdef HAVE_NAPMS
@@ -339,14 +346,14 @@ extern long LYgetattrs(WINDOW * win);
 /* Both slang and curses: */
 #ifndef TRUE
 #define TRUE  1
-#endif /* !TRUE */
+#endif				/* !TRUE */
 #ifndef FALSE
 #define FALSE 0
-#endif /* !FALSE */
+#endif				/* !FALSE */
 
 #ifdef REDEFINE_CR
 #define CR FROMASCII('\015')
-#endif /* REDEFINE_CR */
+#endif				/* REDEFINE_CR */
 
 #ifdef ALT_CHAR_SET
 #define BOXVERT 0		/* use alt char set for popup window vertical borders */
@@ -364,8 +371,8 @@ extern long LYgetattrs(WINDOW * win);
 #undef HAVE_KEYPAD		/* avoid confusion with bogus 'keypad()' */
 #endif
 
-extern int LYlines;		/* replaces LINES */
-extern int LYcols;		/* replaces COLS */
+    extern int LYlines;		/* replaces LINES */
+    extern int LYcols;		/* replaces COLS */
 
 /*
  * The scrollbar, if used, occupies the rightmost column.
@@ -386,11 +393,11 @@ extern int LYcols;		/* replaces COLS */
 #endif
 
 #ifdef USE_CURSES_PADS
-extern WINDOW *LYwin;
-extern int LYshiftWin;
-extern int LYwideLines;
-extern int LYtableCols;
-extern BOOL LYuseCursesPads;
+    extern WINDOW *LYwin;
+    extern int LYshiftWin;
+    extern int LYwideLines;
+    extern int LYtableCols;
+    extern BOOL LYuseCursesPads;
 
 #else
 #define LYwin stdscr
@@ -400,62 +407,62 @@ extern BOOL LYuseCursesPads;
 #endif
 
 #if defined(USE_COLOR_TABLE) || defined(USE_SLANG)
-extern int Current_Attr;
-extern int Masked_Attr;
-#endif
-
-extern BOOLEAN setup(char *terminal);
-extern int LYscreenHeight(void);
-extern int LYscreenWidth(void);
-extern int LYstrExtent(const char *string, int len, int maxCells);
-extern int LYstrExtent2(const char *string, int len);
-extern int LYstrCells(const char *string);
-extern void LYclear(void);
-extern void LYclrtoeol(void);
-extern void LYerase(void);
-extern void LYmove(int y, int x);
-extern void LYnoVideo(int mask);
-extern void LYpaddstr(WINDOW * w, int width, const char *s);
-extern void LYrefresh(void);
-extern void LYstartTargetEmphasis(void);
-extern void LYstopTargetEmphasis(void);
-extern void LYtouchline(int row);
-extern void LYwaddnstr(WINDOW * w, const char *s, size_t len);
-extern void start_curses(void);
-extern void stop_curses(void);
+    extern int Current_Attr;
+    extern int Masked_Attr;
+#endif
+
+    extern BOOLEAN setup(char *terminal);
+    extern int LYscreenHeight(void);
+    extern int LYscreenWidth(void);
+    extern int LYstrExtent(const char *string, int len, int maxCells);
+    extern int LYstrExtent2(const char *string, int len);
+    extern int LYstrCells(const char *string);
+    extern void LYclear(void);
+    extern void LYclrtoeol(void);
+    extern void LYerase(void);
+    extern void LYmove(int y, int x);
+    extern void LYnoVideo(int mask);
+    extern void LYpaddstr(WINDOW * w, int width, const char *s);
+    extern void LYrefresh(void);
+    extern void LYstartTargetEmphasis(void);
+    extern void LYstopTargetEmphasis(void);
+    extern void LYtouchline(int row);
+    extern void LYwaddnstr(WINDOW * w, const char *s, size_t len);
+    extern void start_curses(void);
+    extern void stop_curses(void);
 
 #define LYaddstr(s)      LYwaddnstr(LYwin, s, strlen(s))
 #define LYaddnstr(s,len) LYwaddnstr(LYwin, s, len)
 #define LYwaddstr(w,s)   LYwaddnstr(w, s, strlen(s))
 
 #ifdef VMS
-extern int DCLsystem(char *command);
-extern void VMSexit();
-extern int ttopen();
-extern int ttclose();
-extern int ttgetc();
-extern void VMSsignal(int sig, void (*func) ());
-#endif /* VMS */
+    extern int DCLsystem(char *command);
+    extern void VMSexit();
+    extern int ttopen();
+    extern int ttclose();
+    extern int ttgetc();
+    extern void VMSsignal(int sig, void (*func) ());
+#endif				/* VMS */
 
 #if defined(USE_COLOR_STYLE)
-extern void curses_css(char *name, int dir);
-extern void curses_style(int style, int dir);
-extern void setHashStyle(int style, int color, int cattr, int mono, char *element);
-extern void setStyle(int style, int color, int cattr, int mono);
-extern void wcurses_css(WINDOW * win, char *name, int dir);
-extern void curses_w_style(WINDOW * win, int style, int dir);
+    extern void curses_css(char *name, int dir);
+    extern void curses_style(int style, int dir);
+    extern void setHashStyle(int style, int color, int cattr, int mono, char *element);
+    extern void setStyle(int style, int color, int cattr, int mono);
+    extern void wcurses_css(WINDOW * win, char *name, int dir);
+    extern void curses_w_style(WINDOW * win, int style, int dir);
 
 #  define LynxChangeStyle(style,dir) curses_style(style,dir)
 #  define LynxWChangeStyle(win,style,dir) curses_w_style(win,style,dir)
 #else
 #  define LynxWChangeStyle(win,style,dir)	(void)1
-#endif /* USE_COLOR_STYLE */
+#endif				/* USE_COLOR_STYLE */
 
 #ifdef USE_COLOR_TABLE
-extern void LYaddAttr(int a);
-extern void LYsubAttr(int a);
-extern void lynx_setup_colors(void);
-extern unsigned int Lynx_Color_Flags;
+    extern void LYaddAttr(int a);
+    extern void LYsubAttr(int a);
+    extern void lynx_setup_colors(void);
+    extern unsigned int Lynx_Color_Flags;
 #endif
 
 #ifdef USE_SLANG
@@ -481,23 +488,23 @@ extern unsigned int Lynx_Color_Flags;
 
 #ifdef FANCY_CURSES
 #undef FANCY_CURSES
-#endif /* FANCY_CURSES */
+#endif				/* FANCY_CURSES */
 
 /*
  *  Map some curses functions to slang functions.
  */
 #define stdscr ((WINDOW *)0)
 #ifdef SLANG_MBCS_HACK
-extern int PHYSICAL_SLtt_Screen_Cols;
+    extern int PHYSICAL_SLtt_Screen_Cols;
 
 #define COLS PHYSICAL_SLtt_Screen_Cols
 #else
 #define COLS SLtt_Screen_Cols
-#endif /* SLANG_MBCS_HACK */
+#endif				/* SLANG_MBCS_HACK */
 #define LINES SLtt_Screen_Rows
 #define move SLsmg_gotorc
 #define addstr SLsmg_write_string
-extern void LY_SLerase(void);
+    extern void LY_SLerase(void);
 
 #define erase LY_SLerase
 #define clear LY_SLerase
@@ -521,29 +528,29 @@ extern void LY_SLerase(void);
 #define echo()
 #define printw        SLsmg_printf
 
-extern int curscr;
-extern BOOLEAN FullRefresh;
+    extern int curscr;
+    extern BOOLEAN FullRefresh;
 
 #ifdef clearok
 #undef clearok
-#endif /* clearok */
+#endif				/* clearok */
 #define clearok(a,b) { FullRefresh = (BOOLEAN)b; }
-extern void LY_SLrefresh(void);
+    extern void LY_SLrefresh(void);
 
 #ifdef refresh
 #undef refresh
-#endif /* refresh */
+#endif				/* refresh */
 #define refresh LY_SLrefresh
 
 #ifdef VMS
-extern void VTHome(void);
+    extern void VTHome(void);
 
 #define endwin() LYclear(),refresh(),SLsmg_reset_smg(),VTHome()
 #else
 #define endwin SLsmg_reset_smg(),SLang_reset_tty
-#endif /* VMS */
+#endif				/* VMS */
 
-#else /* Define curses functions: */
+#else				/* Define curses functions: */
 
 #ifdef FANCY_CURSES
 #define SHOW_WHEREIS_TARGETS 1
@@ -563,9 +570,9 @@ extern void VTHome(void);
 #define stop_reverse()		clrattr(_REVERSE)
 #define wstop_reverse(w)	wclrattr(w, _REVERSE)
 
-#else /* Not VMS: */
+#else				/* Not VMS: */
 
-extern int string_to_attr(char *name);
+    extern int string_to_attr(char *name);
 
 /*
  *  For Unix FANCY_FANCY curses we interpose
@@ -573,13 +580,13 @@ extern int string_to_attr(char *name);
  *  A_foo attributes. - FM
  */
 #ifdef USE_COLOR_TABLE
-extern void LYaddWAttr(WINDOW * win, int a);
-extern void LYsubWAttr(WINDOW * win, int a);
-extern void LYaddWAttr(WINDOW * win, int a);
-extern void LYsubWAttr(WINDOW * win, int a);
-extern void lynx_set_color(int a);
-extern void lynx_standout(int a);
-extern int lynx_chg_color(int, int, int);
+    extern void LYaddWAttr(WINDOW * win, int a);
+    extern void LYsubWAttr(WINDOW * win, int a);
+    extern void LYaddWAttr(WINDOW * win, int a);
+    extern void LYsubWAttr(WINDOW * win, int a);
+    extern void lynx_set_color(int a);
+    extern void lynx_standout(int a);
+    extern int lynx_chg_color(int, int, int);
 
 #undef  standout
 #define standout() 		lynx_standout(TRUE)
@@ -607,11 +614,11 @@ extern int lynx_chg_color(int, int, int);
 #define wstart_reverse(w)	LYaddWAttr(w, A_REVERSE)
 #define stop_reverse()		LYsubAttr(A_REVERSE)
 #define wstop_reverse(w)	LYsubWAttr(w, A_REVERSE)
-#endif /* SNAKE && HP_TERMINAL */
+#endif				/* SNAKE && HP_TERMINAL */
 
-#endif /* VMS */
+#endif				/* VMS */
 
-#else /* Not FANCY_CURSES: */
+#else				/* Not FANCY_CURSES: */
 /* *INDENT-OFF* */
 #ifdef COLOR_CURSES
 #undef COLOR_CURSES
@@ -636,7 +643,7 @@ FANCY_CURSES.  Check your config.log to see why the FANCY_CURSES test failed.
 #define stop_reverse()		standend()
 #define wstop_reverse(a)	wstandend(a)
 
-#endif /* FANCY_CURSES */
+#endif				/* FANCY_CURSES */
 
 #ifdef __hpux			/* FIXME: configure check */
 #undef ACS_UARROW
@@ -675,7 +682,7 @@ FANCY_CURSES.  Check your config.log to see why the FANCY_CURSES test failed.
 
 #define addch_raw(ch)           LYaddch(ch)
 
-#endif /* USE_SLANG */
+#endif				/* USE_SLANG */
 
 #ifdef USE_SLANG
 #define LYGetYX(y, x)   y = SLsmg_get_row(), x = SLsmg_get_column()
@@ -684,8 +691,8 @@ FANCY_CURSES.  Check your config.log to see why the FANCY_CURSES test failed.
 #define LYGetYX(y, x)   getyx(LYwin, y, x)
 #else
 #define LYGetYX(y, x)   y = LYwin->_cury, x = LYwin->_curx
-#endif /* getyx */
-#endif /* USE_SLANG */
+#endif				/* getyx */
+#endif				/* USE_SLANG */
 
 /*
  * If the screen library allows us to specify "default" color, allow user to
@@ -697,31 +704,31 @@ FANCY_CURSES.  Check your config.log to see why the FANCY_CURSES test failed.
 #endif
 #endif
 
-extern void lynx_enable_mouse(int);
-extern void lynx_force_repaint(void);
-extern void lynx_nl2crlf(int normal);
-extern void lynx_start_title_color(void);
-extern void lynx_stop_title_color(void);
-extern void lynx_start_link_color(int flag, int pending);
-extern void lynx_stop_link_color(int flag, int pending);
-extern void lynx_stop_target_color(void);
-extern void lynx_start_target_color(void);
-extern void lynx_start_status_color(void);
-extern void lynx_stop_status_color(void);
-extern void lynx_start_h1_color(void);
-extern void lynx_stop_h1_color(void);
-extern void lynx_start_prompt_color(void);
-extern void lynx_stop_prompt_color(void);
-extern void lynx_start_radio_color(void);
-extern void lynx_stop_radio_color(void);
-extern void lynx_stop_all_colors(void);
-
-extern void lynx_start_bold(void);
-extern void lynx_start_reverse(void);
-extern void lynx_start_underline(void);
-extern void lynx_stop_bold(void);
-extern void lynx_stop_reverse(void);
-extern void lynx_stop_underline(void);
+    extern void lynx_enable_mouse(int);
+    extern void lynx_force_repaint(void);
+    extern void lynx_nl2crlf(int normal);
+    extern void lynx_start_title_color(void);
+    extern void lynx_stop_title_color(void);
+    extern void lynx_start_link_color(int flag, int pending);
+    extern void lynx_stop_link_color(int flag, int pending);
+    extern void lynx_stop_target_color(void);
+    extern void lynx_start_target_color(void);
+    extern void lynx_start_status_color(void);
+    extern void lynx_stop_status_color(void);
+    extern void lynx_start_h1_color(void);
+    extern void lynx_stop_h1_color(void);
+    extern void lynx_start_prompt_color(void);
+    extern void lynx_stop_prompt_color(void);
+    extern void lynx_start_radio_color(void);
+    extern void lynx_stop_radio_color(void);
+    extern void lynx_stop_all_colors(void);
+
+    extern void lynx_start_bold(void);
+    extern void lynx_start_reverse(void);
+    extern void lynx_start_underline(void);
+    extern void lynx_stop_bold(void);
+    extern void lynx_stop_reverse(void);
+    extern void lynx_stop_underline(void);
 
 /*
  * To prevent corrupting binary data on DOS, MS-WINDOWS or OS/2 we open files
@@ -753,6 +760,9 @@ extern void lynx_stop_underline(void);
 #define LYHideCursor() LYmove((LYlines - 1), (LYcolLimit - 1))
 #endif
 
-extern void LYstowCursor(WINDOW * win, int row, int col);
+    extern void LYstowCursor(WINDOW * win, int row, int col);
 
-#endif /* LYCURSES_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYCURSES_H */
diff --git a/src/LYDownload.c b/src/LYDownload.c
index 721c75ed..3025f586 100644
--- a/src/LYDownload.c
+++ b/src/LYDownload.c
@@ -34,7 +34,8 @@ void LYDownload(char *line)
     char command[LY_MAXPATH];
     char *cp;
     lynx_list_item_type *download_command = 0;
-    int ch, recall;
+    int ch;
+    RecallType recall;
     int FnameTotal;
     int FnameNum;
     BOOLEAN FirstRecall = TRUE;
diff --git a/src/LYDownload.h b/src/LYDownload.h
index f80177db..5926df8b 100644
--- a/src/LYDownload.h
+++ b/src/LYDownload.h
@@ -5,11 +5,17 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
-extern void LYDownload(char *line);
-extern int LYdownload_options(char **newfile, char *data_file);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern void LYDownload(char *line);
+    extern int LYdownload_options(char **newfile, char *data_file);
 
 #ifdef VMS
-extern BOOLEAN LYDidRename;
+    extern BOOLEAN LYDidRename;
 #endif
 
-#endif /* LYDOWNLOAD_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYDOWNLOAD_H */
diff --git a/src/LYEdit.h b/src/LYEdit.h
index 8b417e19..3c070628 100644
--- a/src/LYEdit.h
+++ b/src/LYEdit.h
@@ -5,8 +5,14 @@
 #include <HTUtils.h>
 #endif
 
-extern BOOLEAN editor_can_position(void);
-extern int edit_current_file(char *newfile, int cur, int lineno);
-extern void edit_temporary_file(char *filename, const char *position, const char *message);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOLEAN editor_can_position(void);
+    extern int edit_current_file(char *newfile, int cur, int lineno);
+    extern void edit_temporary_file(char *filename, const char *position, const char *message);
 
-#endif /* LYEDIT_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYEDIT_H */
diff --git a/src/LYEditmap.c b/src/LYEditmap.c
index 2b30e1c7..cf8c3ec8 100644
--- a/src/LYEditmap.c
+++ b/src/LYEditmap.c
@@ -19,9 +19,9 @@
 
 /*  Get (lynxkeycode+modifier -> lynxeditactioncode) mapping, intermediate.
  */
-#define LKC_TO_LEC_M1(c) ((c)>LAST_MOD1_LKC? LYE_UNMOD: Mod1Binding[c])
-#define LKC_TO_LEC_M2(c) ((c)>LAST_MOD2_LKC? LYE_UNMOD: Mod2Binding[c])
-#define LKC_TO_LEC_M3(c) ((c)>LAST_MOD3_LKC? LYE_UNMOD: Mod3Binding[c])
+#define LKC_TO_LEC_M1(c) ((c)>LAST_MOD1_LKC? (int)LYE_UNMOD: Mod1Binding[c])
+#define LKC_TO_LEC_M2(c) ((c)>LAST_MOD2_LKC? (int)LYE_UNMOD: Mod2Binding[c])
+#define LKC_TO_LEC_M3(c) ((c)>LAST_MOD3_LKC? (int)LYE_UNMOD: Mod3Binding[c])
 
 #endif /* EXP_ALT_BINDINGS */
 
diff --git a/src/LYExtern.h b/src/LYExtern.h
index 6cb9ba8b..4d77b1db 100644
--- a/src/LYExtern.h
+++ b/src/LYExtern.h
@@ -5,11 +5,17 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
-/* returns TRUE if something matching was executed */
-BOOL run_external(char *c, BOOL only_overriders);
+#ifdef __cplusplus
+extern "C" {
+#endif
+/* returns TRUE if something matching was executed */ BOOL run_external(char
+									*c, BOOL only_overriders);
 
 #ifdef WIN_EX
-extern char *quote_pathname(char *pathname);
+    extern char *quote_pathname(char *pathname);
 #endif
 
-#endif /* EXTERNALS_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* EXTERNALS_H */
diff --git a/src/LYGCurses.h b/src/LYGCurses.h
index 6cdf9e91..bdb1e5ef 100644
--- a/src/LYGCurses.h
+++ b/src/LYGCurses.h
@@ -5,74 +5,72 @@
 #include <stdio.h>
 #include <smgdef.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #define	reg	register
-
 #ifndef	TRUE
 #define	TRUE	(1)
 #define	FALSE	(0)
 #endif
 #define	ERR	(0)
 #define	OK	(1)
-
 #define	_SUBWIN		0001
 #define	_ENDLINE	0002
 #define	_FULLWIN	0004
 #define	_SCROLLWIN	0010
 #define	_FLUSH		0020
 #define	_STANDOUT	0200
-
 #define	_NOECHO		001
 #define	_NONL		002
 #define	_NOCRMODE	004
 #define	_NORAW		010
-
 #define	_BLINK		SMG$M_BLINK
 #define	_BOLD		SMG$M_BOLD
 #define	_REVERSE	SMG$M_REVERSE
 #define	_UNDERLINE	SMG$M_UNDERLINE
-
-struct _win_st {
-    int _cur_y, _cur_x;
-    int _max_y, _max_x;
-    int _beg_y, _beg_x;
-    short _flags;
-    char _clear, _leave, _scroll, _wrap;
-    char **_y;
-    short *_firstch, *_lastch;
-    struct _win_st *_next, *_parent, *_child;
-    int _id;
-};
-
-struct _kb_st {
-    int _id;
-    unsigned char _flags;
-    struct {
-	unsigned short length;
-	unsigned char type;
-	unsigned char class;
-	char *address;
-    } _buffer_desc;
-    int _count;
-    char *_ptr;
-};
-
-struct _pb_st {
-    int _id;
-    int _rows, _cols;
-    union SMGDEF *_attr;
-    int _attr_size;
-};
+    struct _win_st {
+	int _cur_y, _cur_x;
+	int _max_y, _max_x;
+	int _beg_y, _beg_x;
+	short _flags;
+	char _clear, _leave, _scroll, _wrap;
+	char **_y;
+	short *_firstch, *_lastch;
+	struct _win_st *_next, *_parent, *_child;
+	int _id;
+    };
+
+    struct _kb_st {
+	int _id;
+	unsigned char _flags;
+	struct {
+	    unsigned short length;
+	    unsigned char type;
+	    unsigned char pclass;
+	    char *address;
+	} _buffer_desc;
+	int _count;
+	char *_ptr;
+    };
+
+    struct _pb_st {
+	int _id;
+	int _rows, _cols;
+	union SMGDEF *_attr;
+	int _attr_size;
+    };
 
 #define	_KEYBOARD	struct _kb_st
 #define	WINDOW		struct _win_st
 #define	_PASTEBOARD	struct _pb_st
 
-extern int LINES __asm("_$$PsectAttributes_NOSHR$$LINES");
-extern int COLS __asm("_$$PsectAttributes_NOSHR$$COLS");
-extern WINDOW *stdscr __asm("_$$PsectAttributes_NOSHR$$stdscr");
-extern WINDOW *curscr __asm("_$$PsectAttributes_NOSHR$$curscr");
-extern _KEYBOARD *stdkb __asm("_$$PsectAttributes_NOSHR$$stdkb");
-extern _PASTEBOARD *stdpb __asm("_$$PsectAttributes_NOSHR$$stdpb");
+    extern int LINES __asm("_$$PsectAttributes_NOSHR$$LINES");
+    extern int COLS __asm("_$$PsectAttributes_NOSHR$$COLS");
+    extern WINDOW *stdscr __asm("_$$PsectAttributes_NOSHR$$stdscr");
+    extern WINDOW *curscr __asm("_$$PsectAttributes_NOSHR$$curscr");
+    extern _KEYBOARD *stdkb __asm("_$$PsectAttributes_NOSHR$$stdkb");
+    extern _PASTEBOARD *stdpb __asm("_$$PsectAttributes_NOSHR$$stdpb");
 
 #define	getch()		wgetch	(stdscr)
 #define	addch(ch)	waddch	(stdscr, ch)
@@ -139,55 +137,55 @@ extern _PASTEBOARD *stdpb __asm("_$$PsectAttributes_NOSHR$$stdpb");
 
 #define bool int
 
-int waddch(WINDOW * win, char ch);
+    int waddch(WINDOW * win, char ch);
 
-int waddstr(WINDOW * win, char *str);
+    int waddstr(WINDOW * win, char *str);
 
-int box(WINDOW * win, char vert, char hor);
+    int box(WINDOW * win, char vert, char hor);
 
-int wclear(WINDOW * win);
+    int wclear(WINDOW * win);
 
-int wclrattr(WINDOW * win, int attr);
+    int wclrattr(WINDOW * win, int attr);
 
-int wclrtobot(WINDOW * win);
+    int wclrtobot(WINDOW * win);
 
-int wclrtoeol(WINDOW * win);
+    int wclrtoeol(WINDOW * win);
 
-int wdelch(WINDOW * win);
+    int wdelch(WINDOW * win);
 
-int wdeleteln(WINDOW * win);
+    int wdeleteln(WINDOW * win);
 
-int delwin(WINDOW * win);
+    int delwin(WINDOW * win);
 
-int endwin(void);
+    int endwin(void);
 
-int werase(WINDOW * win);
+    int werase(WINDOW * win);
 
-int wgetch(WINDOW * win);
+    int wgetch(WINDOW * win);
 
-int wgetstr(WINDOW * win, char *str);
+    int wgetstr(WINDOW * win, char *str);
 
-char winch(WINDOW * win);
+    char winch(WINDOW * win);
 
-WINDOW *initscr(void);
+    WINDOW *initscr(void);
 
-int winsch(WINDOW * win, char ch);
+    int winsch(WINDOW * win, char ch);
 
-int winsertln(WINDOW * win);
+    int winsertln(WINDOW * win);
 
-int winsstr(WINDOW * win, char *str);
+    int winsstr(WINDOW * win, char *str);
 
-int longname(char *termbuf, char *name);
+    int longname(char *termbuf, char *name);
 
-int mvwin(WINDOW * win, int st_row, int st_col);
+    int mvwin(WINDOW * win, int st_row, int st_col);
 
-int wmove(WINDOW * win, int y, int x);
+    int wmove(WINDOW * win, int y, int x);
 
-WINDOW *newwin(int numlines, int numcols, int begin_y, int begin_x);
+    WINDOW *newwin(int numlines, int numcols, int begin_y, int begin_x);
 
-int overlay(WINDOW * win1, WINDOW * win2);
+    int overlay(WINDOW * win1, WINDOW * win2);
 
-int overwrite(WINDOW * win1, WINDOW * win2);
+    int overwrite(WINDOW * win1, WINDOW * win2);
 
 #pragma NOSTANDARD
 #undef printw
@@ -196,28 +194,28 @@ int overwrite(WINDOW * win1, WINDOW * win2);
 #undef scanw
 #pragma STANDARD
 
-int printw(char *format_spec,...);
+    int printw(char *format_spec,...);
 
-int wprintw(WINDOW * win, char *format_spec,...);
+    int wprintw(WINDOW * win, char *format_spec,...);
 
-int wrefresh(WINDOW * win);
+    int wrefresh(WINDOW * win);
 
-int wscanw(WINDOW * win, char *format_spec,...);
+    int wscanw(WINDOW * win, char *format_spec,...);
 
-int scanw(char *fmt, int arg1);
+    int scanw(char *fmt, int arg1);
 
-int scroll(WINDOW * win);
+    int scroll(WINDOW * win);
 
-int wsetattr(WINDOW * win, int attr);
+    int wsetattr(WINDOW * win, int attr);
 
-WINDOW *subwin(WINDOW * win, int numlines, int numcols,
-	       int begin_y, int begin_x);
+    WINDOW *subwin(WINDOW * win, int numlines, int numcols,
+		   int begin_y, int begin_x);
 
-int wstandend(WINDOW * win);
+    int wstandend(WINDOW * win);
 
-int wstandout(WINDOW * win);
+    int wstandout(WINDOW * win);
 
-int touchwin(WINDOW * win);
+    int touchwin(WINDOW * win);
 
 #if defined(CC$mixed_float) || defined(CC$VAXCSHR)
 
@@ -242,4 +240,7 @@ int touchwin(WINDOW * win);
 #endif
 #endif
 
-#endif /* __CURSES_LOADED */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* __CURSES_LOADED */
diff --git a/src/LYGetFile.c b/src/LYGetFile.c
index 42ac71b3..10e80f04 100644
--- a/src/LYGetFile.c
+++ b/src/LYGetFile.c
@@ -68,7 +68,7 @@ int HTNoDataOK = 0;
  */
 int getfile(DocInfo *doc, int *target)
 {
-    int url_type = 0;
+    UrlTypes url_type = NOT_A_URL_TYPE;
     char *pound;
     char *cp = NULL;
     char *temp = NULL;
@@ -945,6 +945,7 @@ int getfile(DocInfo *doc, int *target)
 			    "getfile: Adding fragment '%s' to redirection URL.\n",
 			    pound));
 		    StrAllocCat(use_this_url_instead, pound);
+		    doc->link = -1;
 		}
 		CTRACE_SLEEP(MessageSecs);
 		HTUserMsg2(WWW_USING_MESSAGE, use_this_url_instead);
@@ -1064,8 +1065,10 @@ int getfile(DocInfo *doc, int *target)
 		    /*
 		     * May set www_search_result.
 		     */
-		    if (HTFindPoundSelector(pound + 1))
+		    if (HTFindPoundSelector(pound + 1)) {
 			*target = www_search_result;
+			doc->link = -1;
+		    }
 		}
 		return (NORMAL);
 	    }
diff --git a/src/LYGetFile.h b/src/LYGetFile.h
index 28b379e0..f204d07c 100644
--- a/src/LYGetFile.h
+++ b/src/LYGetFile.h
@@ -3,20 +3,22 @@
 
 #include <LYStructs.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #define NOT_FOUND 0
 #define NORMAL 1
 #define NULLFILE 3
+    extern int getfile(DocInfo *doc, int *target);
+    extern void srcmode_for_next_retrieval(int);
+    extern int follow_link_number(int c,
+				  int cur,
+				  DocInfo *doc,
+				  int *num);
+    extern void add_trusted(char *str, int type);
+    extern BOOLEAN exec_ok(const char *source, const char *linkpath, int type);
 
-extern int getfile(DocInfo *doc, int *target);
-extern void srcmode_for_next_retrieval(int);
-extern int follow_link_number(int c,
-			      int cur,
-			      DocInfo *doc,
-			      int *num);
-extern void add_trusted(char *str, int type);
-extern BOOLEAN exec_ok(const char *source, const char *linkpath, int type);
-
-extern char *WWW_Download_File;
+    extern char *WWW_Download_File;
 
 /* values for follow_link_number() */
 #define DO_LINK_STUFF		1
@@ -30,4 +32,7 @@ extern char *WWW_Download_File;
 #define ALWAYS_EXEC_PATH  1
 #define CGI_PATH  2
 
-#endif /* LYGETFILE_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYGETFILE_H */
diff --git a/src/LYGlobalDefs.h b/src/LYGlobalDefs.h
index 1963331d..5b4e43d5 100644
--- a/src/LYGlobalDefs.h
+++ b/src/LYGlobalDefs.h
@@ -40,75 +40,78 @@
 
 #include <LYMail.h>		/* to get ifdef's for mail-variables */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #ifdef SOCKS
-extern BOOLEAN socks_flag;
-extern unsigned long socks_bind_remoteAddr;
-#endif /* SOCKS */
+    extern BOOLEAN socks_flag;
+    extern unsigned long socks_bind_remoteAddr;
+#endif				/* SOCKS */
 
 #ifdef IGNORE_CTRL_C
-extern BOOLEAN sigint;
-#endif /* IGNORE_CTRL_C */
+    extern BOOLEAN sigint;
+#endif				/* IGNORE_CTRL_C */
 
 #if USE_VMS_MAILER
-extern char *mail_adrs;
-extern BOOLEAN UseFixedRecords;	/* convert binary files to FIXED 512 records */
-#endif /* VMS */
+    extern char *mail_adrs;
+    extern BOOLEAN UseFixedRecords;	/* convert binary files to FIXED 512 records */
+#endif				/* VMS */
 
 #ifndef VMS
-extern char *list_format;
-#endif /* !VMS */
+    extern char *list_format;
+#endif				/* !VMS */
 
 #ifdef DIRED_SUPPORT
 
-typedef enum {
-    DIRS_FIRST = 0
-    ,FILES_FIRST
-    ,MIXED_STYLE
-} enumDirListStyle;
-
-typedef enum {
-    ORDER_BY_NAME
-    ,ORDER_BY_SIZE
-    ,ORDER_BY_DATE
-    ,ORDER_BY_MODE
-    ,ORDER_BY_TYPE
-    ,ORDER_BY_USER
-    ,ORDER_BY_GROUP
-} enumDirListOrder;
-
-extern BOOLEAN lynx_edit_mode;
-extern BOOLEAN no_dired_support;
-extern HTList *tagged;
-extern int LYAutoUncacheDirLists;
-extern int dir_list_style;	/* enumDirListStyle */
-extern int dir_list_order;	/* enumDirListOrder */
+    typedef enum {
+	DIRS_FIRST = 0
+	,FILES_FIRST
+	,MIXED_STYLE
+    } enumDirListStyle;
+
+    typedef enum {
+	ORDER_BY_NAME
+	,ORDER_BY_SIZE
+	,ORDER_BY_DATE
+	,ORDER_BY_MODE
+	,ORDER_BY_TYPE
+	,ORDER_BY_USER
+	,ORDER_BY_GROUP
+    } enumDirListOrder;
+
+    extern BOOLEAN lynx_edit_mode;
+    extern BOOLEAN no_dired_support;
+    extern HTList *tagged;
+    extern int LYAutoUncacheDirLists;
+    extern int dir_list_style;	/* enumDirListStyle */
+    extern int dir_list_order;	/* enumDirListOrder */
 
 #ifdef OK_OVERRIDE
-extern BOOLEAN prev_lynx_edit_mode;
-#endif /* OK_OVERRIDE */
+    extern BOOLEAN prev_lynx_edit_mode;
+#endif				/* OK_OVERRIDE */
 
 #ifdef OK_PERMIT
-extern BOOLEAN no_change_exec_perms;
-#endif /* OK_PERMIT */
+    extern BOOLEAN no_change_exec_perms;
+#endif				/* OK_PERMIT */
 
-#endif /* DIRED_SUPPORT */
+#endif				/* DIRED_SUPPORT */
 
-extern int HTCacheSize;		/* the number of documents cached in memory */
+    extern int HTCacheSize;	/* the number of documents cached in memory */
 
 #if defined(VMS) && defined(VAXC) && !defined(__DECC)
-extern int HTVirtualMemorySize;	/* bytes allocated and not yet freed  */
-#endif /* VMS && VAXC && !__DECC */
+    extern int HTVirtualMemorySize;	/* bytes allocated and not yet freed  */
+#endif				/* VMS && VAXC && !__DECC */
 
 #if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
-extern BOOLEAN local_exec;	/* TRUE to enable local program execution */
-extern BOOLEAN local_exec_on_local_files;	/* TRUE to enable local program  *
+    extern BOOLEAN local_exec;	/* TRUE to enable local program execution */
+    extern BOOLEAN local_exec_on_local_files;	/* TRUE to enable local program  *
 
 						 * execution in local files only */
-#endif /* defined(EXEC_LINKS) || defined(EXEC_SCRIPTS) */
+#endif				/* defined(EXEC_LINKS) || defined(EXEC_SCRIPTS) */
 
 #if defined(LYNXCGI_LINKS) && !defined(VMS)	/* WebSter Mods -jkt */
-extern char *LYCgiDocumentRoot;	/* DOCUMENT_ROOT in the lynxcgi env */
-#endif /* LYNXCGI_LINKS */
+    extern char *LYCgiDocumentRoot;	/* DOCUMENT_ROOT in the lynxcgi env */
+#endif				/* LYNXCGI_LINKS */
 
 /* Values to which keypad_mode can be set */
 #define NUMBERS_AS_ARROWS 0
@@ -131,51 +134,51 @@ extern char *LYCgiDocumentRoot;	/* DOCUMENT_ROOT in the lynxcgi env */
 #define NOVICE_MODE 	  0
 #define INTERMEDIATE_MODE 1
 #define ADVANCED_MODE 	  2
-extern BOOLEAN LYUseNoviceLineTwo;	/* True if TOGGLE_HELP is not mapped */
+    extern BOOLEAN LYUseNoviceLineTwo;	/* True if TOGGLE_HELP is not mapped */
 
 #define MAX_LINE 1024		/* Hope that no window is larger than this */
 #define MAX_COLS 999		/* we don't expect wider than this */
 #define DFT_COLS 80		/* ...and normally only this */
 #define DFT_ROWS 24		/* ...corresponding nominal height */
 
-extern char star_string[MAX_LINE + 1];	/* from GridText.c */
+    extern char star_string[MAX_LINE + 1];	/* from GridText.c */
 
 #define STARS(n) \
  ((n) >= MAX_LINE ? star_string : &star_string[(MAX_LINE-1)] - (n))
 
-typedef enum {
-    SHOW_COLOR_UNKNOWN = -1
-    ,SHOW_COLOR_NEVER = 0	/* positive numbers are index in LYOptions.c */
-    ,SHOW_COLOR_OFF
-    ,SHOW_COLOR_ON
-    ,SHOW_COLOR_ALWAYS
-} enumShowColor;
+    typedef enum {
+	SHOW_COLOR_UNKNOWN = -1
+	,SHOW_COLOR_NEVER = 0	/* positive numbers are index in LYOptions.c */
+	,SHOW_COLOR_OFF
+	,SHOW_COLOR_ON
+	,SHOW_COLOR_ALWAYS
+    } enumShowColor;
 
-extern int LYShowColor;		/* Show color or monochrome?        */
-extern int LYrcShowColor;	/* ... as read or last written      */
+    extern int LYShowColor;	/* Show color or monochrome?        */
+    extern int LYrcShowColor;	/* ... as read or last written      */
 
-typedef enum {
-    MBM_OFF = 0
-    ,MBM_STANDARD
-    ,MBM_ADVANCED
-} enumMultiBookmarks;
+    typedef enum {
+	MBM_OFF = 0
+	,MBM_STANDARD
+	,MBM_ADVANCED
+    } enumMultiBookmarks;
 
 #if !defined(NO_OPTION_FORMS) && !defined(NO_OPTION_MENU)
-extern BOOLEAN LYUseFormsOptions;	/* use Forms-based options menu */
+    extern BOOLEAN LYUseFormsOptions;	/* use Forms-based options menu */
 
 #else
 #define LYUseFormsOptions FALSE	/* simplify ifdef'ing in LYMainLoop.c */
 #endif
 
-typedef enum {
-    rateOFF = 0
-    ,rateBYTES = 1
-    ,rateKB
+    typedef enum {
+	rateOFF = 0
+	,rateBYTES = 1
+	,rateKB
 #ifdef USE_READPROGRESS
-    ,rateEtaBYTES
-    ,rateEtaKB
+	,rateEtaBYTES
+	,rateEtaKB
 #endif
-} TransferRate;
+    } TransferRate;
 
 #ifdef USE_READPROGRESS
 #  define rateEtaKB_maybe	rateEtaKB
@@ -183,303 +186,303 @@ typedef enum {
 #  define rateEtaKB_maybe	rateKB
 #endif
 
-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 */
-extern BOOLEAN LYShowCursor;	/* Show the cursor or hide it?      */
-extern BOOLEAN LYShowTransferRate;
-extern BOOLEAN LYUnderlineLinks;	/* Show the links underlined vs bold */
-extern BOOLEAN LYUseDefShoCur;	/* Command line -show_cursor toggle */
-extern BOOLEAN LYUserSpecifiedURL;	/* URL from a goto or document? */
-extern BOOLEAN LYfind_leaks;
-extern BOOLEAN LYforce_HTML_mode;
-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 LYtrimInputFields;
-extern BOOLEAN bold_H1;
-extern BOOLEAN bold_headers;
-extern BOOLEAN bold_name_anchors;
-extern BOOLEAN case_sensitive;	/* TRUE to turn on case sensitive search */
-extern BOOLEAN check_mail;	/* TRUE to report unread/new mail messages */
-extern BOOLEAN child_lynx;	/* TRUE to exit with an arrow */
-extern BOOLEAN dump_links_only;
-extern BOOLEAN dump_output_immediately;
-extern BOOLEAN emacs_keys;	/* TRUE to turn on emacs-like key movement */
-extern BOOLEAN error_logging;	/* TRUE to mail error messages */
-extern BOOLEAN ftp_local_passive;
-extern BOOLEAN ftp_ok;
-extern BOOLEAN ftp_passive;	/* TRUE if we want to use passive mode ftp */
-extern BOOLEAN goto_buffer;	/* TRUE if offering default goto URL */
-extern BOOLEAN is_www_index;
-extern BOOLEAN jump_buffer;	/* TRUE if offering default shortcut */
-extern BOOLEAN long_url_ok;
-extern BOOLEAN lynx_mode;
-extern BOOLEAN more;		/* is there more document to display? */
-extern BOOLEAN news_ok;
-extern BOOLEAN number_fields_on_left;
-extern BOOLEAN number_links_on_left;
-extern BOOLEAN recent_sizechange;
-extern BOOLEAN rlogin_ok;
-extern BOOLEAN syslog_requested_urls;
-extern BOOLEAN system_editor;	/* True if locked-down editor */
-extern BOOLEAN telnet_ok;
-extern BOOLEAN verbose_img;	/* display filenames of images?     */
-extern BOOLEAN vi_keys;		/* TRUE to turn on vi-like key movement */
-
-extern HTList *Goto_URLs;
-
-extern char *LYRequestReferer;	/* Referer, may be set in getfile() */
-extern char *LYRequestTitle;	/* newdoc.title in calls to getfile() */
-extern char *LYTransferName;	/* abbreviation for Kilobytes */
-extern char *LynxHome;
-extern char *LynxSigFile;	/* Signature file, in or off home */
-extern char *ftp_lasthost;
-extern char *helpfile;
-extern char *helpfilepath;
-extern char *jumpprompt;	/* The default jump statusline prompt */
-extern char *language;
-extern char *lynx_cfg_file;	/* location of active lynx.cfg file */
-extern char *lynx_cmd_logfile;	/* file to write keystroke commands, if any */
-extern char *lynx_cmd_script;	/* file to read keystroke commands, if any */
-extern char *lynx_save_space;
-extern char *lynx_temp_space;
-extern char *lynxjumpfile;
-extern char *lynxlinksfile;
-extern char *lynxlistfile;
-extern char *original_dir;
-extern char *pref_charset;	/* Lynx's preferred character set - MM */
-extern char *startfile;
-extern char *syslog_txt;	/* syslog arb text for session */
-extern char *system_mail;
-extern char *system_mail_flags;
-extern char *x_display;
-extern char empty_string[];
-
-extern const char *checked_box;	/* form boxes */
-extern const char *checked_radio;	/* form radio buttons */
-extern const char *unchecked_box;	/* form boxes */
-extern const char *unchecked_radio;	/* form radio buttons */
-
-extern int LYAcceptEncoding;
-extern int LYAcceptMedia;
-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 */
-extern int lynx_temp_subspace;
-extern int max_cookies_buffer;
-extern int max_cookies_domain;
-extern int max_cookies_global;
-extern int user_mode;		/* novice or advanced */
-extern int www_search_result;
-
-extern BOOLEAN exec_frozen;
-extern BOOLEAN had_restrictions_all;	/* parsed these restriction options */
-extern BOOLEAN had_restrictions_default;	/* flags to note whether we have... */
-extern BOOLEAN no_bookmark;
-extern BOOLEAN no_bookmark_exec;
-extern BOOLEAN no_chdir;
-extern BOOLEAN no_compileopts_info;
-extern BOOLEAN no_disk_save;
-extern BOOLEAN no_dotfiles;
-extern BOOLEAN no_download;
-extern BOOLEAN no_editor;
-extern BOOLEAN no_exec;
-extern BOOLEAN no_file_url;
-extern BOOLEAN no_goto;
-extern BOOLEAN no_goto_configinfo;
-extern BOOLEAN no_goto_cso;
-extern BOOLEAN no_goto_file;
-extern BOOLEAN no_goto_finger;
-extern BOOLEAN no_goto_ftp;
-extern BOOLEAN no_goto_gopher;
-extern BOOLEAN no_goto_http;
-extern BOOLEAN no_goto_https;
-extern BOOLEAN no_goto_lynxcgi;
-extern BOOLEAN no_goto_lynxexec;
-extern BOOLEAN no_goto_lynxprog;
-extern BOOLEAN no_goto_mailto;
-extern BOOLEAN no_goto_news;
-extern BOOLEAN no_goto_nntp;
-extern BOOLEAN no_goto_rlogin;
-extern BOOLEAN no_goto_snews;
-extern BOOLEAN no_goto_telnet;
-extern BOOLEAN no_goto_tn3270;
-extern BOOLEAN no_goto_wais;
-extern BOOLEAN no_inside_ftp;
-extern BOOLEAN no_inside_news;
-extern BOOLEAN no_inside_rlogin;
-extern BOOLEAN no_inside_telnet;	/* this and following are restrictions */
-extern BOOLEAN no_jump;
-extern BOOLEAN no_lynxcfg_info;
-extern BOOLEAN no_lynxcfg_xinfo;
-extern BOOLEAN no_lynxcgi;
-extern BOOLEAN no_mail;
-extern BOOLEAN no_multibook;
-extern BOOLEAN no_newspost;
-extern BOOLEAN no_option_save;
-extern BOOLEAN no_outside_ftp;
-extern BOOLEAN no_outside_news;
-extern BOOLEAN no_outside_rlogin;
-extern BOOLEAN no_outside_telnet;
-extern BOOLEAN no_print;	/* TRUE to disable printing */
-extern BOOLEAN no_shell;
-extern BOOLEAN no_suspend;
-extern BOOLEAN no_telnet_port;
-extern BOOLEAN no_useragent;
-
-extern BOOLEAN no_statusline;
-extern BOOLEAN no_filereferer;
-extern char LYRefererWithQuery;	/* 'S', 'P', or 'D' */
-extern BOOLEAN local_host_only;
-extern BOOLEAN override_no_download;
-extern BOOLEAN show_dotfiles;	/* From rcfile if no_dotfiles is false */
-extern char *indexfile;
-extern char *anonftp_password;
-extern char *personal_mail_address;
-extern char *homepage;		/* startfile or command line argument */
-extern char *editor;		/* if non empty it enables edit mode with
+    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 */
+    extern BOOLEAN LYShowCursor;	/* Show the cursor or hide it?      */
+    extern BOOLEAN LYShowTransferRate;
+    extern BOOLEAN LYUnderlineLinks;	/* Show the links underlined vs bold */
+    extern BOOLEAN LYUseDefShoCur;	/* Command line -show_cursor toggle */
+    extern BOOLEAN LYUserSpecifiedURL;	/* URL from a goto or document? */
+    extern BOOLEAN LYfind_leaks;
+    extern BOOLEAN LYforce_HTML_mode;
+    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 LYtrimInputFields;
+    extern BOOLEAN bold_H1;
+    extern BOOLEAN bold_headers;
+    extern BOOLEAN bold_name_anchors;
+    extern BOOLEAN case_sensitive;	/* TRUE to turn on case sensitive search */
+    extern BOOLEAN check_mail;	/* TRUE to report unread/new mail messages */
+    extern BOOLEAN child_lynx;	/* TRUE to exit with an arrow */
+    extern BOOLEAN dump_links_only;
+    extern BOOLEAN dump_output_immediately;
+    extern BOOLEAN emacs_keys;	/* TRUE to turn on emacs-like key movement */
+    extern BOOLEAN error_logging;	/* TRUE to mail error messages */
+    extern BOOLEAN ftp_local_passive;
+    extern BOOLEAN ftp_ok;
+    extern BOOLEAN ftp_passive;	/* TRUE if we want to use passive mode ftp */
+    extern BOOLEAN goto_buffer;	/* TRUE if offering default goto URL */
+    extern BOOLEAN is_www_index;
+    extern BOOLEAN jump_buffer;	/* TRUE if offering default shortcut */
+    extern BOOLEAN long_url_ok;
+    extern BOOLEAN lynx_mode;
+    extern BOOLEAN more;	/* is there more document to display? */
+    extern BOOLEAN news_ok;
+    extern BOOLEAN number_fields_on_left;
+    extern BOOLEAN number_links_on_left;
+    extern BOOLEAN recent_sizechange;
+    extern BOOLEAN rlogin_ok;
+    extern BOOLEAN syslog_requested_urls;
+    extern BOOLEAN system_editor;	/* True if locked-down editor */
+    extern BOOLEAN telnet_ok;
+    extern BOOLEAN verbose_img;	/* display filenames of images?     */
+    extern BOOLEAN vi_keys;	/* TRUE to turn on vi-like key movement */
+
+    extern HTList *Goto_URLs;
+
+    extern char *LYRequestReferer;	/* Referer, may be set in getfile() */
+    extern char *LYRequestTitle;	/* newdoc.title in calls to getfile() */
+    extern char *LYTransferName;	/* abbreviation for Kilobytes */
+    extern char *LynxHome;
+    extern char *LynxSigFile;	/* Signature file, in or off home */
+    extern char *ftp_lasthost;
+    extern char *helpfile;
+    extern char *helpfilepath;
+    extern char *jumpprompt;	/* The default jump statusline prompt */
+    extern char *language;
+    extern char *lynx_cfg_file;	/* location of active lynx.cfg file */
+    extern char *lynx_cmd_logfile;	/* file to write keystroke commands, if any */
+    extern char *lynx_cmd_script;	/* file to read keystroke commands, if any */
+    extern char *lynx_save_space;
+    extern char *lynx_temp_space;
+    extern char *lynxjumpfile;
+    extern char *lynxlinksfile;
+    extern char *lynxlistfile;
+    extern char *original_dir;
+    extern char *pref_charset;	/* Lynx's preferred character set - MM */
+    extern char *startfile;
+    extern char *syslog_txt;	/* syslog arb text for session */
+    extern char *system_mail;
+    extern char *system_mail_flags;
+    extern char *x_display;
+    extern char empty_string[];
+
+    extern const char *checked_box;	/* form boxes */
+    extern const char *checked_radio;	/* form radio buttons */
+    extern const char *unchecked_box;	/* form boxes */
+    extern const char *unchecked_radio;		/* form radio buttons */
+
+    extern int LYAcceptEncoding;
+    extern int LYAcceptMedia;
+    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 */
+    extern int lynx_temp_subspace;
+    extern int max_cookies_buffer;
+    extern int max_cookies_domain;
+    extern int max_cookies_global;
+    extern int user_mode;	/* novice or advanced */
+    extern int www_search_result;
+
+    extern BOOLEAN exec_frozen;
+    extern BOOLEAN had_restrictions_all;	/* parsed these restriction options */
+    extern BOOLEAN had_restrictions_default;	/* flags to note whether we have... */
+    extern BOOLEAN no_bookmark;
+    extern BOOLEAN no_bookmark_exec;
+    extern BOOLEAN no_chdir;
+    extern BOOLEAN no_compileopts_info;
+    extern BOOLEAN no_disk_save;
+    extern BOOLEAN no_dotfiles;
+    extern BOOLEAN no_download;
+    extern BOOLEAN no_editor;
+    extern BOOLEAN no_exec;
+    extern BOOLEAN no_file_url;
+    extern BOOLEAN no_goto;
+    extern BOOLEAN no_goto_configinfo;
+    extern BOOLEAN no_goto_cso;
+    extern BOOLEAN no_goto_file;
+    extern BOOLEAN no_goto_finger;
+    extern BOOLEAN no_goto_ftp;
+    extern BOOLEAN no_goto_gopher;
+    extern BOOLEAN no_goto_http;
+    extern BOOLEAN no_goto_https;
+    extern BOOLEAN no_goto_lynxcgi;
+    extern BOOLEAN no_goto_lynxexec;
+    extern BOOLEAN no_goto_lynxprog;
+    extern BOOLEAN no_goto_mailto;
+    extern BOOLEAN no_goto_news;
+    extern BOOLEAN no_goto_nntp;
+    extern BOOLEAN no_goto_rlogin;
+    extern BOOLEAN no_goto_snews;
+    extern BOOLEAN no_goto_telnet;
+    extern BOOLEAN no_goto_tn3270;
+    extern BOOLEAN no_goto_wais;
+    extern BOOLEAN no_inside_ftp;
+    extern BOOLEAN no_inside_news;
+    extern BOOLEAN no_inside_rlogin;
+    extern BOOLEAN no_inside_telnet;	/* this and following are restrictions */
+    extern BOOLEAN no_jump;
+    extern BOOLEAN no_lynxcfg_info;
+    extern BOOLEAN no_lynxcfg_xinfo;
+    extern BOOLEAN no_lynxcgi;
+    extern BOOLEAN no_mail;
+    extern BOOLEAN no_multibook;
+    extern BOOLEAN no_newspost;
+    extern BOOLEAN no_option_save;
+    extern BOOLEAN no_outside_ftp;
+    extern BOOLEAN no_outside_news;
+    extern BOOLEAN no_outside_rlogin;
+    extern BOOLEAN no_outside_telnet;
+    extern BOOLEAN no_print;	/* TRUE to disable printing */
+    extern BOOLEAN no_shell;
+    extern BOOLEAN no_suspend;
+    extern BOOLEAN no_telnet_port;
+    extern BOOLEAN no_useragent;
+
+    extern BOOLEAN no_statusline;
+    extern BOOLEAN no_filereferer;
+    extern char LYRefererWithQuery;	/* 'S', 'P', or 'D' */
+    extern BOOLEAN local_host_only;
+    extern BOOLEAN override_no_download;
+    extern BOOLEAN show_dotfiles;	/* From rcfile if no_dotfiles is false */
+    extern char *indexfile;
+    extern char *anonftp_password;
+    extern char *personal_mail_address;
+    extern char *homepage;	/* startfile or command line argument */
+    extern char *editor;	/* if non empty it enables edit mode with
 
 				 * the editor that is named */
-extern char *jumpfile;
-extern char *bookmark_page;
-extern char *BookmarkPage;
-extern char *personal_type_map;
-extern char *global_type_map;
-extern char *global_extension_map;
-extern char *personal_extension_map;
-extern char *LYHostName;
-extern char *LYLocalDomain;
-extern BOOLEAN use_underscore;
-extern BOOLEAN no_list;
-extern BOOLEAN historical_comments;
-extern BOOLEAN minimal_comments;
-extern BOOLEAN soft_dquotes;
+    extern char *jumpfile;
+    extern char *bookmark_page;
+    extern char *BookmarkPage;
+    extern char *personal_type_map;
+    extern char *global_type_map;
+    extern char *global_extension_map;
+    extern char *personal_extension_map;
+    extern char *LYHostName;
+    extern char *LYLocalDomain;
+    extern BOOLEAN use_underscore;
+    extern BOOLEAN no_list;
+    extern BOOLEAN historical_comments;
+    extern BOOLEAN minimal_comments;
+    extern BOOLEAN soft_dquotes;
 
 #ifdef USE_SOURCE_CACHE
-extern BOOLEAN source_cache_file_error;
-extern int LYCacheSource;
+    extern BOOLEAN source_cache_file_error;
+    extern int LYCacheSource;
 
 #define SOURCE_CACHE_NONE	0
 #define SOURCE_CACHE_FILE	1
 #define SOURCE_CACHE_MEMORY	2
 
-extern int LYCacheSourceForAborted;
+    extern int LYCacheSourceForAborted;
 
 #define SOURCE_CACHE_FOR_ABORTED_KEEP 1
 #define SOURCE_CACHE_FOR_ABORTED_DROP 0
 #endif
 
-extern BOOLEAN LYCancelDownload;
-extern BOOLEAN LYRestricted;	/* whether we had -anonymous option */
-extern BOOLEAN LYValidate;
-extern BOOLEAN LYPermitURL;
-extern BOOLEAN enable_scrollback;	/* Clear screen before displaying new page */
-extern BOOLEAN keep_mime_headers;	/* Include mime headers and *
+    extern BOOLEAN LYCancelDownload;
+    extern BOOLEAN LYRestricted;	/* whether we had -anonymous option */
+    extern BOOLEAN LYValidate;
+    extern BOOLEAN LYPermitURL;
+    extern BOOLEAN enable_scrollback;	/* Clear screen before displaying new page */
+    extern BOOLEAN keep_mime_headers;	/* Include mime headers and *
 
 					 * force source dump              */
-extern BOOLEAN no_url_redirection;	/* Don't follow URL redirections */
+    extern BOOLEAN no_url_redirection;	/* Don't follow URL redirections */
 
 #ifdef DISP_PARTIAL
-extern BOOLEAN display_partial;	/* Display document while loading */
-extern int NumOfLines_partial;	/* -//- "current" number of lines */
-extern int partial_threshold;
-extern BOOLEAN debug_display_partial;	/* show with MessageSecs delay */
-extern BOOLEAN display_partial_flag;	/* permanent flag, not mutable */
+    extern BOOLEAN display_partial;	/* Display document while loading */
+    extern int NumOfLines_partial;	/* -//- "current" number of lines */
+    extern int partial_threshold;
+    extern BOOLEAN debug_display_partial;	/* show with MessageSecs delay */
+    extern BOOLEAN display_partial_flag;	/* permanent flag, not mutable */
 #endif
-extern char *form_post_data;	/* User data for post form */
-extern char *form_get_data;	/* User data for get form */
-extern char *http_error_file;	/* Place HTTP status code in this file */
-extern char *authentication_info[2];	/* Id:Password for protected documents */
-extern char *proxyauth_info[2];	/* Id:Password for protected proxy server */
-extern BOOLEAN HEAD_request;	/* Do a HEAD request */
-extern BOOLEAN scan_for_buried_news_references;
-extern BOOLEAN bookmark_start;	/* Use bookmarks as startfile */
-extern BOOLEAN clickable_images;
-extern BOOLEAN nested_tables;
-extern BOOLEAN pseudo_inline_alts;
-extern BOOLEAN crawl;
-extern BOOLEAN traversal;
-extern BOOLEAN check_realm;
-extern char *startrealm;
-extern BOOLEAN more_links;
-extern int crawl_count;
-extern BOOLEAN LYCancelledFetch;
-extern const char *LYToolbarName;
-
-extern int AlertSecs;
-extern int InfoSecs;
-extern int MessageSecs;
-extern int DebugSecs;
-extern int ReplaySecs;
-
-extern char *LYUserAgent;	/* Lynx User-Agent header */
-extern char *LYUserAgentDefault;	/* Lynx default User-Agent header */
-extern BOOLEAN LYNoRefererHeader;	/* Never send Referer header? */
-extern BOOLEAN LYNoRefererForThis;	/* No Referer header for this URL? */
-extern BOOLEAN LYNoFromHeader;	/* Never send From header?    */
-extern BOOLEAN LYListNewsNumbers;
-extern BOOLEAN LYUseMouse;
-extern BOOLEAN LYListNewsDates;
-
-extern BOOLEAN LYRawMode;
-extern BOOLEAN LYDefaultRawMode;
-extern BOOLEAN LYUseDefaultRawMode;
-extern char *UCAssume_MIMEcharset;
-extern BOOLEAN UCSaveBookmarksInUnicode;	/* in titles,  chars >127 save as &#xUUUU */
-extern BOOLEAN UCForce8bitTOUPPER;	/* disable locale case-conversion for >127 */
-extern int outgoing_mail_charset;	/* translate outgoing mail to this charset */
-
-extern BOOLEAN LYisConfiguredForX;
-extern char *URLDomainPrefixes;
-extern char *URLDomainSuffixes;
-extern BOOLEAN startfile_ok;
-extern BOOLEAN LYSelectPopups;	/* Cast popups to radio buttons? */
-extern BOOLEAN LYUseDefSelPop;	/* Command line -popup toggle    */
-extern int LYMultiBookmarks;	/* Multi bookmark support on?    */
-extern BOOLEAN LYMBMBlocked;	/* Force MBM support off?        */
-extern int LYStatusLine;	/* Line for statusline() or -1   */
-extern BOOLEAN LYCollapseBRs;	/* Collapse serial BRs?          */
-extern BOOLEAN LYSetCookies;	/* Process Set-Cookie headers?   */
-extern BOOLEAN LYAcceptAllCookies;	/* accept ALL cookies?           */
-
-extern char *LYCookieAcceptDomains;	/* domains to accept all cookies */
-extern char *LYCookieRejectDomains;	/* domains to reject all cookies */
-extern char *LYCookieStrictCheckDomains;	/* domains to check strictly    */
-extern char *LYCookieLooseCheckDomains;		/* domains to check loosely      */
-extern char *LYCookieQueryCheckDomains;		/* domains to check w/a query    */
-extern char *LYCookieSAcceptDomains;	/* domains to accept all cookies */
-extern char *LYCookieSRejectDomains;	/* domains to reject all cookies */
-extern char *LYCookieSStrictCheckDomains;	/* domains to check strictly    */
-extern char *LYCookieSLooseCheckDomains;	/* domains to check loosely      */
-extern char *LYCookieSQueryCheckDomains;	/* domains to check w/a query    */
+    extern char *form_post_data;	/* User data for post form */
+    extern char *form_get_data;	/* User data for get form */
+    extern char *http_error_file;	/* Place HTTP status code in this file */
+    extern char *authentication_info[2];	/* Id:Password for protected documents */
+    extern char *proxyauth_info[2];	/* Id:Password for protected proxy server */
+    extern BOOLEAN HEAD_request;	/* Do a HEAD request */
+    extern BOOLEAN scan_for_buried_news_references;
+    extern BOOLEAN bookmark_start;	/* Use bookmarks as startfile */
+    extern BOOLEAN clickable_images;
+    extern BOOLEAN nested_tables;
+    extern BOOLEAN pseudo_inline_alts;
+    extern BOOLEAN crawl;
+    extern BOOLEAN traversal;
+    extern BOOLEAN check_realm;
+    extern char *startrealm;
+    extern BOOLEAN more_links;
+    extern int crawl_count;
+    extern BOOLEAN LYCancelledFetch;
+    extern const char *LYToolbarName;
+
+    extern int AlertSecs;
+    extern int InfoSecs;
+    extern int MessageSecs;
+    extern int DebugSecs;
+    extern int ReplaySecs;
+
+    extern char *LYUserAgent;	/* Lynx User-Agent header */
+    extern char *LYUserAgentDefault;	/* Lynx default User-Agent header */
+    extern BOOLEAN LYNoRefererHeader;	/* Never send Referer header? */
+    extern BOOLEAN LYNoRefererForThis;	/* No Referer header for this URL? */
+    extern BOOLEAN LYNoFromHeader;	/* Never send From header?    */
+    extern BOOLEAN LYListNewsNumbers;
+    extern BOOLEAN LYUseMouse;
+    extern BOOLEAN LYListNewsDates;
+
+    extern BOOLEAN LYRawMode;
+    extern BOOLEAN LYDefaultRawMode;
+    extern BOOLEAN LYUseDefaultRawMode;
+    extern char *UCAssume_MIMEcharset;
+    extern BOOLEAN UCSaveBookmarksInUnicode;	/* in titles,  chars >127 save as &#xUUUU */
+    extern BOOLEAN UCForce8bitTOUPPER;	/* disable locale case-conversion for >127 */
+    extern int outgoing_mail_charset;	/* translate outgoing mail to this charset */
+
+    extern BOOLEAN LYisConfiguredForX;
+    extern char *URLDomainPrefixes;
+    extern char *URLDomainSuffixes;
+    extern BOOLEAN startfile_ok;
+    extern BOOLEAN LYSelectPopups;	/* Cast popups to radio buttons? */
+    extern BOOLEAN LYUseDefSelPop;	/* Command line -popup toggle    */
+    extern int LYMultiBookmarks;	/* Multi bookmark support on?    */
+    extern BOOLEAN LYMBMBlocked;	/* Force MBM support off?        */
+    extern int LYStatusLine;	/* Line for statusline() or -1   */
+    extern BOOLEAN LYCollapseBRs;	/* Collapse serial BRs?          */
+    extern BOOLEAN LYSetCookies;	/* Process Set-Cookie headers?   */
+    extern BOOLEAN LYAcceptAllCookies;	/* accept ALL cookies?           */
+
+    extern char *LYCookieAcceptDomains;		/* domains to accept all cookies */
+    extern char *LYCookieRejectDomains;		/* domains to reject all cookies */
+    extern char *LYCookieStrictCheckDomains;	/* domains to check strictly    */
+    extern char *LYCookieLooseCheckDomains;	/* domains to check loosely      */
+    extern char *LYCookieQueryCheckDomains;	/* domains to check w/a query    */
+    extern char *LYCookieSAcceptDomains;	/* domains to accept all cookies */
+    extern char *LYCookieSRejectDomains;	/* domains to reject all cookies */
+    extern char *LYCookieSStrictCheckDomains;	/* domains to check strictly    */
+    extern char *LYCookieSLooseCheckDomains;	/* domains to check loosely      */
+    extern char *LYCookieSQueryCheckDomains;	/* domains to check w/a query    */
 
 #ifndef DISABLE_BIBP
-extern BOOLEAN no_goto_bibp;
-extern char *BibP_globalserver;	/* global server for bibp: links */
-extern char *BibP_bibhost;	/* local server for bibp: links  */
-extern BOOLEAN BibP_bibhost_checked;	/* bibhost has been checked      */
-extern BOOLEAN BibP_bibhost_available;	/* bibhost is responding         */
+    extern BOOLEAN no_goto_bibp;
+    extern char *BibP_globalserver;	/* global server for bibp: links */
+    extern char *BibP_bibhost;	/* local server for bibp: links  */
+    extern BOOLEAN BibP_bibhost_checked;	/* bibhost has been checked      */
+    extern BOOLEAN BibP_bibhost_available;	/* bibhost is responding         */
 #endif
 
 #ifdef USE_PERSISTENT_COOKIES
-extern BOOLEAN persistent_cookies;
-extern char *LYCookieFile;	/* cookie read file              */
-extern char *LYCookieSaveFile;	/* cookie save file              */
-#endif /* USE_PERSISTENT_COOKIES */
+    extern BOOLEAN persistent_cookies;
+    extern char *LYCookieFile;	/* cookie read file              */
+    extern char *LYCookieSaveFile;	/* cookie save file              */
+#endif				/* USE_PERSISTENT_COOKIES */
 
-extern char *XLoadImageCommand;	/* Default image viewer for X    */
+    extern char *XLoadImageCommand;	/* Default image viewer for X    */
 
 #ifdef USE_EXTERNALS
-extern BOOLEAN no_externals;	/* don't allow the use of externals */
+    extern BOOLEAN no_externals;	/* don't allow the use of externals */
 #endif
 
-extern BOOLEAN LYNoISMAPifUSEMAP;	/* Omit ISMAP link if MAP present? */
-extern int LYHiddenLinks;
+    extern BOOLEAN LYNoISMAPifUSEMAP;	/* Omit ISMAP link if MAP present? */
+    extern int LYHiddenLinks;
 
-extern int Old_DTD;
+    extern int Old_DTD;
 
 #define MBM_V_MAXFILES  25	/* Max number of sub-bookmark files */
 
@@ -487,118 +490,118 @@ extern int Old_DTD;
  *  Arrays that holds the names of sub-bookmark files
  *  and their descriptions.
  */
-extern char *MBM_A_subbookmark[MBM_V_MAXFILES + 1];
-extern char *MBM_A_subdescript[MBM_V_MAXFILES + 1];
-
-extern BOOLEAN LYForceSSLCookiesSecure;
-extern BOOLEAN LYNoCc;
-extern BOOLEAN LYNonRestartingSIGWINCH;
-extern BOOLEAN LYPreparsedSource;	/* Show source as preparsed?     */
-extern BOOLEAN LYPrependBaseToSource;
-extern BOOLEAN LYPrependCharsetToSource;
-extern BOOLEAN LYQuitDefaultYes;
-extern BOOLEAN LYReuseTempfiles;
-extern BOOLEAN LYSeekFragAREAinCur;
-extern BOOLEAN LYSeekFragMAPinCur;
-extern BOOLEAN LYStripDotDotURLs;	/* Try to fix ../ in some URLs?  */
-extern BOOLEAN LYUseBuiltinSuffixes;
-extern BOOLEAN dont_wrap_pre;
-
-extern int cookie_noprompt;
-
-typedef enum {
-    FORCE_PROMPT_DFT		/* force a prompt, use the result */
-    ,FORCE_PROMPT_YES		/* assume "yes" where a prompt would be used */
-    ,FORCE_PROMPT_NO		/* assume "no" where a prompt would be used */
-} FORCE_PROMPT;
+    extern char *MBM_A_subbookmark[MBM_V_MAXFILES + 1];
+    extern char *MBM_A_subdescript[MBM_V_MAXFILES + 1];
+
+    extern BOOLEAN LYForceSSLCookiesSecure;
+    extern BOOLEAN LYNoCc;
+    extern BOOLEAN LYNonRestartingSIGWINCH;
+    extern BOOLEAN LYPreparsedSource;	/* Show source as preparsed?     */
+    extern BOOLEAN LYPrependBaseToSource;
+    extern BOOLEAN LYPrependCharsetToSource;
+    extern BOOLEAN LYQuitDefaultYes;
+    extern BOOLEAN LYReuseTempfiles;
+    extern BOOLEAN LYSeekFragAREAinCur;
+    extern BOOLEAN LYSeekFragMAPinCur;
+    extern BOOLEAN LYStripDotDotURLs;	/* Try to fix ../ in some URLs?  */
+    extern BOOLEAN LYUseBuiltinSuffixes;
+    extern BOOLEAN dont_wrap_pre;
+
+    extern int cookie_noprompt;
+
+    typedef enum {
+	FORCE_PROMPT_DFT	/* force a prompt, use the result */
+	,FORCE_PROMPT_YES	/* assume "yes" where a prompt would be used */
+	,FORCE_PROMPT_NO	/* assume "no" where a prompt would be used */
+    } FORCE_PROMPT;
 
 #ifdef USE_SSL
-extern int ssl_noprompt;
+    extern int ssl_noprompt;
 #endif
 
 #ifdef MISC_EXP
-extern int LYNoZapKey;		/* 0: off (do 'z' checking), 1: full, 2: initially */
+    extern int LYNoZapKey;	/* 0: off (do 'z' checking), 1: full, 2: initially */
 #endif
 
 #ifdef EXP_JUSTIFY_ELTS
-extern BOOL ok_justify;
-extern int justify_max_void_percent;
+    extern BOOL ok_justify;
+    extern int justify_max_void_percent;
 #endif
 
 #ifdef EXP_LOCALE_CHARSET
-extern BOOLEAN LYLocaleCharset;
+    extern BOOLEAN LYLocaleCharset;
 #endif
 
 #ifndef NO_DUMP_WITH_BACKSPACES
-extern BOOLEAN with_backspaces;
+    extern BOOLEAN with_backspaces;
 #endif
 
 #if defined(PDCURSES) && defined(PDC_BUILD) && PDC_BUILD >= 2401
-extern int scrsize_x;
-extern int scrsize_y;
+    extern int scrsize_x;
+    extern int scrsize_y;
 #endif
 
 #ifndef NO_LYNX_TRACE
-extern FILE *LYTraceLogFP;	/* Pointer for TRACE log         */
-extern char *LYTraceLogPath;	/* Path for TRACE log            */
+    extern FILE *LYTraceLogFP;	/* Pointer for TRACE log         */
+    extern char *LYTraceLogPath;	/* Path for TRACE log            */
 #endif
-extern BOOLEAN LYUseTraceLog;	/* Use a TRACE log?              */
+    extern BOOLEAN LYUseTraceLog;	/* Use a TRACE log?              */
 
-extern BOOL force_empty_hrefless_a;
-extern int connect_timeout;
+    extern BOOL force_empty_hrefless_a;
+    extern int connect_timeout;
 
 #ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
-extern BOOL textfields_need_activation;
-extern BOOL textfields_activation_option;
+    extern BOOL textfields_need_activation;
+    extern BOOL textfields_activation_option;
 
 #ifdef INACTIVE_INPUT_STYLE_VH
-extern BOOL textinput_redrawn;
+    extern BOOL textinput_redrawn;
 #endif
 #else
 #define textfields_need_activation FALSE
-#endif /* TEXTFIELDS_MAY_NEED_ACTIVATION */
+#endif				/* TEXTFIELDS_MAY_NEED_ACTIVATION */
 
-extern BOOLEAN textfield_prompt_at_left_edge;
+    extern BOOLEAN textfield_prompt_at_left_edge;
 
 #ifndef VMS
-extern BOOLEAN LYNoCore;
-extern BOOLEAN restore_sigpipe_for_children;
-#endif /* !VMS */
+    extern BOOLEAN LYNoCore;
+    extern BOOLEAN restore_sigpipe_for_children;
+#endif				/* !VMS */
 
 #if defined(USE_COLOR_STYLE)
-extern char *lynx_lss_file;
+    extern char *lynx_lss_file;
 #endif
 
-extern int HTNoDataOK;		/* HT_NO_DATA-is-ok hack */
-extern BOOLEAN FileInitAlreadyDone;
+    extern int HTNoDataOK;	/* HT_NO_DATA-is-ok hack */
+    extern BOOLEAN FileInitAlreadyDone;
 
 #ifdef __DJGPP__
-extern BOOLEAN watt_debug;
-extern BOOLEAN dj_is_bash;
-#endif /* __DJGPP__ */
+    extern BOOLEAN watt_debug;
+    extern BOOLEAN dj_is_bash;
+#endif				/* __DJGPP__ */
 
 #ifdef WIN_EX
 /* LYMain.c */
-extern BOOLEAN focus_window;
-extern BOOLEAN system_is_NT;
-extern char windows_drive[4];
-extern int lynx_timeout;
-#endif /* _WINDOWS */
+    extern BOOLEAN focus_window;
+    extern BOOLEAN system_is_NT;
+    extern char windows_drive[4];
+    extern int lynx_timeout;
+#endif				/* _WINDOWS */
 
 #ifdef SH_EX
-extern BOOLEAN show_cfg;
+    extern BOOLEAN show_cfg;
 #endif
 
-extern BOOLEAN no_table_center;
+    extern BOOLEAN no_table_center;
 
 #if USE_BLAT_MAILER
-extern BOOLEAN mail_is_blat;
+    extern BOOLEAN mail_is_blat;
 #endif
 
 #if defined(__CYGWIN__)
-extern void cygwin_conv_to_full_win32_path(char *posix, char *dos);
-extern void cygwin_conv_to_full_posix_path(char *dos, char *posix);
-extern int setmode(int handle, int amode);
+    extern void cygwin_conv_to_full_win32_path(char *posix, char *dos);
+    extern void cygwin_conv_to_full_posix_path(char *dos, char *posix);
+    extern int setmode(int handle, int amode);
 #endif
 
 #if !defined(__CYGWIN__) && defined(__CYGWIN32__)
@@ -613,18 +616,21 @@ extern int setmode(int handle, int amode);
 
 #ifdef USE_SCROLLBAR
 /* GridText.c */
-extern BOOLEAN LYShowScrollbar;
-extern BOOLEAN LYsb_arrow;
-extern int LYsb_begin;
-extern int LYsb_end;
+    extern BOOLEAN LYShowScrollbar;
+    extern BOOLEAN LYsb_arrow;
+    extern int LYsb_begin;
+    extern int LYsb_end;
 #endif
 
 #ifdef MARK_HIDDEN_LINKS
-extern char *hidden_link_marker;
+    extern char *hidden_link_marker;
 #endif
 
 #ifdef USE_BLINK
-extern BOOLEAN term_blink_is_boldbg;
+    extern BOOLEAN term_blink_is_boldbg;
 #endif
 
-#endif /* LYGLOBALDEFS_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYGLOBALDEFS_H */
diff --git a/src/LYHash.h b/src/LYHash.h
index b0d2674d..f8aaf4a2 100644
--- a/src/LYHash.h
+++ b/src/LYHash.h
@@ -1,81 +1,87 @@
-#if !defined(_LYHASH_H_)
+#ifndef _LYHASH_H_
 #define _LYHASH_H_ 1
 
 #ifndef HTUTILS_H
 #include <HTUtils.h>
 #endif
 
-#define OMIT_SCN_KEEPING 0	/* whether to omit keeping of Style_className
-				   in HTML.c when lss support is on. 1 to increase performance. */
-
-struct _hashbucket {
-    char *name;			/* name of this item */
-    int code;			/* code of this item */
-    int color;			/* color highlighting to be done */
-    int mono;			/* mono highlighting to be done */
-    int cattr;			/* attributes to go with the color */
-    struct _hashbucket *next;	/* next item */
-};
+#ifdef __cplusplus
+extern "C" {
+#endif
+    /* define OMIT_SCN_KEEPING to 1 to omit keeping of Style_className
+     * in HTML.c when lss support is on. 1 to increase performance.
+     */
+#define OMIT_SCN_KEEPING 0
+    struct _hashbucket {
+	char *name;		/* name of this item */
+	int code;		/* code of this item */
+	int color;		/* color highlighting to be done */
+	int mono;		/* mono highlighting to be done */
+	int cattr;		/* attributes to go with the color */
+	struct _hashbucket *next;	/* next item */
+    };
 
-typedef struct _hashbucket bucket;
+    typedef struct _hashbucket bucket;
 
-#if !defined(CSHASHSIZE)
+#ifndef CSHASHSIZE
 #define CSHASHSIZE 8193
 #endif
 
 #define NOSTYLE -1
 
-extern bucket hashStyles[CSHASHSIZE];
-extern int hash_code(const char *string);
-extern bucket nostyle_bucket;	/* initialized properly - to be used in CTRACE
+    /* hashStyles[] is used in CTRACE when NOSTYLE is passed as 'style' to
+     * curses_w_style
+     */
+    extern bucket hashStyles[CSHASHSIZE];
+    extern int hash_code(const char *string);
+    extern bucket nostyle_bucket;
 
-				 * when NOSTYLE is passed as 'style' to
-				 * curses_w_style
-				 */
+    extern int hash_code_lowercase_on_fly(const char *string);
+    extern int hash_code_aggregate_char(char c, int hash);
+    extern int hash_code_aggregate_lower_str(const char *c, int hash_was);
 
-extern int hash_code_lowercase_on_fly(const char *string);
-extern int hash_code_aggregate_char(char c, int hash);
-extern int hash_code_aggregate_lower_str(const char *c, int hash_was);
-
-extern int s_a;
-extern int s_aedit;
-extern int s_aedit_arr;
-extern int s_aedit_pad;
-extern int s_aedit_sel;
-extern int s_alert;
-extern int s_alink;
-extern int s_curedit;
-extern int s_forw_backw;
-extern int s_hot_paste;
-extern int s_menu_active;
-extern int s_menu_bg;
-extern int s_menu_entry;
-extern int s_menu_frame;
-extern int s_menu_number;
-extern int s_menu_sb;
-extern int s_normal;
-extern int s_prompt_edit;
-extern int s_prompt_edit_arr;
-extern int s_prompt_edit_pad;
-extern int s_prompt_sel;
-extern int s_status;
-extern int s_title;
-extern int s_whereis;
+    extern int s_a;
+    extern int s_aedit;
+    extern int s_aedit_arr;
+    extern int s_aedit_pad;
+    extern int s_aedit_sel;
+    extern int s_alert;
+    extern int s_alink;
+    extern int s_curedit;
+    extern int s_forw_backw;
+    extern int s_hot_paste;
+    extern int s_menu_active;
+    extern int s_menu_bg;
+    extern int s_menu_entry;
+    extern int s_menu_frame;
+    extern int s_menu_number;
+    extern int s_menu_sb;
+    extern int s_normal;
+    extern int s_prompt_edit;
+    extern int s_prompt_edit_arr;
+    extern int s_prompt_edit_pad;
+    extern int s_prompt_sel;
+    extern int s_status;
+    extern int s_title;
+    extern int s_whereis;
 
 #ifdef USE_SCROLLBAR
-extern int s_sb_aa;
-extern int s_sb_bar;
-extern int s_sb_bg;
-extern int s_sb_naa;
+    extern int s_sb_aa;
+    extern int s_sb_bar;
+    extern int s_sb_bg;
+    extern int s_sb_naa;
 #endif
 
 #if OMIT_SCN_KEEPING
-extern bucket special_bucket;
+    extern bucket special_bucket;
 #endif
 
 #define CACHEW 128
 #define CACHEH 64
 
-extern unsigned cached_styles[CACHEH][CACHEW];
+    extern unsigned cached_styles[CACHEH][CACHEW];
 
-#endif /* _LYHASH_H_ */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* _LYHASH_H_ */
diff --git a/src/LYHistory.c b/src/LYHistory.c
index 7f90bc87..0e3da111 100644
--- a/src/LYHistory.c
+++ b/src/LYHistory.c
@@ -93,7 +93,7 @@ static void trace_history(const char *tag)
  */
 void LYAddVisitedLink(DocInfo *doc)
 {
-    VisitedLink *new;
+    VisitedLink *tmp;
     HTList *cur;
     const char *title = (doc->title ? doc->title : NO_TITLE);
 
@@ -152,36 +152,36 @@ void LYAddVisitedLink(DocInfo *doc)
     }
 
     cur = Visited_Links;
-    while (NULL != (new = (VisitedLink *) HTList_nextObject(cur))) {
-	if (!strcmp(NonNull(new->address),
+    while (NULL != (tmp = (VisitedLink *) HTList_nextObject(cur))) {
+	if (!strcmp(NonNull(tmp->address),
 		    NonNull(doc->address))) {
-	    PrevVisitedLink = PrevActiveVisitedLink = new;
+	    PrevVisitedLink = PrevActiveVisitedLink = tmp;
 	    /* Already visited.  Update the last-visited info. */
-	    if (new->next_latest == &Latest_last)	/* optimization */
+	    if (tmp->next_latest == &Latest_last)	/* optimization */
 		return;
 
 	    /* Remove from "latest" chain */
-	    new->prev_latest->next_latest = new->next_latest;
-	    new->next_latest->prev_latest = new->prev_latest;
+	    tmp->prev_latest->next_latest = tmp->next_latest;
+	    tmp->next_latest->prev_latest = tmp->prev_latest;
 
 	    /* Insert at the end of the "latest" chain */
-	    Latest_last.prev_latest->next_latest = new;
-	    new->prev_latest = Latest_last.prev_latest;
-	    new->next_latest = &Latest_last;
-	    Latest_last.prev_latest = new;
+	    Latest_last.prev_latest->next_latest = tmp;
+	    tmp->prev_latest = Latest_last.prev_latest;
+	    tmp->next_latest = &Latest_last;
+	    Latest_last.prev_latest = tmp;
 	    return;
 	}
     }
 
-    if ((new = typecalloc(VisitedLink)) == NULL)
+    if ((tmp = typecalloc(VisitedLink)) == NULL)
 	outofmem(__FILE__, "LYAddVisitedLink");
-    StrAllocCopy(new->address, doc->address);
-    LYformTitle(&(new->title), title);
+    StrAllocCopy(tmp->address, doc->address);
+    LYformTitle(&(tmp->title), title);
 
     /* First-visited chain */
-    HTList_appendObject(Visited_Links, new);	/* At end */
-    new->prev_first = Last_by_first;
-    Last_by_first = new;
+    HTList_appendObject(Visited_Links, tmp);	/* At end */
+    tmp->prev_first = Last_by_first;
+    Last_by_first = tmp;
 
     /* Tree structure */
     if (PrevVisitedLink) {
@@ -194,27 +194,27 @@ void LYAddVisitedLink(DocInfo *doc)
 	    a = b, b = b->next_tree;
 
 	if (!b)			/* a == Latest_tree */
-	    Latest_tree = new;
-	new->next_tree = a->next_tree;
-	a->next_tree = new;
+	    Latest_tree = tmp;
+	tmp->next_tree = a->next_tree;
+	a->next_tree = tmp;
 
-	new->level = PrevVisitedLink->level + 1;
+	tmp->level = PrevVisitedLink->level + 1;
     } else {
 	if (Latest_tree)
-	    Latest_tree->next_tree = new;
-	new->level = 0;
-	new->next_tree = NULL;
-	Latest_tree = new;
+	    Latest_tree->next_tree = tmp;
+	tmp->level = 0;
+	tmp->next_tree = NULL;
+	Latest_tree = tmp;
     }
-    PrevVisitedLink = PrevActiveVisitedLink = new;
+    PrevVisitedLink = PrevActiveVisitedLink = tmp;
     if (!First_tree)
-	First_tree = new;
+	First_tree = tmp;
 
     /* "latest" chain */
-    Latest_last.prev_latest->next_latest = new;
-    new->prev_latest = Latest_last.prev_latest;
-    new->next_latest = &Latest_last;
-    Latest_last.prev_latest = new;
+    Latest_last.prev_latest->next_latest = tmp;
+    tmp->prev_latest = Latest_last.prev_latest;
+    tmp->next_latest = &Latest_last;
+    Latest_last.prev_latest = tmp;
 
     return;
 }
@@ -334,7 +334,7 @@ static int are_identical(HistInfo * doc, DocInfo *doc1)
 
 void LYAllocHistory(int entries)
 {
-    CTRACE((tfp, "FIXME LYAllocHistory %d vs %d\n", entries, size_history));
+    CTRACE((tfp, "LYAllocHistory %d vs %d\n", entries, size_history));
     if (entries + 1 >= size_history) {
 	unsigned want;
 	int save = size_history;
@@ -349,11 +349,11 @@ void LYAllocHistory(int entries)
 	if (history == 0)
 	    outofmem(__FILE__, "LYAllocHistory");
 	while (save < size_history) {
-	    CTRACE((tfp, "FIXME ...LYAllocHistory clearing %d\n", save));
+	    CTRACE((tfp, "...LYAllocHistory clearing %d\n", save));
 	    memset(&history[save++], 0, sizeof(history[0]));
 	}
     }
-    CTRACE((tfp, "FIXME ...LYAllocHistory %d vs %d\n", entries, size_history));
+    CTRACE((tfp, "...LYAllocHistory %d vs %d\n", entries, size_history));
 }
 
 /*
diff --git a/src/LYHistory.h b/src/LYHistory.h
index c5cc8a94..249304f5 100644
--- a/src/LYHistory.h
+++ b/src/LYHistory.h
@@ -5,24 +5,30 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
-extern BOOLEAN LYwouldPush(const char *title, const char *docurl);
-extern BOOLEAN historytarget(DocInfo *newdoc);
-extern int LYShowVisitedLinks(char **newfile);
-extern int LYhist_next(DocInfo *doc, DocInfo *newdoc);
-extern int LYpush(DocInfo *doc, BOOLEAN force_push);
-extern int showhistory(char **newfile);
-extern void LYAddVisitedLink(DocInfo *doc);
-extern void LYAllocHistory(int entries);
-extern void LYFreePostData(DocInfo *data);
-extern void LYFreeDocInfo(DocInfo *data);
-extern void LYhist_prev(DocInfo *doc);
-extern void LYhist_prev_register(DocInfo *doc);
-extern void LYpop(DocInfo *doc);
-extern void LYpop_num(int number, DocInfo *doc);
-extern void LYstatusline_messages_on_exit(char **buf);
-extern void LYstore_message(const char *message);
-extern void LYstore_message2(const char *message, const char *argument);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOLEAN LYwouldPush(const char *title, const char *docurl);
+    extern BOOLEAN historytarget(DocInfo *newdoc);
+    extern int LYShowVisitedLinks(char **newfile);
+    extern int LYhist_next(DocInfo *doc, DocInfo *newdoc);
+    extern int LYpush(DocInfo *doc, BOOLEAN force_push);
+    extern int showhistory(char **newfile);
+    extern void LYAddVisitedLink(DocInfo *doc);
+    extern void LYAllocHistory(int entries);
+    extern void LYFreePostData(DocInfo *data);
+    extern void LYFreeDocInfo(DocInfo *data);
+    extern void LYhist_prev(DocInfo *doc);
+    extern void LYhist_prev_register(DocInfo *doc);
+    extern void LYpop(DocInfo *doc);
+    extern void LYpop_num(int number, DocInfo *doc);
+    extern void LYstatusline_messages_on_exit(char **buf);
+    extern void LYstore_message(const char *message);
+    extern void LYstore_message2(const char *message, const char *argument);
 
-extern int nhist_extra;
+    extern int nhist_extra;
 
-#endif /* LYHISTORY_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYHISTORY_H */
diff --git a/src/LYJump.c b/src/LYJump.c
index 419963ea..903c2ee2 100644
--- a/src/LYJump.c
+++ b/src/LYJump.c
@@ -33,14 +33,7 @@ void LYJumpTable_free(void)
 	FREE(cur->file);
 	FREE(cur->shortcut);
 	if (cur->history) {
-	    char *shortcut;
-	    HTList *current = cur->history;
-
-	    while (NULL != (shortcut = (char *) HTList_nextObject(current))) {
-		FREE(shortcut);
-	    };
-
-	    HTList_delete(cur->history);
+	    LYFreeStringList(cur->history);
 	    cur->history = NULL;
 	}
 	FREE(cur->table);
@@ -58,23 +51,23 @@ void LYJumpTable_free(void)
  */
 void LYAddJumpShortcut(HTList *historyp, char *shortcut)
 {
-    char *new = NULL;
+    char *tmp = NULL;
     char *old;
     HTList *cur = historyp;
 
     if (!historyp || isEmpty(shortcut))
 	return;
 
-    StrAllocCopy(new, shortcut);
+    StrAllocCopy(tmp, shortcut);
 
     while (NULL != (old = (char *) HTList_nextObject(cur))) {
-	if (!strcmp(old, new)) {
+	if (!strcmp(old, tmp)) {
 	    HTList_removeObject(historyp, old);
 	    FREE(old);
 	    break;
 	}
     }
-    HTList_addObject(historyp, new);
+    HTList_addObject(historyp, tmp);
 
     return;
 }
@@ -185,7 +178,8 @@ char *LYJump(int key)
     static char buf[124];
     char *bp, *cp;
     struct JumpTable *jtp;
-    int ch, recall;
+    int ch;
+    RecallType recall;
     int ShortcutTotal;
     int ShortcutNum;
     BOOLEAN FirstShortcutRecall = TRUE;
diff --git a/src/LYJump.h b/src/LYJump.h
index fad6608e..24b5222e 100644
--- a/src/LYJump.h
+++ b/src/LYJump.h
@@ -3,27 +3,33 @@
 
 #include <HTList.h>
 
-typedef struct _JumpDatum {
-    char *key;
-    char *url;
-} JumpDatum;
+#ifdef __cplusplus
+extern "C" {
+#endif
+    typedef struct _JumpDatum {
+	char *key;
+	char *url;
+    } JumpDatum;
 
-struct JumpTable {
-    int key;
-    int nel;
-    char *msg;
-    char *file;
-    char *shortcut;
-    HTList *history;
-    JumpDatum *table;
-    struct JumpTable *next;
-    char *mp;
-};
+    struct JumpTable {
+	int key;
+	int nel;
+	char *msg;
+	char *file;
+	char *shortcut;
+	HTList *history;
+	JumpDatum *table;
+	struct JumpTable *next;
+	char *mp;
+    };
 
-extern struct JumpTable *JThead;
-extern void LYJumpTable_free(void);
-extern void LYAddJumpShortcut(HTList *the_history, char *shortcut);
-extern BOOL LYJumpInit(char *config);
-extern char *LYJump(int key);
+    extern struct JumpTable *JThead;
+    extern void LYJumpTable_free(void);
+    extern void LYAddJumpShortcut(HTList *the_history, char *shortcut);
+    extern BOOL LYJumpInit(char *config);
+    extern char *LYJump(int key);
 
-#endif /* LYJUMP_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYJUMP_H */
diff --git a/src/LYJustify.h b/src/LYJustify.h
index 3bebdc56..43e22bd0 100644
--- a/src/LYJustify.h
+++ b/src/LYJustify.h
@@ -7,25 +7,27 @@
 
 #include <HTUtils.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #ifdef EXP_JUSTIFY_ELTS
+    extern BOOL ok_justify;
+    extern BOOL can_justify_here;
+    extern BOOL can_justify_here_saved;
 
-extern BOOL ok_justify;
-extern BOOL can_justify_here;
-extern BOOL can_justify_here_saved;
-
-extern BOOL can_justify_this_line;
-extern int wait_for_this_stacked_elt;
-extern BOOL form_in_htext;
+    extern BOOL can_justify_this_line;
+    extern int wait_for_this_stacked_elt;
+    extern BOOL form_in_htext;
 
 /* this is the element with SGML_EMPTY content, so it won't get on the stack,
  * so we can't trap it with wait_for_this_stacked_elt
  */
-extern BOOL in_DT;
+    extern BOOL in_DT;
 
 /*disabled by default*/
 /*#define DEBUG_JUSTIFY*/
 #ifdef DEBUG_JUSTIFY
-extern BOOL can_justify_stack_depth;	/* can be 0 or 1 if all code is correct */
+    extern BOOL can_justify_stack_depth;	/* can be 0 or 1 if all code is correct */
 
 #  define CAN_JUSTIFY_STACK_INC ++can_justify_stack_depth;\
 	assert(can_justify_stack_depth < 2 && can_justify_stack_depth >=0 );
@@ -57,25 +59,23 @@ extern BOOL can_justify_stack_depth;	/* can be 0 or 1 if all code is correct */
 #define EMIT_IFDEF_EXP_JUSTIFY_ELTS(x) x
     /*defined in order not to wrap single line of code  into #ifdef/#endif */
 
-extern void ht_justify_cleanup(void);
-extern void mark_justify_start_position(void *text);
-
-#else /* ! EXP_JUSTIFY_ELTS */
+    extern void ht_justify_cleanup(void);
+    extern void mark_justify_start_position(void *text);
 
+#else				/* ! EXP_JUSTIFY_ELTS */
 /*
  * define empty macros so that they can be used without wrapping them in
  * #ifdef EXP_JUSTIFY_ELTS/#endif
  */
-
 #define CAN_JUSTIFY_PUSH(x)
 #define CAN_JUSTIFY_POP
 #define CAN_JUSTIFY_SET(x)
 #define CAN_JUSTIFY_START
 #define CANT_JUSTIFY_THIS_LINE
 #define EMIT_IFDEF_EXP_JUSTIFY_ELTS(x)
-
-#endif /* EXP_JUSTIFY_ELTS */
-
+#endif				/* EXP_JUSTIFY_ELTS */
 #define CAN_JUSTIFY_PUSH_F CAN_JUSTIFY_PUSH(FALSE)
-
-#endif /* LYJUSTIFY_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYJUSTIFY_H */
diff --git a/src/LYKeymap.c b/src/LYKeymap.c
index 3e81e27d..f794a828 100644
--- a/src/LYKeymap.c
+++ b/src/LYKeymap.c
@@ -1264,7 +1264,7 @@ static char *pretty_html(int c)
 
 static char *format_binding(LYKeymap_t * table, int i)
 {
-    LYKeymap_t the_key = table[i];
+    LYKeymapCode the_key = (LYKeymapCode) table[i];
     char *buf = 0;
     char *formatted;
     Kcmd *rmap = LYKeycodeToKcmd(the_key);
@@ -1292,7 +1292,7 @@ static void print_binding(HTStream *target, int i,
 
 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
     if (prev_lynx_edit_mode && !no_dired_support &&
-	(lac1 = key_override[i]) != LYK_UNKNOWN) {
+	(lac1 = (LYKeymapCode) key_override[i]) != LYK_UNKNOWN) {
 	if ((buf = format_binding(key_override, i)) != 0) {
 	    PUTS(buf);
 	    FREE(buf);
@@ -1300,7 +1300,7 @@ static void print_binding(HTStream *target, int i,
     } else
 #endif /* DIRED_SUPPORT && OK_OVERRIDE */
     if ((buf = format_binding(keymap, i)) != 0) {
-	lac1 = keymap[i];
+	lac1 = (LYKeymapCode) keymap[i];
 	PUTS(buf);
 	FREE(buf);
     }
diff --git a/src/LYKeymap.h b/src/LYKeymap.h
index 2df5de6e..a6549615 100644
--- a/src/LYKeymap.h
+++ b/src/LYKeymap.h
@@ -5,46 +5,49 @@
 #include <HTList.h>
 #include <LYCurses.h>
 
-extern BOOLEAN LYisNonAlnumKeyname(int ch, int KeyName);
-extern HTList *LYcommandList(void);
-extern char *LYKeycodeToString(int c, BOOLEAN upper8);
-extern char *fmt_keys(int lkc_first, int lkc_second);
-extern char *key_for_func(int func);
-extern char *key_for_func_ext(int lac, int context_code);
-extern int LYReverseKeymap(int KeyName);
-extern int LYStringToKeycode(char *src);
-extern int lacname_to_lac(const char *func);
-extern int lecname_to_lec(const char *func);
-extern int lkcstring_to_lkc(const char *src);
-extern int remap(char *key, const char *func, BOOLEAN for_dired);
-extern void print_keymap(char **newfile);
-extern void reset_emacs_keys(void);
-extern void reset_numbers_as_arrows(void);
-extern void reset_vi_keys(void);
-extern void set_emacs_keys(void);
-extern void set_numbers_as_arrows(void);
-extern void set_vi_keys(void);
-extern void set_vms_keys(void);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOLEAN LYisNonAlnumKeyname(int ch, int KeyName);
+    extern HTList *LYcommandList(void);
+    extern char *LYKeycodeToString(int c, BOOLEAN upper8);
+    extern char *fmt_keys(int lkc_first, int lkc_second);
+    extern char *key_for_func(int func);
+    extern char *key_for_func_ext(int lac, int context_code);
+    extern int LYReverseKeymap(int KeyName);
+    extern int LYStringToKeycode(char *src);
+    extern int lacname_to_lac(const char *func);
+    extern int lecname_to_lec(const char *func);
+    extern int lkcstring_to_lkc(const char *src);
+    extern int remap(char *key, const char *func, BOOLEAN for_dired);
+    extern void print_keymap(char **newfile);
+    extern void reset_emacs_keys(void);
+    extern void reset_numbers_as_arrows(void);
+    extern void reset_vi_keys(void);
+    extern void set_emacs_keys(void);
+    extern void set_numbers_as_arrows(void);
+    extern void set_vi_keys(void);
+    extern void set_vms_keys(void);
 
 /* We only use unsigned keycodes; if there's a problem matching with enum
  * (which is supposed to be 'int'), that would be okay, but not as clean
  * for type-checking.
  */
-typedef unsigned short LYKeymap_t;
+    typedef unsigned short LYKeymap_t;
 
 #define KEYMAP_SIZE 661
-extern LYKeymap_t keymap[KEYMAP_SIZE];	/* main keymap matrix */
+    extern LYKeymap_t keymap[KEYMAP_SIZE];	/* main keymap matrix */
 
 #ifdef EXP_KEYBOARD_LAYOUT
-typedef unsigned short LYKbLayout_t;
-extern int current_layout;
-extern LYKbLayout_t *LYKbLayouts[];
-extern const char *LYKbLayoutNames[];
-extern int LYSetKbLayout(char *layout_id);
+    typedef unsigned short LYKbLayout_t;
+    extern int current_layout;
+    extern LYKbLayout_t *LYKbLayouts[];
+    extern const char *LYKbLayoutNames[];
+    extern int LYSetKbLayout(char *layout_id);
 #endif
 
 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
-extern LYKeymap_t key_override[];
+    extern LYKeymap_t key_override[];
 #endif
 
 /* * *  LynxKeyCodes  * * */
@@ -56,7 +59,7 @@ extern LYKeymap_t key_override[];
 
 /* Used to distinguish internal Lynx keycodes of (say) extended ncurses once. */
 #define LKC_ISLKC	0x0400	/* flag: already lynxkeycode (not native) */
-		     /* 0x0400  is MOUSE_KEYSYM for slang in LYStrings.c */
+    /* 0x0400  is MOUSE_KEYSYM for slang in LYStrings.c */
 #define LKC_MASK	0x07FF	/* mask for lynxkeycode proper */
 
 #define LKC_DONE	0x07FE	/* special value - operation done, not-a-key */
@@ -65,8 +68,8 @@ extern LYKeymap_t key_override[];
 #define LAC_SHIFT	8	/* shift for lynxactioncode - must not
 				   overwrite any assigned LYK_* values */
 #define LAC_MASK	((1<<LAC_SHIFT)-1)
-				/* mask for lynxactioncode - must cover all
-				   assigned LYK_* values */
+    /* mask for lynxactioncode - must cover all
+       assigned LYK_* values */
 
 /*  Return lkc masking single actioncode, given an lkc masking a lac + lec */
 #define LKC2_TO_LKC(c)   (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \
@@ -105,142 +108,142 @@ extern LYKeymap_t key_override[];
  * The values in this enum are indexed against the command names in the
  * 'revmap[]' array in LYKeymap.c
  */
-typedef enum {
-    LYK_UNKNOWN = 0
-    ,LYK_COMMAND
-    ,LYK_1
-    ,LYK_2
-    ,LYK_3
-    ,LYK_4
-    ,LYK_5
-    ,LYK_6
-    ,LYK_7
-    ,LYK_8
-    ,LYK_9
-    ,LYK_SOURCE
-    ,LYK_RELOAD
-    ,LYK_QUIT
-    ,LYK_ABORT
-    ,LYK_NEXT_PAGE
-    ,LYK_PREV_PAGE
-    ,LYK_UP_TWO
-    ,LYK_DOWN_TWO
-    ,LYK_UP_HALF
-    ,LYK_DOWN_HALF
-    ,LYK_REFRESH
-    ,LYK_HOME
-    ,LYK_END
-    ,LYK_FIRST_LINK
-    ,LYK_LAST_LINK
-    ,LYK_PREV_LINK
-    ,LYK_NEXT_LINK
-    ,LYK_LPOS_PREV_LINK
-    ,LYK_LPOS_NEXT_LINK
-    ,LYK_FASTBACKW_LINK
-    ,LYK_FASTFORW_LINK
-    ,LYK_UP_LINK
-    ,LYK_DOWN_LINK
-    ,LYK_RIGHT_LINK
-    ,LYK_LEFT_LINK
-    ,LYK_HISTORY
-    ,LYK_PREV_DOC
-    ,LYK_NEXT_DOC
-    ,LYK_ACTIVATE
-    ,LYK_SUBMIT			/* mostly like LYK_ACTIVATE, for mouse use, don't map */
-    ,LYK_GOTO
-    ,LYK_ECGOTO
-    ,LYK_HELP
-    ,LYK_DWIMHELP
-    ,LYK_INDEX
-    ,LYK_NOCACHE
-    ,LYK_INTERRUPT
-    ,LYK_MAIN_MENU
-    ,LYK_OPTIONS
-    ,LYK_INDEX_SEARCH
-    ,LYK_WHEREIS
-    ,LYK_PREV
-    ,LYK_NEXT
-    ,LYK_COMMENT
-    ,LYK_EDIT
-    ,LYK_INFO
-    ,LYK_PRINT
-    ,LYK_ADD_BOOKMARK
-    ,LYK_DEL_BOOKMARK
-    ,LYK_VIEW_BOOKMARK
-    ,LYK_VLINKS
-    ,LYK_SHELL
-    ,LYK_DOWNLOAD
-    ,LYK_TRACE_TOGGLE
-    ,LYK_TRACE_LOG
-    ,LYK_IMAGE_TOGGLE
-    ,LYK_INLINE_TOGGLE
-    ,LYK_HEAD
-    ,LYK_DO_NOTHING
-    ,LYK_TOGGLE_HELP
-    ,LYK_JUMP
-    ,LYK_KEYMAP
-    ,LYK_LIST
-    ,LYK_TOOLBAR
-    ,LYK_HISTORICAL
-    ,LYK_MINIMAL
-    ,LYK_SOFT_DQUOTES
-    ,LYK_RAW_TOGGLE
-    ,LYK_COOKIE_JAR
-    ,LYK_F_LINK_NUM
-    ,LYK_CLEAR_AUTH
-    ,LYK_SWITCH_DTD
-    ,LYK_ELGOTO
-    ,LYK_CHANGE_LINK
-    ,LYK_DWIMEDIT
-    ,LYK_EDIT_TEXTAREA
-    ,LYK_GROW_TEXTAREA
-    ,LYK_INSERT_FILE
+    typedef enum {
+	LYK_UNKNOWN = 0
+	,LYK_COMMAND
+	,LYK_1
+	,LYK_2
+	,LYK_3
+	,LYK_4
+	,LYK_5
+	,LYK_6
+	,LYK_7
+	,LYK_8
+	,LYK_9
+	,LYK_SOURCE
+	,LYK_RELOAD
+	,LYK_QUIT
+	,LYK_ABORT
+	,LYK_NEXT_PAGE
+	,LYK_PREV_PAGE
+	,LYK_UP_TWO
+	,LYK_DOWN_TWO
+	,LYK_UP_HALF
+	,LYK_DOWN_HALF
+	,LYK_REFRESH
+	,LYK_HOME
+	,LYK_END
+	,LYK_FIRST_LINK
+	,LYK_LAST_LINK
+	,LYK_PREV_LINK
+	,LYK_NEXT_LINK
+	,LYK_LPOS_PREV_LINK
+	,LYK_LPOS_NEXT_LINK
+	,LYK_FASTBACKW_LINK
+	,LYK_FASTFORW_LINK
+	,LYK_UP_LINK
+	,LYK_DOWN_LINK
+	,LYK_RIGHT_LINK
+	,LYK_LEFT_LINK
+	,LYK_HISTORY
+	,LYK_PREV_DOC
+	,LYK_NEXT_DOC
+	,LYK_ACTIVATE
+	,LYK_SUBMIT		/* mostly like LYK_ACTIVATE, for mouse use, don't map */
+	,LYK_GOTO
+	,LYK_ECGOTO
+	,LYK_HELP
+	,LYK_DWIMHELP
+	,LYK_INDEX
+	,LYK_NOCACHE
+	,LYK_INTERRUPT
+	,LYK_MAIN_MENU
+	,LYK_OPTIONS
+	,LYK_INDEX_SEARCH
+	,LYK_WHEREIS
+	,LYK_PREV
+	,LYK_NEXT
+	,LYK_COMMENT
+	,LYK_EDIT
+	,LYK_INFO
+	,LYK_PRINT
+	,LYK_ADD_BOOKMARK
+	,LYK_DEL_BOOKMARK
+	,LYK_VIEW_BOOKMARK
+	,LYK_VLINKS
+	,LYK_SHELL
+	,LYK_DOWNLOAD
+	,LYK_TRACE_TOGGLE
+	,LYK_TRACE_LOG
+	,LYK_IMAGE_TOGGLE
+	,LYK_INLINE_TOGGLE
+	,LYK_HEAD
+	,LYK_DO_NOTHING
+	,LYK_TOGGLE_HELP
+	,LYK_JUMP
+	,LYK_KEYMAP
+	,LYK_LIST
+	,LYK_TOOLBAR
+	,LYK_HISTORICAL
+	,LYK_MINIMAL
+	,LYK_SOFT_DQUOTES
+	,LYK_RAW_TOGGLE
+	,LYK_COOKIE_JAR
+	,LYK_F_LINK_NUM
+	,LYK_CLEAR_AUTH
+	,LYK_SWITCH_DTD
+	,LYK_ELGOTO
+	,LYK_CHANGE_LINK
+	,LYK_DWIMEDIT
+	,LYK_EDIT_TEXTAREA
+	,LYK_GROW_TEXTAREA
+	,LYK_INSERT_FILE
 
 #ifdef EXP_ADDRLIST_PAGE
-    ,LYK_ADDRLIST
+	,LYK_ADDRLIST
 #else
 #define LYK_ADDRLIST      LYK_ADD_BOOKMARK
 #endif
 
 #ifdef USE_EXTERNALS
-    ,LYK_EXTERN_LINK
-    ,LYK_EXTERN_PAGE
+	,LYK_EXTERN_LINK
+	,LYK_EXTERN_PAGE
 #else
 #define LYK_EXTERN_LINK   LYK_UNKNOWN
 #define LYK_EXTERN_PAGE   LYK_UNKNOWN
 #endif				/* !defined(USE_EXTERNALS) */
 
 #if defined(VMS) || defined(DIRED_SUPPORT)
-    ,LYK_DIRED_MENU
+	,LYK_DIRED_MENU
 #else
 #define LYK_DIRED_MENU    LYK_UNKNOWN
 #endif				/* VMS || DIRED_SUPPORT */
 
 #ifdef DIRED_SUPPORT
-    ,LYK_CREATE
-    ,LYK_REMOVE
-    ,LYK_MODIFY
-    ,LYK_TAG_LINK
-    ,LYK_UPLOAD
-    ,LYK_INSTALL
+	,LYK_CREATE
+	,LYK_REMOVE
+	,LYK_MODIFY
+	,LYK_TAG_LINK
+	,LYK_UPLOAD
+	,LYK_INSTALL
 #else
 #define LYK_TAG_LINK      LYK_UNKNOWN
 #endif				/* DIRED_SUPPORT */
 
-    ,LYK_CHG_CENTER
+	,LYK_CHG_CENTER
 
 #ifdef KANJI_CODE_OVERRIDE
-    ,LYK_CHG_KCODE
+	,LYK_CHG_KCODE
 #endif
 
 #ifdef SUPPORT_CHDIR
-    ,LYK_CHDIR
+	,LYK_CHDIR
 #endif
 
 #ifdef USE_CURSES_PADS
-    ,LYK_SHIFT_LEFT
-    ,LYK_SHIFT_RIGHT
-    ,LYK_LINEWRAP_TOGGLE
+	,LYK_SHIFT_LEFT
+	,LYK_SHIFT_RIGHT
+	,LYK_LINEWRAP_TOGGLE
 #else
 #define LYK_SHIFT_LEFT      LYK_UNKNOWN
 #define LYK_SHIFT_RIGHT     LYK_UNKNOWN
@@ -248,31 +251,34 @@ typedef enum {
 #endif
 
 #ifdef CAN_CUT_AND_PASTE
-    ,LYK_PASTE_URL
-    ,LYK_TO_CLIPBOARD
+	,LYK_PASTE_URL
+	,LYK_TO_CLIPBOARD
 #else
 #define LYK_PASTE_URL      LYK_UNKNOWN
 #define LYK_TO_CLIPBOARD   LYK_UNKNOWN
 #endif
 
 #ifdef EXP_NESTED_TABLES
-    ,LYK_NESTED_TABLES
+	,LYK_NESTED_TABLES
 #else
 #define LYK_NESTED_TABLES  LYK_UNKNOWN
 #endif
 
-} LYKeymapCode;
+    } LYKeymapCode;
 
 /*
  * Symbol table for internal commands.
  */
-typedef struct {
-    LYKeymapCode code;
-    const char *name;
-    const char *doc;
-} Kcmd;
+    typedef struct {
+	LYKeymapCode code;
+	const char *name;
+	const char *doc;
+    } Kcmd;
 
-extern Kcmd *LYKeycodeToKcmd(LYKeymapCode code);
-extern Kcmd *LYStringToKcmd(const char *name);
+    extern Kcmd *LYKeycodeToKcmd(LYKeymapCode code);
+    extern Kcmd *LYStringToKcmd(const char *name);
 
-#endif /* LYKEYMAP_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYKEYMAP_H */
diff --git a/src/LYList.h b/src/LYList.h
index a3955bc6..3d99adbe 100644
--- a/src/LYList.h
+++ b/src/LYList.h
@@ -3,7 +3,13 @@
 
 #include <LYStructs.h>
 
-extern int showlist(DocInfo *newdoc, BOOLEAN titles);
-extern void printlist(FILE *fp, BOOLEAN titles);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern int showlist(DocInfo *newdoc, BOOLEAN titles);
+    extern void printlist(FILE *fp, BOOLEAN titles);
 
-#endif /* LYLIST_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYLIST_H */
diff --git a/src/LYLocal.c b/src/LYLocal.c
index 12c11902..595cf101 100644
--- a/src/LYLocal.c
+++ b/src/LYLocal.c
@@ -692,7 +692,7 @@ static int modify_tagged(char *testpath)
 	    /*
 	     * Prepare to get directory path from one of the tagged files.
 	     */
-	    cp = HTList_lastObject(tagged);
+	    cp = (char *) HTList_lastObject(tagged);
 	    testpath = NULL;	/* Won't be needed any more in this function,
 				   set to NULL as a flag. */
 	}
@@ -1566,7 +1566,7 @@ void showtags(HTList *t)
 
     for (i = 0; i < nlinks; i++) {
 	s = t;
-	while ((name = HTList_nextObject(s)) != NULL) {
+	while ((name = (char *) HTList_nextObject(s)) != NULL) {
 	    if (!strcmp(links[i].lname, name)) {
 		tagflag(ON, i);
 		break;
@@ -2048,7 +2048,7 @@ int dired_options(DocInfo *doc, char **newfile)
 	LYAddHtmlSep(&cd);
 	m = (n < NUM_TAGS_TO_WRITE) ? n : NUM_TAGS_TO_WRITE;
 	for (i = 1; i <= m; i++) {
-	    cp1 = HTRelative(HTList_objectAt(tagged, i - 1),
+	    cp1 = HTRelative((char *) HTList_objectAt(tagged, i - 1),
 			     (*cd ? cd : "file://localhost"));
 	    HTUnEscape(cp1);
 	    LYEntify(&cp1, TRUE);	/* _should_ do this everywhere... */
@@ -2412,7 +2412,7 @@ void clear_tags(void)
 {
     char *cp = NULL;
 
-    while ((cp = HTList_removeLastObject(tagged)) != NULL) {
+    while ((cp = (char *) HTList_removeLastObject(tagged)) != NULL) {
 	FREE(cp);
     }
     if (HTList_isEmpty(tagged))
@@ -2424,7 +2424,7 @@ void clear_tags(void)
  */
 void add_menu_item(char *str)
 {
-    struct dired_menu *new, *mp;
+    struct dired_menu *tmp, *mp;
     char *cp;
 
     /*
@@ -2433,9 +2433,9 @@ void add_menu_item(char *str)
     if (menu_head == defmenu)
 	menu_head = NULL;
 
-    new = typecalloc(struct dired_menu);
+    tmp = typecalloc(struct dired_menu);
 
-    if (new == NULL)
+    if (tmp == NULL)
 	outofmem(__FILE__, "add_menu_item");
 
     /*
@@ -2444,14 +2444,14 @@ void add_menu_item(char *str)
     cp = strchr(str, ':');
     *cp++ = '\0';
     if (strcasecomp(str, "tag") == 0) {
-	new->cond = DE_TAG;
+	tmp->cond = DE_TAG;
     } else if (strcasecomp(str, "dir") == 0) {
-	new->cond = DE_DIR;
+	tmp->cond = DE_DIR;
     } else if (strcasecomp(str, "file") == 0) {
-	new->cond = DE_FILE;
+	tmp->cond = DE_FILE;
 #ifdef S_IFLNK
     } else if (strcasecomp(str, "link") == 0) {
-	new->cond = DE_SYMLINK;
+	tmp->cond = DE_SYMLINK;
 #endif /* S_IFLNK */
     }
 
@@ -2461,25 +2461,25 @@ void add_menu_item(char *str)
     str = cp;
     cp = strchr(str, ':');
     *cp++ = '\0';
-    StrAllocCopy(new->sfx, str);
+    StrAllocCopy(tmp->sfx, str);
 
     str = cp;
     cp = strchr(str, ':');
     *cp++ = '\0';
-    StrAllocCopy(new->link, str);
+    StrAllocCopy(tmp->link, str);
 
     str = cp;
     cp = strchr(str, ':');
     *cp++ = '\0';
-    StrAllocCopy(new->rest, str);
+    StrAllocCopy(tmp->rest, str);
 
-    StrAllocCopy(new->href, cp);
+    StrAllocCopy(tmp->href, cp);
 
     if (menu_head) {
 	for (mp = menu_head; mp && mp->next != NULL; mp = mp->next) ;
-	mp->next = new;
+	mp->next = tmp;
     } else
-	menu_head = new;
+	menu_head = tmp;
 }
 
 void reset_dired_menu(void)
diff --git a/src/LYLocal.h b/src/LYLocal.h
index 9a1fc636..9a7fe240 100644
--- a/src/LYLocal.h
+++ b/src/LYLocal.h
@@ -1,31 +1,36 @@
 #ifndef LYLOCAL_H
 #define LYLOCAL_H
 
-#ifdef DIRED_SUPPORT
-
 #include <HTUtils.h>
+#include <LYStructs.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef DIRED_SUPPORT
 /* Special return code for LYMainLoop.c */
 #define PERMIT_FORM_RESULT (-99)
-
-extern int local_create(DocInfo *doc);
-extern int local_modify(DocInfo *doc, char **newpath);
-extern int local_remove(DocInfo *doc);
+    extern int local_create(DocInfo *doc);
+    extern int local_modify(DocInfo *doc, char **newpath);
+    extern int local_remove(DocInfo *doc);
 
 #ifdef OK_INSTALL
-extern BOOLEAN local_install(char *destpath, char *srcpath, char **newpath);
+    extern BOOLEAN local_install(char *destpath, char *srcpath, char **newpath);
 #endif
 
 /* MainLoop needs to know about this one for atexit cleanup */
-extern void clear_tags(void);
+    extern void clear_tags(void);
 
-extern int dired_options(DocInfo *doc, char **newfile);
-extern int local_dired(DocInfo *doc);
-extern void add_menu_item(char *str);
-extern void reset_dired_menu(void);
-extern void showtags(HTList *tag);
-extern void tagflag(int flag, int cur);
+    extern int dired_options(DocInfo *doc, char **newfile);
+    extern int local_dired(DocInfo *doc);
+    extern void add_menu_item(char *str);
+    extern void reset_dired_menu(void);
+    extern void showtags(HTList *tag);
+    extern void tagflag(int flag, int cur);
 
-#endif /* DIRED_SUPPORT */
+#endif				/* DIRED_SUPPORT */
 
-#endif /* LYLOCAL_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYLOCAL_H */
diff --git a/src/LYMail.h b/src/LYMail.h
index b9baf792..7e58bbf7 100644
--- a/src/LYMail.h
+++ b/src/LYMail.h
@@ -5,18 +5,19 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #ifdef SH_EX
 #define USE_BLAT_MAILER 1
 #else
 #define USE_BLAT_MAILER 0
 #endif
-
 #ifdef VMS
 #define USE_VMS_MAILER 1
 #else
 #define USE_VMS_MAILER 0
 #endif
-
 /*
  * Ifdef's in case we have a working popen/pclose, useful for piping to the
  * mail program.
@@ -26,28 +27,30 @@
 #else
 #define CAN_PIPE_TO_MAILER 1
 #endif
+    extern BOOLEAN term_letter;
 
-extern BOOLEAN term_letter;
+    extern BOOLEAN LYSystemMail(void);
+    extern BOOLEAN LYMailPMDF(void);
+    extern FILE *LYPipeToMailer(void);
+    extern int LYSendMailFile(char *the_address,
+			      char *the_filename,
+			      char *the_subject,
+			      char *the_ccaddr,
+			      char *message);
+    extern void mailform(const char *mailto_address,
+			 const char *mailto_subject,
+			 const char *mailto_content,
+			 const char *mailto_type);
+    extern void mailmsg(int cur,
+			char *owner_address,
+			char *filename,
+			char *linkname);
+    extern void reply_by_mail(char *mail_address,
+			      char *filename,
+			      const char *title,
+			      const char *refid);
 
-extern BOOLEAN LYSystemMail(void);
-extern BOOLEAN LYMailPMDF(void);
-extern FILE *LYPipeToMailer(void);
-extern int LYSendMailFile(char *the_address,
-			  char *the_filename,
-			  char *the_subject,
-			  char *the_ccaddr,
-			  char *message);
-extern void mailform(const char *mailto_address,
-		     const char *mailto_subject,
-		     const char *mailto_content,
-		     const char *mailto_type);
-extern void mailmsg(int cur,
-		    char *owner_address,
-		    char *filename,
-		    char *linkname);
-extern void reply_by_mail(char *mail_address,
-			  char *filename,
-			  const char *title,
-			  const char *refid);
-
-#endif /* LYMAIL_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYMAIL_H */
diff --git a/src/LYMain.c b/src/LYMain.c
index ef16071e..05b9b570 100644
--- a/src/LYMain.c
+++ b/src/LYMain.c
@@ -23,6 +23,7 @@
 #include <LYReadCFG.h>
 #include <LYrcFile.h>
 #include <LYKeymap.h>
+#include <HTForms.h>
 #include <LYList.h>
 #include <LYJump.h>
 #include <LYMainLoop.h>
@@ -601,6 +602,10 @@ static HTList *LYStdinArgs = NULL;
 #define EXTENDED_STARTFILE_RECALL 1
 #endif
 
+#if EXTENDED_STARTFILE_RECALL
+static char *nonoption = 0;
+#endif
+
 #ifndef OPTNAME_ALLOW_DASHES
 /* if set, then will allow dashes and underscores to be used interchangeable
    in commandline option's names - VH */
@@ -740,8 +745,10 @@ static void free_lynx_globals(void)
     FREE(proxyauth_info[0]);
     FREE(proxyauth_info[1]);
     FREE(lynxjumpfile);
+    FREE(ftp_lasthost);
     FREE(startrealm);
     FREE(personal_mail_address);
+    FREE(anonftp_password);
     FREE(URLDomainPrefixes);
     FREE(URLDomainSuffixes);
     FREE(XLoadImageCommand);
@@ -754,11 +761,13 @@ static void free_lynx_globals(void)
 #endif
     FREE(UCAssume_MIMEcharset);
     LYUIPages_free();
-    for (i = 0; i < nlinks; i++) {
-	FREE(links[i].lname);
-    }
+    LYFreeHilites(0, nlinks);
     nlinks = 0;
-    HTList_delete(LYcommandList());
+    LYFreeStringList(LYcommandList());
+    HTInitProgramPaths();
+#if EXTENDED_STARTFILE_RECALL
+    FREE(nonoption);
+#endif
 
     return;
 }
@@ -769,18 +778,8 @@ static void free_lynx_globals(void)
  */
 static void LYStdinArgs_free(void)
 {
-    char *argument;
-    HTList *cur = LYStdinArgs;
-
-    if (cur == NULL)
-	return;
-
-    while (NULL != (argument = (char *) HTList_nextObject(cur))) {
-	FREE(argument);
-    }
-    HTList_delete(LYStdinArgs);
+    LYFreeStringList(LYStdinArgs);
     LYStdinArgs = NULL;
-    return;
 }
 
 void reset_signals(void)
@@ -980,7 +979,7 @@ int main(int argc,
 
 #ifndef DISABLE_FTP
     /* malloc a sizeof(char) so 1st strcmp() won't dump in HTLoadFile() */
-    ftp_lasthost = calloc(1, sizeof(char));
+    ftp_lasthost = typecalloc(char);
 #endif
 
 #ifdef EXP_CHARSET_CHOICE
@@ -1386,7 +1385,9 @@ int main(int argc,
      */
     if ((cp = LYGetEnv("LYNX_TRACE_FILE")) == 0)
 	cp = TRACE_FILE;
-    LYAddPathToHome(LYTraceLogPath = malloc(LY_MAXPATH), LY_MAXPATH, cp);
+    LYTraceLogPath = typeMallocn(char, LY_MAXPATH);
+
+    LYAddPathToHome(LYTraceLogPath, LY_MAXPATH, cp);
 
     LYOpenTraceLog();
 
@@ -1674,7 +1675,9 @@ int main(int argc,
      */
     if (persistent_cookies) {
 	if (LYCookieFile == NULL) {
-	    LYAddPathToHome(LYCookieFile = malloc(LY_MAXPATH), LY_MAXPATH, COOKIE_FILE);
+	    LYCookieFile = typeMallocn(char, LY_MAXPATH);
+
+	    LYAddPathToHome(LYCookieFile, LY_MAXPATH, COOKIE_FILE);
 	} else {
 	    tildeExpand(&LYCookieFile, FALSE);
 	}
@@ -2141,9 +2144,6 @@ int main(int argc,
 	cleanup();
 #if defined(PDCURSES) && defined(PDC_BUILD) && PDC_BUILD >= 2401
 	if (!isendwin()) {
-	    extern int saved_scrsize_x;
-	    extern int saved_scrsize_y;
-
 	    if ((saved_scrsize_x != 0) && (saved_scrsize_y != 0)) {
 		resize_term(saved_scrsize_y, saved_scrsize_x);
 	    }
@@ -4066,7 +4066,6 @@ static BOOL parse_arg(char **argv,
     char *arg_name;
 
 #if EXTENDED_STARTFILE_RECALL
-    static char *nonoption = 0;
     static BOOLEAN no_options_further = FALSE;	/* set to TRUE after '--' argument */
 #endif
 
diff --git a/src/LYMainLoop.c b/src/LYMainLoop.c
index 0dfb8d33..e43a35ed 100644
--- a/src/LYMainLoop.c
+++ b/src/LYMainLoop.c
@@ -531,9 +531,14 @@ static BOOL set_curdoc_link(int nextlink)
 static void goto_line(int nextline)
 {
     int n;
+    int old_link = newdoc.link;
 
+    newdoc.link = 0;
     for (n = 0; n < nlinks; ++n) {
 	if (nextline == links[n].anchor_line_num + 1) {
+	    CTRACE((tfp, "top_of_screen %d\n", HText_getTopOfScreen() + 1));
+	    CTRACE((tfp, "goto_line(%d) -> link %d -> %d\n", nextline,
+		    old_link, n));
 	    newdoc.link = n;
 	    break;
 	}
@@ -705,7 +710,7 @@ static BOOL do_check_recall(int ch,
 			    char **old_user_input,
 			    int URLTotal,
 			    int *URLNum,
-			    int recall,
+			    RecallType recall,
 			    BOOLEAN *FirstURLRecall)
 {
     char *cp;
@@ -2829,7 +2834,7 @@ static void handle_LYK_FIRST_LINK(void)
 static BOOLEAN handle_LYK_GOTO(int *ch,
 			       char *user_input_buffer,
 			       char **old_user_input,
-			       int *recall,
+			       RecallType * recall,
 			       int *URLTotal,
 			       int *URLNum,
 			       BOOLEAN *FirstURLRecall,
@@ -3355,7 +3360,7 @@ static void handle_LYK_INSTALL(void)
 static BOOLEAN handle_LYK_JUMP(int c,
 			       char *user_input_buffer,
 			       char **old_user_input GCC_UNUSED,
-			       int *recall GCC_UNUSED,
+			       RecallType * recall GCC_UNUSED,
 			       BOOLEAN *FirstURLRecall GCC_UNUSED,
 			       int *URLNum GCC_UNUSED,
 			       int *URLTotal GCC_UNUSED,
@@ -3631,12 +3636,9 @@ static BOOLEAN handle_LYK_OPTIONS(int *cmd,
 	char *CurrentNegoLanguage = NULL;
 	char *CurrentNegoCharset = NULL;
 
-	StrAllocCopy(CurrentUserAgent, (LYUserAgent ?
-					LYUserAgent : ""));
-	StrAllocCopy(CurrentNegoLanguage, (language ?
-					   language : ""));
-	StrAllocCopy(CurrentNegoCharset, (pref_charset ?
-					  pref_charset : ""));
+	StrAllocCopy(CurrentUserAgent, NonNull(LYUserAgent));
+	StrAllocCopy(CurrentNegoLanguage, NonNull(language));
+	StrAllocCopy(CurrentNegoCharset, NonNull(pref_charset));
 
 	LYoptions(); /** do the old-style options stuff **/
 
@@ -3653,12 +3655,9 @@ static BOOLEAN handle_LYK_OPTIONS(int *cmd,
 	    verbose_img_flag != verbose_img ||
 	    LYUseDefaultRawMode_flag != LYUseDefaultRawMode ||
 	    LYSelectPopups_flag != LYSelectPopups ||
-	    ((strcmp(CurrentUserAgent, (LYUserAgent ?
-					LYUserAgent : "")) ||
-	      strcmp(CurrentNegoLanguage, (language ?
-					   language : "")) ||
-	      strcmp(CurrentNegoCharset, (pref_charset ?
-					  pref_charset : ""))) &&
+	    ((strcmp(CurrentUserAgent, NonNull(LYUserAgent)) ||
+	      strcmp(CurrentNegoLanguage, NonNull(language)) ||
+	      strcmp(CurrentNegoCharset, NonNull(pref_charset))) &&
 	     (!strncmp(curdoc.address, "http", 4) ||
 	      isLYNXCGI(curdoc.address)))) {
 
@@ -3678,8 +3677,7 @@ static BOOLEAN handle_LYK_OPTIONS(int *cmd,
 		HTInfoMsg(WILL_NOT_RELOAD_DOC);
 	    } else {
 		copy_address(&newdoc, &curdoc);
-		if (((strcmp(CurrentUserAgent, (LYUserAgent ?
-						LYUserAgent : "")) ||
+		if (((strcmp(CurrentUserAgent, NonNull(LYUserAgent)) ||
 		      strcmp(CurrentNegoLanguage, NonNull(language)) ||
 		      strcmp(CurrentNegoCharset, NonNull(pref_charset))) &&
 		     (strncmp(curdoc.address, "http", 4) == 0 ||
@@ -4956,7 +4954,7 @@ void handle_LYK_CHDIR(void)
     /* some people may prefer automatic clearing of the previous user input,
        here, to do this, just uncomment next line - VH */
     /* buf[0]='\0'; */
-    if (LYgetstr(buf, VISIBLE, sizeof(buf) - 1, 0) < 0 || !*buf) {
+    if (LYgetstr(buf, VISIBLE, sizeof(buf) - 1, NORECALL) < 0 || !*buf) {
 	HTInfoMsg(CANCELLED);
 	return;
     }
@@ -5140,7 +5138,10 @@ int mainloop(void)
 #define	BUFF_MAX	1024
     char sjis_buff[BUFF_MAX];
 #endif
-    int c = 0, real_c = 0, old_c = 0, pending_form_c = -1;
+    int c = 0;
+    int real_c = 0;
+    int old_c = 0;
+    int pending_form_c = -1;
     int cmd = LYK_DO_NOTHING, real_cmd = LYK_DO_NOTHING;
     int getresult;
     int arrowup = FALSE, show_help = FALSE;
@@ -5159,7 +5160,8 @@ int mainloop(void)
     char cfile[128];
     FILE *cfp;
     char *cp;
-    int ch, recall;
+    int ch;
+    RecallType recall;
     int URLTotal;
     int URLNum;
     BOOLEAN FirstURLRecall = TRUE;
@@ -5840,8 +5842,7 @@ int mainloop(void)
 		if (newdoc.address && curdoc.address &&
 		    isLYNXDOWNLOAD(newdoc.address)) {
 		    copy_address(&newdoc, &curdoc);
-		    StrAllocCopy(newdoc.title, (curdoc.title ?
-						curdoc.title : ""));
+		    StrAllocCopy(newdoc.title, NonNull(curdoc.title));
 		    StrAllocCopy(newdoc.bookmark, curdoc.bookmark);
 		    newdoc.line = curdoc.line;
 		    newdoc.link = curdoc.link;
@@ -6187,7 +6188,8 @@ int mainloop(void)
 	     * If more equals TRUE, then there is more info below this page.
 	     */
 	    more = HText_canScrollDown();
-	    goto_line(Newline);
+	    if (newdoc.link < 0)
+		goto_line(Newline);
 	    curdoc.line = Newline = HText_getTopOfScreen() + 1;
 
 	    if (curdoc.title == NULL) {
@@ -6240,6 +6242,8 @@ int mainloop(void)
 	    newdoc.line = 1;
 	    newdoc.link = 0;
 	    curdoc.line = Newline;	/* set */
+	} else if (newdoc.link < 0) {
+	    newdoc.link = 0;	/* ...just in case getfile set this */
 	}
 
 	/*
@@ -7458,16 +7462,8 @@ static int are_phys_different(DocInfo *doc1, DocInfo *doc2)
 #ifdef LY_FIND_LEAKS
 static void HTGotoURLs_free(void)
 {
-    char *url;
-    HTList *cur = Goto_URLs;
-
-    if (cur != 0) {
-	while (NULL != (url = (char *) HTList_nextObject(cur))) {
-	    FREE(url);
-	}
-	HTList_delete(Goto_URLs);
-	Goto_URLs = NULL;
-    }
+    LYFreeStringList(Goto_URLs);
+    Goto_URLs = NULL;
 }
 #endif
 
@@ -7779,7 +7775,5 @@ static void status_link(char *curlink_name,
 
 const char *LYDownLoadAddress(void)
 {
-    const char *s = newdoc.address ? newdoc.address : "";
-
-    return s;
+    return NonNull(newdoc.address);
 }
diff --git a/src/LYMainLoop.h b/src/LYMainLoop.h
index c1cef7c4..3c220ddf 100644
--- a/src/LYMainLoop.h
+++ b/src/LYMainLoop.h
@@ -5,23 +5,29 @@
 #include <HTUtils.h>
 #endif
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #ifdef DISP_PARTIAL
-extern BOOL LYMainLoop_pageDisplay(int line_num);
+    extern BOOL LYMainLoop_pageDisplay(int line_num);
 #endif
 
-extern BOOLEAN LYOpenTraceLog(void);
-extern const char *LYDownLoadAddress(void);
-extern int LYGetNewline(void);
-extern int mainloop(void);
-extern void HTAddGotoURL(char *url);
-extern void LYCloseTracelog(void);
-extern void LYSetNewline(int value);
-extern void handle_LYK_TRACE_TOGGLE(void);
-extern void handle_LYK_WHEREIS(int cmd, BOOLEAN *refresh_screen);
-extern void repaint_main_statusline(int for_what);
+    extern BOOLEAN LYOpenTraceLog(void);
+    extern const char *LYDownLoadAddress(void);
+    extern int LYGetNewline(void);
+    extern int mainloop(void);
+    extern void HTAddGotoURL(char *url);
+    extern void LYCloseTracelog(void);
+    extern void LYSetNewline(int value);
+    extern void handle_LYK_TRACE_TOGGLE(void);
+    extern void handle_LYK_WHEREIS(int cmd, BOOLEAN *refresh_screen);
+    extern void repaint_main_statusline(int for_what);
 
 #ifdef SUPPORT_CHDIR
-extern void handle_LYK_CHDIR(void);
+    extern void handle_LYK_CHDIR(void);
 #endif
 
-#endif /* LYMAINLOOP_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYMAINLOOP_H */
diff --git a/src/LYMap.c b/src/LYMap.c
index c401a27e..5b563b85 100644
--- a/src/LYMap.c
+++ b/src/LYMap.c
@@ -125,7 +125,7 @@ BOOL LYAddImageMap(char *address,
 		   char *title,
 		   HTParentAnchor *node_anchor)
 {
-    LYImageMap *new = NULL;
+    LYImageMap *tmp = NULL;
     LYImageMap *old = NULL;
     HTList *cur = NULL;
     HTList *theList = NULL;
@@ -189,17 +189,17 @@ BOOL LYAddImageMap(char *address,
 	}
     }
 
-    new = (old != NULL) ?
+    tmp = (old != NULL) ?
 	old : typecalloc(LYImageMap);
-    if (new == NULL) {
+    if (tmp == NULL) {
 	outofmem(__FILE__, "LYAddImageMap");
 	return FALSE;
     }
-    StrAllocCopy(new->address, address);
+    StrAllocCopy(tmp->address, address);
     if (non_empty(title))
-	StrAllocCopy(new->title, title);
-    if (new != old)
-	HTList_addObject(theList, new);
+	StrAllocCopy(tmp->title, title);
+    if (tmp != old)
+	HTList_addObject(theList, tmp);
     return TRUE;
 }
 
@@ -213,7 +213,7 @@ BOOL LYAddMapElement(char *map,
 		     HTParentAnchor *node_anchor,
 		     BOOL intern_flag GCC_UNUSED)
 {
-    LYMapElement *new = NULL;
+    LYMapElement *tmp = NULL;
     LYImageMap *theMap = NULL;
     HTList *theList = NULL;
     HTList *cur = NULL;
@@ -259,30 +259,30 @@ BOOL LYAddMapElement(char *map,
     if (!theMap->elements)
 	theMap->elements = HTList_new();
     cur = theMap->elements;
-    while (NULL != (new = (LYMapElement *) HTList_nextObject(cur))) {
-	if (!strcmp(new->address, address)) {
-	    FREE(new->address);
-	    FREE(new->title);
-	    HTList_removeObject(theMap->elements, new);
-	    FREE(new);
+    while (NULL != (tmp = (LYMapElement *) HTList_nextObject(cur))) {
+	if (!strcmp(tmp->address, address)) {
+	    FREE(tmp->address);
+	    FREE(tmp->title);
+	    HTList_removeObject(theMap->elements, tmp);
+	    FREE(tmp);
 	    break;
 	}
     }
 
-    new = typecalloc(LYMapElement);
-    if (new == NULL) {
+    tmp = typecalloc(LYMapElement);
+    if (tmp == NULL) {
 	perror("Out of memory in LYAddMapElement");
 	return FALSE;
     }
-    StrAllocCopy(new->address, address);
+    StrAllocCopy(tmp->address, address);
     if (non_empty(title))
-	StrAllocCopy(new->title, title);
+	StrAllocCopy(tmp->title, title);
     else
-	StrAllocCopy(new->title, address);
+	StrAllocCopy(tmp->title, address);
 #ifndef DONT_TRACK_INTERNAL_LINKS
-    new->intern_flag = intern_flag;
+    tmp->intern_flag = intern_flag;
 #endif
-    HTList_appendObject(theMap->elements, new);
+    HTList_appendObject(theMap->elements, tmp);
     return TRUE;
 }
 
@@ -394,7 +394,7 @@ static int LYLoadIMGmap(const char *arg,
     HTFormat format_in = WWW_HTML;
     HTStream *target = NULL;
     char *buf = NULL;
-    LYMapElement *new = NULL;
+    LYMapElement *tmp = NULL;
     LYImageMap *theMap = NULL;
     char *MapTitle = NULL;
     char *MapAddress = NULL;
@@ -571,18 +571,18 @@ static int LYLoadIMGmap(const char *arg,
 					"ol" : "ul"));
     PUTS(buf);
     cur = theMap->elements;
-    while (NULL != (new = (LYMapElement *) HTList_nextObject(cur))) {
-	StrAllocCopy(MapAddress, new->address);
+    while (NULL != (tmp = (LYMapElement *) HTList_nextObject(cur))) {
+	StrAllocCopy(MapAddress, tmp->address);
 	LYEntify(&MapAddress, FALSE);
 	PUTS("<li><a href=\"");
 	PUTS(MapAddress);
 	PUTS("\"");
 #ifndef DONT_TRACK_INTERNAL_LINKS
-	if (new->intern_flag)
+	if (tmp->intern_flag)
 	    PUTS(" TYPE=\"internal link\"");
 #endif
 	PUTS("\n>");
-	LYformTitle(&MapTitle, new->title);
+	LYformTitle(&MapTitle, tmp->title);
 	LYEntify(&MapTitle, TRUE);
 	PUTS(MapTitle);
 	PUTS("</a>\n");
diff --git a/src/LYMap.h b/src/LYMap.h
index 1f5ddabb..bd16ad8b 100644
--- a/src/LYMap.h
+++ b/src/LYMap.h
@@ -8,14 +8,20 @@
 #include <HTList.h>
 #include <HTAnchor.h>
 
-extern BOOL LYMapsOnly;
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOL LYMapsOnly;
 
-extern void ImageMapList_free(HTList *list);
-extern BOOL LYAddImageMap(char *address, char *title,
-			  HTParentAnchor *node_anchor);
-extern BOOL LYAddMapElement(char *map, char *address, char *title,
-			    HTParentAnchor *node_anchor,
-			    BOOL intern_flag);
-extern BOOL LYHaveImageMap(char *address);
+    extern void ImageMapList_free(HTList *list);
+    extern BOOL LYAddImageMap(char *address, char *title,
+			      HTParentAnchor *node_anchor);
+    extern BOOL LYAddMapElement(char *map, char *address, char *title,
+				HTParentAnchor *node_anchor,
+				BOOL intern_flag);
+    extern BOOL LYHaveImageMap(char *address);
 
-#endif /* LYMAP_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYMAP_H */
diff --git a/src/LYNews.h b/src/LYNews.h
index 4f19ef85..780f8fa6 100644
--- a/src/LYNews.h
+++ b/src/LYNews.h
@@ -5,8 +5,14 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
-extern BOOLEAN term_message;
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOLEAN term_message;
 
-extern char *LYNewsPost(char *newsgroups, BOOLEAN followup);
+    extern char *LYNewsPost(char *newsgroups, BOOLEAN followup);
 
-#endif /* LYNEWSPOST_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYNEWSPOST_H */
diff --git a/src/LYOptions.c b/src/LYOptions.c
index 3ab09f00..ff309b27 100644
--- a/src/LYOptions.c
+++ b/src/LYOptions.c
@@ -2522,7 +2522,7 @@ static PostPair *break_data(bstring *data)
 	 * Like I said, screw efficiency.  Sides, realloc is fast on
 	 * Linux ;->
 	 */
-	q = realloc(q, sizeof(PostPair) * (count + 1));
+	q = typeRealloc(PostPair, q, count + 1);
 	if (q == NULL)
 	    outofmem(__FILE__, "break_data(realloc)");
 	q[count].tag = NULL;
@@ -3237,7 +3237,7 @@ static char *NewSecureValue(void)
     static char oops[] = "?";
 
     FREE(secure_value);
-    if ((secure_value = malloc(80)) != 0) {
+    if ((secure_value = typeMallocn(char, 80)) != 0) {
 #if defined(RAND_MAX)
 	long key = lynx_rand();
 
diff --git a/src/LYOptions.h b/src/LYOptions.h
index 04b8b18e..2e402613 100644
--- a/src/LYOptions.h
+++ b/src/LYOptions.h
@@ -4,28 +4,34 @@
 #include <LYStructs.h>
 #include <LYStrings.h>
 
-extern BOOLEAN term_options;	/* for LYgetstr() */
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOLEAN term_options;	/* for LYgetstr() */
 
-extern BOOLEAN LYCheckUserAgent(void);
-extern void edit_bookmarks(void);
-extern int popup_choice(int cur_choice,
-			int line,
-			int column,
-			const char **choices,
-			int length,
-			int disabled,
-			BOOLEAN mouse);
+    extern BOOLEAN LYCheckUserAgent(void);
+    extern void edit_bookmarks(void);
+    extern int popup_choice(int cur_choice,
+			    int line,
+			    int column,
+			    const char **choices,
+			    int length,
+			    int disabled,
+			    BOOLEAN mouse);
 
 #define LYChoosePopup(cur, line, column, choices, length, disabled, mouse) \
 	popup_choice(cur, line, column, (const char **)choices, length, disabled, mouse)
 
 #ifndef NO_OPTION_FORMS
-extern void LYMenuVisitedLinks(FILE *fp0, int disable_all);
-extern int postoptions(DocInfo *newdoc);
-#endif /* !NO_OPTION_FORMS */
+    extern void LYMenuVisitedLinks(FILE *fp0, int disable_all);
+    extern int postoptions(DocInfo *newdoc);
+#endif				/* !NO_OPTION_FORMS */
 
 #ifndef NO_OPTION_MENU
-extern void LYoptions(void);
-#endif /* !NO_OPTION_MENU */
+    extern void LYoptions(void);
+#endif				/* !NO_OPTION_MENU */
 
-#endif /* LYOPTIONS_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYOPTIONS_H */
diff --git a/src/LYPrettySrc.c b/src/LYPrettySrc.c
index d4a46304..988a1ab6 100644
--- a/src/LYPrettySrc.c
+++ b/src/LYPrettySrc.c
@@ -106,7 +106,7 @@ static void append_close_tag(char *tagname,
     }
 
     subj = typecalloc(HT_tagspec);
-    subj->element = idx;
+    subj->element = (HTMLElement) idx;
     subj->present = typecallocn(BOOL, nattr);
     subj->value = typecallocn(char *, nattr);
 
@@ -335,7 +335,7 @@ void html_src_clean_data(void)
     int i;
 
     for (i = 0; i < HTL_num_lexemes; ++i)
-	html_src_clean_item(i);
+	html_src_clean_item((HTlexeme) i);
 }
 
 void html_src_on_lynxcfg_reload(void)
@@ -361,12 +361,13 @@ void HTMLSRC_init_caches(BOOL dont_exit)
 
 	if ((p = strchr(buf, ':')) != 0)
 	    *p = '\0';
-	if (html_src_parse_tagspec(buf, i, FALSE, TRUE) && !dont_exit) {
+	if (html_src_parse_tagspec(buf, (HTlexeme) i, FALSE, TRUE) && !dont_exit) {
 	    fprintf(stderr,
 		    "internal error while caching 1st tagspec of %d lexeme", i);
 	    exit_immediately(EXIT_FAILURE);
 	}
-	if (html_src_parse_tagspec(p ? p + 1 : NULL, i, FALSE, FALSE) && !dont_exit) {
+	if (html_src_parse_tagspec(p ? p + 1 : NULL, (HTlexeme) i, FALSE,
+				   FALSE) && !dont_exit) {
 	    fprintf(stderr,
 		    "internal error while caching 2nd tagspec of %d lexeme", i);
 	    exit_immediately(EXIT_FAILURE);
diff --git a/src/LYPrettySrc.h b/src/LYPrettySrc.h
index f12fe26d..9886a49d 100644
--- a/src/LYPrettySrc.h
+++ b/src/LYPrettySrc.h
@@ -5,79 +5,85 @@
 
 #include <HTMLDTD.h>
 
-extern BOOL psrc_convert_string;
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOL psrc_convert_string;
 
- /*whether HTML_put_string should convert string passed with 
-    TRANSLATE_AND_UNESCAPE_TO_STD */
-extern BOOL psrc_view;
-extern BOOL LYpsrc;
+    /*whether HTML_put_string should convert string passed with 
+       TRANSLATE_AND_UNESCAPE_TO_STD */
+    extern BOOL psrc_view;
+    extern BOOL LYpsrc;
 
 /*
  * This is used for tracking down whether the SGML engine was initialized
  * ==TRUE if yes.  It's value is meaningful if psrc_view = TRUE
  */
-extern BOOL sgml_in_psrc_was_initialized;
+    extern BOOL sgml_in_psrc_was_initialized;
 
-extern BOOL psrc_nested_call;	/* this is used when distinguishing whether 
+    extern BOOL psrc_nested_call;	/* this is used when distinguishing whether 
 
-				   the current call is nested or not in HTML.c HTML_{start,end}_element.
-				   It ==FALSE if psrc_view==FALSE || sgml_in_psrc_was_initialized==TRUE */
+					   the current call is nested or not in HTML.c HTML_{start,end}_element.
+					   It ==FALSE if psrc_view==FALSE || sgml_in_psrc_was_initialized==TRUE */
 
-extern BOOL psrc_first_tag;	/* this is also used in HTML.c to trigger the 
+    extern BOOL psrc_first_tag;	/* this is also used in HTML.c to trigger the 
 
 				   1st tag to preform special.
 				 */
 
-extern BOOL mark_htext_as_source;
+    extern BOOL mark_htext_as_source;
 
 /* here is a list of lexeme codes. */
-typedef enum {
-    HTL_comm = 0,
-    HTL_tag,
-    HTL_attrib,
-    HTL_attrval,
-    HTL_abracket,
-    HTL_entity,
-    HTL_href,
-    HTL_entire,
-    HTL_badseq,
-    HTL_badtag,
-    HTL_badattr,
-    HTL_sgmlspecial,
-    HTL_num_lexemes
-} HTlexeme;
-
-typedef struct _HT_tagspec {
-    struct _HT_tagspec *next;	/* 0 at the last */
+    typedef enum {
+	HTL_comm = 0,
+	HTL_tag,
+	HTL_attrib,
+	HTL_attrval,
+	HTL_abracket,
+	HTL_entity,
+	HTL_href,
+	HTL_entire,
+	HTL_badseq,
+	HTL_badtag,
+	HTL_badattr,
+	HTL_sgmlspecial,
+	HTL_num_lexemes
+    } HTlexeme;
+
+    typedef struct _HT_tagspec {
+	struct _HT_tagspec *next;	/* 0 at the last */
 #ifdef USE_COLOR_STYLE
-    int style;			/* precalculated value of the style */
-    char *class_name;
+	int style;		/* precalculated value of the style */
+	char *class_name;
 #endif
-    /* these will be passed to HTML_start_element */
-    HTMLElement element;
-    BOOL *present;
-    char **value;
+	/* these will be passed to HTML_start_element */
+	HTMLElement element;
+	BOOL *present;
+	char **value;
 
-    BOOL start;			/* if true, then this starts element, otherwise - ends */
-} HT_tagspec;
+	BOOL start;		/* if true, then this starts element, otherwise - ends */
+    } HT_tagspec;
 
-extern char *HTL_tagspecs[HTL_num_lexemes];
-extern HT_tagspec *lexeme_start[HTL_num_lexemes];
-extern HT_tagspec *lexeme_end[HTL_num_lexemes];
+    extern char *HTL_tagspecs[HTL_num_lexemes];
+    extern HT_tagspec *lexeme_start[HTL_num_lexemes];
+    extern HT_tagspec *lexeme_end[HTL_num_lexemes];
 
-extern int html_src_parse_tagspec(char *ts, HTlexeme lexeme,
-				  BOOL checkonly, BOOL isstart);
-extern void HTMLSRC_init_caches(BOOL dont_exit);
-extern void html_src_clean_item(HTlexeme l);
-extern void html_src_clean_data(void);
-extern void html_src_on_lynxcfg_reload(void);
+    extern int html_src_parse_tagspec(char *ts, HTlexeme lexeme,
+				      BOOL checkonly, BOOL isstart);
+    extern void HTMLSRC_init_caches(BOOL dont_exit);
+    extern void html_src_clean_item(HTlexeme l);
+    extern void html_src_clean_data(void);
+    extern void html_src_on_lynxcfg_reload(void);
 
 /* these 2 vars tell what kind of transform should be appiled to tag names
   and attribute names. 0 - lowercase, 1 - as is, 2 uppercase. */
-extern int tagname_transform;
-extern int attrname_transform;
+    extern int tagname_transform;
+    extern int attrname_transform;
 
-extern BOOL psrcview_no_anchor_numbering;
-#endif /* ifdef USE_PRETTYSRC */
+    extern BOOL psrcview_no_anchor_numbering;
 
-#endif /* LYPrettySrc_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* ifdef USE_PRETTYSRC */
+#endif				/* LYPrettySrc_H */
diff --git a/src/LYPrint.c b/src/LYPrint.c
index a547d06d..06ea81c7 100644
--- a/src/LYPrint.c
+++ b/src/LYPrint.c
@@ -178,7 +178,7 @@ static int RecallFilename(char *filename,
 {
     int ch;
     char *cp;
-    int recall;
+    RecallType recall;
 
     /*
      * Set up the sug_filenames recall buffer.
diff --git a/src/LYPrint.h b/src/LYPrint.h
index 02f98e28..645b8749 100644
--- a/src/LYPrint.h
+++ b/src/LYPrint.h
@@ -5,10 +5,16 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
-extern int printfile(DocInfo *newdoc);
-extern int print_options(char **newfile,
-			 const char *printed_url,
-			 int lines_in_file);
-extern char *GetFileName(void);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern int printfile(DocInfo *newdoc);
+    extern int print_options(char **newfile,
+			     const char *printed_url,
+			     int lines_in_file);
+    extern char *GetFileName(void);
 
-#endif /* LYPRINT_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYPRINT_H */
diff --git a/src/LYReadCFG.c b/src/LYReadCFG.c
index 2f939a42..a6a8f384 100644
--- a/src/LYReadCFG.c
+++ b/src/LYReadCFG.c
@@ -426,10 +426,10 @@ static Config_Enum tbl_abort_source_cache[] = {
 #define PARSE_FUN(n,v)   {n, CONF_FUN,         UNION_FUN(v), 0}
 #define PARSE_REQ(n,v)   {n, CONF_INCLUDE,     UNION_FUN(v), 0}
 #define PARSE_DEF(n,v)   {n, CONF_ADD_TRUSTED, UNION_DEF(v), 0}
-#define PARSE_NIL        {NULL,0,              UNION_DEF(0), 0}
+#define PARSE_NIL        {NULL, CONF_NIL,      UNION_DEF(0), 0}
 
 typedef enum {
-    CONF_UNSPECIFIED = 0
+    CONF_NIL = 0
     ,CONF_BOOL			/* BOOLEAN type */
     ,CONF_FUN
     ,CONF_TIME
@@ -1150,7 +1150,7 @@ static int psrcspec_fun(char *s)
 		s, e + 1));
 	return 0;
     }
-    parse_html_src_spec(found, e + 1, s);
+    parse_html_src_spec((HTlexeme) found, e + 1, s);
     return 0;
 }
 
@@ -1747,7 +1747,7 @@ void LYSetConfigValue(char *name,
 
     case CONF_PRG:
 	if (StrAllocCopy(temp, value))
-	    HTSetProgramPath(q->def_value, temp);
+	    HTSetProgramPath((ProgramPaths) (q->def_value), temp);
 	break;
 
     default:
@@ -1878,7 +1878,7 @@ static void do_read_cfg(const char *cfg_filename,
 
 	q = ParseUnionOf(tbl);
 	switch ((fp0 != 0 && tbl->type != CONF_INCLUDE)
-		? CONF_UNSPECIFIED
+		? CONF_NIL
 		: tbl->type) {
 	case CONF_BOOL:
 	case CONF_FUN:
diff --git a/src/LYReadCFG.h b/src/LYReadCFG.h
index 7853904a..bbdcf5c3 100644
--- a/src/LYReadCFG.h
+++ b/src/LYReadCFG.h
@@ -5,12 +5,13 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #if defined(USE_COLOR_STYLE) || defined(USE_COLOR_TABLE)
-
 #define DEFAULT_COLOR -1
 #define NO_COLOR      -2
 #define ERR_COLOR     -3
-
 /* Note: the sense of colors that Lynx uses for defaults is the reverse of
  * the standard for color-curses.
  */
@@ -35,35 +36,38 @@
 #  define DEFAULT_FG COLOR_BLACK
 #  define DEFAULT_BG COLOR_WHITE
 # endif
-#endif /* USE_DEFAULT_COLORS */
-
-extern int default_fg;
-extern int default_bg;
-extern BOOL default_color_reset;
+#endif				/* USE_DEFAULT_COLORS */
+    extern int default_fg;
+    extern int default_bg;
+    extern BOOL default_color_reset;
 
 #if defined(HAVE_USE_DEFAULT_COLORS) && defined(USE_DEFAULT_COLORS)
-extern int lynx_default_colors(void);
+    extern int lynx_default_colors(void);
 #endif
 
-extern int check_color(char *color, int the_default);
-extern const char *lookup_color(int code);
+    extern int check_color(char *color, int the_default);
+    extern const char *lookup_color(int code);
 #endif
 
-extern void read_cfg(const char *cfg_filename,
-		     const char *parent_filename,
-		     int nesting_level,
-		     FILE *fp0);
-extern void free_lynx_cfg(void);
-extern BOOLEAN have_read_cfg;
+    extern void read_cfg(const char *cfg_filename,
+			 const char *parent_filename,
+			 int nesting_level,
+			 FILE *fp0);
+    extern void free_lynx_cfg(void);
+    extern BOOLEAN have_read_cfg;
 
-extern FILE *LYOpenCFG(const char *cfg_filename, const char *parent_filename, const char *dft_filename);
-extern int lynx_cfg_infopage(DocInfo *newdoc);
-extern int lynx_compile_opts(DocInfo *newdoc);
-extern int match_item_by_name(lynx_list_item_type *ptr, char *name, BOOLEAN only_overriders);
-extern lynx_list_item_type *find_item_by_number(lynx_list_item_type *
-						list_ptr,
-						char *number);
-extern void reload_read_cfg(void);	/* implemented in LYMain.c */
-extern void LYSetConfigValue(char *name, char *value);
+    extern FILE *LYOpenCFG(const char *cfg_filename, const char
+			   *parent_filename, const char *dft_filename);
+    extern int lynx_cfg_infopage(DocInfo *newdoc);
+    extern int lynx_compile_opts(DocInfo *newdoc);
+    extern int match_item_by_name(lynx_list_item_type *ptr, char *name, BOOLEAN only_overriders);
+    extern lynx_list_item_type *find_item_by_number(lynx_list_item_type *
+						    list_ptr,
+						    char *number);
+    extern void reload_read_cfg(void);	/* implemented in LYMain.c */
+    extern void LYSetConfigValue(char *name, char *value);
 
-#endif /* LYREADCFG_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYREADCFG_H */
diff --git a/src/LYSearch.c b/src/LYSearch.c
index 8bf4ad27..01fdc8ac 100644
--- a/src/LYSearch.c
+++ b/src/LYSearch.c
@@ -158,7 +158,8 @@ BOOL textsearch(DocInfo *cur_doc, char *prev_target,
     static char prev_target_buffer[512];	/* Search string buffer */
     static BOOL first = TRUE;
     char *cp;
-    int ch = 0, recall;
+    int ch = 0;
+    RecallType recall;
     int QueryTotal;
     int QueryNum;
     BOOLEAN FirstRecall = TRUE;
diff --git a/src/LYSearch.h b/src/LYSearch.h
index 55118157..f9763301 100644
--- a/src/LYSearch.h
+++ b/src/LYSearch.h
@@ -1,4 +1,3 @@
-
 #ifndef LYSEARCH_H
 #define LYSEARCH_H
 
@@ -6,16 +5,22 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCT_H */
 
-extern BOOL textsearch(DocInfo *cur_doc,
-		       char *prev_target,
-		       int target_size,
-		       int direction);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOL textsearch(DocInfo *cur_doc,
+			   char *prev_target,
+			   int target_size,
+			   int direction);
 
 #define IN_FILE 1
 #define IN_LINKS 2
 
 #ifndef NOT_FOUND
 #define NOT_FOUND 0
-#endif /* NOT_FOUND */
+#endif				/* NOT_FOUND */
 
-#endif /* LYSEARCH_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYSEARCH_H */
diff --git a/src/LYShowInfo.c b/src/LYShowInfo.c
index b545a756..5133be88 100644
--- a/src/LYShowInfo.c
+++ b/src/LYShowInfo.c
@@ -440,9 +440,7 @@ int LYShowInfo(DocInfo *doc,
 		}
 	    } else {
 		ADD_SS("URL:",
-		       (links[doc->link].lname
-			? links[doc->link].lname
-			: ""));
+		       NonNull(links[doc->link].lname));
 	    }
 	    END_DL();
 
diff --git a/src/LYShowInfo.h b/src/LYShowInfo.h
index 826821e0..443bff37 100644
--- a/src/LYShowInfo.h
+++ b/src/LYShowInfo.h
@@ -5,11 +5,17 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
-extern BOOL LYVersionIsRelease(void);
-extern const char *LYVersionStatus(void);
-extern const char *LYVersionDate(void);
-extern int LYShowInfo(DocInfo *doc,
-		      DocInfo *newdoc,
-		      char *owner_address);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOL LYVersionIsRelease(void);
+    extern const char *LYVersionStatus(void);
+    extern const char *LYVersionDate(void);
+    extern int LYShowInfo(DocInfo *doc,
+			  DocInfo *newdoc,
+			  char *owner_address);
 
-#endif /* LYSHOWINFO_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYSHOWINFO_H */
diff --git a/src/LYSignal.h b/src/LYSignal.h
index 95619457..ccb81021 100644
--- a/src/LYSignal.h
+++ b/src/LYSignal.h
@@ -1,26 +1,31 @@
-
 #ifndef LYSIGNAL_H
 #define LYSIGNAL_H
 
 #include <signal.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 #ifdef VMS
-extern void VMSsignal(int sig, void (*func) ());
+    extern void VMSsignal(int sig, void (*func) ());
 
 #ifdef signal
 #undef signal
-#endif /* signal */
+#endif				/* signal */
 #define signal(a,b) VMSsignal(a,b)	/* use LYCurses.c routines for interrupts */
-#endif /* VMS */
+#endif				/* VMS */
 
 #ifdef HAVE_SIGACTION
-typedef void LYSigHandlerFunc_t(int);
+    typedef void LYSigHandlerFunc_t(int);
 
 /* implementation in LYUtils.c */
-extern void LYExtSignal(int sig, LYSigHandlerFunc_t * handler);
+    extern void LYExtSignal(int sig, LYSigHandlerFunc_t * handler);
 
 #else
 #define LYExtSignal(sig,h) signal(sig, h)
 #endif
 
-#endif /* LYSIGNAL_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYSIGNAL_H */
diff --git a/src/LYStrings.c b/src/LYStrings.c
index 14897d65..ec12ea65 100644
--- a/src/LYStrings.c
+++ b/src/LYStrings.c
@@ -277,7 +277,7 @@ static HTList *whichRecall(RecallType recall)
  */
 static void LYRemoveFromCloset(HTList *list)
 {
-    char *data = HTList_removeFirstObject(list);
+    void *data = HTList_removeFirstObject(list);
 
     if (data != 0)
 	FREE(data);
@@ -305,7 +305,7 @@ static char *LYFindInCloset(RecallType recall, char *base)
     unsigned len = strlen(base);
 
     while (!HTList_isEmpty(list)) {
-	data = HTList_nextObject(list);
+	data = (char *) HTList_nextObject(list);
 	if (!strncmp(base, data, len))
 	    return (data);
     }
@@ -3724,7 +3724,7 @@ static char **sortedList(HTList *list, BOOL ignorecase)
 	outofmem(__FILE__, "sortedList");
 
     while (!HTList_isEmpty(list))
-	result[j++] = HTList_nextObject(list);
+	result[j++] = (char *) HTList_nextObject(list);
 
     if (count > 1) {
 	qsort((char *) result, count, sizeof(*result),
@@ -3879,7 +3879,8 @@ int LYhandlePopupList(int cur_choice,
     static char prev_target_buffer[MAX_LINE];	/* Next search buffer */
     static BOOL first = TRUE;
     char *cp;
-    int ch = 0, recall;
+    int ch = 0;
+    RecallType recall;
     int QueryTotal;
     int QueryNum;
     BOOLEAN FirstRecall = TRUE;
diff --git a/src/LYStrings.h b/src/LYStrings.h
index 290b5e25..5fca7a06 100644
--- a/src/LYStrings.h
+++ b/src/LYStrings.h
@@ -3,69 +3,72 @@
 
 #include <LYCurses.h>
 
-typedef enum {
-    NORECALL = 0
-    ,RECALL_URL
-    ,RECALL_CMD
-    ,RECALL_MAIL
-} RecallType;
+#ifdef __cplusplus
+extern "C" {
+#endif
+    typedef enum {
+	NORECALL = 0
+	,RECALL_URL
+	,RECALL_CMD
+	,RECALL_MAIL
+    } RecallType;
 
 #define is8bits(ch) (UCH(ch) >= 128)	/* isascii(ch) is not POSIX */
 
 /*  UPPER8(ch1,ch2) is an extension of (TOUPPER(ch1) - TOUPPER(ch2))  */
-extern int UPPER8(int ch1,
-		  int ch2);
-
-extern int get_mouse_link(void);
-extern int peek_mouse_link(void);
-extern int peek_mouse_levent(void);
-extern int fancy_mouse(WINDOW * win, int row, int *position);
-
-extern char *LYstrncpy(char *dst,
-		       const char *src,
-		       int n);
-extern void ena_csi(BOOLEAN flag);
-extern int get_popup_number(const char *msg,
-			    int *c,
-			    int *rel);
-extern int LYarrayLength(const char **list);
-extern int LYarrayWidth(const char **list);
-extern int LYgetch(void);
-extern int LYgetch_choice(void);
-extern int LYgetch_input(void);
-extern int LYgetch_single(void);
-extern int LYgetstr(char *inputline,
-		    int hidden,
-		    size_t bufsize,
-		    RecallType recall);
-extern char *LYstrsep(char **stringp,
-		      const char *delim);
-extern char *LYstrstr(char *chptr,
-		      const char *tarptr);
-extern char *LYmbcsstrncpy(char *dst,
+    extern int UPPER8(int ch1,
+		      int ch2);
+
+    extern int get_mouse_link(void);
+    extern int peek_mouse_link(void);
+    extern int peek_mouse_levent(void);
+    extern int fancy_mouse(WINDOW * win, int row, int *position);
+
+    extern char *LYstrncpy(char *dst,
 			   const char *src,
-			   int n_bytes,
-			   int n_glyphs,
-			   BOOL utf_flag);
-extern const char *LYmbcs_skip_glyphs(const char *data,
-				      int n_glyphs,
-				      BOOL utf_flag);
-extern int LYmbcsstrlen(const char *str,
-			BOOL utf_flag,
-			BOOL count_gcells);
-
-extern const char *LYno_attr_mbcs_strstr(const char *chptr,
-					 const char *tarptr,
-					 BOOL utf_flag,
-					 BOOL count_gcells,
-					 int *nstartp,
-					 int *nendp);
-extern const char *LYno_attr_mbcs_case_strstr(const char *chptr,
-					      const char *tarptr,
-					      BOOL utf_flag,
-					      BOOL count_gcells,
-					      int *nstartp,
-					      int *nendp);
+			   int n);
+    extern void ena_csi(BOOLEAN flag);
+    extern int get_popup_number(const char *msg,
+				int *c,
+				int *rel);
+    extern int LYarrayLength(const char **list);
+    extern int LYarrayWidth(const char **list);
+    extern int LYgetch(void);
+    extern int LYgetch_choice(void);
+    extern int LYgetch_input(void);
+    extern int LYgetch_single(void);
+    extern int LYgetstr(char *inputline,
+			int hidden,
+			size_t bufsize,
+			RecallType recall);
+    extern char *LYstrsep(char **stringp,
+			  const char *delim);
+    extern char *LYstrstr(char *chptr,
+			  const char *tarptr);
+    extern char *LYmbcsstrncpy(char *dst,
+			       const char *src,
+			       int n_bytes,
+			       int n_glyphs,
+			       BOOL utf_flag);
+    extern const char *LYmbcs_skip_glyphs(const char *data,
+					  int n_glyphs,
+					  BOOL utf_flag);
+    extern int LYmbcsstrlen(const char *str,
+			    BOOL utf_flag,
+			    BOOL count_gcells);
+
+    extern const char *LYno_attr_mbcs_strstr(const char *chptr,
+					     const char *tarptr,
+					     BOOL utf_flag,
+					     BOOL count_gcells,
+					     int *nstartp,
+					     int *nendp);
+    extern const char *LYno_attr_mbcs_case_strstr(const char *chptr,
+						  const char *tarptr,
+						  BOOL utf_flag,
+						  BOOL count_gcells,
+						  int *nstartp,
+						  int *nendp);
 
 #define non_empty(s) !isEmpty(s)
 
@@ -74,35 +77,35 @@ extern const char *LYno_attr_mbcs_case_strstr(const char *chptr,
 	    ? LYno_attr_mbcs_strstr(chptr, tarptr, utf_flag, count_gcells, nstartp, nendp) \
 	    : LYno_attr_mbcs_case_strstr(chptr, tarptr, utf_flag, count_gcells, nstartp, nendp))
 
-extern const char *LYno_attr_char_strstr(const char *chptr,
-					 const char *tarptr);
-extern const char *LYno_attr_char_case_strstr(const char *chptr,
-					      const char *tarptr);
+    extern const char *LYno_attr_char_strstr(const char *chptr,
+					     const char *tarptr);
+    extern const char *LYno_attr_char_case_strstr(const char *chptr,
+						  const char *tarptr);
 
 #define LYno_attr_strstr(chptr, tarptr) \
 	(case_sensitive \
 	? LYno_attr_char_strstr(chptr, tarptr) \
 	: LYno_attr_char_case_strstr(chptr, tarptr))
 
-extern char *SNACopy(char **dest,
-		     const char *src,
-		     int n);
-extern char *SNACat(char **dest,
-		    const char *src,
-		    int n);
+    extern char *SNACopy(char **dest,
+			 const char *src,
+			 int n);
+    extern char *SNACat(char **dest,
+			const char *src,
+			int n);
 
 #define StrnAllocCopy(dest, src, n)  SNACopy (&(dest), src, n)
 #define StrnAllocCat(dest, src, n)   SNACat  (&(dest), src, n)
 
-extern char *LYSafeGets(char **src, FILE *fp);
+    extern char *LYSafeGets(char **src, FILE *fp);
 
 #ifdef EXP_CMD_LOGGING
-extern BOOL LYHaveCmdScript(void);
-extern int LYReadCmdKey(int mode);
-extern void LYCloseCmdLogfile(void);
-extern void LYOpenCmdLogfile(int argc, char **argv);
-extern void LYOpenCmdScript(void);
-extern void LYWriteCmdKey(int ch);
+    extern BOOL LYHaveCmdScript(void);
+    extern int LYReadCmdKey(int mode);
+    extern void LYCloseCmdLogfile(void);
+    extern void LYOpenCmdLogfile(int argc, char **argv);
+    extern void LYOpenCmdScript(void);
+    extern void LYWriteCmdKey(int ch);
 
 #else
 #define LYHaveCmdScript() FALSE
@@ -182,91 +185,91 @@ extern void LYWriteCmdKey(int ch);
 
 /* EditFieldData preserves state between calls to LYEdit1
  */
-typedef struct _EditFieldData {
-
-    int sx;			/* Origin of editfield                       */
-    int sy;
-    int dspwdth;		/* Screen real estate for editting           */
-
-    int strlen;			/* Current size of string.                   */
-    int maxlen;			/* Max size of string, excluding zero at end */
-    char pad;			/* Right padding  typically ' ' or '_'       */
-    BOOL hidden;		/* Masked password entry flag                */
-
-    BOOL dirty;			/* accumulate refresh requests               */
-    BOOL panon;			/* Need horizontal scroll indicator          */
-    int xpan;			/* Horizontal scroll offset                  */
-    int pos;			/* Insertion point in string                 */
-    int margin;			/* Number of columns look-ahead/look-back    */
-    int current_modifiers;	/* Modifiers for next input lynxkeycode */
+    typedef struct _EditFieldData {
+
+	int sx;			/* Origin of editfield                       */
+	int sy;
+	int dspwdth;		/* Screen real estate for editting           */
+
+	int strlen;		/* Current size of string.                   */
+	int maxlen;		/* Max size of string, excluding zero at end */
+	char pad;		/* Right padding  typically ' ' or '_'       */
+	BOOL hidden;		/* Masked password entry flag                */
+
+	BOOL dirty;		/* accumulate refresh requests               */
+	BOOL panon;		/* Need horizontal scroll indicator          */
+	int xpan;		/* Horizontal scroll offset                  */
+	int pos;		/* Insertion point in string                 */
+	int margin;		/* Number of columns look-ahead/look-back    */
+	int current_modifiers;	/* Modifiers for next input lynxkeycode */
 #ifdef ENHANCED_LINEEDIT
-    int mark;			/* position of emacs-like mark, or -1-pos to denote
+	int mark;		/* position of emacs-like mark, or -1-pos to denote
 				   unactive mark.  */
 #endif
 
-    char buffer[1024];		/* String buffer                          */
+	char buffer[1024];	/* String buffer                          */
 
-} EditFieldData;
+    } EditFieldData;
 
 /* line-edit action encoding */
 
-typedef enum {
-    LYE_NOP = 0			/* Do Nothing            */
-    ,LYE_CHAR			/* Insert printable char */
-    ,LYE_ENTER			/* Input complete, return char/lynxkeycode */
-    ,LYE_TAB			/* Input complete, return TAB  */
-    ,LYE_STOP			/* Input complete, deactivate  */
-    ,LYE_ABORT			/* Input cancelled       */
+    typedef enum {
+	LYE_NOP = 0		/* Do Nothing            */
+	,LYE_CHAR		/* Insert printable char */
+	,LYE_ENTER		/* Input complete, return char/lynxkeycode */
+	,LYE_TAB		/* Input complete, return TAB  */
+	,LYE_STOP		/* Input complete, deactivate  */
+	,LYE_ABORT		/* Input cancelled       */
 
-    ,LYE_FORM_PASS		/* In form fields: input complete,
+	,LYE_FORM_PASS		/* In form fields: input complete,
 				   return char / lynxkeycode;
 				   Elsewhere: Do Nothing */
 
-    ,LYE_DELN			/* Delete next/curr char */
-    ,LYE_DELC			/* Obsolete (DELC case was equiv to DELN) */
-    ,LYE_DELP			/* Delete prev      char */
-    ,LYE_DELNW			/* Delete next word      */
-    ,LYE_DELPW			/* Delete prev word      */
+	,LYE_DELN		/* Delete next/curr char */
+	,LYE_DELC		/* Obsolete (DELC case was equiv to DELN) */
+	,LYE_DELP		/* Delete prev      char */
+	,LYE_DELNW		/* Delete next word      */
+	,LYE_DELPW		/* Delete prev word      */
 
-    ,LYE_ERASE			/* Erase the line        */
+	,LYE_ERASE		/* Erase the line        */
 
-    ,LYE_BOL			/* Go to begin of line   */
-    ,LYE_EOL			/* Go to end   of line   */
-    ,LYE_FORW			/* Cursor forwards       */
-    ,LYE_FORW_RL		/* Cursor forwards or right link */
-    ,LYE_BACK			/* Cursor backwards      */
-    ,LYE_BACK_LL		/* Cursor backwards or left link */
-    ,LYE_FORWW			/* Word forward          */
-    ,LYE_BACKW			/* Word back             */
+	,LYE_BOL		/* Go to begin of line   */
+	,LYE_EOL		/* Go to end   of line   */
+	,LYE_FORW		/* Cursor forwards       */
+	,LYE_FORW_RL		/* Cursor forwards or right link */
+	,LYE_BACK		/* Cursor backwards      */
+	,LYE_BACK_LL		/* Cursor backwards or left link */
+	,LYE_FORWW		/* Word forward          */
+	,LYE_BACKW		/* Word back             */
 
-    ,LYE_LOWER			/* Lower case the line   */
-    ,LYE_UPPER			/* Upper case the line   */
+	,LYE_LOWER		/* Lower case the line   */
+	,LYE_UPPER		/* Upper case the line   */
 
-    ,LYE_LKCMD			/* Invoke command prompt */
+	,LYE_LKCMD		/* Invoke command prompt */
 
-    ,LYE_AIX			/* Hex 97                */
+	,LYE_AIX		/* Hex 97                */
 
-    ,LYE_DELBL			/* Delete back to BOL    */
-    ,LYE_DELEL			/* Delete thru EOL       */
+	,LYE_DELBL		/* Delete back to BOL    */
+	,LYE_DELEL		/* Delete thru EOL       */
 
-    ,LYE_SWMAP			/* Switch input keymap   */
+	,LYE_SWMAP		/* Switch input keymap   */
 
-    ,LYE_TPOS			/* Transpose characters  */
+	,LYE_TPOS		/* Transpose characters  */
 
-    ,LYE_SETM1			/* Set modifier 1 flag   */
-    ,LYE_SETM2			/* Set modifier 2 flag   */
-    ,LYE_UNMOD			/* Fall back to no-modifier command */
+	,LYE_SETM1		/* Set modifier 1 flag   */
+	,LYE_SETM2		/* Set modifier 2 flag   */
+	,LYE_UNMOD		/* Fall back to no-modifier command */
 
-    ,LYE_C1CHAR			/* Insert C1 char if printable */
+	,LYE_C1CHAR		/* Insert C1 char if printable */
 
-    ,LYE_SETMARK		/* emacs-like set-mark-command */
-    ,LYE_XPMARK			/* emacs-like exchange-point-and-mark */
-    ,LYE_KILLREG		/* emacs-like kill-region */
-    ,LYE_YANK			/* emacs-like yank */
+	,LYE_SETMARK		/* emacs-like set-mark-command */
+	,LYE_XPMARK		/* emacs-like exchange-point-and-mark */
+	,LYE_KILLREG		/* emacs-like kill-region */
+	,LYE_YANK		/* emacs-like yank */
 #ifdef CAN_CUT_AND_PASTE
-    ,LYE_PASTE			/* ClipBoard to Lynx       */
+	,LYE_PASTE		/* ClipBoard to Lynx       */
 #endif
-} LYEditCodes;
+    } LYEditCodes;
 
 /* All preceding values must be within 0x00..0x7f - kw */
 
@@ -277,70 +280,73 @@ typedef enum {
 				   lower bits.  Doesn't fit in a char! */
 
 #if defined(USE_KEYMAPS)
-extern int lynx_initialize_keymaps(void);
-extern int map_string_to_keysym(const char *src, int *lec);
+    extern int lynx_initialize_keymaps(void);
+    extern int map_string_to_keysym(const char *src, int *lec);
 #endif
 
-extern char *LYElideString(char *str,
-			   int cut_pos);
-extern void LYEscapeStartfile(char **buffer);
-extern void LYLowerCase(char *buffer);
-extern void LYUpperCase(char *buffer);
-extern BOOLEAN LYRemoveNewlines(char *buffer);
-extern char *LYReduceBlanks(char *buffer);
-extern char *LYRemoveBlanks(char *buffer);
-extern char *LYSkipBlanks(char *buffer);
-extern char *LYSkipNonBlanks(char *buffer);
-extern const char *LYSkipCBlanks(const char *buffer);
-extern const char *LYSkipCNonBlanks(const char *buffer);
-extern void LYTrimLeading(char *buffer);
-extern char *LYTrimNewline(char *buffer);
-extern void LYTrimTrailing(char *buffer);
-extern void LYTrimAllStartfile(char *buffer);
-extern BOOLEAN LYTrimStartfile(char *buffer);
-extern void LYSetupEdit(EditFieldData *edit, char *old,
-			int maxstr,
-			int maxdsp);
-extern void LYRefreshEdit(EditFieldData *edit);
-extern int EditBinding(int ch);	/* in LYEditmap.c */
-extern BOOL LYRemapEditBinding(int xlkc,
-			       int lec,
-			       int select_edi);		/* in LYEditmap.c */
-extern int LYKeyForEditAction(int lec);		/* in LYEditmap.c */
-extern int LYEditKeyForAction(int lac, int *pmodkey);	/* LYEditmap.c */
-extern int LYEdit1(EditFieldData *edit, int ch,
-		   int action,
-		   BOOL maxMessage);
-extern void LYCloseCloset(RecallType recall);
-extern int LYhandlePopupList(int cur_choice,
-			     int ly,
-			     int lx,
-			     const char **choices,
-			     int width,
-			     int i_length,
-			     int disabled,
-			     BOOLEAN for_mouse,
-			     BOOLEAN numbered);
-
-typedef unsigned char LYEditCode;
-
-extern int current_lineedit;
-extern const char *LYLineeditNames[];
-extern LYEditCode *LYLineEditors[];
-extern const char *LYLineeditHelpURLs[];
-
-extern const char *LYLineeditHelpURL(void);
-
-extern int escape_bound;
+    extern char *LYElideString(char *str,
+			       int cut_pos);
+    extern void LYEscapeStartfile(char **buffer);
+    extern void LYLowerCase(char *buffer);
+    extern void LYUpperCase(char *buffer);
+    extern BOOLEAN LYRemoveNewlines(char *buffer);
+    extern char *LYReduceBlanks(char *buffer);
+    extern char *LYRemoveBlanks(char *buffer);
+    extern char *LYSkipBlanks(char *buffer);
+    extern char *LYSkipNonBlanks(char *buffer);
+    extern const char *LYSkipCBlanks(const char *buffer);
+    extern const char *LYSkipCNonBlanks(const char *buffer);
+    extern void LYTrimLeading(char *buffer);
+    extern char *LYTrimNewline(char *buffer);
+    extern void LYTrimTrailing(char *buffer);
+    extern void LYTrimAllStartfile(char *buffer);
+    extern BOOLEAN LYTrimStartfile(char *buffer);
+    extern void LYSetupEdit(EditFieldData *edit, char *old,
+			    int maxstr,
+			    int maxdsp);
+    extern void LYRefreshEdit(EditFieldData *edit);
+    extern int EditBinding(int ch);	/* in LYEditmap.c */
+    extern BOOL LYRemapEditBinding(int xlkc,
+				   int lec,
+				   int select_edi);	/* in LYEditmap.c */
+    extern int LYKeyForEditAction(int lec);	/* in LYEditmap.c */
+    extern int LYEditKeyForAction(int lac, int *pmodkey);	/* LYEditmap.c */
+    extern int LYEdit1(EditFieldData *edit, int ch,
+		       int action,
+		       BOOL maxMessage);
+    extern void LYCloseCloset(RecallType recall);
+    extern int LYhandlePopupList(int cur_choice,
+				 int ly,
+				 int lx,
+				 const char **choices,
+				 int width,
+				 int i_length,
+				 int disabled,
+				 BOOLEAN for_mouse,
+				 BOOLEAN numbered);
+
+    typedef unsigned char LYEditCode;
+
+    extern int current_lineedit;
+    extern const char *LYLineeditNames[];
+    extern LYEditCode *LYLineEditors[];
+    extern const char *LYLineeditHelpURLs[];
+
+    extern const char *LYLineeditHelpURL(void);
+
+    extern int escape_bound;
 
 #define LYLineEdit(e,c,m) LYEdit1(e, c, EditBinding(c) & ~LYE_DF, m)
 
 /* Dummy initializer for LYEditmap.c */
-extern int LYEditmapDeclared(void);
+    extern int LYEditmapDeclared(void);
 
-extern int LYEditInsert(EditFieldData *edit,
-			unsigned const char *s,
-			int len, int map_active,
-			BOOL maxMessage);
+    extern int LYEditInsert(EditFieldData *edit,
+			    unsigned const char *s,
+			    int len, int map_active,
+			    BOOL maxMessage);
 
-#endif /* LYSTRINGS_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYSTRINGS_H */
diff --git a/src/LYStructs.h b/src/LYStructs.h
index 361fc8af..4d604736 100644
--- a/src/LYStructs.h
+++ b/src/LYStructs.h
@@ -5,100 +5,99 @@
 #include <HTAnchor.h>
 #endif /* HTANCHOR_H */
 
-typedef struct {
-    char *hl_text;
-    short hl_x;
-} HiliteInfo;
-
-typedef struct {
-    HiliteInfo *hl_info;
-    HiliteInfo hl_base;
-    short hl_len;		/* number of strings in this struct */
-} HiliteList;
-
-typedef struct {
-    char *lname;
-    char *target;
-    char *l_hightext;
-    char *l_hightext2;
-    int l_hightext2_offset;
-    BOOL inUnderline;		/* TRUE when this link is in underlined context. */
-    int lx;
-    int ly;
-    int type;			/* Type of link, Forms, WWW, etc. */
-    int anchor_number;		/* The anchor number within the HText structure.  */
-    int anchor_line_num;	/* The anchor line number in the HText structure. */
-    HiliteList list;
-    struct _FormInfo *l_form;	/* Pointer to form info. */
-} LinkInfo;
-extern LinkInfo links[MAXLINKS];
-extern int nlinks;
-
-typedef struct {
-    /* FIXME: see DocAddress */
-    char *title;
-    char *address;
-    bstring *post_data;
-    char *post_content_type;
-    char *bookmark;
-    BOOL isHEAD;
-    BOOL safe;
-
-    int link;
-    int line;
-    BOOL internal_link;		/* whether doc was reached via an internal
+#ifdef __cplusplus
+extern "C" {
+#endif
+    typedef struct {
+	char *hl_text;
+	short hl_x;
+    } HiliteInfo;
+
+    typedef struct {
+	HiliteInfo *hl_info;
+	HiliteInfo hl_base;
+	short hl_len;		/* number of strings in this struct */
+    } HiliteList;
+
+    typedef struct {
+	char *lname;
+	char *target;
+	char *l_hightext;
+	char *l_hightext2;
+	int l_hightext2_offset;
+	BOOL inUnderline;	/* TRUE when this link is in underlined context. */
+	int lx;
+	int ly;
+	int type;		/* Type of link, Forms, WWW, etc. */
+	int anchor_number;	/* The anchor number within the HText structure.  */
+	int anchor_line_num;	/* The anchor line number in the HText structure. */
+	HiliteList list;
+	struct _FormInfo *l_form;	/* Pointer to form info. */
+    } LinkInfo;
+    extern LinkInfo links[MAXLINKS];
+    extern int nlinks;
+
+    typedef struct {
+	/* FIXME: see DocAddress */
+	char *title;
+	char *address;
+	bstring *post_data;
+	char *post_content_type;
+	char *bookmark;
+	BOOL isHEAD;
+	BOOL safe;
+
+	int link;
+	int line;
+	BOOL internal_link;	/* whether doc was reached via an internal
 				   (fragment) link. - kw */
 #ifdef USE_COLOR_STYLE
-    char *style;
+	char *style;
 #endif
-} DocInfo;
-
-#ifndef HTFORMS_H
-#include <HTForms.h>
-#endif /* HTFORMS_H */
+    } DocInfo;
 
-typedef struct {
-    DocInfo hdoc;
-    int intern_seq_start;	/* indicates which element on the history
+    typedef struct {
+	DocInfo hdoc;
+	int intern_seq_start;	/* indicates which element on the history
 				   is the start of this sequence of
 				   "internal links", otherwise -1 */
-} HistInfo;
+    } HistInfo;
 
 #define HDOC(n) history[n].hdoc
 
-extern int Visited_Links_As;
+    extern int Visited_Links_As;
 
 #define VISITED_LINKS_AS_FIRST_V 0
 #define VISITED_LINKS_AS_TREE    1
 #define VISITED_LINKS_AS_LATEST  2
 #define VISITED_LINKS_REVERSE    4
 
-typedef struct _VisitedLink {
-    char *title;
-    char *address;
-    int level;
-    struct _VisitedLink *next_tree;
-    struct _VisitedLink *prev_latest;
-    struct _VisitedLink *next_latest;
-    struct _VisitedLink *prev_first;
-} VisitedLink;
+    typedef struct _VisitedLink {
+	char *title;
+	char *address;
+	int level;
+	struct _VisitedLink *next_tree;
+	struct _VisitedLink *prev_latest;
+	struct _VisitedLink *next_latest;
+	struct _VisitedLink *prev_first;
+    } VisitedLink;
 
-extern HistInfo *history;
-extern int nhist;
-extern int size_history;
+    extern HistInfo *history;
+    extern int nhist;
+    extern int size_history;
 
 /******************************************************************************/
 
-typedef struct _lynx_list_item_type {
-    struct _lynx_list_item_type *next;	/* the next item in the linked list */
-    char *name;			/* a description of the item */
-    char *command;		/* the command to execute */
-    int always_enabled;		/* a constant to tell whether or
+    typedef struct _lynx_list_item_type {
+	struct _lynx_list_item_type *next;	/* the next item in the linked list */
+	char *name;		/* a description of the item */
+	char *command;		/* the command to execute */
+	int always_enabled;	/* a constant to tell whether or
 				 * not to disable the printer
 				 * when the no_print option is on
 				 */
-    /* HTML lists: */
-    BOOL override_primary_action;	/* whether primary action will be
+	/* HTML lists: */
+	BOOL override_primary_action;	/* whether primary action will be
 					 * overridden by this - e.g. this
 					 * allows invoking user's MUA when
 					 * mailto:  link is activated using
@@ -106,33 +105,33 @@ typedef struct _lynx_list_item_type {
 					 * field is only examined by code that
 					 * handles EXTERNAL command.
 					 */
-    /* PRINTER lists: */
-    int pagelen;		/* an integer to store the printer's
+	/* PRINTER lists: */
+	int pagelen;		/* an integer to store the printer's
 				 * page length
 				 */
-} lynx_list_item_type;
+    } lynx_list_item_type;
 
-extern lynx_list_item_type *printers;
+    extern lynx_list_item_type *printers;
 
 /* for download commands */
-extern lynx_list_item_type *downloaders;
+    extern lynx_list_item_type *downloaders;
 
 /* for upload commands */
-extern lynx_list_item_type *uploaders;
+    extern lynx_list_item_type *uploaders;
 
 #ifdef USE_EXTERNALS
 /* for external commands */
-extern lynx_list_item_type *externals;
+    extern lynx_list_item_type *externals;
 #endif
 
 /******************************************************************************/
 
-typedef struct {
-    const char *name;
-    int value;
-} Config_Enum;
+    typedef struct {
+	const char *name;
+	int value;
+    } Config_Enum;
 
-typedef int (*ParseFunc) (char *);
+    typedef int (*ParseFunc) (char *);
 
 #define ParseUnionMembers \
 	lynx_list_item_type** add_value; \
@@ -142,9 +141,9 @@ typedef int (*ParseFunc) (char *);
 	ParseFunc fun_value; \
 	long	  def_value
 
-typedef union {
-    ParseUnionMembers;
-} ParseUnion;
+    typedef union {
+	ParseUnionMembers;
+    } ParseUnion;
 
 #ifdef	PARSE_DEBUG
 #define ParseUnionPtr Config_Type *
@@ -170,4 +169,7 @@ typedef union {
 #define UNION_DEF(v) (long) (v)
 #endif
 
-#endif /* LYSTRUCTS_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYSTRUCTS_H */
diff --git a/src/LYStyle.c b/src/LYStyle.c
index 0ea3bc41..6e8743bf 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.58 Thu, 30 Dec 2004 04:11:59 -0800 dickey @
+ * @Id: LYStyle.c 1.59 Sun, 02 Jan 2005 15:35:21 -0800 dickey @
  */
 #include <HTUtils.h>
 #include <HTML.h>
@@ -441,7 +441,7 @@ void parse_userstyles(void)
     if (HTList_isEmpty(cur)) {
 	initialise_default_stylesheet();
     } else {
-	while ((name = HTList_nextObject(cur)) != NULL) {
+	while ((name = (char *) HTList_nextObject(cur)) != NULL) {
 	    CTRACE2(TRACE_STYLE, (tfp, "LSS:%s\n",
 				  (name
 				   ? name
@@ -499,11 +499,7 @@ static void HStyle_addStyle(char *buffer)
 
 void style_deleteStyleList(void)
 {
-    char *name;
-
-    while ((name = HTList_removeLastObject(lss_styles)) != NULL)
-	FREE(name);
-    HTList_delete(lss_styles);
+    LYFreeStringList(lss_styles);
     lss_styles = NULL;
 }
 
diff --git a/src/LYStyle.h b/src/LYStyle.h
index fc31d698..474efa54 100644
--- a/src/LYStyle.h
+++ b/src/LYStyle.h
@@ -8,63 +8,67 @@
 #include <AttrList.h>
 #include <HTMLDTD.h>
 
-/* list of elements */
-extern const SGML_dtd HTML_dtd;
+#ifdef __cplusplus
+extern "C" {
+#endif
+/* list of elements */ extern const SGML_dtd HTML_dtd;
 
 /* array of currently set styles */
-extern HTCharStyle displayStyles[DSTYLE_ELEMENTS];
+    extern HTCharStyle displayStyles[DSTYLE_ELEMENTS];
 
 /* Set all the buckets in the hash table to be empty */
-extern void parse_userstyles(void);
+    extern void parse_userstyles(void);
 
-extern void style_deleteStyleList(void);
+    extern void style_deleteStyleList(void);
 
-extern void style_defaultStyleSheet(void);
+    extern void style_defaultStyleSheet(void);
 
-extern int style_readFromFile(char *file);
+    extern int style_readFromFile(char *file);
 
-extern void TrimColorClass(const char *tagname,
-			   char *styleclassname,
-			   int *phcode);
+    extern void TrimColorClass(const char *tagname,
+			       char *styleclassname,
+			       int *phcode);
 
 /* this is an array of styles for tags that don't specify 'class' - the values
  * from that array will be suggested by SGML.c by setting the following
  * variable.  Value of -1 means that style value should be calculated honestly. 
  * -HV
  */
-extern int cached_tag_styles[HTML_ELEMENTS];
+    extern int cached_tag_styles[HTML_ELEMENTS];
 
 /* the style for current tag is suggested in current_tag_style.  If
  * force_current_tag_style =TRUE, then no attempts to calculate the color style
  * for current tag should be made - the value of 'current_tag_style' must be
  * used.
  */
-extern int current_tag_style;
-extern BOOL force_current_tag_style;
+    extern int current_tag_style;
+    extern BOOL force_current_tag_style;
 
-extern BOOL force_classname;
+    extern BOOL force_classname;
 
 /* if force_current_tag_style =TRUE, then here will be the classname (this is
  * done to avoid copying the class name to the buffer class_name.
  */
-extern char *forced_classname;
+    extern char *forced_classname;
 
 /* This is called each time lss styles are read.  It will fill each elt of
  * 'cached_tag_styles' -HV
  */
-extern void cache_tag_styles(void);
+    extern void cache_tag_styles(void);
 
 /* this is global var - it can be used for reading the end of string found
  * during last invokation of TrimColorClass.
  */
-extern void FastTrimColorClass(const char *tag_name,
-			       int name_len,
-			       char *stylename,
-			       char **pstylename_end,
-			       int *hcode);
-
-#endif /* USE_COLOR_STYLE */
-
+    extern void FastTrimColorClass(const char *tag_name,
+				   int name_len,
+				   char *stylename,
+				   char **pstylename_end,
+				   int *hcode);
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* USE_COLOR_STYLE */
 extern int lynx_has_color;
 
 #endif /* LYSTYLE_H */
diff --git a/src/LYTraversal.h b/src/LYTraversal.h
index 7da7da36..8e712e51 100644
--- a/src/LYTraversal.h
+++ b/src/LYTraversal.h
@@ -7,11 +7,17 @@
 #include <HTUtils.h>		/* BOOL, ARGS */
 #endif
 
-extern BOOLEAN lookup_link(char *target);
-extern void add_to_table(char *target);
-extern void add_to_traverse_list(char *fname, char *prev_link_name);
-extern void dump_traversal_history(void);
-extern void add_to_reject_list(char *target);
-extern BOOLEAN lookup_reject(char *target);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOLEAN lookup_link(char *target);
+    extern void add_to_table(char *target);
+    extern void add_to_traverse_list(char *fname, char *prev_link_name);
+    extern void dump_traversal_history(void);
+    extern void add_to_reject_list(char *target);
+    extern BOOLEAN lookup_reject(char *target);
 
-#endif /* TRAVERSAL_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* TRAVERSAL_H */
diff --git a/src/LYUpload.h b/src/LYUpload.h
index be421626..84a71a03 100644
--- a/src/LYUpload.h
+++ b/src/LYUpload.h
@@ -1,4 +1,3 @@
-
 #ifndef LYUPLOAD_H
 #define LYUPLOAD_H
 
@@ -6,7 +5,13 @@
 #include <LYStructs.h>
 #endif /* LYSTRUCTS_H */
 
-extern int LYUpload(char *line);
-extern int LYUpload_options(char **newfile, char *directory);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern int LYUpload(char *line);
+    extern int LYUpload_options(char **newfile, char *directory);
 
-#endif /* LYUPLOAD_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYUPLOAD_H */
diff --git a/src/LYUtils.c b/src/LYUtils.c
index beacf9fa..a33686cf 100644
--- a/src/LYUtils.c
+++ b/src/LYUtils.c
@@ -265,6 +265,19 @@ size_t utf8_length(BOOL utf_flag,
 }
 
 /*
+ * Free storage used for the link-highlighting.
+ */
+void LYFreeHilites(int first, int last)
+{
+    int i;
+
+    for (i = first; i < last; i++) {
+	LYSetHilite(i, NULL);
+	FREE(links[i].lname);
+    }
+}
+
+/*
  * Set the initial highlight information for a given link.
  */
 void LYSetHilite(int cur,
@@ -285,12 +298,12 @@ void LYAddHilite(int cur,
     HiliteList *list = &(links[cur].list);
     HiliteInfo *have = list->hl_info;
     unsigned need = (list->hl_len - 1);
-    unsigned want = (list->hl_len += 1) * sizeof(HiliteInfo);
+    unsigned want = (list->hl_len += 1);
 
     if (have != NULL) {
-	have = realloc(have, want);
+	have = typeRealloc(HiliteInfo, have, want);
     } else {
-	have = malloc(want);
+	have = typeMallocn(HiliteInfo, want);
     }
     list->hl_info = have;
     have[need].hl_text = text;
@@ -396,8 +409,7 @@ static BOOL show_whereis_targets(int flag,
 	 * the screen.  -FM
 	 */
 	LYmbcsstrncpy(buffer,
-		      (LYGetHiliteStr(cur, count) ?
-		       LYGetHiliteStr(cur, count) : ""),
+		      NonNull(LYGetHiliteStr(cur, count)),
 		      (sizeof(buffer) - 1),
 		      (LYcolLimit - LYGetHilitePos(cur, count)),
 		      utf_flag);
@@ -1076,8 +1088,7 @@ void LYhighlight(int flag,
 	     * screen.
 	     */
 	    LYmbcsstrncpy(buffer,
-			  (LYGetHiliteStr(cur, 0) ?
-			   LYGetHiliteStr(cur, 0) : ""),
+			  NonNull(LYGetHiliteStr(cur, 0)),
 			  (sizeof(buffer) - 1),
 			  (LYcolLimit - links[cur].lx),
 			  utf_flag);
@@ -1311,7 +1322,7 @@ void statusline(const char *text)
 	/*
 	 * Deal with any newlines or tabs in the string.  - FM
 	 */
-	convert_to_spaces((char *) temp, FALSE);
+	LYReduceBlanks((char *) temp);
 
 	/*
 	 * Handle the Kanji, making sure the text is not longer than the
@@ -1351,7 +1362,7 @@ void statusline(const char *text)
 	/*
 	 * Deal with any newlines or tabs in the string.  - FM
 	 */
-	convert_to_spaces(buffer, FALSE);
+	LYReduceBlanks(buffer);
     }
 
     /*
@@ -1611,12 +1622,10 @@ int HTCheckForInterrupt(void)
     FD_SET(0, &readfds);
 #ifdef SOCKS
     if (socks_flag)
-	ret = Rselect(1, (void *) &readfds, NULL, NULL,
-		      &socket_timeout);
+	ret = Rselect(1, &readfds, NULL, NULL, &socket_timeout);
     else
 #endif /* SOCKS */
-	ret = select(1, (void *) &readfds, NULL, NULL,
-		     &socket_timeout);
+	ret = select(1, &readfds, NULL, NULL, &socket_timeout);
 
     /** Suspended? **/
     if ((ret == -1) && (SOCKET_ERRNO == EINTR))
@@ -1640,7 +1649,7 @@ int HTCheckForInterrupt(void)
 #endif /* PDCURSES */
 
 #else /* VMS: */
-    extern int typeahead();
+    extern int typeahead(void);
 
     if (fake_zap > 0) {
 	fake_zap--;
@@ -1900,22 +1909,28 @@ BOOLEAN LYisLocalHost(const char *filename)
 }
 
 /*
- * Utility for freeing the list of local host aliases.  - FM
+ * Free an HTList that contains strings.
  */
-void LYLocalhostAliases_free(void)
+void LYFreeStringList(HTList *list)
 {
-    char *alias;
-    HTList *cur = localhost_aliases;
+    if (list != NULL) {
+	char *argument;
+	HTList *cur = list;
 
-    if (!cur)
-	return;
-
-    while (NULL != (alias = (char *) HTList_nextObject(cur))) {
-	FREE(alias);
+	while (NULL != (argument = (char *) HTList_nextObject(cur))) {
+	    FREE(argument);
+	}
+	HTList_delete(list);
     }
-    HTList_delete(localhost_aliases);
+}
+
+/*
+ * Utility for freeing the list of local host aliases.  - FM
+ */
+void LYLocalhostAliases_free(void)
+{
+    LYFreeStringList(localhost_aliases);
     localhost_aliases = NULL;
-    return;
 }
 
 /*
@@ -1986,7 +2001,7 @@ BOOLEAN LYisLocalAlias(const char *filename)
  *  it returns UNKNOWN_URL_TYPE.  Otherwise, it returns
  *  0 (not a URL). - FM
  */
-int LYCheckForProxyURL(char *filename)
+UrlTypes LYCheckForProxyURL(char *filename)
 {
     char *cp = filename;
     char *cp1;
@@ -2009,6 +2024,7 @@ int LYCheckForProxyURL(char *filename)
 	if ((cp2 = strchr((cp + 1), '/')) != NULL && cp2 < cp1)
 	    return (NOT_A_URL_TYPE);
 	*cp1 = '\0';
+	cp2 = NULL;
 	StrAllocCopy(cp2, cp);
 	*cp1 = ':';
 	StrAllocCat(cp2, "_proxy");
@@ -2075,11 +2091,11 @@ static BOOLEAN compare_type(char *tst,
  *  Chains to LYCheckForProxyURL() if a colon
  *  is present but the type is not recognized.
  */
-int is_url(char *filename)
+UrlTypes is_url(char *filename)
 {
     char *cp = filename;
     char *cp1;
-    int result = NOT_A_URL_TYPE;
+    UrlTypes result = NOT_A_URL_TYPE;
     int len;
     int limit;
 
@@ -2877,18 +2893,8 @@ void size_change(int sig GCC_UNUSED)
  */
 void HTSugFilenames_free(void)
 {
-    char *fname;
-    HTList *cur = sug_filenames;
-
-    if (!cur)
-	return;
-
-    while (NULL != (fname = (char *) HTList_nextObject(cur))) {
-	FREE(fname);
-    }
-    HTList_delete(sug_filenames);
+    LYFreeStringList(sug_filenames);
     sug_filenames = NULL;
-    return;
 }
 
 /*
@@ -2897,33 +2903,33 @@ void HTSugFilenames_free(void)
  */
 void HTAddSugFilename(char *fname)
 {
-    char *new = NULL;
+    char *tmp = NULL;
     char *old;
     HTList *cur;
 
     if (!non_empty(fname))
 	return;
 
-    StrAllocCopy(new, fname);
+    StrAllocCopy(tmp, fname);
 
     if (!sug_filenames) {
 	sug_filenames = HTList_new();
 #ifdef LY_FIND_LEAKS
 	atexit(HTSugFilenames_free);
 #endif
-	HTList_addObject(sug_filenames, new);
+	HTList_addObject(sug_filenames, tmp);
 	return;
     }
 
     cur = sug_filenames;
     while (NULL != (old = (char *) HTList_nextObject(cur))) {
-	if (!strcmp(old, new)) {
+	if (!strcmp(old, tmp)) {
 	    HTList_removeObject(sug_filenames, old);
 	    FREE(old);
 	    break;
 	}
     }
-    HTList_addObject(sug_filenames, new);
+    HTList_addObject(sug_filenames, tmp);
 
     return;
 }
@@ -4475,8 +4481,9 @@ BOOLEAN LYExpandHostForURL(char **AllocatedString,
      * Set the first prefix, making it a zero-length string if the list is NULL
      * or if the potential host field ends with a dot.  - FM
      */
-    StartP = ((prefix_list && Str[strlen(Str) - 1] != '.') ?
-	      prefix_list : "");
+    StartP = ((prefix_list && Str[strlen(Str) - 1] != '.')
+	      ? prefix_list
+	      : "");
     /*
      * If we have a prefix, but the allocated string is one of the common host
      * prefixes, make our prefix a zero-length string.  - FM
@@ -4512,8 +4519,9 @@ BOOLEAN LYExpandHostForURL(char **AllocatedString,
 	 * Set the first suffix, making it a zero-length string if the list is
 	 * NULL or if the potential host field begins with a dot.  - FM
 	 */
-	StartS = ((suffix_list && *Str != '.') ?
-		  suffix_list : "");
+	StartS = ((suffix_list && *Str != '.')
+		  ? suffix_list
+		  : "");
 	while ((*StartS) && (WHITE(*StartS) || *StartS == ',')) {
 	    StartS++;		/* Skip whitespace and separators */
 	}
@@ -6442,7 +6450,7 @@ BOOL LYIsUIPage3(const char *url,
 		char *p;
 		HTList *l0 = ly_uip[i].alturls;
 
-		while ((p = HTList_nextObject(l0)) != NULL) {
+		while ((p = (char *) HTList_nextObject(l0)) != NULL) {
 		    if ((flagparam & UIP_P_FRAG) ?
 			(!strncmp(p, url, (l = strlen(p)))
 			 && (url[l] == '\0' || url[l] == '#')) :
@@ -6475,7 +6483,7 @@ void LYRegisterUIPage(const char *url,
 		int n = 0;
 		HTList *l0 = ly_uip[i].alturls;
 
-		while ((p = HTList_nextObject(l0)) != NULL) {
+		while ((p = (char *) HTList_nextObject(l0)) != NULL) {
 		    if (!strcmp(p, url))
 			return;
 		    if (!strcmp(p, ly_uip[i].url)) {
@@ -6502,17 +6510,11 @@ void LYRegisterUIPage(const char *url,
 void LYUIPages_free(void)
 {
     unsigned int i;
-    char *p;
-    HTList *l0;
 
     for (i = 0; i < TABLESIZE(ly_uip); i++) {
 	FREE(ly_uip[i].url);
 	FREE(ly_uip[i].file);
-	l0 = ly_uip[i].alturls;
-	while ((p = HTList_nextObject(l0)) != NULL) {
-	    FREE(p);
-	}
-	HTList_delete(ly_uip[i].alturls);
+	LYFreeStringList(ly_uip[i].alturls);
 	ly_uip[i].alturls = NULL;
     }
 }
@@ -7447,7 +7449,8 @@ char *get_clip_grab(void)
 	if (strchr(paste_buf + off, '\r')
 	    || strchr(paste_buf + off, '\n'))
 	    break;
-	paste_buf = realloc(paste_buf, size += PASTE_BUFFER - 1);
+	paste_buf = typeRealloc(char, paste_buf, size += PASTE_BUFFER - 1);
+
 	off += len;
     }
     return paste_buf;
diff --git a/src/LYUtils.h b/src/LYUtils.h
index 51a7680b..d9e26567 100644
--- a/src/LYUtils.h
+++ b/src/LYUtils.h
@@ -11,30 +11,37 @@
 #ifdef VMS
 #include <HTFTP.h>
 #include <HTVMSUtils.h>
-#define HTSYS_name(path)   HTVMS_name("", path)
-#define HTSYS_purge(path)  HTVMS_purge(path)
-#define HTSYS_remove(path) HTVMS_remove(path)
 #endif /* VMS */
 
 #if defined(USE_DOS_DRIVES)
 #include <HTDOS.h>
-#define HTSYS_name(path) HTDOS_name(path)
 #endif
 
+#if defined(SYSLOG_REQUESTED_URLS)
+#include <syslog.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef VMS
+#define HTSYS_name(path)   HTVMS_name("", path)
+#define HTSYS_purge(path)  HTVMS_purge(path)
+#define HTSYS_remove(path) HTVMS_remove(path)
+#endif				/* VMS */
+#if defined(USE_DOS_DRIVES)
+#define HTSYS_name(path) HTDOS_name(path)
+#endif
 #ifndef HTSYS_name
 #define HTSYS_name(path) path
 #endif
-
 #ifndef HTSYS_purge
 #define HTSYS_purge(path)	/* nothing */
 #endif
-
 #ifndef HTSYS_remove
 #define HTSYS_remove(path) remove(path)
 #endif
-
 #define LYIsPipeCommand(s) ((s)[0] == '|')
-
 #ifdef VMS
 #define TTY_DEVICE "tt:"
 #define NUL_DEVICE "nl:"
@@ -61,21 +68,17 @@
 #define LYIsNullDevice(s) LYSameFilename(s,NUL_DEVICE)
 #define LYSameFilename(a,b) (!strcmp(a,b))
 #define LYSameHostname(a,b) (!strcmp(a,b))
-#endif /* __CYGWIN__ */
-#endif /* DOSPATH */
-#endif /* VMS */
-
+#endif				/* __CYGWIN__ */
+#endif				/* DOSPATH */
+#endif				/* VMS */
 /* See definitions in src/LYCharVals.h.  The hardcoded values...
    This prohibits binding C-c and C-g.  Maybe it is better to remove this? */
 #define LYCharIsINTERRUPT_HARD(ch)	\
   ((ch) == LYCharINTERRUPT1 || ch == LYCharINTERRUPT2)
-
 #define LYCharIsINTERRUPT(ch)		\
   (LYCharIsINTERRUPT_HARD(ch) || LKC_TO_LAC(keymap,ch) == LYK_INTERRUPT)
-
 #define LYCharIsINTERRUPT_NO_letter(ch)	\
   (LYCharIsINTERRUPT(ch) && !isprint(ch))
-
 #if defined(USE_DOS_DRIVES)
 #define PATHSEP_STR "\\"
 #define LYIsPathSep(ch) ((ch) == '/' || (ch) == '\\')
@@ -85,7 +88,6 @@
 #define LYIsPathSep(ch) ((ch) == '/')
 #define LYIsDosDrive(s) FALSE	/* really nothing */
 #endif
-
 #ifdef EXP_ADDRLIST_PAGE
 #define LYIsListpageTitle(name) \
     (!strcmp((name), LIST_PAGE_TITLE) || \
@@ -94,183 +96,181 @@
 #define LYIsListpageTitle(name) \
     (!strcmp((name), LIST_PAGE_TITLE))
 #endif
-
 #define LYIsHtmlSep(ch) ((ch) == '/')
-
 #define findPoundSelector(address) strchr(address, '#')
 #define restorePoundSelector(pound) if ((pound) != NULL) *(pound) = '#'
-
-extern BOOL strn_dash_equ(const char *p1, const char *p2, int len);
-extern BOOLEAN LYAddSchemeForURL(char **AllocatedString, const char *default_scheme);
-extern BOOLEAN LYCachedTemp(char *result, char **cached);
-extern BOOLEAN LYCanDoHEAD(const char *address);
-extern BOOLEAN LYCanReadFile(const char *name);
-extern BOOLEAN LYCanWriteFile(const char *name);
-extern BOOLEAN LYCloseInput(FILE *fp);
-extern BOOLEAN LYCloseOutput(FILE *fp);
-extern BOOLEAN LYExpandHostForURL(char **AllocatedString, char *prefix_list, char *suffix_list);
-extern BOOLEAN LYFixCursesOnForAccess(const char *addr, const char *physical);
-extern BOOLEAN LYPathOffHomeOK(char *fbuffer, size_t fbuffer_size);
-extern BOOLEAN LYValidateFilename(char *result, char *given);
-extern BOOLEAN LYisAbsPath(const char *path);
-extern BOOLEAN LYisLocalAlias(const char *filename);
-extern BOOLEAN LYisLocalFile(const char *filename);
-extern BOOLEAN LYisLocalHost(const char *filename);
-extern BOOLEAN LYisRootPath(const char *path);
-extern BOOLEAN inlocaldomain(void);
-extern FILE *InternalPageFP(char *filename, int reuse_flag);
-extern FILE *LYAppendToTxtFile(const char *name);
-extern FILE *LYNewBinFile(const char *name);
-extern FILE *LYNewTxtFile(const char *name);
-extern FILE *LYOpenScratch(char *result, const char *prefix);
-extern FILE *LYOpenTemp(char *result, const char *suffix, const char *mode);
-extern FILE *LYOpenTempRewrite(char *result, const char *suffix, const char *mode);
-extern FILE *LYReopenTemp(char *name);
-extern char *Current_Dir(char *pathname);
-extern char *LYAddPathToSave(char *fname);
-extern char *LYGetEnv(const char *name);
-extern char *LYLastPathSep(const char *path);
-extern char *LYPathLeaf(char *pathname);
-extern char *LYgetXDisplay(void);
-extern char *strip_trailing_slash(char *my_dirname);
-extern char *trimPoundSelector(char *address);
-extern const char *Home_Dir(void);
-extern const char *LYGetHiliteStr(int cur, int count);
-extern const char *LYSysShell(void);
-extern const char *index_to_restriction(int inx);
-extern const char *wwwName(const char *pathname);
-extern int HTCheckForInterrupt(void);
-extern int LYCheckForProxyURL(char *filename);
-extern int LYConsoleInputFD(BOOLEAN need_selectable);
-extern int LYCopyFile(char *src, char *dst);
-extern int LYGetHilitePos(int cur, int count);
-extern int LYRemoveTemp(char *name);
-extern int LYSystem(char *command);
-extern int LYValidateOutput(char *filename);
-extern int find_restriction(const char *name, int len);
-extern int is_url(char *filename);
-extern int number2arrows(int number);
-extern size_t utf8_length(BOOL utf_flag, const char *data);
-extern time_t LYmktime(char *string, BOOL absolute);
-extern void BeginInternalPage(FILE *fp0, const char *Title, const char *HelpURL);
-extern void EndInternalPage(FILE *fp0);
-extern void HTAddSugFilename(char *fname);
-extern void HTSugFilenames_free(void);
-extern void LYAddHilite(int cur, char *text, int x);
-extern void LYAddHtmlSep(char **path);
-extern void LYAddHtmlSep0(char *path);
-extern void LYAddLocalhostAlias(char *alias);
-extern void LYAddPathSep(char **path);
-extern void LYAddPathSep0(char *path);
-extern void LYAddPathToHome(char *fbuffer, size_t fbuffer_size, const char *fname);
-extern void LYCheckBibHost(void);
-extern void LYCheckMail(void);
-extern void LYCleanupTemp(void);
-extern void LYCloseTemp(char *name);
-extern void LYCloseTempFP(FILE *fp);
-extern void LYConvertToURL(char **AllocatedString, int fixit);
-extern void LYDoCSI(char *url, const char *comment, char **csi);
-extern void LYEnsureAbsoluteURL(char **href, const char *name, int fixit);
-extern void LYFakeZap(BOOL set);
-extern void LYFixCursesOn(const char *reason);
-extern void LYLocalFileToURL(char **target, const char *source);
-extern void LYLocalhostAliases_free(void);
-extern void LYRenamedTemp(char *oldname, char *newname);
-extern void LYSetHilite(int cur, const char *text);
-extern void LYTrimHtmlSep(char *path);
-extern void LYTrimPathSep(char *path);
-extern void LYTrimRelFromAbsPath(char *path);
-extern void LYhighlight(int flag, int cur, const char *target);
-extern void LYmsec_delay(unsigned msec);
-extern void LYsetXDisplay(char *new_display);
-extern void WriteInternalTitle(FILE *fp0, const char *Title);
-extern void change_sug_filename(char *fname);
-extern void convert_to_spaces(char *string, BOOL condense);
-extern void free_and_clear(char **obj);
-extern void noviceline(int more_flag);
-extern void parse_restrictions(const char *s);
-extern void print_restrictions_to_fd(FILE *fp);
-extern void remove_backslashes(char *buf);
-extern void size_change(int sig);
-extern void statusline(const char *text);
-extern void toggle_novice_line(void);
+    extern BOOL strn_dash_equ(const char *p1, const char *p2, int len);
+    extern BOOLEAN LYAddSchemeForURL(char **AllocatedString, const char *default_scheme);
+    extern BOOLEAN LYCachedTemp(char *result, char **cached);
+    extern BOOLEAN LYCanDoHEAD(const char *address);
+    extern BOOLEAN LYCanReadFile(const char *name);
+    extern BOOLEAN LYCanWriteFile(const char *name);
+    extern BOOLEAN LYCloseInput(FILE *fp);
+    extern BOOLEAN LYCloseOutput(FILE *fp);
+    extern BOOLEAN LYExpandHostForURL(char **AllocatedString, char
+				      *prefix_list, char *suffix_list);
+    extern BOOLEAN LYFixCursesOnForAccess(const char *addr, const char *physical);
+    extern BOOLEAN LYPathOffHomeOK(char *fbuffer, size_t fbuffer_size);
+    extern BOOLEAN LYValidateFilename(char *result, char *given);
+    extern BOOLEAN LYisAbsPath(const char *path);
+    extern BOOLEAN LYisLocalAlias(const char *filename);
+    extern BOOLEAN LYisLocalFile(const char *filename);
+    extern BOOLEAN LYisLocalHost(const char *filename);
+    extern BOOLEAN LYisRootPath(const char *path);
+    extern BOOLEAN inlocaldomain(void);
+    extern FILE *InternalPageFP(char *filename, int reuse_flag);
+    extern FILE *LYAppendToTxtFile(const char *name);
+    extern FILE *LYNewBinFile(const char *name);
+    extern FILE *LYNewTxtFile(const char *name);
+    extern FILE *LYOpenScratch(char *result, const char *prefix);
+    extern FILE *LYOpenTemp(char *result, const char *suffix, const char *mode);
+    extern FILE *LYOpenTempRewrite(char *result, const char *suffix, const char *mode);
+    extern FILE *LYReopenTemp(char *name);
+    extern char *Current_Dir(char *pathname);
+    extern char *LYAddPathToSave(char *fname);
+    extern char *LYGetEnv(const char *name);
+    extern char *LYLastPathSep(const char *path);
+    extern char *LYPathLeaf(char *pathname);
+    extern char *LYgetXDisplay(void);
+    extern char *strip_trailing_slash(char *my_dirname);
+    extern char *trimPoundSelector(char *address);
+    extern const char *Home_Dir(void);
+    extern const char *LYGetHiliteStr(int cur, int count);
+    extern const char *LYSysShell(void);
+    extern const char *index_to_restriction(int inx);
+    extern const char *wwwName(const char *pathname);
+    extern int HTCheckForInterrupt(void);
+    extern int LYConsoleInputFD(BOOLEAN need_selectable);
+    extern int LYCopyFile(char *src, char *dst);
+    extern int LYGetHilitePos(int cur, int count);
+    extern int LYRemoveTemp(char *name);
+    extern int LYSystem(char *command);
+    extern int LYValidateOutput(char *filename);
+    extern int find_restriction(const char *name, int len);
+    extern int number2arrows(int number);
+    extern size_t utf8_length(BOOL utf_flag, const char *data);
+    extern time_t LYmktime(char *string, BOOL absolute);
+    extern void BeginInternalPage(FILE *fp0, const char *Title, const char *HelpURL);
+    extern void EndInternalPage(FILE *fp0);
+    extern void HTAddSugFilename(char *fname);
+    extern void HTSugFilenames_free(void);
+    extern void LYAddHilite(int cur, char *text, int x);
+    extern void LYAddHtmlSep(char **path);
+    extern void LYAddHtmlSep0(char *path);
+    extern void LYAddLocalhostAlias(char *alias);
+    extern void LYAddPathSep(char **path);
+    extern void LYAddPathSep0(char *path);
+    extern void LYAddPathToHome(char *fbuffer, size_t fbuffer_size, const char *fname);
+    extern void LYCheckBibHost(void);
+    extern void LYCheckMail(void);
+    extern void LYCleanupTemp(void);
+    extern void LYCloseTemp(char *name);
+    extern void LYCloseTempFP(FILE *fp);
+    extern void LYConvertToURL(char **AllocatedString, int fixit);
+    extern void LYDoCSI(char *url, const char *comment, char **csi);
+    extern void LYEnsureAbsoluteURL(char **href, const char *name, int fixit);
+    extern void LYFakeZap(BOOL set);
+    extern void LYFixCursesOn(const char *reason);
+    extern void LYFreeHilites(int first, int last);
+    extern void LYFreeStringList(HTList *list);
+    extern void LYLocalFileToURL(char **target, const char *source);
+    extern void LYLocalhostAliases_free(void);
+    extern void LYRenamedTemp(char *oldname, char *newname);
+    extern void LYSetHilite(int cur, const char *text);
+    extern void LYTrimHtmlSep(char *path);
+    extern void LYTrimPathSep(char *path);
+    extern void LYTrimRelFromAbsPath(char *path);
+    extern void LYhighlight(int flag, int cur, const char *target);
+    extern void LYmsec_delay(unsigned msec);
+    extern void LYsetXDisplay(char *new_display);
+    extern void WriteInternalTitle(FILE *fp0, const char *Title);
+    extern void change_sug_filename(char *fname);
+    extern void convert_to_spaces(char *string, BOOL condense);
+    extern void free_and_clear(char **obj);
+    extern void noviceline(int more_flag);
+    extern void parse_restrictions(const char *s);
+    extern void print_restrictions_to_fd(FILE *fp);
+    extern void remove_backslashes(char *buf);
+    extern void size_change(int sig);
+    extern void statusline(const char *text);
+    extern void toggle_novice_line(void);
 
 #ifdef EXP_ASCII_CTYPES
-extern int ascii_tolower(int i);
-extern int ascii_toupper(int i);
-extern int ascii_isupper(int i);
+    extern int ascii_tolower(int i);
+    extern int ascii_toupper(int i);
+    extern int ascii_isupper(int i);
 #endif
 
 #ifdef __CYGWIN__
-extern int Cygwin_Shell(void);
+    extern int Cygwin_Shell(void);
 #endif
 
 #ifdef _WIN_CC
-extern int exec_command(char *cmd, int wait_flag);	/* xsystem.c */
-extern int xsystem(char *cmd);
+    extern int exec_command(char *cmd, int wait_flag);	/* xsystem.c */
+    extern int xsystem(char *cmd);
 #endif
 
 /* Keeping track of User Interface Pages: */
-typedef enum {
-    UIP_UNKNOWN = -1
-    ,UIP_HISTORY = 0
-    ,UIP_DOWNLOAD_OPTIONS
-    ,UIP_PRINT_OPTIONS
-    ,UIP_SHOWINFO
-    ,UIP_LIST_PAGE
-    ,UIP_VLINKS
-    ,UIP_LYNXCFG
-    ,UIP_OPTIONS_MENU
-    ,UIP_DIRED_MENU
-    ,UIP_PERMIT_OPTIONS
-    ,UIP_UPLOAD_OPTIONS
-    ,UIP_ADDRLIST_PAGE
-    ,UIP_CONFIG_DEF
-    ,UIP_TRACELOG
-    ,UIP_INSTALL
-} UIP_t;
+    typedef enum {
+	UIP_UNKNOWN = -1
+	,UIP_HISTORY = 0
+	,UIP_DOWNLOAD_OPTIONS
+	,UIP_PRINT_OPTIONS
+	,UIP_SHOWINFO
+	,UIP_LIST_PAGE
+	,UIP_VLINKS
+	,UIP_LYNXCFG
+	,UIP_OPTIONS_MENU
+	,UIP_DIRED_MENU
+	,UIP_PERMIT_OPTIONS
+	,UIP_UPLOAD_OPTIONS
+	,UIP_ADDRLIST_PAGE
+	,UIP_CONFIG_DEF
+	,UIP_TRACELOG
+	,UIP_INSTALL
+    } UIP_t;
 
 #define UIP_P_FRAG 0x0001	/* flag: consider "url#frag" as matching "url" */
 
-extern BOOL LYIsUIPage3(const char *url, UIP_t type, int flagparam);
+    extern BOOL LYIsUIPage3(const char *url, UIP_t type, int flagparam);
 
 #define LYIsUIPage(url,type) LYIsUIPage3(url, type, UIP_P_FRAG)
-extern void LYRegisterUIPage(const char *url, UIP_t type);
+    extern void LYRegisterUIPage(const char *url, UIP_t type);
 
 #define LYUnRegisterUIPage(type) LYRegisterUIPage(NULL, type)
-extern void LYUIPages_free(void);
+    extern void LYUIPages_free(void);
 
 #ifdef CAN_CUT_AND_PASTE
-extern int put_clip(const char *szBuffer);
+    extern int put_clip(const char *szBuffer);
 
 /* get_clip_grab() returns a pointer to the string in the system area.
    get_clip_release() should be called ASAP after this. */
-extern char *get_clip_grab(void);
-extern void get_clip_release(void);
+    extern char *get_clip_grab(void);
+    extern void get_clip_release(void);
 
 #  ifdef WIN_EX
 #    define size_clip()	8192
 #  else
-extern int size_clip(void);
+    extern int size_clip(void);
 
 #  endif
 #endif
 
 #if defined(WIN_EX)		/* 1997/10/16 (Thu) 20:13:28 */
-extern char *HTDOS_short_name(char *path);
-extern char *w32_strerror(DWORD ercode);
+    extern char *HTDOS_short_name(char *path);
+    extern char *w32_strerror(DWORD ercode);
 #endif
 
 #ifdef VMS
-extern void Define_VMSLogical(char *LogicalName, char *LogicalValue);
-#endif /* VMS */
+    extern void Define_VMSLogical(char *LogicalName, char *LogicalValue);
+#endif				/* VMS */
 
 #if ! HAVE_PUTENV
-extern int putenv(const char *string);
-#endif /* HAVE_PUTENV */
+    extern int putenv(const char *string);
+#endif				/* HAVE_PUTENV */
 
 #if defined(MULTI_USER_UNIX)
-extern void LYRelaxFilePermissions(const char *name);
+    extern void LYRelaxFilePermissions(const char *name);
 
 #else
 #define LYRelaxFilePermissions(name)	/* nothing */
@@ -279,7 +279,7 @@ extern void LYRelaxFilePermissions(const char *name);
 /*
  *  Whether or not the status line must be shown.
  */
-extern BOOLEAN mustshow;
+    extern BOOLEAN mustshow;
 
 #define _statusline(msg)	mustshow = TRUE, statusline(msg)
 
@@ -288,59 +288,62 @@ extern BOOLEAN mustshow;
  *
  *  Universal document id types (see LYCheckForProxyURL)
  */
-typedef enum {
-    NOT_A_URL_TYPE = 0,
-    UNKNOWN_URL_TYPE = 1,	/* must be nonzero */
-
-    HTTP_URL_TYPE,
-    FILE_URL_TYPE,
-    FTP_URL_TYPE,
-    NCFTP_URL_TYPE,
-    WAIS_URL_TYPE,
-    NEWS_URL_TYPE,
-    NNTP_URL_TYPE,
-    TELNET_URL_TYPE,
-    TN3270_URL_TYPE,
-    RLOGIN_URL_TYPE,
-    GOPHER_URL_TYPE,
-    HTML_GOPHER_URL_TYPE,
-    TELNET_GOPHER_URL_TYPE,
-    INDEX_GOPHER_URL_TYPE,
-    MAILTO_URL_TYPE,
-    BIBP_URL_TYPE,
-    FINGER_URL_TYPE,
-    CSO_URL_TYPE,
-    HTTPS_URL_TYPE,
-    SNEWS_URL_TYPE,
-    PROSPERO_URL_TYPE,
-    AFS_URL_TYPE,
-
-    DATA_URL_TYPE,
-
-    LYNXEXEC_URL_TYPE,
-    LYNXPROG_URL_TYPE,
-    LYNXCGI_URL_TYPE,
-
-    NEWSPOST_URL_TYPE,
-    NEWSREPLY_URL_TYPE,
-    SNEWSPOST_URL_TYPE,
-    SNEWSREPLY_URL_TYPE,
-
-    LYNXPRINT_URL_TYPE,
-    LYNXHIST_URL_TYPE,
-    LYNXDOWNLOAD_URL_TYPE,
-    LYNXKEYMAP_URL_TYPE,
-    LYNXIMGMAP_URL_TYPE,
-    LYNXCOOKIE_URL_TYPE,
-    LYNXDIRED_URL_TYPE,
-    LYNXOPTIONS_URL_TYPE,
-    LYNXCFG_URL_TYPE,
-    LYNXCOMPILE_OPTS_URL_TYPE,
-    LYNXMESSAGES_URL_TYPE,
-
-    PROXY_URL_TYPE
-
-} UrlTypes;
+    typedef enum {
+	NOT_A_URL_TYPE = 0,
+	UNKNOWN_URL_TYPE = 1,	/* must be nonzero */
+
+	HTTP_URL_TYPE,
+	FILE_URL_TYPE,
+	FTP_URL_TYPE,
+	NCFTP_URL_TYPE,
+	WAIS_URL_TYPE,
+	NEWS_URL_TYPE,
+	NNTP_URL_TYPE,
+	TELNET_URL_TYPE,
+	TN3270_URL_TYPE,
+	RLOGIN_URL_TYPE,
+	GOPHER_URL_TYPE,
+	HTML_GOPHER_URL_TYPE,
+	TELNET_GOPHER_URL_TYPE,
+	INDEX_GOPHER_URL_TYPE,
+	MAILTO_URL_TYPE,
+	BIBP_URL_TYPE,
+	FINGER_URL_TYPE,
+	CSO_URL_TYPE,
+	HTTPS_URL_TYPE,
+	SNEWS_URL_TYPE,
+	PROSPERO_URL_TYPE,
+	AFS_URL_TYPE,
+
+	DATA_URL_TYPE,
+
+	LYNXEXEC_URL_TYPE,
+	LYNXPROG_URL_TYPE,
+	LYNXCGI_URL_TYPE,
+
+	NEWSPOST_URL_TYPE,
+	NEWSREPLY_URL_TYPE,
+	SNEWSPOST_URL_TYPE,
+	SNEWSREPLY_URL_TYPE,
+
+	LYNXPRINT_URL_TYPE,
+	LYNXHIST_URL_TYPE,
+	LYNXDOWNLOAD_URL_TYPE,
+	LYNXKEYMAP_URL_TYPE,
+	LYNXIMGMAP_URL_TYPE,
+	LYNXCOOKIE_URL_TYPE,
+	LYNXDIRED_URL_TYPE,
+	LYNXOPTIONS_URL_TYPE,
+	LYNXCFG_URL_TYPE,
+	LYNXCOMPILE_OPTS_URL_TYPE,
+	LYNXMESSAGES_URL_TYPE,
+
+	PROXY_URL_TYPE
+
+    } UrlTypes;
+
+    extern UrlTypes LYCheckForProxyURL(char *filename);
+    extern UrlTypes is_url(char *filename);
 
 /* common URLs */
 #define STR_BIBP_URL         "bibp:"
@@ -472,19 +475,16 @@ typedef enum {
 /*
  *  For change_sug_filename().
  */
-extern HTList *sug_filenames;
+    extern HTList *sug_filenames;
 
 /*
  * syslog() facility
  */
 #if defined(SYSLOG_REQUESTED_URLS)
-#include <syslog.h>
-
-extern void LYOpenlog(const char *banner);
-extern void LYSyslog(char *arg);
-extern void LYCloselog(void);
-
-#endif /* SYSLOG_REQUESTED_URLS */
+    extern void LYOpenlog(const char *banner);
+    extern void LYSyslog(char *arg);
+    extern void LYCloselog(void);
+#endif				/* SYSLOG_REQUESTED_URLS */
 
 /*
  *  Miscellaneous.
@@ -511,4 +511,7 @@ extern void LYCloselog(void);
 #define BIN_W	"wb"
 #define BIN_A	"ab+"
 
-#endif /* LYUTILS_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYUTILS_H */
diff --git a/src/LYrcFile.c b/src/LYrcFile.c
index 5cebd3bd..c2f90fb0 100644
--- a/src/LYrcFile.c
+++ b/src/LYrcFile.c
@@ -216,10 +216,10 @@ BOOL LYgetEnum(Config_Enum * table, char *name,
 #define MAYBE_FUN(n,v,w,h) {n,    0, CONF_FUN,   UNION_FUN(v), 0, 0, w, h}
 #define MAYBE_MBM(n,h)     {n,    0, CONF_MBM,   UNION_DEF(0), 0, 0, 0, h}
 
-#define PARSE_NIL          {NULL, 1, 0,          UNION_DEF(0), 0, 0, 0, 0}
+#define PARSE_NIL          {NULL, 1, CONF_NIL,   UNION_DEF(0), 0, 0, 0, 0}
 
 typedef enum {
-    CONF_UNSPECIFIED = 0
+    CONF_NIL = 0
     ,CONF_ARRAY
     ,CONF_BOOL
     ,CONF_FUN
@@ -750,7 +750,7 @@ void read_rc(FILE *fp)
 		StrAllocCopy(*(q->str_value), value);
 	    break;
 
-	case CONF_UNSPECIFIED:
+	case CONF_NIL:
 	    break;
 	}
     }
@@ -936,7 +936,7 @@ It is not this file.\n\
 		    : "");
 	    break;
 
-	case CONF_UNSPECIFIED:
+	case CONF_NIL:
 	    break;
 	}
 	tbl++;
diff --git a/src/TRSTable.c b/src/TRSTable.c
index f25906c8..aedb56a7 100644
--- a/src/TRSTable.c
+++ b/src/TRSTable.c
@@ -451,9 +451,8 @@ static int Stbl_addCellToRow(STable_rowinfo *me, STable_cellinfo *colinfo, int n
 	    if (me->allocated == 0 && !me->cells) {
 		cells = typecallocn(STable_cellinfo, growby);
 	    } else {
-		cells = realloc(me->cells,
-				(me->allocated + growby)
-				* sizeof(STable_cellinfo));
+		cells = typeRealloc(STable_cellinfo, me->cells,
+				      (me->allocated + growby));
 
 		for (i = 0; cells && i < growby; i++) {
 		    cells[me->allocated + i].alignment = HT_ALIGN_NONE;
@@ -520,9 +519,8 @@ static int Stbl_reserveCellsInRow(STable_rowinfo *me, int icell,
 	    (tfp, "TRST:Stbl_reserveCellsInRow(icell=%d, colspan=%d\n",
 	     icell, colspan));
     if (growby > 0) {
-	cells = realloc(me->cells,
-			(me->allocated + growby)
-			* sizeof(STable_cellinfo));
+	cells = typeRealloc(STable_cellinfo, me->cells,
+			      (me->allocated + growby));
 
 	if (cells) {
 	    for (i = 0; i < growby; i++) {
@@ -980,9 +978,8 @@ static int Stbl_reserveCellsInTable(STable_info *me, int icell,
 
     growby = me->nrows + rowspan - 1 - me->allocated_rows;
     if (growby > 0) {
-	rows = realloc(me->rows,
-		       (me->allocated_rows + growby)
-		       * sizeof(STable_rowinfo));
+	rows = typeRealloc(STable_rowinfo, me->rows,
+			     (me->allocated_rows + growby));
 
 	if (!rows)
 	    return 0;		/* ignore silently, no free memory, may be recoverable */
@@ -1079,9 +1076,8 @@ int Stbl_addRowToTable(STable_info *me, int alignment,
 	    if (me->allocated_rows == 0 && !me->rows) {
 		rows = typecallocn(STable_rowinfo, growby);
 	    } else {
-		rows = realloc(me->rows,
-			       (me->allocated_rows + growby)
-			       * sizeof(STable_rowinfo));
+		rows = typeRealloc(STable_rowinfo, me->rows,
+				     (me->allocated_rows + growby));
 
 		for (i = 0; rows && i < growby; i++) {
 		    row = rows + me->allocated_rows + i;
@@ -1334,9 +1330,8 @@ static int Stbl_fakeFinishCellInTable(STable_info *me,
 	       table lines, not displayed lines.  We need to duplicate
 	       the reservation structure when we fake new logical lines.  */
 	    int prev_row_n = prev_row - me->rows;
-	    STable_rowinfo *rows = realloc(me->rows,
-					   (me->allocated_rows + 1)
-					   * sizeof(STable_rowinfo));
+	    STable_rowinfo *rows = typeRealloc(STable_rowinfo, me->rows,
+					       (me->allocated_rows + 1));
 	    int need_cells = prev_reserved_last + 1;
 	    int n;
 
@@ -1482,9 +1477,8 @@ int Stbl_addCellToTable(STable_info *me, int colspan,
 	    if (me->allocated_sumcols == 0 && !me->sumcols) {
 		sumcols = typecallocn(STable_cellinfo, growby);
 	    } else {
-		sumcols = realloc(me->sumcols,
-				  (me->allocated_sumcols + growby)
-				  * sizeof(STable_cellinfo));
+		sumcols = typeRealloc(STable_cellinfo, me->sumcols,
+				        (me->allocated_sumcols + growby));
 
 		for (i = 0; sumcols && i < growby; i++) {
 		    sumcol = sumcols + me->allocated_sumcols + i;
@@ -1675,9 +1669,8 @@ int Stbl_addColInfo(STable_info *me, int colspan,
 	    if (me->allocated_sumcols == 0) {
 		sumcols = typecallocn(STable_cellinfo, growby);
 	    } else {
-		sumcols = realloc(me->sumcols,
-				  (me->allocated_sumcols + growby)
-				  * sizeof(STable_cellinfo));
+		sumcols = typeRealloc(STable_cellinfo, me->sumcols,
+				        (me->allocated_sumcols + growby));
 
 		for (i = 0; sumcols && i < growby; i++) {
 		    sumcol = sumcols + me->allocated_sumcols + i;
diff --git a/src/TRSTable.h b/src/TRSTable.h
index 10a95aaf..ef11cd54 100644
--- a/src/TRSTable.h
+++ b/src/TRSTable.h
@@ -3,18 +3,20 @@
 
 #include <HTUtils.h>
 
-/* TRST_MAXCOLSPAN and TRST_MAXCOLSPAN are defined in userdefs.h */
-
-typedef struct _STable_info STable_info;
-extern STable_info *Stbl_startTABLE(short);
-extern int Stbl_finishTABLE(STable_info *);
-extern void Stbl_free(STable_info *);
-extern int Stbl_addRowToTable(STable_info *, int, int);
-extern int Stbl_addCellToTable(STable_info *, int, int, int, int, int, int, int);
-extern int Stbl_finishCellInTable(STable_info *, int, int, int, int);
-extern int Stbl_addColInfo(STable_info *, int, short, BOOL);
-extern int Stbl_finishColGroup(STable_info *);
-extern int Stbl_addRowGroup(STable_info *, short);
+#ifdef __cplusplus
+extern "C" {
+#endif
+/* TRST_MAXCOLSPAN and TRST_MAXCOLSPAN are defined in userdefs.h */ typedef struct _STable_info STable_info;
+    extern STable_info *Stbl_startTABLE(short);
+    extern int Stbl_finishTABLE(STable_info *);
+    extern void Stbl_free(STable_info *);
+    extern int Stbl_addRowToTable(STable_info *, int, int);
+    extern int Stbl_addCellToTable(STable_info *, int, int, int, int, int,
+				   int, int);
+    extern int Stbl_finishCellInTable(STable_info *, int, int, int, int);
+    extern int Stbl_addColInfo(STable_info *, int, short, BOOL);
+    extern int Stbl_finishColGroup(STable_info *);
+    extern int Stbl_addRowGroup(STable_info *, short);
 
 #define TRST_ENDCELL_ENDTD	1
 #define TRST_ENDCELL_LINEBREAK	0
@@ -22,23 +24,26 @@ extern int Stbl_addRowGroup(STable_info *, short);
 #define TRST_FAKING_CELLS	2
 #define Stbl_lineBreak(stbl,l,off,pos) Stbl_finishCellInTable(stbl, TRST_ENDCELL_LINEBREAK, l, off, pos)
 
-extern int Stbl_getStartLine(STable_info *);
-extern int Stbl_getFixupPositions(STable_info *me, int lineno,
-				  int *oldpos,
-				  int *newpos);
-extern short Stbl_getAlignment(STable_info *);
+    extern int Stbl_getStartLine(STable_info *);
+    extern int Stbl_getFixupPositions(STable_info *me, int lineno,
+				      int *oldpos,
+				      int *newpos);
+    extern short Stbl_getAlignment(STable_info *);
 
 #ifdef EXP_NESTED_TABLES
-extern void Stbl_update_enclosing(STable_info *me, int max_width,
-				  int last_lineno);
-struct _TextAnchor;
-extern void Stbl_set_enclosing(STable_info *me, STable_info *encl, struct _TextAnchor *last_anchor);
-extern STable_info *Stbl_get_enclosing(STable_info *me);
-extern struct _TextAnchor *Stbl_get_last_anchor_before(STable_info *me);
-extern int Stbl_getStartLineDeep(STable_info *);
+    extern void Stbl_update_enclosing(STable_info *me, int max_width,
+				      int last_lineno);
+    struct _TextAnchor;
+    extern void Stbl_set_enclosing(STable_info *me, STable_info *encl, struct _TextAnchor *last_anchor);
+    extern STable_info *Stbl_get_enclosing(STable_info *me);
+    extern struct _TextAnchor *Stbl_get_last_anchor_before(STable_info *me);
+    extern int Stbl_getStartLineDeep(STable_info *);
 
 #else
 #define Stbl_getStartLineDeep(t) Stbl_getStartLine(t)
 #endif
 
-#endif /* TRSTABLE_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* TRSTABLE_H */
diff --git a/src/UCAuto.c b/src/UCAuto.c
index 1558e997..0f71a000 100644
--- a/src/UCAuto.c
+++ b/src/UCAuto.c
@@ -225,11 +225,12 @@ void UCChangeTerminalCodepage(int newcs,
 	    LYCloseTempFP(fp1);
 	    LYCloseTempFP(fp2);
 	    if ((nlen = strlen(old_font)) + 1 < LY_MAXPATH &&
-		(rp = realloc(old_font, nlen + 1)))
-		old_font = rp;
+		(rp = typeRealloc(char, old_font, nlen + 1)))
+		  old_font = rp;
+
 	    if ((nlen = strlen(old_umap)) + 1 < LY_MAXPATH &&
-		(rp = realloc(old_umap, nlen + 1)))
-		old_umap = rp;
+		(rp = typeRealloc(char, old_umap, nlen + 1)))
+		  old_umap = rp;
 	} else {
 	    if (fp1)
 		LYRemoveTemp(old_font);
diff --git a/src/UCAuto.h b/src/UCAuto.h
index d3646a84..98d2243f 100644
--- a/src/UCAuto.h
+++ b/src/UCAuto.h
@@ -3,6 +3,12 @@
 
 #include <UCDefs.h>
 
-extern void UCChangeTerminalCodepage(int newcs, LYUCcharset *p);
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern void UCChangeTerminalCodepage(int newcs, LYUCcharset *p);
 
-#endif /* UCAUTO_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* UCAUTO_H */
diff --git a/src/UCdomap.h b/src/UCdomap.h
index 51e4478e..1a2f00e8 100644
--- a/src/UCdomap.h
+++ b/src/UCdomap.h
@@ -11,6 +11,9 @@
 
 #include <UCkd.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 /*
  * [old comments:  - KW ]
  * consolemap.h
@@ -21,42 +24,40 @@
 #define GRAF_MAP 1
 #define IBMPC_MAP 2
 #define USER_MAP 3
-
 /*
  * Some conventions I try to follow (loosely):
  *	[a-z]* only internal, names from linux driver code.
  *	UC_* to be only known internally.
  *	UC[A-Z]* to be exported to other parts of Lynx. -KW
- */
-extern void UC_Charset_Setup(const char *UC_MIMEcharset,
-			     const char *UC_LYNXcharset,
-			     const u8 * unicount,
-			     const u16 * unitable,
-			     int nnuni,
-			     struct unimapdesc_str replacedesc,
-			     int lowest_eight,
-			     int UC_rawuni,
-			     int codepage);
-
-struct UC_charset {
-    const char *MIMEname;
-    const char *LYNXname;
-    const u8 *unicount;
-    const u16 *unitable;
-    int num_uni;
-    struct unimapdesc_str replacedesc;
-    int uc_status;
-    int LYhndl;
-    int GN;
-    int lowest_eight;
-    int enc;
-    int codepage;		/* codepage number, used by OS/2 font-switching code */
-};
-
-extern int UCNumCharsets;
-extern int UCInitialized;
-
-extern void UCInit(void);
+ */ extern void UC_Charset_Setup(const char *UC_MIMEcharset,
+				 const char *UC_LYNXcharset,
+				 const u8 * unicount,
+				 const u16 * unitable,
+				 int nnuni,
+				 struct unimapdesc_str replacedesc,
+				 int lowest_eight,
+				 int UC_rawuni,
+				 int codepage);
+
+    struct UC_charset {
+	const char *MIMEname;
+	const char *LYNXname;
+	const u8 *unicount;
+	const u16 *unitable;
+	int num_uni;
+	struct unimapdesc_str replacedesc;
+	int uc_status;
+	int LYhndl;
+	int GN;
+	int lowest_eight;
+	int enc;
+	int codepage;		/* codepage number, used by OS/2 font-switching code */
+    };
+
+    extern int UCNumCharsets;
+    extern int UCInitialized;
+
+    extern void UCInit(void);
 
 /*
  * INSTRUCTIONS for adding new character sets which do not have Unicode tables.
@@ -69,12 +70,12 @@ extern void UCInit(void);
  * when changing ucmaketbl.c, see also UC_Charset_Setup() above for details.
  */
 
-  /*
-   * There is no strict correlation for the next five, since the transfer
-   * charset gets decoded into Display Char Set by the CJK code (separate from
-   * Unicode mechanism).  For now we use the MIME name that describes what is
-   * output to the terminal.  - KW
-   */
+    /*
+     * There is no strict correlation for the next five, since the transfer
+     * charset gets decoded into Display Char Set by the CJK code (separate from
+     * Unicode mechanism).  For now we use the MIME name that describes what is
+     * output to the terminal.  - KW
+     */
 
 /*----------------------------------------------------------------------------*/
 
@@ -143,9 +144,9 @@ extern void UCInit(void);
 
 /*----------------------------------------------------------------------------*/
 
-  /*
-   * Placeholder for non-translation mode.  - FM
-   */
+    /*
+     * Placeholder for non-translation mode.  - FM
+     */
 
 #ifndef NO_CHARSET_x_transparent
 #define NO_CHARSET_x_transparent !ALL_CHARSETS
@@ -171,4 +172,7 @@ extern void UCInit(void);
        0, 128,UCT_ENC_UTF8,-4)
 #endif
 
-#endif /* UCDOMAP_H */
+#ifdef __cplusplus
+}
+#endif
+#endif				/* UCDOMAP_H */
diff --git a/src/chrtrans/caselower.h b/src/chrtrans/caselower.h
index 4953162c..5894a3f2 100644
--- a/src/chrtrans/caselower.h
+++ b/src/chrtrans/caselower.h
@@ -24,9 +24,9 @@ default mappings listed in the Unicode Character Database.
 typedef struct {
     u16 upper;
     u16 lower;
-} unipair;
+} unipair_case;
 
-static const unipair unicode_to_lower_case[] =
+static const unipair_case unicode_to_lower_case[] =
 /* *INDENT-OFF* */
 {
   {0x0041, 0x0061},  /* LATIN CAPITAL LETTER A */
diff --git a/src/chrtrans/makeuctb.c b/src/chrtrans/makeuctb.c
index a2f0f5d6..e11cd1fe 100644
--- a/src/chrtrans/makeuctb.c
+++ b/src/chrtrans/makeuctb.c
@@ -807,7 +807,8 @@ static const u8 dfont_unicount%s[%d] = \n\
 	fprintf(chdr, "\nstatic const u16 dfont_unitable%s[%d] = \n{\n\t",
 		id_append, nuni);
     } else {
-	fprintf(chdr, "\nstatic const u16 dfont_unitable%s[1]; /* dummy */\n", id_append);
+	fprintf(chdr,
+		"\nstatic const u16 dfont_unitable%s[1] = {0}; /* dummy */\n", id_append);
     }
 
     fp0 = 0;
diff --git a/src/makefile.in b/src/makefile.in
index 0d6ea42a..36a18ae3 100644
--- a/src/makefile.in
+++ b/src/makefile.in
@@ -120,6 +120,9 @@ clean:
 	rm -f lynx$x core *.core *.leaks *.i *$o *.bak tags TAGS
 	cd chrtrans && $(MAKE) clean
 
+tags:
+	ctags *.[ch]
+
 distclean: clean
 
 CMN=$(top_srcdir)/WWW/Library/Implementation/