diff options
author | Thomas E. Dickey <dickey@invisible-island.net> | 1998-09-25 10:50:40 -0400 |
---|---|---|
committer | Thomas E. Dickey <dickey@invisible-island.net> | 1998-09-25 10:50:40 -0400 |
commit | 652c51a528c2cceab8a4ff02283ae854d0427678 (patch) | |
tree | e0e9b09748c5d361638f64cb5a7dd8815fb94277 | |
parent | 07e246c51644d9790f2eaf4001ff4ffd40e3274f (diff) | |
download | lynx-snapshots-652c51a528c2cceab8a4ff02283ae854d0427678.tar.gz |
snapshot of project "lynx", label v2-8-1pre_2
-rw-r--r-- | CHANGES | 40 | ||||
-rw-r--r-- | INSTALLATION | 6 | ||||
-rw-r--r-- | LYMessages_en.h | 10 | ||||
-rw-r--r-- | WWW/Library/Implementation/SGML.c | 22 | ||||
-rwxr-xr-x | cfg_defs.sh | 1 | ||||
-rw-r--r-- | docs/README.chartrans | 5 | ||||
-rw-r--r-- | lynx.cfg | 15 | ||||
-rw-r--r-- | lynx_help/Lynx_users_guide.html | 18 | ||||
-rw-r--r-- | lynx_help/keystrokes/option_help.html | 48 | ||||
-rw-r--r-- | lynx_help/lynx_help_main.html | 2 | ||||
-rw-r--r-- | makefile.in | 1 | ||||
-rw-r--r-- | src/GridText.c | 290 | ||||
-rw-r--r-- | src/HTML.c | 28 | ||||
-rw-r--r-- | src/LYCharSets.c | 97 | ||||
-rw-r--r-- | src/LYCharSets.h | 6 | ||||
-rw-r--r-- | src/LYDownload.c | 1 | ||||
-rw-r--r-- | src/LYGlobalDefs.h | 2 | ||||
-rw-r--r-- | src/LYLocal.c | 7 | ||||
-rw-r--r-- | src/LYMain.c | 19 | ||||
-rw-r--r-- | src/LYOptions.c | 8 | ||||
-rw-r--r-- | src/LYPrint.c | 71 | ||||
-rw-r--r-- | src/LYReadCFG.c | 35 | ||||
-rw-r--r-- | src/LYShowInfo.c | 15 | ||||
-rw-r--r-- | src/LYrcFile.c | 12 | ||||
-rw-r--r-- | userdefs.h | 4 |
25 files changed, 509 insertions, 254 deletions
diff --git a/CHANGES b/CHANGES index 60ab4bc9..b7b2854c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,32 @@ Changes since Lynx 2.8 release ================================================================================ +1998-09-25 (2.8.1pre.2) +* fixed forms submission charset: was broken by me in dev26 (HText_SubmitForm() + in GridText.c) - LP +* documentation updates for verbose images - LP +* minor fix for trace message in TrimHightext() -LP +* add compatibility with 2.8/2.7.2 lynx.cfg and (especially) .lynxrc - old + "character_set" parameter now acceptable - LP +* add OUTGOING_MAIL_CHARSET symbol to lynx.cfg to make mail more recognizable + by remote recipient, it may be "US-ASCII" for 7 bit approximation as the + safest case or any other value. If blank, use display character set + (default, compatibility). Currently implemented only for "subject" in + "print-to-email" - LP +* fix SGML.c so invalid characters are not dispalayed in hex UHHHH but just + omitted as already done for plain/text mode - LP +* fix download' suggested file name (8bit) - LP +* correct logic error in "Change Location" command, and allow "~" there in + addition to the existing "~/" prefix (reported by Ismael Cordeiro) - TD +* ifdef'd out "don't replace '\n' with ' ' if Chinese or Japanese" from dev.23, + with symbol EXP_JAPANESE_SPACES, FIX_JAPANESE_SPACES based on discussion with + HN, LP - TD +* correct missing '\' in generated sed-script for "make install-help" rule, + which changed a couple of "/html" substrings to ".html" (reported by BL) - TD +* modify cfg_defs.sh script to handle empty token in config.cache, e.g., a line + such as "foo=${foo=}" (reported by Philip Chong <pchong@boopsie.ml.org>) - TD +* modify so that lynx_cfg_infopage() and lynx_compile_opts() pages are not + invoked when Lynx is running -anonymous - TD 1998-09-22 (2.8.1pre.1) * correct logic error in parse_restrictions() which caused infinite loop, probably from changes in dev.8 (reported by HN) - TD @@ -23,8 +49,11 @@ Changes since Lynx 2.8 release * make download and print menus a little more compact in intermediate/advanced user modes - TD * correct filename shown in download menu - LP -* change behavior of configure --enable-forms-options switch so that both old - and new forms are available via a command-line toggle, "-forms_options" - LP +* change behavior of configure --enable-forms-options switch. By default, both + old and new options menu are available via a command-line toggle + "-forms_options" or lynx.cfg statement "FORMS_OPTIONS:TRUE/FALSE". Configure + --enable-forms-options now _disables_ old-style code, which is + ifdef'ed with "#ifndef EXP_FORMS_OPTIONS" - LP * add more pointer-checks in GridText.c so that "lynx LYNXDOWNLOAD://" does not crash (reported by Wilson Cheung) - TD * add special case to handle NNTPSERVER environment variable, which had been @@ -34,8 +63,11 @@ Changes since Lynx 2.8 release lines from lynx.cfg - LP, TD * use function wwwName to reduce clutter - LP * create "lynx.cfg Information" page, comments skipped, "include" OK. - The link is available from '='InfoPage and 'O'ptions menu. It is assumed - that distribution's "lynx.cfg" now in lynx_help/ as most advanced info. - LP + The link is available from '='InfoPage and 'O'ptions menu. + Since DJGPP/Win32 binary have no built-in absolute path for distributions + lynx.cfg those ports will look for a copy of lynx.cfg in lynx_help/ + for most advanced info/comments (if you made http:// depository for lynx help + please care of it) - LP * tweak helpfilepath URL (for DOSPATH only) - LP * some cleanup of cp852, cp850, cp775 - LP 1998-09-17 (2.8.1dev.28) diff --git a/INSTALLATION b/INSTALLATION index ef3ceb30..befeede0 100644 --- a/INSTALLATION +++ b/INSTALLATION @@ -256,7 +256,11 @@ II. Compile instructions -- UNIX only. *Use with discretion.* See docs/README.chartrans.) --enable-forms-options (define EXP_FORMS_OPTIONS) - Add forms-based options screen. + Use forms-based options screen only. + Please note that a few users with broken curses may have problems + with popup forms fields. (The default behaviour is to compile + both styles options menu code with FORMS_OPTIONS switch in lynx.cfg + as well as -forms_options command line toggle). --enable-internal-links (define DONT_TRACK_INTERNAL_LINKS) Disabled by default, this option allows tracking of internal links, diff --git a/LYMessages_en.h b/LYMessages_en.h index d5468e38..9215750e 100644 --- a/LYMessages_en.h +++ b/LYMessages_en.h @@ -655,7 +655,6 @@ /* Lynx internal page titles */ #define CONFIG_DEF_TITLE "Configuration Definitions" -#define CONFIG_LYNXCFG_TITLE "Lynx.cfg Information" #define COOKIE_JAR_TITLE "Cookie Jar" #define CURRENT_KEYMAP_TITLE "Current Key Map" #define DIRED_MENU_TITLE "File Management Options" @@ -670,6 +669,15 @@ #define UPLOAD_OPTIONS_TITLE "Upload Options" #define VISITED_LINKS_TITLE "Visited Links Page" +/* CONFIG_DEF_TITLE subtitles */ +#define AUTOCONF_CONFIG_CACHE \ + "The following data were derived during the automatic configuration/build\n\ +process of this copy of Lynx. When reporting a bug, please include a copy\n\ +of this page." +#define AUTOCONF_LYNXCFG_H \ + "The following data were used as automatically-configured compile-time\n\ +definitions when this copy of Lynx was built." + #ifdef DIRED_SUPPORT #define DIRED_NOVICELINE \ " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n" diff --git a/WWW/Library/Implementation/SGML.c b/WWW/Library/Implementation/SGML.c index 5ecbf3ea..7f6324a0 100644 --- a/WWW/Library/Implementation/SGML.c +++ b/WWW/Library/Implementation/SGML.c @@ -39,7 +39,7 @@ PUBLIC BOOL HTPassEightBitNum = FALSE; /* Pass ^ numeric entities raw. */ PUBLIC BOOL HTPassHighCtrlRaw = FALSE; /* Pass 127-160,173, raw. */ PUBLIC BOOL HTPassHighCtrlNum = FALSE; /* Pass €-Ÿ raw. */ -extern int LYlowest_eightbit[]; +/* extern int LYlowest_eightbit[]; for completeness here */ /* The State (context) of the parser ** @@ -353,10 +353,7 @@ PRIVATE BOOL put_special_unicodes ARGS2( ** in the context of line wrapping. Unfortunately, if we use ** HT_EM_SPACE we override the chartrans tables for those spaces ** (e.g., emsp= double space) with a single '32' for all (but do line - ** wrapping more fancy). In the future we need HT_SPACE with a - ** transferred parameter (Unicode number) which falls back to - ** chartrans if line wrapping is not the case. - ** + ** wrapping more fancy). So we probably need HT_EN_SPACE etc... */ PUTC(HT_EM_SPACE); #ifdef NOTUSED_FOTEMODS @@ -395,11 +392,6 @@ PRIVATE BOOL put_special_unicodes ARGS2( PRIVATE char replace_buf [64]; /* buffer for replacement strings */ PRIVATE BOOL FoundEntity = FALSE; -#define IncludesLatin1Enc \ - (context->outUCLYhndl == LATIN1 || \ - (context->outUCI && \ - (context->outUCI->enc & (UCT_CP_SUPERSETOF_LAT1)))) - PRIVATE void handle_entity ARGS2( HTStream *, context, char, term) @@ -1473,8 +1465,14 @@ top1: ** have the "ISO Latin 1" character set selected, ** back translate for our character set. - FM */ +#define IncludesLatin1Enc \ + (context->outUCLYhndl == LATIN1 || \ + (context->outUCI && \ + (context->outUCI->enc & (UCT_CP_SUPERSETOF_LAT1)))) + #define PASSHI8BIT (HTPassEightBitRaw || \ (context->T.do_8bitraw && !context->T.trans_from_uni)) + } else if (unsign_c > 160 && unsign_c < 256 && !(PASSHI8BIT || HTCJK != NOCJK) && !IncludesLatin1Enc) { @@ -1555,14 +1553,16 @@ top1: for (p = replace_buf; *p; p++) PUTC(*p); } else { +#endif /* NOTUSED_FOTEMODS */ /* ** Out of luck, so use the UHHH notation (ugh). - FM */ -#endif /* NOTUSED_FOTEMODS */ + /* do not print UHHH for now sprintf(replace_buf, "U%.2lX", unsign_c); for (p = replace_buf; *p; p++) { PUTC(*p); } + */ #ifdef NOTUSED_FOTEMODS } #endif /* NOTUSED_FOTEMODS */ diff --git a/cfg_defs.sh b/cfg_defs.sh index 8cffb2e0..ee698506 100755 --- a/cfg_defs.sh +++ b/cfg_defs.sh @@ -13,6 +13,7 @@ static CONST struct { EOF sed -e '/^#/d' \ -e 's/"/\\"/g' \ + -e 's/=}$/=""}/' \ -e "s/'/\"/g" \ -e 's/^.[^=]*_cv_/ { "/' \ -e 's/=${[^=]*="/", "/' \ diff --git a/docs/README.chartrans b/docs/README.chartrans index 780c530f..471d4bcc 100644 --- a/docs/README.chartrans +++ b/docs/README.chartrans @@ -29,9 +29,10 @@ Lynx CHARTRANS can (attempt to) automatically switch terminal mode and load new code pages on change of display character set. - - some minor changes: sometimes invalid characters are displayed in a hex + - some minor changes: sometimes invalid characters were displayed in a hex notation Uxxxx (helps debugging, but I also regard it as at least not - worse than showing the wrong char without warning). + worse than showing the wrong char without warning), now they are not + displayed to reduce garbage. Additions/changes to user interface: diff --git a/lynx.cfg b/lynx.cfg index a3c7d6f6..d2e074bb 100644 --- a/lynx.cfg +++ b/lynx.cfg @@ -16,7 +16,7 @@ # All definitions must be flush left and have NO spaces.!!! # # -# Starting with Lynx 2.8.1dev.1, the lynx.cfg file has a crude "include" +# Starting with Lynx 2.8.1, the lynx.cfg file has a crude "include" # facility. This means that you can take advantage of the global lynx.cfg # while also supplying your own tweaks. # @@ -318,6 +318,15 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html # #FORCE_8BIT_TOUPPER:FALSE +# While lynx supports different platforms and display character sets +# we need to limit outgoing mail character repertoire to reduce +# trouble for remote recipient who may not recognize our charset. +# You may try US-ASCII as the safest value (7 bit), any other MIME name +# or leave this field blanc (default) to use display character set. +# (Translation currently implemented for mail "subjects= " only). +# +#OUTGOING_MAIL_CHARSET: + # If Lynx encounters a charset parameter it doesn't recognize, it will # replace the value given by ASSUME_UNREC_CHARSET (or a corresponding # -assume_unrec_charset command line option) for it. This can be used @@ -377,6 +386,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html #URL_DOMAIN_PREFIXES:www. #URL_DOMAIN_SUFFIXES:.com,.edu,.net,.org +# Lynx Options Menu style toggle: forms-based or old-style. +# Works if old-style menu is compiled in. +#FORMS_OPTIONS:FALSE + # Display partial pages while downloading #PARTIAL:TRUE diff --git a/lynx_help/Lynx_users_guide.html b/lynx_help/Lynx_users_guide.html index 5cc2ea98..d3acb1ca 100644 --- a/lynx_help/Lynx_users_guide.html +++ b/lynx_help/Lynx_users_guide.html @@ -461,7 +461,7 @@ to the net.bio.net WAIS server. [<A HREF="#ToC-Search">ToC</A>] <h2 ID="InteractiveOptions"><A NAME="InteractiveOptions"><em>Lynx Options Menu</em></A></h2> The Lynx <em>Options Menu</em> may be accessed by pressing the '<em>o</em>' -key. The current <em>Options Menu</em> contains the following configurable +key. The current Options Menu contains the following configurable options. <pre> @@ -482,7 +482,7 @@ options. K)eypad mode : Numbers act as arrows li(N)e edit style : Default Binding l(I)st directory style : Mixed style - U)ser mode : Advanced + U)ser mode : Advanced verbose images (!) : ON user (A)gent : [User-Agent header] local e(X)ecution links : FOR LOCAL FILES ONLY </pre> @@ -776,6 +776,14 @@ return to Lynx or the '<em>></em>' command to save the options to a link at the bottom of the screen. </dl> + <dt>Verbose Images + <dd>Controls whether or not Lynx replaces the [LINK], [INLINE] and + [IMAGE] comments (for images without ALT) with filenames of these + images. This is extremely useful because now we can determine + immediately what images are just decorations (button.gif, line.gif) + and what images are important. This setting can also be toggled + on startup via the <em>-verbose</em> switch. + <dt>User Agent <dd>The header string which Lynx sends to servers to indicate the User-Agent is displayed here. Changes may be disallowed via @@ -785,14 +793,14 @@ return to Lynx or the '<em>></em>' command to save the options to a checks for the presence of "Lynx" in the header. If changed during a Lynx session, the default User-Agent header can be restored by deleting the modified string in the - <em>Options Menu</em>. Whenever the User-Agent header is + Options Menu. Whenever the User-Agent header is changed, the current document is reloaded, with the no-cache - flags set, on exit from the <em>Options Menu</em>. Changes of + flags set, on exit from the Options Menu. Changes of the header are not saved in the RC file. <dd><em>NOTE</em> that Netscape Communications Corp. has claimed that false transmissions of "Mozilla" as the User-Agent are a copyright infringement, which will be prosecuted. <em>DO NOT</em> - misrepresent Lynx as Mozilla. The <em>Options Menu</em> issues + misrepresent Lynx as Mozilla. The Options Menu issues a warning about possible copyright infringement whenever the header is changed to one which does not include "Lynx" or "lynx". diff --git a/lynx_help/keystrokes/option_help.html b/lynx_help/keystrokes/option_help.html index 64a3d682..1d92d18e 100644 --- a/lynx_help/keystrokes/option_help.html +++ b/lynx_help/keystrokes/option_help.html @@ -98,24 +98,26 @@ computers, and windows-xxxx within native MS-Windows applications). - Raw 8-bit or CJK - Toggles whether 8-bit characters are assumed to - mode correspond with the display character set and + Raw 8-bit or CJK - This option set automatically but can be toggled + mode manually in certain special cases: + it toggles whether 8-bit characters are assumed to + correspond with the display character set and therefore are processed without translation via the - chartrans conversion tables. Should be ON by - default when the display character set is one of - the Asian (CJK) sets and the 8-bit characters are - Kanji multibytes. Should be OFF for the other - display character sets, but can be turned ON when - the document's charset is unknown (e.g., is not - ISO-8859-1 and no charset parameter was specified - in a reply header from an HTTP server to indicate - what it is) but you know by some means that you - have the matching display character set selected. - Should be OFF when an Asian (CJK) set is selected - but the document is ISO-8859-1 or another 'assumed - document character set'. The setting also can be - toggled via the RAW_TOGGLE command, normally mapped - to '@', and at startup via the -raw switch. + chartrans conversion tables. ON by default when the + display character set is one of the Asian (CJK) + sets and the 8-bit characters are Kanji multibytes. + OFF for the other display character sets, but can + be turned ON when the document's charset is unknown + (e.g., is not ISO-8859-1 and no charset parameter + was specified in a reply header from an HTTP server + to indicate what it is) but you have no better idea + than viewing it as from display character set (see + also 'assumed document character set' for best + choice). Should be OFF when an Asian (CJK) set is + selected but the document is ISO-8859-1 or another + 'assumed document character set'. The setting also + can be toggled via the RAW_TOGGLE command, normally + mapped to '@', and at startup via the -raw switch. Assumed document - This option changes the handling of documents character set which do not explicitly specify a charset. @@ -238,14 +240,22 @@ Files and directories are separated into two alphabetical lists. Files are listed first. - User Mode - Beginner + User Mode - Novice Shows two extra lines of help at the bottom - of the screen + of the screen for beginners Intermediate (normal mode) The "normal" statusline messages appear. Advanced The URL is shown on the statusline. + Verbose Images - Controls whether or not Lynx replaces the [LINK], + [INLINE] and [IMAGE] comments (for images without + ALT) with filenames of these images. This is + extremely useful because now we can determine + immediately what images are just decorations + (button.gif, line.gif) and what images are + important. + User Agent - The header string which Lynx sends to servers to indicate the User-Agent is displayed here. Changes may be disallowed via the -restrictions diff --git a/lynx_help/lynx_help_main.html b/lynx_help/lynx_help_main.html index 79327f27..06402f63 100644 --- a/lynx_help/lynx_help_main.html +++ b/lynx_help/lynx_help_main.html @@ -19,7 +19,7 @@ >Help on URLs</a> <li><a href="http://leb.net/blinux/blynx/" >Speech-Friendly Lynx Help Files</a> -<li><a href="http://lynx.browser.org/">Lynx Information</a> +<li><a href="http://lynx.browser.org/">Lynx Home Page</a> | <a href="http://www.crl.com/~subir/lynx.html" >Lynx links</a> | <a href="http://www.slcc.edu/lynx/faq.html" diff --git a/makefile.in b/makefile.in index 600ae932..6102b9b8 100644 --- a/makefile.in +++ b/makefile.in @@ -275,6 +275,7 @@ install-help : $(helpdir) @echo Appending interim-fix for existing html files @ECHO_CC@sed -e '/^#/d' -e '/[:@]/d' -e '/^$$/d' \ -e 's%\(.*\)=\(.*\.html\)$$%s=\2=\2$(COMPRESS_EXT)=%g' \ + -e 's%\.html=%\\.html=%' \ $(srcdir)/lynx_help/help_files.txt >> \ $(helpdir)/help_files.sed @echo Translating/copying html files diff --git a/src/GridText.c b/src/GridText.c index 53bf9c54..098e45e0 100644 --- a/src/GridText.c +++ b/src/GridText.c @@ -63,7 +63,7 @@ void LynxClearScreenCache NOARGS } #endif /* USE_COLOR_STYLE */ -struct _HTStream { /* only know it as object */ +struct _HTStream { /* only know it as object */ CONST HTStreamClass * isa; /* ... */ }; @@ -244,7 +244,7 @@ PRIVATE int HText_TrueLineSize PARAMS(( /* * text->halted = 1: have set fake 'Z' and output a message - * 2: next time when HText_appendCharacter is called + * 2: next time when HText_appendCharacter is called * it will append *** MEMORY EXHAUSTED ***, then set * to 3. * 3: normal text output will be suppressed (but not anchors, @@ -533,7 +533,7 @@ PUBLIC HText * HText_new ARGS1( * so we may start displaying the document while downloading. - LP */ if (display_partial) - NumOfLines_partial = 0; /* enable HTDisplayPartial() */ + NumOfLines_partial = 0; /* enable HTDisplayPartial() */ #endif CTRACE(tfp, "GridText: start HText_new\n"); @@ -541,8 +541,8 @@ PUBLIC HText * HText_new ARGS1( return self; } -/* Creation Method 2 -** --------------- +/* Creation Method 2 +** --------------- ** ** Stream is assumed open and left open. */ @@ -578,9 +578,9 @@ PUBLIC void HText_free ARGS1( l->prev->next = l->next; /* Unlink l */ self->last_line = l->prev; if (l != self->last_line) { - FREE(l); + FREE(l); } else { - free(l); + free(l); } } if (l == self->last_line) { /* empty */ @@ -768,7 +768,7 @@ PRIVATE int display_line ARGS2( #ifndef USE_COLOR_STYLE case LY_UNDERLINE_START_CHAR: - if (dump_output_immediately && use_underscore) { + if (dump_output_immediately && use_underscore) { addch('_'); i++; } else { @@ -777,7 +777,7 @@ PRIVATE int display_line ARGS2( break; case LY_UNDERLINE_END_CHAR: - if (dump_output_immediately && use_underscore) { + if (dump_output_immediately && use_underscore) { addch('_'); i++; } else { @@ -800,7 +800,7 @@ PRIVATE int display_line ARGS2( break; case LY_SOFT_HYPHEN: - if (*data != '\0' || + if (*data != '\0' || isspace((unsigned char)LastDisplayChar) || LastDisplayChar == '-') { /* @@ -964,7 +964,7 @@ PRIVATE void display_title ARGS1( sprintf(percent, " (p%d of %d)", ((text->top_of_screen >= start_of_last_page) ? total_pages : - ((text->top_of_screen + display_lines)/(display_lines))), + ((text->top_of_screen + display_lines)/(display_lines))), total_pages); } else { percent[0] = '\0'; /* Null string */ @@ -979,13 +979,13 @@ PRIVATE void display_title ARGS1( if (*title && (tmp = (unsigned char *)calloc(1, (strlen(title) + 1)))) { if (kanji_code == EUC) { - TO_EUC((unsigned char *)title, tmp); + TO_EUC((unsigned char *)title, tmp); } else if (kanji_code == SJIS) { - TO_SJIS((unsigned char *)title, tmp); + TO_SJIS((unsigned char *)title, tmp); } else { - for (i = 0, j = 0; title[i]; i++) { + for (i = 0, j = 0; title[i]; i++) { if (title[i] != '\033') { - tmp[j++] = title[i]; + tmp[j++] = title[i]; } } tmp[j] = '\0'; @@ -1387,9 +1387,9 @@ PRIVATE void display_page ARGS3( * Memory leak fixed 05-27-94 * Garrett Arch Blythe */ - auto char *cp_AnchorAddress = NULL; + auto char *cp_AnchorAddress = NULL; if (traversal) - cp_AnchorAddress = stub_HTAnchor_address(link_dest); + cp_AnchorAddress = stub_HTAnchor_address(link_dest); else { #ifndef DONT_TRACK_INTERNAL_LINKS if (Anchor_ptr->link_type == INTERNAL_LINK_ANCHOR) { @@ -1428,7 +1428,7 @@ PRIVATE void display_page ARGS3( links[nlinks].target = empty_string; links[nlinks].form = NULL; - nlinks++; + nlinks++; display_flag = TRUE; } else if (Anchor_ptr->link_type == INPUT_ANCHOR @@ -1477,7 +1477,7 @@ PRIVATE void display_page ARGS3( links[nlinks].hightext2_offset = 0; nlinks++; - /* + /* * Bold the link after incrementing nlinks. */ highlight(OFF, (nlinks - 1), target); @@ -1796,7 +1796,7 @@ PRIVATE void split_line ARGS2( * Act on the global flag if set above. - FM */ if (underline_on && *p != LY_UNDERLINE_END_CHAR) { - linedata[line->size++] = LY_UNDERLINE_START_CHAR; + linedata[line->size++] = LY_UNDERLINE_START_CHAR; linedata[line->size] = '\0'; ctrl_chars_on_this_line++; SpecialAttrChars++; @@ -1958,7 +1958,7 @@ PRIVATE void split_line ARGS2( (unsigned)(a->line_pos + a->extent) >= split) { a->extent -= (TailTrim + HeadTrim); if (a->extent < 0) { - a->extent = 0; + a->extent = 0; } } } @@ -1981,7 +1981,7 @@ PRIVATE void blank_lines ARGS2( while ((line != text->last_line) && (HText_TrueLineSize(line, text, IgnoreSpaces) == 0)) { if (newlines == 0) - break; + break; newlines--; /* Don't bother: already blank */ line = line->prev; } @@ -2254,7 +2254,7 @@ PUBLIC void HText_appendCharacter ARGS2( /* * JIS X0201 Kana in SJIS support. - by ASATAKU */ - if ((text->kcode == SJIS) && + if ((text->kcode == SJIS) && ((unsigned char)ch >= 0xA1) && ((unsigned char)ch <= 0xDF)) { unsigned char c = (unsigned char)ch; @@ -2264,14 +2264,14 @@ PUBLIC void HText_appendCharacter ARGS2( (unsigned char *)&c); ch = (char)c; text->kanji_buf = (char)kb; - } else { + } else { text->kanji_buf = ch; /* * Can split here. - FM */ text->permissible_split = text->last_line->size; return; - } + } } } else { goto check_IgnoreExcess; @@ -2282,7 +2282,7 @@ PUBLIC void HText_appendCharacter ARGS2( if (IsSpecialAttrChar(ch)) { #ifndef USE_COLOR_STYLE - if (line->size >= (MAX_LINE-1)) return; + if (line->size >= (MAX_LINE-1)) return; if (ch == LY_UNDERLINE_START_CHAR) { line->data[line->size++] = LY_UNDERLINE_START_CHAR; line->data[line->size] = '\0'; @@ -2420,10 +2420,10 @@ PUBLIC void HText_appendCharacter ARGS2( target = Tab->position; } else if (text->in_line_1) { /* Use 2nd indent */ if (here >= (int)style->leftIndent) { - new_line(text); /* wrap */ + new_line(text); /* wrap */ return; } else { - target = (int)style->leftIndent; + target = (int)style->leftIndent; } } else { /* Default tabs align with left indent mod 8 */ #ifdef DEFAULT_TABS_8 @@ -2444,13 +2444,13 @@ PUBLIC void HText_appendCharacter ARGS2( */ text->permissible_split = line->size; if (line->size == 0) { - line->offset = line->offset + target - here; + line->offset = line->offset + target - here; } else { - for (; here<target; here++) { + for (; here<target; here++) { /* Put character into line */ line->data[line->size++] = ' '; line->data[line->size] = '\0'; - } + } } } return; @@ -2754,7 +2754,7 @@ PUBLIC void HText_endAnchor ARGS2( } else { for (a = text->first_anchor; a; a = a->next) { if (a->number == number) { - break; + break; } } if (a == NULL) { @@ -2818,7 +2818,7 @@ PUBLIC void HText_endAnchor ARGS2( j = (last->size - i); while (j < last->size) { if (!IsSpecialAttrChar(last->data[j]) && - !isspace((unsigned char)last->data[j]) && + !isspace((unsigned char)last->data[j]) && last->data[j] != HT_NON_BREAK_SPACE && last->data[j] != HT_EM_SPACE) break; @@ -2854,20 +2854,20 @@ PUBLIC void HText_endAnchor ARGS2( while (i == 0 && a->extent > CurBlankExtent) { j = prev->size - a->extent + CurBlankExtent; if (j < 0) { - /* + /* * The anchor starts on a preceding line, * so check all of this line. - FM */ - j = 0; + j = 0; i = prev->size; } else { - /* + /* * The anchor starts on this line. - FM */ - i = a->extent - CurBlankExtent; + i = a->extent - CurBlankExtent; } while (j < prev->size) { - if (!IsSpecialAttrChar(prev->data[j]) && + if (!IsSpecialAttrChar(prev->data[j]) && !isspace((unsigned char)prev->data[j]) && prev->data[j] != HT_NON_BREAK_SPACE && prev->data[j] != HT_EM_SPACE) @@ -2958,15 +2958,15 @@ PUBLIC void HText_endAnchor ARGS2( j--; NumSize++; while (j >= 0 && isdigit((unsigned char)start->data[j])) { - j--; + j--; NumSize++; } while (j < 0) { - j++; + j++; NumSize--; } if (start->data[j] == '[') { - /* + /* * The numbered bracket is entirely * on this line. - FM */ @@ -2980,16 +2980,16 @@ PUBLIC void HText_endAnchor ARGS2( anc->start -= NumSize; anc->line_pos -= NumSize; } - start->size = j; + start->size = j; start->data[j++] = '\0'; while (j < k) start->data[j++] = '\0'; } else if (prev && prev->size > 1) { k = (i + 1); j = (prev->size - 1); - while ((j >= 0) && IsSpecialAttrChar(prev->data[j])) + while ((j >= 0) && IsSpecialAttrChar(prev->data[j])) j--; - i = (j + 1); + i = (j + 1); while (j >= 0 && isdigit((unsigned char)prev->data[j])) { j--; @@ -3020,9 +3020,9 @@ PUBLIC void HText_endAnchor ARGS2( j = 0; i = k; while (k < start->size) - start->data[j++] = start->data[k++]; + start->data[j++] = start->data[k++]; if (start != last) - text->chars -= i; + text->chars -= i; for (anc = a; anc; anc = anc->next) { anc->start -= i; anc->line_pos -= i; @@ -3030,7 +3030,7 @@ PUBLIC void HText_endAnchor ARGS2( start->size = j; start->data[j++] = '\0'; while (j < k) - start->data[j++] = '\0'; + start->data[j++] = '\0'; } else { /* * Shucks! We didn't find the @@ -3048,16 +3048,16 @@ PUBLIC void HText_endAnchor ARGS2( } else if (prev && prev->size > 2) { j = (prev->size - 1); while ((j >= 0) && IsSpecialAttrChar(prev->data[j])) - j--; + j--; if (j < 0) - j = 0; + j = 0; i = (j + 1); if ((j > 2) && - (prev->data[j] == ']' && + (prev->data[j] == ']' && isdigit((unsigned char)prev->data[j - 1]))) { - j--; + j--; NumSize++; - k = (j + 1); + k = (j + 1); while (j >= 0 && isdigit((unsigned char)prev->data[j])) { j--; @@ -3097,7 +3097,7 @@ PUBLIC void HText_endAnchor ARGS2( * Shucks! We didn't find the * numbered bracket. - FM */ - a->show_anchor = YES; + a->show_anchor = YES; } } else { /* @@ -3126,7 +3126,7 @@ PUBLIC void HText_endAnchor ARGS2( a->extent = 0; if (text->hiddenlinkflag != HIDDENLINKS_MERGE) { a->number = 0; - text->last_anchor_number--; + text->last_anchor_number--; HText_AddHiddenLink(text, a); } } else { @@ -3277,6 +3277,9 @@ PUBLIC void HText_trimHightext ARGS2( CTRACE(tfp,"Gridtext: Entering HText_trimHightext\n"); + if (disable_trace) + CTRACE(tfp,"HText_trimHightext: trace disabled in display_partial mode\n"); + /* * Get the first line. */ @@ -3321,7 +3324,7 @@ re_parse: if (anchor_ptr->link_type & HYPERTEXT_ANCHOR) { ch = (unsigned char)line_ptr->data[anchor_ptr->line_pos]; while (isspace(ch) || - IsSpecialAttrChar(ch)) { + IsSpecialAttrChar(ch)) { anchor_ptr->line_pos++; anchor_ptr->extent--; cur_shift++; @@ -3333,8 +3336,8 @@ re_parse: } if (!disable_trace) - CTRACE(tfp, "anchor text: '%s' col: %d\n", - line_ptr->data, anchor_ptr->line_pos); + CTRACE(tfp, "anchor text: '%s'\n", + line_ptr->data); /* * If the link begins with an end of line and we have more * lines, then start the highlighting on the next line. - FM @@ -3375,7 +3378,7 @@ re_parse: line_ptr2->data, (anchor_ptr->extent - strlen(anchor_ptr->hightext))); - anchor_ptr->hightext2offset = line_ptr2->offset; + anchor_ptr->hightext2offset = line_ptr2->offset; remove_special_attr_chars(anchor_ptr->hightext2); if (anchor_ptr->link_type & HYPERTEXT_ANCHOR) { LYTrimTrailing(anchor_ptr->hightext2); @@ -3411,8 +3414,8 @@ re_parse: anchor_ptr->line_num = cur_line; if (!disable_trace) - CTRACE(tfp, "GridText: add link on line %d in HText_trimHightext\n", - cur_line); + CTRACE(tfp, "GridText: add link on line %d col %d in HText_trimHightext\n", + cur_line, anchor_ptr->line_pos); /* * If this is the last anchor, we're done! @@ -3484,7 +3487,7 @@ PUBLIC void HText_FormDescNumber ARGS2( for (a = HTMainText->first_anchor; a; a = a->next) { if (a->number == number) { if (!(a->input_field && a->input_field->type)) { - *desc = "unknown field or link"; + *desc = "unknown field or link"; return; } break; @@ -3627,7 +3630,7 @@ PUBLIC int HTGetLinkInfo ARGS6( */ return(NO); } - if (anchors_this_screen > 0 && + if (anchors_this_screen > 0 && anchors_this_screen <= nlinks && a->line_num >= HTMainText->top_of_screen && a->line_num < HTMainText->top_of_screen+(display_lines)) { @@ -3639,7 +3642,7 @@ PUBLIC int HTGetLinkInfo ARGS6( */ *go_line = HTMainText->top_of_screen; if (linknum) - *linknum = anchors_this_screen - 1; + *linknum = anchors_this_screen - 1; } else { /* * if the requested anchor is not within the currently @@ -3663,13 +3666,13 @@ PUBLIC int HTGetLinkInfo ARGS6( max_offset = display_lines - 1; *go_line = prev_anchor_line - max_offset; if (*go_line <= prev_prev_anchor_line) - *go_line = prev_prev_anchor_line + 1; + *go_line = prev_prev_anchor_line + 1; if (*go_line < 0) - *go_line = 0; + *go_line = 0; if (linknum) - *linknum = anchors_this_line - 1; - } - return(LINK_LINE_FOUND); + *linknum = anchors_this_line - 1; + } + return(LINK_LINE_FOUND); } else { *hightext= a->hightext; link_dest = HTAnchor_followMainLink((HTAnchor *)a->anchor); @@ -3921,12 +3924,12 @@ PUBLIC void HTCheckFnameForCompression ARGS3( !strcasecomp(dot, ".gz") || !strcasecomp(dot, ".Z")) { if (!method) { - /* + /* * It has a suffix which signifies a gzipped * or compressed file for us, but the anchor * claims otherwise, so tweak the suffix. - FM */ - cp = (dot + 1); + cp = (dot + 1); *dot = '\0'; if (!strcasecomp(cp, "tgz")) { StrAllocCat(*fname, ".tar"); @@ -3939,7 +3942,7 @@ PUBLIC void HTCheckFnameForCompression ARGS3( if (!strcasecomp(cp, "-gz") || !strcasecomp(cp, "_gz")) { if (!method) { - /* + /* * It has a tail which signifies a gzipped * file for us, but the anchor claims otherwise, * so tweak the suffix. - FM @@ -3969,7 +3972,7 @@ PUBLIC void HTCheckFnameForCompression ARGS3( if (!strcasecomp(cp, "-Z") || !strcasecomp(cp, "_Z")) { if (!method) { - /* + /* * It has a tail which signifies a compressed * file for us, but the anchor claims otherwise, * so tweak the suffix. - FM @@ -4348,7 +4351,7 @@ PUBLIC BOOL HText_selectAnchor ARGS2( if ( !text->stale && (l >= text->top_of_screen) && ( l < text->top_of_screen + display_lines+1)) - return YES; + return YES; www_search_result = l - (display_lines/3); /* put in global variable */ } @@ -4540,7 +4543,7 @@ PUBLIC int do_www_search ARGS1( strcpy(searchstring, ++cp); for (cp=searchstring; *cp; cp++) if (*cp == '+') - *cp = ' '; + *cp = ' '; HTUnEscape(searchstring); strcpy(temp, searchstring); /* @@ -4575,22 +4578,22 @@ get_query: *searchstring == '\0' || ch == UPARROW || ch == DNARROW) { if (recall && ch == UPARROW) { if (PreviousSearch) { - /* + /* * Use the second to last query in the list. - FM */ - QueryNum = 1; + QueryNum = 1; PreviousSearch = FALSE; } else { - /* + /* * Go back to the previous query in the list. - FM */ - QueryNum++; + QueryNum++; } if (QueryNum >= QueryTotal) - /* + /* * Roll around to the last query in the list. - FM */ - QueryNum = 0; + QueryNum = 0; if ((cp=(char *)HTList_objectAt(search_queries, QueryNum)) != NULL) { strcpy(searchstring, cp); @@ -4606,19 +4609,19 @@ get_query: } } else if (recall && ch == DNARROW) { if (PreviousSearch) { - /* + /* * Use the first query in the list. - FM */ - QueryNum = QueryTotal - 1; + QueryNum = QueryTotal - 1; PreviousSearch = FALSE; } else { - /* + /* * Advance to the next query in the list. - FM */ - QueryNum--; + QueryNum--; } if (QueryNum < 0) - /* + /* * Roll around to the first query in the list. - FM */ QueryNum = QueryTotal - 1; @@ -4754,7 +4757,7 @@ PUBLIC void print_wwwfile_to_fd ARGS2( fputc('>',fp); } - /* + /* * Add offset. */ for (i = 0; i < (int)line->offset; i++) { @@ -5013,7 +5016,7 @@ PUBLIC void www_user_search ARGS3( if ((a->input_field != NULL && a->input_field->value != NULL) && a->input_field->type != F_HIDDEN_TYPE) { if (a->input_field->type == F_PASSWORD_TYPE) { - /* + /* * Check the actual, hidden password, and then * the displayed string. - FM */ @@ -5062,7 +5065,7 @@ PUBLIC void www_user_search ARGS3( /* * Search for checked or unchecked parens. - FM */ - if (a->input_field->num_value) { + if (a->input_field->num_value) { cp = checked_radio; } else { cp = unchecked_radio; @@ -5079,7 +5082,7 @@ PUBLIC void www_user_search ARGS3( * Search for checked or unchecked * square brackets. - FM */ - if (a->input_field->num_value) { + if (a->input_field->num_value) { cp = checked_box; } else { cp = unchecked_box; @@ -5092,7 +5095,7 @@ PUBLIC void www_user_search ARGS3( return; } } else { - /* + /* * Check the values intended for display. * May have been found already via the * hightext search, but make sure here @@ -5172,7 +5175,7 @@ PUBLIC void www_user_search ARGS3( if ((a->input_field != NULL && a->input_field->value != NULL) && a->input_field->type != F_HIDDEN_TYPE) { if (a->input_field->type == F_PASSWORD_TYPE) { - /* + /* * Check the actual, hidden password, and then * the displayed string. - FM */ @@ -5221,7 +5224,7 @@ PUBLIC void www_user_search ARGS3( /* * Search for checked or unchecked parens. - FM */ - if (a->input_field->num_value) { + if (a->input_field->num_value) { cp = checked_radio; } else { cp = unchecked_radio; @@ -5238,7 +5241,7 @@ PUBLIC void www_user_search ARGS3( * Search for checked or unchecked * square brackets. - FM */ - if (a->input_field->num_value) { + if (a->input_field->num_value) { cp = checked_box; } else { cp = unchecked_box; @@ -5251,7 +5254,7 @@ PUBLIC void www_user_search ARGS3( return; } } else { - /* + /* * Check the values intended for display. * May have been found already via the * hightext search, but make sure here @@ -5276,17 +5279,17 @@ PUBLIC void www_user_search ARGS3( } if (case_sensitive && LYno_attr_char_strstr(line->data, target)) { - tentative_result=count; + tentative_result=count; break; } else if (!case_sensitive && LYno_attr_char_case_strstr(line->data, target)) { - tentative_result = count; + tentative_result = count; break; } else if (count > start_line) { /* next line */ HTUserMsg2(STRING_NOT_FOUND, target); - return; /* end */ + return; /* end */ } else { - line = line->next; + line = line->next; count++; } } @@ -5544,7 +5547,7 @@ PRIVATE int HText_TrueLineSize ARGS3( (!(text && text->T.output_utf8) || (unsigned char)line->data[i] < 128 || ((unsigned char)(line->data[i] & 0xc0) == 0xc0)) && - !isspace((unsigned char)line->data[i]) && + !isspace((unsigned char)line->data[i]) && (unsigned char)line->data[i] != HT_NON_BREAK_SPACE && (unsigned char)line->data[i] != HT_EM_SPACE) { true_size++; @@ -5656,7 +5659,7 @@ PUBLIC void HText_setTabID ARGS2( } else { while (NULL != (Tab = (HTTabID *)HTList_nextObject(cur))) { if (Tab->name && !strcmp(Tab->name, name)) - return; /* Already set. Keep the first value. */ + return; /* Already set. Keep the first value. */ last = cur; } if (last) @@ -5684,7 +5687,7 @@ PUBLIC int HText_getTabIDColumn ARGS2( if (text && name && *name && cur) { while (NULL != (Tab = (HTTabID *)HTList_nextObject(cur))) { if (Tab->name && !strcmp(Tab->name, name)) - break; + break; } if (Tab) column = Tab->column; @@ -5884,7 +5887,7 @@ PUBLIC void HText_endForm ARGS1( */ while (a) { if (a->link_type == INPUT_ANCHOR && - a->input_field->number == HTFormNumber && + a->input_field->number == HTFormNumber && a->input_field->type == F_TEXT_TYPE) { /* * Got it. Make it submitting. - FM @@ -5903,7 +5906,7 @@ PUBLIC void HText_endForm ARGS1( break; } if (a == text->last_anchor) - break; + break; a = a->next; } } @@ -6032,13 +6035,13 @@ PRIVATE char * HText_skipOptionNumPrefix ARGS1( if ((cp && *cp && *cp++ == '(') && *cp && isdigit(*cp++)) { while (*cp && isdigit(*cp)) - ++cp; + ++cp; if (*cp && *cp++ == ')') { int i = (cp - opname); while (i < 5) { if (*cp != '_') - break; + break; i++; cp++; } @@ -6046,7 +6049,7 @@ PRIVATE char * HText_skipOptionNumPrefix ARGS1( cp = opname; } } else { - cp = opname; + cp = opname; } } else { cp = opname; @@ -6171,7 +6174,7 @@ PUBLIC char * HText_setLastOptionValue ARGS7( new_ptr = text->last_anchor->input_field->select_list = (OptionType *)calloc(1, sizeof(OptionType)); if (new_ptr == NULL) - outofmem(__FILE__, "HText_setLastOptionValue"); + outofmem(__FILE__, "HText_setLastOptionValue"); first_option = TRUE; } else { @@ -6184,7 +6187,7 @@ PUBLIC char * HText_setLastOptionValue ARGS7( op_ptr->next = new_ptr = (OptionType *)calloc(1, sizeof(OptionType)); if (new_ptr == NULL) - outofmem(__FILE__, "HText_setLastOptionValue"); + outofmem(__FILE__, "HText_setLastOptionValue"); } new_ptr->name = NULL; @@ -6192,7 +6195,7 @@ PUBLIC char * HText_setLastOptionValue ARGS7( new_ptr->next = NULL; for (i = 0, j = 0; cp[i]; i++) { if (cp[i] == HT_NON_BREAK_SPACE || - cp[i] == HT_EM_SPACE) { + cp[i] == HT_EM_SPACE) { cp[j++] = ' '; } else if (cp[i] != LY_SOFT_HYPHEN && !IsSpecialAttrChar((unsigned char)cp[i])) { @@ -6202,7 +6205,7 @@ PUBLIC char * HText_setLastOptionValue ARGS7( cp[j] = '\0'; if (HTCJK != NOCJK) { if (cp && - (tmp = (unsigned char *)calloc(1, strlen(cp)+1))) { + (tmp = (unsigned char *)calloc(1, strlen(cp)+1))) { if (kanji_code == EUC) { TO_EUC((unsigned char *)cp, tmp); val_cs = current_char_set; @@ -6211,7 +6214,7 @@ PUBLIC char * HText_setLastOptionValue ARGS7( val_cs = current_char_set; } else { for (i = 0, j = 0; cp[i]; i++) { - if (cp[i] != '\033') { + if (cp[i] != '\033') { tmp[j++] = cp[i]; } } @@ -6309,7 +6312,7 @@ PUBLIC char * HText_setLastOptionValue ARGS7( (submit_val_cs >= 0 ? LYCharSet_UC[submit_val_cs].MIMEname : "<UNKNOWN>"), (HTCurSelectGroupType == F_CHECKBOX_TYPE) ? - "(ignored)" : "", + "(ignored)" : "", submit_value); } else { @@ -6372,7 +6375,7 @@ PUBLIC int HText_beginInput ARGS3( TextAnchor * b = text->first_anchor; int i2 = 0; while (b) { - if (b->link_type == INPUT_ANCHOR && + if (b->link_type == INPUT_ANCHOR && b->input_field->type == F_RADIO_TYPE && b->input_field->number == HTFormNumber) { if (!strcmp(b->input_field->name, I->name)) { @@ -6434,7 +6437,7 @@ PUBLIC int HText_beginInput ARGS3( } else { for (i = 0, j = 0; IValue[i]; i++) { if (IValue[i] != '\033') { - tmp[j++] = IValue[i]; + tmp[j++] = IValue[i]; } } } @@ -6740,9 +6743,9 @@ PUBLIC int HText_beginInput ARGS3( * account as well. - FM */ if (keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED) - MaximumSize -= ((a->number/10) + 3); + MaximumSize -= ((a->number/10) + 3); if (f->size > MaximumSize) - f->size = MaximumSize; + f->size = MaximumSize; /* * Save value for submit/reset buttons so they @@ -7044,10 +7047,15 @@ PUBLIC void HText_SubmitForm ARGS4( HTMainText->node_anchor->charset && *HTMainText->node_anchor->charset) { target_cs = UCGetLYhndl_byMIME(HTMainText->node_anchor->charset); - if (target_cs < 0) { + if (target_cs >= 0) { + target_csname = HTMainText->node_anchor->charset; + } else { target_cs = UCLYhndl_for_unspec; /* always >= 0 */ + target_csname = LYCharSet_UC[target_cs].MIMEname; } - target_csname = LYCharSet_UC[target_cs].MIMEname; + } + if (target_cs < 0) { + target_cs = UCLYhndl_for_unspec; /* always >= 0 */ } /* @@ -7063,22 +7071,22 @@ PUBLIC void HText_SubmitForm ARGS4( char *p; char * val; - form_ptr = anchor_ptr->input_field; + form_ptr = anchor_ptr->input_field; val = form_ptr->cp_submit_value != NULL ? - form_ptr->cp_submit_value : form_ptr->value; + form_ptr->cp_submit_value : form_ptr->value; field_has_8bit = NO; field_has_special = NO; - len += (strlen(form_ptr->name) + (Boundary ? 100 : 10)); + len += (strlen(form_ptr->name) + (Boundary ? 100 : 10)); /* * Calculate by the option submit value if present. */ if (form_ptr->cp_submit_value != NULL) { len += (strlen(form_ptr->cp_submit_value) + 10); } else { - len += (strlen(form_ptr->value) + 10); + len += (strlen(form_ptr->value) + 10); } - len += 32; /* plus and ampersand + safety net */ + len += 32; /* plus and ampersand + safety net */ for (p = val; p && *p && !(field_has_8bit && field_has_special); @@ -7146,7 +7154,7 @@ PUBLIC void HText_SubmitForm ARGS4( } } else if (anchor_ptr->input_field->number > form_number) { - break; + break; } } @@ -7269,16 +7277,16 @@ PUBLIC void HText_SubmitForm ARGS4( textarea_lineno = 0; switch(form_ptr->type) { - case F_RESET_TYPE: + case F_RESET_TYPE: break; - case F_SUBMIT_TYPE: - case F_TEXT_SUBMIT_TYPE: - case F_IMAGE_SUBMIT_TYPE: + case F_SUBMIT_TYPE: + case F_TEXT_SUBMIT_TYPE: + case F_IMAGE_SUBMIT_TYPE: if (!(form_ptr->name && *form_ptr->name != '\0' && !strcmp(form_ptr->name, link_name))) { CTRACE(tfp, "SubmitForm: skipping submit field with "); - CTRACE(tfp, "name \"%s\" for link_name \"%s\", %s.", + CTRACE(tfp, "name \"%s\" for link_name \"%s\", %s.\n", form_ptr->name ? form_ptr->name : "???", link_name ? link_name : "???", (form_ptr->name && *form_ptr->name) ? @@ -7292,7 +7300,7 @@ PUBLIC void HText_SubmitForm ARGS4( fprintf(tfp, "SubmitForm: skipping submit field with "); fprintf(tfp, - "name \"%s\" for link_name \"%s\", %s!", + "name \"%s\" for link_name \"%s\", %s!\n", form_ptr->name ? form_ptr->name : "???", link_name ? link_name : "???", "values are different"); @@ -7300,11 +7308,11 @@ PUBLIC void HText_SubmitForm ARGS4( break; } /* fall through */ - case F_RADIO_TYPE: + case F_RADIO_TYPE: case F_CHECKBOX_TYPE: case F_TEXTAREA_TYPE: case F_PASSWORD_TYPE: - case F_TEXT_TYPE: + case F_TEXT_TYPE: case F_OPTION_LIST_TYPE: case F_HIDDEN_TYPE: /* @@ -7825,9 +7833,9 @@ PUBLIC void HText_SubmitForm ARGS4( FREE(copied_name_used); FREE(copied_val_used); break; - } + } } else if (anchor_ptr->input_field->number > form_number) { - break; + break; } } @@ -7851,7 +7859,7 @@ PUBLIC void HText_SubmitForm ARGS4( *submit_item->submit_title) ? (submit_item->submit_title) : (HText_getTitle() ? - HText_getTitle() : ""))); + HText_getTitle() : ""))); CTRACE(tfp,"GridText - mailto_content: %s\n",query); mailform((submit_item->submit_action+7), ((submit_item->submit_title && @@ -7933,9 +7941,9 @@ PUBLIC void HText_ResetForm ARGS1( anchor_ptr->input_field->type == F_CHECKBOX_TYPE) { if (anchor_ptr->input_field->orig_value[0] == '0') - anchor_ptr->input_field->num_value = 0; + anchor_ptr->input_field->num_value = 0; else - anchor_ptr->input_field->num_value = 1; + anchor_ptr->input_field->num_value = 1; } else if (anchor_ptr->input_field->type == F_OPTION_LIST_TYPE) { @@ -7945,7 +7953,7 @@ PUBLIC void HText_ResetForm ARGS1( anchor_ptr->input_field->cp_submit_value = anchor_ptr->input_field->orig_submit_value; - } else { + } else { StrAllocCopy(anchor_ptr->input_field->value, anchor_ptr->input_field->orig_value); } @@ -7979,13 +7987,13 @@ PUBLIC void HText_activateRadioButton ARGS1( if (anchor_ptr->input_field->number == form_number) { /* if it has the same name and its on */ - if (!strcmp(anchor_ptr->input_field->name, form->name) && + if (!strcmp(anchor_ptr->input_field->name, form->name) && anchor_ptr->input_field->num_value) { anchor_ptr->input_field->num_value = 0; break; - } + } } else if (anchor_ptr->input_field->number > form_number) { - break; + break; } } diff --git a/src/HTML.c b/src/HTML.c index 4271a1d3..9ad52f49 100644 --- a/src/HTML.c +++ b/src/HTML.c @@ -177,6 +177,18 @@ PRIVATE void change_paragraph_style ARGS2(HTStructured *, me, HTStyle *,style) ** A C T I O N R O U T I N E S */ +/* FIXME: this should be amended to do the substitution only when not in a + * multibyte stream. + */ +#if EXP_JAPANESE_SPACES +#define FIX_JAPANESE_SPACES \ + (HTCJK == CHINESE || HTCJK == JAPANESE || HTCJK == TAIPEI) + /* don't replace '\n' with ' ' if Chinese or Japanese - HN + */ +#else +#define FIX_JAPANESE_SPACES 0 +#endif + /* Character handling ** ------------------ */ @@ -218,13 +230,12 @@ PUBLIC void HTML_put_character ARGS2(HTStructured *, me, char, c) return; if (c != '\n' && c != '\t' && c != '\r') { HTChunkPutc(&me->title, c); - } else if (HTCJK == CHINESE || HTCJK == JAPANESE || HTCJK == TAIPEI) { + } else if (FIX_JAPANESE_SPACES) { if (c == '\t') { HTChunkPutc(&me->title, ' '); } else { return; } - /* don't replace '\n' with ' ' if Chinese or Japanese - HN */ } else { HTChunkPutc(&me->title, ' '); } @@ -339,11 +350,7 @@ PUBLIC void HTML_put_character ARGS2(HTStructured *, me, char, c) UPDATE_STYLE; } if (c == '\n') { - if (HTCJK == CHINESE || HTCJK == JAPANESE || - HTCJK == TAIPEI) { - /* don't replace '\n' with ' ' if Chinese or Japanese - HN - */ - } else { + if (!FIX_JAPANESE_SPACES) { if (me->in_word) { if (HText_getLastChar(me->text) != ' ') { me->inP = TRUE; @@ -480,12 +487,7 @@ PUBLIC void HTML_put_string ARGS2(HTStructured *, me, CONST char *, s) UPDATE_STYLE; } if (c == '\n') { - if (HTCJK == CHINESE || HTCJK == JAPANESE || - HTCJK == TAIPEI) { - /* don't replace '\n' with ' ' - * if Chinese or Japanese - HN - */ - } else { + if (!FIX_JAPANESE_SPACES) { if (me->in_word) { if (HText_getLastChar(me->text) != ' ') HText_appendCharacter(me->text, ' '); diff --git a/src/LYCharSets.c b/src/LYCharSets.c index c2540e13..029b8546 100644 --- a/src/LYCharSets.c +++ b/src/LYCharSets.c @@ -673,13 +673,106 @@ PRIVATE void HTMLSetDisplayCharsetMatchLocale ARGS1(int,i) return; } + +/* + * lynx 2.8/2.7.2(and more early) compatibility code: + * "human-readable" charset names changes with time + * so we map that history names to MIME here + * to get old lynx.cfg and (especially) .lynxrc always recognized. + * Please update this table when you change "fullname" of any present charset. + */ +typedef struct _names_pairs { + CONST char * fullname; + CONST char * MIMEname; +} names_pairs; + +PRIVATE CONST names_pairs OLD_charset_names[] = { + {"ISO Latin 1", "iso-8859-1"}, + {"ISO Latin 2", "iso-8859-2"}, + {"WinLatin1 (cp1252)", "windows-1252"}, + {"DEC Multinational", "dec-mcs"}, + {"Macintosh (8 bit)", "macintosh"}, + {"NeXT character set", "next"}, + {"KOI8-R Cyrillic", "koi8-r"}, + {"Chinese", "euc-cn"}, + {"Japanese (EUC)", "euc-jp"}, + {"Japanese (SJIS)", "shift_jis"}, + {"Korean", "euc-kr"}, + {"Taipei (Big5)", "big5"}, + {"Vietnamese (VISCII)", "viscii"}, + {"7 bit approximations","us-ascii"}, + {"Transparent", "x-transparent"}, + {"DosLatinUS (cp437)", "cp437"}, + {"IBM PC character set","cp437"}, + {"DosLatin1 (cp850)", "cp850"}, + {"IBM PC codepage 850", "cp850"}, + {"DosLatin2 (cp852)", "cp852"}, + {"PC Latin2 CP 852", "cp852"}, + {"DosCyrillic (cp866)", "cp866"}, + {"DosArabic (cp864)", "cp864"}, + {"DosGreek (cp737)", "cp737"}, + {"DosBaltRim (cp775)", "cp775"}, + {"DosGreek2 (cp869)", "cp869"}, + {"DosHebrew (cp862)", "cp862"}, + {"WinLatin2 (cp1250)", "windows-1250"}, + {"WinCyrillic (cp1251)","windows-1251"}, + {"WinGreek (cp1253)", "windows-1253"}, + {"WinHebrew (cp1255)", "windows-1255"}, + {"WinArabic (cp1256)", "windows-1256"}, + {"WinBaltRim (cp1257)", "windows-1257"}, + {"ISO Latin 3", "iso-8859-3"}, + {"ISO Latin 4", "iso-8859-4"}, + {"ISO 8859-5 Cyrillic", "iso-8859-5"}, + {"ISO 8859-6 Arabic", "iso-8859-6"}, + {"ISO 8859-7 Greek", "iso-8859-7"}, + {"ISO 8859-8 Hebrew", "iso-8859-8"}, + {"ISO 8859-9 (Latin 5)","iso-8859-9"}, + {"ISO 8859-10", "iso-8859-10"}, + {"UNICODE UTF 8", "utf-8"}, + {"RFC 1345 w/o Intro", "mnemonic+ascii+0"}, + {"RFC 1345 Mnemonic", "mnemonic"}, + {NULL, NULL}, +}; + +/* + * lynx 2.8/2.7.2 compatibility code: + * read "character_set" parameter from lynx.cfg and .lynxrc + * in both MIME name and "human-readable" name (old and new style). + * Returns -1 if not recognized. + */ +PUBLIC int UCGetLYhndl_byAnyName ARGS1 (CONST char *, value) +{ + int i; + + if (value == NULL) return -1; + + /* search by name */ + for (i = 0; (i < MAXCHARSETS && LYchar_set_names[i]); i++) { + if (!strncmp(LYchar_set_names[i], value, + strlen(LYchar_set_names[i]))) { + return i; /* OK */ + } + } + + /* search by old name from 2.8/2.7.2 version */ + for (i = 0; (OLD_charset_names[i].fullname); i++) { + if (!strncmp(OLD_charset_names[i].fullname, value, + strlen(OLD_charset_names[i].fullname))) { + return UCGetLYhndl_byMIME(OLD_charset_names[i].MIMEname); /* OK */ + } + } + + return UCGetLYhndl_byMIME(value); /* by MIME */ +} + + /* * Entity names -- Ordered by ISO Latin 1 value. * --------------------------------------------- * For conversions of DECIMAL escaped entities. * Must be in order of ascending value. */ -PUBLIC CONST char * LYEntityNames[] = { +PRIVATE CONST char * LYEntityNames[] = { /* NAME DECIMAL VALUE */ "nbsp", /* 160, non breaking space */ "iexcl", /* 161, inverted exclamation mark */ @@ -801,7 +894,7 @@ PUBLIC CONST char * HTMLGetEntityName ARGS1( * in the ISO_Latin1 and UC_entity_info unicode_entities arrays. * It returns 0 if not found. - FM * - * unicode_entities[] now handles all the names from old style entities[] too. + * unicode_entities[] handles all the names from old style entities[] too. * Lynx now calls unicode_entities[] only through this function: * HTMLGetEntityUCValue(). Note, we need not check for special characters * here in function or even before it, we should check them *after* diff --git a/src/LYCharSets.h b/src/LYCharSets.h index 33c6ef76..36b583ef 100644 --- a/src/LYCharSets.h +++ b/src/LYCharSets.h @@ -12,10 +12,9 @@ extern BOOLEAN LYHaveCJKCharacterSet; extern BOOLEAN DisplayCharsetMatchLocale; /* - * LYchar_set_name[current_char_set] points to the currently active set. + * currently active character set (internal handler) */ extern int current_char_set; -extern CONST char * LYchar_set_names[]; /* * Initializer, calls initialization function for the @@ -27,16 +26,17 @@ extern int LYCharSetsDeclared NOPARAMS; 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 PARAMS((CONST char *value)); extern void HTMLSetCharacterHandling PARAMS((int i)); extern void HTMLSetUseDefaultRawMode PARAMS((int i, BOOLEAN modeflag)); extern void HTMLUseCharacterSet PARAMS((int i)); extern UCode_t HTMLGetEntityUCValue PARAMS((CONST char *name)); extern void Set_HTCJK PARAMS((CONST char *inMIMEname, CONST char *outMIMEname)); -extern CONST char * LYEntityNames[]; extern CONST char * HTMLGetEntityName PARAMS((UCode_t code)); /* ** HTMLGetEntityName calls LYEntityNames for iso-8859-1 entity diff --git a/src/LYDownload.c b/src/LYDownload.c index a0b9a86f..db42b431 100644 --- a/src/LYDownload.c +++ b/src/LYDownload.c @@ -81,6 +81,7 @@ PUBLIC void LYDownload ARGS1( * Go past "SugFile=". */ sug_file += 8; + HTUnEscape(sug_file); } if ((file = (char *)strstr(Line, "File=")) == NULL) diff --git a/src/LYGlobalDefs.h b/src/LYGlobalDefs.h index c3ebddbd..6852a5d6 100644 --- a/src/LYGlobalDefs.h +++ b/src/LYGlobalDefs.h @@ -231,6 +231,7 @@ 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 int outgoing_mail_charset; /* translate outgoing mail to this charset */ extern char *personal_mail_address; extern char *homepage; /* startfile or command line argument */ extern char *editor; /* if non empty it enables edit mode with @@ -250,6 +251,7 @@ extern BOOLEAN historical_comments; extern BOOLEAN minimal_comments; extern BOOLEAN soft_dquotes; extern BOOLEAN LYCancelDownload; +extern BOOLEAN LYRestricted; extern BOOLEAN LYValidate; extern BOOLEAN LYPermitURL; extern BOOLEAN enable_scrollback; /* Clear screen before displaying new page */ diff --git a/src/LYLocal.c b/src/LYLocal.c index 4490e16c..5750d7ae 100644 --- a/src/LYLocal.c +++ b/src/LYLocal.c @@ -240,6 +240,7 @@ PRIVATE BOOLEAN ok_stat ARGS2(char *, name, struct stat*, sb) { char tmpbuf[LY_MAXPATH+80]; + CTRACE(tfp, "testing ok_stat(%s)\n", name); if (stat(name, sb) < 0) { sprintf(tmpbuf, "Unable to get status of '%s'.", name); HTAlert(tmpbuf); @@ -253,6 +254,7 @@ PRIVATE BOOLEAN ok_lstat ARGS2(char *, name, struct stat*, sb) { char tmpbuf[LY_MAXPATH+80]; + CTRACE(tfp, "testing ok_lstat(%s)\n", name); if (lstat(name, sb) < 0) { sprintf(tmpbuf, "Unable to get status of '%s'.", name); HTAlert(tmpbuf); @@ -638,7 +640,8 @@ PRIVATE BOOLEAN modify_location ARGS1( /* * Allow ~/ references to the home directory. */ - if (!strncmp(tmpbuf,"~/",2)) { + if (!strncmp(tmpbuf, "~/", 2) + || !strcmp(tmpbuf,"~")) { strcpy(newpath, Home_Dir()); strcat(newpath, (tmpbuf + 1)); strcpy(tmpbuf, newpath); @@ -665,7 +668,7 @@ PRIVATE BOOLEAN modify_location ARGS1( if (!ok_stat(newpath, &dir_info)) { return 0; } - if (S_ISDIR(dir_info.st_mode)) { + if (!S_ISDIR(dir_info.st_mode)) { HTAlert("Destination is not a valid directory! Request denied."); return 0; } diff --git a/src/LYMain.c b/src/LYMain.c index 05e7d45f..f42d3bcc 100644 --- a/src/LYMain.c +++ b/src/LYMain.c @@ -168,6 +168,7 @@ PUBLIC BOOLEAN nolist = FALSE; PUBLIC BOOLEAN historical_comments = FALSE; PUBLIC BOOLEAN minimal_comments = FALSE; PUBLIC BOOLEAN soft_dquotes = FALSE; +PUBLIC BOOLEAN LYRestricted = FALSE; PUBLIC BOOLEAN LYValidate = FALSE; PUBLIC BOOLEAN LYPermitURL = FALSE; PUBLIC BOOLEAN child_lynx = FALSE; @@ -253,6 +254,7 @@ PUBLIC char *lynxlistfile = NULL; /* the current list file URL */ PUBLIC char *lynxlinksfile = NULL; /* the current visited links file URL */ PUBLIC char *startrealm = NULL; /* the startfile realm */ PUBLIC char *indexfile = NULL; /* an index file if there is one */ +PUBLIC int outgoing_mail_charset = -1; /* translate mail to this charset */ PUBLIC char *personal_mail_address = NULL; /* the users mail address */ PUBLIC char *x_display = NULL; /* display environment variable */ PUBLIC char *personal_type_map = NULL; /* .mailcap */ @@ -369,7 +371,6 @@ PUBLIC FILE *logfile = NULL; /* for WAIS log file output in libWWW */ extern int HTNewsChunkSize; /* Number of news articles per chunk (HTNews.c) */ extern int HTNewsMaxChunk; /* Max news articles before chunking (HTNews.c) */ -PRIVATE BOOLEAN anon_restrictions_set = FALSE; PRIVATE BOOLEAN stack_dump = FALSE; PRIVATE char *terminal = NULL; PRIVATE char *pgm; @@ -772,7 +773,7 @@ PUBLIC int main ARGS2( } else if (strncmp(argv[i], "-anonymous", 10) == 0) { if (!LYValidate) parse_restrictions("default"); - anon_restrictions_set = TRUE; + LYRestricted = TRUE; } else if (strcmp(argv[i], "-validate") == 0) { /* * Follow only http URLs. @@ -844,9 +845,9 @@ PUBLIC int main ARGS2( LYUseTraceLog = TRUE; } } else if (strncmp(buf, "-anonymous", 10) == 0) { - if (!LYValidate && !anon_restrictions_set) + if (!LYValidate && !LYRestricted) parse_restrictions("default"); - anon_restrictions_set = TRUE; + LYRestricted = TRUE; } else if (strcmp(buf, "-validate") == 0) { /* * Follow only http URLs. @@ -988,7 +989,7 @@ PUBLIC int main ARGS2( * set the default restrictions for that account and disallow * a TRACE log NOW. - FM */ - if (!LYValidate && !anon_restrictions_set && + if (!LYValidate && !LYRestricted && strlen((char *)ANONYMOUS_USER) > 0 && #if defined (VMS) || defined (NOUSERS) !strcasecomp(((char *)getenv("USER")==NULL ? " " : getenv("USER")), @@ -1002,7 +1003,7 @@ PUBLIC int main ARGS2( #endif /* VMS */ { parse_restrictions("default"); - anon_restrictions_set = TRUE; + LYRestricted = TRUE; LYUseTraceLog = FALSE; } @@ -1050,7 +1051,7 @@ PUBLIC int main ARGS2( * If TRACE is on, indicate whether the * anonymous restrictions are set. - FM */ - if (anon_restrictions_set) { + if (LYRestricted) { CTRACE(tfp, "LYMain: Anonymous restrictions set.\n"); } @@ -1847,9 +1848,9 @@ static int anonymous_fun ARGS3( * override or replace any additional * restrictions from the command line. - FM */ - if (!anon_restrictions_set) + if (!LYRestricted) parse_restrictions("default"); - anon_restrictions_set = TRUE; + LYRestricted = TRUE; return 0; } diff --git a/src/LYOptions.c b/src/LYOptions.c index b735913c..94a8ac3c 100644 --- a/src/LYOptions.c +++ b/src/LYOptions.c @@ -4031,9 +4031,11 @@ PUBLIC int gen_options ARGS1( NOTEMPTY(LYUserAgent), text_len, ""); } - fprintf(fp0, - "<a href=\"%s\">lynx.cfg information (read-only)</a>\n", - lynx_cfg_infopage()); + if (!LYRestricted) { + fprintf(fp0, + "<a href=\"%s\">lynx.cfg information (read-only)</a>\n", + lynx_cfg_infopage()); + } fprintf(fp0,"\n</pre>\n"); diff --git a/src/LYPrint.c b/src/LYPrint.c index 94e447a0..da791c6a 100644 --- a/src/LYPrint.c +++ b/src/LYPrint.c @@ -63,6 +63,8 @@ PRIVATE int remove_quotes PARAMS((char *string)); #endif /* VMS */ +PRIVATE CONST char* subject_translate8bit PARAMS((char *source)); + PUBLIC int printfile ARGS1( document *, newdoc) { @@ -91,6 +93,7 @@ PUBLIC int printfile ARGS1( HTAtom *encoding; BOOL use_mime, use_cte, use_type; CONST char *disp_charset; + CONST char *subject; /* print-to-email */ static BOOLEAN first_mail_preparsed = TRUE; char *envbuffer = NULL; #ifdef VMS @@ -243,6 +246,7 @@ PUBLIC int printfile ARGS1( * Act on the request. - FM */ switch (type) { + case TO_FILE: #if defined(__DJGPP__) || defined(_WINDOWS) _fmode = O_TEXT; @@ -591,7 +595,13 @@ PUBLIC int printfile ARGS1( } use_type = (disp_charset || HTisDocumentSource()); - change_sug_filename(sug_filename); + /* + * Use newdoc->title as a subject instead of sug_filename: + * MORE readable and 8-bit letters shouldn't be a problem - LP + */ + /* change_sug_filename(sug_filename); */ + subject = subject_translate8bit(newdoc->title); + #ifdef VMS if (strchr(user_response,'@') && !strchr(user_response,':') && !strchr(user_response,'%') && !strchr(user_response,'"')) { @@ -687,7 +697,7 @@ PUBLIC int printfile ARGS1( * For PMDF, put the subject in the * header file and close it. - FM */ - fprintf(hfd, "Subject: %.70s\n\n", newdoc->title); + fprintf(hfd, "Subject: %.70s\n\n", subject); LYCloseTempFP(hfd); /* * Now set up the command. - FM @@ -704,12 +714,12 @@ PUBLIC int printfile ARGS1( * For "generic" VMS MAIL, include * the subject in the command. - FM */ - remove_quotes(sug_filename); + remove_quotes(subject); */ sprintf(buffer, "%s %s/subject=\"%.70s\" %s %s", system_mail, system_mail_flags, - newdoc->title, + subject, tempfile, user_response); } @@ -815,11 +825,9 @@ PUBLIC int printfile ARGS1( /* * Add the To, Subject, and X-URL headers. - FM - * Use newdoc->title as a subject instead of sug_filename: - * MORE readable and 8-bit letters shouldn't be a problem - LP */ fprintf(outfile_fp, "To: %s\nSubject: %s\n", - user_response, newdoc->title); + user_response, subject); fprintf(outfile_fp, "X-URL: %s\n\n", newdoc->address); if (LYPrependBaseToSource && HTisDocumentSource()) { /* @@ -1226,6 +1234,55 @@ PRIVATE int remove_quotes ARGS1( #endif /* VMS */ /* + * Mail subject may have 8-bit characters and they are in display charset. + * There is no stable practice for 8-bit subject encodings: + * MIME define "quoted-printable" which holds charset info + * but most mailers still don't support it, on the other hand + * many mailers send open 8-bit subjects without charset info + * and use local assumption for certain countries. + * + * We translate subject to "outgoing_mail_charset" (defined in lynx.cfg) + * it may correspond to US-ASCII as the safest value or any other + * lynx character handler, -1 for no translation (so display charset). + * + */ +PRIVATE CONST char* subject_translate8bit ARGS1(char *, source) +{ + CONST char *p = source; + char temp[256]; + char *q = temp; + char *target = NULL; + + int charset_in, charset_out, uck; + char replace_buf [10]; + + int i = outgoing_mail_charset; /* from lynx.cfg, -1 by default */ + + if (i < 0 + || LYHaveCJKCharacterSet + || LYCharSet_UC[i].enc == UCT_ENC_CJK) { + return(source); /* OK */ + } else { + charset_out = i; + charset_in = current_char_set; + } + + for ( ; *p; p++) { + LYstrncpy(q, p, 1); + if ((unsigned char)*q <= 127) { + StrAllocCat(target, q); + } else { + uck = UCTransCharStr(replace_buf, sizeof(replace_buf), *q, + charset_in, charset_out, YES); + if (uck >0) + StrAllocCat(target, replace_buf); + } + } + + return(target); +} + +/* * print_options writes out the current printer choices to a file * so that the user can select printers in the same way that * they select all other links diff --git a/src/LYReadCFG.c b/src/LYReadCFG.c index e88aa621..c90a390e 100644 --- a/src/LYReadCFG.c +++ b/src/LYReadCFG.c @@ -519,21 +519,25 @@ static int assume_unrec_charset_fun ARGS1( static int character_set_fun ARGS1( char *, value) { - size_t i; - size_t len; - - len = strlen (value); - for (i = 0; LYchar_set_names[i]; i++) { /* search by name, compatibility */ - if (!strncmp(value, LYchar_set_names[i], len)) { - current_char_set = i; - return 0; - } - } + int i = UCGetLYhndl_byAnyName(value); /* by MIME or full name */ + if (i < 0) + ; /* do nothing here: so fallback to userdefs.h */ + else + current_char_set = i; - current_char_set = safeUCGetLYhndl_byMIME(value); /* by MIME */ return 0; } +static int outgoing_mail_charset_fun ARGS1( + char *, value) +{ + outgoing_mail_charset = UCGetLYhndl_byMIME(value); + /* -1 if NULL or not recognized value: no translation (compatibility) */ + + return 0; +} + + #ifdef USE_COLOR_TABLE static int color_fun ARGS1( char *, value) @@ -896,6 +900,7 @@ static Config_Type Config_Table [] = PARSE_SET("no_ismap_if_usemap", CONF_BOOL, LYNoISMAPifUSEMAP), PARSE_ENV("no_proxy", CONF_ENV, 0 ), PARSE_SET("no_referer_header", CONF_BOOL, LYNoRefererHeader), + PARSE_FUN("outgoing_mail_charset", CONF_FUN, outgoing_mail_charset_fun), #ifdef DISP_PARTIAL PARSE_SET("partial", CONF_BOOL, display_partial), #endif @@ -1127,7 +1132,7 @@ PUBLIC void read_cfg ARGS4( LYLowerCase(name); else LYUpperCase(name); - + if (getenv (name) == 0) { #ifdef VMS Define_VMSLogical(tbl->name, value); @@ -1225,11 +1230,11 @@ PUBLIC char *lynx_cfg_infopage NOARGS LYforce_no_cache = TRUE; /* don't cache this doc */ -#ifdef HAVE_CONFIG_H +#if defined(HAVE_CONFIG_H) || defined(VMS) StrAllocCopy(temp, LYNX_CFG_FILE); #else - StrAllocCopy(temp, helpfilepath); - StrAllocCat(temp, LYNXCFG_HELP); /* DJGPP/Win32/VMS should care of */ + StrAllocCopy(temp, helpfilepath); /* FIXME: no absolute path */ + StrAllocCat(temp, LYNXCFG_HELP); /* for lynx.cfg on DOS/Win32 */ #endif /* HAVE_CONFIG_H */ BeginInternalPage (fp0, LYNXCFG_TITLE, NULL); diff --git a/src/LYShowInfo.c b/src/LYShowInfo.c index fa00ccc3..0783c393 100644 --- a/src/LYShowInfo.c +++ b/src/LYShowInfo.c @@ -52,11 +52,11 @@ PRIVATE char *lynx_compile_opts NOARGS fprintf(fp0, "See also <a href=\"%s\">your lynx.cfg</a> for run-time options\n\n", lynx_cfg_infopage()); - fprintf(fp0, "\n<em>config.cache</em>\n"); + fprintf(fp0, "\n%s<br>\n<em>config.cache</em>\n", AUTOCONF_CONFIG_CACHE); for (n = 0; n < TABLESIZE(config_cache); n++) { PutDefs(config_cache, n); } - fprintf(fp0, "\n<em>lynx_cfg.h</em>\n"); + fprintf(fp0, "\n%s<br>\n<em>lynx_cfg.h</em>\n", AUTOCONF_LYNXCFG_H); for (n = 0; n < TABLESIZE(config_defines); n++) { PutDefs(config_defines, n); } @@ -131,13 +131,16 @@ PUBLIC int showinfo ARGS4( (LYNX_RELEASE ? LYNX_RELEASE_DATE : &LYNX_DATE[LYNX_DATE_OFF]), (LYNX_RELEASE ? LYNX_WWW_HOME : LYNX_WWW_DIST), (LYNX_RELEASE ? "latest release" : "development version") ); + + if (!LYRestricted) { #ifdef HAVE_CFG_DEFS_H - fprintf(fp0, " - <a href=\"%s\">compile time settings</a></h1>\n", - lynx_compile_opts()); + fprintf(fp0, " - <a href=\"%s\">compile time settings</a></h1>\n", + lynx_compile_opts()); #else - fprintf(fp0, " - <a href=\"%s\">your lynx.cfg</a></h1>\n", - lynx_cfg_infopage()); + fprintf(fp0, " - <a href=\"%s\">your lynx.cfg</a></h1>\n", + lynx_cfg_infopage()); #endif + } #ifdef DIRED_SUPPORT if (lynx_edit_mode && nlinks > 0) { diff --git a/src/LYrcFile.c b/src/LYrcFile.c index 579b6db5..d998ea7e 100644 --- a/src/LYrcFile.c +++ b/src/LYrcFile.c @@ -246,12 +246,12 @@ PUBLIC void read_rc NOPARAMS if ((cp2 = (char *)strchr(cp, '=')) != NULL) cp = cp2 + 1; cp = LYSkipBlanks(cp); - for (; LYchar_set_names[i]; i++) { - if (!strncmp(cp, LYchar_set_names[i], strlen(cp))) { - current_char_set=i; - break; - } - } + + i = UCGetLYhndl_byAnyName(cp); /* by MIME or full name */ + if (i < 0) + ; /* do nothing here: so fallback to lynx.cfg */ + else + current_char_set = i; /* * Preferred language. diff --git a/userdefs.h b/userdefs.h index 2ea10c99..fd8258aa 100644 --- a/userdefs.h +++ b/userdefs.h @@ -1216,12 +1216,12 @@ * the version definition with the Project Version on checkout. Just * ignore it. - kw */ /* $Format: "#define LYNX_VERSION \"$ProjectVersion$\""$ */ -#define LYNX_VERSION "2.8.1pre.1" +#define LYNX_VERSION "2.8.1pre.2" #define LYNX_WWW_HOME "http://lynx.browser.org/" #define LYNX_WWW_DIST "http://www.slcc.edu/lynx/current/" #define LYNX_RELEASE FALSE /* $Format: "#define LYNX_DATE \"$ProjectDate$\""$ */ -#define LYNX_DATE "Tue, 22 Sep 1998 05:05:12 -0600" +#define LYNX_DATE "Fri, 25 Sep 1998 04:41:38 -0600" #define LYNX_DATE_OFF 5 /* truncate the automatically-generated date */ #define LYNX_DATE_LEN 11 /* truncate the automatically-generated date */ #define LYNX_RELEASE_DATE "1998" |