diff options
-rw-r--r-- | CHANGES | 40 | ||||
-rw-r--r-- | LYMessages_en.h | 2 | ||||
-rw-r--r-- | Makefile | 8 | ||||
-rw-r--r-- | WWW/Library/Implementation/HTFinger.c | 28 | ||||
-rw-r--r-- | WWW/Library/Implementation/HTGopher.c | 56 | ||||
-rw-r--r-- | WWW/Library/Implementation/HTML.h | 1 | ||||
-rw-r--r-- | WWW/Library/Implementation/HTNews.c | 199 | ||||
-rw-r--r-- | WWW/Library/Implementation/tcp.h | 16 | ||||
-rw-r--r-- | build-slang.com | 4 | ||||
-rw-r--r-- | lynx.cfg | 10 | ||||
-rw-r--r-- | lynx_help/Lynx_users_guide.html | 27 | ||||
-rw-r--r-- | lynx_help/keystroke_commands/keystroke_help.html | 2 | ||||
-rw-r--r-- | lynx_help/keystroke_commands/other_help.html | 5 | ||||
-rw-r--r-- | samples/lynx.cfg | 10 | ||||
-rw-r--r-- | src/HTML.c | 9 | ||||
-rw-r--r-- | src/HTML.h | 1 | ||||
-rw-r--r-- | src/LYKeymap.c | 3 | ||||
-rw-r--r-- | src/LYKeymap.h | 91 | ||||
-rw-r--r-- | src/LYMail.c | 48 | ||||
-rw-r--r-- | src/LYMain.c | 2 | ||||
-rw-r--r-- | src/LYMainLoop.c | 64 | ||||
-rw-r--r-- | userdefs.h | 8 |
22 files changed, 453 insertions, 181 deletions
diff --git a/CHANGES b/CHANGES index 50137901..16919c24 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,43 @@ +--- Release of Lynx2-6FM as Lynx v2.7 (February 15, 1997) --- +======================================================================= +1997-02-15 +* Release of Lynx2-6FM as Lynx v2.7. - FM +* Included -Ae when compiling the Implementation modules for the snake3 + target. - FM +1997-02-14 +* Mods to issue an alert about a BASE tag not having an absolute URL only + once per document. - FM +* Added code for appending LYNX_SIG_FILE to email messages as well as to + news posts or followups, and updated the Users Guide accordingly. - FM +* Updated build-slang.com. - FM +1997-02-12 +* Fixed some problems in the code for using a hookless Lynx image with + snew_proxy, snewspost_proxy, and snewsreply_proxy set to + "nntp://host:port/" so that it uses Tom Zerucha's (tz@execpc.com) + daemon which handles the SSL communications on behalf of the Lynx + image. Also polished up all of the news gateway code, and added + comments for the benefit of new developers. - FM +* Added an ECGOTO command mapped by default to 'G', complementary to the + GOTO command (default 'g'), to edit the current document's URL and then + go to it. Using case-sensitive letters with different command definitions + ensures that both will appear with their brief explanations in the 'k'eymap + listing. For ECGOTO, Control-G, failure to modify the URL, or complete + deletion of it, all act as a cancel. If the current document has POST + content associated with it, a warning will be issued before offering the + URL to edit. The POST content is retained if the modification merely + involves a change in fragment for the URL. Otherwise, the modified URL + (if it has an http scheme) will be submitted with method GET and no POST + content. If the ECGOTO command is not cancelled, or not simply a fragment + change, the modified URL will be added to the 'g'oto buffer, and can be + re-accessed, to edit further, via the GOTO command. See the updated online + 'h'elp for more information. - FM +1997-02-10 +* Amplified the comments concerning deletion of prototypes for MultiNet + socket library functions as they get added to MultiNet's own headers + in newer versions of it's socket library. - FM +* Added a missing fclose() in post_article() of HTNews.c, and added code + to delete the temporary file there, so it's gone as soon as we're done + with it. - FM 02-09-97 * Enhanced the Set-Cookie header parser to handle values that contain spaces but were not enclosed in double-quotes, and to use such diff --git a/LYMessages_en.h b/LYMessages_en.h index 5c5c042b..a5ab46ed 100644 --- a/LYMessages_en.h +++ b/LYMessages_en.h @@ -288,6 +288,8 @@ #define EDIT_CURRENT_GOTO "Edit the current Goto URL: " #define EDIT_THE_PREV_GOTO "Edit the previous Goto URL: " #define EDIT_A_PREV_GOTO "Edit a previous Goto URL: " +#define CURRENT_DOC_HAS_POST_DATA "Current document has POST data." +#define EDIT_CURDOC_URL "Edit this document's URL: " #define ENTER_DATABASE_QUERY "Enter a database query: " #define ENTER_WHEREIS_QUERY "Enter a whereis query: " #define EDIT_CURRENT_QUERY "Edit the current query: " diff --git a/Makefile b/Makefile index d2b6ed27..87fd9fa1 100644 --- a/Makefile +++ b/Makefile @@ -500,10 +500,10 @@ snake2-slang: # Lynx will compile with the purchased cc compiler added to HP-UX. # contributed by Andy Finkenstadt (genie@panix.com) -# Note that HP/UX 10.10 apparently has a broken select() in libcurses.a -# and will malfunction with Lynx. See the PROBLEMS file. +# Note that initial releases of HP/UX 10.10 have a broken select() in +# libcurses.a and will malfunction with Lynx. See the PROBLEMS file. snake3: - cd WWW/Library/snake; $(MAKE) CC="cc" LYFLAGS="$(SITE_LYDEFS)" + cd WWW/Library/snake; $(MAKE) CC="cc" LYFLAGS="-Ae $(SITE_LYDEFS)" cd src; $(MAKE) all CC="cc" MCFLAGS="-O -Ae -DFANCY_CURSES -DUNIX \ -DSNAKE -I../$(WWWINC) $(SITE_DEFS)" \ LIBS="-lcurses -ltermcap \ @@ -511,7 +511,7 @@ snake3: WWWLIB="../WWW/Library/snake/libwww.a" snake3-slang: - cd WWW/Library/snake; $(MAKE) CC="cc" LYFLAGS="$(SITE_LYDEFS)" + cd WWW/Library/snake; $(MAKE) CC="cc" LYFLAGS="-Ae $(SITE_LYDEFS)" cd src; $(MAKE) all CC="cc" MCFLAGS="-O -Ae -DUSE_SLANG -DUNIX \ -DSNAKE -I../$(WWWINC) $(SITE_DEFS)" \ LIBS="-lcurses -ltermcap \ diff --git a/WWW/Library/Implementation/HTFinger.c b/WWW/Library/Implementation/HTFinger.c index db9dc3dc..d00b57cb 100644 --- a/WWW/Library/Implementation/HTFinger.c +++ b/WWW/Library/Implementation/HTFinger.c @@ -212,18 +212,22 @@ PRIVATE int response ARGS5( */ p = l = line; while (*l) { - if (strncmp (l, "news:", 5) && - strncmp (l, "snews://", 8) && - strncmp (l, "nntp://", 7) && - strncmp (l, "ftp://", 6) && - strncmp (l, "file:/", 6) && - strncmp (l, "finger://", 9) && - strncmp (l, "http://", 7) && - strncmp (l, "https://", 8) && - strncmp (l, "wais://", 7) && - strncmp (l, "mailto:", 7) && - strncmp (l, "cso://", 6) && - strncmp (l, "gopher://", 9)) + if (strncmp(l, "news:", 5) && + strncmp(l, "snews://", 8) && + strncmp(l, "nntp://", 7) && + strncmp(l, "snewspost:", 10) && + strncmp(l, "snewsreply:", 11) && + strncmp(l, "newspost:", 9) && + strncmp(l, "newsreply:", 10) && + strncmp(l, "ftp://", 6) && + strncmp(l, "file:/", 6) && + strncmp(l, "finger://", 9) && + strncmp(l, "http://", 7) && + strncmp(l, "https://", 8) && + strncmp(l, "wais://", 7) && + strncmp(l, "mailto:", 7) && + strncmp(l, "cso://", 6) && + strncmp(l, "gopher://", 9)) PUTC(*l++); else { StrAllocCopy(href, l); diff --git a/WWW/Library/Implementation/HTGopher.c b/WWW/Library/Implementation/HTGopher.c index 6eb93764..84fc9e9a 100644 --- a/WWW/Library/Implementation/HTGopher.c +++ b/WWW/Library/Implementation/HTGopher.c @@ -1365,18 +1365,22 @@ PRIVATE int generate_cso_report ARGS2( l++; i += 4; buf[i] = '\0'; - } else if (strncmp (l, "news:", 5) && - strncmp (l, "snews://", 8) && - strncmp (l, "nntp://", 7) && - strncmp (l, "ftp://", 6) && - strncmp (l, "file:/", 6) && - strncmp (l, "finger://", 9) && - strncmp (l, "http://", 7) && - strncmp (l, "https://", 8) && - strncmp (l, "wais://", 7) && - strncmp (l, "mailto:", 7) && - strncmp (l, "cso://", 6) && - strncmp (l, "gopher://", 9)) { + } else if (strncmp(l, "news:", 5) && + strncmp(l, "snews://", 8) && + strncmp(l, "nntp://", 7) && + strncmp(l, "snewspost:", 10) && + strncmp(l, "snewsreply:", 11) && + strncmp(l, "newspost:", 9) && + strncmp(l, "newsreply:", 10) && + strncmp(l, "ftp://", 6) && + strncmp(l, "file:/", 6) && + strncmp(l, "finger://", 9) && + strncmp(l, "http://", 7) && + strncmp(l, "https://", 8) && + strncmp(l, "wais://", 7) && + strncmp(l, "mailto:", 7) && + strncmp(l, "cso://", 6) && + strncmp(l, "gopher://", 9)) { buf[i++] = *l++; buf[i] = '\0'; } else { @@ -1416,18 +1420,22 @@ PRIVATE int generate_cso_report ARGS2( l++; i += 4; buf[i] = '\0'; - } else if (strncmp (l, "news:", 5) && - strncmp (l, "snews://", 8) && - strncmp (l, "nntp://", 7) && - strncmp (l, "ftp://", 6) && - strncmp (l, "file:/", 6) && - strncmp (l, "finger://", 9) && - strncmp (l, "http://", 7) && - strncmp (l, "https://", 8) && - strncmp (l, "wais://", 7) && - strncmp (l, "mailto:", 7) && - strncmp (l, "cso://", 6) && - strncmp (l, "gopher://", 9)) { + } else if (strncmp(l, "news:", 5) && + strncmp(l, "snews://", 8) && + strncmp(l, "nntp://", 7) && + strncmp(l, "snewspost:", 10) && + strncmp(l, "snewsreply:", 11) && + strncmp(l, "newspost:", 9) && + strncmp(l, "newsreply:", 10) && + strncmp(l, "ftp://", 6) && + strncmp(l, "file:/", 6) && + strncmp(l, "finger://", 9) && + strncmp(l, "http://", 7) && + strncmp(l, "https://", 8) && + strncmp(l, "wais://", 7) && + strncmp(l, "mailto:", 7) && + strncmp(l, "cso://", 6) && + strncmp(l, "gopher://", 9)) { buf[i++] = *l++; buf[i] = '\0'; } else { diff --git a/WWW/Library/Implementation/HTML.h b/WWW/Library/Implementation/HTML.h index 23d89e17..c4bd3caf 100644 --- a/WWW/Library/Implementation/HTML.h +++ b/WWW/Library/Implementation/HTML.h @@ -113,6 +113,7 @@ struct _HTStructured { BOOL inA; BOOL inAPPLET; BOOL inAPPLETwithP; + BOOL inBadBASE; BOOL inBadHTML; BOOL inBASE; BOOL inBoldA; diff --git a/WWW/Library/Implementation/HTNews.c b/WWW/Library/Implementation/HTNews.c index 5a86151e..1281d2e4 100644 --- a/WWW/Library/Implementation/HTNews.c +++ b/WWW/Library/Implementation/HTNews.c @@ -22,9 +22,6 @@ /* this define should be in HTFont.h :( */ #define HT_NON_BREAK_SPACE ((char)1) /* For now */ -#define CR FROMASCII('\015') /* Must be converted to ^M for transmission */ -#define LF FROMASCII('\012') /* Must be converted to ^J for transmission */ - #define NEWS_PORT 119 /* See rfc977 */ #define SNEWS_PORT 563 /* See Lou Montulli */ #define APPEND /* Use append methods */ @@ -65,6 +62,7 @@ extern BOOLEAN LYListNewsNumbers; extern BOOLEAN LYListNewsDates; extern HTCJKlang HTCJK; extern int interrupted_in_htgetcharacter; +extern BOOL using_proxy; /* Are we using an NNTP proxy? */ /* ** Module-wide variables. @@ -86,6 +84,13 @@ PRIVATE int diagnostic; /* level: 0=none 2=source */ #define START(e) (*targetClass.start_element)(target, e, 0, 0, 0) #define END(e) (*targetClass.end_element)(target, e, 0) +PRIVATE void free_news_globals NOARGS +{ + FREE(HTNewsHost); + FREE(NewsHost); + FREE(NewsHREF); +} + PUBLIC CONST char * HTGetNewsHost NOARGS { return HTNewsHost; @@ -117,13 +122,21 @@ PUBLIC void HTSetNewsHost ARGS1(CONST char *, value) PRIVATE BOOL initialized = NO; PRIVATE BOOL initialize NOARGS { + char *cp = NULL; + /* ** Get name of Host. */ #ifdef NeXTStep - if ((HTNewsHost = NXGetDefaultValue("WorldWideWeb","NewsHost"))==0) - if ((HTNewsHost = NXGetDefaultValue("News","NewsHost")) == 0) - HTNewsHost = DEFAULT_NEWS_HOST; + if ((cp = NXGetDefaultValue("WorldWideWeb","NewsHost"))==0) { + if ((cp = NXGetDefaultValue("News","NewsHost")) == 0) { + StrAllocCopy(HTNewsHost, DEFAULT_NEWS_HOST); + } + } + if (cp) { + StrAllocCopy(HTNewsHost, cp); + cp = NULL; + } #else if (getenv("NNTPSERVER")) { StrAllocCopy(HTNewsHost, (char *)getenv("NNTPSERVER")); @@ -143,11 +156,11 @@ PRIVATE BOOL initialize NOARGS } } if (!HTNewsHost) - HTNewsHost = DEFAULT_NEWS_HOST; + StrAllocCopy(HTNewsHost, DEFAULT_NEWS_HOST); #endif /* NeXTStep */ s = -1; /* Disconnected */ - + atexit(free_news_globals); return YES; } @@ -291,7 +304,7 @@ PRIVATE char * author_name ARGS1 (char *,email) ** ** For example, returns "montulli@spaced.out.galaxy.net" if given any of ** " Lou Montulli <montulli@spaced.out.galaxy.net> " -** or " montulli@spacedout.galaxy.net ( Lou "The Stud" Montulli ) " +** or " montulli@spaced.out.galaxy.net ( Lou "The Stud" Montulli ) " */ PRIVATE char * author_address ARGS1(char *,email) { @@ -407,7 +420,7 @@ PRIVATE void start_list ARGS1(int, seqnum) ** On entry, ** HT has a selection of zero length at the end. ** text points to the text to be put into the file, 0 terminated. -** addr points to the hypertext refernce address, +** addr points to the hypertext reference address, ** terminated by white space, comma, NULL or '>' */ PRIVATE void write_anchor ARGS2(CONST char *,text, CONST char *,addr) @@ -609,6 +622,13 @@ PRIVATE void post_article ARGS1( blen = llen; } } + fclose(fd); +#ifdef VMS + while (remove(postfile) == 0) + ; /* loop through all versions */ +#else + remove(postfile); +#endif /* VMS */ /* ** Send the nntp EOF and get the server's response. - FM @@ -983,18 +1003,22 @@ PRIVATE int read_article NOARGS p += 7; *p = 0; while (*l) { - if (strncmp (l, "news:", 5) && - strncmp (l, "snews://", 8) && - strncmp (l, "nntp://", 7) && - strncmp (l, "ftp://", 6) && - strncmp (l, "file:/", 6) && - strncmp (l, "finger://", 9) && - strncmp (l, "http://", 7) && - strncmp (l, "https://", 8) && - strncmp (l, "wais://", 7) && - strncmp (l, "mailto:", 7) && - strncmp (l, "cso://", 6) && - strncmp (l, "gopher://", 9)) + if (strncmp(l, "news:", 5) && + strncmp(l, "snews://", 8) && + strncmp(l, "nntp://", 7) && + strncmp(l, "snewspost:", 10) && + strncmp(l, "snewsreply:", 11) && + strncmp(l, "newspost:", 9) && + strncmp(l, "newsreply:", 10) && + strncmp(l, "ftp://", 6) && + strncmp(l, "file:/", 6) && + strncmp(l, "finger://", 9) && + strncmp(l, "http://", 7) && + strncmp(l, "https://", 8) && + strncmp(l, "wais://", 7) && + strncmp(l, "mailto:", 7) && + strncmp(l, "cso://", 6) && + strncmp(l, "gopher://", 9)) PUTC (*l++); else { StrAllocCopy(href, l); @@ -1018,18 +1042,22 @@ PRIVATE int read_article NOARGS } } while (*l) { /* Last bit of the line */ - if (strncmp (l, "news:", 5) && - strncmp (l, "snews://", 8) && - strncmp (l, "nntp://", 7) && - strncmp (l, "ftp://", 6) && - strncmp (l, "file:/", 6) && - strncmp (l, "finger://", 9) && - strncmp (l, "http://", 7) && - strncmp (l, "https://", 8) && - strncmp (l, "wais://", 7) && - strncmp (l, "mailto:", 7) && - strncmp (l, "cso://", 6) && - strncmp (l, "gopher://", 9)) + if (strncmp(l, "news:", 5) && + strncmp(l, "snews://", 8) && + strncmp(l, "nntp://", 7) && + strncmp(l, "snewspost:", 10) && + strncmp(l, "snewsreply:", 11) && + strncmp(l, "newspost:", 9) && + strncmp(l, "newsreply:", 10) && + strncmp(l, "ftp://", 6) && + strncmp(l, "file:/", 6) && + strncmp(l, "finger://", 9) && + strncmp(l, "http://", 7) && + strncmp(l, "https://", 8) && + strncmp(l, "wais://", 7) && + strncmp(l, "mailto:", 7) && + strncmp(l, "cso://", 6) && + strncmp(l, "gopher://", 9)) PUTC (*l++); else { StrAllocCopy(href, l); @@ -1091,10 +1119,10 @@ PRIVATE int read_list ARGS1(char *, arg) } /* - ** Read in the HEADer of the article. + ** Read the server's reply. ** - ** The header fields are either ignored, - ** or formatted and put into the text. + ** The lines are scanned for newsgroup + ** names and descriptions. */ START(HTML_HEAD); PUTC('\n'); @@ -1140,6 +1168,9 @@ PRIVATE int read_list ARGS1(char *, arg) START(HTML_DT); PUTS(&line[1]); } + } else if (line[0] == '#') { /* Comment? */ + p = line; /* Restart at beginning */ + continue; } else { /* ** Normal lines are scanned for references to newsgroups. @@ -1613,6 +1644,8 @@ PUBLIC int HTLoadNews ARGS4( int first, last; /* First and last articles asked for */ char *cp; char *ListArg = NULL; + char *ProxyHost = NULL; + char *ProxyHREF = NULL; char *postfile = NULL; diagnostic = (format_out == WWW_SOURCE || /* set global flag */ @@ -1644,18 +1677,20 @@ PUBLIC int HTLoadNews ARGS4( ** xxxxx News group (no "@") ** group/n1-n2 Articles n1 to n2 in group */ - post_wanted = (strstr(arg, "newspost:") != NULL); - reply_wanted = ((!post_wanted) && + spost_wanted = (strstr(arg, "snewspost:") != NULL); + sreply_wanted = (!(spost_wanted) && + strstr(arg, "snewsreply:") != NULL); + post_wanted = (!(spost_wanted || sreply_wanted) && + strstr(arg, "newspost:") != NULL); + reply_wanted = (!(spost_wanted || sreply_wanted || + post_wanted) && strstr(arg, "newsreply:") != NULL); - spost_wanted = (!(post_wanted || reply_wanted) && - strstr(arg, "snewspost:") != NULL); - sreply_wanted = (!(post_wanted || reply_wanted || - spost_wanted) && - strstr(arg, "newsreply:") != NULL); - group_wanted = (!(post_wanted || reply_wanted || - spost_wanted || sreply_wanted) && + group_wanted = (!(spost_wanted || sreply_wanted || + post_wanted || reply_wanted) && strchr(arg, '@') == NULL) && (strchr(arg, '*') == NULL); - list_wanted = (!(post_wanted || reply_wanted) && + list_wanted = (!(spost_wanted || sreply_wanted || + post_wanted || reply_wanted || + group_wanted) && strchr(arg, '@') == NULL) && (strchr(arg, '*') != NULL); if (!strncasecomp(arg, "snewspost:", 10) || @@ -1806,12 +1841,15 @@ PUBLIC int HTLoadNews ARGS4( ** or followups. - TZ & FM */ if (!strncasecomp(p1, "snews:", 6) || - !strncasecomp(p1, "snewpost:", 10) || + !strncasecomp(p1, "snewspost:", 10) || !strncasecomp(p1, "snewsreply:", 11)) { - if ((cp = HTParse(p1, "", PARSE_HOST)) != NULL && *cp != '\0') + StrAllocCopy(ProxyHost, NewsHost); + if ((cp = HTParse(p1, "", PARSE_HOST)) != NULL && *cp != '\0') { sprintf(command, "snews://%.250s", cp); - else + StrAllocCopy(NewsHost, cp); + } else { sprintf(command, "snews://%.250s", NewsHost); + } command[258] = '\0'; FREE(cp); sprintf(proxycmd, "GET %.251s%c%c%c%c", command, CR, LF, CR, LF); @@ -1820,6 +1858,7 @@ PUBLIC int HTLoadNews ARGS4( "HTNews: Proxy command is '%.*s'\n", (strlen(proxycmd) - 4), proxycmd); strcat(command, "/"); + StrAllocCopy(ProxyHREF, NewsHREF); StrAllocCopy(NewsHREF, command); if (spost_wanted || sreply_wanted) { /* @@ -1890,7 +1929,7 @@ PUBLIC int HTLoadNews ARGS4( { char * p = command + strlen(command); /* - ** Teminate command with CRLF, as in RFC 977. + ** Terminate command with CRLF, as in RFC 977. */ *p++ = CR; /* Macros to be correct on Mac */ *p++ = LF; @@ -1901,6 +1940,8 @@ PUBLIC int HTLoadNews ARGS4( if (!*arg) { FREE(NewsHREF); + FREE(ProxyHost); + FREE(ProxyHREF); FREE(ListArg); return NO; /* Ignore if no name */ } @@ -1921,10 +1962,13 @@ PUBLIC int HTLoadNews ARGS4( if (s < 0) { /* CONNECTING to news host */ char url[260]; - if (!strcmp(NewsHREF, "news:")) + if (!strcmp(NewsHREF, "news:")) { sprintf (url, "lose://%.251s/", NewsHost); - else + } else if (ProxyHREF) { + sprintf (url, "%.259s", ProxyHREF); + } else { sprintf (url, "%.259s", NewsHREF); + } if (TRACE) fprintf (stderr, "News: doing HTDoConnect on '%s'\n", url); @@ -1944,6 +1988,8 @@ PUBLIC int HTLoadNews ARGS4( (*targetClass._abort)(target, NULL); FREE(NewsHost); FREE(NewsHREF); + FREE(ProxyHost); + FREE(ProxyHREF); FREE(ListArg); if (postfile) { #ifdef VMS @@ -1968,6 +2014,8 @@ PUBLIC int HTLoadNews ARGS4( sprintf(message, "Could not access %s.", NewsHost); FREE(NewsHost); FREE(NewsHREF); + FREE(ProxyHost); + FREE(ProxyHREF); FREE(ListArg); if (postfile) { #ifdef VMS @@ -2002,6 +2050,8 @@ PUBLIC int HTLoadNews ARGS4( (*targetClass._abort)(target, NULL); FREE(NewsHost); FREE(NewsHREF); + FREE(ProxyHost); + FREE(ProxyHREF); FREE(ListArg); if (postfile) { #ifdef VMS @@ -2029,6 +2079,11 @@ PUBLIC int HTLoadNews ARGS4( spost_wanted || sreply_wanted) { HTAlert("Cannot POST to this host."); FREE(NewsHREF); + if (ProxyHREF) { + StrAllocCopy(NewsHost, ProxyHost); + FREE(ProxyHost); + FREE(ProxyHREF); + } FREE(ListArg); if (postfile) { #ifdef VMS @@ -2050,6 +2105,11 @@ PUBLIC int HTLoadNews ARGS4( if (!HTCanPost) { HTAlert("Cannot POST to this host."); FREE(NewsHREF); + if (ProxyHREF) { + StrAllocCopy(NewsHost, ProxyHost); + FREE(ProxyHost); + FREE(ProxyHREF); + } FREE(ListArg); if (postfile) { #ifdef VMS @@ -2070,6 +2130,11 @@ PUBLIC int HTLoadNews ARGS4( if (postfile == NULL) { HTProgress("Cancelled!"); FREE(NewsHREF); + if (ProxyHREF) { + StrAllocCopy(NewsHost, ProxyHost); + FREE(ProxyHost); + FREE(ProxyHREF); + } FREE(ListArg); return(HT_NOT_LOADED); } @@ -2077,9 +2142,9 @@ PUBLIC int HTLoadNews ARGS4( /* ** Ensure reader mode, but don't bother checking the ** status for anything but HT_INERRUPTED, because if - ** if the reader mode command is not needed, the server - ** probably return a 500, which is irrelevant at this - ** point. - FM + ** the reader mode command is not needed, the server + ** probably return a 500, which is irrelevant at + ** this point. - FM */ char buffer[20]; @@ -2112,7 +2177,8 @@ Send_NNTP_command: s = -1; /* ** Message might be a leftover "Timeout-disconnected", - ** so try again if retries is not exhausted. + ** so try again if the retries maximum has not been + ** reached. */ continue; } @@ -2123,9 +2189,18 @@ Send_NNTP_command: if (post_wanted || reply_wanted || spost_wanted || sreply_wanted) { if (status != 340) { HTAlert("Cannot POST to this host."); + if (postfile) { +#ifdef VMS + while (remove(postfile) == 0) + ; /* loop through all versions */ +#else + remove(postfile); +#endif /* VMS */ + } } else { post_article(postfile); } + FREE(postfile); status = HT_NOT_LOADED; } else if (list_wanted) { _HTProgress("Reading list of available newsgroups."); @@ -2159,6 +2234,11 @@ Send_NNTP_command: spost_wanted || sreply_wanted)) (*targetClass._free)(target); FREE(NewsHREF); + if (ProxyHREF) { + StrAllocCopy(NewsHost, ProxyHost); + FREE(ProxyHost); + FREE(ProxyHREF); + } FREE(ListArg); if (postfile) { #ifdef VMS @@ -2181,6 +2261,11 @@ Send_NNTP_command: spost_wanted || sreply_wanted)) (*targetClass._abort)(target, NULL); FREE(NewsHREF); + if (ProxyHREF) { + StrAllocCopy(NewsHost, ProxyHost); + FREE(ProxyHost); + FREE(ProxyHREF); + } FREE(ListArg); if (postfile) { #ifdef VMS diff --git a/WWW/Library/Implementation/tcp.h b/WWW/Library/Implementation/tcp.h index b67a1510..d4b00b38 100644 --- a/WWW/Library/Implementation/tcp.h +++ b/WWW/Library/Implementation/tcp.h @@ -127,7 +127,7 @@ VAX/VMS CMU_TCP Available via FTP from sacusr.mp.usbr.gov SOCKETSHR Eckhart Meyer's interface to NETLIB WIN_TCP From Wollongong, now GEC software. - MULTINET From SRI, now from TGV Inv. + MULTINET From SRI, became TGV, then Cisco. DECNET Cern's TCP socket emulation over DECnet The last three do not interfere with the @@ -175,8 +175,10 @@ VAX/VMS #undef IOCTL #undef SOCKET_ERRNO /* -** Remove these socket_foo() prototypes if -** MultiNet someday actually does this. - FM +** Delete these socket_foo() prototypes as MultiNet adds them +** to it's socket library headers. Compiler warnings due to +** the absence of arguments in the generic prototypes here will +** include the names of those which can be deleted. - FM */ extern int socket_read(); extern int socket_write(); @@ -224,8 +226,12 @@ extern int socket_ioctl(); #ifdef MULTINET /* Include from standard Multinet directories */ /* -** Remove these multinet_foo() and associated prototypes -** if MultiNet someday actually does this. - FM +** Delete any of these multinet_foo() and associated prototypes +** as MultiNet adds them to its socket library headers. You'll +** get compiler warnings about them, due the absence of arguments +** in the generic prototyping here, and the warnings will include +** the names of the functions whose prototype entries can be +** deleted here. - FM */ extern int multinet_accept(); extern int multinet_bind(); diff --git a/build-slang.com b/build-slang.com index ae7d0fdf..63b38d66 100644 --- a/build-slang.com +++ b/build-slang.com @@ -9,7 +9,7 @@ $! object library does not already exist. $!========================================================================= $! NOTE: Set SLANGINC to the location of your slang.h and slcurses.h, $! ==== and SLANGLIB to the location of your slang.olb (can be relative -$! to the lynx2-6.src subdirectory of this distribution): +$! to the lynx2-7.src subdirectory of this distribution): $! $! SLANGINC = "[-.slang.src]" $! SLANGLIB = "[-.slang.src]" @@ -194,6 +194,7 @@ $ cc LYCgi $ cc LYCharSets $ cc LYCharUtils $ cc LYClean +$ cc LYCookie $ cc LYCurses $ cc LYDownload $ cc LYEdit @@ -236,6 +237,7 @@ LYCgi.obj, - LYCharSets.obj, - LYCharUtils.obj, - LYClean.obj, - +LYCookie.obj, - LYCurses.obj, - LYDownload.obj, - LYEdit.obj, - diff --git a/lynx.cfg b/lynx.cfg index 90b4cff6..ffb31ee9 100644 --- a/lynx.cfg +++ b/lynx.cfg @@ -515,10 +515,11 @@ CHARACTER_SET:ISO Latin 1 #NEWS_POSTING:TRUE # LYNX_SIG_FILE defines the name of a file containing a signature which -# can be appended to news postings or followups. The user will be prompted -# whether to append it. It is sought in the home directory. If it is in -# a subdirectory, begin it with a dot-slash (e.g., ./lynx/.lynxsig). The -# definition is set in userdefs.h and can be changed here. +# can be appended to email messages and news postings or followups. The +# user will be prompted whether to append it. It is sought in the home +# directory. If it is in a subdirectory, begin it with a dot-slash +# (e.g., ./lynx/.lynxsig). The definition is set in userdefs.h and can +# be changed here. # #LYNX_SIG_FILE:.lynxsig @@ -1209,6 +1210,7 @@ MINIMAL_COMMENTS:TRUE #KEYMAP:0x102:ACTIVATE # Select the current link #KEYMAP:0x109:ACTIVATE # Function key Do - Select the current link #KEYMAP:g:GOTO # Goto a random URL +#KEYMAP:G:ECGOTO # Edit the current document's URL and go to it #KEYMAP:H:HELP # Show default help screen #KEYMAP:0x108:HELP # Function key Help - Show default help screen #KEYMAP:i:INDEX # Show default index diff --git a/lynx_help/Lynx_users_guide.html b/lynx_help/Lynx_users_guide.html index 0c9dd4b6..3486ebfe 100644 --- a/lynx_help/Lynx_users_guide.html +++ b/lynx_help/Lynx_users_guide.html @@ -732,14 +732,17 @@ address will be filled in automatically. After entering the above information, if you have an editor defined in the <em>Options Menu</em> and you are not an anonymous user then your specified editor will be spawned for you so that you can enter your message. If you do not have -an editor defined or you are an anonymous user, a simple line mode input +an editor defined or you are an anonymous user, a simple line mode input scheme will allow you to enter your message. <p>To finish sending the message, exit your spawned editor or, if you are using the simple line mode input scheme, type a '<em>.</em>' (period) on a line by itself. You will be asked a final time whether to send the -message. If you press '<em>y</em>' then the message will be sent, if you -press '<em>n</em>' the message will be deleted. [<A HREF="#TOC">ToC</A>] +message. If you press '<em>y</em>', you will be prompted whether to +append your signature file if one was defined in lynx.cfg and is accessible, +and then the message will be sent, whereas if you press '<em>n</em>' the +message will be deleted. Entering Control-G in response to any prompts +also will cancel the mailing.[<A HREF="#TOC">ToC</A>] <h2><A NAME="14"><em>USENET News posting</em></A></h2> @@ -934,9 +937,25 @@ commands. <dd>The '<em>g</em>' command allows any URL to be viewed. Pressing the '<em>g</em>' command will bring up a prompt asking for a URL. Type in the URL that you wish to view. All previously entered - Goto URLs are saved in a circular buffer, and be accessed at + goto URLs are saved in a circular buffer, and can be accessed at the prompt by pressing the <em>up-arrow</em> or <em>down-arrow</em> keys. + <dt><em>G</em> + <dd>The '<em>G</em>' command allows you to edit the URL of the + current document and then use that as a goto URL. Pressing + the '<em>G</em>' command will bring up a prompt asking you + to edit the current document's URL. If you do not modify + it, or completely delete it, or enter Control-G, the command + will be cancelled. If the current document has POST content + associated with it, an Alert will be issued. If you do edit + that URL, and it does not simply involve a fragment change + (for seeking a position in the current document), the modified + URL will be submitted with method GET and no POST content. If + a modification of the current document's URL results in a + submission, that modified URL will be entered into the circular + buffer for goto URLs, and can be accessed for further + modification via the '<em>g</em>' command. + <dt><em>=</em> <dd>The '<em>=</em>' command shows information about the current document and the currently selected link if there is one. The diff --git a/lynx_help/keystroke_commands/keystroke_help.html b/lynx_help/keystroke_commands/keystroke_help.html index a94d1c96..8e04b767 100644 --- a/lynx_help/keystroke_commands/keystroke_help.html +++ b/lynx_help/keystroke_commands/keystroke_help.html @@ -45,6 +45,8 @@ e - Edit the current file g - Goto a user specified <a href="../lynx_url_support.html">URL</a> or file + G - Edit the current document's URL and use that + as a goto URL. i - Show an index of documents j - Execute a jump operation k - Show a list of key mappings diff --git a/lynx_help/keystroke_commands/other_help.html b/lynx_help/keystroke_commands/other_help.html index 9891650a..ab18bffb 100644 --- a/lynx_help/keystroke_commands/other_help.html +++ b/lynx_help/keystroke_commands/other_help.html @@ -22,7 +22,10 @@ button to download the reply to a form submission. g - Allows you to enter any <a href="http://www.ncsa.uiuc.edu/demoweb/url-primer.html">URL</a> or filename that - you wish to view. + you wish to view, and then <em>goto</em> it. + + G - Allows you to edit the current document's URL and use that + as a <em>goto</em> URL. ? or H - Hypertext help to explain how to navigate in Lynx and use its features. diff --git a/samples/lynx.cfg b/samples/lynx.cfg index 90b4cff6..ffb31ee9 100644 --- a/samples/lynx.cfg +++ b/samples/lynx.cfg @@ -515,10 +515,11 @@ CHARACTER_SET:ISO Latin 1 #NEWS_POSTING:TRUE # LYNX_SIG_FILE defines the name of a file containing a signature which -# can be appended to news postings or followups. The user will be prompted -# whether to append it. It is sought in the home directory. If it is in -# a subdirectory, begin it with a dot-slash (e.g., ./lynx/.lynxsig). The -# definition is set in userdefs.h and can be changed here. +# can be appended to email messages and news postings or followups. The +# user will be prompted whether to append it. It is sought in the home +# directory. If it is in a subdirectory, begin it with a dot-slash +# (e.g., ./lynx/.lynxsig). The definition is set in userdefs.h and can +# be changed here. # #LYNX_SIG_FILE:.lynxsig @@ -1209,6 +1210,7 @@ MINIMAL_COMMENTS:TRUE #KEYMAP:0x102:ACTIVATE # Select the current link #KEYMAP:0x109:ACTIVATE # Function key Do - Select the current link #KEYMAP:g:GOTO # Goto a random URL +#KEYMAP:G:ECGOTO # Edit the current document's URL and go to it #KEYMAP:H:HELP # Show default help screen #KEYMAP:0x108:HELP # Function key Help - Show default help screen #KEYMAP:i:INDEX # Show default index diff --git a/src/HTML.c b/src/HTML.c index dcdb5fbe..9ecfb095 100644 --- a/src/HTML.c +++ b/src/HTML.c @@ -498,7 +498,13 @@ PRIVATE void HTML_start_element ARGS5( StrAllocCopy(base, (char *)value[HTML_BASE_HREF]); if (!(url_type = LYLegitimizeHREF(me, (char**)&base, TRUE))) { - HTAlert(BASE_NOT_ABSOLUTE); + if (TRACE) + fprintf(stderr, + "HTML: BASE '%s' is not an absolute URL.\n", + (base ? base : "")); + if (me->inBadBASE == FALSE) + HTAlert(BASE_NOT_ABSOLUTE); + me->inBadBASE = TRUE; } /* @@ -5647,6 +5653,7 @@ PUBLIC HTStructured* HTML_new ARGS3( me->inA = FALSE; me->inAPPLET = FALSE; me->inAPPLETwithP = FALSE; + me->inBadBASE = FALSE; me->inBadHTML = FALSE; me->inBASE = FALSE; me->inBoldA = FALSE; diff --git a/src/HTML.h b/src/HTML.h index 23d89e17..c4bd3caf 100644 --- a/src/HTML.h +++ b/src/HTML.h @@ -113,6 +113,7 @@ struct _HTStructured { BOOL inA; BOOL inAPPLET; BOOL inAPPLETwithP; + BOOL inBadBASE; BOOL inBadHTML; BOOL inBASE; BOOL inBoldA; diff --git a/src/LYKeymap.c b/src/LYKeymap.c index 62382e44..af1e19de 100644 --- a/src/LYKeymap.c +++ b/src/LYKeymap.c @@ -89,7 +89,7 @@ LYK_DIRED_MENU, #endif /* DIRED_SUPPORT || VMS */ /* F */ -LYK_GOTO, +LYK_ECGOTO, /* G */ LYK_HELP, LYK_INDEX, LYK_JUMP, LYK_KEYMAP, @@ -420,6 +420,7 @@ PRIVATE struct rmap revmap[] = { { "PREV_DOC", "go back to the previous document" }, { "ACTIVATE", "go to the document given by the current link" }, { "GOTO", "go to a document given as a URL" }, +{ "ECGOTO", "edit the current document's URL and go to it" }, { "HELP", "display help on using the browser" }, { "INDEX", "display an index of potentially useful documents" }, { "NOCACHE", "force submission of form or link with no-cache" }, diff --git a/src/LYKeymap.h b/src/LYKeymap.h index 1ed08cf2..a06b7942 100644 --- a/src/LYKeymap.h +++ b/src/LYKeymap.h @@ -55,57 +55,58 @@ extern char override[]; #define LYK_PREV_DOC 31 #define LYK_ACTIVATE 32 #define LYK_GOTO 33 -#define LYK_HELP 34 -#define LYK_INDEX 35 -#define LYK_NOCACHE 36 -#define LYK_INTERRUPT 37 -#define LYK_MAIN_MENU 38 -#define LYK_OPTIONS 39 -#define LYK_INDEX_SEARCH 40 -#define LYK_WHEREIS 41 -#define LYK_NEXT 42 -#define LYK_COMMENT 43 -#define LYK_EDIT 44 -#define LYK_INFO 45 -#define LYK_PRINT 46 -#define LYK_ADD_BOOKMARK 47 -#define LYK_DEL_BOOKMARK 48 -#define LYK_VIEW_BOOKMARK 49 -#define LYK_VLINKS 50 -#define LYK_SHELL 51 -#define LYK_DOWNLOAD 52 -#define LYK_TRACE_TOGGLE 53 -#define LYK_IMAGE_TOGGLE 54 -#define LYK_INLINE_TOGGLE 55 -#define LYK_HEAD 56 -#define LYK_DO_NOTHING 57 -#define LYK_TOGGLE_HELP 58 -#define LYK_JUMP 59 -#define LYK_KEYMAP 60 -#define LYK_LIST 61 -#define LYK_TOOLBAR 62 -#define LYK_HISTORICAL 63 -#define LYK_MINIMAL 64 -#define LYK_SOFT_DQUOTES 65 -#define LYK_RAW_TOGGLE 66 -#define LYK_COOKIE_JAR 67 +#define LYK_ECGOTO 34 +#define LYK_HELP 35 +#define LYK_INDEX 36 +#define LYK_NOCACHE 37 +#define LYK_INTERRUPT 38 +#define LYK_MAIN_MENU 39 +#define LYK_OPTIONS 40 +#define LYK_INDEX_SEARCH 41 +#define LYK_WHEREIS 42 +#define LYK_NEXT 43 +#define LYK_COMMENT 44 +#define LYK_EDIT 45 +#define LYK_INFO 46 +#define LYK_PRINT 47 +#define LYK_ADD_BOOKMARK 48 +#define LYK_DEL_BOOKMARK 49 +#define LYK_VIEW_BOOKMARK 50 +#define LYK_VLINKS 51 +#define LYK_SHELL 52 +#define LYK_DOWNLOAD 53 +#define LYK_TRACE_TOGGLE 54 +#define LYK_IMAGE_TOGGLE 55 +#define LYK_INLINE_TOGGLE 56 +#define LYK_HEAD 57 +#define LYK_DO_NOTHING 58 +#define LYK_TOGGLE_HELP 59 +#define LYK_JUMP 60 +#define LYK_KEYMAP 61 +#define LYK_LIST 62 +#define LYK_TOOLBAR 63 +#define LYK_HISTORICAL 64 +#define LYK_MINIMAL 65 +#define LYK_SOFT_DQUOTES 66 +#define LYK_RAW_TOGGLE 67 +#define LYK_COOKIE_JAR 68 #ifdef VMS -#define LYK_DIRED_MENU 68 +#define LYK_DIRED_MENU 69 #endif /* VMS */ #ifdef DIRED_SUPPORT -#define LYK_DIRED_MENU 68 -#define LYK_CREATE 69 -#define LYK_REMOVE 70 -#define LYK_MODIFY 71 -#define LYK_TAG_LINK 72 -#define LYK_UPLOAD 73 -#define LYK_INSTALL 74 +#define LYK_DIRED_MENU 69 +#define LYK_CREATE 70 +#define LYK_REMOVE 71 +#define LYK_MODIFY 72 +#define LYK_TAG_LINK 73 +#define LYK_UPLOAD 74 +#define LYK_INSTALL 75 #endif /* DIRED_SUPPORT */ #ifdef NOT_USED -#define LYK_VERSION 75 -#define LYK_FORM_UP 76 -#define LYK_FORM_DOWN 77 +#define LYK_VERSION 76 +#define LYK_FORM_UP 77 +#define LYK_FORM_DOWN 78 #endif /* NOT_USED */ #endif /* LYKEYMAP_H */ diff --git a/src/LYMail.c b/src/LYMail.c index a0855064..0a2cc1c6 100644 --- a/src/LYMail.c +++ b/src/LYMail.c @@ -308,7 +308,7 @@ PUBLIC void mailform ARGS4( PUBLIC void mailmsg ARGS4(int,cur, char *,owner_address, char *,filename, char *,linkname) { - FILE *fd; + FILE *fd, *fp; char *address = NULL; char cmd[512], *cp, *cp0, *cp1; int i; @@ -349,7 +349,7 @@ PUBLIC void mailmsg ARGS4(int,cur, char *,owner_address, #ifdef UNIX #ifdef MMDF - sprintf(cmd, "%s -mlruxto,cc\\*",system_mail); + sprintf(cmd, "%s -mlruxto,cc\\*", system_mail); #else sprintf(cmd, "%s -t -oi", system_mail); #endif /* MMDF */ @@ -362,27 +362,32 @@ PUBLIC void mailmsg ARGS4(int,cur, char *,owner_address, fprintf(fd,"To: %s\n", address); fprintf(fd,"Subject: Lynx Error in %s\n", filename); fprintf(fd,"X-URL: %s\n", filename); - fprintf(fd,"X-Mailer: Lynx, Version %s\n\n",LYNX_VERSION); + fprintf(fd,"X-Mailer: Lynx, Version %s\n\n", LYNX_VERSION); #endif /* UNIX */ #ifdef VMS - sprintf(tmpfile,"%s%s",lynx_temp_space, "temp_mail.txt"); + sprintf(tmpfile, "%s%s", lynx_temp_space, "temp_mail.txt"); if ((fd = fopen(tmpfile,"w")) == NULL) { FREE(address); return; } - #endif /* VMS */ fprintf(fd, "The link %s :?: %s \n", links[cur].lname, links[cur].target); - fprintf(fd, "called \"%s\"\n",links[cur].hightext); + fprintf(fd, "called \"%s\"\n", links[cur].hightext); fprintf(fd, "in the file \"%s\" called \"%s\"", filename, linkname); fputs("\nwas requested but was not available.",fd); fputs("\n\nThought you might want to know.",fd); - fputs("\n\nThis message was automatically generated by\n",fd); - fprintf(fd,"Lynx ver. %s",LYNX_VERSION); + fputs("\n\nThis message was automatically generated by\n", fd); + fprintf(fd, "Lynx ver. %s", LYNX_VERSION); + if ((LynxSigFile != NULL) && + (fp = fopen(LynxSigFile, "r")) != NULL) { + while (fgets(cmd, sizeof(cmd), fp) != NULL) + fputs(cmd, fd); + fclose(fp); + } #ifdef UNIX pclose(fd); #endif /* UNIX */ @@ -451,7 +456,7 @@ PUBLIC void reply_by_mail ARGS3( char *, title) { char user_input[1000]; - FILE *fd; + FILE *fd, *fp; char *address = NULL; char *searchpart = NULL; char *body = NULL; @@ -468,7 +473,6 @@ PUBLIC void reply_by_mail ARGS3( #else char buf[512]; char *header = NULL; - FILE *fp; int n; #endif /* VMS */ @@ -1031,12 +1035,30 @@ PUBLIC void reply_by_mail ARGS3( while (TOUPPER(c) != 'Y' && TOUPPER(c) != 'N' && !term_letter && c != 7 && c != 3) c = LYgetch(); - - clear(); /* Clear the screen. */ - if (TOUPPER(c) != 'Y') { + clear(); /* clear the screen */ goto cleanup; } + if ((body == NULL && LynxSigFile != NULL) && + (fp = fopen(LynxSigFile, "r")) != NULL) { + LYStatusLine = (LYlines - 1); + _user_message(APPEND_SIG_FILE, LynxSigFile); + c = 0; + LYStatusLine = -1; + while (TOUPPER(c) != 'Y' && TOUPPER(c) != 'N' && + !term_letter && c != 7 && c != 3) + c = LYgetch(); + if (TOUPPER(c) == 'Y') { + if ((fd = fopen(tmpfile, "a")) != NULL) { + while (fgets(user_input, sizeof(user_input), fp) != NULL) { + fputs(user_input, fd); + } + fclose(fd); + } + } + fclose(fp); + } + clear(); /* Clear the screen. */ /* * Send the message. diff --git a/src/LYMain.c b/src/LYMain.c index 22d299a7..f621bf00 100644 --- a/src/LYMain.c +++ b/src/LYMain.c @@ -2047,7 +2047,7 @@ Output_Help_List: printf(" with the PREV_DOC command or from the History List\n"); printf(" -rlogin disable rlogins\n"); printf(" -selective require .www_browsable files to browse directories\n"); - printf(" -show_cursor toggles hiding of the curser in the lower right corner\n"); + printf(" -show_cursor toggles hiding of the cursor in the lower right corner\n"); printf(" -soft_dquotes toggles emulation of the old Netscape and Mosaic bug which\n"); printf(" treated '>' as a co-terminator for double-quotes and tags\n"); printf(" -source dump the source of the first file to stdout and exit\n"); diff --git a/src/LYMainLoop.c b/src/LYMainLoop.c index da7c818f..72e0d96c 100644 --- a/src/LYMainLoop.c +++ b/src/LYMainLoop.c @@ -2146,6 +2146,69 @@ new_cmd: /* } break; + case LYK_ECGOTO: /* edit current URL and go to to it */ + if (no_goto && !LYValidate) { + if (old_c != real_c) { + old_c = real_c; + _statusline(GOTO_DISALLOWED); + sleep(MessageSecs); + } + break; + } + + /* + * Save the current user_input_buffer string, + * and load the current document's address. + */ + StrAllocCopy(temp, user_input_buffer); + LYstrncpy(user_input_buffer, + curdoc.address, + (sizeof(user_input_buffer) - 1)); + + /* + * Warn the user if the current document has POST + * data associated with it. - FM + */ + if (curdoc.post_data) + HTAlert(CURRENT_DOC_HAS_POST_DATA); + + /* + * Offer the current document's URL for editing. - FM + */ + _statusline(EDIT_CURDOC_URL); + if (((ch = LYgetstr(user_input_buffer, VISIBLE, + sizeof(user_input_buffer), RECALL)) >= 0) && + user_input_buffer[0] != '\0' && + strcmp(user_input_buffer, curdoc.address)) { + LYTrimHead(user_input_buffer); + if (!strncasecomp(user_input_buffer, "lynxexec:", 9) || + !strncasecomp(user_input_buffer, "lynxprog:", 9)) { + /* + * The original implementations of these schemes expected + * white space without hex escaping, and did not check + * for hex escaping, so we'll continue to support that, + * until that code is redone in conformance with SGML + * principles. - FM + */ + HTUnEscapeSome(user_input_buffer, " \r\n\t"); + convert_to_spaces(user_input_buffer, TRUE); + } else { + collapse_spaces(user_input_buffer); + } + if (user_input_buffer[0] != '\0') { + goto check_goto_URL; + } + } + /* + * User cancelled via ^G, a full deletion, + * or not modifying the URL. - FM + */ + _statusline(CANCELLED); + sleep(InfoSecs); + strcpy(user_input_buffer, temp); + FREE(temp); + break; + case LYK_GOTO: /* 'g' to goto a random URL */ if (no_goto && !LYValidate) { if (old_c != real_c) { @@ -2307,6 +2370,7 @@ check_recall: } } +check_goto_URL: /* * If its not a URL then make it one. */ diff --git a/userdefs.h b/userdefs.h index 11ca6bdc..5dd9570a 100644 --- a/userdefs.h +++ b/userdefs.h @@ -654,10 +654,10 @@ /************************* * Define LYNX_SIG_FILE to the name of a file containing a signature which - * can be appended to news postings or followups. The user will be prompted - * whether to append it. It is sought in the home directory. If it is in - * a subdirectory, begin it with a dot-slash (e.g., ./lynx/.lynxsig). The - * definition here can be changed in lynx.cfg. + * can be appended to email messages and news postings or followups. The + * user will be prompted whether to append it. It is sought in the home + * directory. If it is in a subdirectory, begin it with a dot-slash + * (e.g., ./lynx/.lynxsig). The definition here can be changed in lynx.cfg. */ #define LYNX_SIG_FILE ".lynxsig" |