diff options
author | Thomas E. Dickey <dickey@invisible-island.net> | 2013-10-14 00:13:37 -0400 |
---|---|---|
committer | Thomas E. Dickey <dickey@invisible-island.net> | 2013-10-14 00:13:37 -0400 |
commit | ed46d3cc0121dbce87345bbbb119cd4080c247c7 (patch) | |
tree | c34bdd611f309476e5c1c1d7b72bf43236b522fb /src | |
parent | f1977d62c94d74a72d1c7a4abbbecdec21e3980e (diff) | |
download | lynx-snapshots-ed46d3cc0121dbce87345bbbb119cd4080c247c7.tar.gz |
snapshot of project "lynx", label v2-8-8dev_16q
Diffstat (limited to 'src')
-rw-r--r-- | src/GridText.c | 14 | ||||
-rw-r--r-- | src/HTAlert.c | 6 | ||||
-rw-r--r-- | src/HTML.c | 4 | ||||
-rw-r--r-- | src/LYBookmark.c | 4 | ||||
-rw-r--r-- | src/LYCharUtils.c | 4 | ||||
-rw-r--r-- | src/LYDownload.c | 22 | ||||
-rw-r--r-- | src/LYEditmap.c | 224 | ||||
-rw-r--r-- | src/LYForms.c | 78 | ||||
-rw-r--r-- | src/LYGetFile.c | 4 | ||||
-rw-r--r-- | src/LYIcon.rc | 33 | ||||
-rw-r--r-- | src/LYJump.c | 14 | ||||
-rw-r--r-- | src/LYKeymap.c | 19 | ||||
-rw-r--r-- | src/LYLocal.c | 6 | ||||
-rw-r--r-- | src/LYMail.c | 12 | ||||
-rw-r--r-- | src/LYMain.c | 4 | ||||
-rw-r--r-- | src/LYMainLoop.c | 36 | ||||
-rw-r--r-- | src/LYNews.c | 12 | ||||
-rw-r--r-- | src/LYOptions.c | 36 | ||||
-rw-r--r-- | src/LYPrint.c | 14 | ||||
-rw-r--r-- | src/LYSearch.c | 14 | ||||
-rw-r--r-- | src/LYStrings.c | 2054 | ||||
-rw-r--r-- | src/LYStrings.h | 181 | ||||
-rw-r--r-- | src/LYUpload.c | 4 | ||||
-rw-r--r-- | src/LYUtils.c | 16 | ||||
-rw-r--r-- | src/LYrcFile.c | 4 | ||||
-rw-r--r-- | src/makefile.in | 4 | ||||
-rw-r--r-- | src/tidy_tls.c | 10 |
27 files changed, 1378 insertions, 1455 deletions
diff --git a/src/GridText.c b/src/GridText.c index b15d2d19..7dce2483 100644 --- a/src/GridText.c +++ b/src/GridText.c @@ -1,5 +1,5 @@ /* - * $LynxId: GridText.c,v 1.269 2013/10/03 12:13:18 tom Exp $ + * $LynxId: GridText.c,v 1.273 2013/10/13 20:23:07 tom Exp $ * * Character grid hypertext object * =============================== @@ -6008,7 +6008,7 @@ static void HText_trimHightext(HText *text, StrnAllocCopy(hi_string, line_ptr2->data, - (actual_len - hilite_len)); + (size_t) (actual_len - hilite_len)); actual_len -= (int) strlen(hi_string); /*handle LY_SOFT_NEWLINEs -VH */ hi_offset += remove_special_attr_chars(hi_string); @@ -7697,12 +7697,12 @@ int do_www_search(DocInfo *doc) QueryNum = QueryTotal; get_query: - if ((ch = LYgetBString(&searchstring, VISIBLE, 0, recall)) < 0 || + if ((ch = LYgetBString(&searchstring, FALSE, 0, recall)) < 0 || isBEmpty(searchstring) || - ch == UPARROW || - ch == DNARROW) { + ch == UPARROW_KEY || + ch == DNARROW_KEY) { - if (recall && ch == UPARROW) { + if (recall && ch == UPARROW_KEY) { if (PreviousSearch) { /* * Use the second to last query in the list. -FM @@ -7734,7 +7734,7 @@ int do_www_search(DocInfo *doc) } goto get_query; } - } else if (recall && ch == DNARROW) { + } else if (recall && ch == DNARROW_KEY) { if (PreviousSearch) { /* * Use the first query in the list. -FM diff --git a/src/HTAlert.c b/src/HTAlert.c index 641b36e3..59569d4e 100644 --- a/src/HTAlert.c +++ b/src/HTAlert.c @@ -1,5 +1,5 @@ /* - * $LynxId: HTAlert.c,v 1.99 2013/05/03 08:41:08 tom Exp $ + * $LynxId: HTAlert.c,v 1.100 2013/10/12 14:52:24 tom Exp $ * * Displaying messages and getting input for Lynx Browser * ========================================================== @@ -656,7 +656,7 @@ char *HTPrompt(const char *Msg, const char *deflt) BStrCopy0(data, deflt ? deflt : ""); if (!dump_output_immediately) - (void) LYgetBString(&data, VISIBLE, 0, NORECALL); + (void) LYgetBString(&data, FALSE, 0, NORECALL); StrAllocCopy(rep, data->str); @@ -676,7 +676,7 @@ char *HTPromptPassword(const char *Msg) if (!dump_output_immediately) { _statusline(Msg ? Msg : PASSWORD_PROMPT); BStrCopy0(data, ""); - (void) LYgetBString(&data, HIDDEN, 0, NORECALL); + (void) LYgetBString(&data, TRUE, 0, NORECALL); StrAllocCopy(result, data->str); BStrFree(data); } else { diff --git a/src/HTML.c b/src/HTML.c index f059af99..025d39e8 100644 --- a/src/HTML.c +++ b/src/HTML.c @@ -1,5 +1,5 @@ /* - * $LynxId: HTML.c,v 1.162 2013/10/02 22:22:06 tom Exp $ + * $LynxId: HTML.c,v 1.163 2013/10/13 14:24:33 tom Exp $ * * Structured stream to Rich hypertext converter * ============================================ @@ -6385,7 +6385,7 @@ static int HTML_end_element(HTStructured * me, int element_number, HTChunkPuts(&me->object, "</OBJECT>"); if (!include) /* error, should not happen */ include = &me->xinclude; - StrnAllocCat(*include, me->object.data, me->object.size); + StrnAllocCat(*include, me->object.data, (size_t) me->object.size); clear_objectdata(me); /* an internal fake call to keep our stack happy: */ HTML_start_element(me, HTML_OBJECT, NULL, NULL, diff --git a/src/LYBookmark.c b/src/LYBookmark.c index 6b79f298..b5425f4c 100644 --- a/src/LYBookmark.c +++ b/src/LYBookmark.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYBookmark.c,v 1.74 2013/05/02 10:43:29 tom Exp $ + * $LynxId: LYBookmark.c,v 1.75 2013/10/12 14:51:18 tom Exp $ */ #include <HTUtils.h> #include <HTAlert.h> @@ -298,7 +298,7 @@ void save_bookmark_link(const char *address, } LYReduceBlanks(string_data->str); LYMBM_statusline(TITLE_PROMPT); - LYgetBString(&string_data, VISIBLE, 0, NORECALL); + LYgetBString(&string_data, FALSE, 0, NORECALL); if (isBEmpty(string_data)) { LYMBM_statusline(CANCELLED); LYSleepMsg(); diff --git a/src/LYCharUtils.c b/src/LYCharUtils.c index cb455aac..4d240ddf 100644 --- a/src/LYCharUtils.c +++ b/src/LYCharUtils.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYCharUtils.c,v 1.123 2013/06/04 20:42:47 tom Exp $ + * $LynxId: LYCharUtils.c,v 1.124 2013/10/13 14:26:51 tom Exp $ * * Functions associated with LYCharSets.c and the Lynx version of HTML.c - FM * ========================================================================== @@ -1992,7 +1992,7 @@ void LYParseRefreshURL(char *content, cp1 = cp; while (*cp1 && isdigit(UCH(*cp1))) cp1++; - StrnAllocCopy(Seconds, cp, (int) (cp1 - cp)); + StrnAllocCopy(Seconds, cp, (size_t) (cp1 - cp)); } *p_seconds = Seconds; *p_address = LYParseTagParam(content, "URL"); diff --git a/src/LYDownload.c b/src/LYDownload.c index 23ce2f66..ffaf24e4 100644 --- a/src/LYDownload.c +++ b/src/LYDownload.c @@ -1,4 +1,4 @@ -/* $LynxId: LYDownload.c,v 1.66 2012/02/09 18:55:26 tom Exp $ */ +/* $LynxId: LYDownload.c,v 1.69 2013/10/13 20:23:07 tom Exp $ */ #include <HTUtils.h> #include <HTParse.h> #include <HTList.h> @@ -140,12 +140,12 @@ void LYDownload(char *line) } check_recall: - if ((ch = LYgetBString(&buffer, VISIBLE, 0, recall)) < 0 || + if ((ch = LYgetBString(&buffer, FALSE, 0, recall)) < 0 || isBEmpty(buffer) || - ch == UPARROW || - ch == DNARROW) { + ch == UPARROW_KEY || + ch == DNARROW_KEY) { - if (recall && ch == UPARROW) { + if (recall && ch == UPARROW_KEY) { if (FirstRecall) { FirstRecall = FALSE; /* @@ -177,7 +177,7 @@ void LYDownload(char *line) } goto check_recall; } - } else if (recall && ch == DNARROW) { + } else if (recall && ch == DNARROW_KEY) { if (FirstRecall) { FirstRecall = FALSE; /* @@ -306,12 +306,12 @@ void LYDownload(char *line) } check_again: - if ((ch = LYgetBString(&buffer, VISIBLE, 0, recall)) < 0 || + if ((ch = LYgetBString(&buffer, FALSE, 0, recall)) < 0 || isBEmpty(buffer) || - ch == UPARROW || - ch == DNARROW) { + ch == UPARROW_KEY || + ch == DNARROW_KEY) { - if (recall && ch == UPARROW) { + if (recall && ch == UPARROW_KEY) { if (FirstRecall) { FirstRecall = FALSE; /* @@ -344,7 +344,7 @@ void LYDownload(char *line) } goto check_again; } - } else if (recall && ch == DNARROW) { + } else if (recall && ch == DNARROW_KEY) { if (FirstRecall) { FirstRecall = FALSE; /* diff --git a/src/LYEditmap.c b/src/LYEditmap.c index eadc6aca..e49475ca 100644 --- a/src/LYEditmap.c +++ b/src/LYEditmap.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYEditmap.c,v 1.42 2013/10/12 00:16:50 tom Exp $ + * $LynxId: LYEditmap.c,v 1.54 2013/10/13 20:23:07 tom Exp $ * * LYEditMap.c * Keybindings for line and form editing. @@ -41,13 +41,8 @@ static LYEditCode DefaultEditBinding[KEYMAP_SIZE - 1]; static LYEditCode BetterEditBinding[KEYMAP_SIZE - 1]; static LYEditCode BashlikeEditBinding[KEYMAP_SIZE - 1]; -/* Oh no, not another one of those tables... - * - * If modifier bit is set in a lynxkeycode, it is first looked up here. Note - * the type different from the previous tables (short vs. char), since we want - * to hold larger values. OTOH we can keep the size shorter, everything beyond - * the end is effectively LYE_UNMOD (ignore modifier) by virtue of the - * LKC_TO_LEC_M1 macro. +/* + * If a modifier bit is set in a lynxkeycode, it is first looked up here. * * Currently this table isn't specific to the current_lineedit value, it is * shared by all alternative "Bindings" to save space. However, if the @@ -274,13 +269,13 @@ static const LYEditInit initMod1Binding[] = {253, LYE_UNMOD}, {254, LYE_UNMOD}, {255, LYE_UNMOD}, - {256, LYE_UNMOD}, /* UPARROW */ - {257, LYE_UNMOD}, /* DNARROW */ - {258, LYE_UNMOD}, /* RTARROW */ - {259, LYE_UNMOD}, /* LTARROW */ - {260, LYE_UNMOD}, /* PGDOWN */ - {261, LYE_UNMOD}, /* PGUP */ - {262, LYE_FORM_PASS}, /* HOME */ + {256, LYE_UNMOD}, /* UPARROW_KEY */ + {257, LYE_UNMOD}, /* DNARROW_KEY */ + {258, LYE_UNMOD}, /* RTARROW_KEY */ + {259, LYE_UNMOD}, /* LTARROW_KEY */ + {260, LYE_UNMOD}, /* PGDOWN_KEY */ + {261, LYE_UNMOD}, /* PGUP_KEY */ + {262, LYE_FORM_PASS}, /* HOME_KEY */ {263, LYE_FORM_PASS}, /* END_KEY */ {264, LYK_DWIMHELP | LYE_FORM_LAC}, /* F1 */ {265, LYE_UNMOD}, /* DO_KEY */ @@ -565,15 +560,15 @@ static const LYEditInit initDefaultEditor[] = {253, LYE_CHAR}, {254, LYE_CHAR}, {255, LYE_CHAR}, - {256, LYE_FORM_PASS}, /* UPARROW */ - {257, LYE_FORM_PASS}, /* DNARROW */ - {258, LYE_FORW}, /* RTARROW */ - {259, LYE_BACK}, /* LTARROW */ - {260, LYE_FORM_PASS}, /* PGDOWN */ - {261, LYE_FORM_PASS}, /* PGUP */ - {262, LYE_BOL}, /* HOME */ + {256, LYE_FORM_PASS}, /* UPARROW_KEY */ + {257, LYE_FORM_PASS}, /* DNARROW_KEY */ + {258, LYE_FORW}, /* RTARROW_KEY */ + {259, LYE_BACK}, /* LTARROW_KEY */ + {260, LYE_FORM_PASS}, /* PGDOWN_KEY */ + {261, LYE_FORM_PASS}, /* PGUP_KEY */ + {262, LYE_BOL}, /* HOME_KEY */ {263, LYE_EOL}, /* END_KEY */ - {264, LYE_FORM_PASS}, /* F1 */ + {264, LYE_FORM_PASS}, /* F1_KEY */ #if !(defined(_WINDOWS) || defined(__DJGPP__)) {265, LYE_TAB}, /* DO_KEY */ {266, LYE_BOL}, /* FIND_KEY */ @@ -844,15 +839,15 @@ static const LYEditInit initBetterEditor[] = {253, LYE_CHAR}, {254, LYE_CHAR}, {255, LYE_CHAR}, - {256, LYE_FORM_PASS}, /* UPARROW */ - {257, LYE_FORM_PASS}, /* DNARROW */ - {258, LYE_FORW}, /* RTARROW */ - {259, LYE_BACK}, /* LTARROW */ - {260, LYE_FORM_PASS}, /* PGDOWN */ - {261, LYE_FORM_PASS}, /* PGUP */ - {262, LYE_BOL}, /* HOME */ + {256, LYE_FORM_PASS}, /* UPARROW_KEY */ + {257, LYE_FORM_PASS}, /* DNARROW_KEY */ + {258, LYE_FORW}, /* RTARROW_KEY */ + {259, LYE_BACK}, /* LTARROW_KEY */ + {260, LYE_FORM_PASS}, /* PGDOWN_KEY */ + {261, LYE_FORM_PASS}, /* PGUP_KEY */ + {262, LYE_BOL}, /* HOME_KEY */ {263, LYE_EOL}, /* END_KEY */ - {264, LYE_FORM_PASS}, /* F1 */ + {264, LYE_FORM_PASS}, /* F1_KEY */ #if !(defined(_WINDOWS) || defined(__DJGPP__)) {265, LYE_TAB}, /* DO_KEY */ {266, LYE_BOL}, /* FIND_KEY */ @@ -1124,15 +1119,15 @@ static const LYEditInit initBashlikeEditor[] = {253, LYE_CHAR}, {254, LYE_CHAR}, {255, LYE_CHAR}, - {256, LYE_FORM_PASS}, /* UPARROW */ - {257, LYE_FORM_PASS}, /* DNARROW */ - {258, LYE_FORW}, /* RTARROW */ - {259, LYE_BACK}, /* LTARROW */ - {260, LYE_FORM_PASS}, /* PGDOWN */ - {261, LYE_FORM_PASS}, /* PGUP */ - {262, LYE_BOL}, /* HOME */ + {256, LYE_FORM_PASS}, /* UPARROW_KEY */ + {257, LYE_FORM_PASS}, /* DNARROW_KEY */ + {258, LYE_FORW}, /* RTARROW_KEY */ + {259, LYE_BACK}, /* LTARROW_KEY */ + {260, LYE_FORM_PASS}, /* PGDOWN_KEY */ + {261, LYE_FORM_PASS}, /* PGUP_KEY */ + {262, LYE_BOL}, /* HOME_KEY */ {263, LYE_EOL}, /* END_KEY */ - {264, LYE_FORM_PASS}, /* F1 */ + {264, LYE_FORM_PASS}, /* F1_KEY */ #if !(defined(_WINDOWS) || defined(__DJGPP__)) {265, LYE_TAB}, /* DO_KEY */ {266, LYE_BOL}, /* FIND_KEY */ @@ -1157,7 +1152,7 @@ LYEditConfig LYLineEditors[] = #endif }; -const char *LYLineeditNames[TABLESIZE(LYLineEditors) + 1]; +const char *LYEditorNames[TABLESIZE(LYLineEditors) + 1]; /* * Add the URL (relative to helpfilepath) used for context-dependent @@ -1237,46 +1232,45 @@ BOOL LYRemapEditBinding(int xlkc, int c = xlkc & LKC_MASK; BOOLEAN success = FALSE; - if (xlkc < 0 || (xlkc & LKC_ISLAC) || c >= KEYMAP_SIZE + 1) - return FALSE; + if (xlkc >= 0 && !(xlkc & LKC_ISLAC) && (c < KEYMAP_SIZE + 1)) { + LYEditCode code = (LYEditCode) lec; + #ifdef USE_ALT_BINDINGS - if (xlkc & LKC_MOD1) { - if (c > LAST_MOD1_LKC) - return FALSE; - else - Mod1Binding[c] = (short) lec; - return TRUE; - } else if (xlkc & LKC_MOD2) { - if (c > LAST_MOD2_LKC) - return FALSE; - else - Mod2Binding[c] = (short) lec; - return TRUE; - } else if (xlkc & LKC_MOD3) { - if (c > LAST_MOD3_LKC) - return FALSE; - else - Mod3Binding[c] = (short) lec; - return TRUE; - } else + if (xlkc & LKC_MOD1) { + if (c <= LAST_MOD1_LKC) { + Mod1Binding[c] = code; + success = TRUE; + } + } else if (xlkc & LKC_MOD2) { + if (c <= LAST_MOD2_LKC) { + Mod2Binding[c] = code; + success = TRUE; + } + } else if (xlkc & LKC_MOD3) { + if (c <= LAST_MOD3_LKC) { + Mod3Binding[c] = code; + success = TRUE; + } + } else #endif /* USE_ALT_BINDINGS */ - { + { #ifndef UCHAR_MAX #define UCHAR_MAX 255 #endif - if ((unsigned int) lec > UCHAR_MAX) - return FALSE; /* cannot do, doesn't fit in a char - kw */ - if (select_edi > 0) { - if ((unsigned int) select_edi < TABLESIZE(LYLineEditors)) { - LYLineEditors[select_edi - 1].used[c] = (LYEditCode) lec; - success = TRUE; - } - } else { - for (j = 0; j < (int) TABLESIZE(LYLineEditors); j++) { - success = TRUE; - if (select_edi < 0 && j + 1 + select_edi == 0) - continue; - LYLineEditors[j].used[c] = (LYEditCode) lec; + if ((unsigned int) lec <= UCHAR_MAX) { + if (select_edi > 0) { + if ((unsigned int) select_edi < TABLESIZE(LYLineEditors)) { + LYLineEditors[select_edi - 1].used[c] = code; + success = TRUE; + } + } else { + for (j = 0; j < (int) TABLESIZE(LYLineEditors); j++) { + success = TRUE; + if ((select_edi < 0) && ((j + 1 + select_edi) == 0)) + continue; + LYLineEditors[j].used[c] = code; + } + } } } } @@ -1505,7 +1499,11 @@ int LYEditmapDeclared(void) } #if 0 -static void printEditMap(LYEditConfig * table) +/* + * This function was useful in converting the hand-crafted key-bindings to + * their reusable form in 2.8.8 -TD + */ +static void checkEditMap(LYEditConfig * table) { unsigned j, k; char comment[80]; @@ -1578,66 +1576,13 @@ static void printEditMap(LYEditConfig * table) } else if (j < 127) { sprintf(comment, "\t/* %c */", j); } else { - const char *what; + const char *what = LYextraKeysToName(j); - switch (j) { - case UPARROW: - what = "UPARROW"; - break; - case DNARROW: - what = "DNARROW"; - break; - case RTARROW: - what = "RTARROW"; - break; - case LTARROW: - what = "LTARROW"; - break; - case PGDOWN: - what = "PGDOWN"; - break; - case PGUP: - what = "PGUP"; - break; - case HOME: - what = "HOME"; - break; - case END_KEY: - what = "END_KEY"; - break; - case F1: - what = "F1"; - break; - case DO_KEY: - what = "DO_KEY"; - break; - case FIND_KEY: - what = "FIND_KEY"; - break; - case SELECT_KEY: - what = "SELECT_KEY"; - break; - case INSERT_KEY: - what = "INSERT_KEY"; - break; - case REMOVE_KEY: - what = "REMOVE_KEY"; - break; - case DO_NOTHING: - what = "DO_NOTHING"; - break; - case BACKTAB_KEY: - what = "BACKTAB_KEY"; - break; - case MOUSE_KEY: - what = "MOUSE_KEY"; - break; - default: - what = ""; - break; - } - if (*what) { - sprintf(comment, "\t/* %s */", what); + if (Non_Empty(what)) { + sprintf(comment, "\t/* %s%s */", what, + ((strchr(what, '_') != 0) + ? "" + : "_KEY")); } else { strcpy(comment, ""); } @@ -1661,7 +1606,7 @@ static void printEditMap(LYEditConfig * table) } #else -#define printEditMap(table) /* nothing */ +#define checkEditMap(table) /* nothing */ #endif static void initLineEditor(LYEditConfig * table) @@ -1673,11 +1618,10 @@ static void initLineEditor(LYEditConfig * table) memset(used, 0, sizeof(LYEditCode) * (KEYMAP_SIZE - 1)); for (k = 0; init[k].code >= 0; ++k) { int code = init[k].code; - int edit = init[k].edit; - used[code] = edit; + used[code] = init[k].edit; } - printEditMap(table); + checkEditMap(table); } /* @@ -1688,7 +1632,7 @@ void LYinitEditmap(void) unsigned j; for (j = 0; j < TABLESIZE(LYLineEditors); ++j) { - LYLineeditNames[j] = LYLineEditors[j].name; + LYEditorNames[j] = LYLineEditors[j].name; initLineEditor(&LYLineEditors[j]); } for (j = 0; j < TABLESIZE(LYModifierBindings); ++j) { diff --git a/src/LYForms.c b/src/LYForms.c index a21436df..6c9e93e4 100644 --- a/src/LYForms.c +++ b/src/LYForms.c @@ -1,4 +1,4 @@ -/* $LynxId: LYForms.c,v 1.104 2013/10/12 00:03:00 tom Exp $ */ +/* $LynxId: LYForms.c,v 1.110 2013/10/13 18:39:48 tom Exp $ */ #include <HTUtils.h> #include <HTCJK.h> #include <HTTP.h> @@ -21,9 +21,9 @@ #endif #if defined(VMS) && !defined(USE_SLANG) -#define CTRL_W_HACK DO_NOTHING +#define RepaintKey() 12 /* CTRL-L for repaint */ #else -#define CTRL_W_HACK 23 /* CTRL-W refresh without clearok */ +#define RepaintKey() ((!enable_scrollback) ? 23 : 12) /* CTRL-W or CTRL-L */ #endif /* VMS && !USE_SLANG */ static int form_getstr(int cur, @@ -114,12 +114,7 @@ int change_form_link_ex(int cur, form->size_l, FormIsReadonly(form), FALSE); -#if CTRL_W_HACK != DO_NOTHING - if (!enable_scrollback) - c = CTRL_W_HACK; /* CTRL-W refresh without clearok */ - else -#endif - c = 12; /* CTRL-L for repaint */ + c = RepaintKey(); break; } form->num_value = LYhandlePopupList(form->num_value, @@ -148,12 +143,7 @@ int change_form_link_ex(int cur, */ form->value_cs = opt_ptr->value_cs; } -#if CTRL_W_HACK != DO_NOTHING - if (!enable_scrollback) - c = CTRL_W_HACK; /* CTRL-W refresh without clearok */ - else -#endif - c = 12; /* CTRL-L for repaint */ + c = RepaintKey(); break; case F_RADIO_TYPE: @@ -383,7 +373,7 @@ static int form_getstr(int cur, BOOL refresh_mb = TRUE; #endif - EditFieldData MyEdit, *edit = &MyEdit; + FieldEditor MyEdit, *edit = &MyEdit; BOOLEAN Edited = FALSE; /* Value might be updated? */ /* @@ -424,26 +414,26 @@ static int form_getstr(int cur, * Print panned line */ LYSetupEdit(edit, link_value, form->maxlength, (far_col - startcol)); - edit->pad = '_'; - edit->hidden = (BOOL) (form->type == F_PASSWORD_TYPE); + edit->efPadChar = '_'; + edit->efIsMasked = (BOOL) (form->type == F_PASSWORD_TYPE); if (use_last_tfpos && LastTFPos >= 0 && - LastTFPos < (int) edit->buffer_used) { + LastTFPos < (int) edit->efBufInUse) { #if defined(TEXTFIELDS_MAY_NEED_ACTIVATION) && defined(INACTIVE_INPUT_STYLE_VH) if (redraw_only) { - if (!(edit->buffer_used >= edit->dspwdth && - LastTFPos >= edit->dspwdth - edit->margin)) { - edit->pos = LastTFPos; - if (edit->buffer_used >= edit->dspwdth) + if (!(edit->efBufInUse >= edit->efWide && + LastTFPos >= edit->efWide - edit->efPanMargin)) { + edit->efEditAt = LastTFPos; + if (edit->efBufInUse >= edit->efWide) textinput_redrawn = FALSE; } } else #endif /* TEXTFIELDS_MAY_NEED_ACTIVATION && INACTIVE_INPUT_STYLE_VH */ - edit->pos = LastTFPos; + edit->efEditAt = LastTFPos; #ifdef ENHANCED_LINEEDIT - if (edit->pos == 0) + if (edit->efEditAt == 0) /* Do not show the region. */ - edit->mark = -(int) (1 + edit->buffer_used); + edit->efEditMark = -(int) (1 + edit->efBufInUse); #endif } /* Try to prepare for setting position based on the last mouse event */ @@ -451,7 +441,7 @@ static int form_getstr(int cur, if (!redraw_only) { if (peek_mouse_levent()) { if (!use_last_tfpos && !textinput_redrawn) { - edit->pos = 0; + edit->efEditAt = 0; } } textinput_redrawn = FALSE; @@ -459,7 +449,7 @@ static int form_getstr(int cur, #else if (peek_mouse_levent()) { if (!use_last_tfpos) - edit->pos = 0; + edit->efEditAt = 0; } #endif /* TEXTFIELDS_MAY_NEED_ACTIVATION && INACTIVE_INPUT_STYLE_VH */ LYRefreshEdit(edit); @@ -537,7 +527,7 @@ static int form_getstr(int cur, * within a mouse menu. Let's at least make sure here that the * cursor position gets restored. - kw */ - edit->dirty = TRUE; + edit->efIsDirty = TRUE; } } else # endif /* NCURSES || PDCURSES */ @@ -545,8 +535,8 @@ static int form_getstr(int cur, { if (!(ch & LKC_ISLECLAC)) - ch |= edit->current_modifiers; - edit->current_modifiers = 0; + ch |= edit->efInputMods; + edit->efInputMods = 0; if (last_xlkc != -1) { if (ch == last_xlkc) ch |= LKC_MOD3; @@ -568,14 +558,14 @@ static int form_getstr(int cur, /* * Set flag for modifier 1. */ - edit->current_modifiers |= LKC_MOD1; + edit->efInputMods |= LKC_MOD1; continue; } if (action == LYE_SETM2) { /* * Set flag for modifier 2. */ - edit->current_modifiers |= LKC_MOD2; + edit->efInputMods |= LKC_MOD2; continue; } /* @@ -637,7 +627,7 @@ static int form_getstr(int cur, StrAllocCopy(buf, (char *) e1 + 1); /* Survive _release() */ get_clip_release(); _statusline(ENTER_TEXT_ARROWS_OR_TAB); - if (strcmp(link_value, edit->buffer) != 0) { + if (strcmp(link_value, edit->efBuffer) != 0) { Edited = TRUE; } if (buf) { @@ -678,9 +668,9 @@ static int form_getstr(int cur, break; #else #ifdef ENHANCED_LINEEDIT - if (edit->mark >= 0) + if (edit->efEditMark >= 0) /* Disable. */ - edit->mark = -(int) (1 + edit->buffer_used); + edit->efEditMark = -(int) (1 + edit->efBufInUse); #endif #endif } @@ -699,12 +689,12 @@ static int form_getstr(int cur, * Left arrow in column 0 deserves special treatment here, else * you can get trapped in a form without submit button! */ - if (action == LYE_BACK && edit->pos == 0 && repeat == -1) { + if (action == LYE_BACK && edit->efEditAt == 0 && repeat == -1) { int c = YES; /* Go back immediately if no changes */ if (textfield_prompt_at_left_edge) { c = HTConfirmDefault(PREV_DOC_QUERY, NO); - } else if (strcmp(edit->buffer, link_value)) { + } else if (strcmp(edit->efBuffer, link_value)) { c = HTConfirmDefault(PREV_DOC_QUERY, NO); } if (c == YES) { @@ -753,7 +743,7 @@ static int form_getstr(int cur, if (repeat < 0) repeat = 1; while (repeat--) { - int rc = LYEdit1(edit, ch, action & ~LYE_DF, TRUE); + int rc = LYDoEdit(edit, ch, action & ~LYE_DF, TRUE); if (rc < 0) { ch = -rc; @@ -794,20 +784,20 @@ static int form_getstr(int cur, refresh_mb = TRUE; } else { if (!refresh_mb) { - LYEdit1(edit, 0, LYE_DELP, TRUE); + LYDoEdit(edit, 0, LYE_DELP, TRUE); } } #endif /* SUPPORT_MULTIBYTE_EDIT */ } _statusline(ENTER_TEXT_ARROWS_OR_TAB); - if (strcmp(link_value, edit->buffer)) { + if (strcmp(link_value, edit->efBuffer)) { Edited = TRUE; } #ifdef SUPPORT_MULTIBYTE_EDIT if (refresh_mb) #endif LYRefreshEdit(edit); - LYSetLastTFPos(edit->pos); + LYSetLastTFPos(edit->efEditAt); } } breakfor: @@ -821,7 +811,7 @@ static int form_getstr(int cur, * The previous value did fit in the line buffer, so replace it * with the new value. - FM */ - StrAllocCopy(form->value, edit->buffer); + StrAllocCopy(form->value, edit->efBuffer); } else { int old_len = (int) strlen(form->value); int new_len = (int) strlen(link_value); @@ -830,7 +820,7 @@ static int form_getstr(int cur, * Combine the modified tail with the unmodified head. - FM */ form->value[(old_len > new_len) ? (old_len - new_len) : 0] = '\0'; - StrAllocCat(form->value, edit->buffer); + StrAllocCat(form->value, edit->efBuffer); HTUserMsg(FORM_TAIL_COMBINED_WITH_HEAD); } diff --git a/src/LYGetFile.c b/src/LYGetFile.c index c979b5f9..3feebcc1 100644 --- a/src/LYGetFile.c +++ b/src/LYGetFile.c @@ -1,4 +1,4 @@ -/* $LynxId: LYGetFile.c,v 1.89 2013/05/01 00:21:02 tom Exp $ */ +/* $LynxId: LYGetFile.c,v 1.90 2013/10/12 14:51:18 tom Exp $ */ #include <HTUtils.h> #include <HTTP.h> #include <HTAnchor.h> /* Anchor class */ @@ -1138,7 +1138,7 @@ int follow_link_number(int c, /* * Get the number, possibly with a letter suffix, from the user. */ - if (LYgetBString(&temp, VISIBLE, sizeof(temp), NORECALL) < 0 || + if (LYgetBString(&temp, FALSE, sizeof(temp), NORECALL) < 0 || isBEmpty(temp)) { HTInfoMsg(CANCELLED); return (DO_NOTHING); diff --git a/src/LYIcon.rc b/src/LYIcon.rc index 9b6054c1..7f243447 100644 --- a/src/LYIcon.rc +++ b/src/LYIcon.rc @@ -1 +1,34 @@ +// $LynxId: LYIcon.rc,v 1.3 2013/10/13 23:03:48 tom Exp $ + +#include <windows.h> + 100 ICON "../samples/lynx.ico" + +VS_VERSION_INFO VERSIONINFO +FILEVERSION 2,8,8,17 +PRODUCTVERSION 2,8,8,17 +FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +FILEFLAGS 0 +FILEOS VOS_NT_WINDOWS32 +FILETYPE VFT_APP +FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904B0" + BEGIN + VALUE "CompanyName", "http://lynx.isc.org" + VALUE "FileDescription", "Lynx - web browser" + VALUE "FileVersion", "2.8.8.17" + VALUE "InternalName", "Lynx" + VALUE "LegalCopyright", "©1997-2013 Thomas E. Dickey" + VALUE "OriginalFilename", "lynx.exe" + VALUE "ProductName", "Lynx - web browser" + VALUE "ProductVersion", "2.8.8.17" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/src/LYJump.c b/src/LYJump.c index 96df697f..70886b8a 100644 --- a/src/LYJump.c +++ b/src/LYJump.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYJump.c,v 1.45 2013/01/05 00:28:46 tom Exp $ + * $LynxId: LYJump.c,v 1.48 2013/10/13 20:23:07 tom Exp $ */ #include <HTUtils.h> #include <HTAlert.h> @@ -234,7 +234,7 @@ char *LYJump(int key) } statusline(jtp->msg); - if ((ch = LYgetBString(&buf, VISIBLE, 0, recall)) < 0) { + if ((ch = LYgetBString(&buf, FALSE, 0, recall)) < 0) { /* * User cancelled the Jump via ^G. - FM */ @@ -248,7 +248,7 @@ char *LYJump(int key) bp++; bp = LYSkipBlanks(bp); if (*bp == '\0' && - !(recall && (ch == UPARROW || ch == DNARROW))) { + !(recall && (ch == UPARROW_KEY || ch == DNARROW_KEY))) { /* * User cancelled the Jump via a zero-length string. - FM */ @@ -275,7 +275,7 @@ char *LYJump(int key) } #endif /* PERMIT_GOTO_FROM_JUMP */ - if (recall && ch == UPARROW) { + if (recall && ch == UPARROW_KEY) { if (FirstShortcutRecall) { /* * Use last Shortcut in the list. - FM @@ -305,7 +305,7 @@ char *LYJump(int key) } else { _statusline(EDIT_A_PREV_SHORTCUT); } - if ((ch = LYgetBString(&buf, VISIBLE, 0, recall)) < 0) { + if ((ch = LYgetBString(&buf, FALSE, 0, recall)) < 0) { /* * User cancelled the jump via ^G. */ @@ -314,7 +314,7 @@ char *LYJump(int key) } goto check_recall; } - } else if (recall && ch == DNARROW) { + } else if (recall && ch == DNARROW_KEY) { if (FirstShortcutRecall) { /* * Use the first Shortcut in the list. - FM @@ -344,7 +344,7 @@ char *LYJump(int key) } else { _statusline(EDIT_A_PREV_SHORTCUT); } - if ((ch = LYgetBString(&buf, VISIBLE, 0, recall)) < 0) { + if ((ch = LYgetBString(&buf, FALSE, 0, recall)) < 0) { /* * User cancelled the jump via ^G. */ diff --git a/src/LYKeymap.c b/src/LYKeymap.c index 26c7164d..e3e4cd9b 100644 --- a/src/LYKeymap.c +++ b/src/LYKeymap.c @@ -1,4 +1,4 @@ -/* $LynxId: LYKeymap.c,v 1.86 2013/10/12 00:04:22 tom Exp $ */ +/* $LynxId: LYKeymap.c,v 1.95 2013/10/13 20:23:07 tom Exp $ */ #include <HTUtils.h> #include <LYUtils.h> #include <LYGlobalDefs.h> @@ -1003,16 +1003,17 @@ static const struct { { ' ', "<space>" }, { '<', "<" }, { '>', ">" }, + /* LYExtraKeys */ { CH_DEL, "<delete>" }, - { UPARROW, "Up Arrow" }, - { DNARROW, "Down Arrow" }, - { RTARROW, "Right Arrow" }, - { LTARROW, "Left Arrow" }, - { PGDOWN, "Page Down" }, - { PGUP, "Page Up" }, - { HOME, "Home" }, + { UPARROW_KEY, "Up Arrow" }, + { DNARROW_KEY, "Down Arrow" }, + { RTARROW_KEY, "Right Arrow" }, + { LTARROW_KEY, "Left Arrow" }, + { PGDOWN_KEY, "Page Down" }, + { PGUP_KEY, "Page Up" }, + { HOME_KEY, "Home" }, { END_KEY, "End" }, - { F1, "F1" }, + { F1_KEY, "F1" }, { DO_KEY, "Do key" }, { FIND_KEY, "Find key" }, { SELECT_KEY, "Select key" }, diff --git a/src/LYLocal.c b/src/LYLocal.c index 78c35e03..4ee4325b 100644 --- a/src/LYLocal.c +++ b/src/LYLocal.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYLocal.c,v 1.125 2013/05/03 08:43:42 tom Exp $ + * $LynxId: LYLocal.c,v 1.126 2013/10/12 14:51:18 tom Exp $ * * Routines to manipulate the local filesystem. * Written by: Rick Mallett, Carleton University @@ -807,7 +807,7 @@ static int modify_tagged(char *testpath) _statusline(gettext("Enter new location for tagged items: ")); BStrCopy0(given_target, ""); - (void) LYgetBString(&given_target, VISIBLE, 0, NORECALL); + (void) LYgetBString(&given_target, FALSE, 0, NORECALL); if (!isBEmpty(given_target)) { /* * Replace ~/ references to the home directory. @@ -2210,7 +2210,7 @@ static int get_filename(const char *prompt, _statusline(prompt); - (void) LYgetBString(&buf, VISIBLE, 0, NORECALL); + (void) LYgetBString(&buf, FALSE, 0, NORECALL); if (strstr(buf->str, "../") != NULL) { HTAlert(gettext("Illegal filename; request ignored.")); return FALSE; diff --git a/src/LYMail.c b/src/LYMail.c index 7d4e8e1c..ec86dff5 100644 --- a/src/LYMail.c +++ b/src/LYMail.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYMail.c,v 1.94 2013/05/05 21:41:23 tom Exp $ + * $LynxId: LYMail.c,v 1.95 2013/10/12 14:51:18 tom Exp $ */ #include <HTUtils.h> #include <HTParse.h> @@ -266,7 +266,7 @@ static int header_prompt(const char *label, LYaddstr(gettext(label)); LYaddstr(": "); - ok = (LYGetStr(buffer, VISIBLE, limit, NORECALL) >= 0 + ok = (LYGetStr(buffer, FALSE, limit, NORECALL) >= 0 && !term_letter); LYaddstr("\n"); @@ -698,7 +698,7 @@ void mailform(const char *mailto_address, } } _statusline(SUBJECT_PROMPT); - if (LYGetStr(subject, VISIBLE, MAX_SUBJECT, NORECALL) < 0) { + if (LYGetStr(subject, FALSE, MAX_SUBJECT, NORECALL) < 0) { /* * User cancelled via ^G. - FM */ @@ -713,7 +713,7 @@ void mailform(const char *mailto_address, sprintf(self, "%.*s", MAX_SUBJECT, isEmpty(personal_mail_address) ? "" : personal_mail_address); _statusline("Cc: "); - if (LYGetStr(self, VISIBLE, MAX_SUBJECT, NORECALL) < 0) { + if (LYGetStr(self, FALSE, MAX_SUBJECT, NORECALL) < 0) { /* * User cancelled via ^G. - FM */ @@ -1565,7 +1565,7 @@ void reply_by_mail(char *mail_address, LYaddstr("\n\n"); LYrefresh(); *user_input = '\0'; - if (LYGetStr(user_input, VISIBLE, sizeof(user_input), NORECALL) < 0 || + if (LYGetStr(user_input, FALSE, sizeof(user_input), NORECALL) < 0 || term_letter || STREQ(user_input, ".")) { goto cancelled; } @@ -1575,7 +1575,7 @@ void reply_by_mail(char *mail_address, remove_tildes(user_input); fprintf(fd, "%s\n", user_input); *user_input = '\0'; - if (LYGetStr(user_input, VISIBLE, + if (LYGetStr(user_input, FALSE, sizeof(user_input), NORECALL) < 0) { goto cancelled; } diff --git a/src/LYMain.c b/src/LYMain.c index 6d924436..aecdfb48 100644 --- a/src/LYMain.c +++ b/src/LYMain.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYMain.c,v 1.245 2013/10/11 10:06:51 tom Exp $ + * $LynxId: LYMain.c,v 1.246 2013/10/13 20:35:38 tom Exp $ */ #include <HTUtils.h> #include <HTTP.h> @@ -2884,7 +2884,7 @@ static int nocolor_fun(char *next_arg GCC_UNUSED) { LYShowColor = SHOW_COLOR_NEVER; #ifdef USE_SLANG - Lynx_Color_Flags &= ~SL_LYNX_USE_COLOR; + Lynx_Color_Flags &= ~(unsigned) SL_LYNX_USE_COLOR; Lynx_Color_Flags |= SL_LYNX_OVERRIDE_COLOR; #endif return 0; diff --git a/src/LYMainLoop.c b/src/LYMainLoop.c index 280de6cf..011432b7 100644 --- a/src/LYMainLoop.c +++ b/src/LYMainLoop.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYMainLoop.c,v 1.219 2013/10/12 00:24:53 tom Exp $ + * $LynxId: LYMainLoop.c,v 1.224 2013/10/13 20:23:07 tom Exp $ */ #include <HTUtils.h> #include <HTAccess.h> @@ -750,14 +750,14 @@ static BOOL do_check_recall(int ch, */ LYTrimAllStartfile((*user_input)->str); if (isBEmpty(*user_input) && - !(recall && (ch == UPARROW || ch == DNARROW))) { + !(recall && (ch == UPARROW_KEY || ch == DNARROW_KEY))) { BStrCopy0((*user_input), *old_user_input); FREE(*old_user_input); HTInfoMsg(CANCELLED); ret = FALSE; break; } - if (recall && ch == UPARROW) { + if (recall && ch == UPARROW_KEY) { if (*FirstURLRecall) { /* * Use last URL in the list. - FM @@ -788,7 +788,7 @@ static BOOL do_check_recall(int ch, } else { _statusline(EDIT_A_PREV_GOTO); } - if ((ch = LYgetBString(user_input, VISIBLE, 0, recall)) < 0) { + if ((ch = LYgetBString(user_input, FALSE, 0, recall)) < 0) { /* * User cancelled the Goto via ^G. Restore * user_input and break. - FM @@ -801,7 +801,7 @@ static BOOL do_check_recall(int ch, } continue; } - } else if (recall && ch == DNARROW) { + } else if (recall && ch == DNARROW_KEY) { if (*FirstURLRecall) { /* * Use the first URL in the list. - FM @@ -830,7 +830,7 @@ static BOOL do_check_recall(int ch, } else { _statusline(EDIT_A_PREV_GOTO); } - if ((ch = LYgetBString(user_input, VISIBLE, 0, recall)) < 0) { + if ((ch = LYgetBString(user_input, FALSE, 0, recall)) < 0) { /* * User cancelled the Goto via ^G. Restore * user_input and break. - FM @@ -937,7 +937,7 @@ static int DoTraversal(int c, if (lookup_link(links[curdoc.link].lname)) { if (more_links || (curdoc.link > -1 && curdoc.link < nlinks - 1)) { - c = DNARROW; + c = DNARROW_KEY; } else { if (STREQ(curdoc.title, "Entry into main screen") || (nhist <= 0)) { @@ -947,7 +947,7 @@ static int DoTraversal(int c, } c = -1; } else { - c = LTARROW; + c = LTARROW_KEY; } } } else { @@ -955,7 +955,7 @@ static int DoTraversal(int c, links[curdoc.link].lname); if (!isLYNXIMGMAP(traversal_link_to_add)) *crawl_ok = TRUE; - c = RTARROW; + c = RTARROW_KEY; } } else { /* no good right link, so only down and left arrow ok */ if (rlink_exists /* && !rlink_rejected */ ) @@ -963,7 +963,7 @@ static int DoTraversal(int c, add_to_reject_list(links[curdoc.link].lname); if (more_links || (curdoc.link > -1 && curdoc.link < nlinks - 1)) { - c = DNARROW; + c = DNARROW_KEY; } else { /* * curdoc.title doesn't always work, so bail out if the history @@ -977,7 +977,7 @@ static int DoTraversal(int c, } c = -1; } else { - c = LTARROW; + c = LTARROW_KEY; } } } @@ -1806,7 +1806,7 @@ static int handle_LYK_COMMAND(bstring **user_input) BStrCopy0((*user_input), ""); _statusline(": "); - if (LYgetBString(user_input, VISIBLE, 0, RECALL_CMD) >= 0) { + if (LYgetBString(user_input, FALSE, 0, RECALL_CMD) >= 0) { src = LYSkipBlanks((*user_input)->str); tmp = LYSkipNonBlanks(src); *tmp = 0; @@ -2510,7 +2510,7 @@ static int handle_LYK_ECGOTO(int *ch, * Offer the current document's URL for editing. - FM */ _statusline(EDIT_CURDOC_URL); - if (((*ch = LYgetBString(user_input, VISIBLE, 0, RECALL_URL)) >= 0) && + if (((*ch = LYgetBString(user_input, FALSE, 0, RECALL_URL)) >= 0) && !isBEmpty(*user_input) && strcmp((*user_input)->str, curdoc.address)) { LYTrimAllStartfile((*user_input)->str); @@ -2753,7 +2753,7 @@ static int handle_LYK_ELGOTO(int *ch, * Offer the current link's URL for editing. - FM */ _statusline(EDIT_CURLINK_URL); - if (((*ch = LYgetBString(user_input, VISIBLE, 0, RECALL_URL)) >= 0) && + if (((*ch = LYgetBString(user_input, FALSE, 0, RECALL_URL)) >= 0) && !isBEmpty(*user_input) && strcmp((*user_input)->str, ((links[curdoc.link].type == WWW_FORM_LINK_TYPE) @@ -3006,7 +3006,7 @@ static BOOLEAN handle_LYK_GOTO(int *ch, * Ask the user. */ _statusline(URL_TO_OPEN); - if ((*ch = LYgetBString(user_input, VISIBLE, 0, *recall)) < 0) { + if ((*ch = LYgetBString(user_input, FALSE, 0, *recall)) < 0) { /* * User cancelled the Goto via ^G. Restore user_input and * break. - FM @@ -3565,7 +3565,7 @@ static BOOLEAN check_JUMP_param(char **url_template) if (encoded) FREE(encoded); - if (LYgetBString(&input, VISIBLE, 0, recall) < 0) { + if (LYgetBString(&input, FALSE, 0, recall) < 0) { /* * cancelled via ^G */ @@ -3651,7 +3651,7 @@ static BOOLEAN handle_LYK_JUMP(int c, *FirstURLRecall = TRUE; if (!strcasecomp(ret, "Go :")) { if (recall) { - *ch = UPARROW; + *ch = UPARROW_KEY; return TRUE; } FREE(*old_user_input); @@ -5247,7 +5247,7 @@ void handle_LYK_CHDIR(void) } _statusline(gettext("cd to:")); - if (LYgetBString(&buf, VISIBLE, 0, NORECALL) < 0 || isBEmpty(buf)) { + if (LYgetBString(&buf, FALSE, 0, NORECALL) < 0 || isBEmpty(buf)) { HTInfoMsg(CANCELLED); return; } diff --git a/src/LYNews.c b/src/LYNews.c index f226da4a..8d0a54a6 100644 --- a/src/LYNews.c +++ b/src/LYNews.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYNews.c,v 1.59 2013/05/04 13:15:30 tom Exp $ + * $LynxId: LYNews.c,v 1.60 2013/10/12 14:51:18 tom Exp $ */ #include <HTUtils.h> #ifndef DISABLE_NEWS @@ -195,7 +195,7 @@ char *LYNewsPost(char *newsgroups, LYaddstr(gettext("\n\n Please provide your mail address for the From: header\n")); sprintf(user_input, "From: %.*s", (int) sizeof(user_input) - 8, NonNull(personal_mail_address)); - if (LYGetStr(user_input, VISIBLE, + if (LYGetStr(user_input, FALSE, sizeof(user_input), NORECALL) < 0 || term_message) { HTInfoMsg(NEWS_POST_CANCELLED); @@ -241,7 +241,7 @@ char *LYNewsPost(char *newsgroups, LYStrNCpy(user_input + len, kp, (int) sizeof(user_input) - len - 1); } cp = NULL; - if (LYGetStr(user_input, VISIBLE, + if (LYGetStr(user_input, FALSE, sizeof(user_input), NORECALL) < 0 || term_message) { HTInfoMsg(NEWS_POST_CANCELLED); @@ -300,7 +300,7 @@ char *LYNewsPost(char *newsgroups, LYStrNCpy(user_input, cp, (sizeof(user_input) - 16)); FREE(cp); LYaddstr(gettext("\n\n Please provide or edit the Organization: header\n")); - if (LYGetStr(user_input, VISIBLE, + if (LYGetStr(user_input, FALSE, sizeof(user_input), NORECALL) < 0 || term_message) { HTInfoMsg(NEWS_POST_CANCELLED); @@ -362,7 +362,7 @@ char *LYNewsPost(char *newsgroups, LYaddstr("\n\n"); LYrefresh(); *user_input = '\0'; - if (LYGetStr(user_input, VISIBLE, + if (LYGetStr(user_input, FALSE, sizeof(user_input), NORECALL) < 0 || term_message) { HTInfoMsg(NEWS_POST_CANCELLED); @@ -376,7 +376,7 @@ char *LYNewsPost(char *newsgroups, if (!nonempty && strlen(user_input)) nonempty = TRUE; *user_input = '\0'; - if (LYGetStr(user_input, VISIBLE, + if (LYGetStr(user_input, FALSE, sizeof(user_input), NORECALL) < 0) { HTInfoMsg(NEWS_POST_CANCELLED); LYCloseTempFP(fd); /* Close the temp file. */ diff --git a/src/LYOptions.c b/src/LYOptions.c index 8f9cda57..2b0e81f8 100644 --- a/src/LYOptions.c +++ b/src/LYOptions.c @@ -1,4 +1,4 @@ -/* $LynxId: LYOptions.c,v 1.155 2013/10/10 23:29:51 tom Exp $ */ +/* $LynxId: LYOptions.c,v 1.157 2013/10/12 14:51:18 tom Exp $ */ #include <HTUtils.h> #include <HTFTP.h> #include <HTTP.h> /* 'reloading' flag */ @@ -548,7 +548,7 @@ void LYoptions(void) LYmove(L_Lineed, 5); addlbl("li(N)e edit style : "); - LYaddstr(LYLineeditNames[current_lineedit]); + LYaddstr(LYEditorNames[current_lineedit]); #ifdef EXP_KEYBOARD_LAYOUT LYmove(L_Layout, 5); @@ -651,7 +651,7 @@ void LYoptions(void) _statusline(ACCEPT_DATA); LYmove(L_EDITOR, COL_OPTION_VALUES); lynx_start_bold(); - ch = LYgetBString(&my_data, VISIBLE, 0, NORECALL); + ch = LYgetBString(&my_data, FALSE, 0, NORECALL); lynx_stop_bold(); LYmove(L_EDITOR, COL_OPTION_VALUES); if (term_options || ch == -1) { @@ -686,7 +686,7 @@ void LYoptions(void) _statusline(ACCEPT_DATA); LYmove(L_DISPLAY, COL_OPTION_VALUES); lynx_start_bold(); - ch = LYgetBString(&my_data, VISIBLE, 0, NORECALL); + ch = LYgetBString(&my_data, FALSE, 0, NORECALL); lynx_stop_bold(); LYmove(L_DISPLAY, COL_OPTION_VALUES); @@ -801,7 +801,7 @@ void LYoptions(void) _statusline(ACCEPT_DATA); LYmove(L_HOME, C_DEFAULT); lynx_start_bold(); - ch = LYgetBString(&my_data, VISIBLE, 0, NORECALL); + ch = LYgetBString(&my_data, FALSE, 0, NORECALL); lynx_stop_bold(); LYmove(L_HOME, C_DEFAULT); BStrAlloc(my_data, my_data->len + LY_MAXPATH); /* lengthen */ @@ -867,7 +867,7 @@ void LYoptions(void) _statusline(ACCEPT_DATA); LYmove(L_MAIL_ADDRESS, COL_OPTION_VALUES); lynx_start_bold(); - ch = LYgetBString(&my_data, VISIBLE, 0, NORECALL); + ch = LYgetBString(&my_data, FALSE, 0, NORECALL); lynx_stop_bold(); LYmove(L_MAIL_ADDRESS, COL_OPTION_VALUES); if (term_options || ch == -1) { @@ -1080,7 +1080,7 @@ void LYoptions(void) _statusline(ACCEPT_DATA); LYmove(L_LANGUAGE, COL_OPTION_VALUES); lynx_start_bold(); - ch = LYgetBString(&my_data, VISIBLE, 0, NORECALL); + ch = LYgetBString(&my_data, FALSE, 0, NORECALL); lynx_stop_bold(); LYmove(L_LANGUAGE, COL_OPTION_VALUES); if (term_options || ch == -1) { @@ -1114,7 +1114,7 @@ void LYoptions(void) _statusline(ACCEPT_DATA); LYmove(L_PREF_CHARSET, COL_OPTION_VALUES); lynx_start_bold(); - ch = LYgetBString(&my_data, VISIBLE, 0, NORECALL); + ch = LYgetBString(&my_data, FALSE, 0, NORECALL); lynx_stop_bold(); LYmove(L_PREF_CHARSET, COL_OPTION_VALUES); if (term_options || ch == -1) { @@ -1321,16 +1321,16 @@ void LYoptions(void) if (!LYSelectPopups) { current_lineedit = LYChooseEnum(current_lineedit, L_Lineed, -1, - LYLineeditNames); + LYEditorNames); } else { current_lineedit = LYChoosePopup(current_lineedit, L_Lineed, -1, - LYLineeditNames, + LYEditorNames, 0, FALSE, FALSE); #if defined(VMS) || defined(USE_SLANG) LYmove(L_Lineed, COL_OPTION_VALUES); LYclrtoeol(); - LYaddstr(LYLineeditNames[current_lineedit]); + LYaddstr(LYEditorNames[current_lineedit]); #endif /* VMS || USE_SLANG */ } response = ' '; @@ -1445,7 +1445,7 @@ void LYoptions(void) _statusline(ACCEPT_DATA_OR_DEFAULT); LYmove(L_User_Agent, COL_OPTION_VALUES); lynx_start_bold(); - ch = LYgetBString(&my_data, VISIBLE, 0, NORECALL); + ch = LYgetBString(&my_data, FALSE, 0, NORECALL); lynx_stop_bold(); LYmove(L_User_Agent, COL_OPTION_VALUES); if (term_options || ch == -1) { @@ -1969,7 +1969,7 @@ void edit_bookmarks(void) BStrCopy0(my_data, (!MBM_A_subdescript[a] ? "" : MBM_A_subdescript[a])); - (void) LYgetBString(&my_data, VISIBLE, 0, NORECALL); + (void) LYgetBString(&my_data, FALSE, 0, NORECALL); lynx_stop_bold(); if (isBEmpty(my_data)) { @@ -2003,7 +2003,7 @@ void edit_bookmarks(void) lynx_start_bold(); BStrCopy0(my_data, NonNull(MBM_A_subbookmark[a])); - (void) LYgetBString(&my_data, VISIBLE, 0, NORECALL); + (void) LYgetBString(&my_data, FALSE, 0, NORECALL); lynx_stop_bold(); if (isBEmpty(my_data)) { @@ -2820,7 +2820,7 @@ int postoptions(DocInfo *newdoc) int j; /* prevent spoofing attempt */ - for (j = 0; LYLineeditNames[j]; j++) { + for (j = 0; LYEditorNames[j]; j++) { if (j == newval) current_lineedit = newval; } @@ -3660,14 +3660,14 @@ static int gen_options(char **newfile) EndSelect(fp0); /* Line edit style: SELECT */ - if (LYLineeditNames[1]) { /* well, at least 2 line edit styles available */ + if (LYEditorNames[1]) { /* well, at least 2 line edit styles available */ PutLabel(fp0, gettext("Line edit style"), lineedit_mode_string); BeginSelect(fp0, lineedit_mode_string); - for (i = 0; LYLineeditNames[i]; i++) { + for (i = 0; LYEditorNames[i]; i++) { char temp[16]; sprintf(temp, "%d", i); - PutOption(fp0, i == current_lineedit, temp, LYLineeditNames[i]); + PutOption(fp0, i == current_lineedit, temp, LYEditorNames[i]); } EndSelect(fp0); } diff --git a/src/LYPrint.c b/src/LYPrint.c index b4020815..f5543ffe 100644 --- a/src/LYPrint.c +++ b/src/LYPrint.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYPrint.c,v 1.98 2013/05/04 13:15:47 tom Exp $ + * $LynxId: LYPrint.c,v 1.101 2013/10/13 20:23:07 tom Exp $ */ #include <HTUtils.h> #include <HTAccess.h> @@ -180,9 +180,9 @@ static int RecallFilename(bstring **filename, } recall = ((*total >= 1) ? RECALL_URL : NORECALL); - if ((ch = LYgetBString(filename, VISIBLE, 0, recall)) < 0 || - *filename == '\0' || ch == UPARROW || ch == DNARROW) { - if (recall && ch == UPARROW) { + if ((ch = LYgetBString(filename, FALSE, 0, recall)) < 0 || + *filename == '\0' || ch == UPARROW_KEY || ch == DNARROW_KEY) { + if (recall && ch == UPARROW_KEY) { if (*first) { *first = FALSE; /* @@ -214,7 +214,7 @@ static int RecallFilename(bstring **filename, } return FN_READ; } - } else if (recall && ch == DNARROW) { + } else if (recall && ch == DNARROW_KEY) { if (*first) { *first = FALSE; /* @@ -504,7 +504,7 @@ static void send_file_to_mail(DocInfo *newdoc, _statusline(MAIL_ADDRESS_PROMPT); BStrCopy0(user_response, NonNull(personal_mail_address)); - if (LYgetBString(&user_response, VISIBLE, 0, RECALL_MAIL) < 0 || + if (LYgetBString(&user_response, FALSE, 0, RECALL_MAIL) < 0 || isBEmpty(user_response)) { CancelPrint(MAIL_REQUEST_CANCELLED); } @@ -969,7 +969,7 @@ static void send_file_to_screen(DocInfo *newdoc, } BStrCopy0(prompt, ""); - if (LYgetBString(&prompt, VISIBLE, 0, NORECALL) < 0) { + if (LYgetBString(&prompt, FALSE, 0, NORECALL) < 0) { CancelPrint(PRINT_REQUEST_CANCELLED); } else { outfile_fp = stdout; diff --git a/src/LYSearch.c b/src/LYSearch.c index f989bf31..a56de21b 100644 --- a/src/LYSearch.c +++ b/src/LYSearch.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYSearch.c,v 1.37 2013/10/03 12:27:55 tom Exp $ + * $LynxId: LYSearch.c,v 1.40 2013/10/13 20:23:07 tom Exp $ */ #include <HTUtils.h> #include <HTAlert.h> @@ -197,7 +197,7 @@ BOOL textsearch(DocInfo *cur_doc, */ _statusline(ENTER_WHEREIS_QUERY); - ch = LYgetBString(prev_target, VISIBLE, 0, recall); + ch = LYgetBString(prev_target, FALSE, 0, recall); if (ch < 0) { /* * User cancelled the search via ^G. Restore prev_target and @@ -211,7 +211,7 @@ BOOL textsearch(DocInfo *cur_doc, check_recall: if (strlen((*prev_target)->str) == 0 && - !(recall && (ch == UPARROW || ch == DNARROW))) { + !(recall && (ch == UPARROW_KEY || ch == DNARROW_KEY))) { /* * No entry. Simply return, retaining the current buffer. Because * prev_target is now reset, highlighting of the previous search string @@ -222,7 +222,7 @@ BOOL textsearch(DocInfo *cur_doc, return (FALSE); } - if (recall && ch == UPARROW) { + if (recall && ch == UPARROW_KEY) { if (FirstRecall) { /* * Use the current string or last query in the list. - FM @@ -262,7 +262,7 @@ BOOL textsearch(DocInfo *cur_doc, } else { _statusline(EDIT_A_PREV_QUERY); } - ch = LYgetBString(prev_target, VISIBLE, 0, recall); + ch = LYgetBString(prev_target, FALSE, 0, recall); if (ch < 0) { /* * User canceled the search via ^G. Restore prev_target and @@ -274,7 +274,7 @@ BOOL textsearch(DocInfo *cur_doc, } goto check_recall; } - } else if (recall && ch == DNARROW) { + } else if (recall && ch == DNARROW_KEY) { if (FirstRecall) { /* * Use the current string or first query in the list. - FM @@ -314,7 +314,7 @@ BOOL textsearch(DocInfo *cur_doc, } else { _statusline(EDIT_A_PREV_QUERY); } - ch = LYgetBString(prev_target, VISIBLE, 0, recall); + ch = LYgetBString(prev_target, FALSE, 0, recall); if (ch < 0) { /* * User cancelled the search via ^G. Restore prev_target and diff --git a/src/LYStrings.c b/src/LYStrings.c index ac5405c3..66acf897 100644 --- a/src/LYStrings.c +++ b/src/LYStrings.c @@ -1,4 +1,4 @@ -/* $LynxId: LYStrings.c,v 1.215 2013/10/02 23:58:20 tom Exp $ */ +/* $LynxId: LYStrings.c,v 1.253 2013/10/13 20:47:25 tom Exp $ */ #include <HTUtils.h> #include <HTCJK.h> #include <UCAux.h> @@ -54,6 +54,12 @@ #define CTRACE_EDIT(p) /*nothing */ #endif +#ifdef SUPPORT_MULTIBYTE_EDIT +#define IsWordChar(c) (isalnum(UCH(c)) || is8bits(c)) +#else +#define IsWordChar(c) isalnum(UCH(c)) +#endif + /* * The edit_history lists allow the user to press tab when entering URL to get * the closest match in the closet @@ -406,7 +412,7 @@ static int set_clicked_link(int x, else if (clicks > 1) { if (x < left + toolbar) c = (code == FOR_PROMPT && y) - ? HOME : LAC_TO_LKC0(LYK_MAIN_MENU); + ? HOME_KEY : LAC_TO_LKC0(LYK_MAIN_MENU); else if (x > right) c = (code == FOR_PROMPT && y) ? END_KEY : LAC_TO_LKC0(LYK_VLINKS); @@ -417,7 +423,7 @@ static int set_clicked_link(int x, } else { if (x < left + toolbar) c = (code == FOR_PROMPT && y) - ? LTARROW + ? LTARROW_KEY : ( #ifdef USE_COLOR_STYLE (s_forw_backw != NOSTYLE && x - toolbar >= 3) @@ -429,7 +435,7 @@ static int set_clicked_link(int x, ); else if (x > right) c = (code == FOR_PROMPT && y) - ? RTARROW : LAC_TO_LKC0(LYK_HISTORY); + ? RTARROW_KEY : LAC_TO_LKC0(LYK_HISTORY); else if (y) /* Last row */ c = LAC_TO_LKC0(LYK_NEXT_PAGE); else /* First row */ @@ -569,28 +575,28 @@ static int set_clicked_link(int x, #endif /* USE_MOUSE */ /* - * LYstrncpy() terminates strings with a null byte. Writes a null byte into - * the n+1 byte of dst. + * LYstrncpy() ensures that the copied strings end with a nul byte. + * The nul is written to the n+1 position of the target. */ -char *LYstrncpy(char *dst, - const char *src, +char *LYstrncpy(char *target, + const char *source, int n) { - char *val = dst; + char *val = target; int len; - if (src == 0) - src = ""; - len = (int) strlen(src); + if (source == 0) + source = ""; + len = (int) strlen(source); if (n > 0) { if (n > len) n = len; - (void) StrNCpy(dst, src, n); + (void) StrNCpy(target, source, n); } else { n = 0; } - dst[n] = '\0'; + target[n] = '\0'; return val; } @@ -599,17 +605,17 @@ char *LYstrncpy(char *dst, /* * LYmbcsstrncpy() terminates strings with a null byte. It takes account of - * multibyte characters. The src string is copied until either end of string + * multibyte characters. The source string is copied until either end of string * or max number of either bytes or glyphs (mbcs sequences) (CJK or UTF8). The * utf_flag argument should be TRUE for UTF8. - KW & FM */ -char *LYmbcsstrncpy(char *dst, - const char *src, +char *LYmbcsstrncpy(char *target, + const char *source, int n_bytes, int n_glyphs, int utf_flag) { - char *val = dst; + char *val = target; int i_bytes = 0, i_glyphs = 0; if (n_bytes < 0) @@ -617,16 +623,16 @@ char *LYmbcsstrncpy(char *dst, if (n_glyphs < 0) n_glyphs = 0; - for (; *src != '\0' && i_bytes < n_bytes; i_bytes++) { - if (IS_NEW_GLYPH(*src)) { + for (; *source != '\0' && i_bytes < n_bytes; i_bytes++) { + if (IS_NEW_GLYPH(*source)) { if (i_glyphs++ >= n_glyphs) { - *dst = '\0'; + *target = '\0'; return val; } } - *(dst++) = *(src++); + *(target++) = *(source++); } - *dst = '\0'; + *target = '\0'; return val; } @@ -900,8 +906,8 @@ void ena_csi(int flag) (unsigned) code, \ Keymap_List) #if SLANG_VERSION < 20000 -#define expand_substring(dst, first, last, final) \ - (SLexpand_escaped_string(dst, \ +#define expand_substring(target, first, last, final) \ + (SLexpand_escaped_string(target, \ (char *)first, \ (char *)last), 1) static int SLang_get_error(void) @@ -911,8 +917,8 @@ static int SLang_get_error(void) #else int LY_Slang_UTF8_Mode = 0; -#define expand_substring(dst, first, last, final) \ - (SLexpand_escaped_string(dst, \ +#define expand_substring(target, first, last, final) \ + (SLexpand_escaped_string(target, \ (char *)first, \ (char *)last, \ LY_Slang_UTF8_Mode), 1) @@ -934,28 +940,40 @@ static SLKeyMap_List_Type *Keymap_List; # else # define EXTERN_KEY(string,string1,lynx,curses) {string,lynx},{string1,lynx} # endif -# define INTERN_KEY(string,lynx,curses) {string,lynx} +# define INTERN_KEY(string,lynx,curses) {string,lynx,lynx} #else -#define INTERN_KEY(string,lynx,curses) {string,curses} -#define EXTERN_KEY(string,string1,lynx,curses) {string,curses} +# define INTERN_KEY(string,lynx,curses) {string,curses,lynx} +# define EXTERN_KEY(string,string1,lynx,curses) {string,curses,lynx} #endif typedef struct { const char *string; int value; + LYExtraKeys internal; } Keysym_String_List; /* *INDENT-OFF* */ static Keysym_String_List Keysym_Strings [] = { - INTERN_KEY( "UPARROW", UPARROW, KEY_UP ), - INTERN_KEY( "DNARROW", DNARROW, KEY_DOWN ), - INTERN_KEY( "RTARROW", RTARROW, KEY_RIGHT ), - INTERN_KEY( "LTARROW", LTARROW, KEY_LEFT ), - INTERN_KEY( "PGDOWN", PGDOWN, KEY_NPAGE ), - INTERN_KEY( "PGUP", PGUP, KEY_PPAGE ), - INTERN_KEY( "HOME", HOME, KEY_HOME ), + INTERN_KEY( "UPARROW", UPARROW_KEY, KEY_UP ), + INTERN_KEY( "DNARROW", DNARROW_KEY, KEY_DOWN ), + INTERN_KEY( "RTARROW", RTARROW_KEY, KEY_RIGHT ), + INTERN_KEY( "LTARROW", LTARROW_KEY, KEY_LEFT ), + INTERN_KEY( "PGDOWN", PGDOWN_KEY, KEY_NPAGE ), + INTERN_KEY( "PGUP", PGUP_KEY, KEY_PPAGE ), + INTERN_KEY( "HOME", HOME_KEY, KEY_HOME ), INTERN_KEY( "END", END_KEY, KEY_END ), - INTERN_KEY( "F1", F1, KEY_F(1) ), + INTERN_KEY( "F1", F1_KEY, KEY_F(1) ), + INTERN_KEY( "F2", F2_KEY, KEY_F(2) ), + INTERN_KEY( "F3", F3_KEY, KEY_F(3) ), + INTERN_KEY( "F4", F4_KEY, KEY_F(4) ), + INTERN_KEY( "F5", F5_KEY, KEY_F(5) ), + INTERN_KEY( "F6", F6_KEY, KEY_F(7) ), + INTERN_KEY( "F7", F7_KEY, KEY_F(7) ), + INTERN_KEY( "F8", F8_KEY, KEY_F(8) ), + INTERN_KEY( "F9", F9_KEY, KEY_F(9) ), + INTERN_KEY( "F10", F10_KEY, KEY_F(10) ), + INTERN_KEY( "F11", F11_KEY, KEY_F(11) ), + INTERN_KEY( "F12", F12_KEY, KEY_F(12) ), INTERN_KEY( "DO_KEY", DO_KEY, KEY_F(16) ), INTERN_KEY( "FIND_KEY", FIND_KEY, KEY_FIND ), INTERN_KEY( "SELECT_KEY", SELECT_KEY, KEY_SELECT ), @@ -1070,7 +1088,7 @@ static const char *expand_tichar(const char *first, char **result, char *final) return first; } -static BOOLEAN expand_substring(char *dst, +static BOOLEAN expand_substring(char *target, const char *first, const char *last, char *final) @@ -1080,27 +1098,27 @@ static BOOLEAN expand_substring(char *dst, while (first < last) { switch (ch = *first++) { case ESCAPE: - first = expand_tichar(first, &dst, final); + first = expand_tichar(first, &target, final); break; case '^': ch = *first++; if (ch == LPAREN) { const char *s = strchr(first, RPAREN); - char *was = dst; + char *was = target; if (s == 0) s = first + strlen(first); - first = expand_tiname(first, (size_t) (s - first), &dst, final); - if (dst == was) + first = expand_tiname(first, (size_t) (s - first), &target, final); + if (target == was) return FALSE; if (*first) first++; } else if (ch == '?') { /* ASCII delete? */ - *dst++ = 127; + *target++ = 127; } else if ((ch & 0x3f) < 0x20) { /* ASCII control char? */ - *dst++ = (char) (ch & 0x1f); + *target++ = (char) (ch & 0x1f); } else { - *dst++ = '^'; + *target++ = '^'; first--; /* not legal... */ } break; @@ -1108,11 +1126,11 @@ static BOOLEAN expand_substring(char *dst, ch = 0200; /* FALLTHRU */ default: - *dst++ = (char) ch; + *target++ = (char) ch; break; } } - *dst = '\0'; + *target = '\0'; return TRUE; } #endif @@ -1132,27 +1150,43 @@ static void unescaped_char(const char *parse, int *keysym) } } -static BOOLEAN unescape_string(char *src, char *dst, char *final) +static BOOLEAN unescape_string(char *source, char *target, char *final) { BOOLEAN ok = FALSE; - if (*src == SQUOTE) { + if (*source == SQUOTE) { int keysym = -1; - unescaped_char(src, &keysym); + unescaped_char(source, &keysym); if (keysym >= 0) { - dst[0] = (char) keysym; - dst[1] = '\0'; + target[0] = (char) keysym; + target[1] = '\0'; ok = TRUE; } - } else if (*src == DQUOTE) { - if (expand_substring(dst, src + 1, src + strlen(src) - 1, final)) + } else if (*source == DQUOTE) { + if (expand_substring(target, source + 1, source + strlen(source) - 1, final)) ok = TRUE; (void) final; } return ok; } +static Keysym_String_List *lookupKeysymByName(const char *name) +{ + Keysym_String_List *k; + Keysym_String_List *result = 0; + + k = Keysym_Strings; + while (k->string != NULL) { + if (0 == strcasecomp(k->string, name)) { + result = k; + break; + } + k++; + } + return result; +} + int map_string_to_keysym(const char *str, int *keysym) { int modifier = 0; @@ -1223,15 +1257,10 @@ int map_string_to_keysym(const char *str, int *keysym) #endif } } else { - Keysym_String_List *k; + Keysym_String_List *k = lookupKeysymByName(str); - k = Keysym_Strings; - while (k->string != NULL) { - if (0 == strcmp(k->string, str)) { - *keysym = k->value; - break; - } - k++; + if (k != 0) { + *keysym = k->value; } } @@ -1240,6 +1269,32 @@ int map_string_to_keysym(const char *str, int *keysym) return (*keysym); } +LYExtraKeys LYnameToExtraKeys(const char *name) +{ + Keysym_String_List *k = lookupKeysymByName(name); + LYExtraKeys result = -1; + + if (k != 0) + result = k->internal; + return result; +} + +const char *LYextraKeysToName(LYExtraKeys code) +{ + Keysym_String_List *k; + const char *result = 0; + + k = Keysym_Strings; + while (k->string != NULL) { + if (k->internal == code) { + result = k->string; + break; + } + k++; + } + return result; +} + /* * Starting at a nonblank character, skip over a token, counting quoted and * escaped characters. @@ -1404,55 +1459,68 @@ static void setup_vtXXX_keymap(void) { /* *INDENT-OFF* */ static Keysym_String_List table[] = { - INTERN_KEY( "\033[A", UPARROW, KEY_UP ), - INTERN_KEY( "\033OA", UPARROW, KEY_UP ), - INTERN_KEY( "\033[B", DNARROW, KEY_DOWN ), - INTERN_KEY( "\033OB", DNARROW, KEY_DOWN ), - INTERN_KEY( "\033[C", RTARROW, KEY_RIGHT ), - INTERN_KEY( "\033OC", RTARROW, KEY_RIGHT ), - INTERN_KEY( "\033[D", LTARROW, KEY_LEFT ), - INTERN_KEY( "\033OD", LTARROW, KEY_LEFT ), + INTERN_KEY( "\033[A", UPARROW_KEY, KEY_UP ), + INTERN_KEY( "\033OA", UPARROW_KEY, KEY_UP ), + INTERN_KEY( "\033[B", DNARROW_KEY, KEY_DOWN ), + INTERN_KEY( "\033OB", DNARROW_KEY, KEY_DOWN ), + INTERN_KEY( "\033[C", RTARROW_KEY, KEY_RIGHT ), + INTERN_KEY( "\033OC", RTARROW_KEY, KEY_RIGHT ), + INTERN_KEY( "\033[D", LTARROW_KEY, KEY_LEFT ), + INTERN_KEY( "\033OD", LTARROW_KEY, KEY_LEFT ), INTERN_KEY( "\033[1~", FIND_KEY, KEY_FIND ), INTERN_KEY( "\033[2~", INSERT_KEY, KEY_IC ), INTERN_KEY( "\033[3~", REMOVE_KEY, KEY_DC ), INTERN_KEY( "\033[4~", SELECT_KEY, KEY_SELECT ), - INTERN_KEY( "\033[5~", PGUP, KEY_PPAGE ), - INTERN_KEY( "\033[6~", PGDOWN, KEY_NPAGE ), - INTERN_KEY( "\033[7~", HOME, KEY_HOME), + INTERN_KEY( "\033[5~", PGUP_KEY, KEY_PPAGE ), + INTERN_KEY( "\033[6~", PGDOWN_KEY, KEY_NPAGE ), + INTERN_KEY( "\033[7~", HOME_KEY, KEY_HOME), INTERN_KEY( "\033[8~", END_KEY, KEY_END ), - INTERN_KEY( "\033[11~", F1, KEY_F(1) ), - INTERN_KEY( "\033[28~", F1, KEY_F(1) ), - INTERN_KEY( "\033OP", F1, KEY_F(1) ), - INTERN_KEY( "\033[OP", F1, KEY_F(1) ), + INTERN_KEY( "\033[11~", F1_KEY, KEY_F(1) ), + INTERN_KEY( "\033[28~", F1_KEY, KEY_F(1) ), + INTERN_KEY( "\033OP", F1_KEY, KEY_F(1) ), + INTERN_KEY( "\033[OP", F1_KEY, KEY_F(1) ), INTERN_KEY( "\033[29~", DO_KEY, KEY_F(16) ), -#if defined(USE_SLANG) && (defined(__WIN32__) || defined(__MINGW32__)) - INTERN_KEY( "\xE0H", UPARROW, KEY_UP ), - INTERN_KEY( "\xE0P", DNARROW, KEY_DOWN ), - INTERN_KEY( "\xE0M", RTARROW, KEY_RIGHT ), - INTERN_KEY( "\xE0K", LTARROW, KEY_LEFT ), +#if defined(USE_SLANG) +#if defined(__WIN32__) || defined(__MINGW32__) + INTERN_KEY( "\xE0H", UPARROW_KEY, KEY_UP ), + INTERN_KEY( "\xE0P", DNARROW_KEY, KEY_DOWN ), + INTERN_KEY( "\xE0M", RTARROW_KEY, KEY_RIGHT ), + INTERN_KEY( "\xE0K", LTARROW_KEY, KEY_LEFT ), INTERN_KEY( "\xE0R", INSERT_KEY, KEY_IC ), INTERN_KEY( "\xE0S", REMOVE_KEY, KEY_DC ), - INTERN_KEY( "\xE0I", PGUP, KEY_PPAGE ), - INTERN_KEY( "\xE0Q", PGDOWN, KEY_NPAGE ), - INTERN_KEY( "\xE0G", HOME, KEY_HOME), + INTERN_KEY( "\xE0I", PGUP_KEY, KEY_PPAGE ), + INTERN_KEY( "\xE0Q", PGDOWN_KEY, KEY_NPAGE ), + INTERN_KEY( "\xE0G", HOME_KEY, KEY_HOME), INTERN_KEY( "\xE0O", END_KEY, KEY_END ), #endif -#if defined(USE_SLANG) && !defined(VMS) - INTERN_KEY( "^(ku)", UPARROW, KEY_UP ), - INTERN_KEY( "^(kd)", DNARROW, KEY_DOWN ), - INTERN_KEY( "^(kr)", RTARROW, KEY_RIGHT ), - INTERN_KEY( "^(kl)", LTARROW, KEY_LEFT ), +#if !defined(VMS) + INTERN_KEY( "^(ku)", UPARROW_KEY, KEY_UP ), + INTERN_KEY( "^(kd)", DNARROW_KEY, KEY_DOWN ), + INTERN_KEY( "^(kr)", RTARROW_KEY, KEY_RIGHT ), + INTERN_KEY( "^(kl)", LTARROW_KEY, KEY_LEFT ), INTERN_KEY( "^(@0)", FIND_KEY, KEY_FIND ), INTERN_KEY( "^(kI)", INSERT_KEY, KEY_IC ), INTERN_KEY( "^(kD)", REMOVE_KEY, KEY_DC ), INTERN_KEY( "^(*6)", SELECT_KEY, KEY_SELECT ), - INTERN_KEY( "^(kP)", PGUP, KEY_PPAGE ), - INTERN_KEY( "^(kN)", PGDOWN, KEY_NPAGE ), + INTERN_KEY( "^(kP)", PGUP_KEY, KEY_PPAGE ), + INTERN_KEY( "^(kN)", PGDOWN_KEY, KEY_NPAGE ), INTERN_KEY( "^(@7)", END_KEY, KEY_END ), - INTERN_KEY( "^(kh)", HOME, KEY_HOME), - INTERN_KEY( "^(k1)", F1, KEY_F(1) ), + INTERN_KEY( "^(kh)", HOME_KEY, KEY_HOME), + INTERN_KEY( "^(k1)", F1_KEY, KEY_F(1) ), + INTERN_KEY( "^(k2)", F2_KEY, KEY_F(2) ), + INTERN_KEY( "^(k3)", F3_KEY, KEY_F(3) ), + INTERN_KEY( "^(k4)", F4_KEY, KEY_F(4) ), + INTERN_KEY( "^(k5)", F5_KEY, KEY_F(5) ), + INTERN_KEY( "^(k6)", F6_KEY, KEY_F(6) ), + INTERN_KEY( "^(k7)", F7_KEY, KEY_F(7) ), + INTERN_KEY( "^(k8)", F8_KEY, KEY_F(8) ), + INTERN_KEY( "^(k9)", F9_KEY, KEY_F(9) ), + INTERN_KEY( "^(k;)", F10_KEY, KEY_F(10) ), + INTERN_KEY( "^(F1)", F11_KEY, KEY_F(11) ), + INTERN_KEY( "^(F2)", F12_KEY, KEY_F(12) ), INTERN_KEY( "^(F6)", DO_KEY, KEY_F(16) ), -#endif /* SLANG && !VMS */ +#endif /* !VMS */ +#endif /* SLANG */ }; /* *INDENT-ON* */ @@ -1647,16 +1715,16 @@ static int LYgetch_for(int code) keysym = key->f.keysym; switch (keysym) { case 'H': - keysym = UPARROW; + keysym = UPARROW_KEY; break; case 'P': - keysym = DNARROW; + keysym = DNARROW_KEY; break; case 'M': - keysym = RTARROW; + keysym = RTARROW_KEY; break; case 'K': - keysym = LTARROW; + keysym = LTARROW_KEY; break; case 'R': keysym = INSERT_KEY; @@ -1665,51 +1733,52 @@ static int LYgetch_for(int code) keysym = REMOVE_KEY; break; case 'I': - keysym = PGUP; + keysym = PGUP_KEY; break; case 'Q': - keysym = PGDOWN; + keysym = PGDOWN_KEY; break; case 'G': - keysym = HOME; + keysym = HOME_KEY; break; case 'O': keysym = END_KEY; break; case ';': - keysym = F1; + keysym = F1_KEY; break; } return (keysym); } #endif - return (current_sl_modifier ? 0 : DO_NOTHING); - } - - keysym = (int) key->f.keysym; + } else { + keysym = (int) key->f.keysym; #if defined (USE_MOUSE) - if (keysym == MOUSE_KEYSYM) - return sl_read_mouse_event(code); + if (keysym == MOUSE_KEYSYM) + return sl_read_mouse_event(code); #endif - if (keysym < 0) - return 0; + if (keysym < 0) { + return 0; - if (keysym & (LKC_ISLECLAC | LKC_ISLAC)) - return (keysym); + } else if (keysym & (LKC_ISLECLAC | LKC_ISLAC)) { + return (keysym); + } else { + current_sl_modifier = 0; + if (LKC_HAS_ESC_MOD(keysym)) { + current_sl_modifier = LKC_MOD2; + keysym &= LKC_MASK; + } - current_sl_modifier = 0; - if (LKC_HAS_ESC_MOD(keysym)) { - current_sl_modifier = LKC_MOD2; - keysym &= LKC_MASK; + if (keysym + 1 >= KEYMAP_SIZE) { + return 0; + } else { + return (keysym | current_sl_modifier); + } + } } - - if (keysym + 1 >= KEYMAP_SIZE) - return 0; - - return (keysym | current_sl_modifier); } /************************************************************************/ @@ -1854,40 +1923,40 @@ static int LYgetch_for(int code) switch (a) { case 'A': - c = UPARROW; + c = UPARROW_KEY; break; case 'B': - c = DNARROW; + c = DNARROW_KEY; break; case 'C': - c = RTARROW; + c = RTARROW_KEY; break; case 'D': - c = LTARROW; + c = LTARROW_KEY; break; case 'q': /* vt100 application keypad 1 */ c = END_KEY; break; case 'r': /* vt100 application keypad 2 */ - c = DNARROW; + c = DNARROW_KEY; break; case 's': /* vt100 application keypad 3 */ - c = PGDOWN; + c = PGDOWN_KEY; break; case 't': /* vt100 application keypad 4 */ - c = LTARROW; + c = LTARROW_KEY; break; case 'v': /* vt100 application keypad 6 */ - c = RTARROW; + c = RTARROW_KEY; break; case 'w': /* vt100 application keypad 7 */ - c = HOME; + c = HOME_KEY; break; case 'x': /* vt100 application keypad 8 */ - c = UPARROW; + c = UPARROW_KEY; break; case 'y': /* vt100 application keypad 9 */ - c = PGUP; + c = PGUP_KEY; break; case 'M': #if defined(USE_SLANG) && defined(USE_MOUSE) @@ -1920,13 +1989,13 @@ static int LYgetch_for(int code) #ifdef VMS if (b != 'O') #endif /* VMS */ - c = F1; + c = F1_KEY; break; case 'u': #ifdef VMS if (b != 'O') #endif /* VMS */ - c = F1; /* macintosh help button */ + c = F1_KEY; /* macintosh help button */ break; case 'p': #ifdef VMS @@ -1948,7 +2017,7 @@ static int LYgetch_for(int code) d == '9') && found_TLD(GetChar())) { if (d == '8') /* VTxxx Help */ - c = F1; + c = F1_KEY; else if (d == '9') /* VTxxx Do */ c = DO_KEY; d = -1; @@ -1970,20 +2039,20 @@ static int LYgetch_for(int code) break; case '5': /** VTxxx PrevScreen **/ if (found_CSI(c, b) && found_TLD(d = GetChar())) - c = PGUP; + c = PGUP_KEY; else done_esc = FALSE; /* we have another look below - kw */ break; case '6': /** VTxxx NextScreen **/ if (found_CSI(c, b) && found_TLD(d = GetChar())) - c = PGDOWN; + c = PGDOWN_KEY; else done_esc = FALSE; /* we have another look below - kw */ break; case '[': /** Linux F1-F5: ^[[[A etc. **/ if (found_CSI(c, b)) { if ((d = GetChar()) == 'A') - c = F1; + c = F1_KEY; break; } /* FALLTHRU */ @@ -2037,29 +2106,29 @@ static int LYgetch_for(int code) */ switch (c) { case KEY_DOWN: /* The four arrow keys ... */ - c = DNARROW; + c = DNARROW_KEY; break; case KEY_UP: - c = UPARROW; + c = UPARROW_KEY; break; case KEY_LEFT: - c = LTARROW; + c = LTARROW_KEY; break; case KEY_RIGHT: /* ... */ - c = RTARROW; + c = RTARROW_KEY; break; #if defined(PDCURSES) /* for NEC PC-9800 1998/08/30 (Sun) 21:50:35 */ case KEY_C2: - c = DNARROW; + c = DNARROW_KEY; break; case KEY_A2: - c = UPARROW; + c = UPARROW_KEY; break; case KEY_B1: - c = LTARROW; + c = LTARROW_KEY; break; case KEY_B3: - c = RTARROW; + c = RTARROW_KEY; break; case PAD0: /* PC-9800 Ins */ c = INSERT_KEY; @@ -2069,16 +2138,16 @@ static int LYgetch_for(int code) break; #endif /* PDCURSES */ case KEY_HOME: /* Home key (upward+left arrow) */ - c = HOME; + c = HOME_KEY; break; case KEY_CLEAR: /* Clear screen */ c = 18; /* CTRL-R */ break; case KEY_NPAGE: /* Next page */ - c = PGDOWN; + c = PGDOWN_KEY; break; case KEY_PPAGE: /* Previous page */ - c = PGUP; + c = PGUP_KEY; break; case KEY_LL: /* home down or bottom (lower left) */ c = END_KEY; @@ -2089,10 +2158,10 @@ static int LYgetch_for(int code) /* left b2 right */ /* c1 down c3 */ case KEY_A1: /* upper left of keypad */ - c = HOME; + c = HOME_KEY; break; case KEY_A3: /* upper right of keypad */ - c = PGUP; + c = PGUP_KEY; break; case KEY_B2: /* center of keypad */ c = DO_NOTHING; @@ -2101,7 +2170,7 @@ static int LYgetch_for(int code) c = END_KEY; break; case KEY_C3: /* lower right of keypad */ - c = PGDOWN; + c = PGDOWN_KEY; break; #endif /* defined(KEY_A1) && defined(KEY_C3) */ #ifdef KEY_ENTER @@ -2121,7 +2190,7 @@ static int LYgetch_for(int code) #endif /* KEY_END */ #ifdef KEY_HELP case KEY_HELP: /* help key 001 */ - c = F1; + c = F1_KEY; break; #endif /* KEY_HELP */ #ifdef KEY_BACKSPACE @@ -2130,7 +2199,7 @@ static int LYgetch_for(int code) break; #endif /* KEY_BACKSPACE */ case KEY_F(1): - c = F1; /* VTxxx Help */ + c = F1_KEY; /* VTxxx Help */ break; #if defined(KEY_F) && !defined(__DJGPP__) && !defined(_WINDOWS) case KEY_F(16): @@ -2183,15 +2252,6 @@ static int LYgetch_for(int code) recent_sizechange)); #endif /* HAVE_SIZECHANGE || USE_SLANG */ if (!recent_sizechange) { -#if 0 /* assumption seems flawed? */ - /* Not detected by us or already processed by us. It can - * happens that ncurses lags behind us in detecting the change, - * since its own SIGTSTP handler is not installed so detecting - * happened *at the end* of the last refresh. Tell it to - * refresh again... - kw - */ - LYrefresh(); -#endif #if defined(NCURSES) /* * Work-around for scenario (Linux libc5) where we got a @@ -2312,10 +2372,6 @@ static int LYgetch_for(int code) lac = LYK_REFRESH; } c = LAC_TO_LKC(lac); -#if 0 /* Probably not necessary any more - kw */ - lynx_force_repaint(); - LYrefresh(); -#endif } #if NCURSES_MOUSE_VERSION > 1 else if (event.bstate & BUTTON4_PRESSED) { @@ -2367,31 +2423,31 @@ static int LYgetch_for(int code) if (MOUSE_Y_POS > (LYlines - V_CMD_AREA - 1)) { /* Screen BOTTOM */ if (MOUSE_X_POS < left) { - c = LTARROW; + c = LTARROW_KEY; p = "<-"; } else if (MOUSE_X_POS < HIST_CMD_2) { - c = RTARROW; + c = RTARROW_KEY; p = "->"; } else if (MOUSE_X_POS > right) { c = 'z'; p = "Cancel"; } else { - c = PGDOWN; + c = PGDOWN_KEY; p = "PGDOWN"; } } else if (MOUSE_Y_POS < V_CMD_AREA) { /* Screen TOP */ if (MOUSE_X_POS < left) { - c = LTARROW; + c = LTARROW_KEY; p = "<-"; } else if (MOUSE_X_POS < HIST_CMD_2) { - c = RTARROW; + c = RTARROW_KEY; p = "->"; } else if (MOUSE_X_POS > right) { c = 'z'; p = "Cancel"; } else { - c = PGUP; + c = PGUP_KEY; p = "PGUP"; } } else { @@ -2420,38 +2476,38 @@ static int LYgetch_for(int code) switch (c) { case K_Down: /* The four arrow keys ... */ case K_EDown: - c = DNARROW; + c = DNARROW_KEY; break; case K_Up: case K_EUp: - c = UPARROW; + c = UPARROW_KEY; break; case K_Left: case K_ELeft: - c = LTARROW; + c = LTARROW_KEY; break; case K_Right: /* ... */ case K_ERight: - c = RTARROW; + c = RTARROW_KEY; break; case K_Home: /* Home key (upward+left arrow) */ case K_EHome: - c = HOME; + c = HOME_KEY; break; case K_PageDown: /* Next page */ case K_EPageDown: - c = PGDOWN; + c = PGDOWN_KEY; break; case K_PageUp: /* Previous page */ case K_EPageUp: - c = PGUP; + c = PGUP_KEY; break; case K_End: /* home down or bottom (lower left) */ case K_EEnd: c = END_KEY; break; case K_F1: /* F1 key */ - c = F1; + c = F1_KEY; break; case K_Insert: /* Insert key */ case K_EInsert: @@ -2478,35 +2534,35 @@ static int LYgetch_for(int code) #if defined(USE_SLANG) && (defined(__DJGPP__) || defined(__CYGWIN__)) && !defined(DJGPP_KEYHANDLER) && !defined(USE_KEYMAPS) switch (c) { case SL_KEY_DOWN: /* The four arrow keys ... */ - c = DNARROW; + c = DNARROW_KEY; break; case SL_KEY_UP: - c = UPARROW; + c = UPARROW_KEY; break; case SL_KEY_LEFT: - c = LTARROW; + c = LTARROW_KEY; break; case SL_KEY_RIGHT: /* ... */ - c = RTARROW; + c = RTARROW_KEY; break; case SL_KEY_HOME: /* Home key (upward+left arrow) */ case SL_KEY_A1: /* upper left of keypad */ - c = HOME; + c = HOME_KEY; break; case SL_KEY_NPAGE: /* Next page */ case SL_KEY_C3: /* lower right of keypad */ - c = PGDOWN; + c = PGDOWN_KEY; break; case SL_KEY_PPAGE: /* Previous page */ case SL_KEY_A3: /* upper right of keypad */ - c = PGUP; + c = PGUP_KEY; break; case SL_KEY_END: /* home down or bottom (lower left) */ case SL_KEY_C1: /* lower left of keypad */ c = END_KEY; break; case SL_KEY_F(1): /* F1 key */ - c = F1; + c = F1_KEY; break; case SL_KEY_IC: /* Insert key */ c = INSERT_KEY; @@ -2518,9 +2574,9 @@ static int LYgetch_for(int code) #endif /* USE_SLANG && __DJGPP__ && !DJGPP_KEYHANDLER && !USE_KEYMAPS */ } - if (c & (LKC_ISLAC | LKC_ISLECLAC)) + if (c & (LKC_ISLAC | LKC_ISLECLAC)) { return (c); - if ((c + 1) >= KEYMAP_SIZE) { + } else if ((c + 1) >= KEYMAP_SIZE) { /* * Don't return raw values for KEYPAD symbols which we may have missed * in the switch above if they are obviously invalid when used as an @@ -2587,9 +2643,8 @@ void LYLowerCase(char *arg_buffer) register unsigned char *buffer = (unsigned char *) arg_buffer; size_t i; - for (i = 0; buffer[i]; i++) + for (i = 0; buffer[i]; i++) { #ifdef SUPPORT_MULTIBYTE_EDIT /* 1998/11/23 (Mon) 17:04:55 */ - { if ((buffer[i] & 0x80) != 0 && buffer[i + 1] != 0) { if ((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH((buffer[i])))) { @@ -2599,10 +2654,10 @@ void LYLowerCase(char *arg_buffer) } else { buffer[i] = UCH(TOLOWER(buffer[i])); } - } #else buffer[i] = TOLOWER(buffer[i]); #endif + } } /* @@ -2613,9 +2668,8 @@ void LYUpperCase(char *arg_buffer) register unsigned char *buffer = (unsigned char *) arg_buffer; size_t i; - for (i = 0; buffer[i]; i++) + for (i = 0; buffer[i]; i++) { #ifdef SUPPORT_MULTIBYTE_EDIT /* 1998/11/23 (Mon) 17:05:10 */ - { if ((buffer[i] & 0x80) != 0 && buffer[i + 1] != 0) { if ((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH((buffer[i])))) { @@ -2625,10 +2679,10 @@ void LYUpperCase(char *arg_buffer) } else { buffer[i] = UCH(TOUPPER(buffer[i])); } - } #else buffer[i] = UCH(TOUPPER(buffer[i])); #endif + } } /* @@ -2636,6 +2690,8 @@ void LYUpperCase(char *arg_buffer) */ BOOLEAN LYRemoveNewlines(char *buffer) { + BOOLEAN result = FALSE; + if (buffer != 0) { register char *buf = buffer; @@ -2649,10 +2705,10 @@ BOOLEAN LYRemoveNewlines(char *buffer) *buf++ = *old; } *buf = '\0'; - return TRUE; + result = TRUE; } } - return FALSE; + return result; } /* @@ -2675,6 +2731,8 @@ char *LYReduceBlanks(char *buffer) */ char *LYRemoveBlanks(char *buffer) { + char *result = NULL; + if (buffer != 0) { register char *buf = buffer; @@ -2689,9 +2747,9 @@ char *LYRemoveBlanks(char *buffer) } *buf = '\0'; } - return buf; + result = buf; } - return NULL; + return result; } /* @@ -2799,6 +2857,8 @@ char *LYElideString(char *str, */ BOOLEAN LYTrimStartfile(char *buffer) { + BOOLEAN result = FALSE; + LYTrimHead(buffer); if (isLYNXEXEC(buffer) || isLYNXPROG(buffer)) { @@ -2810,9 +2870,9 @@ BOOLEAN LYTrimStartfile(char *buffer) */ HTUnEscapeSome(buffer, " \r\n\t"); convert_to_spaces(buffer, TRUE); - return TRUE; + result = TRUE; } - return FALSE; + return result; } /* @@ -2839,53 +2899,58 @@ void LYTrimAllStartfile(char *buffer) } /* - * Display the current value of the string and allow the user - * to edit it. + * Display the current value of the string and allow the user to edit it. */ -#define EDREC EditFieldData - /* * Shorthand to get rid of the "edit->suchandsos". */ -#define IsDirty edit->dirty -#define IsHidden edit->hidden -#define StartX edit->sx -#define StartY edit->sy -#define Buf edit->buffer -#define Pos edit->pos /* current editing position (bytes) */ -#define StrLen edit->buffer_used /* length (bytes) */ -#define MaxLen edit->buffer_size -#define BufLimit edit->buffer_limit -#define DspWdth edit->dspwdth -#define DspStart edit->xpan /* display-start (columns) */ -#define Margin edit->margin -#define PanOn edit->panon -#define PadChar edit->pad +#define IsDirty edit->efIsDirty +#define IsHidden edit->efIsMasked +#define StartX edit->efStartX +#define StartY edit->efStartY +#define Buffer edit->efBuffer +#define EditAt edit->efEditAt /* current editing position (bytes) */ +#define BufInUse edit->efBufInUse /* length (bytes) */ +#define BufAlloc edit->efBufAlloc +#define BufLimit edit->efBufLimit +#define DpyWidth edit->efWidth +#define DpyStart edit->efDpyStart /* display-start (columns) */ +#define PanMargin edit->efPanMargin +#define IsPanned edit->efIsPanned +#define PadChar edit->efPadChar #ifdef ENHANCED_LINEEDIT -#define Mark edit->mark +#define EditMark edit->efEditMark #endif -#define CurModif edit->current_modifiers -#define Offs2Col edit->offset2col +#define InputMods edit->efInputMods +#define Offs2Col edit->efOffs2Col + +#define enableEditMark() \ + if (EditMark < 0) \ + EditMark = -(1 + EditMark) + +#define disableEditMark() \ + if (EditMark >= 0) \ + EditMark = -(1 + EditMark) #ifdef ENHANCED_LINEEDIT static bstring *killbuffer; #endif -static void updateMargin(EDREC * edit) +static void updateMargin(FieldEditor * edit) { - if ((int) MaxLen > DspWdth) { /* Need panning? */ - if (DspWdth > 4) /* Else "{}" take up precious screen space */ - PanOn = TRUE; + if ((int) BufAlloc > DpyWidth) { /* Need panning? */ + if (DpyWidth > 4) + IsPanned = TRUE; /* * Figure out margins. If too big, we do a lot of unnecessary * scrolling. If too small, user doesn't have sufficient look-ahead. * Let's say 25% for each margin, upper bound is 10 columns. */ - Margin = DspWdth / 4; - if (Margin > 10) - Margin = 10; + PanMargin = DpyWidth / 4; + if (PanMargin > 10) + PanMargin = 10; } } @@ -2893,34 +2958,34 @@ static void updateMargin(EDREC * edit) * Before using an array position, make sure that the array is long enough. * Reallocate if needed. */ -static void ExtendEditor(EDREC * edit, int position) +static void ExtendEditor(FieldEditor * edit, int position) { size_t need = (size_t) (++position); - if (need >= MaxLen && (BufLimit == 0 || need < BufLimit)) { - CTRACE((tfp, "ExtendEditor from %u to %u\n", - (unsigned) MaxLen, - (unsigned) need)); - Buf = typeRealloc(char, Buf, need); + if (need >= BufAlloc && (BufLimit == 0 || need < BufLimit)) { + CTRACE((tfp, "ExtendEditor from %lu to %lu\n", + (unsigned long) BufAlloc, + (unsigned long) need)); + Buffer = typeRealloc(char, Buffer, need); Offs2Col = typeRealloc(int, Offs2Col, need + 1); - MaxLen = need; + BufAlloc = need; updateMargin(edit); } } -void LYFinishEdit(EDREC * edit) +void LYFinishEdit(FieldEditor * edit) { - CTRACE((tfp, "LYFinishEdit:%s\n", NonNull(Buf))); + CTRACE((tfp, "LYFinishEdit:%s\n", NonNull(Buffer))); - FREE(Buf); + FREE(Buffer); FREE(Offs2Col); } -void LYSetupEdit(EDREC * edit, char *old_value, size_t buffer_limit, int display_limit) +void LYSetupEdit(FieldEditor * edit, char *old_value, size_t buffer_limit, int display_limit) { - CTRACE((tfp, "LYSetupEdit buffer %u, display %d:%s\n", - (unsigned) buffer_limit, + CTRACE((tfp, "LYSetupEdit buffer %lu, display %d:%s\n", + (unsigned long) buffer_limit, display_limit, old_value)); @@ -2934,28 +2999,28 @@ void LYSetupEdit(EDREC * edit, char *old_value, size_t buffer_limit, int display LYGetYX(StartY, StartX); PadChar = ' '; IsDirty = TRUE; - PanOn = FALSE; - CurModif = 0; + IsPanned = FALSE; + InputMods = 0; - MaxLen = buffer_limit; - DspWdth = display_limit; - Margin = 0; - Pos = (int) strlen(old_value); + BufAlloc = buffer_limit; + DpyWidth = display_limit; + PanMargin = 0; + EditAt = (int) strlen(old_value); #ifdef ENHANCED_LINEEDIT - Mark = -1; /* pos=0, but do not show it yet */ + EditMark = -1; /* pos=0, but do not show it yet */ #endif - DspStart = 0; + DpyStart = 0; updateMargin(edit); - StrLen = strlen(old_value); - Buf = typecallocn(char, MaxLen + 1); + BufInUse = strlen(old_value); + Buffer = typecallocn(char, BufAlloc + 1); - if (Buf == 0) + if (Buffer == 0) outofmem(__FILE__, "LYSetupEdit"); - LYStrNCpy(Buf, old_value, buffer_limit); - Offs2Col = typecallocn(int, MaxLen + 1); + LYStrNCpy(Buffer, old_value, buffer_limit); + Offs2Col = typecallocn(int, BufAlloc + 1); if (Offs2Col == 0) outofmem(__FILE__, "LYSetupEdit"); @@ -3065,13 +3130,13 @@ static int map_active = 0; #define map_active 0 #endif -int LYEditInsert(EDREC * edit, unsigned const char *s, +int LYEditInsert(FieldEditor * edit, unsigned const char *s, int len, int map GCC_UNUSED, int maxMessage) { - int length = (int) strlen(Buf); - int remains = (int) MaxLen - (length + len); + int length = (int) strlen(Buffer); + int remains = (int) BufAlloc - (length + len); int edited = 0, overflow = 0; /* @@ -3080,20 +3145,20 @@ int LYEditInsert(EDREC * edit, unsigned const char *s, if (remains < 0) { overflow = 1; len = 0; - if ((int) MaxLen > length) /* Insert as much as we can */ - len = (int) MaxLen - length; + if ((int) BufAlloc > length) /* Insert as much as we can */ + len = (int) BufAlloc - length; else goto finish; } ExtendEditor(edit, length + len); - Buf[length + len] = '\0'; - for (; length >= Pos; length--) /* Make room */ - Buf[length + len] = Buf[length]; + Buffer[length + len] = '\0'; + for (; length >= EditAt; length--) /* Make room */ + Buffer[length + len] = Buffer[length]; #ifdef EXP_KEYBOARD_LAYOUT if (map < 0) map = map_active; if (map && IS_UTF8_TTY) { - int off = Pos; + int off = EditAt; unsigned const char *e = s + len; char *tail = 0; @@ -3111,31 +3176,31 @@ int LYEditInsert(EDREC * edit, unsigned const char *s, remains -= l - 1; if (remains < 0) { if (tail) - strcpy(Buf + off, tail); + strcpy(Buffer + off, tail); FREE(tail); len = off; overflow = 1; goto finish; } if (l > 1 && !tail) - StrAllocCopy(tail, Buf + Pos + len); + StrAllocCopy(tail, Buffer + EditAt + len); } else utfbuf[0] = '?'; } else utfbuf[0] = (char) ucode; } - StrNCpy(Buf + off, utfbuf, l); + StrNCpy(Buffer + off, utfbuf, l); edited = 1; off += l; s++; } if (tail) - strcpy(Buf + off, tail); - len = off - Pos; + strcpy(Buffer + off, tail); + len = off - EditAt; FREE(tail); } else if (map) { unsigned const char *e = s + len; - unsigned char *t = (unsigned char *) Buf + Pos; + unsigned char *t = (unsigned char *) Buffer + EditAt; while (s < e) { int ch; @@ -3154,46 +3219,48 @@ int LYEditInsert(EDREC * edit, unsigned const char *s, } else #endif /* defined EXP_KEYBOARD_LAYOUT */ { - StrNCpy(Buf + Pos, (const char *) s, len); + StrNCpy(Buffer + EditAt, (const char *) s, len); edited = 1; } finish: - Pos += len; - StrLen += (size_t) len; + EditAt += len; + BufInUse += (size_t) len; if (edited) IsDirty = TRUE; if (overflow && maxMessage) _statusline(MAXLEN_REACHED_DEL_OR_MOV); #ifdef ENHANCED_LINEEDIT - if (Mark > Pos) - Mark += len; - else if (Mark < -(1 + Pos)) - Mark -= len; - if (Mark >= 0) - Mark = -(1 + Mark); /* Disable it */ + if (EditMark > EditAt) + EditMark += len; + else if (EditMark < -(1 + EditAt)) + EditMark -= len; + disableEditMark(); #endif return edited; } -/* returns 0 character processed - * -ch if action should be performed outside of line-editing mode - * ch otherwise +/* + * Do one edit-operation, given the input 'ch' and working buffer 'edit'. + * + * If the input is processed, returns zero. + * If the action should be performed outside of line-editing mode, return -ch. + * Otherwise, e.g., returns 'ch'. */ -int LYEdit1(EDREC * edit, int ch, - int action, - int maxMessage) +int LYDoEdit(FieldEditor * edit, int ch, + int action, + int maxMessage) { int i; int length; unsigned char uch; int offset; - if ((int) MaxLen <= 0) + if ((int) BufAlloc <= 0) return (0); /* Be defensive */ - StrLen = strlen(&Buf[0]); - length = (int) StrLen; + BufInUse = strlen(&Buffer[0]); + length = (int) BufInUse; switch (action) { #ifdef EXP_KEYBOARD_LAYOUT @@ -3207,10 +3274,8 @@ int LYEdit1(EDREC * edit, int ch, #ifndef CJK_EX case LYE_AIX: /* - * Hex 97. - * Fall through as a character for CJK, or if this is a valid character - * in the current display character set. Otherwise, we treat this as - * LYE_ENTER. + * Handle CJK characters, or as a valid character in the current + * display character set. Otherwise, we treat this as LYE_ENTER. */ if (!IS_CJK_TTY && LYlowest_eightbit[current_char_set] > 0x97) return (ch); @@ -3227,28 +3292,27 @@ int LYEdit1(EDREC * edit, int ch, * replacement for a character in the 8-bit C1 control range. * * This is meant to undo transformations like 0x81 -> 0x1b 0x41 (ESC A) - * etc. done by slang on Unix and possibly some comm programs. It's + * etc., done by slang on Unix and possibly some comm programs. It's * an imperfect workaround that doesn't work for all such characters. */ ch &= 0xFF; if (ch + 64 >= LYlowest_eightbit[current_char_set]) ch += 64; - if (Pos <= ((int) MaxLen) && StrLen < MaxLen) { + if (EditAt <= ((int) BufAlloc) && BufInUse < BufAlloc) { #ifdef ENHANCED_LINEEDIT - if (Mark > Pos) - Mark++; - else if (Mark < -(1 + Pos)) - Mark--; - if (Mark >= 0) - Mark = -(1 + Mark); /* Disable it */ + if (EditMark > EditAt) + EditMark++; + else if (EditMark < -(1 + EditAt)) + EditMark--; + disableEditMark(); #endif ExtendEditor(edit, length + 1); - for (i = length; i >= Pos; i--) /* Make room */ - Buf[i + 1] = Buf[i]; - Buf[length + 1] = '\0'; - Buf[Pos] = (char) ch; - Pos++; + for (i = length; i >= EditAt; i--) /* Make room */ + Buffer[i + 1] = Buffer[i]; + Buffer[length + 1] = '\0'; + Buffer[EditAt] = (char) ch; + EditAt++; } else { if (maxMessage) { _statusline(MAXLEN_REACHED_DEL_OR_MOV); @@ -3257,203 +3321,143 @@ int LYEdit1(EDREC * edit, int ch, } break; - case LYE_BACKW: - /* - * Backword. - * Definition of word is very naive: 1 or more a/n characters. - */ -#ifndef SUPPORT_MULTIBYTE_EDIT - while (Pos && !isalnum(UCH(Buf[Pos - 1]))) - Pos--; - while (Pos && isalnum(UCH(Buf[Pos - 1]))) - Pos--; -#else - while (Pos && !(isalnum(UCH(Buf[Pos - 1])) || is8bits(Buf[Pos - 1]))) - Pos--; - while (Pos && (isalnum(UCH(Buf[Pos - 1])) || is8bits(Buf[Pos - 1]))) - Pos--; -#endif + case LYE_BACKW: /* go backward one word */ + while (EditAt && !IsWordChar(Buffer[EditAt - 1])) + EditAt--; + while (EditAt && IsWordChar(UCH(Buffer[EditAt - 1]))) + EditAt--; break; - case LYE_FORWW: - /* - * Word forward. - */ -#ifndef SUPPORT_MULTIBYTE_EDIT - while (isalnum(UCH(Buf[Pos]))) - Pos++; /* '\0' is not a/n */ - while (!isalnum(UCH(Buf[Pos])) && Buf[Pos]) - Pos++; -#else - while (isalnum(UCH(Buf[Pos])) || is8bits(Buf[Pos])) - Pos++; /* '\0' is not a/n */ - while (!(isalnum(UCH(Buf[Pos])) || is8bits(Buf[Pos])) && Buf[Pos]) - Pos++; -#endif + case LYE_FORWW: /* go forward one word */ + while (IsWordChar(UCH(Buffer[EditAt]))) + EditAt++; + while (!IsWordChar(Buffer[EditAt]) && Buffer[EditAt]) + EditAt++; break; - case LYE_ERASE: - /* - * Erase the line to start fresh. - */ - Buf[0] = '\0'; + case LYE_ERASE: /* erase the line */ + Buffer[0] = '\0'; #ifdef ENHANCED_LINEEDIT - Mark = -1; /* Do not show the mark */ + EditMark = -1; /* Do not show the mark */ #endif - /* fall through */ + /* FALLTHRU */ - case LYE_BOL: - /* - * Go to first column. - */ - Pos = 0; + case LYE_BOL: /* go to beginning of line */ + EditAt = 0; break; - case LYE_EOL: - /* - * Go to last column. - */ - Pos = length; + case LYE_EOL: /* go to end of line */ + EditAt = length; break; - case LYE_DELNW: - /* - * Delete next word. - */ - offset = Pos; - LYEdit1(edit, 0, LYE_FORWW, FALSE); - offset = Pos - offset; - Pos -= offset; + case LYE_DELNW: /* delete next word */ + offset = EditAt; + LYDoEdit(edit, 0, LYE_FORWW, FALSE); + offset = EditAt - offset; + EditAt -= offset; goto shrink; /* right below */ - case LYE_DELPW: - /* - * Delete previous word. - */ - offset = Pos; - LYEdit1(edit, 0, LYE_BACKW, FALSE); - offset -= Pos; + case LYE_DELPW: /* delete previous word */ + offset = EditAt; + LYDoEdit(edit, 0, LYE_BACKW, FALSE); + offset -= EditAt; shrink: - for (i = Pos; i < length - offset + 1; i++) - Buf[i] = Buf[i + offset]; + for (i = EditAt; i < length - offset + 1; i++) + Buffer[i] = Buffer[i + offset]; #ifdef ENHANCED_LINEEDIT - if (Mark >= 0) - Mark = -(1 + Mark); /* Disable it */ - if (Mark <= -(1 + Pos + offset)) - Mark += offset; /* Shift it */ - if (-(1 + Pos + offset) < Mark && Mark < -(1 + Pos)) - Mark = -(1 + Pos); /* Set to the current position */ + disableEditMark(); + if (EditMark <= -(1 + EditAt + offset)) + EditMark += offset; /* Shift it */ + if (-(1 + EditAt + offset) < EditMark && EditMark < -(1 + EditAt)) + EditMark = -(1 + EditAt); /* Set to the current position */ #endif break; - case LYE_DELBL: - /* - * Delete from current cursor position back to BOL. - */ - for (i = Pos; i < length + 1; i++) - Buf[i - Pos] = Buf[i]; + case LYE_DELBL: /* delete from cursor to beginning of line */ + for (i = EditAt; i < length + 1; i++) + Buffer[i - EditAt] = Buffer[i]; #ifdef ENHANCED_LINEEDIT - if (Mark >= 0) - Mark = -(1 + Mark); /* Disable it */ - if (Mark <= -(1 + Pos)) - Mark += Pos; /* Shift it */ + disableEditMark(); + if (EditMark <= -(1 + EditAt)) + EditMark += EditAt; /* Shift it */ else - Mark = -1; /* Reset it */ + EditMark = -1; /* Reset it */ #endif - Pos = 0; + EditAt = 0; break; - case LYE_DELEL: /* @@@ */ - /* - * Delete from current cursor position thru EOL. - */ - Buf[Pos] = '\0'; + case LYE_DELEL: /* delete from cursor to end of line */ + Buffer[EditAt] = '\0'; #ifdef ENHANCED_LINEEDIT - if (Mark >= 0) - Mark = -(1 + Mark); /* Disable it */ - if (Mark <= -(1 + Pos)) - Mark = -1; /* Reset it */ + disableEditMark(); + if (EditMark <= -(1 + EditAt)) + EditMark = -1; /* Reset it */ #endif break; - case LYE_DELN: - /* - * Delete next character (I-beam style cursor), or current character - * (box/underline style cursor). - */ - if (Pos >= length) + case LYE_DELN: /* delete next character */ + if (EditAt >= length) break; #ifndef SUPPORT_MULTIBYTE_EDIT - Pos++; + EditAt++; #else - Pos += mbcs_skip(Buf + Pos, 1); + EditAt += mbcs_skip(Buffer + EditAt, 1); #endif - /* fall through - DO NOT RELOCATE the LYE_DELN case wrt LYE_DELP */ + /* FALLTHRU */ - case LYE_DELP: - /* - * Delete preceding character. - */ - if (length == 0 || Pos == 0) + case LYE_DELP: /* delete previous character */ + if (length == 0 || EditAt == 0) break; #ifndef SUPPORT_MULTIBYTE_EDIT #ifdef ENHANCED_LINEEDIT - if (Mark >= 0) - Mark = -(1 + Mark); /* Disable it */ - if (Mark <= -(1 + Pos)) - Mark++; + disableEditMark(); + if (EditMark <= -(1 + EditAt)) + EditMark++; #endif - Pos--; - for (i = Pos; i < length; i++) - Buf[i] = Buf[i + 1]; + EditAt--; + for (i = EditAt; i < length; i++) + Buffer[i] = Buffer[i + 1]; #else /* SUPPORT_MULTIBYTE_EDIT */ - offset = Pos - mbcs_skip(Buf, mbcs_glyphs(Buf, Pos) - 1); - Pos -= offset; - for (i = Pos; i < length - offset + 1; i++) - Buf[i] = Buf[i + offset]; + offset = EditAt - mbcs_skip(Buffer, mbcs_glyphs(Buffer, EditAt) - 1); + EditAt -= offset; + for (i = EditAt; i < length - offset + 1; i++) + Buffer[i] = Buffer[i + offset]; #ifdef ENHANCED_LINEEDIT - if (Mark >= 0) - Mark = -(1 + Mark); /* Disable it */ - if (Mark <= -(1 + Pos)) - Mark += offset; /* Shift it */ + disableEditMark(); + if (EditMark <= -(1 + EditAt)) + EditMark += offset; /* Shift it */ #endif #endif /* SUPPORT_MULTIBYTE_EDIT */ break; case LYE_FORW_RL: - case LYE_FORW: - /* - * Move cursor to the right. - */ + case LYE_FORW: /* move cursor forward */ #ifndef SUPPORT_MULTIBYTE_EDIT - if (Pos < length) - Pos++; + if (EditAt < length) + EditAt++; #else - if (Pos < length) - Pos += mbcs_skip(Buf + Pos, 1); + if (EditAt < length) + EditAt += mbcs_skip(Buffer + EditAt, 1); #endif else if (action == LYE_FORW_RL) return -ch; break; case LYE_BACK_LL: - case LYE_BACK: - /* - * Left-arrow move cursor to the left. - */ + case LYE_BACK: /* move cursor backward */ #ifndef SUPPORT_MULTIBYTE_EDIT - if (Pos > 0) - Pos--; + if (EditAt > 0) + EditAt--; #else - if (Pos > 0) - Pos = mbcs_skip(Buf, mbcs_glyphs(Buf, Pos) - 1); + if (EditAt > 0) + EditAt = mbcs_skip(Buffer, mbcs_glyphs(Buffer, EditAt) - 1); #endif else if (action == LYE_BACK_LL) return -ch; @@ -3470,91 +3474,74 @@ int LYEdit1(EDREC * edit, int ch, break; /* Can't help it now */ #endif - if (length <= 1 || Pos == 0) + if (length <= 1 || EditAt == 0) return (ch); - if (Pos == length) - Pos--; - if (Mark < 0) - Mark = -(1 + Mark); /* Temporary enable it */ - if (Mark == Pos || Mark == Pos + 1) - Mark = Pos - 1; - if (Mark >= 0) - Mark = -(1 + Mark); /* Disable it */ - if (Buf[Pos - 1] == Buf[Pos]) { - Pos++; + if (EditAt == length) + EditAt--; + enableEditMark(); + if (EditMark == EditAt || EditMark == EditAt + 1) + EditMark = EditAt - 1; + disableEditMark(); + if (Buffer[EditAt - 1] == Buffer[EditAt]) { + EditAt++; break; } - i = Buf[Pos - 1]; - Buf[Pos - 1] = Buf[Pos]; - Buf[Pos++] = (char) i; + i = Buffer[EditAt - 1]; + Buffer[EditAt - 1] = Buffer[EditAt]; + Buffer[EditAt++] = (char) i; break; - case LYE_SETMARK: - /* - * primitive emacs-like set-mark-command - */ - Mark = Pos; + case LYE_SETMARK: /* Emacs-like set-mark-command */ + EditMark = EditAt; return (0); - case LYE_XPMARK: - /* - * emacs-like exchange-point-and-mark - */ - if (Mark < 0) - Mark = -(1 + Mark); /* Enable it */ - if (Mark == Pos) + case LYE_XPMARK: /* Emacs-like exchange-point-and-mark */ + enableEditMark(); + if (EditMark == EditAt) return (0); - i = Pos; - Pos = Mark; - Mark = i; + i = EditAt; + EditAt = EditMark; + EditMark = i; break; - case LYE_KILLREG: - /* - * primitive emacs-like kill-region - */ - if (Mark < 0) - Mark = -(1 + Mark); /* Enable it */ - if (Mark == Pos) { + case LYE_KILLREG: /* Emacs-like kill-region */ + enableEditMark(); + if (EditMark == EditAt) { BStrFree(killbuffer); return (0); } - if (Mark > Pos) - LYEdit1(edit, 0, LYE_XPMARK, FALSE); + if (EditMark > EditAt) + LYDoEdit(edit, 0, LYE_XPMARK, FALSE); { - int reglen = Pos - Mark; + int reglen = EditAt - EditMark; - BStrCopy1(killbuffer, Buf + Mark, reglen); - for (i = Mark; Buf[i + reglen]; i++) - Buf[i] = Buf[i + reglen]; - Buf[i] = Buf[i + reglen]; /* terminate */ - Pos = Mark; + BStrCopy1(killbuffer, Buffer + EditMark, reglen); + for (i = EditMark; Buffer[i + reglen]; i++) + Buffer[i] = Buffer[i + reglen]; + Buffer[i] = Buffer[i + reglen]; /* terminate */ + EditAt = EditMark; } - if (Mark >= 0) - Mark = -(1 + Mark); /* Disable it */ + disableEditMark(); break; - case LYE_YANK: - /* - * primitive emacs-like yank - */ + case LYE_YANK: /* Emacs-like yank */ if (!killbuffer) { - Mark = -(1 + Pos); + EditMark = -(1 + EditAt); return (0); } else { int yanklen = killbuffer->len; - if ((Pos + yanklen) <= (int) MaxLen && - StrLen + (size_t) yanklen <= MaxLen) { + if ((EditAt + yanklen) <= (int) BufAlloc && + BufInUse + (size_t) yanklen <= BufAlloc) { - ExtendEditor(edit, Pos + yanklen); + ExtendEditor(edit, EditAt + yanklen); - Mark = -(1 + Pos); + EditMark = -(1 + EditAt); - for (i = length; i >= Pos; i--) /* Make room */ - Buf[i + yanklen] = Buf[i]; + for (i = length; i >= EditAt; i--) /* Make room */ + Buffer[i + yanklen] = Buffer[i]; for (i = 0; i < yanklen; i++) - Buf[Pos++] = killbuffer->str[i]; + Buffer[EditAt++] = killbuffer->str[i]; } else if (maxMessage) { _statusline(MAXLEN_REACHED_DEL_OR_MOV); @@ -3565,18 +3552,18 @@ int LYEdit1(EDREC * edit, int ch, #endif /* ENHANCED_LINEEDIT */ case LYE_UPPER: - LYUpperCase(Buf); + LYUpperCase(Buffer); break; case LYE_LOWER: - LYLowerCase(Buf); + LYLowerCase(Buffer); break; default: return (ch); } IsDirty = TRUE; - StrLen = strlen(&Buf[0]); + BufInUse = strlen(&Buffer[0]); return (0); } @@ -3603,7 +3590,7 @@ int get_popup_number(const char *msg, /* * Get the number, possibly with a suffix, from the user. */ - if (LYgetBString(&temp, VISIBLE, 0, NORECALL) < 0 || isBEmpty(temp)) { + if (LYgetBString(&temp, FALSE, 0, NORECALL) < 0 || isBEmpty(temp)) { HTInfoMsg(CANCELLED); *c = '\0'; *rel = '\0'; @@ -3655,7 +3642,7 @@ int get_popup_number(const char *msg, # define TmpStyleOff(s) #endif /* defined USE_COLOR_STYLE */ -static void remember_column(EDREC * edit, int offset) +static void remember_column(FieldEditor * edit, int offset) { int y0, x0; @@ -3688,24 +3675,24 @@ static void fill_edited_line(int prompting GCC_UNUSED, int length, int ch) /* * Multibyte string display subroutine. - * EDREC fields retain their values as byte offsets. + * FieldEditor fields retain their values as byte offsets. * All external logic still works fine with byte values. */ -void LYRefreshEdit(EDREC * edit) +void LYRefreshEdit(FieldEditor * edit) { /* bytes and characters are not the same thing */ #if defined(DEBUG_EDIT) int all_bytes; #endif - int pos_bytes = Pos; + int pos_bytes = EditAt; int dpy_bytes; int lft_bytes; /* base of string which is displayed */ /* cells refer to display-columns on the screen */ - int all_cells; /* total of display-cells in Buf */ + int all_cells; /* total of display-cells in Buffer */ int dpy_cells; /* number of cells which are displayed */ int lft_cells; /* number of cells before display (on left) */ - int pos_cells; /* number of display-cells up to Pos */ + int pos_cells; /* number of display-cells up to EditAt */ #if defined(SUPPORT_MULTIBYTE_EDIT) int dpy_chars; @@ -3734,63 +3721,62 @@ void LYRefreshEdit(EDREC * edit) /* * If we've made no changes, or if there is nothing to display, just leave. */ - if (!IsDirty || (DspWdth == 0)) + if (!IsDirty || (DpyWidth == 0)) return; - CTRACE((tfp, "LYRefreshEdit:%s\n", Buf)); + CTRACE((tfp, "LYRefreshEdit:%s\n", Buffer)); IsDirty = FALSE; - StrLen = strlen(&Buf[0]); + BufInUse = strlen(&Buffer[0]); - all_cells = LYstrCells(Buf); - pos_cells = LYstrExtent2(Buf, Pos); + all_cells = LYstrCells(Buffer); + pos_cells = LYstrExtent2(Buffer, EditAt); #if defined(SUPPORT_MULTIBYTE_EDIT) && defined(DEBUG_EDIT) - all_bytes = (int) StrLen; - lft_chars = mbcs_glyphs(Buf, DspStart); - pos_chars = mbcs_glyphs(Buf, Pos); - all_chars = mbcs_glyphs(Buf, all_bytes); + all_bytes = (int) BufInUse; + lft_chars = mbcs_glyphs(Buffer, DpyStart); + pos_chars = mbcs_glyphs(Buffer, EditAt); + all_chars = mbcs_glyphs(Buffer, all_bytes); #endif /* * Now we have: - * .--DspWdth---. + * .--DpyWidth--. * +---------+=============+-----------+ - * | |M M| | (M=margin) + * | |M M| | (M=PanMargin) * +---------+=============+-----------+ - * 0 DspStart StrLen + * 0 DpyStart BufInUse * - * Insertion point can be anywhere between 0 and stringlength. Figure out - * new display starting point. + * Insertion point can be anywhere between 0 and stringlength. Calculate + * a new display starting point. * - * The first "if" below makes Lynx scroll several columns at a time when - * extending the string. Looks awful, but that way we can keep up with - * data entry at low baudrates. + * First, make Lynx scroll several columns at a time as needed when + * extending the string. Doing this helps with lowspeed connections. */ - lft_bytes = DspStart; - lft_cells = LYstrExtent2(Buf, DspStart); + lft_bytes = DpyStart; + lft_cells = LYstrExtent2(Buffer, DpyStart); - if ((lft_cells + DspWdth) <= all_cells) { - if (pos_cells >= (lft_cells + DspWdth) - Margin) { - lft_cells = (pos_cells - DspWdth) + Margin; + if ((lft_cells + DpyWidth) <= all_cells) { + if (pos_cells >= (lft_cells + DpyWidth) - PanMargin) { + lft_cells = (pos_cells - DpyWidth) + PanMargin; #ifdef SUPPORT_MULTIBYTE_EDIT - lft_chars = cell2char(Buf, lft_cells); - lft_bytes = mbcs_skip(Buf, lft_chars); + lft_chars = cell2char(Buffer, lft_cells); + lft_bytes = mbcs_skip(Buffer, lft_chars); #else lft_bytes = lft_cells; #endif /* SUPPORT_MULTIBYTE_EDIT */ } } - if (pos_cells < lft_cells + Margin) { - lft_cells = pos_cells - Margin; + if (pos_cells < lft_cells + PanMargin) { + lft_cells = pos_cells - PanMargin; if (lft_cells < 0) lft_cells = 0; #ifdef SUPPORT_MULTIBYTE_EDIT - lft_chars = cell2char(Buf, lft_cells); - lft_bytes = mbcs_skip(Buf, lft_chars); + lft_chars = cell2char(Buffer, lft_cells); + lft_bytes = mbcs_skip(Buffer, lft_chars); #else lft_bytes = lft_cells; #endif /* SUPPORT_MULTIBYTE_EDIT */ @@ -3803,7 +3789,7 @@ void LYRefreshEdit(EDREC * edit) * overwriting part of a multicolumn character which may lie in the first * position. */ - if (PanOn && lft_cells) { + if (IsPanned && lft_cells) { CTRACE_EDIT((tfp, "Draw left scroll-indicator\n")); TmpStyleOn(prompting ? s_prompt_edit_arr : s_aedit_arr); LYmove(StartY, StartX); @@ -3812,15 +3798,15 @@ void LYRefreshEdit(EDREC * edit) lft_shift = 1; } - str = &Buf[lft_bytes]; - DspStart = lft_bytes; + str = &Buffer[lft_bytes]; + DpyStart = lft_bytes; dpy_cells = all_cells - lft_cells; CTRACE_EDIT((tfp, "Comparing dpy_cells %d > (%d - %d)\n", - dpy_cells, DspWdth, lft_shift)); - if (dpy_cells > (DspWdth - lft_shift)) { + dpy_cells, DpyWidth, lft_shift)); + if (dpy_cells > (DpyWidth - lft_shift)) { rgt_shift = 1; - dpy_cells = (DspWdth - lft_shift - rgt_shift); + dpy_cells = (DpyWidth - lft_shift - rgt_shift); } for (;;) { #ifdef SUPPORT_MULTIBYTE_EDIT @@ -3899,17 +3885,17 @@ void LYRefreshEdit(EDREC * edit) Offs2Col[i] = cell + StartX; } else { #if defined(ENHANCED_LINEEDIT) && defined(USE_COLOR_STYLE) - if (Mark >= 0 && DspStart > Mark) + if (EditMark >= 0 && DpyStart > EditMark) TmpStyleOn(prompting ? s_prompt_sel : s_aedit_sel); #endif remember_column(edit, 0); for (i = 0; i < dpy_bytes; i++) { #if defined(ENHANCED_LINEEDIT) && defined(USE_COLOR_STYLE) - if (Mark >= 0 && ((DspStart + i == Mark && Pos > Mark) - || (DspStart + i == Pos && Pos < Mark))) + if (EditMark >= 0 && ((DpyStart + i == EditMark && EditAt > EditMark) + || (DpyStart + i == EditAt && EditAt < EditMark))) TmpStyleOn(prompting ? s_prompt_sel : s_aedit_sel); - if (Mark >= 0 && ((DspStart + i == Mark && Pos < Mark) - || (DspStart + i == Pos && Pos > Mark))) + if (EditMark >= 0 && ((DpyStart + i == EditMark && EditAt < EditMark) + || (DpyStart + i == EditAt && EditAt > EditMark))) TmpStyleOff(prompting ? s_prompt_sel : s_aedit_sel); #endif if (str[i] == 1 || str[i] == 2 || @@ -3935,10 +3921,10 @@ void LYRefreshEdit(EDREC * edit) remember_column(edit, i + 1); } #if defined(ENHANCED_LINEEDIT) && defined(USE_COLOR_STYLE) - if (Mark >= 0 && - ((DspStart + dpy_bytes <= Mark && DspStart + dpy_bytes > Pos) - || (DspStart + dpy_bytes > Mark - && DspStart + dpy_bytes <= Pos))) { + if (EditMark >= 0 && + ((DpyStart + dpy_bytes <= EditMark && DpyStart + dpy_bytes > EditAt) + || (DpyStart + dpy_bytes > EditMark + && DpyStart + dpy_bytes <= EditAt))) { TmpStyleOff(prompting ? s_prompt_sel : s_aedit_sel); } #endif @@ -3947,13 +3933,13 @@ void LYRefreshEdit(EDREC * edit) /* * Erase rest of input area. */ - padsize = DspWdth - (Offs2Col[dpy_bytes] - StartX); + padsize = DpyWidth - (Offs2Col[dpy_bytes] - StartX); fill_edited_line(prompting, padsize, PadChar); /* * Scrolling indicators. */ - if (PanOn && dpy_bytes && rgt_shift) { + if (IsPanned && dpy_bytes && rgt_shift) { CTRACE((tfp, "Draw right-scroller offset (%d + %d)\n", dpy_cells, lft_shift)); TmpStyleOn(prompting ? s_prompt_edit_arr : s_aedit_arr); @@ -3965,7 +3951,7 @@ void LYRefreshEdit(EDREC * edit) /* * Finally, move the cursor to the point where the next edit will occur. */ - LYmove(StartY, Offs2Col[Pos - DspStart]); + LYmove(StartY, Offs2Col[EditAt - DpyStart]); #ifdef USE_COLOR_STYLE if (estyle != NOSTYLE) @@ -3974,10 +3960,10 @@ void LYRefreshEdit(EDREC * edit) LYrefresh(); } -static void reinsertEdit(EditFieldData *edit, char *result) +static void reinsertEdit(FieldEditor * edit, char *result) { if (result != 0) { - LYEdit1(edit, '\0', LYE_ERASE, FALSE); + LYDoEdit(edit, '\0', LYE_ERASE, FALSE); while (*result != '\0') { LYLineEdit(edit, (int) (*result), FALSE); result++; @@ -4059,7 +4045,7 @@ int LYarrayWidth(STRING2PTR list) return result; } -static void FormatChoiceNum(char *dst, +static void FormatChoiceNum(char *target, int num_choices, int choice, const char *value) @@ -4067,11 +4053,11 @@ static void FormatChoiceNum(char *dst, if (num_choices >= 0) { int digits = (num_choices > 9) ? 2 : 1; - sprintf(dst, "%*d: %.*s", + sprintf(target, "%*d: %.*s", digits, (choice + 1), MAX_LINE - 9 - digits, value); } else { - LYStrNCpy(dst, value, MAX_LINE - 1); + LYStrNCpy(target, value, MAX_LINE - 1); } } @@ -4829,7 +4815,7 @@ int LYhandlePopupList(int cur_choice, case LYK_WHEREIS: if (isBEmpty(prev_target)) { _statusline(ENTER_WHEREIS_QUERY); - if ((ch = LYgetBString(&prev_target, VISIBLE, 0, recall)) < 0) { + if ((ch = LYgetBString(&prev_target, FALSE, 0, recall)) < 0) { /* * User cancelled the search via ^G. - FM */ @@ -4840,7 +4826,7 @@ int LYhandlePopupList(int cur_choice, check_recall: if (isBEmpty(prev_target) && - !(recall && (ch == UPARROW || ch == DNARROW))) { + !(recall && (ch == UPARROW_KEY || ch == DNARROW_KEY))) { /* * No entry. Simply break. - FM */ @@ -4848,7 +4834,7 @@ int LYhandlePopupList(int cur_choice, goto restore_popup_statusline; } - if (recall && ch == UPARROW) { + if (recall && ch == UPARROW_KEY) { if (FirstRecall) { /* * Use the current string or last query in the list. - FM @@ -4892,7 +4878,7 @@ int LYhandlePopupList(int cur_choice, _statusline(EDIT_A_PREV_QUERY); } if ((ch = LYgetBString(&prev_target, - VISIBLE, 0, recall)) < 0) { + FALSE, 0, recall)) < 0) { /* * User cancelled the search via ^G. - FM */ @@ -4901,7 +4887,7 @@ int LYhandlePopupList(int cur_choice, } goto check_recall; } - } else if (recall && ch == DNARROW) { + } else if (recall && ch == DNARROW_KEY) { if (FirstRecall) { /* * Use the current string or first query in the list. - FM @@ -4945,7 +4931,7 @@ int LYhandlePopupList(int cur_choice, _statusline(EDIT_A_PREV_QUERY); } if ((ch = LYgetBString(&prev_target, - VISIBLE, 0, recall)) < 0) { + FALSE, 0, recall)) < 0) { /* * User cancelled the search via ^G. - FM */ @@ -5079,11 +5065,13 @@ int LYgetBString(bstring **inputline, int xlec = -2; int last_xlec = -1; int last_xlkc = -1; - EditFieldData MyEdit, *edit = &MyEdit; + FieldEditor MyEdit, *edit = &MyEdit; #ifdef SUPPORT_MULTIBYTE_EDIT BOOL refresh_mb = TRUE; #endif /* SUPPORT_MULTIBYTE_EDIT */ + BOOL done = FALSE; + int result = -1; CTRACE((tfp, "called LYgetBString hidden %d, recall %d\n", hidden, (int) recall)); @@ -5101,8 +5089,8 @@ int LYgetBString(bstring **inputline, fep_on(); #endif - for (;;) { - again: + while (!done) { + beginning: #ifndef SUPPORT_MULTIBYTE_EDIT LYRefreshEdit(edit); #else /* SUPPORT_MULTIBYTE_EDIT */ @@ -5114,12 +5102,12 @@ int LYgetBString(bstring **inputline, #ifdef CJK_EX /* for SJIS code */ if (!refresh_mb && (EditBinding(ch) != LYE_CHAR)) - goto again; + goto beginning; #else if (!refresh_mb && (EditBinding(ch) != LYE_CHAR) && (EditBinding(ch) != LYE_AIX)) - goto again; + goto beginning; #endif #endif /* SUPPORT_MULTIBYTE_EDIT */ @@ -5137,18 +5125,20 @@ int LYgetBString(bstring **inputline, ch = LYCharINTERRUPT2; } - if (recall != NORECALL && (ch == UPARROW || ch == DNARROW)) { - BStrCopy0(*inputline, Buf); - LYAddToCloset(recall, Buf); + if (recall != NORECALL && (ch == UPARROW_KEY || ch == DNARROW_KEY)) { + BStrCopy0(*inputline, Buffer); + LYAddToCloset(recall, Buffer); CTRACE((tfp, "LYgetstr(%s) recall\n", (*inputline)->str)); #ifdef FEPCTRL fep_off(); #endif LYFinishEdit(edit); - return (ch); + result = ch; + done = TRUE; + break; } - ch |= CurModif; - CurModif = 0; + ch |= InputMods; + InputMods = 0; if (last_xlkc != -1) { if (ch == last_xlkc) ch |= LKC_MOD3; @@ -5156,7 +5146,7 @@ int LYgetBString(bstring **inputline, } #ifndef WIN_EX if (LKC_TO_LAC(keymap, ch) == LYK_REFRESH) - goto again; + goto beginning; #endif last_xlec = xlec; xlec = EditBinding(ch); @@ -5168,16 +5158,10 @@ int LYgetBString(bstring **inputline, } switch (xlec) { case LYE_SETM1: - /* - * Set flag for modifier 1. - */ - CurModif |= LKC_MOD1; + InputMods |= LKC_MOD1; break; case LYE_SETM2: - /* - * Set flag for modifier 2. - */ - CurModif |= LKC_MOD2; + InputMods |= LKC_MOD2; break; case LYE_TAB: if (xlec == last_xlec && recall != NORECALL) { @@ -5190,7 +5174,7 @@ int LYgetBString(bstring **inputline, int num_options = LYarrayLength((STRING2PTR) data); while (cur_choice < num_options - && strcasecomp(data[cur_choice], Buf) < 0) + && strcasecomp(data[cur_choice], Buffer) < 0) cur_choice++; LYGetYX(old_y, old_x); @@ -5211,17 +5195,15 @@ int LYgetBString(bstring **inputline, FREE(data); } } else { - reinsertEdit(edit, LYFindInCloset(recall, Buf)); + reinsertEdit(edit, LYFindInCloset(recall, Buffer)); } break; -#ifndef CJK_EX /* 1997/11/03 (Mon) 20:13:45 */ +#ifndef CJK_EX case LYE_AIX: /* - * Hex 97. - * Treat as a character for CJK, or if this is a valid character in - * the current display character set. Otherwise, we treat this as - * LYE_ENTER. + * Handle CJK characters, or as a valid character in the current + * display character set. Otherwise, we treat this as LYE_ENTER. */ if (ch != '\t' && (IS_CJK_TTY || @@ -5232,33 +5214,30 @@ int LYgetBString(bstring **inputline, /* FALLTHRU */ #endif case LYE_ENTER: - /* - * Terminate the string and return. - */ - BStrCopy0(*inputline, Buf); + BStrCopy0(*inputline, Buffer); if (!hidden) - LYAddToCloset(recall, Buf); + LYAddToCloset(recall, Buffer); CTRACE((tfp, "LYgetstr(%s) LYE_ENTER\n", (*inputline)->str)); #ifdef FEPCTRL fep_off(); #endif LYFinishEdit(edit); - return (ch); + result = ch; + done = TRUE; + break; #ifdef CAN_CUT_AND_PASTE - /* 1998/10/01 (Thu) 15:05:49 */ - case LYE_PASTE: { unsigned char *s = (unsigned char *) get_clip_grab(), *e; - int len; + size_t len; if (!s) break; - len = (int) strlen((const char *) s); + len = strlen((const char *) s); e = s + len; - if (len > 0) { + if (len != 0) { unsigned char *e1 = s; while (e1 < e) { @@ -5274,13 +5253,16 @@ int LYgetBString(bstring **inputline, map_active, TRUE); s = ++e1; - } else + } else { break; - } else + } + } else { ++e1; + } } - if (e1 > s) + if (e1 > s) { LYEditInsert(edit, s, (int) (e1 - s), map_active, TRUE); + } } get_clip_release(); break; @@ -5288,31 +5270,26 @@ int LYgetBString(bstring **inputline, #endif case LYE_ABORT: - /* - * Control-C or Control-G aborts. - */ CTRACE((tfp, "LYgetstr LYE_ABORT\n")); #ifdef FEPCTRL fep_off(); #endif LYFinishEdit(edit); BStrCopy0(*inputline, ""); - return (-1); + done = TRUE; + break; case LYE_STOP: - /* - * Deactivate. - */ CTRACE((tfp, "LYgetstr LYE_STOP\n")); #ifdef TEXTFIELDS_MAY_NEED_ACTIVATION textfields_need_activation = TRUE; LYFinishEdit(edit); BStrCopy0(*inputline, ""); - return (-1); + done = TRUE; + break; #else #ifdef ENHANCED_LINEEDIT - if (Mark >= 0) - Mark = -(1 + Mark); /* Disable it */ + disableEditMark(); #endif break; #endif @@ -5350,12 +5327,13 @@ int LYgetBString(bstring **inputline, refresh_mb = TRUE; } else { if (!refresh_mb) { - LYEdit1(edit, 0, LYE_DELP, FALSE); + LYDoEdit(edit, 0, LYE_DELP, FALSE); } } #endif /* SUPPORT_MULTIBYTE_EDIT */ } } + return result; } /* @@ -5387,23 +5365,27 @@ const char *LYLineeditHelpURL(void) static int lasthelp_lineedit = -1; static char helpbuf[LY_MAXPATH] = "\0"; static char *phelp = &helpbuf[0]; + const char *result = NULL; - if (lasthelp_lineedit == current_lineedit) - return &helpbuf[0]; - if (lasthelp_lineedit == -1) { - LYStrNCpy(helpbuf, helpfilepath, sizeof(helpbuf) - 1); - phelp += strlen(helpbuf); - } - if (LYLineeditHelpURLs[current_lineedit] && - strlen(LYLineeditHelpURLs[current_lineedit]) && - (strlen(LYLineeditHelpURLs[current_lineedit]) <= - sizeof(helpbuf) - (unsigned) (phelp - helpbuf))) { - LYStrNCpy(phelp, LYLineeditHelpURLs[current_lineedit], - (int) (sizeof(helpbuf) - (unsigned) (phelp - helpbuf) - 1)); - lasthelp_lineedit = current_lineedit; - return (&helpbuf[0]); + if (lasthelp_lineedit == current_lineedit) { + result = helpbuf; + } else { + const char *source = LYLineeditHelpURLs[current_lineedit]; + size_t available; + + if (lasthelp_lineedit == -1) { + LYStrNCpy(helpbuf, helpfilepath, sizeof(helpbuf) - 1); + phelp += strlen(helpbuf); + } + available = (sizeof(helpbuf) - (size_t) (phelp - helpbuf)); + if (non_empty(source) && + (strlen(source) <= available)) { + LYStrNCpy(phelp, source, available); + lasthelp_lineedit = current_lineedit; + result = helpbuf; + } } - return NULL; + return result; } /* @@ -5485,151 +5467,156 @@ int LYscanFloat(const char *source, float *result) char *LYstrsep(char **stringp, const char *delim) { - char *tmp, *out; - - if (isEmpty(stringp)) /* nothing to do? */ - return 0; /* then don't fall on our faces */ + char *marker; + char *result = 0; - out = *stringp; /* save the start of the string */ - tmp = strpbrk(*stringp, delim); - if (tmp) { - *tmp = '\0'; /* terminate the substring with \0 */ - *stringp = ++tmp; /* point at the next substring */ - } else - *stringp = 0; /* this was the last substring: */ - /* let caller see he's done */ - return out; + if (non_empty(stringp)) { + result = *stringp; /* will return the old value */ + marker = strpbrk(*stringp, delim); + if (marker) { + *marker = '\0'; /* terminate the substring */ + *stringp = ++marker; /* point to the next substring */ + } else { + *stringp = 0; /* this was the last */ + } + } + return result; } /* - * LYstrstr will find the first occurrence of the string pointed to by tarptr - * in the string pointed to by chptr. It returns NULL if string not found. It - * is a case insensitive search. + * LYstrstr finds the first occurrence of the string pointed to by needle + * in the string pointed to by haystack. + * + * It returns NULL if the string is not found. + * + * It is a case insensitive search. */ -char *LYstrstr(char *chptr, - const char *tarptr) +char *LYstrstr(char *haystack, + const char *needle) { - int len = (int) strlen(tarptr); + int len = (int) strlen(needle); + char *result = NULL; - for (; *chptr != '\0'; chptr++) { - if (0 == UPPER8(*chptr, *tarptr)) { - if (0 == strncasecomp8(chptr + 1, tarptr + 1, len - 1)) - return (chptr); + for (; *haystack != '\0'; haystack++) { + if (0 == UPPER8(*haystack, *needle)) { + if (0 == strncasecomp8(haystack + 1, needle + 1, len - 1)) { + result = haystack; + break; + } } - } /* end for */ + } - return (NULL); /* string not found or initial chptr was empty */ + return (result); } +#define SkipSpecialChars(p) \ + while (IsSpecialAttrChar(*p) && *p != '\0') \ + p++ + /* - * LYno_attr_char_case_strstr will find the first occurrence of the - * string pointed to by tarptr in the string pointed to by chptr. - * It ignores the characters: LY_UNDERLINE_START_CHAR and - * LY_UNDERLINE_END_CHAR - * LY_BOLD_START_CHAR - * LY_BOLD_END_CHAR - * LY_SOFT_HYPHEN - * if present in chptr. + * LYno_attr_char_case_strstr finds the first occurrence of the + * string pointed to by needle in the string pointed to by haystack. + * + * It ignores special characters, e.g., LY_UNDERLINE_START_CHAR in haystack. + * * It is a case insensitive search. */ -const char *LYno_attr_char_case_strstr(const char *chptr, - const char *tarptr) +const char *LYno_attr_char_case_strstr(const char *haystack, + const char *needle) { - register const char *tmpchptr, *tmptarptr; + const char *refptr, *tstptr; + const char *result = NULL; - if (!chptr) - return (NULL); + if (haystack != NULL && needle != NULL) { - while (IsSpecialAttrChar(*chptr) && *chptr != '\0') - chptr++; + SkipSpecialChars(haystack); - for (; *chptr != '\0'; chptr++) { - if (0 == UPPER8(*chptr, *tarptr)) { - /* - * See if they line up. - */ - tmpchptr = chptr + 1; - tmptarptr = tarptr + 1; + for (; *haystack != '\0' && (result == NULL); haystack++) { + if (0 == UPPER8(*haystack, *needle)) { + refptr = haystack + 1; + tstptr = needle + 1; - if (*tmptarptr == '\0') /* one char target */ - return (chptr); + if (*tstptr == '\0') { + result = haystack; + break; + } - while (1) { - if (!IsSpecialAttrChar(*tmpchptr)) { - if (0 != UPPER8(*tmpchptr, *tmptarptr)) + while (1) { + if (!IsSpecialAttrChar(*refptr)) { + if (0 != UPPER8(*refptr, *tstptr)) + break; + refptr++; + tstptr++; + } else { + refptr++; + } + if (*tstptr == '\0') { + result = haystack; + break; + } + if (*refptr == '\0') break; - tmpchptr++; - tmptarptr++; - } else { - tmpchptr++; } - if (*tmptarptr == '\0') - return (chptr); - if (*tmpchptr == '\0') - break; } } - } /* end for */ + } - return (NULL); + return (result); } /* - * LYno_attr_char_strstr will find the first occurrence of the - * string pointed to by tarptr in the string pointed to by chptr. - * It ignores the characters: LY_UNDERLINE_START_CHAR and - * LY_UNDERLINE_END_CHAR - * LY_BOLD_START_CHAR - * LY_BOLD_END_CHAR - * LY_SOFT_HYPHEN - * if present in chptr. + * LYno_attr_char_strstr finds the first occurrence of the + * string pointed to by needle in the string pointed to by haystack. + * It ignores special characters, e.g., LY_UNDERLINE_START_CHAR in haystack. + * * It is a case sensitive search. */ -const char *LYno_attr_char_strstr(const char *chptr, - const char *tarptr) +const char *LYno_attr_char_strstr(const char *haystack, + const char *needle) { - register const char *tmpchptr, *tmptarptr; + const char *refptr, *tstptr; + const char *result = NULL; - if (!chptr) - return (NULL); + if (haystack != NULL && needle != NULL) { - while (IsSpecialAttrChar(*chptr) && *chptr != '\0') - chptr++; + SkipSpecialChars(haystack); - for (; *chptr != '\0'; chptr++) { - if ((*chptr) == (*tarptr)) { - /* - * See if they line up. - */ - tmpchptr = chptr + 1; - tmptarptr = tarptr + 1; + for (; *haystack != '\0' && (result == NULL); haystack++) { + if ((*haystack) == (*needle)) { + refptr = haystack + 1; + tstptr = needle + 1; - if (*tmptarptr == '\0') /* one char target */ - return (chptr); + if (*tstptr == '\0') { + result = haystack; + break; + } - while (1) { - if (!IsSpecialAttrChar(*tmpchptr)) { - if ((*tmpchptr) != (*tmptarptr)) + while (1) { + if (!IsSpecialAttrChar(*refptr)) { + if ((*refptr) != (*tstptr)) + break; + refptr++; + tstptr++; + } else { + refptr++; + } + if (*tstptr == '\0') { + result = haystack; break; - tmpchptr++; - tmptarptr++; - } else { - tmpchptr++; + } else if (*refptr == '\0') { + break; + } } - if (*tmptarptr == '\0') - return (chptr); - if (*tmpchptr == '\0') - break; } } - } /* end for */ + } - return (NULL); + return (result); } /* - * LYno_attr_mbcs_case_strstr will find the first occurrence of the string - * pointed to by tarptr in the string pointed to by chptr. It takes account of + * LYno_attr_mbcs_case_strstr finds the first occurrence of the string pointed + * to by needle in the string pointed to by haystack. It takes account of * MultiByte Character Sequences (UTF8). The physical lengths of the displayed * string up to the start and end (= next position after) of the target string * are returned in *nstartp and *nendp if the search is successful. @@ -5639,158 +5626,133 @@ const char *LYno_attr_char_strstr(const char *chptr, * count actual glyphs if count_gcells is unset. (Full-width characters in CJK * mode count as one.) * - * It ignores the characters: LY_UNDERLINE_START_CHAR and - * LY_UNDERLINE_END_CHAR - * LY_BOLD_START_CHAR - * LY_BOLD_END_CHAR - * LY_SOFT_HYPHEN - * if present in chptr. + * It ignores special characters, e.g., LY_UNDERLINE_START_CHAR in haystack. + * * It assumes UTF8 if utf_flag is set. - * It is a case insensitive search. - KW & FM + * + * It is a case insensitive search. */ -const char *LYno_attr_mbcs_case_strstr(const char *chptr, - const char *tarptr, +const char *LYno_attr_mbcs_case_strstr(const char *haystack, + const char *needle, int utf_flag, int count_gcells, int *nstartp, int *nendp) { - const char *tmpchptr; - const char *tmptarptr; + const char *refptr; + const char *tstptr; int len = 0; int offset; + const char *result = NULL; - if (!(chptr && tarptr)) - return (NULL); + if (haystack != NULL && needle != NULL) { - /* - * Skip initial IsSpecial chars. - FM - */ - while (IsSpecialAttrChar(*chptr) && *chptr != '\0') - chptr++; + SkipSpecialChars(haystack); - /* - * Seek a first target match. - FM - */ - for (; *chptr != '\0'; chptr++) { - if ((!utf_flag && IS_CJK_TTY && is8bits(*chptr) && - *chptr == *tarptr && - IsNormalChar(*(chptr + 1))) || - (0 == UPPER8(*chptr, *tarptr))) { - int tarlen = 0; + for (; *haystack != '\0' && (result == NULL); haystack++) { + if ((!utf_flag && IS_CJK_TTY && is8bits(*haystack) && + *haystack == *needle && + IsNormalChar(*(haystack + 1))) || + (0 == UPPER8(*haystack, *needle))) { + int tarlen = 0; - offset = len; - len++; + offset = len; + len++; - /* - * See if they line up. - */ - tmpchptr = (chptr + 1); - tmptarptr = (tarptr + 1); + refptr = (haystack + 1); + tstptr = (needle + 1); - if (*tmptarptr == '\0') { - /* - * One char target. - */ - if (nstartp) - *nstartp = offset; - if (nendp) - *nendp = len; - return (chptr); - } - if (!utf_flag && IS_CJK_TTY && is8bits(*chptr) && - *chptr == *tarptr && - IsNormalChar(*tmpchptr)) { - /* - * Check the CJK multibyte. - FM - */ - if (*tmpchptr == *tmptarptr) { - /* - * It's a match. Advance to next char. - FM - */ - tmpchptr++; - tmptarptr++; - if (count_gcells) - tarlen++; - if (*tmptarptr == '\0') { - /* - * One character match. - FM - */ - if (nstartp) - *nstartp = offset; - if (nendp) - *nendp = len + tarlen; - return (chptr); - } - } else { - /* - * It's not a match, so go back to seeking a first target - * match. - FM - */ - chptr++; - if (count_gcells) - len++; - continue; + if (*tstptr == '\0') { + if (nstartp) + *nstartp = offset; + if (nendp) + *nendp = len; + result = haystack; + break; } - } - /* - * See if the rest of the target matches. - FM - */ - while (1) { - if (!IsSpecialAttrChar(*tmpchptr)) { - if (!utf_flag && IS_CJK_TTY && is8bits(*tmpchptr)) { - if (*tmpchptr == *tmptarptr && - *(tmpchptr + 1) == *(tmptarptr + 1) && - !IsSpecialAttrChar(*(tmpchptr + 1))) { - tmpchptr++; - tmptarptr++; - if (count_gcells) - tarlen++; - } else { + if (!utf_flag && IS_CJK_TTY && is8bits(*haystack) && + *haystack == *needle && + IsNormalChar(*refptr)) { + /* handle a CJK multibyte string */ + if (*refptr == *tstptr) { + refptr++; + tstptr++; + if (count_gcells) + tarlen++; + if (*tstptr == '\0') { + if (nstartp) + *nstartp = offset; + if (nendp) + *nendp = len + tarlen; + result = haystack; break; } - } else if (0 != UPPER8(*tmpchptr, *tmptarptr)) { - break; + } else { + /* not a match */ + haystack++; + if (count_gcells) + len++; + continue; } + } + /* compare the remainder of the string */ + while (1) { + if (!IsSpecialAttrChar(*refptr)) { + if (!utf_flag && IS_CJK_TTY && is8bits(*refptr)) { + if (*refptr == *tstptr && + *(refptr + 1) == *(tstptr + 1) && + !IsSpecialAttrChar(*(refptr + 1))) { + refptr++; + tstptr++; + if (count_gcells) + tarlen++; + } else { + break; + } + } else if (0 != UPPER8(*refptr, *tstptr)) { + break; + } - if (!IS_UTF_EXTRA(*tmptarptr)) { - tarlen++; + if (!IS_UTF_EXTRA(*tstptr)) { + tarlen++; + } + refptr++; + tstptr++; + + } else { + refptr++; } - tmpchptr++; - tmptarptr++; - } else { - tmpchptr++; + if (*tstptr == '\0') { + if (nstartp) + *nstartp = offset; + if (nendp) + *nendp = len + tarlen; + result = haystack; + break; + } + if (*refptr == '\0') + break; } - - if (*tmptarptr == '\0') { - if (nstartp) - *nstartp = offset; - if (nendp) - *nendp = len + tarlen; - return (chptr); + } else if (!(IS_UTF_EXTRA(*haystack) || + IsSpecialAttrChar(*haystack))) { + if (!utf_flag && IS_CJK_TTY && is8bits(*haystack) && + IsNormalChar(*(haystack + 1))) { + haystack++; + if (count_gcells) + len++; } - if (*tmpchptr == '\0') - break; + len++; } - } else if (!(IS_UTF_EXTRA(*chptr) || - IsSpecialAttrChar(*chptr))) { - if (!utf_flag && IS_CJK_TTY && is8bits(*chptr) && - IsNormalChar(*(chptr + 1))) { - chptr++; - if (count_gcells) - len++; - } - len++; } - } /* end for */ + } - return (NULL); + return (result); } /* - * LYno_attr_mbcs_strstr will find the first occurrence of the string pointed - * to by tarptr in the string pointed to by chptr. + * LYno_attr_mbcs_strstr finds the first occurrence of the string pointed + * to by needle in the string pointed to by haystack. * * It takes account of CJK and MultiByte Character Sequences (UTF8). The * physical lengths of the displayed string up to the start and end (= next @@ -5802,199 +5764,177 @@ const char *LYno_attr_mbcs_case_strstr(const char *chptr, * count actual glyphs if count_gcells is unset. (Full-width characters in CJK * mode count as one.) * - * It ignores the characters: LY_UNDERLINE_START_CHAR and - * LY_UNDERLINE_END_CHAR - * LY_BOLD_START_CHAR - * LY_BOLD_END_CHAR - * LY_SOFT_HYPHEN - * if present in chptr. + * It ignores special characters, e.g., LY_UNDERLINE_START_CHAR in haystack. + * * It assumes UTF8 if utf_flag is set. - * It is a case sensitive search. - KW & FM + * + * It is a case sensitive search. */ -const char *LYno_attr_mbcs_strstr(const char *chptr, - const char *tarptr, +const char *LYno_attr_mbcs_strstr(const char *haystack, + const char *needle, int utf_flag, int count_gcells, int *nstartp, int *nendp) { - const char *tmpchptr; - const char *tmptarptr; + const char *refptr; + const char *tstptr; int len = 0; int offset; + const char *result = NULL; - if (!(chptr && tarptr)) - return (NULL); + if (haystack != NULL && needle != NULL) { - /* - * Skip initial IsSpecial chars. - FM - */ - while (IsSpecialAttrChar(*chptr) && *chptr != '\0') - chptr++; + SkipSpecialChars(haystack); - /* - * Seek a first target match. - FM - */ - for (; *chptr != '\0'; chptr++) { - if ((*chptr) == (*tarptr)) { - int tarlen = 0; + for (; *haystack != '\0' && (result == NULL); haystack++) { + if ((*haystack) == (*needle)) { + int tarlen = 0; - offset = len; - len++; + offset = len; + len++; - /* - * See if they line up. - */ - tmpchptr = (chptr + 1); - tmptarptr = (tarptr + 1); + refptr = (haystack + 1); + tstptr = (needle + 1); - if (*tmptarptr == '\0') { - /* - * One char target. - */ - if (nstartp) - *nstartp = offset; - if (nendp) - *nendp = len; - return (chptr); - } - if (!utf_flag && IS_CJK_TTY && is8bits(*chptr) && - IsNormalChar(*tmpchptr)) { - /* - * Check the CJK multibyte. - FM - */ - if (*tmpchptr == *tmptarptr) { - /* - * It's a match. Advance to next char. - FM - */ - tmpchptr++; - tmptarptr++; - if (count_gcells) - tarlen++; - if (*tmptarptr == '\0') { - /* - * One character match. - FM - */ - if (nstartp) - *nstartp = offset; - if (nendp) - *nendp = len + tarlen; - return (chptr); + if (*tstptr == '\0') { + if (nstartp) + *nstartp = offset; + if (nendp) + *nendp = len; + result = haystack; + break; + } else if (!utf_flag && + IS_CJK_TTY && + is8bits(*haystack) && + IsNormalChar(*refptr)) { + /* handle a CJK multibyte string */ + if (*refptr == *tstptr) { + /* found match */ + refptr++; + tstptr++; + if (count_gcells) + tarlen++; + if (*tstptr == '\0') { + if (nstartp) + *nstartp = offset; + if (nendp) + *nendp = len + tarlen; + result = haystack; + break; + } + } else { + /* not a match - restart comparison */ + haystack++; + if (count_gcells) + len++; + continue; } - } else { - /* - * It's not a match, so go back to seeking a first target - * match. - FM - */ - chptr++; - if (count_gcells) - len++; - continue; } - } - /* - * See if the rest of the target matches. - FM - */ - while (1) { - if (!IsSpecialAttrChar(*tmpchptr)) { - if (!utf_flag && IS_CJK_TTY && is8bits(*tmpchptr)) { - if (*tmpchptr == *tmptarptr && - *(tmpchptr + 1) == *(tmptarptr + 1) && - !IsSpecialAttrChar(*(tmpchptr + 1))) { - tmpchptr++; - tmptarptr++; - if (count_gcells) - tarlen++; - } else { + /* compare the remainder of the string */ + while (1) { + if (!IsSpecialAttrChar(*refptr)) { + if (!utf_flag && IS_CJK_TTY && is8bits(*refptr)) { + if (*refptr == *tstptr && + *(refptr + 1) == *(tstptr + 1) && + !IsSpecialAttrChar(*(refptr + 1))) { + refptr++; + tstptr++; + if (count_gcells) + tarlen++; + } else { + break; + } + } else if ((*refptr) != (*tstptr)) { break; } - } else if ((*tmpchptr) != (*tmptarptr)) { - break; + + if (!IS_UTF_EXTRA(*tstptr)) { + tarlen++; + } + refptr++; + tstptr++; + } else { + refptr++; } - if (!IS_UTF_EXTRA(*tmptarptr)) { - tarlen++; + if (*tstptr == '\0') { + if (nstartp) + *nstartp = offset; + if (nendp) + *nendp = len + tarlen; + result = haystack; + break; } - tmpchptr++; - tmptarptr++; - } else { - tmpchptr++; + if (*refptr == '\0') + break; } - - if (*tmptarptr == '\0') { - if (nstartp) - *nstartp = offset; - if (nendp) - *nendp = len + tarlen; - return (chptr); + } else if (!(IS_UTF_EXTRA(*haystack) || + IsSpecialAttrChar(*haystack))) { + if (!utf_flag && IS_CJK_TTY && is8bits(*haystack) && + IsNormalChar(*(haystack + 1))) { + haystack++; + if (count_gcells) + len++; } - if (*tmpchptr == '\0') - break; + len++; } - } else if (!(IS_UTF_EXTRA(*chptr) || - IsSpecialAttrChar(*chptr))) { - if (!utf_flag && IS_CJK_TTY && is8bits(*chptr) && - IsNormalChar(*(chptr + 1))) { - chptr++; - if (count_gcells) - len++; - } - len++; } - } /* end for */ - - return (NULL); + } + return (result); } /* - * Allocate a new copy of a string, and returns it. + * Allocate and return a copy of a string. + * see StrAllocCopy */ -char *SNACopy(char **dest, - const char *src, - int n) +char *SNACopy(char **target, + const char *source, + size_t n) { - FREE(*dest); - if (src) { - *dest = typeMallocn(char, (unsigned) n + 1); + FREE(*target); + if (source) { + *target = typeMallocn(char, n + 1); - if (*dest == NULL) { - CTRACE((tfp, "Tried to malloc %d bytes\n", n)); + if (*target == NULL) { + CTRACE((tfp, "Tried to malloc %lu bytes\n", (unsigned long) n)); outofmem(__FILE__, "SNACopy"); - assert(*dest != NULL); + assert(*target != NULL); } - LYStrNCpy(*dest, src, n); + LYStrNCpy(*target, source, n); } - return *dest; + return *target; } /* - * String Allocate and Concatenate. + * Combinate string allocation and concatenation. + * see StrAllocCat */ -char *SNACat(char **dest, - const char *src, - int n) +char *SNACat(char **target, + const char *source, + size_t n) { - if (non_empty(src)) { - if (*dest) { - int length = (int) strlen(*dest); + if (non_empty(source)) { + if (*target) { + size_t length = strlen(*target); - *dest = typeRealloc(char, *dest, length + n + 1); + *target = typeRealloc(char, *target, length + n + 1); - if (*dest == NULL) + if (*target == NULL) outofmem(__FILE__, "SNACat"); - assert(*dest != NULL); - LYStrNCpy(*dest + length, src, n); + assert(*target != NULL); + LYStrNCpy(*target + length, source, n); } else { - *dest = typeMallocn(char, (unsigned) n + 1); + *target = typeMallocn(char, n + 1); - if (*dest == NULL) + if (*target == NULL) outofmem(__FILE__, "SNACat"); - assert(*dest != NULL); - MemCpy(*dest, src, n); - (*dest)[n] = '\0'; /* terminate */ + assert(*target != NULL); + MemCpy(*target, source, n); + (*target)[n] = '\0'; /* terminate */ } } - return *dest; + return *target; } #include <caselower.h> @@ -6007,33 +5947,32 @@ static long UniToLowerCase(long upper) { size_t i, high, low; long diff = 0; + long result = upper; - /* - * Make check for sure. - */ - if (upper <= 0) - return (upper); - - /* - * Try unicode_to_lower_case[]. - */ - low = 0; - high = TABLESIZE(unicode_to_lower_case); - while (low < high) { + if (upper > 0) { /* - * Binary search. + * Try unicode_to_lower_case[]. */ - i = (low + (high - low) / 2); - diff = (unicode_to_lower_case[i].upper - upper); - if (diff < 0) - low = i + 1; - if (diff > 0) - high = i; - if (diff == 0) - return (unicode_to_lower_case[i].lower); + low = 0; + high = TABLESIZE(unicode_to_lower_case); + while (low < high) { + /* + * Binary search. + */ + i = (low + (high - low) / 2); + diff = (unicode_to_lower_case[i].upper - upper); + if (diff < 0) { + low = i + 1; + } else if (diff > 0) { + high = i; + } else if (diff == 0) { + result = unicode_to_lower_case[i].lower; + break; + } + } } - return (upper); /* if we came here */ + return result; } /* @@ -6051,35 +5990,38 @@ static long UniToLowerCase(long upper) */ int UPPER8(int ch1, int ch2) { - /* if they are the same or one is a null characters return immediately. */ - if (ch1 == ch2) - return 0; - if (!ch2) - return UCH(ch1); - else if (!ch1) - return -UCH(ch2); - - /* case-insensitive match for us-ascii */ - if (UCH(TOASCII(ch1)) < 128 && UCH(TOASCII(ch2)) < 128) - return (TOUPPER(ch1) - TOUPPER(ch2)); - - /* case-insensitive match for upper half */ - if (UCH(TOASCII(ch1)) > 127 && /* S/390 -- gil -- 2066 */ - UCH(TOASCII(ch2)) > 127) { - if (DisplayCharsetMatchLocale) - return (TOUPPER(ch1) - TOUPPER(ch2)); /* old-style */ - else { + int result = 0; + + if (ch1 == ch2) { + result = 0; + } else if (!ch2) { + result = UCH(ch1); + } else if (!ch1) { + result = -UCH(ch2); + } else if (UCH(TOASCII(ch1)) < 128 && UCH(TOASCII(ch2)) < 128) { + /* case-insensitive match for us-ascii */ + result = (TOUPPER(ch1) - TOUPPER(ch2)); + } else if (UCH(TOASCII(ch1)) > 127 && + UCH(TOASCII(ch2)) > 127) { + /* case-insensitive match for upper half */ + if (DisplayCharsetMatchLocale) { + result = (TOUPPER(ch1) - TOUPPER(ch2)); /* old-style */ + } else { long uni_ch2 = UCTransToUni((char) ch2, current_char_set); long uni_ch1; - if (uni_ch2 < 0) - return UCH(ch1); - uni_ch1 = UCTransToUni((char) ch1, current_char_set); - return (int) (UniToLowerCase(uni_ch1) - UniToLowerCase(uni_ch2)); + if (uni_ch2 < 0) { + result = UCH(ch1); + } else { + uni_ch1 = UCTransToUni((char) ch1, current_char_set); + result = (int) (UniToLowerCase(uni_ch1) - UniToLowerCase(uni_ch2)); + } } + } else { + result = -10; /* mismatch */ } - return (-10); /* mismatch, if we come to here */ + return result; } /* @@ -6087,14 +6029,14 @@ int UPPER8(int ch1, int ch2) * that is allocated. When an EOF or error is found, the buffer is freed * automatically. */ -char *LYSafeGets(char **src, +char *LYSafeGets(char **target, FILE *fp) { char buffer[BUFSIZ]; char *result = 0; - if (src != 0) - result = *src; + if (target != 0) + result = *target; if (result != 0) *result = 0; @@ -6113,8 +6055,8 @@ char *LYSafeGets(char **src, */ FREE(result); } - if (src != 0) - *src = result; + if (target != 0) + *target = result; return result; } diff --git a/src/LYStrings.h b/src/LYStrings.h index a1cf0cd7..906c59a0 100644 --- a/src/LYStrings.h +++ b/src/LYStrings.h @@ -1,5 +1,5 @@ /* - * $LynxId: LYStrings.h,v 1.91 2013/10/12 00:06:34 tom Exp $ + * $LynxId: LYStrings.h,v 1.110 2013/10/13 20:30:39 tom Exp $ */ #ifndef LYSTRINGS_H #define LYSTRINGS_H @@ -53,13 +53,13 @@ extern "C" { extern int LYgetch_input(void); extern int LYgetch_single(void); extern int LYgetstr(char *inputline, - int hidden, + int masked, size_t bufsize, RecallType recall); -#define LYGetStr(input,hidden,bufsize,recall) \ - LYgetstr(input,hidden,(size_t)(bufsize),recall) +#define LYGetStr(input,masked,bufsize,recall) \ + LYgetstr(input,masked,(size_t)(bufsize),recall) extern int LYgetBString(bstring **inputline, - int hidden, + int masked, size_t max_cols, RecallType recall); extern int LYscanFloat(const char *source, float *result); @@ -113,10 +113,10 @@ extern "C" { extern char *SNACopy(char **dest, const char *src, - int n); + size_t n); extern char *SNACat(char **dest, const char *src, - int n); + size_t n); #define StrnAllocCopy(dest, src, n) SNACopy (&(dest), src, n) #define StrnAllocCat(dest, src, n) SNACat (&(dest), src, n) @@ -138,27 +138,44 @@ extern "C" { #endif /* values for LYgetch */ -/* The following are lynxkeycodes, not to be confused with - lynxactioncodes (LYK_*) to which they are often mapped. - The lynxkeycodes include all single-byte keys as a subset. - kw -*/ -#define UPARROW 256 /* 0x100 */ -#define DNARROW 257 /* 0x101 */ -#define RTARROW 258 /* 0x102 */ -#define LTARROW 259 /* 0x103 */ -#define PGDOWN 260 /* 0x104 */ -#define PGUP 261 /* 0x105 */ -#define HOME 262 /* 0x106 */ -#define END_KEY 263 /* 0x107 */ -#define F1 264 /* 0x108 */ -#define DO_KEY 265 /* 0x109 */ -#define FIND_KEY 266 /* 0x10A */ -#define SELECT_KEY 267 /* 0x10B */ -#define INSERT_KEY 268 /* 0x10C */ -#define REMOVE_KEY 269 /* 0x10D */ -#define DO_NOTHING 270 /* 0x10E */ -#define BACKTAB_KEY 271 /* 0x10F */ -#define MOUSE_KEY 285 /* 0x11D */ + /* The following are lynxkeycodes, not to be confused with + * lynxactioncodes (LYK_*) to which they are often mapped. + * The lynxkeycodes include all single-byte keys as a subset. + * These are "extra" keys which do not fit into a single byte. + */ + typedef enum { + UPARROW_KEY = 256 + ,DNARROW_KEY + ,RTARROW_KEY + ,LTARROW_KEY + ,PGDOWN_KEY + ,PGUP_KEY + ,HOME_KEY + ,END_KEY + ,F1_KEY + ,DO_KEY + ,FIND_KEY + ,SELECT_KEY + ,INSERT_KEY + ,REMOVE_KEY + ,DO_NOTHING + ,BACKTAB_KEY + /* these should be referenced by name in keymap, e.g., "f2" */ + ,F2_KEY + ,F3_KEY + ,F4_KEY + ,F5_KEY + ,F6_KEY + ,F7_KEY + ,F8_KEY + ,F9_KEY + ,F10_KEY + ,F11_KEY + ,F12_KEY + /* this has known value */ + ,MOUSE_KEY = 285 /* 0x11D */ + } LYExtraKeys; + /* ***** NOTES: ***** If you add definitions for new lynxkeycodes to the above list that need to be mapped to LYK_* lynxactioncodes - @@ -175,7 +192,7 @@ extern "C" { documented in lynx.cfg. - The DOS port uses its own native codes for some keys, unless they are - remapped by the code in LYgetch(). See *.key files in docs/ directory. + remapped by the code in LYgetch(). See *.key files in docs/ directory. Adding new keys here may conflict with those codes (affecting DOS users), unless/until remapping is added or changed in LYgetch(). (N)curses keypad codes (KEY_* from curses.h) can also directly appear as @@ -198,44 +215,42 @@ extern "C" { # define FOR_PROMPT 3 /* string prompt editing */ # define FOR_SINGLEKEY 4 /* single key prompt, confirmation */ -#define VISIBLE 0 -#define HIDDEN 1 - #ifdef USE_ALT_BINDINGS /* Enable code implementing additional, mostly emacs-like, line-editing functions. - kw */ #define ENHANCED_LINEEDIT #endif -/* EditFieldData preserves state between calls to LYEdit1 +/* FieldEditor preserves state between calls to LYDoEdit */ - typedef struct _EditFieldData { - - int sx; /* Origin of editfield */ - int sy; - int dspwdth; /* Screen real estate for editing */ - - size_t buffer_used; /* current size of string. */ - size_t buffer_size; /* current buffer-size, excluding nul at end */ - size_t buffer_limit; /* buffer size limit, zero if indefinite */ - char pad; /* Right padding typically ' ' or '_' */ - BOOL hidden; /* Masked password entry flag */ - - BOOL dirty; /* accumulate refresh requests */ - BOOL panon; /* Need horizontal scroll indicator */ - int xpan; /* Horizontal scroll offset */ - int pos; /* Insertion point in string */ - int margin; /* Number of columns look-ahead/look-back */ - int current_modifiers; /* Modifiers for next input lynxkeycode */ + typedef struct { + + int efStartX; /* Origin of edit-field */ + int efStartY; + int efWidth; /* Screen real estate for editing */ + + char *efBuffer; /* the buffer which is being edited */ + size_t efBufInUse; /* current size of string. */ + size_t efBufAlloc; /* current buffer-size, excluding nul at end */ + size_t efBufLimit; /* buffer size limit, zero if indefinite */ + + char efPadChar; /* Right padding typically ' ' or '_' */ + BOOL efIsMasked; /* Masked password entry flag */ + + BOOL efIsDirty; /* accumulate refresh requests */ + BOOL efIsPanned; /* Need horizontal scroll indicator */ + int efDpyStart; /* Horizontal scroll offset */ + int efEditAt; /* Insertion point in string */ + int efPanMargin; /* Number of columns look-ahead/look-back */ + int efInputMods; /* Modifiers for next input lynxkeycode */ #ifdef ENHANCED_LINEEDIT - int mark; /* position of emacs-like mark, or -1-pos to denote + int efEditMark; /* position of emacs-like mark, or -1-pos to denote unactive mark. */ #endif - char *buffer; /* the buffer which is being edited */ - int *offset2col; /* fixups for multibyte characters */ + int *efOffs2Col; /* fixups for multibyte characters */ - } EditFieldData; + } FieldEditor; /* line-edit action encoding */ @@ -311,48 +326,43 @@ extern "C" { extern int map_string_to_keysym(const char *src, int *lec); #endif - extern char *LYElideString(char *str, - int cut_pos); - extern void LYEscapeStartfile(char **buffer); - extern void LYLowerCase(char *buffer); - extern void LYUpperCase(char *buffer); + extern BOOL LYRemapEditBinding(int xlkc, int lec, int select_edi); /* in LYEditmap.c */ extern BOOLEAN LYRemoveNewlines(char *buffer); + extern BOOLEAN LYTrimStartfile(char *buffer); + extern LYExtraKeys LYnameToExtraKeys(const char *name); + extern char *LYElideString(char *str, int cut_pos); extern char *LYReduceBlanks(char *buffer); extern char *LYRemoveBlanks(char *buffer); extern char *LYSkipBlanks(char *buffer); extern char *LYSkipNonBlanks(char *buffer); + extern char *LYTrimNewline(char *buffer); extern const char *LYSkipCBlanks(const char *buffer); extern const char *LYSkipCNonBlanks(const char *buffer); - extern void LYTrimLeading(char *buffer); - extern char *LYTrimNewline(char *buffer); - extern void LYTrimTrailing(char *buffer); - extern void LYTrimAllStartfile(char *buffer); - extern BOOLEAN LYTrimStartfile(char *buffer); - extern void LYFinishEdit(EditFieldData *edit); - extern void LYSetupEdit(EditFieldData *edit, char *old, - size_t buffer_limit, - int display_limit); - extern void LYRefreshEdit(EditFieldData *edit); + extern const char *LYextraKeysToName(LYExtraKeys code); extern int EditBinding(int ch); /* in LYEditmap.c */ - extern BOOL LYRemapEditBinding(int xlkc, - int lec, - int select_edi); /* in LYEditmap.c */ - extern int LYKeyForEditAction(int lec); /* in LYEditmap.c */ + extern int LYDoEdit(FieldEditor * edit, int ch, int action, int maxMessage); extern int LYEditKeyForAction(int lac, int *pmodkey); /* LYEditmap.c */ - extern int LYEdit1(EditFieldData *edit, int ch, - int action, - int maxMessage); - extern void LYCloseCloset(RecallType recall); - extern int LYhandlePopupList(int cur_choice, - int ly, - int lx, + extern int LYKeyForEditAction(int lec); /* in LYEditmap.c */ + extern int LYhandlePopupList(int cur_choice, int ly, int lx, STRING2PTR choices, int width, int i_length, int disabled, int for_mouse); + extern void LYCloseCloset(RecallType recall); + extern void LYEscapeStartfile(char **buffer); + extern void LYFinishEdit(FieldEditor * edit); + extern void LYLowerCase(char *buffer); + extern void LYRefreshEdit(FieldEditor * edit); + extern void LYSetupEdit(FieldEditor * edit, char *old, + size_t buffer_limit, + int display_limit); + extern void LYTrimAllStartfile(char *buffer); + extern void LYTrimLeading(char *buffer); + extern void LYTrimTrailing(char *buffer); + extern void LYUpperCase(char *buffer); - typedef unsigned short LYEditCode; + typedef short LYEditCode; typedef struct { int code; @@ -366,7 +376,7 @@ extern "C" { } LYEditConfig; extern int current_lineedit; - extern const char *LYLineeditNames[]; + extern const char *LYEditorNames[]; extern LYEditConfig LYLineEditors[]; extern const char *LYLineeditHelpURLs[]; @@ -377,13 +387,12 @@ extern "C" { extern int escape_bound; -#define LYLineEdit(e,c,m) LYEdit1(e, c, EditBinding(c) & ~LYE_DF, m) +#define LYLineEdit(e,c,m) LYDoEdit(e, c, EditBinding(c) & ~LYE_DF, m) /* Dummy initializer for LYEditmap.c */ extern int LYEditmapDeclared(void); - extern int LYEditInsert(EditFieldData *edit, - unsigned const char *s, + extern int LYEditInsert(FieldEditor * edit, unsigned const char *s, int len, int map_active, int maxMessage); diff --git a/src/LYUpload.c b/src/LYUpload.c index 1321ece0..b65c0e12 100644 --- a/src/LYUpload.c +++ b/src/LYUpload.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYUpload.c,v 1.38 2013/05/03 10:53:50 tom Exp $ + * $LynxId: LYUpload.c,v 1.39 2013/10/12 14:52:04 tom Exp $ * * Routines to upload files to the local filesystem. * Created by: Rick Mallett, Carleton University @@ -88,7 +88,7 @@ int LYUpload(char *line) _statusline(FILENAME_PROMPT); retry: *tmpbuf = '\0'; - if (LYGetStr(tmpbuf, VISIBLE, sizeof(tmpbuf), NORECALL) < 0) + if (LYGetStr(tmpbuf, FALSE, sizeof(tmpbuf), NORECALL) < 0) goto cancelled; if (*tmpbuf == '\0') diff --git a/src/LYUtils.c b/src/LYUtils.c index ea645abe..856cd41f 100644 --- a/src/LYUtils.c +++ b/src/LYUtils.c @@ -1,5 +1,5 @@ /* - * $LynxId: LYUtils.c,v 1.244 2013/10/10 23:30:08 tom Exp $ + * $LynxId: LYUtils.c,v 1.251 2013/10/13 20:23:07 tom Exp $ */ #include <HTUtils.h> #include <HTTCP.h> @@ -3544,28 +3544,28 @@ int number2arrows(int number) number = END_KEY; break; case '2': - number = DNARROW; + number = DNARROW_KEY; break; case '3': - number = PGDOWN; + number = PGDOWN_KEY; break; case '4': - number = LTARROW; + number = LTARROW_KEY; break; case '5': number = DO_NOTHING; break; case '6': - number = RTARROW; + number = RTARROW_KEY; break; case '7': - number = HOME; + number = HOME_KEY; break; case '8': - number = UPARROW; + number = UPARROW_KEY; break; case '9': - number = PGUP; + number = PGUP_KEY; break; } diff --git a/src/LYrcFile.c b/src/LYrcFile.c index 67126ed0..f34e4fa7 100644 --- a/src/LYrcFile.c +++ b/src/LYrcFile.c @@ -1,4 +1,4 @@ -/* $LynxId: LYrcFile.c,v 1.90 2012/11/14 01:06:06 tom Exp $ */ +/* $LynxId: LYrcFile.c,v 1.91 2013/10/12 13:06:01 tom Exp $ */ #include <HTUtils.h> #include <HTFTP.h> #include <LYUtils.h> @@ -434,7 +434,7 @@ file lists such as FTP directories. The options are:\n\ PARSE_ARY(RC_KBLAYOUT, current_layout, LYKbLayoutNames, NULL), #endif PARSE_ENU(RC_KEYPAD_MODE, keypad_mode, tbl_keypad_mode, NULL), - PARSE_ARY(RC_LINEEDIT_MODE, current_lineedit, LYLineeditNames, N_("\ + PARSE_ARY(RC_LINEEDIT_MODE, current_lineedit, LYEditorNames, N_("\ lineedit_mode specifies the key binding used for inputting strings in\n\ prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n\ the following control characters are used for moving and deleting:\n\ diff --git a/src/makefile.in b/src/makefile.in index a18b6537..3c797293 100644 --- a/src/makefile.in +++ b/src/makefile.in @@ -1,4 +1,4 @@ -# $LynxId: makefile.in,v 1.69 2012/08/12 23:54:35 tom Exp $ +# $LynxId: makefile.in,v 1.70 2013/10/13 22:58:41 tom Exp $ # template-makefile for Lynx src directory SHELL = @CONFIG_SHELL@ @@ -155,7 +155,7 @@ LYUtils$o : $(top_srcdir)/userdefs.h LYmktime$o : $(top_srcdir)/userdefs.h LYrcFile$o : $(top_srcdir)/userdefs.h -LYIcon$o: +LYIcon$o: LYIcon.rc $(WINDRES) -i LYIcon.rc -o LYIcon$o -O coff CHRTR= chrtrans/ diff --git a/src/tidy_tls.c b/src/tidy_tls.c index 7b94ae74..6e671c99 100644 --- a/src/tidy_tls.c +++ b/src/tidy_tls.c @@ -1,5 +1,5 @@ /* - * $LynxId: tidy_tls.c,v 1.15 2013/10/01 20:56:17 tom Exp $ + * $LynxId: tidy_tls.c,v 1.16 2013/10/14 00:13:37 tom Exp $ * Copyright 2008-2011,2013 Thomas E. Dickey * with fix Copyright 2008 by Thomas Viehmann * @@ -219,8 +219,9 @@ SSL_CTX *SSL_CTX_new(SSL_METHOD * method) { SSL_CTX *ctx; - ctx = typeCalloc(SSL_CTX); - ctx->method = method; + if ((ctx = typeCalloc(SSL_CTX)) != 0) { + ctx->method = method; + } return ctx; } @@ -430,6 +431,9 @@ int SSL_connect(SSL * ssl) } store = typeCalloc(X509_STORE_CTX); + if (store == 0) + outofmem(__FILE__, "SSL_connect"); + store->ssl = ssl; store->cert_list = SSL_get_peer_certificate(ssl); |