diff options
author | Thomas E. Dickey <dickey@invisible-island.net> | 2004-05-07 01:13:29 -0400 |
---|---|---|
committer | Thomas E. Dickey <dickey@invisible-island.net> | 2004-05-07 01:13:29 -0400 |
commit | d326f24d169154673717129098ff4554a673f178 (patch) | |
tree | 7229f817b10bcdb82f8df2b6af3a3acc792a762d /src/LYStrings.c | |
parent | 2cd8e80bfe2792ce8999a26b34384598f58e3889 (diff) | |
download | lynx-snapshots-d326f24d169154673717129098ff4554a673f178.tar.gz |
snapshot of project "lynx", label v2-8-6dev_3
Diffstat (limited to 'src/LYStrings.c')
-rw-r--r-- | src/LYStrings.c | 3743 |
1 files changed, 1903 insertions, 1840 deletions
diff --git a/src/LYStrings.c b/src/LYStrings.c index 856a929d..e57259f9 100644 --- a/src/LYStrings.c +++ b/src/LYStrings.c @@ -56,15 +56,15 @@ static HTList *URL_edit_history; static HTList *MAIL_edit_history; /* If you want to add mouse support for some new platform, it's fairly -** simple to do. Once you've determined the X and Y coordinates of -** the mouse event, loop through the elements in the links[] array and -** see if the coordinates fall within a highlighted link area. If so, -** the code must set mouse_link to the index of the chosen link, -** and return a key value that corresponds to LYK_ACTIVATE. The -** LYK_ACTIVATE code in LYMainLoop.c will then check mouse_link -** and activate that link. If the mouse event didn't fall within a -** link, the code should just set mouse_link to -1 and return -1. --AMK -**/ + * simple to do. Once you've determined the X and Y coordinates of + * the mouse event, loop through the elements in the links[] array and + * see if the coordinates fall within a highlighted link area. If so, + * the code must set mouse_link to the index of the chosen link, + * and return a key value that corresponds to LYK_ACTIVATE. The + * LYK_ACTIVATE code in LYMainLoop.c will then check mouse_link + * and activate that link. If the mouse event didn't fall within a + * link, the code should just set mouse_link to -1 and return -1. --AMK + */ /* The number of the link selected w/ the mouse (-1 if none) */ static int mouse_link = -1; @@ -76,7 +76,7 @@ static MEVENT levent; #endif /* Return the value of mouse_link */ -int peek_mouse_levent (void) +int peek_mouse_levent(void) { #if defined(USE_MOUSE) && defined(NCURSES) if (have_levent > 0) { @@ -89,9 +89,10 @@ int peek_mouse_levent (void) } /* Return the value of mouse_link, erasing it */ -int get_mouse_link (void) +int get_mouse_link(void) { int t; + t = mouse_link; mouse_link = -1; if (t < 0) @@ -100,18 +101,16 @@ int get_mouse_link (void) } /* Return the value of mouse_link */ -int peek_mouse_link (void) +int peek_mouse_link(void) { return mouse_link; } - -int fancy_mouse ( - WINDOW * win, - int row, - int * position) +int fancy_mouse(WINDOW * win, int row, + int *position) { int cmd = LYK_DO_NOTHING; + #ifdef USE_MOUSE /*********************************************************************/ @@ -120,12 +119,12 @@ int fancy_mouse ( request_mouse_pos(); if (BUTTON_STATUS(1) - && (MOUSE_X_POS >= getbegx(win) - && (MOUSE_X_POS < (getbegx(win) + getmaxx(win))))) { + && (MOUSE_X_POS >= getbegx(win) + && (MOUSE_X_POS < (getbegx(win) + getmaxx(win))))) { int mypos = MOUSE_Y_POS - getbegy(win); int delta = mypos - row; - if (mypos+1 == getmaxy(win)) { + if (mypos + 1 == getmaxy(win)) { /* At the decorative border: scroll forward */ if (BUTTON_STATUS(1) & BUTTON1_TRIPLE_CLICKED) cmd = LYK_END; @@ -172,19 +171,19 @@ int fancy_mouse ( } #else #if defined(NCURSES) - MEVENT event; + MEVENT event; getmouse(&event); if ((event.bstate & (BUTTON1_CLICKED - | BUTTON1_DOUBLE_CLICKED - | BUTTON1_TRIPLE_CLICKED))) { + | BUTTON1_DOUBLE_CLICKED + | BUTTON1_TRIPLE_CLICKED))) { int mypos = event.y - getbegy(win); int delta = mypos - row; if ((event.x < getbegx(win) || event.x >= (getbegx(win) + getmaxx(win))) && !(event.bstate & (BUTTON_ALT | BUTTON_SHIFT | BUTTON_CTRL))) return LYK_QUIT; /* User clicked outside, wants to quit? */ - if (mypos+1 == getmaxy(win)) { + if (mypos + 1 == getmaxy(win)) { /* At the decorative border: scroll forward */ if (event.bstate & BUTTON1_TRIPLE_CLICKED) cmd = LYK_END; @@ -194,7 +193,7 @@ int fancy_mouse ( cmd = LYK_NEXT_LINK; } else if (mypos >= getmaxy(win)) { if (event.bstate & (BUTTON1_DOUBLE_CLICKED - | BUTTON1_TRIPLE_CLICKED)) + | BUTTON1_TRIPLE_CLICKED)) cmd = LYK_END; else cmd = LYK_NEXT_PAGE; @@ -208,7 +207,7 @@ int fancy_mouse ( cmd = LYK_PREV_LINK; } else if (mypos < 0) { if (event.bstate & (BUTTON1_DOUBLE_CLICKED - | BUTTON1_TRIPLE_CLICKED)) + | BUTTON1_TRIPLE_CLICKED)) cmd = LYK_HOME; else cmd = LYK_PREV_PAGE; @@ -247,15 +246,14 @@ int fancy_mouse ( #endif /* PDCURSES */ /************************************************************************/ -#endif /* USE_MOUSE */ +#endif /* USE_MOUSE */ return cmd; } /* * Manage the collection of edit-histories */ -static HTList *whichRecall ( - RecallType recall) +static HTList *whichRecall(RecallType recall) { HTList **list; @@ -277,7 +275,7 @@ static HTList *whichRecall ( /* * Remove the oldest item in the closet */ -static void LYRemoveFromCloset (HTList * list) +static void LYRemoveFromCloset(HTList *list) { char *data = HTList_removeFirstObject(list); @@ -285,11 +283,11 @@ static void LYRemoveFromCloset (HTList * list) FREE(data); } -void LYCloseCloset (RecallType recall) +void LYCloseCloset(RecallType recall) { HTList *list = whichRecall(recall); - while (!HTList_isEmpty(list) ) { + while (!HTList_isEmpty(list)) { LYRemoveFromCloset(list); } HTList_delete(list); /* should already be empty */ @@ -300,7 +298,7 @@ void LYCloseCloset (RecallType recall) * match, i.e., the newest since we search from the top. This should be made * more intelligent, but works for now. */ -static char * LYFindInCloset (RecallType recall, char* base) +static char *LYFindInCloset(RecallType recall, char *base) { HTList *list = whichRecall(recall); char *data; @@ -309,13 +307,13 @@ static char * LYFindInCloset (RecallType recall, char* base) while (!HTList_isEmpty(list)) { data = HTList_nextObject(list); if (!strncmp(base, data, len)) - return(data); + return (data); } - return(0); + return (0); } -static void LYAddToCloset (RecallType recall, char* str) +static void LYAddToCloset(RecallType recall, char *str) { HTList *list = whichRecall(recall); char *data = NULL; @@ -327,26 +325,25 @@ static void LYAddToCloset (RecallType recall, char* str) } #ifdef USE_MOUSE -static int XYdist ( - int x1, - int y1, - int x2, - int y2, - int dx2) +static int XYdist(int x1, + int y1, + int x2, + int y2, + int dx2) { int xerr = 3 * (x2 - x1), yerr = 9 * (y2 - y1); if (xerr < 0) - xerr = 3 * (x1 - x2 - dx2) + 1; /* pos after string not really in it */ + xerr = 3 * (x1 - x2 - dx2) + 1; /* pos after string not really in it */ if (xerr < 0) xerr = 0; if (yerr < 0) yerr = -yerr; if (!yerr) /* same line is good */ - return (xerr > 0) ? (xerr*2 - 1) : 0; - if (xerr < 9 && yerr) /* x-dist of 3 cell better than y-dist of 1 cell */ + return (xerr > 0) ? (xerr * 2 - 1) : 0; + if (xerr < 9 && yerr) /* x-dist of 3 cell better than y-dist of 1 cell */ yerr += (9 - xerr); - return 2 * xerr + yerr; /* Subjective factor; ratio -> approx. 6 / 9 */ + return 2 * xerr + yerr; /* Subjective factor; ratio -> approx. 6 / 9 */ /* old: (IZ 1999-07-30) 3 2 2 2 1 1 1 XX XX XX XX XX 0 1 1 1 2 2 2 3 3 @@ -363,30 +360,30 @@ now: (kw 1999-10-23) } /* Given X and Y coordinates of a mouse event, set mouse_link to the -** index of the corresponding hyperlink, or set mouse_link to -1 if no -** link matches the event. Returns -1 if no link matched the click, -** or a keycode that must be returned from LYgetch() to activate the -** link. -**/ - -static int set_clicked_link ( - int x, - int y, - int code, - int clicks) + * index of the corresponding hyperlink, or set mouse_link to -1 if no + * link matches the event. Returns -1 if no link matched the click, + * or a keycode that must be returned from LYgetch() to activate the + * link. + */ + +static int set_clicked_link(int x, + int y, + int code, + int clicks) { int left = 6; - int right = LYcols-6; + int right = LYcols - 6; + /* yes, I am assuming that my screen will be a certain width. */ int i; int c = -1; - if (y == (LYlines-1) || y == 0) { /* First or last row */ + if (y == (LYlines - 1) || y == 0) { /* First or last row */ /* XXXX In fact # is not always at x==0? KANJI_CODE_OVERRIDE? */ int toolbar = (y == 0 && HText_hasToolbar(HTMainText)); mouse_link = -2; - if (x == 0 && toolbar) /* On '#' */ + if (x == 0 && toolbar) /* On '#' */ c = LAC_TO_LKC0(LYK_TOOLBAR); #if defined(CAN_CUT_AND_PASTE) && defined(USE_COLOR_STYLE) else if (y == 0 && x == LYcols - 1 && s_hot_paste != NOSTYLE) @@ -394,39 +391,39 @@ static int set_clicked_link ( #endif else if (clicks > 1) { if (x < left + toolbar) - c = (code==FOR_PROMPT && y) + c = (code == FOR_PROMPT && y) ? HOME : LAC_TO_LKC0(LYK_MAIN_MENU); else if (x > right) - c = (code==FOR_PROMPT && y) + c = (code == FOR_PROMPT && y) ? END_KEY : LAC_TO_LKC0(LYK_VLINKS); - else if (y) /* Last row */ + else if (y) /* Last row */ c = LAC_TO_LKC0(LYK_END); - else /* First row */ + else /* First row */ c = LAC_TO_LKC0(LYK_HOME); } else { if (x < left + toolbar) - c = (code==FOR_PROMPT && y) + c = (code == FOR_PROMPT && y) ? LTARROW : ( #ifdef USE_COLOR_STYLE - (s_forw_backw != NOSTYLE && x - toolbar >= 3) - ? LAC_TO_LKC0(LYK_NEXT_DOC) - : LAC_TO_LKC0(LYK_PREV_DOC) + (s_forw_backw != NOSTYLE && x - toolbar >= 3) + ? LAC_TO_LKC0(LYK_NEXT_DOC) + : LAC_TO_LKC0(LYK_PREV_DOC) #else - LAC_TO_LKC0(LYK_NEXT_DOC) + LAC_TO_LKC0(LYK_NEXT_DOC) #endif - ); + ); else if (x > right) - c = (code==FOR_PROMPT && y) + c = (code == FOR_PROMPT && y) ? RTARROW : LAC_TO_LKC0(LYK_HISTORY); - else if (y) /* Last row */ + else if (y) /* Last row */ c = LAC_TO_LKC0(LYK_NEXT_PAGE); - else /* First row */ + else /* First row */ c = LAC_TO_LKC0(LYK_PREV_PAGE); } #ifdef USE_SCROLLBAR } else if (x == LYcols - 1 && LYShowScrollbar && LYsb_begin >= 0) { - int h = display_lines - 2*(LYsb_arrow != 0); + int h = display_lines - 2 * (LYsb_arrow != 0); mouse_link = -2; y -= 1 + (LYsb_arrow != 0); @@ -436,12 +433,12 @@ static int set_clicked_link ( return LAC_TO_LKC0(LYK_DOWN_TWO); if (clicks >= 2) { - double frac = (1. * y)/(h - 1); + double frac = (1. * y) / (h - 1); int l = HText_getNumOfLines() + 1; /* NOL() off by one? */ l -= display_lines; if (l > 0) - LYSetNewline((int)(frac * l + 1 + 0.5)); + LYSetNewline((int) (frac * l + 1 + 0.5)); return LYReverseKeymap(LYK_DO_NOTHING); } @@ -449,11 +446,10 @@ static int set_clicked_link ( return LAC_TO_LKC0(LYK_PREV_PAGE); if (y >= LYsb_end) return LAC_TO_LKC0(LYK_NEXT_PAGE); - mouse_link = -1; /* No action in edit fields */ + mouse_link = -1; /* No action in edit fields */ #endif } else { - int mouse_err = 29, /* subjctv-dist better than this for approx stuff */ - cur_err; + int mouse_err = 29, /* subjctv-dist better than this for approx stuff */ cur_err; /* Loop over the links and see if we can get a match */ for (i = 0; i < nlinks; i++) { @@ -474,12 +470,13 @@ static int set_clicked_link ( cur_err = XYdist(x, y, links[i].lx, links[i].ly, len); /* Check the second line */ while (cur_err > 0 - && (text = LYGetHiliteStr(i, ++count)) != NULL) { + && (text = LYGetHiliteStr(i, ++count)) != NULL) { /* Note that there is at most one hightext if is_text */ int cur_err_2 = XYdist(x, y, LYGetHilitePos(i, count), links[i].ly + count, strlen(text)); + cur_err = HTMIN(cur_err, cur_err_2); } if (cur_err > 0 && is_text) @@ -488,13 +485,13 @@ static int set_clicked_link ( if (cur_err == 0) { int cury, curx; - LYGetYX(cury,curx); + LYGetYX(cury, curx); /* double-click, if we care: submit text submit fields. - kw */ if (clicks > 1 && is_text && links[i].l_form->type == F_TEXT_SUBMIT_TYPE) { if (code != FOR_INPUT - /* submit current input field directly */ + /* submit current input field directly */ || !(cury == y && (curx >= lx) && ((curx - lx) <= len))) { c = LAC_TO_LKC0(LYK_SUBMIT); mouse_link = i; @@ -506,7 +503,7 @@ static int set_clicked_link ( break; } if (code != FOR_INPUT - /* Do not pick up the current input field */ + /* Do not pick up the current input field */ || !((cury == y && (curx >= lx) && ((curx - lx) <= len)))) { if (is_text) { have_levent = 1; @@ -537,19 +534,18 @@ static int set_clicked_link ( c = LAC_TO_LKC0(LYK_ACTIVATE); } else if (mouse_err >= 0) c = LAC_TO_LKC0(LYK_CHANGE_LINK); - } - else { - if (2*y > LYlines){ /* Bottom Half of the screen */ - if (4*y < 3*LYlines){ - c = LAC_TO_LKC0(LYK_DOWN_TWO); /* Third quarter */ - } else - c = LAC_TO_LKC0(LYK_DOWN_HALF); /* Fourth quarter */ - } else { /* Upper Half of the screen */ - if (4*y < LYlines){ - c = LAC_TO_LKC0(LYK_UP_HALF); /* First quarter */ - } else - c = LAC_TO_LKC0(LYK_UP_TWO); /* Second quarter */ - } + } else { + if (2 * y > LYlines) { /* Bottom Half of the screen */ + if (4 * y < 3 * LYlines) { + c = LAC_TO_LKC0(LYK_DOWN_TWO); /* Third quarter */ + } else + c = LAC_TO_LKC0(LYK_DOWN_HALF); /* Fourth quarter */ + } else { /* Upper Half of the screen */ + if (4 * y < LYlines) { + c = LAC_TO_LKC0(LYK_UP_HALF); /* First quarter */ + } else + c = LAC_TO_LKC0(LYK_UP_TWO); /* Second quarter */ + } } } return c; @@ -557,13 +553,12 @@ static int set_clicked_link ( #endif /* USE_MOUSE */ /* - * LYstrncpy() terminates strings with a null byte. - * Writes a null byte into the n+1 byte of dst. + * LYstrncpy() terminates strings with a null byte. Writes a null byte into + * the n+1 byte of dst. */ -char *LYstrncpy ( - char * dst, - const char * src, - int n) +char *LYstrncpy(char *dst, + const char *src, + int n) { char *val; int len; @@ -577,9 +572,9 @@ char *LYstrncpy ( val = strncpy(dst, src, n); if (len < n) - *(dst+len) = '\0'; + *(dst + len) = '\0'; else - *(dst+n) = '\0'; + *(dst + n) = '\0'; return val; } @@ -587,18 +582,16 @@ char *LYstrncpy ( #define IS_UTF_EXTRA(ch) (utf_flag && (UCH(ch)&0xc0) == 0x80) /* - * LYmbcsstrncpy() terminates strings with a null byte. - * It takes account of multibyte characters. - * The src 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 + * LYmbcsstrncpy() terminates strings with a null byte. It takes account of + * multibyte characters. The src 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, - int n_bytes, - int n_glyphs, - BOOL utf_flag) +char *LYmbcsstrncpy(char *dst, + const char *src, + int n_bytes, + int n_glyphs, + BOOL utf_flag) { char *val = dst; int i_bytes = 0, i_glyphs = 0; @@ -623,14 +616,13 @@ char * LYmbcsstrncpy ( } /* - * LYmbcs_skip_glyphs() skips a given number of display positions - * in a string and returns the resulting pointer. It takes account - * of UTF-8 encoded characters. - KW + * LYmbcs_skip_glyphs() skips a given number of display positions in a string + * and returns the resulting pointer. It takes account of UTF-8 encoded + * characters. - KW */ -char * LYmbcs_skip_glyphs ( - char * data, - int n_glyphs, - BOOL utf_flag) +char *LYmbcs_skip_glyphs(char *data, + int n_glyphs, + BOOL utf_flag) { int i_glyphs = 0; @@ -654,23 +646,21 @@ char * LYmbcs_skip_glyphs ( } /* - * LYmbcsstrlen() returns the printable length of a string - * that might contain IsSpecial or multibyte (CJK or UTF8) - * characters. - FM - * Counts glyph cells if count_gcells is set. (Full-width - * characters in CJK mode count as two.) - * Counts character glyphs if count_gcells is unset. (Full- - * width characters in CJK mode count as one.) - kw + * LYmbcsstrlen() returns the printable length of a string that might contain + * IsSpecial or multibyte (CJK or UTF8) characters. - FM + * + * Counts glyph cells if count_gcells is set. (Full-width characters in CJK + * mode count as two.) Counts character glyphs if count_gcells is unset. + * (Full- width characters in CJK mode count as one.) - kw */ -int LYmbcsstrlen ( - char * str, - BOOL utf_flag, - BOOL count_gcells) +int LYmbcsstrlen(char *str, + BOOL utf_flag, + BOOL count_gcells) { int i, j, len = 0; if (!non_empty(str)) - return(len); + return (len); for (i = 0; str[i] != '\0'; i++) { if (IsSpecialAttrChar(str[i])) { @@ -689,12 +679,12 @@ int LYmbcsstrlen ( } } else if (!utf_flag && HTCJK != NOCJK && !count_gcells && is8bits(str[i]) && str[(i + 1)] != '\0' && - !IsSpecialAttrChar(str[(i + 1)])) { + !IsSpecialAttrChar(str[(i + 1)])) { i++; } } - return(len); + return (len); } #undef GetChar @@ -727,21 +717,20 @@ int LYmbcsstrlen ( /* PDCurses sends back key-modifiers that we don't use, but would waste time * upon, e.g., repainting the status line */ -static int myGetChar (void) +static int myGetChar(void) { int c; BOOL done = FALSE; do { - switch (c = wgetch(LYwin)) - { - case KEY_SHIFT_L : - case KEY_SHIFT_R : - case KEY_CONTROL_L : - case KEY_CONTROL_R : - case KEY_ALT_L : - case KEY_ALT_R : - case KEY_RESIZE : + switch (c = wgetch(LYwin)) { + case KEY_SHIFT_L: + case KEY_SHIFT_R: + case KEY_CONTROL_L: + case KEY_CONTROL_R: + case KEY_ALT_L: + case KEY_ALT_R: + case KEY_RESIZE: break; default: done = TRUE; @@ -768,19 +757,18 @@ static int myGetChar (void) #ifndef USE_GETCHAR #define USE_GETCHAR #endif /* !USE_GETCHAR */ -#define GetChar() getchar() /* used to be "getc(stdin)" and "getch()" */ +#define GetChar() getchar() /* used to be "getc(stdin)" and "getch()" */ #endif /* HAVE_KEYPAD */ #endif /* !defined(GetChar) */ #if defined(USE_SLANG) && defined(USE_MOUSE) -static int sl_parse_mouse_event (int * x, int * y, int * button) +static int sl_parse_mouse_event(int *x, int *y, int *button) { /* "ESC [ M" has already been processed. There more characters are * expected: BUTTON X Y */ - *button = SLang_getkey (); - switch (*button) - { + *button = SLang_getkey(); + switch (*button) { case 040: /* left button */ case 041: /* middle button */ case 042: /* right button */ @@ -788,57 +776,53 @@ static int sl_parse_mouse_event (int * x, int * y, int * button) break; default: /* Hmmm.... */ - SLang_flush_input (); + SLang_flush_input(); return -1; } - *x = SLang_getkey (); + *x = SLang_getkey(); if (*x == CH_ESC) /* Undo 7-bit replace for large x - kw */ - *x = SLang_getkey () + 64 - 33; + *x = SLang_getkey() + 64 - 33; else *x -= 33; - *y = SLang_getkey (); + *y = SLang_getkey(); if (*y == CH_ESC) /* Undo 7-bit replace for large y - kw */ - *y = SLang_getkey () + 64 - 33; + *y = SLang_getkey() + 64 - 33; else *y -= 33; return 0; } -static int sl_read_mouse_event ( - int code) +static int sl_read_mouse_event(int code) { - int mouse_x, mouse_y, button; - - mouse_link = -1; - if (-1 != sl_parse_mouse_event (&mouse_x, &mouse_y, &button)) - { - if (button == 0) /* left */ - return set_clicked_link (mouse_x, mouse_y, FOR_PANEL, 1); - - if (button == 1) /* middle */ - return LYReverseKeymap (LYK_VIEW_BOOKMARK); - - if (button == 2) /* right */ - { - /* Right button: go back to prev document. - * The problem is that we need to determine - * what to return to achieve this. - */ - return LYReverseKeymap (LYK_PREV_DOC); - } - } - if (code == FOR_INPUT || code == FOR_PROMPT) - return DO_NOTHING; - else - return -1; -} -#endif /* USE_SLANG and USE_MOUSE */ + int mouse_x, mouse_y, button; + + mouse_link = -1; + if (-1 != sl_parse_mouse_event(&mouse_x, &mouse_y, &button)) { + if (button == 0) /* left */ + return set_clicked_link(mouse_x, mouse_y, FOR_PANEL, 1); + if (button == 1) /* middle */ + return LYReverseKeymap(LYK_VIEW_BOOKMARK); + + if (button == 2) /* right */ + { + /* Right button: go back to prev document. + * The problem is that we need to determine + * what to return to achieve this. + */ + return LYReverseKeymap(LYK_PREV_DOC); + } + } + if (code == FOR_INPUT || code == FOR_PROMPT) + return DO_NOTHING; + else + return -1; +} +#endif /* USE_SLANG and USE_MOUSE */ static BOOLEAN csi_is_csi = TRUE; -void ena_csi ( - BOOLEAN flag) +void ena_csi(BOOLEAN flag) { csi_is_csi = flag; } @@ -851,6 +835,7 @@ void ena_csi ( #define expand_substring(dst, first, last, final) \ (SLexpand_escaped_string(dst, (char *)first, (char *)last), 1) static SLKeyMap_List_Type *Keymap_List; + /* This value should be larger than anything in LYStrings.h */ #define MOUSE_KEYSYM 0x0400 #endif @@ -877,14 +862,11 @@ static SLKeyMap_List_Type *Keymap_List; #define EXTERN_KEY(string,string1,lynx,curses) {string,curses} #endif - -typedef struct -{ - char *string; - int value; -} -Keysym_String_List; - +typedef struct { + char *string; + int value; +} Keysym_String_List; +/* *INDENT-OFF* */ static Keysym_String_List Keysym_Strings [] = { INTERN_KEY( "UPARROW", UPARROW, KEY_UP ), @@ -904,13 +886,14 @@ static Keysym_String_List Keysym_Strings [] = INTERN_KEY( "DO_NOTHING", DO_NOTHING, DO_NOTHING|LKC_ISLKC ), INTERN_KEY( NULL, -1, ERR ) }; +/* *INDENT-ON* */ #ifdef NCURSES_VERSION /* * Ncurses stores the termcap/terminfo names in arrays sorted to match the * array of strings in the TERMTYPE struct. */ -static int lookup_tiname (char *name, NCURSES_CONST char *const *names) +static int lookup_tiname(char *name, NCURSES_CONST char *const *names) { int code; @@ -920,7 +903,7 @@ static int lookup_tiname (char *name, NCURSES_CONST char *const *names) return -1; } -static const char *expand_tiname (const char *first, size_t len, char **result, char *final) +static const char *expand_tiname(const char *first, size_t len, char **result, char *final) { char name[BUFSIZ]; int code; @@ -928,7 +911,7 @@ static const char *expand_tiname (const char *first, size_t len, char **result, strncpy(name, first, len); name[len] = '\0'; if ((code = lookup_tiname(name, strnames)) >= 0 - || (code = lookup_tiname(name, strfnames)) >= 0) { + || (code = lookup_tiname(name, strfnames)) >= 0) { if (cur_term->type.Strings[code] != 0) { LYstrncpy(*result, cur_term->type.Strings[code], final - *result); (*result) += strlen(*result); @@ -937,7 +920,7 @@ static const char *expand_tiname (const char *first, size_t len, char **result, return first + len; } -static const char *expand_tichar (const char *first, char **result, char *final) +static const char *expand_tichar(const char *first, char **result, char *final) { int ch; int limit = 0; @@ -946,16 +929,39 @@ static const char *expand_tichar (const char *first, char **result, char *final) char *name = 0; switch (ch = *first++) { - case 'E': case 'e': value = 27; break; - case 'a': name = "bel"; break; - case 'b': value = '\b'; break; - case 'f': value = '\f'; break; - case 'n': value = '\n'; break; - case 'r': value = '\r'; break; - case 't': value = '\t'; break; - case 'v': value = '\v'; break; - case 'd': radix = 10; limit = 3; break; - case 'x': radix = 16; limit = 2; break; + case 'E': + case 'e': + value = 27; + break; + case 'a': + name = "bel"; + break; + case 'b': + value = '\b'; + break; + case 'f': + value = '\f'; + break; + case 'n': + value = '\n'; + break; + case 'r': + value = '\r'; + break; + case 't': + value = '\t'; + break; + case 'v': + value = '\v'; + break; + case 'd': + radix = 10; + limit = 3; + break; + case 'x': + radix = 16; + limit = 2; + break; default: if (isdigit(ch)) { radix = 8; @@ -970,6 +976,7 @@ static const char *expand_tichar (const char *first, char **result, char *final) if (radix != 0) { char *last = 0; char tmp[80]; + LYstrncpy(tmp, first, limit); value = strtol(tmp, &last, radix); if (last != 0 && last != tmp) @@ -986,7 +993,7 @@ static const char *expand_tichar (const char *first, char **result, char *final) return first; } -static int expand_substring (char* dst, const char* first, const char* last, char *final) +static int expand_substring(char *dst, const char *first, const char *last, char *final) { int ch; @@ -1000,14 +1007,15 @@ static int expand_substring (char* dst, const char* first, const char* last, cha if (ch == LPAREN) { const char *s = strchr(first, RPAREN); char *was = dst; + if (s == 0) s = first + strlen(first); - first = expand_tiname(first, s-first, &dst, final); + first = expand_tiname(first, s - first, &dst, final); if (dst == was) return 0; if (*first) first++; - } else if (ch == '?') { /* ASCII delete? */ + } else if (ch == '?') { /* ASCII delete? */ *dst++ = 127; } else if ((ch & 0x3f) < 0x20) { /* ASCII control char? */ *dst++ = (ch & 0x1f); @@ -1016,7 +1024,7 @@ static int expand_substring (char* dst, const char* first, const char* last, cha first--; /* not legal... */ } break; - case 0: /* convert nulls for terminfo */ + case 0: /* convert nulls for terminfo */ ch = 0200; /* FALLTHRU */ default: @@ -1029,7 +1037,7 @@ static int expand_substring (char* dst, const char* first, const char* last, cha } #endif -static void unescaped_char (const char* parse, int* keysym) +static void unescaped_char(const char *parse, int *keysym) { size_t len = strlen(parse); char buf[BUFSIZ]; @@ -1041,12 +1049,13 @@ static void unescaped_char (const char* parse, int* keysym) } } -static BOOLEAN unescape_string (char* src, char * dst, char * final) +static BOOLEAN unescape_string(char *src, char *dst, char *final) { BOOLEAN ok = FALSE; if (*src == SQUOTE) { int keysym; + unescaped_char(src, &keysym); if (keysym >= 0) { dst[0] = keysym; @@ -1058,19 +1067,20 @@ static BOOLEAN unescape_string (char* src, char * dst, char * final) return ok; } -int map_string_to_keysym (const char* str, int* keysym) +int map_string_to_keysym(const char *str, int *keysym) { int modifier = 0; + *keysym = -1; if (strncasecomp(str, "LAC:", 4) == 0) { - char *other = strchr(str+4, ':'); + char *other = strchr(str + 4, ':'); if (other) { - int othersym = lecname_to_lec(other + 1); - char buf[BUFSIZ]; + int othersym = lecname_to_lec(other + 1); + char buf[BUFSIZ]; - if (othersym >= 0 && other - str - 4 < BUFSIZ ) { + if (othersym >= 0 && other - str - 4 < BUFSIZ) { strncpy(buf, str + 4, other - str - 4); buf[other - str - 4] = '\0'; *keysym = lacname_to_lac(buf); @@ -1078,7 +1088,7 @@ int map_string_to_keysym (const char* str, int* keysym) *keysym = LACLEC_TO_LKC0(*keysym, othersym); return (*keysym); } - } + } } *keysym = lacname_to_lac(str + 4); if (*keysym >= 0) { @@ -1091,20 +1101,25 @@ int map_string_to_keysym (const char* str, int* keysym) modifier = LKC_MOD2; if (*str) { size_t len = strlen(str); + if (len == 1) - return (*keysym = (UCH(str[0]))|modifier); + return (*keysym = (UCH(str[0])) | modifier); else if (len == 2 && str[0] == '^' && (isalpha(UCH(str[1])) || (TOASCII(str[1]) >= '@' && TOASCII(str[1]) <= '_'))) - return (*keysym = FROMASCII(UCH(str[1]&0x1f))|modifier); + return (*keysym = FROMASCII(UCH(str[1] & 0x1f)) | modifier); else if (len == 2 && str[0] == '^' && str[1] == '?') - return (*keysym = CH_DEL|modifier); + return (*keysym = CH_DEL | modifier); if (*str == '^' || *str == '\\') { char buf[BUFSIZ]; - expand_substring(buf, str, str + HTMIN(len, 28), buf + sizeof(buf) - 1); + + expand_substring(buf, + str, + str + HTMIN(len, 28), + buf + sizeof(buf) - 1); if (strlen(buf) <= 1) - return (*keysym = (UCH(buf[0]))|modifier); + return (*keysym = (UCH(buf[0])) | modifier); } } } @@ -1113,11 +1128,12 @@ int map_string_to_keysym (const char* str, int* keysym) } else if (isdigit(UCH(*str))) { char *tmp; long value = strtol(str, &tmp, 0); + if (!isalnum(UCH(*tmp))) { *keysym = value; #ifndef USE_SLANG if (*keysym > 255) - *keysym |= LKC_ISLKC; /* caller should remove this flag - kw */ + *keysym |= LKC_ISLKC; /* caller should remove this flag - kw */ #endif } } else { @@ -1125,7 +1141,7 @@ int map_string_to_keysym (const char* str, int* keysym) k = Keysym_Strings; while (k->string != NULL) { - if (0 == strcmp (k->string, str)) { + if (0 == strcmp(k->string, str)) { *keysym = k->value; break; } @@ -1142,7 +1158,7 @@ int map_string_to_keysym (const char* str, int* keysym) * Starting at a nonblank character, skip over a token, counting quoted and * escaped characters. */ -static char *skip_keysym (char * parse) +static char *skip_keysym(char *parse) { int quoted = 0; int escaped = 0; @@ -1172,7 +1188,7 @@ static char *skip_keysym (char * parse) * The first token is the string to define, the second is the name (of the * keysym) to define it to. */ -static int setkey_cmd (char *parse) +static int setkey_cmd(char *parse) { char *s, *t; int keysym; @@ -1189,10 +1205,10 @@ static int setkey_cmd (char *parse) } if (t != s) *t = '\0'; - if (map_string_to_keysym (s, &keysym) >= 0) { + if (map_string_to_keysym(s, &keysym) >= 0) { if (!unescape_string(parse, buf, buf + sizeof(buf) - 1)) { CTRACE((tfp, "KEYMAP(SKIP) could unescape key\n")); - return 0; /* Trace the failure and continue. */ + return 0; /* Trace the failure and continue. */ } if (LYTraceLogFP == 0) { CTRACE((tfp, "KEYMAP(DEF) keysym=%#x\n", keysym)); @@ -1200,24 +1216,22 @@ static int setkey_cmd (char *parse) CTRACE((tfp, "KEYMAP(DEF) keysym=%#x, seq='%s'\n", keysym, buf)); } return define_key(buf, keysym); - } - else { + } else { CTRACE((tfp, "KEYMAP(SKIP) could not map to keysym\n")); } - } - else { + } else { CTRACE((tfp, "KEYMAP(SKIP) junk after key description: '%s'\n", s)); } - } - else { + } else { CTRACE((tfp, "KEYMAP(SKIP) no key description\n")); } return -1; } -static int unsetkey_cmd (char *parse) +static int unsetkey_cmd(char *parse) { char *s = skip_keysym(parse); + if (s != parse) { *s = '\0'; #ifdef NCURSES_VERSION @@ -1227,8 +1241,9 @@ static int unsetkey_cmd (char *parse) */ { int keysym; - if (map_string_to_keysym (parse, &keysym) >= 0) - define_key((char *)0, keysym); + + if (map_string_to_keysym(parse, &keysym) >= 0) + define_key((char *) 0, keysym); } #endif #ifdef USE_SLANG @@ -1236,8 +1251,9 @@ static int unsetkey_cmd (char *parse) * with a keysym (the reverse of what we normally want, but may * occasionally find useful). */ - SLang_undefine_key (parse, Keymap_List); - if (SLang_Error) return -1; + SLang_undefine_key(parse, Keymap_List); + if (SLang_Error) + return -1; #endif } return 0; @@ -1249,15 +1265,17 @@ static int unsetkey_cmd (char *parse) #define FNAME_LYNX_KEYMAPS ".lynx-keymaps" #endif /* FNAMES_8_3 */ -static int read_keymap_file (void) +static int read_keymap_file(void) { + /* *INDENT-OFF* */ static struct { const char *name; int (*func) (char *s); } table[] = { - {"setkey", setkey_cmd }, - {"unsetkey", unsetkey_cmd }, + { "setkey", setkey_cmd }, + { "unsetkey", unsetkey_cmd }, }; + /* *INDENT-ON* */ char *line = NULL; FILE *fp; @@ -1267,7 +1285,7 @@ static int read_keymap_file (void) LYAddPathToHome(file, sizeof(file), FNAME_LYNX_KEYMAPS); - if ((fp = fopen (file, "r")) == 0) + if ((fp = fopen(file, "r")) == 0) return 0; linenum = 0; @@ -1282,18 +1300,19 @@ static int read_keymap_file (void) for (n = 0; n < TABLESIZE(table); n++) { size_t len = strlen(table[n].name); - if ( strlen(s) > len && !strncmp(s, table[n].name, len) - && (*(table[n].func))(LYSkipBlanks(s+len)) < 0 ) - fprintf (stderr, FAILED_READING_KEYMAP, linenum, file); + if (strlen(s) > len && !strncmp(s, table[n].name, len) + && (*(table[n].func)) (LYSkipBlanks(s + len)) < 0) + fprintf(stderr, FAILED_READING_KEYMAP, linenum, file); } } FREE(line); - LYCloseInput (fp); + LYCloseInput(fp); return 0; } -static void setup_vtXXX_keymap (void) +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 ), @@ -1345,12 +1364,15 @@ static void setup_vtXXX_keymap (void) INTERN_KEY( "^(F6)", DO_KEY, KEY_F(16) ), #endif /* SLANG && !VMS */ }; + /* *INDENT-ON* */ + size_t n; + for (n = 0; n < TABLESIZE(table); n++) define_key(table[n].string, table[n].value); } -int lynx_initialize_keymaps (void) +int lynx_initialize_keymaps(void) { #ifdef USE_SLANG int i; @@ -1361,35 +1383,34 @@ int lynx_initialize_keymaps (void) */ SLtt_get_terminfo(); - if (NULL == (Keymap_List = SLang_create_keymap ("Lynx", NULL))) + if (NULL == (Keymap_List = SLang_create_keymap("Lynx", NULL))) return -1; keybuf[1] = 0; - for (i = 1; i < 256; i++) - { + for (i = 1; i < 256; i++) { keybuf[0] = (char) i; - define_key (keybuf, i); + define_key(keybuf, i); } setup_vtXXX_keymap(); - define_key ("\033[M", MOUSE_KEYSYM); + define_key("\033[M", MOUSE_KEYSYM); if (SLang_Error) - SLang_exit_error ("Unable to initialize keymaps"); + SLang_exit_error("Unable to initialize keymaps"); #else setup_vtXXX_keymap(); #endif return read_keymap_file(); } -#endif /* USE_KEYMAPS */ - +#endif /* USE_KEYMAPS */ #if defined(USE_MOUSE) && (defined(NCURSES)) -static int LYmouse_menu (int x, int y, int atlink, int code) +static int LYmouse_menu(int x, int y, int atlink, int code) { #define ENT_ONLY_DOC 1 #define ENT_ONLY_LINK 2 + /* *INDENT-OFF* */ static const struct { char *txt; int action; @@ -1422,6 +1443,8 @@ static int LYmouse_menu (int x, int y, int atlink, int code) {"Activate this link", LYK_SUBMIT, ENT_ONLY_LINK}, {"Download", LYK_DOWNLOAD, ENT_ONLY_LINK} }; + /* *INDENT-ON* */ + #define TOTAL_MENUENTRIES TABLESIZE(possible_entries) char *choices[TOTAL_MENUENTRIES + 1]; int actions[TOTAL_MENUENTRIES]; @@ -1440,15 +1463,14 @@ static int LYmouse_menu (int x, int y, int atlink, int code) /* Somehow the mouse is over the number instead of being over the name, so we decrease x. */ - c = LYChoosePopup((atlink ? 2 : 10) - 1, y, (x > 5 ? x-5 : 1), - choices, c1, FALSE, TRUE); + c = LYChoosePopup((atlink ? 2 : 10) - 1, y, (x > 5 ? x - 5 : 1), + choices, c1, FALSE, TRUE); /* - * LYhandlePopupList() wasn't really meant to be used - * outside of old-style Options menu processing. One result of - * mis-using it here is that we have to deal with side-effects - * regarding SIGINT signal handler and the term_options global - * variable. - kw + * LYhandlePopupList() wasn't really meant to be used outside of old-style + * Options menu processing. One result of mis-using it here is that we + * have to deal with side-effects regarding SIGINT signal handler and the + * term_options global variable. - kw */ if (term_options) { retlac = LYK_DO_NOTHING; @@ -1459,32 +1481,32 @@ static int LYmouse_menu (int x, int y, int atlink, int code) if (code == FOR_INPUT && mouse_link == -1) { switch (retlac) { - case LYK_ABORT: - retlac = LYK_QUIT; /* a bit softer... */ - /* fall through */ - case LYK_MAIN_MENU: - case LYK_PREV_DOC: - case LYK_HOME: - case LYK_PREV_PAGE: - case LYK_UP_HALF: - case LYK_UP_TWO: - case LYK_HISTORY: - case LYK_HELP: + case LYK_ABORT: + retlac = LYK_QUIT; /* a bit softer... */ + /* fall through */ + case LYK_MAIN_MENU: + case LYK_PREV_DOC: + case LYK_HOME: + case LYK_PREV_PAGE: + case LYK_UP_HALF: + case LYK_UP_TWO: + case LYK_HISTORY: + case LYK_HELP: /* case LYK_REFRESH:*/ - case LYK_RELOAD: - case LYK_ECGOTO: - case LYK_INFO: - case LYK_WHEREIS: - case LYK_PRINT: - case LYK_DOWN_TWO: - case LYK_DOWN_HALF: - case LYK_NEXT_PAGE: - case LYK_END: - case LYK_VIEW_BOOKMARK: - case LYK_COOKIE_JAR: - case LYK_INDEX_SEARCH: - case LYK_OPTIONS: - mouse_link = -3; /* so LYgetch_for() passes it on - kw */ + case LYK_RELOAD: + case LYK_ECGOTO: + case LYK_INFO: + case LYK_WHEREIS: + case LYK_PRINT: + case LYK_DOWN_TWO: + case LYK_DOWN_HALF: + case LYK_NEXT_PAGE: + case LYK_END: + case LYK_VIEW_BOOKMARK: + case LYK_COOKIE_JAR: + case LYK_INDEX_SEARCH: + case LYK_OPTIONS: + mouse_link = -3; /* so LYgetch_for() passes it on - kw */ } } if (retlac == LYK_DO_NOTHING || @@ -1498,90 +1520,110 @@ static int LYmouse_menu (int x, int y, int atlink, int code) } #endif /* USE_MOUSE && (NCURSES || PDCURSES) */ - #if defined(USE_KEYMAPS) && defined(USE_SLANG) /************************************************************************/ static int current_sl_modifier = 0; /* We cannot guarantee the type for 'GetChar', and should not use a cast. */ -static int myGetChar (void) +static int myGetChar(void) { int i = GetChar(); + if (i == 0) /* trick to get NUL char through - kw */ current_sl_modifier = LKC_ISLKC; return i; } -static int LYgetch_for ( - int code) +static int LYgetch_for(int code) { - SLang_Key_Type *key; - int keysym; - current_sl_modifier = 0; + SLang_Key_Type *key; + int keysym; + + current_sl_modifier = 0; - key = SLang_do_key (Keymap_List, myGetChar); - if ((key == NULL) || (key->type != SLKEY_F_KEYSYM)) { + key = SLang_do_key(Keymap_List, myGetChar); + if ((key == NULL) || (key->type != SLKEY_F_KEYSYM)) { #ifdef __MINGW32__ - if ((key == NULL) && (current_sl_modifier == LKC_ISLKC)) { - key = SLang_do_key (Keymap_List, myGetChar); - keysym = key->f.keysym; - switch (keysym) { - case 'H': keysym = UPARROW; break; - case 'P': keysym = DNARROW; break; - case 'M': keysym = RTARROW; break; - case 'K': keysym = LTARROW; break; - case 'R': keysym = INSERT_KEY; break; - case 'S': keysym = REMOVE_KEY; break; - case 'I': keysym = PGUP; break; - case 'Q': keysym = PGDOWN; break; - case 'G': keysym = HOME; break; - case 'O': keysym = END_KEY; break; - case ';': keysym = F1; break; - } - return(keysym); - } + if ((key == NULL) && (current_sl_modifier == LKC_ISLKC)) { + key = SLang_do_key(Keymap_List, myGetChar); + keysym = key->f.keysym; + switch (keysym) { + case 'H': + keysym = UPARROW; + break; + case 'P': + keysym = DNARROW; + break; + case 'M': + keysym = RTARROW; + break; + case 'K': + keysym = LTARROW; + break; + case 'R': + keysym = INSERT_KEY; + break; + case 'S': + keysym = REMOVE_KEY; + break; + case 'I': + keysym = PGUP; + break; + case 'Q': + keysym = PGDOWN; + break; + case 'G': + keysym = HOME; + break; + case 'O': + keysym = END_KEY; + break; + case ';': + keysym = F1; + break; + } + return (keysym); + } #endif - return (current_sl_modifier ? 0 : DO_NOTHING); - } + return (current_sl_modifier ? 0 : DO_NOTHING); + } - keysym = key->f.keysym; + keysym = 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); + if (keysym & (LKC_ISLECLAC | LKC_ISLAC)) + return (keysym); - 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; + if (keysym + 1 >= KEYMAP_SIZE) + return 0; - return (keysym|current_sl_modifier); + return (keysym | current_sl_modifier); } /************************************************************************/ -#else /* NOT defined(USE_KEYMAPS) && defined(USE_SLANG) */ - +#else /* NOT defined(USE_KEYMAPS) && defined(USE_SLANG) */ /* - * LYgetch() translates some escape sequences and may fake noecho. + * LYgetch() translates some escape sequences and may fake noecho. */ #define found_CSI(first,second) ((second) == '[' || (first) == 155) -static int LYgetch_for ( - int code) +static int LYgetch_for(int code) { int a, b, c, d = -1; int current_modifier = 0; @@ -1589,13 +1631,13 @@ static int LYgetch_for ( have_levent = 0; -re_read: -#if !defined(UCX) || !defined(VAXC) /* errno not modifiable ? */ + re_read: +#if !defined(UCX) || !defined(VAXC) /* errno not modifiable ? */ if (errno == EINTR) set_errno(0); /* reset - kw */ -#endif /* UCX && VAXC */ +#endif /* UCX && VAXC */ #ifndef USE_SLANG - clearerr(stdin); /* needed here for ultrix and SOCKETSHR, but why? - FM */ + clearerr(stdin); /* needed here for ultrix and SOCKETSHR, but why? - FM */ #endif /* !USE_SLANG */ #if !defined(USE_SLANG) || defined(VMS) || defined(DJGPP_KEYHANDLER) c = GetChar(); @@ -1606,7 +1648,7 @@ re_read: lynx_nl2crlf(FALSE); } else { c = getchar(); - if (c == EOF && errno == EINTR) /* Ctrl-Z causes EINTR in getchar() */ + if (c == EOF && errno == EINTR) /* Ctrl-Z causes EINTR in getchar() */ clearerr(stdin); if (feof(stdin) || ferror(stdin) || c == EOF) { #ifdef IGNORE_CTRL_C @@ -1614,7 +1656,7 @@ re_read: sigint = FALSE; #endif /* IGNORE_CTRL_C */ CTRACE((tfp, "GETCH: Translate ^C to ^G.\n")); - return(LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */ + return (LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */ } } #endif /* !USE_SLANG || VMS */ @@ -1626,8 +1668,9 @@ re_read: #ifdef USE_SLANG || (c == 0xFFFF) #endif - )) { + )) { int fd, kbd_fd; + CTRACE((tfp, "nozap: Got EOF, curses %s, stdin is %p, LYNoZapKey reduced from %d to 0.\n", LYCursesON ? "on" : "off", stdin, LYNoZapKey)); @@ -1636,6 +1679,7 @@ re_read: (kbd_fd = LYConsoleInputFD(FALSE)) == fd) { char *term_name; int new_fd = INVSOC; + if ((term_name = ttyname(fileno(stdout))) != NULL) new_fd = open(term_name, O_RDONLY); if (new_fd == INVSOC && @@ -1648,10 +1692,11 @@ re_read: CTRACE((tfp, "nozap: open(%s) returned %d.\n", term_name, new_fd)); if (new_fd >= 0) { FILE *frp; + close(new_fd); frp = freopen(term_name, "r", stdin); CTRACE((tfp, - "nozap: freopen(%s,\"r\",stdin) returned %p, stdin is now %p with fd %d.\n", + "nozap: freopen(%s,\"r\",stdin) returned %p, stdin is now %p with fd %d.\n", term_name, frp, stdin, fileno(stdin))); if (LYCursesON) { stop_curses(); @@ -1671,20 +1716,20 @@ re_read: if (c == EOF && errno == EINTR) { #if defined(HAVE_SIZECHANGE) || defined(USE_SLANG) - CTRACE((tfp, "Got EOF with EINTR, recent_sizechange so far is %d\n", - recent_sizechange)); - if (!recent_sizechange) { /* not yet detected by ourselves */ - size_change(0); - CTRACE((tfp, "Now recent_sizechange is %d\n", recent_sizechange)); - } + CTRACE((tfp, "Got EOF with EINTR, recent_sizechange so far is %d\n", + recent_sizechange)); + if (!recent_sizechange) { /* not yet detected by ourselves */ + size_change(0); + CTRACE((tfp, "Now recent_sizechange is %d\n", recent_sizechange)); + } #else /* HAVE_SIZECHANGE || USE_SLANG */ - CTRACE((tfp, "Got EOF with EINTR, recent_sizechange is %d\n", - recent_sizechange)); + CTRACE((tfp, "Got EOF with EINTR, recent_sizechange is %d\n", + recent_sizechange)); #endif /* HAVE_SIZECHANGE || USE_SLANG */ -#if !defined(UCX) || !defined(VAXC) /* errno not modifiable ? */ +#if !defined(UCX) || !defined(VAXC) /* errno not modifiable ? */ set_errno(0); /* reset - kw */ -#endif /* UCX && VAXC */ - return(DO_NOTHING); +#endif /* UCX && VAXC */ + return (DO_NOTHING); } #endif /* USE_GETCHAR */ @@ -1696,12 +1741,12 @@ re_read: goto re_read; } #endif /* IGNORE_CTRL_C */ - return(LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */ + return (LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */ } -#else /* not USE_SLANG: */ +#else /* not USE_SLANG: */ if (feof(stdin) || ferror(stdin) || c == EOF) { if (recent_sizechange) - return(LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */ + return (LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */ #ifdef IGNORE_CTRL_C if (sigint) { sigint = FALSE; @@ -1710,7 +1755,7 @@ re_read: } #endif /* IGNORE_CTRL_C */ #if !defined(USE_GETCHAR) && !defined(VMS) && !defined(NCURSES) - if (c == ERR && errno == EINTR) /* may have been handled signal - kw */ + if (c == ERR && errno == EINTR) /* may have been handled signal - kw */ goto re_read; #endif /* USE_GETCHAR */ @@ -1722,7 +1767,7 @@ re_read: if (!escape_bound && (c == CH_ESC || (csi_is_csi && c == UCH(CH_ESC_PAR)))) { /* handle escape sequence S/390 -- gil -- 2024 */ - done_esc = TRUE; /* Flag: we did it, not keypad() */ + done_esc = TRUE; /* Flag: we did it, not keypad() */ b = GetChar(); if (b == '[' || b == 'O') { @@ -1732,28 +1777,50 @@ re_read: } switch (a) { - case 'A': c = UPARROW; break; - case 'B': c = DNARROW; break; - case 'C': c = RTARROW; break; - case 'D': c = LTARROW; break; - case 'q': c = END_KEY; break; /* vt100 application keypad 1 */ - case 'r': c = DNARROW; break; /* vt100 application keypad 2 */ - case 's': c = PGDOWN; break; /* vt100 application keypad 3 */ - case 't': c = LTARROW; break; /* vt100 application keypad 4 */ - case 'v': c = RTARROW; break; /* vt100 application keypad 6 */ - case 'w': c = HOME; break; /* vt100 application keypad 7 */ - case 'x': c = UPARROW; break; /* vt100 application keypad 8 */ - case 'y': c = PGUP; break; /* vt100 application keypad 9 */ + case 'A': + c = UPARROW; + break; + case 'B': + c = DNARROW; + break; + case 'C': + c = RTARROW; + break; + case 'D': + c = LTARROW; + break; + case 'q': /* vt100 application keypad 1 */ + c = END_KEY; + break; + case 'r': /* vt100 application keypad 2 */ + c = DNARROW; + break; + case 's': /* vt100 application keypad 3 */ + c = PGDOWN; + break; + case 't': /* vt100 application keypad 4 */ + c = LTARROW; + break; + case 'v': /* vt100 application keypad 6 */ + c = RTARROW; + break; + case 'w': /* vt100 application keypad 7 */ + c = HOME; + break; + case 'x': /* vt100 application keypad 8 */ + c = UPARROW; + break; + case 'y': /* vt100 application keypad 9 */ + c = PGUP; + break; case 'M': #if defined(USE_SLANG) && defined(USE_MOUSE) - if (found_CSI(c,b)) - { - c = sl_read_mouse_event (code); - } - else + if (found_CSI(c, b)) { + c = sl_read_mouse_event(code); + } else #endif - c = '\n'; /* keypad enter on pc ncsa telnet */ - break; + c = '\n'; /* keypad enter on pc ncsa telnet */ + break; case 'm': #ifdef VMS @@ -1765,7 +1832,7 @@ re_read: if (b == 'O') c = '+'; /* keypad + on my xterminal :) */ else - done_esc = FALSE; /* we have another look below - kw */ + done_esc = FALSE; /* we have another look below - kw */ break; case 'l': #ifdef VMS @@ -1791,77 +1858,75 @@ re_read: #endif /* VMS */ c = '0'; /* keypad 0 */ break; - case '1': /** VTxxx Find **/ - if (found_CSI(c,b) && (d=GetChar()) == '~') + case '1': /* VTxxx Find */ + if (found_CSI(c, b) && (d = GetChar()) == '~') c = FIND_KEY; else - done_esc = FALSE; /* we have another look below - kw */ + done_esc = FALSE; /* we have another look below - kw */ break; case '2': - if (found_CSI(c,b)) { - if ((d=GetChar())=='~') /** VTxxx Insert **/ + if (found_CSI(c, b)) { + if ((d = GetChar()) == '~') /* VTxxx Insert */ c = INSERT_KEY; else if ((d == '8' || d == '9') && - GetChar() == '~') - { - if (d == '8') /** VTxxx Help **/ + GetChar() == '~') { + if (d == '8') /* VTxxx Help */ c = F1; - else if (d == '9') /** VTxxx Do **/ + else if (d == '9') /* VTxxx Do */ c = DO_KEY; d = -1; - } - } - else - done_esc = FALSE; /* we have another look below - kw */ + } + } else + done_esc = FALSE; /* we have another look below - kw */ break; case '3': /** VTxxx Delete **/ - if (found_CSI(c,b) && (d=GetChar()) == '~') + if (found_CSI(c, b) && (d = GetChar()) == '~') c = REMOVE_KEY; else - done_esc = FALSE; /* we have another look below - kw */ + done_esc = FALSE; /* we have another look below - kw */ break; case '4': /** VTxxx Select **/ - if (found_CSI(c,b) && (d=GetChar()) == '~') + if (found_CSI(c, b) && (d = GetChar()) == '~') c = SELECT_KEY; else - done_esc = FALSE; /* we have another look below - kw */ + done_esc = FALSE; /* we have another look below - kw */ break; case '5': /** VTxxx PrevScreen **/ - if (found_CSI(c,b) && (d=GetChar()) == '~') + if (found_CSI(c, b) && (d = GetChar()) == '~') c = PGUP; else - done_esc = FALSE; /* we have another look below - kw */ + done_esc = FALSE; /* we have another look below - kw */ break; case '6': /** VTxxx NextScreen **/ - if (found_CSI(c,b) && (d=GetChar()) == '~') + if (found_CSI(c, b) && (d = GetChar()) == '~') c = PGDOWN; else - done_esc = FALSE; /* we have another look below - kw */ + 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') + if (found_CSI(c, b)) { + if ((d = GetChar()) == 'A') c = F1; break; } /* FALLTHRU */ default: - if (c == CH_ESC && a == b && !found_CSI(c,b)) { + if (c == CH_ESC && a == b && !found_CSI(c, b)) { current_modifier = LKC_MOD2; c = a; /* We're not yet done if ESC + curses-keysym: */ done_esc = (BOOL) ((a & ~0xFF) == 0); break; } - CTRACE((tfp,"Unknown key sequence: %d:%d:%d\n",c,b,a)); + CTRACE((tfp, "Unknown key sequence: %d:%d:%d\n", c, b, a)); CTRACE_SLEEP(MessageSecs); break; } - if (isdigit(a) && found_CSI(c,b) && d != -1 && d != '~') + if (isdigit(a) && found_CSI(c, b) && d != -1 && d != '~') d = GetChar(); if (!done_esc && (a & ~0xFF) == 0) { - if (a == b && !found_CSI(c,b) && c == CH_ESC) { + if (a == b && !found_CSI(c, b) && c == CH_ESC) { current_modifier = LKC_MOD2; c = a; done_esc = TRUE; @@ -1872,19 +1937,19 @@ re_read: } #ifdef USE_KEYMAPS /* Extract a single code if two are merged: */ - if (c >= 0 && (c&LKC_ISLECLAC)) { + if (c >= 0 && (c & LKC_ISLECLAC)) { if (!(code == FOR_INPUT || code == FOR_PROMPT)) c = LKC2_TO_LKC(c); - } else if (c >= 0 && (c&LKC_ISLKC)) { + } else if (c >= 0 && (c & LKC_ISLKC)) { c &= ~LKC_ISLKC; - done_esc = TRUE; /* already a lynxkeycode, skip keypad switches - kw */ + done_esc = TRUE; /* already a lynxkeycode, skip keypad switches - kw */ } if (c >= 0 && LKC_HAS_ESC_MOD(c)) { current_modifier = LKC_MOD2; c &= LKC_MASK; } - if (c >= 0 && (c&(LKC_ISLECLAC|LKC_ISLAC))) { - done_esc = TRUE; /* already a lynxactioncode, skip keypad switches - iz */ + if (c >= 0 && (c & (LKC_ISLECLAC | LKC_ISLAC))) { + done_esc = TRUE; /* already a lynxactioncode, skip keypad switches - iz */ } #endif if (done_esc) { @@ -1892,162 +1957,162 @@ re_read: } else { #ifdef HAVE_KEYPAD /* - * Convert keypad() mode keys into Lynx defined keys. + * Convert keypad() mode keys into Lynx defined keys. */ - switch(c) { - case KEY_DOWN: /* The four arrow keys ... */ - c = DNARROW; - break; + switch (c) { + case KEY_DOWN: /* The four arrow keys ... */ + c = DNARROW; + break; case KEY_UP: - c = UPARROW; - break; + c = UPARROW; + break; case KEY_LEFT: - c = LTARROW; - break; - case KEY_RIGHT: /* ... */ - c = RTARROW; - break; + c = LTARROW; + break; + case KEY_RIGHT: /* ... */ + c = RTARROW; + break; #if defined(SH_EX) && defined(DOSPATH) /* for NEC PC-9800 1998/08/30 (Sun) 21:50:35 */ case KEY_C2: - c = DNARROW; - break; + c = DNARROW; + break; case KEY_A2: - c = UPARROW; - break; + c = UPARROW; + break; case KEY_B1: - c = LTARROW; - break; + c = LTARROW; + break; case KEY_B3: - c = RTARROW; - break; - case PAD0: /* PC-9800 Ins */ - c = INSERT_KEY; - break; - case PADSTOP: /* PC-9800 DEL */ - c = REMOVE_KEY; - break; + c = RTARROW; + break; + case PAD0: /* PC-9800 Ins */ + c = INSERT_KEY; + break; + case PADSTOP: /* PC-9800 DEL */ + c = REMOVE_KEY; + break; #endif /* SH_EX */ - case KEY_HOME: /* Home key (upward+left arrow) */ - c = HOME; - break; - case KEY_CLEAR: /* Clear screen */ - c = 18; /* CTRL-R */ - break; - case KEY_NPAGE: /* Next page */ - c = PGDOWN; - break; - case KEY_PPAGE: /* Previous page */ - c = PGUP; - break; - case KEY_LL: /* home down or bottom (lower left) */ - c = END_KEY; - break; + case KEY_HOME: /* Home key (upward+left arrow) */ + c = HOME; + break; + case KEY_CLEAR: /* Clear screen */ + c = 18; /* CTRL-R */ + break; + case KEY_NPAGE: /* Next page */ + c = PGDOWN; + break; + case KEY_PPAGE: /* Previous page */ + c = PGUP; + break; + case KEY_LL: /* home down or bottom (lower left) */ + c = END_KEY; + break; #if defined(KEY_A1) && defined(KEY_C3) - /* The keypad is arranged like this:*/ - /* a1 up a3 */ - /* left b2 right */ - /* c1 down c3 */ - case KEY_A1: /* upper left of keypad */ - c = HOME; - break; - case KEY_A3: /* upper right of keypad */ - c = PGUP; - break; - case KEY_B2: /* center of keypad */ - c = DO_NOTHING; - break; - case KEY_C1: /* lower left of keypad */ - c = END_KEY; - break; - case KEY_C3: /* lower right of keypad */ - c = PGDOWN; - break; + /* The keypad is arranged like this: */ + /* a1 up a3 */ + /* left b2 right */ + /* c1 down c3 */ + case KEY_A1: /* upper left of keypad */ + c = HOME; + break; + case KEY_A3: /* upper right of keypad */ + c = PGUP; + break; + case KEY_B2: /* center of keypad */ + c = DO_NOTHING; + break; + case KEY_C1: /* lower left of keypad */ + c = END_KEY; + break; + case KEY_C3: /* lower right of keypad */ + c = PGDOWN; + break; #endif /* defined(KEY_A1) && defined(KEY_C3) */ #ifdef KEY_ENTER - case KEY_ENTER: /* enter/return */ - c = '\n'; - break; + case KEY_ENTER: /* enter/return */ + c = '\n'; + break; #endif /* KEY_ENTER */ -#ifdef PADENTER /* PDCURSES */ +#ifdef PADENTER /* PDCURSES */ case PADENTER: - c = '\n'; - break; + c = '\n'; + break; #endif /* PADENTER */ #ifdef KEY_END - case KEY_END: /* end key 001 */ - c = END_KEY; - break; + case KEY_END: /* end key 001 */ + c = END_KEY; + break; #endif /* KEY_END */ #ifdef KEY_HELP - case KEY_HELP: /* help key 001 */ - c = F1; - break; + case KEY_HELP: /* help key 001 */ + c = F1; + break; #endif /* KEY_HELP */ #ifdef KEY_BACKSPACE case KEY_BACKSPACE: - c = CH_DEL; /* backspace key (delete, not Ctrl-H) S/390 -- gil -- 2041 */ - break; + c = CH_DEL; /* backspace key (delete, not Ctrl-H) S/390 -- gil -- 2041 */ + break; #endif /* KEY_BACKSPACE */ case KEY_F(1): - c = F1; /* VTxxx Help */ - break; + c = F1; /* VTxxx Help */ + break; #if defined(KEY_F) && !defined(__DJGPP__) && !defined(_WINDOWS) case KEY_F(16): - c = DO_KEY; /* VTxxx Do */ - break; + c = DO_KEY; /* VTxxx Do */ + break; #endif /* KEY_F */ #ifdef KEY_REDO - case KEY_REDO: /* VTxxx Do */ - c = DO_KEY; - break; + case KEY_REDO: /* VTxxx Do */ + c = DO_KEY; + break; #endif /* KEY_REDO */ #ifdef KEY_FIND case KEY_FIND: - c = FIND_KEY; /* VTxxx Find */ - break; + c = FIND_KEY; /* VTxxx Find */ + break; #endif /* KEY_FIND */ #ifdef KEY_SELECT case KEY_SELECT: - c = SELECT_KEY; /* VTxxx Select */ - break; + c = SELECT_KEY; /* VTxxx Select */ + break; #endif /* KEY_SELECT */ #ifdef KEY_IC case KEY_IC: - c = INSERT_KEY; /* VTxxx Insert */ - break; + c = INSERT_KEY; /* VTxxx Insert */ + break; #endif /* KEY_IC */ #ifdef KEY_DC case KEY_DC: - c = REMOVE_KEY; /* VTxxx Remove */ - break; + c = REMOVE_KEY; /* VTxxx Remove */ + break; #endif /* KEY_DC */ #ifdef KEY_BTAB case KEY_BTAB: - c = BACKTAB_KEY; /* Back tab, often Shift-Tab */ - break; + c = BACKTAB_KEY; /* Back tab, often Shift-Tab */ + break; #endif /* KEY_BTAB */ #ifdef KEY_RESIZE - case KEY_RESIZE: /* size change detected by ncurses */ + case KEY_RESIZE: /* size change detected by ncurses */ #if defined(HAVE_SIZECHANGE) || defined(USE_SLANG) /* Make call to detect new size, if that may be implemented. * The call may set recent_sizechange (except for USE_SLANG), * which will tell mainloop() to refresh. - kw */ CTRACE((tfp, "Got KEY_RESIZE, recent_sizechange so far is %d\n", - recent_sizechange)); + recent_sizechange)); size_change(0); CTRACE((tfp, "Now recent_sizechange is %d\n", recent_sizechange)); #else /* HAVE_SIZECHANGE || USE_SLANG */ CTRACE((tfp, "Got KEY_RESIZE, recent_sizechange is %d\n", - recent_sizechange)); + 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 +#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 @@ -2061,15 +2126,15 @@ re_read: recent_sizechange = TRUE; #endif /* - * May be just the delayed effect of mainloop()'s call - * to resizeterm(). Pretend we haven't read anything - * yet, don't return. - kw + * May be just the delayed effect of mainloop()'s call to + * resizeterm(). Pretend we haven't read anything yet, don't + * return. - kw */ goto re_read; } /* - * Yep, we agree there was a change. Return now so that - * the caller can react to it. - kw + * Yep, we agree there was a change. Return now so that the caller + * can react to it. - kw */ c = DO_NOTHING; break; @@ -2104,11 +2169,12 @@ re_read: case KEY_MOUSE: CTRACE((tfp, "KEY_MOUSE\n")); if (code == FOR_CHOICE) { - c = MOUSE_KEY; /* Will be processed by the caller */ + c = MOUSE_KEY; /* Will be processed by the caller */ } #if defined(NCURSES) else if (code == FOR_SINGLEKEY) { MEVENT event; + getmouse(&event); /* Completely ignore event - kw */ c = DO_NOTHING; } @@ -2124,9 +2190,9 @@ re_read: err = getmouse(&event); if (err != OK) { CTRACE((tfp, "Mouse error: no event available!\n")); - return(code==FOR_PANEL ? 0 : DO_NOTHING); + return (code == FOR_PANEL ? 0 : DO_NOTHING); } - levent = event; /* Allow setting pos in entry fields */ + levent = event; /* Allow setting pos in entry fields */ if (event.bstate & BUTTON1_CLICKED) { c = set_clicked_link(event.x, event.y, code, 1); } else if (event.bstate & BUTTON1_DOUBLE_CLICKED) { @@ -2136,11 +2202,11 @@ re_read: } else if (event.bstate & BUTTON3_CLICKED) { c = LAC_TO_LKC0(LYK_PREV_DOC); } else if (code == FOR_PROMPT - /* Cannot ignore: see LYCurses.c */ + /* Cannot ignore: see LYCurses.c */ || (event.bstate & - ( BUTTON1_PRESSED | BUTTON1_RELEASED - | BUTTON2_PRESSED | BUTTON2_RELEASED - | BUTTON3_PRESSED | BUTTON3_RELEASED))) { + (BUTTON1_PRESSED | BUTTON1_RELEASED + | BUTTON2_PRESSED | BUTTON2_RELEASED + | BUTTON3_PRESSED | BUTTON3_RELEASED))) { /* Completely ignore - don't return anything, to avoid canceling the prompt - kw */ goto re_read; @@ -2150,7 +2216,7 @@ re_read: c = set_clicked_link(event.x, event.y, code, 1); atlink = (c == LAC_TO_LKC0(LYK_ACTIVATE)); if (!atlink) - mouse_link = -1; /* Forget about approx stuff. */ + mouse_link = -1; /* Forget about approx stuff. */ lac = LYmouse_menu(event.x, event.y, atlink, code); if (lac == LYK_SUBMIT) { @@ -2169,14 +2235,14 @@ re_read: lac = LYK_REFRESH; } c = LAC_TO_LKC(lac); -#if 0 /* Probably not necessary any more - kw */ +#if 0 /* Probably not necessary any more - kw */ lynx_force_repaint(); LYrefresh(); #endif } if (code == FOR_INPUT && mouse_link == -1 && lac != LYK_REFRESH && lac != LYK_SUBMIT) { - ungetmouse(&event); /* Caller will process this. */ + ungetmouse(&event); /* Caller will process this. */ wgetch(LYwin); /* ungetmouse puts KEY_MOUSE back */ c = MOUSE_KEY; } @@ -2188,6 +2254,7 @@ re_read: int left = H_CMD_AREA; int right = (LYcols - H_CMD_AREA); + /* yes, I am assuming that my screen will be a certain width. */ int tick_count; @@ -2215,27 +2282,37 @@ re_read: if (MOUSE_Y_POS > (LYlines - V_CMD_AREA - 1)) { /* Screen BOTTOM */ if (MOUSE_X_POS < left) { - c = LTARROW; p = "<-"; + c = LTARROW; + p = "<-"; } else if (MOUSE_X_POS < HIST_CMD_2) { - c = RTARROW; p = "->"; + c = RTARROW; + p = "->"; } else if (MOUSE_X_POS > right) { - c = 'z'; p = "Cancel"; + c = 'z'; + p = "Cancel"; } else { - c = PGDOWN; p = "PGDOWN"; + c = PGDOWN; + p = "PGDOWN"; } } else if (MOUSE_Y_POS < V_CMD_AREA) { /* Screen TOP */ if (MOUSE_X_POS < left) { - c = LTARROW; p = "<-"; + c = LTARROW; + p = "<-"; } else if (MOUSE_X_POS < HIST_CMD_2) { - c = RTARROW; p = "->"; + c = RTARROW; + p = "->"; } else if (MOUSE_X_POS > right) { - c = 'z'; p = "Cancel"; + c = 'z'; + p = "Cancel"; } else { - c = PGUP; p = "PGUP"; + c = PGUP; + p = "PGUP"; } } else { - c = set_clicked_link(MOUSE_X_POS, MOUSE_Y_POS, FOR_PANEL, 1); + c = set_clicked_link(MOUSE_X_POS, + MOUSE_Y_POS, + FOR_PANEL, 1); } } if (p && c != -1) { @@ -2243,138 +2320,137 @@ re_read: SetConsoleTitle(mouse_info); } #endif /* !(WIN_EX) */ - if ((c+1) >= KEYMAP_SIZE && (c&LKC_ISLAC)) - return(c); + if ((c + 1) >= KEYMAP_SIZE && (c & LKC_ISLAC)) + return (c); } break; #endif /* NCURSES || PDCURSES */ /********************************************************************/ -#endif /* USE_MOUSE */ +#endif /* USE_MOUSE */ } #endif /* HAVE_KEYPAD */ #ifdef DJGPP_KEYHANDLER - switch(c) { - case K_Down: /* The four arrow keys ... */ + switch (c) { + case K_Down: /* The four arrow keys ... */ case K_EDown: - c = DNARROW; - break; + c = DNARROW; + break; case K_Up: case K_EUp: - c = UPARROW; - break; + c = UPARROW; + break; case K_Left: case K_ELeft: - c = LTARROW; - break; - case K_Right: /* ... */ + c = LTARROW; + break; + case K_Right: /* ... */ case K_ERight: - c = RTARROW; - break; - case K_Home: /* Home key (upward+left arrow) */ + c = RTARROW; + break; + case K_Home: /* Home key (upward+left arrow) */ case K_EHome: - c = HOME; - break; - case K_PageDown: /* Next page */ + c = HOME; + break; + case K_PageDown: /* Next page */ case K_EPageDown: - c = PGDOWN; - break; - case K_PageUp: /* Previous page */ + c = PGDOWN; + break; + case K_PageUp: /* Previous page */ case K_EPageUp: - c = PGUP; - break; - case K_End: /* home down or bottom (lower left) */ + c = PGUP; + break; + case K_End: /* home down or bottom (lower left) */ case K_EEnd: - c = END_KEY; - break; - case K_F1: /* F1 key */ - c = F1; - break; - case K_Insert: /* Insert key */ + c = END_KEY; + break; + case K_F1: /* F1 key */ + c = F1; + break; + case K_Insert: /* Insert key */ case K_EInsert: - c = INSERT_KEY; - break; - case K_Delete: /* Delete key */ + c = INSERT_KEY; + break; + case K_Delete: /* Delete key */ case K_EDelete: - c = REMOVE_KEY; - break; - case K_Alt_Escape: /* Alt-Escape */ - c = 0x1a7; - break; - case K_Control_At: /* CTRL-@ */ - c = 0x1a8; - break; - case K_Alt_Backspace: /* Alt-Backspace */ - c = 0x1a9; - break; - case K_BackTab: /* BackTab */ - c = BACKTAB_KEY; - break; + c = REMOVE_KEY; + break; + case K_Alt_Escape: /* Alt-Escape */ + c = 0x1a7; + break; + case K_Control_At: /* CTRL-@ */ + c = 0x1a8; + break; + case K_Alt_Backspace: /* Alt-Backspace */ + c = 0x1a9; + break; + case K_BackTab: /* BackTab */ + c = BACKTAB_KEY; + break; } #endif /* DGJPP_KEYHANDLER */ #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; - break; + switch (c) { + case SL_KEY_DOWN: /* The four arrow keys ... */ + c = DNARROW; + break; case SL_KEY_UP: - c = UPARROW; - break; + c = UPARROW; + break; case SL_KEY_LEFT: - c = LTARROW; - break; - case SL_KEY_RIGHT: /* ... */ - c = RTARROW; - break; - case SL_KEY_HOME: /* Home key (upward+left arrow) */ - case SL_KEY_A1: /* upper left of keypad */ - c = HOME; - break; - case SL_KEY_NPAGE: /* Next page */ - case SL_KEY_C3: /* lower right of keypad */ - c = PGDOWN; - break; - case SL_KEY_PPAGE: /* Previous page */ - case SL_KEY_A3: /* upper right of keypad */ - c = PGUP; - 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; - break; - case SL_KEY_IC: /* Insert key */ - c = INSERT_KEY; - break; - case SL_KEY_DELETE: /* Delete key */ - c = REMOVE_KEY; - break; + c = LTARROW; + break; + case SL_KEY_RIGHT: /* ... */ + c = RTARROW; + break; + case SL_KEY_HOME: /* Home key (upward+left arrow) */ + case SL_KEY_A1: /* upper left of keypad */ + c = HOME; + break; + case SL_KEY_NPAGE: /* Next page */ + case SL_KEY_C3: /* lower right of keypad */ + c = PGDOWN; + break; + case SL_KEY_PPAGE: /* Previous page */ + case SL_KEY_A3: /* upper right of keypad */ + c = PGUP; + 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; + break; + case SL_KEY_IC: /* Insert key */ + c = INSERT_KEY; + break; + case SL_KEY_DELETE: /* Delete key */ + c = REMOVE_KEY; + break; } #endif /* USE_SLANG && __DJGPP__ && !DJGPP_KEYHANDLER && !USE_KEYMAPS */ } - if (c&(LKC_ISLAC|LKC_ISLECLAC)) - return(c); - if ((c+1) >= KEYMAP_SIZE) { + if (c & (LKC_ISLAC | LKC_ISLECLAC)) + return (c); + 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 index into (e.g.) keypad[]. - KW + * 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 + * index into (e.g.) keypad[]. - KW */ return (0); } else { - return(c|current_modifier); + return (c | current_modifier); } } /************************************************************************/ -#endif /* NOT defined(USE_KEYMAPS) && defined(USE_SLANG) */ - +#endif /* NOT defined(USE_KEYMAPS) && defined(USE_SLANG) */ -int LYgetch (void) +int LYgetch(void) { return LYReadCmdKey(FOR_PANEL); } @@ -2382,22 +2458,24 @@ int LYgetch (void) /* * Read a single keystroke, allows mouse-selection. */ -int LYgetch_choice (void) +int LYgetch_choice(void) { int ch = LYReadCmdKey(FOR_CHOICE); + if (ch == LYCharINTERRUPT1) - ch = LYCharINTERRUPT2; /* treat ^C the same as ^G */ + ch = LYCharINTERRUPT2; /* treat ^C the same as ^G */ return ch; } /* * Read a single keystroke, allows mouse events. */ -int LYgetch_input (void) +int LYgetch_input(void) { int ch = LYReadCmdKey(FOR_INPUT); + if (ch == LYCharINTERRUPT1) - ch = LYCharINTERRUPT2; /* treat ^C the same as ^G */ + ch = LYCharINTERRUPT2; /* treat ^C the same as ^G */ return ch; } @@ -2405,11 +2483,12 @@ int LYgetch_input (void) * Read a single keystroke, ignoring case by translating it to uppercase. * Ignore mouse events, if any. */ -int LYgetch_single (void) +int LYgetch_single(void) { int ch = LYReadCmdKey(FOR_SINGLEKEY); + if (ch == LYCharINTERRUPT1) - ch = LYCharINTERRUPT2; /* treat ^C the same as ^G */ + ch = LYCharINTERRUPT2; /* treat ^C the same as ^G */ else if (ch > 0 && ch < 256) ch = TOUPPER(ch); /* will ignore case of result */ return ch; @@ -2418,16 +2497,16 @@ int LYgetch_single (void) /* * Convert a null-terminated string to lowercase */ -void LYLowerCase ( - char * arg_buffer) +void LYLowerCase(char *arg_buffer) { register unsigned char *buffer = (unsigned char *) arg_buffer; size_t 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) { + && buffer[i + 1] != 0) { if ((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH((buffer[i])))) { continue; } @@ -2444,16 +2523,16 @@ void LYLowerCase ( /* * Convert a null-terminated string to uppercase */ -void LYUpperCase ( - char * arg_buffer) +void LYUpperCase(char *arg_buffer) { register unsigned char *buffer = (unsigned char *) arg_buffer; size_t 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) { + && buffer[i + 1] != 0) { if ((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH((buffer[i])))) { continue; } @@ -2470,17 +2549,17 @@ void LYUpperCase ( /* * Remove newlines from a string, returning true if we removed any. */ -BOOLEAN LYRemoveNewlines ( - char * buffer) +BOOLEAN LYRemoveNewlines(char *buffer) { if (buffer != 0) { - register char* buf = buffer; - for ( ; *buf && *buf != '\n' && *buf != '\r'; buf++) - ; + register char *buf = buffer; + + for (; *buf && *buf != '\n' && *buf != '\r'; buf++) ; if (*buf) { /* runs very seldom */ - char * old = buf; - for ( ; *old; old++) { + char *old = buf; + + for (; *old; old++) { if (*old != '\n' && *old != '\r') *buf++ = *old; } @@ -2495,17 +2574,17 @@ BOOLEAN LYRemoveNewlines ( * Remove ALL whitespace from a string (including embedded blanks), and returns * a pointer to the end of the trimmed string. */ -char * LYRemoveBlanks ( - char * buffer) +char *LYRemoveBlanks(char *buffer) { if (buffer != 0) { - register char* buf = buffer; - for ( ; *buf && !isspace(UCH(*buf)); buf++) - ; + register char *buf = buffer; + + for (; *buf && !isspace(UCH(*buf)); buf++) ; if (*buf) { /* runs very seldom */ - char * old = buf; - for ( ; *old; old++) { + char *old = buf; + + for (; *old; old++) { if (!isspace(UCH(*old))) *buf++ = *old; } @@ -2519,8 +2598,7 @@ char * LYRemoveBlanks ( /* * Skip whitespace */ -char * LYSkipBlanks ( - char * buffer) +char *LYSkipBlanks(char *buffer) { while (isspace(UCH((*buffer)))) buffer++; @@ -2530,8 +2608,7 @@ char * LYSkipBlanks ( /* * Skip non-whitespace */ -char * LYSkipNonBlanks ( - char * buffer) +char *LYSkipNonBlanks(char *buffer) { while (*buffer != 0 && !isspace(UCH((*buffer)))) buffer++; @@ -2541,8 +2618,7 @@ char * LYSkipNonBlanks ( /* * Skip const whitespace */ -const char * LYSkipCBlanks ( - const char * buffer) +const char *LYSkipCBlanks(const char *buffer) { while (isspace(UCH((*buffer)))) buffer++; @@ -2552,8 +2628,7 @@ const char * LYSkipCBlanks ( /* * Skip const non-whitespace */ -const char * LYSkipCNonBlanks ( - const char * buffer) +const char *LYSkipCNonBlanks(const char *buffer) { while (*buffer != 0 && !isspace(UCH((*buffer)))) buffer++; @@ -2563,22 +2638,21 @@ const char * LYSkipCNonBlanks ( /* * Trim leading blanks from a string */ -void LYTrimLeading ( - char * buffer) +void LYTrimLeading(char *buffer) { char *skipped = LYSkipBlanks(buffer); - while ((*buffer++ = *skipped++) != 0) - ; + + while ((*buffer++ = *skipped++) != 0) ; } /* * Trim trailing newline(s) from a string */ -char * LYTrimNewline ( - char * buffer) +char *LYTrimNewline(char *buffer) { size_t i = strlen(buffer); - while (i != 0 && (buffer[i-1] == '\n' || buffer[i-1] == '\r')) + + while (i != 0 && (buffer[i - 1] == '\n' || buffer[i - 1] == '\r')) buffer[--i] = 0; return buffer; } @@ -2586,26 +2660,25 @@ char * LYTrimNewline ( /* * Trim trailing blanks from a string */ -void LYTrimTrailing ( - char * buffer) +void LYTrimTrailing(char *buffer) { size_t i = strlen(buffer); - while (i != 0 && isspace(UCH(buffer[i-1]))) + + while (i != 0 && isspace(UCH(buffer[i - 1]))) buffer[--i] = 0; } /* 1997/11/10 (Mon) 14:26:10, originally string_short() in LYExterns.c, but * moved here because LYExterns is not always configured. */ -char *LYElideString ( - char * str, - int cut_pos) +char *LYElideString(char *str, + int cut_pos) { char buff[MAX_LINE], *s, *d; static char s_str[MAX_LINE]; int len; - LYstrncpy(buff, str, sizeof(buff)-1); + LYstrncpy(buff, str, sizeof(buff) - 1); len = strlen(buff); if (len > (LYcols - 10)) { buff[cut_pos] = '.'; @@ -2615,8 +2688,7 @@ char *LYElideString ( s >= buff && d >= buff && d < buff + LYcols && - (*d++ = *s++) != 0; ) - ; + (*d++ = *s++) != 0;) ; buff[LYcols] = 0; } strcpy(s_str, buff); @@ -2626,18 +2698,16 @@ char *LYElideString ( /* * Trim a startfile, returning true if it looks like one of the Lynx tags. */ -BOOLEAN LYTrimStartfile ( - char * buffer) +BOOLEAN LYTrimStartfile(char *buffer) { LYTrimHead(buffer); if (isLYNXEXEC(buffer) || isLYNXPROG(buffer)) { /* - * The original implementations of these schemes expected - * white space without hex escaping, and did not check - * for hex escaping, so we'll continue to support that, - * until that code is redone in conformance with SGML - * principles. - FM + * The original implementations of these schemes expected white space + * without hex escaping, and did not check for hex escaping, so we'll + * continue to support that, until that code is redone in conformance + * with SGML principles. - FM */ HTUnEscapeSome(buffer, " \r\n\t"); convert_to_spaces(buffer, TRUE); @@ -2649,11 +2719,11 @@ BOOLEAN LYTrimStartfile ( /* * Escape unsafe characters in startfile, except for lynx internal URLs. */ -void LYEscapeStartfile ( - char ** buffer) +void LYEscapeStartfile(char **buffer) { if (!LYTrimStartfile(*buffer)) { char *escaped = HTEscapeUnsafe(*buffer); + StrAllocCopy(*buffer, escaped); FREE(escaped); } @@ -2662,8 +2732,7 @@ void LYEscapeStartfile ( /* * Trim all blanks from startfile, except for lynx internal URLs. */ -void LYTrimAllStartfile ( - char * buffer) +void LYTrimAllStartfile(char *buffer) { if (!LYTrimStartfile(buffer)) { LYRemoveBlanks(buffer); @@ -2671,14 +2740,14 @@ void LYTrimAllStartfile ( } /* -** 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 all most of the "edit->suchandsos". + * Shorthand to get rid of all most of the "edit->suchandsos". */ #define Buf edit->buffer #define Pos edit->pos @@ -2695,41 +2764,38 @@ void LYTrimAllStartfile ( static char killbuffer[1024] = "\0"; #endif -void LYSetupEdit ( - EDREC * edit, - char * old, - int maxstr, - int maxdsp) +void LYSetupEdit(EDREC * edit, char *old, + int maxstr, + int maxdsp) { /* - * Initialize edit record + * Initialize edit record */ LYGetYX(edit->sy, edit->sx); - edit->pad = ' '; + edit->pad = ' '; edit->dirty = TRUE; edit->panon = FALSE; edit->current_modifiers = 0; - MaxLen = maxstr; + MaxLen = maxstr; DspWdth = maxdsp; - Margin = 0; + Margin = 0; Pos = strlen(old); #ifdef ENHANCED_LINEEDIT Mark = -1; /* pos=0, but do not show it yet */ #endif DspStart = 0; - if (maxstr > maxdsp) { /* Need panning? */ - if (DspWdth > 4) /* Else "{}" take up precious screen space */ + if (maxstr > maxdsp) { /* Need panning? */ + if (DspWdth > 4) /* Else "{}" take up precious screen space */ edit->panon = 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. + * 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; + Margin = DspWdth / 4; if (Margin > 10) Margin = 10; } @@ -2740,9 +2806,7 @@ void LYSetupEdit ( #ifdef SUPPORT_MULTIBYTE_EDIT -static int prev_pos ( - EDREC * edit, - int pos) +static int prev_pos(EDREC * edit, int pos) { int i = 0; @@ -2753,9 +2817,10 @@ static int prev_pos ( else { while (i < pos - 1) { int c; + c = Buf[i]; if (is8bits(c) && - !((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH(c)))) { + !((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH(c)))) { i++; } i++; @@ -2770,23 +2835,22 @@ static int prev_pos ( #ifdef EXP_KEYBOARD_LAYOUT static int map_active = 0; + #else #define map_active 0 #endif -int LYEditInsert ( - EDREC * edit, - unsigned char *s, - int len, - int map, - BOOL maxMessage) +int LYEditInsert(EDREC * edit, unsigned char *s, + int len, + int map, + BOOL maxMessage) { int length = strlen(Buf); int remains = MaxLen - (length + len); int edited = 0, overflow = 0; /* - * ch is (presumably) printable character. + * ch is (presumably) printable character. */ if (remains < 0) { overflow = 1; @@ -2797,7 +2861,7 @@ int LYEditInsert ( goto finish; } Buf[length + len] = '\0'; - for(; length >= Pos; length--) /* Make room */ + for (; length >= Pos; length--) /* Make room */ Buf[length + len] = Buf[length]; #ifdef EXP_KEYBOARD_LAYOUT if (map < 0) @@ -2812,7 +2876,7 @@ int LYEditInsert ( int l = 1; utfbuf[0] = *s; - if ( *s < 128 && LYKbLayouts[current_layout][*s] ) { + if (*s < 128 && LYKbLayouts[current_layout][*s]) { UCode_t ucode = LYKbLayouts[current_layout][*s]; if (ucode > 127) { @@ -2844,12 +2908,12 @@ int LYEditInsert ( len = off - Pos; FREE(tail); } else if (map) { - unsigned char *e = s + len, *t = (unsigned char *)Buf + Pos; + unsigned char *e = s + len, *t = (unsigned char *) Buf + Pos; while (s < e) { int ch; - if ( *s < 128 && LYKbLayouts[current_layout][*s] ) { + if (*s < 128 && LYKbLayouts[current_layout][*s]) { ch = UCTransUniChar(LYKbLayouts[current_layout][*s], current_char_set); if (ch < 0) @@ -2860,13 +2924,12 @@ int LYEditInsert ( t++, s++; } edited = 1; + } else +#endif /* defined EXP_KEYBOARD_LAYOUT */ + { + strncpy(Buf + Pos, (char *) s, len); + edited = 1; } - else -#endif /* defined EXP_KEYBOARD_LAYOUT */ - { - strncpy(Buf + Pos, (char *) s, len); - edited = 1; - } finish: Pos += len; @@ -2881,26 +2944,24 @@ int LYEditInsert ( else if (Mark < -1 - Pos) Mark -= len; if (Mark >= 0) - Mark = -1 - Mark; /* Disable it */ + Mark = -1 - Mark; /* Disable it */ #endif return edited; } -int LYEdit1 ( - EDREC * edit, - int ch, - int action, - BOOL maxMessage) -{ /* returns 0 character processed - * -ch if action should be performed outside of line-editing mode - * ch otherwise - */ +int LYEdit1(EDREC * edit, int ch, + int action, + BOOL maxMessage) +{ /* returns 0 character processed + * -ch if action should be performed outside of line-editing mode + * ch otherwise + */ int i; int length; unsigned char uch; if (MaxLen <= 0) - return(0); /* Be defensive */ + return (0); /* Be defensive */ length = strlen(&Buf[0]); StrLen = length; @@ -2909,7 +2970,7 @@ int LYEdit1 ( #ifdef EXP_KEYBOARD_LAYOUT case LYE_SWMAP: /* - * Turn input character mapping on or off. + * Turn input character mapping on or off. */ map_active = ~map_active; break; @@ -2917,29 +2978,28 @@ int LYEdit1 ( #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. + * 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. */ if (HTCJK == NOCJK && LYlowest_eightbit[current_char_set] > 0x97) - return(ch); + return (ch); /* FALLTHRU */ #endif case LYE_CHAR: uch = UCH(ch); LYEditInsert(edit, &uch, 1, map_active, maxMessage); - return 0; /* All changes already registered */ + return 0; /* All changes already registered */ case LYE_C1CHAR: /* - * ch is the second part (in most cases, a capital letter) of - * a 7-bit 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 an imperfect workaround - * that doesn't work for all such characters. + * ch is the second part (in most cases, a capital letter) of a 7-bit + * 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 + * an imperfect workaround that doesn't work for all such characters. */ ch &= 0xFF; if (ch + 64 >= LYlowest_eightbit[current_char_set]) @@ -2952,36 +3012,36 @@ int LYEdit1 ( else if (Mark < -1 - Pos) Mark--; if (Mark >= 0) - Mark = -1 - Mark; /* Disable it */ + Mark = -1 - Mark; /* Disable it */ #endif - for(i = length; i >= Pos; i--) /* Make room */ - Buf[i+1] = Buf[i]; - Buf[length+1]='\0'; + for (i = length; i >= Pos; i--) /* Make room */ + Buf[i + 1] = Buf[i]; + Buf[length + 1] = '\0'; Buf[Pos] = UCH(ch); Pos++; } else { if (maxMessage) { - _statusline(MAXLEN_REACHED_DEL_OR_MOV); - } - return(ch); + _statusline(MAXLEN_REACHED_DEL_OR_MOV); + } + return (ch); } break; case LYE_BACKW: #ifndef SUPPORT_MULTIBYTE_EDIT /* - * Backword. - * Definition of word is very naive: 1 or more a/n characters. + * Backword. + * Definition of word is very naive: 1 or more a/n characters. */ - while (Pos && !isalnum(Buf[Pos-1])) + while (Pos && !isalnum(Buf[Pos - 1])) Pos--; - while (Pos && isalnum(Buf[Pos-1])) + while (Pos && isalnum(Buf[Pos - 1])) Pos--; #else /* SUPPORT_MULTIBYTE_EDIT */ /* - * Backword. - * Definition of word is very naive: 1 or more a/n characters, - * or 1 or more multibyte character. + * Backword. + * Definition of word is very naive: 1 or more a/n characters, or 1 or + * more multibyte character. */ { int pos0; @@ -3000,8 +3060,8 @@ int LYEdit1 ( } } else { while (Pos - && !is8bits(Buf[pos0]) - && isalnum(UCH(Buf[pos0]))) { + && !is8bits(Buf[pos0]) + && isalnum(UCH(Buf[pos0]))) { Pos = pos0; pos0 = prev_pos(edit, Pos); } @@ -3012,20 +3072,20 @@ int LYEdit1 ( case LYE_FORWW: /* - * Word forward. + * Word forward. */ #ifndef SUPPORT_MULTIBYTE_EDIT while (isalnum(Buf[Pos])) - Pos++; /* '\0' is not a/n */ + Pos++; /* '\0' is not a/n */ while (!isalnum(Buf[Pos]) && Buf[Pos]) - Pos++ ; + Pos++; #else /* SUPPORT_MULTIBYTE_EDIT */ if (HTCJK != NOCJK && is8bits(Buf[Pos])) { while (is8bits(Buf[Pos])) Pos += 2; } else { while (!is8bits(Buf[Pos]) && isalnum(Buf[Pos])) - Pos++; /* '\0' is not a/n */ + Pos++; /* '\0' is not a/n */ } while ((HTCJK == NOCJK || !is8bits(Buf[Pos])) && !isalnum(UCH(Buf[Pos])) && Buf[Pos]) @@ -3035,35 +3095,36 @@ int LYEdit1 ( case LYE_ERASE: /* - * Erase the line to start fresh. + * Erase the line to start fresh. */ - Buf[0] = '\0'; + Buf[0] = '\0'; #ifdef ENHANCED_LINEEDIT Mark = -1; /* Do not show the mark */ #endif - /* fall through */ + /* fall through */ case LYE_BOL: /* - * Go to first column. + * Go to first column. */ Pos = 0; break; case LYE_EOL: /* - * Go to last column. + * Go to last column. */ Pos = length; break; case LYE_DELNW: /* - * Delete next word. + * Delete next word. */ { int pos0 = Pos; - LYEdit1 (edit, 0, LYE_FORWW, FALSE); + + LYEdit1(edit, 0, LYE_FORWW, FALSE); while (Pos > pos0) LYEdit1(edit, 0, LYE_DELP, FALSE); } @@ -3071,11 +3132,12 @@ int LYEdit1 ( case LYE_DELPW: /* - * Delete previous word. + * Delete previous word. */ { int pos0 = Pos; - LYEdit1 (edit, 0, LYE_BACKW, FALSE); + + LYEdit1(edit, 0, LYE_BACKW, FALSE); pos0 -= Pos; while (pos0--) LYEdit1(edit, 0, LYE_DELN, FALSE); @@ -3084,21 +3146,23 @@ int LYEdit1 ( case LYE_DELBL: /* - * Delete from current cursor position back to BOL. + * Delete from current cursor position back to BOL. */ { int pos0 = Pos; + while (pos0--) LYEdit1(edit, 0, LYE_DELP, FALSE); } break; - case LYE_DELEL: /* @@@ */ + case LYE_DELEL: /* @@@ */ /* - * Delete from current cursor position thru EOL. + * Delete from current cursor position thru EOL. */ { int pos0 = Pos; + LYEdit1(edit, 0, LYE_EOL, FALSE); pos0 = Pos - pos0; while (pos0--) @@ -3108,8 +3172,8 @@ int LYEdit1 ( case LYE_DELN: /* - * Delete next character (I-beam style cursor), or current - * character (box/underline style cursor). + * Delete next character (I-beam style cursor), or current character + * (box/underline style cursor). */ if (Pos >= length) break; @@ -3122,20 +3186,20 @@ int LYEdit1 ( case LYE_DELP: /* - * Delete preceding character. + * Delete preceding character. */ #ifndef SUPPORT_MULTIBYTE_EDIT if (length == 0 || Pos == 0) break; #ifdef ENHANCED_LINEEDIT if (Mark >= 0) - Mark = -1 - Mark; /* Disable it */ + Mark = -1 - Mark; /* Disable it */ if (Mark <= -1 - Pos) Mark++; #endif Pos--; for (i = Pos; i < length; i++) - Buf[i] = Buf[i+1]; + Buf[i] = Buf[i + 1]; i--; #else /* SUPPORT_MULTIBYTE_EDIT */ { @@ -3154,7 +3218,7 @@ int LYEdit1 ( i -= offset; #ifdef ENHANCED_LINEEDIT if (Mark >= 0) - Mark = -1 - Mark; /* Disable it */ + Mark = -1 - Mark; /* Disable it */ if (Mark <= -1 - Pos) Mark += offset; #endif @@ -3166,7 +3230,7 @@ int LYEdit1 ( case LYE_FORW_RL: case LYE_FORW: /* - * Move cursor to the right. + * Move cursor to the right. */ #ifndef SUPPORT_MULTIBYTE_EDIT if (Pos < length) @@ -3174,7 +3238,7 @@ int LYEdit1 ( #else /* SUPPORT_MULTIBYTE_EDIT */ if (Pos < length) { Pos++; - if (HTCJK != NOCJK && is8bits(Buf[Pos-1])) + if (HTCJK != NOCJK && is8bits(Buf[Pos - 1])) Pos++; } #endif /* SUPPORT_MULTIBYTE_EDIT */ @@ -3185,7 +3249,7 @@ int LYEdit1 ( case LYE_BACK_LL: case LYE_BACK: /* - * Left-arrow move cursor to the left. + * Left-arrow move cursor to the left. */ #ifndef SUPPORT_MULTIBYTE_EDIT if (Pos > 0) @@ -3205,52 +3269,56 @@ int LYEdit1 ( #ifdef ENHANCED_LINEEDIT case LYE_TPOS: /* - * Transpose characters - bash or ksh(emacs not gmacs) style + * Transpose characters - bash or ksh(emacs not gmacs) style */ if (length <= 1 || Pos == 0) - return(ch); + return (ch); if (Pos == length) Pos--; if (Mark < 0) - Mark = -1 - Mark; /* Temporary enable it */ - if (Mark == Pos || Mark == Pos+1) - Mark = Pos-1; + 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]) { + Mark = -1 - Mark; /* Disable it */ + if (Buf[Pos - 1] == Buf[Pos]) { Pos++; break; } - i = Buf[Pos-1]; Buf[Pos-1] = Buf[Pos]; Buf[Pos++] = (char) i; + i = Buf[Pos - 1]; + Buf[Pos - 1] = Buf[Pos]; + Buf[Pos++] = (char) i; break; case LYE_SETMARK: /* - * primitive emacs-like set-mark-command + * primitive emacs-like set-mark-command */ Mark = Pos; - return(0); + return (0); case LYE_XPMARK: /* - * emacs-like exchange-point-and-mark + * emacs-like exchange-point-and-mark */ if (Mark < 0) - Mark = -1 - Mark; /* Enable it */ + Mark = -1 - Mark; /* Enable it */ if (Mark == Pos) - return(0); - i = Pos; Pos = Mark; Mark = i; + return (0); + i = Pos; + Pos = Mark; + Mark = i; break; case LYE_KILLREG: /* - * primitive emacs-like kill-region + * primitive emacs-like kill-region */ if (Mark < 0) - Mark = -1 - Mark; /* Enable it */ + Mark = -1 - Mark; /* Enable it */ if (Mark == Pos) { killbuffer[0] = '\0'; - return(0); + return (0); } if (Mark > Pos) LYEdit1(edit, 0, LYE_XPMARK, FALSE); @@ -3258,32 +3326,31 @@ int LYEdit1 ( int reglen = Pos - Mark; LYstrncpy(killbuffer, &Buf[Mark], - HTMIN(reglen, (int)sizeof(killbuffer)-1)); - for (i = Mark; Buf[i+reglen]; i++) - Buf[i] = Buf[i+reglen]; - Buf[i] = Buf[i+reglen]; /* terminate */ + HTMIN(reglen, (int) sizeof(killbuffer) - 1)); + for (i = Mark; Buf[i + reglen]; i++) + Buf[i] = Buf[i + reglen]; + Buf[i] = Buf[i + reglen]; /* terminate */ Pos = Mark; } if (Mark >= 0) - Mark = -1 - Mark; /* Disable it */ + Mark = -1 - Mark; /* Disable it */ break; case LYE_YANK: /* - * primitive emacs-like yank + * primitive emacs-like yank */ if (!killbuffer[0]) { Mark = -1 - Pos; - return(0); - } - { + return (0); + } { int yanklen = strlen(killbuffer); - if (Pos+yanklen <= (MaxLen) && StrLen+yanklen <= (MaxLen)) { + if (Pos + yanklen <= (MaxLen) && StrLen + yanklen <= (MaxLen)) { Mark = -1 - Pos; - for(i = length; i >= Pos; i--) /* Make room */ - Buf[i+yanklen] = Buf[i]; + for (i = length; i >= Pos; i--) /* Make room */ + Buf[i + yanklen] = Buf[i]; for (i = 0; i < yanklen; i++) Buf[Pos++] = UCH(killbuffer[i]); @@ -3304,52 +3371,53 @@ int LYEdit1 ( break; default: - return(ch); + return (ch); } edit->dirty = TRUE; StrLen = strlen(&Buf[0]); - return(0); + return (0); } /* -** This function prompts for a choice or page number. -** If a 'g' or 'p' suffix is included, that will be -** loaded into c. Otherwise, c is zeroed. - FM & LE -*/ -int get_popup_number ( - char * msg, - int * c, - int * rel) + * This function prompts for a choice or page number. + * If a 'g' or 'p' suffix is included, that will be + * loaded into c. Otherwise, c is zeroed. - FM & LE + */ +int get_popup_number(char *msg, + int *c, + int *rel) { char temp[120]; char *p = temp; int num; /* - * Load the c argument into the prompt buffer. + * Load the c argument into the prompt buffer. */ temp[0] = (char) *c; temp[1] = '\0'; _statusline(msg); /* - * Get the number, possibly with a suffix, from the user. + * Get the number, possibly with a suffix, from the user. */ if (LYgetstr(temp, VISIBLE, sizeof(temp), NORECALL) < 0 || *temp == 0) { HTInfoMsg(CANCELLED); *c = '\0'; *rel = '\0'; - return(0); + return (0); } *rel = '\0'; num = atoi(p); - while ( isdigit(UCH(*p)) ) + while (isdigit(UCH(*p))) ++p; - switch ( *p ) { - case '+': case '-': + switch (*p) { + case '+': + case '-': /* 123+ or 123- */ - *rel = *p++; *c = *p; + *rel = *p++; + *c = *p; break; default: *c = *p++; @@ -3360,17 +3428,17 @@ int get_popup_number ( } /* - * If we had a 'g' or 'p' suffix, load it into c. - * Otherwise, zero c. Then return the number. + * If we had a 'g' or 'p' suffix, load it into c. Otherwise, zero c. Then + * return the number. */ - if ( *p == 'g' || *p == 'G' ) { + if (*p == 'g' || *p == 'G') { *c = 'g'; - } else if (*p == 'p' || *p == 'P' ) { + } else if (*p == 'p' || *p == 'P') { *c = 'p'; } else { *c = '\0'; } - if ( *rel != '+' && *rel != '-' ) + if (*rel != '+' && *rel != '-') *rel = 0; return num; } @@ -3381,10 +3449,9 @@ int get_popup_number ( #else # define TmpStyleOn(s) # define TmpStyleOff(s) -#endif /* defined USE_COLOR_STYLE */ +#endif /* defined USE_COLOR_STYLE */ -void LYRefreshEdit ( - EDREC * edit) +void LYRefreshEdit(EDREC * edit) { int i; int length; @@ -3392,6 +3459,7 @@ void LYRefreshEdit ( int padsize; char *str; char buffer[3]; + #ifdef SUPPORT_MULTIBYTE_EDIT int begin_multi = 0; int end_multi = 0; @@ -3405,27 +3473,27 @@ void LYRefreshEdit ( return; edit->dirty = FALSE; - length=strlen(&Buf[0]); + length = strlen(&Buf[0]); edit->strlen = length; -/* - * Now we have: - * .--DspWdth---. - * +---------+=============+-----------+ - * | |M M| | (M=margin) - * +---------+=============+-----------+ - * 0 DspStart length - * - * Insertion point can be anywhere between 0 and stringlength. - * Figure out 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. - */ + /* + * Now we have: + * .--DspWdth---. + * +---------+=============+-----------+ + * | |M M| | (M=margin) + * +---------+=============+-----------+ + * 0 DspStart length + * + * Insertion point can be anywhere between 0 and stringlength. Figure out + * 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. + */ if ((DspStart + DspWdth) <= length) { if (Pos >= (DspStart + DspWdth) - Margin) { #ifndef SUPPORT_MULTIBYTE_EDIT - DspStart=(Pos - DspWdth) + Margin; + DspStart = (Pos - DspWdth) + Margin; #else /* SUPPORT_MULTIBYTE_EDIT */ if (HTCJK != NOCJK) { int tmp = (Pos - DspWdth) + Margin; @@ -3458,10 +3526,10 @@ void LYRefreshEdit ( DspStart++; } } else { - DspStart = Pos - Margin; - if (DspStart < 0) - DspStart = 0; - } + DspStart = Pos - Margin; + if (DspStart < 0) + DspStart = 0; + } #endif /* SUPPORT_MULTIBYTE_EDIT */ } @@ -3471,16 +3539,16 @@ void LYRefreshEdit ( begin_multi = 1; #endif /* SUPPORT_MULTIBYTE_EDIT */ - nrdisplayed = length-DspStart; + nrdisplayed = length - DspStart; if (nrdisplayed > DspWdth) nrdisplayed = DspWdth; LYmove(edit->sy, edit->sx); #ifdef USE_COLOR_STYLE /* - * If this is the last screen line, set attributes to normal, - * should only be needed for color styles. The curses function - * may be used directly to avoid complications. - kw + * If this is the last screen line, set attributes to normal, should only + * be needed for color styles. The curses function may be used directly to + * avoid complications. - kw */ if (edit->sy == (LYlines - 1)) prompting = 1; @@ -3490,11 +3558,11 @@ void LYRefreshEdit ( estyle = s_aedit; CTRACE2(TRACE_STYLE, (tfp, "STYLE.getstr: switching to <edit.%s>.\n", - prompting ? "prompt" : "active")); + prompting ? "prompt" : "active")); if (estyle != NOSTYLE) curses_style(estyle, STACK_ON); else - wattrset(LYwin,A_NORMAL); /* need to do something about colors? */ + wattrset(LYwin, A_NORMAL); /* need to do something about colors? */ #endif if (edit->hidden) { for (i = 0; i < nrdisplayed; i++) @@ -3506,11 +3574,11 @@ void LYRefreshEdit ( #endif for (i = 0; i < nrdisplayed; i++) { #if defined(ENHANCED_LINEEDIT) && defined(USE_COLOR_STYLE) - if ( Mark >= 0 && ((DspStart + i == Mark && Pos > Mark) - || (DspStart + i == Pos && Pos < Mark) )) + if (Mark >= 0 && ((DspStart + i == Mark && Pos > Mark) + || (DspStart + i == Pos && Pos < Mark))) TmpStyleOn(prompting ? s_prompt_sel : s_aedit_sel); - if ( Mark >= 0 && ((DspStart + i == Mark && Pos < Mark) - || (DspStart + i == Pos && Pos > Mark) )) + if (Mark >= 0 && ((DspStart + i == Mark && Pos < Mark) + || (DspStart + i == Pos && Pos > Mark))) TmpStyleOff(prompting ? s_prompt_sel : s_aedit_sel); #endif if ((buffer[0] = str[i]) == 1 || buffer[0] == 2 || @@ -3562,9 +3630,9 @@ void LYRefreshEdit ( } /* - * Erase rest of input area. + * Erase rest of input area. */ - padsize = DspWdth-nrdisplayed; + padsize = DspWdth - nrdisplayed; if (padsize) { TmpStyleOn(prompting ? s_prompt_edit_pad : s_aedit_pad); while (padsize--) @@ -3573,7 +3641,7 @@ void LYRefreshEdit ( } /* - * Scrolling indicators. + * Scrolling indicators. */ if (edit->panon) { if ((DspStart + nrdisplayed) < length) { @@ -3586,7 +3654,7 @@ void LYRefreshEdit ( #endif LYmove(edit->sy, edit->sx + nrdisplayed - 1 - add_space); if (add_space) - LYaddch(' '); /* Needed with styles? */ + LYaddch(' '); /* Needed with styles? */ LYaddch(ACS_RARROW); TmpStyleOff(prompting ? s_prompt_edit_arr : s_aedit_arr); } @@ -3596,7 +3664,7 @@ void LYRefreshEdit ( LYaddch(ACS_LARROW); #ifdef SUPPORT_MULTIBYTE_EDIT if (begin_multi) - LYaddch(' '); /* Needed with styles? */ + LYaddch(' '); /* Needed with styles? */ #endif /* SUPPORT_MULTIBYTE_EDIT */ TmpStyleOff(prompting ? s_prompt_edit_arr : s_aedit_arr); } @@ -3611,36 +3679,30 @@ void LYRefreshEdit ( LYrefresh(); } -static void reinsertEdit ( - EditFieldData * edit, - char * result) +static void reinsertEdit(EditFieldData * edit, char *result) { if (result != 0) { LYEdit1(edit, '\0', LYE_ERASE, FALSE); while (*result != '\0') { - LYLineEdit(edit, (int)(*result), FALSE); + LYLineEdit(edit, (int) (*result), FALSE); result++; } } } -static int caselessCmpList ( - const void * a, - const void * b) +static int caselessCmpList(const void *a, + const void *b) { - return strcasecomp(*(const char *const *)a, *(const char *const *)b); + return strcasecomp(*(const char *const *) a, *(const char *const *) b); } -static int normalCmpList ( - const void * a, - const void * b) +static int normalCmpList(const void *a, + const void *b) { - return strcmp(*(const char *const *)a, *(const char *const *)b); + return strcmp(*(const char *const *) a, *(const char *const *) b); } -static char **sortedList ( - HTList * list, - BOOL ignorecase) +static char **sortedList(HTList *list, BOOL ignorecase) { unsigned count = HTList_count(list); unsigned j = 0; @@ -3654,19 +3716,19 @@ static char **sortedList ( result[j++] = HTList_nextObject(list); if (count > 1) { - qsort((char *)result, count, sizeof(*result), + qsort((char *) result, count, sizeof(*result), ignorecase ? caselessCmpList : normalCmpList); /* remove duplicate entries from the sorted index */ for (j = 0; result[j] != 0; j++) { k = j; while (result[k] != 0 - && !strcmp(result[j], result[k])) { + && !strcmp(result[j], result[k])) { k++; } k--; if (j != k) { - for (jk = j; ; jk++) { + for (jk = j;; jk++) { result[jk] = result[jk + k - j]; if (result[jk] == 0) break; @@ -3678,8 +3740,7 @@ static char **sortedList ( return result; } -int LYarrayLength ( - const char ** list) +int LYarrayLength(const char **list) { int result = 0; @@ -3688,8 +3749,7 @@ int LYarrayLength ( return result; } -int LYarrayWidth ( - const char ** list) +int LYarrayWidth(const char **list) { int result = 0; int check; @@ -3702,24 +3762,23 @@ int LYarrayWidth ( return result; } -static void FormatChoiceNum ( - char * dst, - int num_choices, - int choice, - const char * value) +static void FormatChoiceNum(char *dst, + int num_choices, + int choice, + const char *value) { if (num_choices >= 0) { int digits = (num_choices > 9) ? 2 : 1; + sprintf(dst, "%*d: %.*s", - digits, (choice + 1), - MAX_LINE - 9 - digits, value); + digits, (choice + 1), + MAX_LINE - 9 - digits, value); } else { - LYstrncpy(dst, value, MAX_LINE-1); + LYstrncpy(dst, value, MAX_LINE - 1); } } -static unsigned options_width ( - const char ** list) +static unsigned options_width(const char **list) { unsigned width = 0; int count = 0; @@ -3733,14 +3792,12 @@ static unsigned options_width ( return width; } -static void draw_option ( - WINDOW * win, - int entry, - int width, - BOOL reversed, - int num_choices, - int number, - const char * value) +static void draw_option(WINDOW * win, int entry, + int width, + BOOL reversed, + int num_choices, + int number, + const char *value) { char Cnum[MAX_LINE]; @@ -3750,7 +3807,7 @@ static void draw_option ( LYaddstr(Cnum); if (reversed) SLsmg_set_color(2); - SLsmg_write_nstring((char *)value, win->width); + SLsmg_write_nstring((char *) value, win->width); if (reversed) SLsmg_set_color(0); #else @@ -3781,27 +3838,24 @@ static void draw_option ( } /* - * This function offers the choices for values of an - * option via a popup window which functions like - * that for selection of options in a form. - FM + * This function offers the choices for values of an option via a popup window + * which functions like that for selection of options in a form. - FM * - * Also used for mouse popups with ncurses; this is indicated - * by for_mouse. + * Also used for mouse popups with ncurses; this is indicated by for_mouse. */ -int LYhandlePopupList ( - int cur_choice, - int ly, - int lx, - const char ** choices, - int width, - int i_length, - int disabled, - BOOLEAN for_mouse, - BOOLEAN numbered) +int LYhandlePopupList(int cur_choice, + int ly, + int lx, + const char **choices, + int width, + int i_length, + int disabled, + BOOLEAN for_mouse, + BOOLEAN numbered) { int c = 0, cmd = 0, i = 0, j = 0, rel = 0; int orig_choice; - WINDOW * form_window; + WINDOW *form_window; int num_choices = 0; int max_choices = 0; int top, bottom, length = -1; @@ -3810,7 +3864,7 @@ int LYhandlePopupList ( char Cnum[64]; int Lnum; int npages; - static char prev_target[MAX_LINE]; /* Search string buffer */ + static char prev_target[MAX_LINE]; /* Search string buffer */ static char prev_target_buffer[MAX_LINE]; /* Next search buffer */ static BOOL first = TRUE; char *cp; @@ -3823,6 +3877,7 @@ int LYhandlePopupList ( char buffer[MAX_LINE]; char *popup_status_msg = NULL; const char **Cptr = NULL; + #define CAN_SCROLL_DOWN 1 #define CAN_SCROLL_UP 2 #define CAN_SCROLL 4 @@ -3845,12 +3900,11 @@ int LYhandlePopupList ( QueryNum = QueryTotal; /* - * Count the number of choices to be displayed, where - * num_choices ranges from 0 to n, and set width to the - * longest choice string length. Also set Lnum to the - * length for the highest choice number, then decrement - * num_choices so as to be zero-based. The window width - * will be based on the sum of width and Lnum. - FM + * Count the number of choices to be displayed, where num_choices ranges + * from 0 to n, and set width to the longest choice string length. Also + * set Lnum to the length for the highest choice number, then decrement + * num_choices so as to be zero-based. The window width will be based on + * the sum of width and Lnum. - FM */ num_choices = LYarrayLength(choices) - 1; if (width <= 0) @@ -3865,58 +3919,58 @@ int LYhandlePopupList ( } /* - * Let's assume for the sake of sanity that ly is the number - * corresponding to the line the choice is on. - * Let's also assume that cur_choice is the number of the - * item that should be initially selected, as 0 being the - * first item. - * So what we have, is the top equal to the current screen line - * subtracting the cur_choice + 1 (the one must be for the - * top line we will draw in a box). If the top goes under 0, - * consider it 0. + * Let's assume for the sake of sanity that ly is the number corresponding + * to the line the choice is on. + * + * Let's also assume that cur_choice is the number of the item that should + * be initially selected, as 0 being the first item. + * + * So what we have, is the top equal to the current screen line subtracting + * the cur_choice + 1 (the one must be for the top line we will draw in a + * box). If the top goes under 0, consider it 0. */ top = ly - (cur_choice + 1); if (top < 0) top = 0; /* - * Check and see if we need to put the i_length parameter up to - * the number of real choices. + * Check and see if we need to put the i_length parameter up to the number + * of real choices. */ if (i_length < 1) { i_length = num_choices; } else { /* - * Otherwise, it is really one number too high. + * Otherwise, it is really one number too high. */ i_length--; } /* - * The bottom is the value of the top plus the number of options - * to view plus 3 (one for the top line, one for the bottom line, - * and one to offset the 0 counted in the num_choices). + * The bottom is the value of the top plus the number of options to view + * plus 3 (one for the top line, one for the bottom line, and one to offset + * the 0 counted in the num_choices). */ bottom = top + i_length + 3; /* - * Set lines_to_show based on the user_mode global. + * Set lines_to_show based on the user_mode global. */ if (user_mode == NOVICE_MODE) - lines_to_show = LYlines-4; + lines_to_show = LYlines - 4; else - lines_to_show = LYlines-2; + lines_to_show = LYlines - 2; if (for_mouse && user_mode == NOVICE_MODE && lines_to_show > 2) lines_to_show--; /* - * Hmm... If the bottom goes beyond the number of lines available, + * Hmm... If the bottom goes beyond the number of lines available, */ if (bottom > lines_to_show) { /* - * Position the window at the top if we have more - * choices than will fit in the window. + * Position the window at the top if we have more choices than will fit + * in the window. */ if ((i_length + 3) > lines_to_show) { top = 0; @@ -3925,10 +3979,10 @@ int LYhandlePopupList ( bottom = (lines_to_show + 1); } else { /* - * Try to position the window so that the selected choice will - * appear where the selection box currently is positioned. - * It could end up too high, at this point, but we'll move it - * down latter, if that has happened. + * Try to position the window so that the selected choice will + * appear where the selection box currently is positioned. It + * could end up too high, at this point, but we'll move it down + * latter, if that has happened. */ top = (lines_to_show + 1) - (i_length + 3); bottom = (lines_to_show + 1); @@ -3936,14 +3990,14 @@ int LYhandlePopupList ( } /* - * This is really fun, when the length is 4, it means 0 to 4, or 5. + * This is really fun, when the length is 4, it means 0 to 4, or 5. */ length = (bottom - top) - 2; if (length <= num_choices) can_scroll = CAN_SCROLL; /* - * Move the window down if it's too high. + * Move the window down if it's too high. */ if (bottom < ly + 2) { bottom = ly + 2; @@ -3954,8 +4008,8 @@ int LYhandlePopupList ( if (for_mouse) { /* shift horizontally to lie within screen width, if possible */ - if (Lnum + (int)width + 4 < LYcols) { - if (lx - 1 + (Lnum + (int)width + 4) > LYcols) + if (Lnum + (int) width + 4 < LYcols) { + if (lx - 1 + (Lnum + (int) width + 4) > LYcols) lx = LYcols + 1 - (Lnum + width + 4); else if (lx <= 0) lx = 1; @@ -3963,17 +4017,18 @@ int LYhandlePopupList ( } /* - * Set up the overall window, including the boxing characters ('*'), - * if it all fits. Otherwise, set up the widest window possible. - FM + * Set up the overall window, including the boxing characters ('*'), if it + * all fits. Otherwise, set up the widest window possible. - FM */ if (num_choices <= 0 - || cur_choice > num_choices - || (form_window = LYstartPopup(top, lx, bottom - top, Lnum + width)) == 0) - return(orig_choice); + || cur_choice > num_choices + || (form_window = LYstartPopup(top, lx, + bottom - top, + Lnum + width)) == 0) + return (orig_choice); /* - * Clear the command line and write - * the popup statusline. - FM + * Clear the command line and write the popup statusline. - FM */ LYmove((LYlines - 2), 0); LYclrtoeol(); @@ -3983,46 +4038,46 @@ int LYhandlePopupList ( popup_status_msg = CHOICE_LIST_MESSAGE; #if defined(USE_MOUSE) && (defined(NCURSES) || defined(PDCURSES)) } else { - popup_status_msg = gettext( - "Left mouse button or return to select, arrow keys to scroll."); + popup_status_msg = + gettext("Left mouse button or return to select, arrow keys to scroll."); #endif } _statusline(popup_status_msg); /* - * Set up the window_offset for choices. - * cur_choice ranges from 0...n - * length ranges from 0...m + * Set up the window_offset for choices. + * cur_choice ranges from 0...n + * length ranges from 0...m */ if (cur_choice >= length) { window_offset = cur_choice - length + 1; } /* - * Compute the number of popup window pages. - FM + * Compute the number of popup window pages. - FM */ npages = ((num_choices + 1) > length) ? - (((num_choices + 1) + (length - 1))/(length)) - : 1; -/* - * OH! I LOVE GOTOs! hack hack hack - */ -redraw: + (((num_choices + 1) + (length - 1)) / (length)) + : 1; + /* + * OH! I LOVE GOTOs! hack hack hack + */ + redraw: /* - * Display the boxed choices. + * Display the boxed choices. */ for (i = 0; i <= num_choices; i++) { if (i >= window_offset && i - window_offset < length) { - draw_option (form_window, ((i + 1) - window_offset), width, FALSE, - max_choices, i, choices[i]); + draw_option(form_window, ((i + 1) - window_offset), width, FALSE, + max_choices, i, choices[i]); } } - LYbox(form_window, (BOOLEAN)!numbered); + LYbox(form_window, (BOOLEAN) !numbered); Cptr = NULL; /* - * Loop on user input. + * Loop on user input. */ while (cmd != LYK_ACTIVATE) { int row = ((i + 1) - window_offset); @@ -4032,8 +4087,8 @@ redraw: can_scroll = ((window_offset ? CAN_SCROLL_UP : 0) | (num_choices - window_offset >= length ? CAN_SCROLL_DOWN : 0)); - if (~can_scroll & can_scroll_was) { /* Need to redraw */ - LYbox(form_window, (BOOLEAN)!numbered); + if (~can_scroll & can_scroll_was) { /* Need to redraw */ + LYbox(form_window, (BOOLEAN) !numbered); can_scroll_was = 0; } if (can_scroll & ~can_scroll_was & CAN_SCROLL_UP) { @@ -4051,31 +4106,31 @@ redraw: } /* - * Unreverse cur choice. + * Unreverse cur choice. */ if (Cptr != NULL) { - draw_option (form_window, row, width, FALSE, - max_choices, i, Cptr[i]); + draw_option(form_window, row, width, FALSE, + max_choices, i, Cptr[i]); } Cptr = choices; i = cur_choice; row = ((cur_choice + 1) - window_offset); - draw_option (form_window, row, width, TRUE, - max_choices, cur_choice, Cptr[cur_choice]); + draw_option(form_window, row, width, TRUE, + max_choices, cur_choice, Cptr[cur_choice]); LYstowCursor(form_window, row, 1); c = LYgetch_choice(); - if (term_options || LYCharIsINTERRUPT(c)) { /* Control-C or Control-G */ + if (term_options || LYCharIsINTERRUPT(c)) { /* Control-C or Control-G */ cmd = LYK_QUIT; #ifndef USE_SLANG } else if (c == MOUSE_KEY) { if ((cmd = fancy_mouse(form_window, row, &cur_choice)) < 0) goto redraw; - if (cmd == LYK_ACTIVATE) + if (cmd == LYK_ACTIVATE) break; #endif } else { - cmd = LKC_TO_LAC(keymap,c); + cmd = LKC_TO_LAC(keymap, c); } #ifdef VMS if (HadVMSInterrupt) { @@ -4084,646 +4139,637 @@ redraw: } #endif /* VMS */ - switch(cmd) { - case LYK_F_LINK_NUM: - c = '\0'; - /* FALLTHRU */ - case LYK_1: /* FALLTHRU */ - case LYK_2: /* FALLTHRU */ - case LYK_3: /* FALLTHRU */ - case LYK_4: /* FALLTHRU */ - case LYK_5: /* FALLTHRU */ - case LYK_6: /* FALLTHRU */ - case LYK_7: /* FALLTHRU */ - case LYK_8: /* FALLTHRU */ - case LYK_9: - /* - * Get a number from the user, possibly with - * a 'g' or 'p' suffix (which will be loaded - * into c). - FM & LE - */ - number = get_popup_number(SELECT_OPTION_NUMBER, &c, &rel); - - /* handle + or - suffix */ - CTRACE((tfp,"got popup option number %d, ",number)); - CTRACE((tfp,"rel='%c', c='%c', cur_choice=%d\n", - rel, c, cur_choice)); - if ( c == 'p' ) { - int curpage = ((cur_choice + 1) > length) ? - (((cur_choice + 1) + (length - 1))/(length)) - : 1; - CTRACE((tfp," curpage=%d\n",curpage)); - if ( rel == '+' ) - number = curpage + number; - else if ( rel == '-' ) - number = curpage - number; - } else if ( rel == '+' ) { - number = cur_choice + number + 1; - } else if ( rel == '-' ) { - number = cur_choice - number + 1; - } - if ( rel ) CTRACE((tfp,"new number=%d\n",number)); + switch (cmd) { + case LYK_F_LINK_NUM: + c = '\0'; + /* FALLTHRU */ + case LYK_1: /* FALLTHRU */ + case LYK_2: /* FALLTHRU */ + case LYK_3: /* FALLTHRU */ + case LYK_4: /* FALLTHRU */ + case LYK_5: /* FALLTHRU */ + case LYK_6: /* FALLTHRU */ + case LYK_7: /* FALLTHRU */ + case LYK_8: /* FALLTHRU */ + case LYK_9: + /* + * Get a number from the user, possibly with a 'g' or 'p' suffix + * (which will be loaded into c). - FM & LE + */ + number = get_popup_number(SELECT_OPTION_NUMBER, &c, &rel); + + /* handle + or - suffix */ + CTRACE((tfp, "got popup option number %d, ", number)); + CTRACE((tfp, "rel='%c', c='%c', cur_choice=%d\n", + rel, c, cur_choice)); + if (c == 'p') { + int curpage = ((cur_choice + 1) > length) ? + (((cur_choice + 1) + (length - 1)) / (length)) + : 1; + + CTRACE((tfp, " curpage=%d\n", curpage)); + if (rel == '+') + number = curpage + number; + else if (rel == '-') + number = curpage - number; + } else if (rel == '+') { + number = cur_choice + number + 1; + } else if (rel == '-') { + number = cur_choice - number + 1; + } + if (rel) + CTRACE((tfp, "new number=%d\n", number)); + /* + * Check for a 'p' suffix. - FM + */ + if (c == 'p') { /* - * Check for a 'p' suffix. - FM + * Treat 1 or less as the first page. - FM */ - if (c == 'p') { - /* - * Treat 1 or less as the first page. - FM - */ - if (number <= 1) { - if (window_offset == 0) { - HTUserMsg(ALREADY_AT_OPTION_BEGIN); - _statusline(popup_status_msg); - break; - } - window_offset = 0; - cur_choice = 0; + if (number <= 1) { + if (window_offset == 0) { + HTUserMsg(ALREADY_AT_OPTION_BEGIN); _statusline(popup_status_msg); - goto redraw; - } - - /* - * Treat a number equal to or greater than the - * number of pages as the last page. - FM - */ - if (number >= npages) { - if (window_offset >= ((num_choices - length) + 1)) { - HTUserMsg(ALREADY_AT_OPTION_END); - _statusline(popup_status_msg); - break; - } - window_offset = ((npages - 1) * length); - if (window_offset > (num_choices - length)) { - window_offset = (num_choices - length + 1); - } - if (cur_choice < window_offset) - cur_choice = window_offset; - _statusline(popup_status_msg); - goto redraw; + break; } + window_offset = 0; + cur_choice = 0; + _statusline(popup_status_msg); + goto redraw; + } - /* - * We want an intermediate page. - FM - */ - if (((number - 1) * length) == window_offset) { - char *msg = 0; - HTSprintf0(&msg, ALREADY_AT_OPTION_PAGE, number); - HTUserMsg(msg); - FREE(msg); + /* + * Treat a number equal to or greater than the number of pages + * as the last page. - FM + */ + if (number >= npages) { + if (window_offset >= ((num_choices - length) + 1)) { + HTUserMsg(ALREADY_AT_OPTION_END); _statusline(popup_status_msg); break; } - cur_choice = window_offset = ((number - 1) * length); + window_offset = ((npages - 1) * length); + if (window_offset > (num_choices - length)) { + window_offset = (num_choices - length + 1); + } + if (cur_choice < window_offset) + cur_choice = window_offset; _statusline(popup_status_msg); goto redraw; + } + + /* + * We want an intermediate page. - FM + */ + if (((number - 1) * length) == window_offset) { + char *msg = 0; + HTSprintf0(&msg, ALREADY_AT_OPTION_PAGE, number); + HTUserMsg(msg); + FREE(msg); + _statusline(popup_status_msg); + break; } + cur_choice = window_offset = ((number - 1) * length); + _statusline(popup_status_msg); + goto redraw; + + } + /* + * Check for a positive number, which signifies that a choice + * should be sought. - FM + */ + if (number > 0) { /* - * Check for a positive number, which signifies - * that a choice should be sought. - FM + * Decrement the number so as to correspond with our cur_choice + * values. - FM */ - if (number > 0) { - /* - * Decrement the number so as to correspond - * with our cur_choice values. - FM - */ - number--; + number--; - /* - * If the number is in range and had no legal - * suffix, select the indicated choice. - FM - */ - if (number <= num_choices && c == '\0') { - cur_choice = number; - cmd = LYK_ACTIVATE; - break; - } + /* + * If the number is in range and had no legal suffix, select + * the indicated choice. - FM + */ + if (number <= num_choices && c == '\0') { + cur_choice = number; + cmd = LYK_ACTIVATE; + break; + } - /* - * Verify that we had a 'g' suffix, - * and act on the number. - FM - */ - if (c == 'g') { - if (cur_choice == number) { - /* - * The choice already is current. - FM - */ - char *msg = 0; - HTSprintf0(&msg, OPTION_ALREADY_CURRENT, (number + 1)); - HTUserMsg(msg); - FREE(msg); - _statusline(popup_status_msg); - break; - } + /* + * Verify that we had a 'g' suffix, and act on the number. - + * FM + */ + if (c == 'g') { + if (cur_choice == number) { + /* + * The choice already is current. - FM + */ + char *msg = 0; - if (number <= num_choices) { - /* - * The number is in range and had a 'g' - * suffix, so make it the current option, - * scrolling if needed. - FM - */ - j = (number - cur_choice); - cur_choice = number; - if ((j > 0) && - (cur_choice - window_offset) >= length) { - window_offset += j; - if (window_offset > (num_choices - length + 1)) - window_offset = (num_choices - length + 1); - } else if ((cur_choice - window_offset) < 0) { - window_offset -= abs(j); - if (window_offset < 0) - window_offset = 0; - } - _statusline(popup_status_msg); - goto redraw; - } + HTSprintf0(&msg, OPTION_ALREADY_CURRENT, (number + 1)); + HTUserMsg(msg); + FREE(msg); + _statusline(popup_status_msg); + break; + } + if (number <= num_choices) { /* - * Not in range. - FM + * The number is in range and had a 'g' suffix, so make + * it the current option, scrolling if needed. - FM */ - HTUserMsg(BAD_OPTION_NUM_ENTERED); + j = (number - cur_choice); + cur_choice = number; + if ((j > 0) && + (cur_choice - window_offset) >= length) { + window_offset += j; + if (window_offset > (num_choices - length + 1)) + window_offset = (num_choices - length + 1); + } else if ((cur_choice - window_offset) < 0) { + window_offset -= abs(j); + if (window_offset < 0) + window_offset = 0; + } + _statusline(popup_status_msg); + goto redraw; } + + /* + * Not in range. - FM + */ + HTUserMsg(BAD_OPTION_NUM_ENTERED); } + } - /* - * Restore the popup statusline. - FM - */ - _statusline(popup_status_msg); - break; + /* + * Restore the popup statusline. - FM + */ + _statusline(popup_status_msg); + break; + + case LYK_PREV_LINK: + case LYK_LPOS_PREV_LINK: + case LYK_FASTBACKW_LINK: + case LYK_UP_LINK: - case LYK_PREV_LINK: - case LYK_LPOS_PREV_LINK: - case LYK_FASTBACKW_LINK: - case LYK_UP_LINK: + if (cur_choice > 0) + cur_choice--; - if (cur_choice > 0) - cur_choice--; + /* + * Scroll the window up if necessary. + */ + if ((cur_choice - window_offset) < 0) { + window_offset--; + goto redraw; + } + break; + + case LYK_NEXT_LINK: + case LYK_LPOS_NEXT_LINK: + case LYK_FASTFORW_LINK: + case LYK_DOWN_LINK: + if (cur_choice < num_choices) + cur_choice++; + /* + * Scroll the window down if necessary + */ + if ((cur_choice - window_offset) >= length) { + window_offset++; + goto redraw; + } + break; + + case LYK_NEXT_PAGE: + /* + * Okay, are we on the last page of the list? If not then, + */ + if (window_offset != (num_choices - length + 1)) { /* - * Scroll the window up if necessary. + * Modify the current choice to not be a coordinate in the + * list, but a coordinate on the item selected in the window. */ - if ((cur_choice - window_offset) < 0) { - window_offset--; - goto redraw; - } - break; - - case LYK_NEXT_LINK: - case LYK_LPOS_NEXT_LINK: - case LYK_FASTFORW_LINK: - case LYK_DOWN_LINK: - if (cur_choice < num_choices) - cur_choice++; + cur_choice -= window_offset; /* - * Scroll the window down if necessary + * Page down the proper length for the list. If simply to far, + * back up. */ - if ((cur_choice - window_offset) >= length) { - window_offset++; - goto redraw; + window_offset += length; + if (window_offset > (num_choices - length)) { + window_offset = (num_choices - length + 1); } - break; - case LYK_NEXT_PAGE: /* - * Okay, are we on the last page of the list? - * If not then, + * Readjust the current selection to be a list coordinate + * rather than window. Redraw this thing. */ - if (window_offset != (num_choices - length + 1)) { - /* - * Modify the current choice to not be a - * coordinate in the list, but a coordinate - * on the item selected in the window. - */ - cur_choice -= window_offset; + cur_choice += window_offset; + goto redraw; + } else if (cur_choice < num_choices) { + /* + * Already on last page of the list so just redraw it with the + * last item selected. + */ + cur_choice = num_choices; + } + break; - /* - * Page down the proper length for the list. - * If simply to far, back up. - */ - window_offset += length; - if (window_offset > (num_choices - length)) { - window_offset = (num_choices - length + 1); - } + case LYK_PREV_PAGE: + /* + * Are we on the first page of the list? If not then, + */ + if (window_offset != 0) { + /* + * Modify the current selection to not be a list coordinate, + * but a window coordinate. + */ + cur_choice -= window_offset; - /* - * Readjust the current selection to be a - * list coordinate rather than window. - * Redraw this thing. - */ - cur_choice += window_offset; - goto redraw; - } - else if (cur_choice < num_choices) { - /* - * Already on last page of the list so just - * redraw it with the last item selected. - */ - cur_choice = num_choices; + /* + * Page up the proper length. If too far, back up. + */ + window_offset -= length; + if (window_offset < 0) { + window_offset = 0; } - break; - case LYK_PREV_PAGE: /* - * Are we on the first page of the list? - * If not then, + * Readjust the current choice. */ - if (window_offset != 0) { - /* - * Modify the current selection to not be a - * list coordinate, but a window coordinate. - */ - cur_choice -= window_offset; + cur_choice += window_offset; + goto redraw; + } else if (cur_choice > 0) { + /* + * Already on the first page so just back up to the first item. + */ + cur_choice = 0; + } + break; - /* - * Page up the proper length. - * If too far, back up. - */ - window_offset -= length; - if (window_offset < 0) { - window_offset = 0; - } + case LYK_HOME: + cur_choice = 0; + if (window_offset > 0) { + window_offset = 0; + goto redraw; + } + break; - /* - * Readjust the current choice. - */ - cur_choice += window_offset; - goto redraw; - } else if (cur_choice > 0) { - /* - * Already on the first page so just - * back up to the first item. - */ - cur_choice = 0; - } - break; + case LYK_END: + cur_choice = num_choices; + if (window_offset != (num_choices - length + 1)) { + window_offset = (num_choices - length + 1); + goto redraw; + } + break; + + case LYK_DOWN_TWO: + cur_choice += 2; + if (cur_choice > num_choices) + cur_choice = num_choices; + + /* + * Scroll the window down if necessary. + */ + if ((cur_choice - window_offset) >= length) { + window_offset += 2; + if (window_offset > (num_choices - length + 1)) + window_offset = (num_choices - length + 1); + goto redraw; + } + break; - case LYK_HOME: + case LYK_UP_TWO: + cur_choice -= 2; + if (cur_choice < 0) cur_choice = 0; - if (window_offset > 0) { + + /* + * Scroll the window up if necessary. + */ + if ((cur_choice - window_offset) < 0) { + window_offset -= 2; + if (window_offset < 0) window_offset = 0; - goto redraw; - } - break; + goto redraw; + } + break; - case LYK_END: + case LYK_DOWN_HALF: + cur_choice += (length / 2); + if (cur_choice > num_choices) cur_choice = num_choices; - if (window_offset != (num_choices - length + 1)) { + + /* + * Scroll the window down if necessary. + */ + if ((cur_choice - window_offset) >= length) { + window_offset += (length / 2); + if (window_offset > (num_choices - length + 1)) window_offset = (num_choices - length + 1); - goto redraw; - } - break; + goto redraw; + } + break; - case LYK_DOWN_TWO: - cur_choice += 2; - if (cur_choice > num_choices) - cur_choice = num_choices; + case LYK_UP_HALF: + cur_choice -= (length / 2); + if (cur_choice < 0) + cur_choice = 0; - /* - * Scroll the window down if necessary. - */ - if ((cur_choice - window_offset) >= length) { - window_offset += 2; - if (window_offset > (num_choices - length + 1)) - window_offset = (num_choices - length + 1); - goto redraw; - } - break; + /* + * Scroll the window up if necessary. + */ + if ((cur_choice - window_offset) < 0) { + window_offset -= (length / 2); + if (window_offset < 0) + window_offset = 0; + goto redraw; + } + break; - case LYK_UP_TWO: - cur_choice -= 2; - if (cur_choice < 0) - cur_choice = 0; + case LYK_REFRESH: + lynx_force_repaint(); + LYrefresh(); + break; + case LYK_NEXT: + if (recall && *prev_target_buffer == '\0') { /* - * Scroll the window up if necessary. + * We got a 'n'ext command with no prior query specified within + * the popup window. See if one was entered when the popup was + * retracted, and if so, assume that's what's wanted. Note + * that it will become the default within popups, unless + * another is entered within a popup. If the within popup + * default is to be changed at that point, use WHEREIS ('/') + * and enter it, or the up- or down-arrow keys to seek any of + * the previously entered queries, regardless of whether they + * were entered within or outside of a popup window. - FM */ - if ((cur_choice - window_offset) < 0) { - window_offset -= 2; - if (window_offset < 0) - window_offset = 0; - goto redraw; + if ((cp = (char *) HTList_objectAt(search_queries, + 0)) != NULL) { + LYstrncpy(prev_target_buffer, + cp, + sizeof(prev_target_buffer) - 1); + QueryNum = 0; + FirstRecall = FALSE; } - break; - - case LYK_DOWN_HALF: - cur_choice += (length/2); - if (cur_choice > num_choices) - cur_choice = num_choices; - - /* - * Scroll the window down if necessary. - */ - if ((cur_choice - window_offset) >= length) { - window_offset += (length/2); - if (window_offset > (num_choices - length + 1)) - window_offset = (num_choices - length + 1); - goto redraw; + } + strcpy(prev_target, prev_target_buffer); + /* FALLTHRU */ + case LYK_WHEREIS: + if (*prev_target == '\0') { + _statusline(ENTER_WHEREIS_QUERY); + if ((ch = LYgetstr(prev_target, VISIBLE, + sizeof(prev_target_buffer), + recall)) < 0) { + /* + * User cancelled the search via ^G. - FM + */ + HTInfoMsg(CANCELLED); + goto restore_popup_statusline; } - break; - - case LYK_UP_HALF: - cur_choice -= (length/2); - if (cur_choice < 0) - cur_choice = 0; + } + check_recall: + if (*prev_target == '\0' && + !(recall && (ch == UPARROW || ch == DNARROW))) { /* - * Scroll the window up if necessary. + * No entry. Simply break. - FM */ - if ((cur_choice - window_offset) < 0) { - window_offset -= (length/2); - if (window_offset < 0) - window_offset = 0; - goto redraw; - } - break; - - case LYK_REFRESH: - lynx_force_repaint(); - LYrefresh(); - break; + HTInfoMsg(CANCELLED); + goto restore_popup_statusline; + } - case LYK_NEXT: - if (recall && *prev_target_buffer == '\0') { + if (recall && ch == UPARROW) { + if (FirstRecall) { /* - * We got a 'n'ext command with no prior query - * specified within the popup window. See if - * one was entered when the popup was retracted, - * and if so, assume that's what's wanted. Note - * that it will become the default within popups, - * unless another is entered within a popup. If - * the within popup default is to be changed at - * that point, use WHEREIS ('/') and enter it, - * or the up- or down-arrow keys to seek any of - * the previously entered queries, regardless of - * whether they were entered within or outside - * of a popup window. - FM + * Use the current string or last query in the list. - FM */ - if ((cp = (char *)HTList_objectAt(search_queries, - 0)) != NULL) { - LYstrncpy(prev_target_buffer, cp, sizeof(prev_target_buffer) - 1); + FirstRecall = FALSE; + if (*prev_target_buffer) { + for (QueryNum = (QueryTotal - 1); + QueryNum > 0; QueryNum--) { + if ((cp = (char *) HTList_objectAt(search_queries, + QueryNum)) + != NULL && + !strcmp(prev_target_buffer, cp)) { + break; + } + } + } else { QueryNum = 0; - FirstRecall = FALSE; } + } else { + /* + * Go back to the previous query in the list. - FM + */ + QueryNum++; } - strcpy(prev_target, prev_target_buffer); - /* FALLTHRU */ - case LYK_WHEREIS: - if (*prev_target == '\0' ) { - _statusline(ENTER_WHEREIS_QUERY); + if (QueryNum >= QueryTotal) { + /* + * Roll around to the last query in the list. - FM + */ + QueryNum = 0; + } + if ((cp = (char *) HTList_objectAt(search_queries, + QueryNum)) != NULL) { + LYstrncpy(prev_target, cp, sizeof(prev_target) - 1); + if (*prev_target_buffer && + !strcmp(prev_target_buffer, prev_target)) { + _statusline(EDIT_CURRENT_QUERY); + } else if ((*prev_target_buffer && QueryTotal == 2) || + (!(*prev_target_buffer) && + QueryTotal == 1)) { + _statusline(EDIT_THE_PREV_QUERY); + } else { + _statusline(EDIT_A_PREV_QUERY); + } if ((ch = LYgetstr(prev_target, VISIBLE, - sizeof(prev_target_buffer), - recall)) < 0) { + sizeof(prev_target_buffer), recall)) < 0) { /* - * User cancelled the search via ^G. - FM + * User cancelled the search via ^G. - FM */ HTInfoMsg(CANCELLED); goto restore_popup_statusline; } + goto check_recall; } - -check_recall: - if (*prev_target == '\0' && - !(recall && (ch == UPARROW || ch == DNARROW))) { + } else if (recall && ch == DNARROW) { + if (FirstRecall) { /* - * No entry. Simply break. - FM + * Use the current string or first query in the list. - FM */ - HTInfoMsg(CANCELLED); - goto restore_popup_statusline; - } - - if (recall && ch == UPARROW) { - if (FirstRecall) { - /* - * Use the current string or - * last query in the list. - FM - */ - FirstRecall = FALSE; - if (*prev_target_buffer) { - for (QueryNum = (QueryTotal - 1); - QueryNum > 0; QueryNum--) { - if ((cp = (char *)HTList_objectAt( - search_queries, - QueryNum)) != NULL && - !strcmp(prev_target_buffer, cp)) { - break; - } - } - } else { - QueryNum = 0; - } - } else { - /* - * Go back to the previous query in the list. - FM - */ - QueryNum++; - } - if (QueryNum >= QueryTotal) { - /* - * Roll around to the last query in the list. - FM - */ - QueryNum = 0; - } - if ((cp = (char *)HTList_objectAt(search_queries, - QueryNum)) != NULL) { - LYstrncpy(prev_target, cp, sizeof(prev_target) - 1); - if (*prev_target_buffer && - !strcmp(prev_target_buffer, prev_target)) { - _statusline(EDIT_CURRENT_QUERY); - } else if ((*prev_target_buffer && QueryTotal == 2) || - (!(*prev_target_buffer) && - QueryTotal == 1)) { - _statusline(EDIT_THE_PREV_QUERY); - } else { - _statusline(EDIT_A_PREV_QUERY); - } - if ((ch = LYgetstr(prev_target, VISIBLE, - sizeof(prev_target_buffer), recall)) < 0) { - /* - * User cancelled the search via ^G. - FM - */ - HTInfoMsg(CANCELLED); - goto restore_popup_statusline; - } - goto check_recall; - } - } else if (recall && ch == DNARROW) { - if (FirstRecall) { - /* - * Use the current string or - * first query in the list. - FM - */ - FirstRecall = FALSE; - if (*prev_target_buffer) { - for (QueryNum = 0; - QueryNum < (QueryTotal - 1); QueryNum++) { - if ((cp = (char *)HTList_objectAt( - search_queries, - QueryNum)) != NULL && - !strcmp(prev_target_buffer, cp)) { - break; - } + FirstRecall = FALSE; + if (*prev_target_buffer) { + for (QueryNum = 0; + QueryNum < (QueryTotal - 1); QueryNum++) { + if ((cp = (char *) HTList_objectAt(search_queries, + QueryNum)) + != NULL && + !strcmp(prev_target_buffer, cp)) { + break; } - } else { - QueryNum = (QueryTotal - 1); } } else { - /* - * Advance to the next query in the list. - FM - */ - QueryNum--; - } - if (QueryNum < 0) { - /* - * Roll around to the first query in the list. - FM - */ QueryNum = (QueryTotal - 1); } - if ((cp = (char *)HTList_objectAt(search_queries, - QueryNum)) != NULL) { - LYstrncpy(prev_target, cp, sizeof(prev_target) - 1); - if (*prev_target_buffer && - !strcmp(prev_target_buffer, prev_target)) { - _statusline(EDIT_CURRENT_QUERY); - } else if ((*prev_target_buffer && - QueryTotal == 2) || - (!(*prev_target_buffer) && - QueryTotal == 1)) { - _statusline(EDIT_THE_PREV_QUERY); - } else { - _statusline(EDIT_A_PREV_QUERY); - } - if ((ch = LYgetstr(prev_target, VISIBLE, - sizeof(prev_target_buffer), - recall)) < 0) { - /* - * User cancelled the search via ^G. - FM - */ - HTInfoMsg(CANCELLED); - goto restore_popup_statusline; - } - goto check_recall; - } - } - /* - * Replace the search string buffer with the new target. - FM - */ - strcpy(prev_target_buffer, prev_target); - HTAddSearchQuery(prev_target_buffer); - - /* - * Start search at the next choice. - FM - */ - for (j = 1; Cptr[i+j] != NULL; j++) { - FormatChoiceNum(buffer, max_choices, (i + j), Cptr[i+j]); - if (case_sensitive) { - if (strstr(buffer, prev_target_buffer) != NULL) - break; - } else { - if (LYstrstr(buffer, prev_target_buffer) != NULL) - break; - } - } - if (Cptr[i+j] != NULL) { + } else { /* - * We have a hit, so make that choice the current. - FM + * Advance to the next query in the list. - FM */ - cur_choice += j; + QueryNum--; + } + if (QueryNum < 0) { /* - * Scroll the window down if necessary. + * Roll around to the first query in the list. - FM */ - if ((cur_choice - window_offset) >= length) { - window_offset += j; - if (window_offset > (num_choices - length + 1)) - window_offset = (num_choices - length + 1); - ReDraw = TRUE; + QueryNum = (QueryTotal - 1); + } + if ((cp = (char *) HTList_objectAt(search_queries, + QueryNum)) != NULL) { + LYstrncpy(prev_target, cp, sizeof(prev_target) - 1); + if (*prev_target_buffer && + !strcmp(prev_target_buffer, prev_target)) { + _statusline(EDIT_CURRENT_QUERY); + } else if ((*prev_target_buffer && + QueryTotal == 2) || + (!(*prev_target_buffer) && + QueryTotal == 1)) { + _statusline(EDIT_THE_PREV_QUERY); + } else { + _statusline(EDIT_A_PREV_QUERY); } - goto restore_popup_statusline; + if ((ch = LYgetstr(prev_target, VISIBLE, + sizeof(prev_target_buffer), + recall)) < 0) { + /* + * User cancelled the search via ^G. - FM + */ + HTInfoMsg(CANCELLED); + goto restore_popup_statusline; + } + goto check_recall; } + } + /* + * Replace the search string buffer with the new target. - FM + */ + strcpy(prev_target_buffer, prev_target); + HTAddSearchQuery(prev_target_buffer); + /* + * Start search at the next choice. - FM + */ + for (j = 1; Cptr[i + j] != NULL; j++) { + FormatChoiceNum(buffer, max_choices, (i + j), Cptr[i + j]); + if (case_sensitive) { + if (strstr(buffer, prev_target_buffer) != NULL) + break; + } else { + if (LYstrstr(buffer, prev_target_buffer) != NULL) + break; + } + } + if (Cptr[i + j] != NULL) { /* - * If we started at the beginning, it can't be present. - FM + * We have a hit, so make that choice the current. - FM */ - if (cur_choice == 0) { - HTUserMsg2(STRING_NOT_FOUND, prev_target_buffer); - goto restore_popup_statusline; - } - + cur_choice += j; /* - * Search from the beginning to the current choice. - FM + * Scroll the window down if necessary. */ - for (j = 0; j < cur_choice; j++) { - FormatChoiceNum(buffer, max_choices, (j + 1), Cptr[j]); - if (case_sensitive) { - if (strstr(buffer, prev_target_buffer) != NULL) - break; - } else { - if (LYstrstr(buffer, prev_target_buffer) != NULL) - break; - } - } - if (j < cur_choice) { - /* - * We have a hit, so make that choice the current. - FM - */ - j = (cur_choice - j); - cur_choice -= j; - /* - * Scroll the window up if necessary. - */ - if ((cur_choice - window_offset) < 0) { - window_offset -= j; - if (window_offset < 0) - window_offset = 0; - ReDraw = TRUE; - } - goto restore_popup_statusline; + if ((cur_choice - window_offset) >= length) { + window_offset += j; + if (window_offset > (num_choices - length + 1)) + window_offset = (num_choices - length + 1); + ReDraw = TRUE; } + goto restore_popup_statusline; + } - /* - * Didn't find it in the preceding choices either. - FM - */ + /* + * If we started at the beginning, it can't be present. - FM + */ + if (cur_choice == 0) { HTUserMsg2(STRING_NOT_FOUND, prev_target_buffer); + goto restore_popup_statusline; + } -restore_popup_statusline: + /* + * Search from the beginning to the current choice. - FM + */ + for (j = 0; j < cur_choice; j++) { + FormatChoiceNum(buffer, max_choices, (j + 1), Cptr[j]); + if (case_sensitive) { + if (strstr(buffer, prev_target_buffer) != NULL) + break; + } else { + if (LYstrstr(buffer, prev_target_buffer) != NULL) + break; + } + } + if (j < cur_choice) { /* - * Restore the popup statusline and - * reset the search variables. - FM + * We have a hit, so make that choice the current. - FM */ - _statusline(popup_status_msg); - *prev_target = '\0'; - QueryTotal = (search_queries ? HTList_count(search_queries) - : 0); - recall = ((QueryTotal >= 1) ? RECALL_URL : NORECALL); - QueryNum = QueryTotal; - if (ReDraw == TRUE) { - ReDraw = FALSE; - goto redraw; + j = (cur_choice - j); + cur_choice -= j; + /* + * Scroll the window up if necessary. + */ + if ((cur_choice - window_offset) < 0) { + window_offset -= j; + if (window_offset < 0) + window_offset = 0; + ReDraw = TRUE; } - break; + goto restore_popup_statusline; + } - case LYK_QUIT: - case LYK_ABORT: - case LYK_PREV_DOC: - case LYK_INTERRUPT: - cur_choice = orig_choice; - cmd = LYK_ACTIVATE; /* to exit */ - break; + /* + * Didn't find it in the preceding choices either. - FM + */ + HTUserMsg2(STRING_NOT_FOUND, prev_target_buffer); + + restore_popup_statusline: + /* + * Restore the popup statusline and reset the search variables. - + * FM + */ + _statusline(popup_status_msg); + *prev_target = '\0'; + QueryTotal = (search_queries ? HTList_count(search_queries) + : 0); + recall = ((QueryTotal >= 1) ? RECALL_URL : NORECALL); + QueryNum = QueryTotal; + if (ReDraw == TRUE) { + ReDraw = FALSE; + goto redraw; + } + break; + + case LYK_QUIT: + case LYK_ABORT: + case LYK_PREV_DOC: + case LYK_INTERRUPT: + cur_choice = orig_choice; + cmd = LYK_ACTIVATE; /* to exit */ + break; } } LYstopPopup(); - return(disabled ? orig_choice : cur_choice); + return (disabled ? orig_choice : cur_choice); } #define CurModif MyEdit.current_modifiers -int LYgetstr ( - char * inputline, - int hidden, - size_t bufsize, - RecallType recall) +int LYgetstr(char *inputline, + int hidden, + size_t bufsize, + RecallType recall) { int x, y, MaxStringSize; int ch; @@ -4731,19 +4777,20 @@ int LYgetstr ( int last_xlec = -1; int last_xlkc = -1; EditFieldData MyEdit; + #ifdef SUPPORT_MULTIBYTE_EDIT BOOL refresh_mb = TRUE; #endif /* SUPPORT_MULTIBYTE_EDIT */ LYGetYX(y, x); /* Use screen from cursor position to eol */ MaxStringSize = (bufsize < sizeof(MyEdit.buffer)) ? - (bufsize - 1) : (sizeof(MyEdit.buffer) - 1); - LYSetupEdit(&MyEdit, inputline, MaxStringSize, (LYcols-1)-x); - MyEdit.hidden = (BOOL) hidden ; + (bufsize - 1) : (sizeof(MyEdit.buffer) - 1); + LYSetupEdit(&MyEdit, inputline, MaxStringSize, (LYcols - 1) - x); + MyEdit.hidden = (BOOL) hidden; CTRACE((tfp, "called LYgetstr\n")); for (;;) { -again: + again: #ifndef SUPPORT_MULTIBYTE_EDIT LYRefreshEdit(&MyEdit); #else /* SUPPORT_MULTIBYTE_EDIT */ @@ -4752,26 +4799,26 @@ again: #endif /* SUPPORT_MULTIBYTE_EDIT */ ch = LYReadCmdKey(FOR_PROMPT); #ifdef SUPPORT_MULTIBYTE_EDIT -#ifdef CJK_EX /* for SJIS code */ +#ifdef CJK_EX /* for SJIS code */ if (!refresh_mb - && (EditBinding(ch) != LYE_CHAR)) + && (EditBinding(ch) != LYE_CHAR)) goto again; #else if (!refresh_mb - && (EditBinding(ch) != LYE_CHAR) - && (EditBinding(ch) != LYE_AIX)) + && (EditBinding(ch) != LYE_CHAR) + && (EditBinding(ch) != LYE_AIX)) goto again; #endif #endif /* SUPPORT_MULTIBYTE_EDIT */ if (term_letter || term_options #ifdef VMS - || HadVMSInterrupt + || HadVMSInterrupt #endif /* VMS */ #ifndef DISABLE_NEWS - || term_message + || term_message #endif - ) { + ) { #ifdef VMS HadVMSInterrupt = FALSE; #endif /* VMS */ @@ -4779,10 +4826,10 @@ again: } if (recall != NORECALL && (ch == UPARROW || ch == DNARROW)) { - LYstrncpy(inputline, MyEdit.buffer, (int)bufsize); + LYstrncpy(inputline, MyEdit.buffer, (int) bufsize); LYAddToCloset(recall, MyEdit.buffer); CTRACE((tfp, "LYgetstr(%s) recall\n", inputline)); - return(ch); + return (ch); } ch |= CurModif; CurModif = 0; @@ -4792,7 +4839,7 @@ again: last_xlkc = -1; /* consumed */ } #ifndef WIN_EX - if (LKC_TO_LAC(keymap,ch) == LYK_REFRESH) + if (LKC_TO_LAC(keymap, ch) == LYK_REFRESH) goto again; #endif last_xlec = xlec; @@ -4806,40 +4853,40 @@ again: switch (xlec) { case LYE_SETM1: /* - * Set flag for modifier 1. + * Set flag for modifier 1. */ CurModif |= LKC_MOD1; break; case LYE_SETM2: /* - * Set flag for modifier 2. + * Set flag for modifier 2. */ CurModif |= LKC_MOD2; break; case LYE_TAB: if (xlec == last_xlec && recall != NORECALL) { HTList *list = whichRecall(recall); + if (!HTList_isEmpty(list)) { - char **data = sortedList(list, (BOOL)(recall == RECALL_CMD)); + char **data = sortedList(list, (BOOL) (recall == RECALL_CMD)); int old_y, old_x; int cur_choice = 0; - int num_options = LYarrayLength((const char **)data); + int num_options = LYarrayLength((const char **) data); while (cur_choice < num_options - && strcasecomp(data[cur_choice], MyEdit.buffer) < 0) + && strcasecomp(data[cur_choice], MyEdit.buffer) < 0) cur_choice++; LYGetYX(old_y, old_x); - cur_choice = LYhandlePopupList( - cur_choice, - 0, - old_x, - (const char **)data, - -1, - -1, - FALSE, - FALSE, - TRUE); + cur_choice = LYhandlePopupList(cur_choice, + 0, + old_x, + (const char **) data, + -1, + -1, + FALSE, + FALSE, + TRUE); if (cur_choice >= 0) { if (recall == RECALL_CMD) _statusline(": "); @@ -4853,35 +4900,34 @@ again: } break; -#ifndef CJK_EX /* 1997/11/03 (Mon) 20:13:45 */ +#ifndef CJK_EX /* 1997/11/03 (Mon) 20:13:45 */ 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. + * 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. */ if (ch != '\t' && (HTCJK != NOCJK || - LYlowest_eightbit[current_char_set] <= 0x97)) - { - LYLineEdit(&MyEdit,ch, FALSE); + LYlowest_eightbit[current_char_set] <= 0x97)) { + LYLineEdit(&MyEdit, ch, FALSE); break; } /* FALLTHRU */ #endif case LYE_ENTER: /* - * Terminate the string and return. + * Terminate the string and return. */ - LYstrncpy(inputline, MyEdit.buffer, (int)bufsize); + LYstrncpy(inputline, MyEdit.buffer, (int) bufsize); if (!hidden) LYAddToCloset(recall, MyEdit.buffer); CTRACE((tfp, "LYgetstr(%s) LYE_ENTER\n", inputline)); - return(ch); + return (ch); #ifdef CAN_CUT_AND_PASTE - /* 1998/10/01 (Thu) 15:05:49 */ + /* 1998/10/01 (Thu) 15:05:49 */ case LYE_PASTE: { @@ -4897,12 +4943,16 @@ again: unsigned char *e1 = s; while (e1 < e) { - if (*e1 < ' ') { /* Stop here? */ + if (*e1 < ' ') { /* Stop here? */ if (e1 > s) LYEditInsert(&MyEdit, s, e1 - s, map_active, TRUE); s = e1; - if (*e1 == '\t') { /* Replace by space */ - LYEditInsert(&MyEdit, (unsigned char * ) " ", 1, map_active, TRUE); + if (*e1 == '\t') { /* Replace by space */ + LYEditInsert(&MyEdit, + (unsigned char *) " ", + 1, + map_active, + TRUE); s = ++e1; } else break; @@ -4919,54 +4969,51 @@ again: case LYE_ABORT: /* - * Control-C or Control-G aborts. + * Control-C or Control-G aborts. */ inputline[0] = '\0'; CTRACE((tfp, "LYgetstr LYE_ABORT\n")); - return(-1); + return (-1); case LYE_STOP: /* - * Deactivate. + * Deactivate. */ CTRACE((tfp, "LYgetstr LYE_STOP\n")); #ifdef TEXTFIELDS_MAY_NEED_ACTIVATION textfields_need_activation = TRUE; - return(-1); + return (-1); #else #ifdef ENHANCED_LINEEDIT if (Mark >= 0) - Mark = -1 - Mark; /* Disable it */ + Mark = -1 - Mark; /* Disable it */ #endif #endif break; case LYE_LKCMD: /* - * Used only in form_getstr() for invoking - * the LYK_F_LINK_NUM prompt when in form - * text fields. - FM + * Used only in form_getstr() for invoking the LYK_F_LINK_NUM + * prompt when in form text fields. - FM */ break; case LYE_FORM_PASS: /* - * Used in form_getstr() to end line editing and - * pass on the input char/lynxkeycode. Here it - * is just ignored. - kw + * Used in form_getstr() to end line editing and pass on the input + * char/lynxkeycode. Here it is just ignored. - kw */ break; default: if (xlec & LYE_FORM_LAC) { /* - * Used in form_getstr() to end line editing and - * pass on the lynxkeycode already containing a - * lynxactioncode. Here it is just ignored. - kw + * Used in form_getstr() to end line editing and pass on the + * lynxkeycode already containing a lynxactioncode. Here it is + * just ignored. - kw */ break; } - #ifndef SUPPORT_MULTIBYTE_EDIT LYLineEdit(&MyEdit, ch, FALSE); #else /* SUPPORT_MULTIBYTE_EDIT */ @@ -4985,11 +5032,12 @@ again: } } -const char * LYLineeditHelpURL (void) +const char *LYLineeditHelpURL(void) { static int lasthelp_lineedit = -1; static char helpbuf[LY_MAXPATH] = "\0"; static char *phelp = &helpbuf[0]; + if (lasthelp_lineedit == current_lineedit) return &helpbuf[0]; if (lasthelp_lineedit == -1) { @@ -5009,83 +5057,79 @@ const char * LYLineeditHelpURL (void) } /* - * A replacement for 'strsep()' + * A replacement for 'strsep()' */ -char *LYstrsep ( - char ** stringp, - const char * delim) +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 */ + if (isEmpty(stringp)) /* nothing to do? */ + return 0; /* then don't fall on our faces */ - out = *stringp; /* save the start of the string */ + 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 */ + *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; } /* - * 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 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. */ -char * LYstrstr ( - char * chptr, - const char * tarptr) +char *LYstrstr(char *chptr, + const char *tarptr) { int len = strlen(tarptr); - for(; *chptr != '\0'; chptr++) { + for (; *chptr != '\0'; chptr++) { if (0 == UPPER8(*chptr, *tarptr)) { - if (0 == strncasecomp8(chptr+1, tarptr+1, len-1)) - return(chptr); + if (0 == strncasecomp8(chptr + 1, tarptr + 1, len - 1)) + return (chptr); } - } /* end for */ + } /* end for */ - return(NULL); /* string not found or initial chptr was empty */ + return (NULL); /* string not found or initial chptr was empty */ } /* - * 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 + * 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. - * It is a case insensitive search. + * It is a case insensitive search. */ -char * LYno_attr_char_case_strstr ( - char * chptr, - char * tarptr) +char *LYno_attr_char_case_strstr(char *chptr, + char *tarptr) { register char *tmpchptr, *tmptarptr; if (!chptr) - return(NULL); + return (NULL); while (IsSpecialAttrChar(*chptr) && *chptr != '\0') chptr++; for (; *chptr != '\0'; chptr++) { - if (0 == UPPER8(*chptr, *tarptr)) { + if (0 == UPPER8(*chptr, *tarptr)) { /* - * See if they line up. + * See if they line up. */ - tmpchptr = chptr+1; - tmptarptr = tarptr+1; + tmpchptr = chptr + 1; + tmptarptr = tarptr + 1; - if (*tmptarptr == '\0') /* one char target */ - return(chptr); + if (*tmptarptr == '\0') /* one char target */ + return (chptr); while (1) { if (!IsSpecialAttrChar(*tmpchptr)) { @@ -5097,35 +5141,34 @@ char * LYno_attr_char_case_strstr ( tmpchptr++; } if (*tmptarptr == '\0') - return(chptr); + return (chptr); if (*tmpchptr == '\0') break; } } - } /* end for */ + } /* end for */ - return(NULL); + return (NULL); } /* - * 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 + * 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. - * It is a case sensitive search. + * It is a case sensitive search. */ -char * LYno_attr_char_strstr ( - char * chptr, - char * tarptr) +char *LYno_attr_char_strstr(char *chptr, + char *tarptr) { register char *tmpchptr, *tmptarptr; if (!chptr) - return(NULL); + return (NULL); while (IsSpecialAttrChar(*chptr) && *chptr != '\0') chptr++; @@ -5133,45 +5176,46 @@ char * LYno_attr_char_strstr ( for (; *chptr != '\0'; chptr++) { if ((*chptr) == (*tarptr)) { /* - * See if they line up. + * See if they line up. */ tmpchptr = chptr + 1; tmptarptr = tarptr + 1; - if (*tmptarptr == '\0') /* one char target */ - return(chptr); + if (*tmptarptr == '\0') /* one char target */ + return (chptr); while (1) { - if (!IsSpecialAttrChar(*tmpchptr)) { + if (!IsSpecialAttrChar(*tmpchptr)) { if ((*tmpchptr) != (*tmptarptr)) break; tmpchptr++; tmptarptr++; - } else { + } else { tmpchptr++; - } - if (*tmptarptr == '\0') - return(chptr); - if (*tmpchptr == '\0') - break; + } + if (*tmptarptr == '\0') + return (chptr); + if (*tmpchptr == '\0') + break; } } - } /* end for */ + } /* end for */ - return(NULL); + return (NULL); } /* * 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 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. - * These lengths count glyph cells if count_gcells is set. (Full-width - * characters in CJK mode count as two.) Normally that's what we want. - * They count actual glyphs if count_gcells is unset. (Full-width - * characters in CJK mode count as one.) + * pointed to by tarptr in the string pointed to by chptr. 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. + * + * These lengths count glyph cells if count_gcells is set. (Full-width + * characters in CJK mode count as two.) Normally that's what we want. They + * 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 @@ -5179,15 +5223,14 @@ char * LYno_attr_char_strstr ( * LY_SOFT_HYPHEN * if present in chptr. * It assumes UTF8 if utf_flag is set. - * It is a case insensitive search. - KW & FM + * It is a case insensitive search. - KW & FM */ -char * LYno_attr_mbcs_case_strstr ( - char * chptr, - const char * tarptr, - BOOL utf_flag, - BOOL count_gcells, - int * nstartp, - int * nendp) +char *LYno_attr_mbcs_case_strstr(char *chptr, + const char *tarptr, + BOOL utf_flag, + BOOL count_gcells, + int *nstartp, + int *nendp) { char *tmpchptr; const char *tmptarptr; @@ -5195,16 +5238,16 @@ char * LYno_attr_mbcs_case_strstr ( int offset; if (!(chptr && tarptr)) - return(NULL); + return (NULL); /* - * Skip initial IsSpecial chars. - FM + * Skip initial IsSpecial chars. - FM */ while (IsSpecialAttrChar(*chptr) && *chptr != '\0') chptr++; /* - * Seek a first target match. - FM + * Seek a first target match. - FM */ for (; *chptr != '\0'; chptr++) { if ((!utf_flag && HTCJK != NOCJK && is8bits(*chptr) && @@ -5213,57 +5256,64 @@ char * LYno_attr_mbcs_case_strstr ( !IsSpecialAttrChar(*(chptr + 1))) || (0 == UPPER8(*chptr, *tarptr))) { int tarlen = 0; + offset = len; len++; /* - * See if they line up. + * See if they line up. */ tmpchptr = (chptr + 1); tmptarptr = (tarptr + 1); if (*tmptarptr == '\0') { /* - * One char target. + * One char target. */ - if (nstartp) *nstartp = offset; - if (nendp) *nendp = len; - return(chptr); + if (nstartp) + *nstartp = offset; + if (nendp) + *nendp = len; + return (chptr); } if (!utf_flag && HTCJK != NOCJK && is8bits(*chptr) && - *chptr == *tarptr && - *tmpchptr != '\0' && - !IsSpecialAttrChar(*tmpchptr)) { + *chptr == *tarptr && + *tmpchptr != '\0' && + !IsSpecialAttrChar(*tmpchptr)) { /* - * Check the CJK multibyte. - FM + * Check the CJK multibyte. - FM */ if (*tmpchptr == *tmptarptr) { /* - * It's a match. Advance to next char. - FM + * It's a match. Advance to next char. - FM */ tmpchptr++; tmptarptr++; - if (count_gcells) tarlen++; + if (count_gcells) + tarlen++; if (*tmptarptr == '\0') { /* - * One character match. - FM + * One character match. - FM */ - if (nstartp) *nstartp = offset; - if (nendp) *nendp = len + tarlen; - return(chptr); + 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 + * It's not a match, so go back to seeking a first target + * match. - FM */ chptr++; - if (count_gcells) len++; + if (count_gcells) + len++; continue; } } /* - * See if the rest of the target matches. - FM + * See if the rest of the target matches. - FM */ while (1) { if (!IsSpecialAttrChar(*tmpchptr)) { @@ -5273,7 +5323,8 @@ char * LYno_attr_mbcs_case_strstr ( !IsSpecialAttrChar(*(tmpchptr + 1))) { tmpchptr++; tmptarptr++; - if (count_gcells) tarlen++; + if (count_gcells) + tarlen++; } else { break; } @@ -5292,39 +5343,45 @@ char * LYno_attr_mbcs_case_strstr ( } if (*tmptarptr == '\0') { - if (nstartp) *nstartp = offset; - if (nendp) *nendp = len + tarlen; - return(chptr); + if (nstartp) + *nstartp = offset; + if (nendp) + *nendp = len + tarlen; + return (chptr); } if (*tmpchptr == '\0') break; } } else if (!(IS_UTF_EXTRA(*chptr) || - IsSpecialAttrChar(*chptr))) { + IsSpecialAttrChar(*chptr))) { if (!utf_flag && HTCJK != NOCJK && is8bits(*chptr) && *(chptr + 1) != '\0' && !IsSpecialAttrChar(*(chptr + 1))) { chptr++; - if (count_gcells) len++; + if (count_gcells) + len++; } len++; } - } /* end for */ + } /* end for */ - return(NULL); + return (NULL); } /* - * LYno_attr_mbcs_strstr will find the first occurrence of the string - * pointed to by tarptr in the string pointed to by chptr. - * It takes account of CJK and MultiByte Character Sequences (UTF8). - * The physical lengths of the displayed string up to the start and - * end (= next position after) the target string are returned in *nstartp - * and *nendp if the search is successful. - * These lengths count glyph cells if count_gcells is set. (Full-width - * characters in CJK mode count as two.) Normally that's what we want. - * They count actual glyphs if count_gcells is unset. (Full-width - * characters in CJK mode count as one.) + * LYno_attr_mbcs_strstr will find the first occurrence of the string pointed + * to by tarptr in the string pointed to by chptr. + * + * It takes account of CJK and MultiByte Character Sequences (UTF8). The + * physical lengths of the displayed string up to the start and end (= next + * position after) the target string are returned in *nstartp and *nendp if the + * search is successful. + * + * These lengths count glyph cells if count_gcells is set. (Full-width + * characters in CJK mode count as two.) Normally that's what we want. They + * 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 @@ -5332,15 +5389,14 @@ char * LYno_attr_mbcs_case_strstr ( * LY_SOFT_HYPHEN * if present in chptr. * It assumes UTF8 if utf_flag is set. - * It is a case sensitive search. - KW & FM + * It is a case sensitive search. - KW & FM */ -char * LYno_attr_mbcs_strstr ( - char * chptr, - const char * tarptr, - BOOL utf_flag, - BOOL count_gcells, - int * nstartp, - int * nendp) +char *LYno_attr_mbcs_strstr(char *chptr, + const char *tarptr, + BOOL utf_flag, + BOOL count_gcells, + int *nstartp, + int *nendp) { char *tmpchptr; const char *tmptarptr; @@ -5348,80 +5404,88 @@ char * LYno_attr_mbcs_strstr ( int offset; if (!(chptr && tarptr)) - return(NULL); + return (NULL); /* - * Skip initial IsSpecial chars. - FM + * Skip initial IsSpecial chars. - FM */ while (IsSpecialAttrChar(*chptr) && *chptr != '\0') chptr++; /* - * Seek a first target match. - FM + * Seek a first target match. - FM */ for (; *chptr != '\0'; chptr++) { if ((*chptr) == (*tarptr)) { int tarlen = 0; + offset = len; len++; /* - * See if they line up. + * See if they line up. */ tmpchptr = (chptr + 1); tmptarptr = (tarptr + 1); if (*tmptarptr == '\0') { /* - * One char target. + * One char target. */ - if (nstartp) *nstartp = offset; - if (nendp) *nendp = len; - return(chptr); + if (nstartp) + *nstartp = offset; + if (nendp) + *nendp = len; + return (chptr); } if (!utf_flag && HTCJK != NOCJK && is8bits(*chptr) && - *tmpchptr != '\0' && - !IsSpecialAttrChar(*tmpchptr)) { + *tmpchptr != '\0' && + !IsSpecialAttrChar(*tmpchptr)) { /* - * Check the CJK multibyte. - FM + * Check the CJK multibyte. - FM */ if (*tmpchptr == *tmptarptr) { /* - * It's a match. Advance to next char. - FM + * It's a match. Advance to next char. - FM */ tmpchptr++; tmptarptr++; - if (count_gcells) tarlen++; + if (count_gcells) + tarlen++; if (*tmptarptr == '\0') { /* - * One character match. - FM + * One character match. - FM */ - if (nstartp) *nstartp = offset; - if (nendp) *nendp = len + tarlen; - return(chptr); + 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 + * It's not a match, so go back to seeking a first target + * match. - FM */ chptr++; - if (count_gcells) len++; + if (count_gcells) + len++; continue; } } /* - * See if the rest of the target matches. - FM + * See if the rest of the target matches. - FM */ while (1) { - if (!IsSpecialAttrChar(*tmpchptr)) { + if (!IsSpecialAttrChar(*tmpchptr)) { if (!utf_flag && HTCJK != NOCJK && is8bits(*tmpchptr)) { if (*tmpchptr == *tmptarptr && *(tmpchptr + 1) == *(tmptarptr + 1) && !IsSpecialAttrChar(*(tmpchptr + 1))) { tmpchptr++; tmptarptr++; - if (count_gcells) tarlen++; + if (count_gcells) + tarlen++; } else { break; } @@ -5434,76 +5498,80 @@ char * LYno_attr_mbcs_strstr ( } tmpchptr++; tmptarptr++; - } else { + } else { tmpchptr++; - } + } - if (*tmptarptr == '\0') { - if (nstartp) *nstartp = offset; - if (nendp) *nendp = len + tarlen; - return(chptr); - } + if (*tmptarptr == '\0') { + if (nstartp) + *nstartp = offset; + if (nendp) + *nendp = len + tarlen; + return (chptr); + } if (*tmpchptr == '\0') - break; + break; } } else if (!(IS_UTF_EXTRA(*chptr) || - IsSpecialAttrChar(*chptr))) { + IsSpecialAttrChar(*chptr))) { if (!utf_flag && HTCJK != NOCJK && is8bits(*chptr) && *(chptr + 1) != '\0' && !IsSpecialAttrChar(*(chptr + 1))) { chptr++; - if (count_gcells) len++; + if (count_gcells) + len++; } len++; } - } /* end for */ + } /* end for */ - return(NULL); + return (NULL); } /* - * Allocate a new copy of a string, and returns it. + * Allocate a new copy of a string, and returns it. */ -char * SNACopy ( - char ** dest, - const char * src, - int n) +char *SNACopy(char **dest, + const char *src, + int n) { FREE(*dest); if (src) { *dest = typeMallocn(char, n + 1); + if (*dest == NULL) { CTRACE((tfp, "Tried to malloc %d bytes\n", n)); outofmem(__FILE__, "SNACopy"); } - strncpy (*dest, src, n); - *(*dest + n) = '\0'; /* terminate */ + strncpy(*dest, src, n); + *(*dest + n) = '\0'; /* terminate */ } return *dest; } /* - * String Allocate and Concatenate. + * String Allocate and Concatenate. */ -char * SNACat ( - char ** dest, - const char * src, - int n) +char *SNACat(char **dest, + const char *src, + int n) { if (non_empty(src)) { if (*dest) { int length = strlen(*dest); - *dest = (char *)realloc(*dest, length + n + 1); + + *dest = (char *) realloc(*dest, length + n + 1); if (*dest == NULL) outofmem(__FILE__, "SNACat"); strncpy(*dest + length, src, n); - *(*dest + length + n) = '\0'; /* terminate */ + *(*dest + length + n) = '\0'; /* terminate */ } else { *dest = typeMallocn(char, n + 1); + if (*dest == NULL) outofmem(__FILE__, "SNACat"); memcpy(*dest, src, n); - (*dest)[n] = '\0'; /* terminate */ + (*dest)[n] = '\0'; /* terminate */ } } return *dest; @@ -5515,53 +5583,53 @@ char * SNACat ( * Returns lowercase equivalent for unicode, * transparent output if no equivalent found. */ -static long UniToLowerCase (long upper) +static long UniToLowerCase(long upper) { size_t i, high, low; long diff = 0; /* - * Make check for sure. + * Make check for sure. */ if (upper <= 0) - return(upper); + return (upper); /* - * Try unicode_to_lower_case[]. + * Try unicode_to_lower_case[]. */ low = 0; high = TABLESIZE(unicode_to_lower_case); while (low < high) { /* - ** Binary search. - */ - i = (low + (high-low)/2); + * Binary search. + */ + i = (low + (high - low) / 2); diff = (unicode_to_lower_case[i].upper - upper); if (diff < 0) - low = i+1; + low = i + 1; if (diff > 0) high = i; if (diff == 0) return (unicode_to_lower_case[i].lower); } - return(upper); /* if we came here */ + return (upper); /* if we came here */ } /* -** UPPER8 ? -** it was "TOUPPER(a) - TOUPPER(b)" in its previous life... -** -** It was realized that case-insensitive user search -** got information about upper/lower mapping from TOUPPER -** (precisely from "(TOUPPER(a) - TOUPPER(b))==0") -** and depends on locale in its 8bit mapping. - -** Usually fails with DOS/WINDOWS display charsets -** as well as on non-UNIX systems. -** -** So use unicode case mapping. -*/ -int UPPER8 (int ch1, int ch2) + * UPPER8 ? + * it was "TOUPPER(a) - TOUPPER(b)" in its previous life... + * + * It was realized that case-insensitive user search + * got information about upper/lower mapping from TOUPPER + * (precisely from "(TOUPPER(a) - TOUPPER(b))==0") + * and depends on locale in its 8bit mapping. - + * Usually fails with DOS/WINDOWS display charsets + * as well as on non-UNIX systems. + * + * So use unicode case mapping. + */ +int UPPER8(int ch1, int ch2) { /* if they are the same or one is a null characters return immediately. */ if (ch1 == ch2) @@ -5573,26 +5641,25 @@ int UPPER8 (int ch1, int ch2) /* case-insensitive match for us-ascii */ if (UCH(TOASCII(ch1)) < 128 && UCH(TOASCII(ch2)) < 128) - return(TOUPPER(ch1) - TOUPPER(ch2)); + 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 (UCH(TOASCII(ch1)) > 127 && /* S/390 -- gil -- 2066 */ + UCH(TOASCII(ch2)) > 127) { if (DisplayCharsetMatchLocale) - return(TOUPPER(ch1) - TOUPPER(ch2)); /* old-style */ - else - { - long uni_ch2 = UCTransToUni((char)ch2, current_char_set); + return (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(UniToLowerCase(uni_ch1) - UniToLowerCase(uni_ch2)); + uni_ch1 = UCTransToUni((char) ch1, current_char_set); + return (UniToLowerCase(uni_ch1) - UniToLowerCase(uni_ch2)); } } - return(-10); /* mismatch, if we come to here */ + return (-10); /* mismatch, if we come to here */ } /* @@ -5600,9 +5667,8 @@ 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, - FILE * fp) +char *LYSafeGets(char **src, + FILE *fp) { char buffer[BUFSIZ]; char *result = 0; @@ -5622,9 +5688,8 @@ char *LYSafeGets ( FREE(result); } else if (feof(fp) && result && *result == '\0') { /* - * If the file ends in the middle of a line, return the - * partial line; if another call is made after this, it - * will return NULL. - kw + * If the file ends in the middle of a line, return the partial line; + * if another call is made after this, it will return NULL. - kw */ FREE(result); } @@ -5637,9 +5702,8 @@ char *LYSafeGets ( static FILE *cmd_logfile; static FILE *cmd_script; -void LYOpenCmdLogfile ( - int argc, - char ** argv) +void LYOpenCmdLogfile(int argc, + char **argv) { int n; @@ -5647,7 +5711,7 @@ void LYOpenCmdLogfile ( cmd_logfile = LYNewTxtFile(lynx_cmd_logfile); if (cmd_logfile != 0) { fprintf(cmd_logfile, "# Command logfile created by %s %s (%s)\n", - LYNX_NAME, LYNX_VERSION, LYVersionDate()); + LYNX_NAME, LYNX_VERSION, LYVersionDate()); for (n = 0; n < argc; n++) { fprintf(cmd_logfile, "# Arg%d = %s\n", n, argv[n]); } @@ -5655,12 +5719,12 @@ void LYOpenCmdLogfile ( } } -BOOL LYHaveCmdScript (void) +BOOL LYHaveCmdScript(void) { - return (BOOL)(cmd_script != 0); + return (BOOL) (cmd_script != 0); } -void LYOpenCmdScript (void) +void LYOpenCmdScript(void) { if (lynx_cmd_script != 0) { cmd_script = fopen(lynx_cmd_script, TXT_R); @@ -5670,8 +5734,7 @@ void LYOpenCmdScript (void) } } -int LYReadCmdKey ( - int mode) +int LYReadCmdKey(int mode) { int ch = -1; @@ -5723,7 +5786,8 @@ int LYReadCmdKey ( } else { ch = LYgetch_for(mode); } - CTRACE((tfp, "LYReadCmdKey(%d) ->%s (%#x)\n", mode, LYKeycodeToString(ch, TRUE), ch)); + CTRACE((tfp, "LYReadCmdKey(%d) ->%s (%#x)\n", + mode, LYKeycodeToString(ch, TRUE), ch)); LYWriteCmdKey(ch); return ch; } @@ -5731,15 +5795,14 @@ int LYReadCmdKey ( /* * Write a LYKeymapCode 'ch' to the logfile. */ -void LYWriteCmdKey ( - int ch) +void LYWriteCmdKey(int ch) { if (cmd_logfile != 0) { fprintf(cmd_logfile, "key %s\n", LYKeycodeToString(ch, FALSE)); } } -void LYCloseCmdLogfile (void) +void LYCloseCmdLogfile(void) { if (cmd_logfile != 0) { LYCloseOutput(cmd_logfile); |