⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lyoptions.c

📁 基于rtos开发的浏览器!
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "HTUtils.h"#include "tcp.h"#include "HTFTP.h"#include "HTML.h"#include "LYCurses.h"#include "LYUtils.h"#include "LYStrings.h"#include "LYGlobalDefs.h"#include "LYOptions.h"#include "LYSignal.h"#include "LYClean.h"#include "LYCharSets.h"#include "LYCharUtils.h"#include "UCMap.h"#include "UCAux.h"#include "LYKeymap.h"#include "LYrcFile.h"#include "HTAlert.h"#include "LYBookmark.h"#include "GridText.h"#include "LYLeaks.h"#define FREE(x) if (x) {free(x); x = NULL;}#ifdef VMS#define DISPLAY "DECW$DISPLAY"#else#define DISPLAY "DISPLAY"#endif /* VMS */#define COL_OPTION_VALUES 36  /* display column where option values start */BOOLEAN term_options;PRIVATE void terminate_options	PARAMS((int sig));PRIVATE int boolean_choice PARAMS((	int		status,	int		line,	int		column,	char ** 	choices));PRIVATE int popup_choice PARAMS((	int		cur_choice,	int		line,	int		column,	char ** 	choices,	int		i_length,	int		disabled));#define MAXCHOICES 10#define L_Bool_A (use_assume_charset ? L_BOOL_A + 1 : L_BOOL_A)#define L_Bool_B (use_assume_charset ? L_BOOL_B + 1 : L_BOOL_B)#define L_Exec (use_assume_charset ? L_EXEC + 1 : L_EXEC)#define L_Rawmode (use_assume_charset ? L_RAWMODE + 1 : L_RAWMODE)#define L_Charset (use_assume_charset ? L_CHARSET + 1 : L_CHARSET)#define L_Color (use_assume_charset ? L_COLOR + 1 : L_COLOR)#define L_Keypad (use_assume_charset ? L_KEYPAD + 1 : L_KEYPAD)#define L_Lineed (use_assume_charset ? L_LINEED + 1 : L_LINEED)#define L_Dired (use_assume_charset ? L_DIRED + 1 : L_DIRED)#define L_User_Mode (use_assume_charset ? L_USER_MODE + 1 : L_USER_MODE)#define L_User_Agent (use_assume_charset ? L_USER_AGENT + 1 : L_USER_AGENT)PRIVATE void option_statusline ARGS1(	CONST char *,		text){    /*     *	Make sure we have a pointer to a string.     */    if (text == NULL)	return;    /*     *	Don't print statusline messages if dumping to stdout.     */    if (dump_output_immediately)	return;    /*     *	Use _statusline() set to output on the bottom line. - FM     */    LYStatusLine = (LYlines - 1);    _statusline(text);    LYStatusLine = -1;}PRIVATE void option_user_message ARGS2(	CONST char *,		message,	char *, 		argument){    /*     *	Make sure we have a pointer to a string.     */    if (message == NULL || argument == NULL)	return;    /*     *	Don't print statusline messages if dumping to stdout.     */    if (dump_output_immediately)	return;    /*     *	Use _user_message() set to output on the bottom line.     */    LYStatusLine = (LYlines - 1);    _user_message(message, argument);    LYStatusLine = -1;}PUBLIC void options NOARGS{#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS    int itmp;#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */    int response, ch;    /*     *	If the user changes the display we need memory to put it in.     */    char display_option[256];#ifndef VMS    static char putenv_command[142];#endif /* !VMS */    char *choices[MAXCHOICES];    int CurrentCharSet = current_char_set;    int CurrentShowColor = LYShowColor;    int CurrentAssumeCharSet = UCLYhndl_for_unspec;    BOOLEAN CurrentRawMode = LYRawMode;    BOOLEAN AddValueAccepted = FALSE;    char *cp = NULL;    BOOL use_assume_charset, old_use_assume_charset;#ifdef DIRED_SUPPORT#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS    if (LYlines < 24) {	HTAlert(OPTION_SCREEN_NEEDS_24);	return;    }#else    if (LYlines < 23) {	HTAlert(OPTION_SCREEN_NEEDS_23);	return;    }#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */#else#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS    if (LYlines < 23) {	HTAlert(	"Screen height must be at least 23 lines for the Options menu!");	return;    }#else    if (LYlines < 22) {	HTAlert(OPTION_SCREEN_NEEDS_22);	return;    }#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */#endif /* DIRED_SUPPORT */    term_options = FALSE;    signal(SIGINT, terminate_options);    if (no_option_save) {	if (LYShowColor == SHOW_COLOR_NEVER) {	    LYShowColor = SHOW_COLOR_OFF;	} else if (LYShowColor == SHOW_COLOR_ALWAYS) {	    LYShowColor = SHOW_COLOR_ON;	}#if defined(USE_SLANG) || defined(COLOR_CURSES)    } else {	if (LYChosenShowColor == SHOW_COLOR_UNKNOWN) {	    switch (LYrcShowColor) {	    case SHOW_COLOR_NEVER:		LYChosenShowColor =		    (LYShowColor >= SHOW_COLOR_ON) ?				     SHOW_COLOR_ON :				     SHOW_COLOR_NEVER;		break;	    case SHOW_COLOR_ALWAYS:#if defined(COLOR_CURSES)		if (!has_colors())		    LYChosenShowColor = SHOW_COLOR_ALWAYS;		else#endif		    LYChosenShowColor =			(LYShowColor >= SHOW_COLOR_ON) ?				     SHOW_COLOR_ALWAYS :				     SHOW_COLOR_OFF;		break;	    default:		LYChosenShowColor =		    (LYShowColor >= SHOW_COLOR_ON) ?				     SHOW_COLOR_ON :				     SHOW_COLOR_OFF;	    }	}#endif /* USE_SLANG || COLOR_CURSES */    }    old_use_assume_charset =	use_assume_charset = (user_mode == ADVANCED_MODE);draw_options:    old_use_assume_charset = use_assume_charset;    /*     *	NOTE that printw() should be avoided for strings that     *	might have non-ASCII or multibyte/CJK characters. - FM     */    response = 0;#if defined(FANCY_CURSES) || defined (USE_SLANG)    if (enable_scrollback) {	clear();    } else {	erase();    }#else    clear();#endif /* FANCY_CURSES || USE_SLANG */    move(0, 5);    lynx_start_h1_color ();    addstr("         Options Menu (");    addstr(LYNX_NAME);    addstr(" Version ");    addstr(LYNX_VERSION);    addch(')');    lynx_stop_h1_color ();    move(L_EDITOR, 5);    addstr("E)ditor                      : ");    addstr((editor && *editor) ? editor : "NONE");    move(L_DISPLAY, 5);    addstr("D)ISPLAY variable            : ");    addstr((display && *display) ? display : "NONE");    move(L_HOME, 5);    addstr("mu(L)ti-bookmarks: ");    addstr((LYMultiBookmarks ?	      (LYMBMAdvanced ? "ADVANCED"			     : "STANDARD")			     : "OFF     "));    move(L_HOME, B_BOOK);    if (LYMultiBookmarks) {	addstr("review/edit B)ookmarks files");    } else {	addstr("B)ookmark file: ");	addstr((bookmark_page && *bookmark_page) ? bookmark_page : "NONE");    }    move(L_FTPSTYPE, 5);    addstr("F)TP sort criteria           : ");    addstr((HTfileSortMethod == FILE_BY_NAME ? "By Filename" :	   (HTfileSortMethod == FILE_BY_SIZE ? "By Size    " :	   (HTfileSortMethod == FILE_BY_TYPE ? "By Type    " :					       "By Date    "))));    move(L_MAIL_ADDRESS, 5);    addstr("P)ersonal mail address       : ");    addstr((personal_mail_address && *personal_mail_address) ?				       personal_mail_address : "NONE");    move(L_SSEARCH, 5);    addstr("S)earching type              : ");    addstr(case_sensitive ? "CASE SENSITIVE  " : "CASE INSENSITIVE");    move(L_Charset, 5);    addstr("display (C)haracter set      : ");    addstr((char *)LYchar_set_names[current_char_set]);    move(L_LANGUAGE, 5);    addstr("preferred document lan(G)uage: ");    addstr((language && *language) ? language : "NONE");    move(L_PREF_CHARSET, 5);    addstr("preferred document c(H)arset : ");    addstr((pref_charset && *pref_charset) ? pref_charset : "NONE");    if (use_assume_charset) {	move(L_ASSUME_CHARSET, 5);	addstr("^A)ssume charset if unknown  : ");	if (UCAssume_MIMEcharset)	    addstr(UCAssume_MIMEcharset);	else	    addstr((UCLYhndl_for_unspec >= 0) ?		   (char *)LYCharSet_UC[UCLYhndl_for_unspec].MIMEname					      : "NONE");    }    move(L_Rawmode, 5);    addstr("Raw 8-bit or CJK m(O)de      : ");    addstr(LYRawMode ? "ON " : "OFF");#if defined(USE_SLANG) || defined(COLOR_CURSES)    move(L_Color, B_COLOR);    addstr("show color (&)  : ");    if (no_option_save) {	addstr((LYShowColor == SHOW_COLOR_OFF ? "OFF" :						"ON "));    } else {	switch (LYChosenShowColor) {	case SHOW_COLOR_NEVER:                addstr("NEVER     ");		break;	case SHOW_COLOR_OFF:		addstr("OFF");		break;	case SHOW_COLOR_ON:		addstr("ON ");		break;	case SHOW_COLOR_ALWAYS:#if defined(COLOR_CURSES)		if (!has_colors())		    addstr("Always try");		else#endif		    addstr("ALWAYS    ");	}    }#endif /* USE_SLANG || COLOR_CURSES */    move(L_Bool_A, B_VIKEYS);    addstr("V)I keys: ");    addstr(vi_keys ? "ON " : "OFF");    move(L_Bool_A, B_EMACSKEYS);    addstr("e(M)acs keys: ");    addstr(emacs_keys ? "ON " : "OFF");    move(L_Bool_A, B_SHOW_DOTFILES);    addstr("sho(W) dot files: ");    addstr((!no_dotfiles && show_dotfiles) ? "ON " : "OFF");    move(L_Bool_B, B_SELECT_POPUPS);    addstr("popups for selec(T) fields   : ");    addstr(LYSelectPopups ? "ON " : "OFF");    move(L_Bool_B, B_SHOW_CURSOR);    addstr("show cursor (@) : ");    addstr(LYShowCursor ? "ON " : "OFF");    move(L_Keypad, 5);    addstr("K)eypad mode                 : ");    addstr((keypad_mode == NUMBERS_AS_ARROWS) ?				"Numbers act as arrows             " :	 ((keypad_mode == LINKS_ARE_NUMBERED) ?				"Links are numbered                " :				"Links and form fields are numbered"));    move(L_Lineed, 5);    addstr("li(N)e edit style            : ");    addstr(LYLineeditNames[current_lineedit]);#ifdef DIRED_SUPPORT    move(L_Dired, 5);    addstr("l(I)st directory style       : ");    addstr((dir_list_style == FILES_FIRST) ? "Files first      " :	  ((dir_list_style == MIXED_STYLE) ? "Mixed style      " :					     "Directories first"));#endif /* DIRED_SUPPORT */    move(L_User_Mode, 5);    addstr("U)ser mode                   : ");    addstr(  (user_mode == NOVICE_MODE) ? "Novice      " :      ((user_mode == INTERMEDIATE_MODE) ? "Intermediate" :					  "Advanced    "));    move(L_User_Agent, 5);    addstr("user (A)gent                 : ");    addstr((LYUserAgent && *LYUserAgent) ? LYUserAgent : "NONE");#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS    move(L_Exec, 5);    addstr("local e(X)ecution links      : ");#ifndef NEVER_ALLOW_REMOTE_EXEC    addstr(               local_exec ? "ALWAYS ON           " :	  (local_exec_on_local_files ? "FOR LOCAL FILES ONLY" :				       "ALWAYS OFF          "));#else    addstr(local_exec_on_local_files ? "FOR LOCAL FILES ONLY" :				       "ALWAYS OFF          ");#endif /* !NEVER_ALLOW_REMOTE_EXEC */#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */    move(LYlines-3, 2);    addstr(SELECT_SEGMENT);    start_bold();    addstr(CAP_LETT_SEGMENT);    stop_bold();    addstr(OF_OPT_LINE_SEGMENT);    if (!no_option_save) {	addstr(" '");	start_bold();	addstr(">");	stop_bold();	addstr("'");	addstr(TO_SAVE_SEGMENT);    }    addstr(OR_SEGMENT);    addstr("'");    start_bold();    addstr("r");    stop_bold();    addstr("'");    addstr(TO_RETURN_SEGMENT);    while (TOUPPER(response) != 'R' &&	   !LYisNonAlnumKeyname(response, LYK_PREV_DOC) &&	   response != '>' && !term_options &&	   response != 7 &&  response != 3) {	if (AddValueAccepted == TRUE) {	    option_statusline(VALUE_ACCEPTED);	    AddValueAccepted = FALSE;	}	move((LYlines - 2), 0);	lynx_start_prompt_color ();	addstr(COMMAND_PROMPT);	lynx_stop_prompt_color ();	refresh();	response = LYgetch();	if (term_options || response == 7 || response == 3)	    response = 'R';	if (LYisNonAlnumKeyname(response, LYK_REFRESH)) {	    lynx_force_repaint();	    goto draw_options;	}	switch (response) {	    case 'e':	/* Change the editor. */	    case 'E':		if (no_editor) {		    option_statusline(EDIT_DISABLED);		} else if (system_editor ) {		    option_statusline(EDITOR_LOCKED);		} else {		    if (editor && *editor)			strcpy(display_option, editor);		    else {  /* clear the NONE */			move(L_EDITOR, COL_OPTION_VALUES);			addstr("    ");			*display_option = '\0';		    }		    option_statusline(ACCEPT_DATA);		    move(L_EDITOR, COL_OPTION_VALUES);		    start_bold();		    ch = LYgetstr(display_option, VISIBLE,				  sizeof(display_option), NORECALL);		    stop_bold();		    move(L_EDITOR, COL_OPTION_VALUES);		    if (term_options || ch == -1) {			addstr((editor && *editor) ?					    editor : "NONE");		    } else if (*display_option == '\0') {			FREE(editor);			addstr("NONE");		    } else {			StrAllocCopy(editor, display_option);			addstr(display_option);		    }		    clrtoeol();		    if (ch == -1) {			option_statusline(CANCELLED);			sleep(InfoSecs);			option_statusline("");		    } else {			option_statusline(VALUE_ACCEPTED);		    }		}		response = ' ';		break;	    case 'd':	/* Change the display. */	    case 'D':		if (display && *display) {		    strcpy(display_option, display);		} else {  /* clear the NONE */		    move(L_DISPLAY, COL_OPTION_VALUES);		    addstr("    ");		    *display_option = '\0';		}		option_statusline(ACCEPT_DATA);		move(L_DISPLAY, COL_OPTION_VALUES);		start_bold();		ch = LYgetstr(display_option, VISIBLE,			      sizeof(display_option), NORECALL);		stop_bold();		move(L_DISPLAY, COL_OPTION_VALUES);		if ((term_options || ch == -1) ||		    (display != NULL &&#ifdef VMS		     !strcasecomp(display, display_option)))#else		     !strcmp(display, display_option)))#endif /* VMS */		{		    /*		     *	Cancelled, or a non-NULL display string		     *	wasn't changed. - FM		     */		    addstr((display && *display) ? display : "NONE");		    clrtoeol();		    if (ch == -1) {			option_statusline(CANCELLED);			sleep(InfoSecs);			option_statusline("");		    } else {			option_statusline(VALUE_ACCEPTED);		    }		    response = ' ';		    break;		} else if (*display_option == '\0') {		    if ((display == NULL) ||			(display != NULL && *display == '\0')) {			/*			 *  NULL or zero-length display string			 *  wasn't changed. - FM

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -