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

📄 menu.c

📁 ELinks is an advanced and well-established feature-rich text mode web (HTTP/FTP/..) browser. ELinks
💻 C
📖 第 1 页 / 共 5 页
字号:
/* menu.c * (c) 2002 Mikulas Patocka, Petr 'Brain' Kulhavy * This file is a part of the Links program, released under GPL. */#include "links.h"/* prototypes */void menu_about(struct terminal *, void *, struct session *);void menu_keys(struct terminal *, void *, struct session *);void menu_copying(struct terminal *, void *, struct session *);void menu_manual(struct terminal *, void *, struct session *);void menu_homepage(struct terminal *, void *, struct session *);void menu_calibration(struct terminal *, void *, struct session *);void menu_for_frame(struct terminal *, void (*)(struct session *, struct f_data_c *, int), struct session *);void menu_goto_url(struct terminal *, void *, struct session *);void menu_save_url_as(struct terminal *, void *, struct session *);void menu_save_bookmarks(struct terminal *, void *, struct session *);void menu_go_back(struct terminal *, void *, struct session *);void menu_reload(struct terminal *, void *, struct session *);void dont_exit_prog(struct session *);void refresh_abort(struct dialog_data *);void cache_inf(struct terminal *, void *, struct session *);void list_cache(struct terminal *, void *, struct session *);void memory_cld(struct terminal *, void *);void memory_info(struct terminal *, void *, struct session *);void flush_caches(struct terminal *, void *, void *);void history_menu(struct terminal *, void *, struct session *);void downloads_menu(struct terminal *, void *, struct session *);void menu_doc_info(struct terminal *, void *, struct session *);void menu_head_info(struct terminal *, void *, struct session *);void menu_toggle(struct terminal *, void *, struct session *);void display_codepage(struct terminal *, void *, struct session *);void assumed_codepage(struct terminal *, void *, struct session *);void charset_list(struct terminal *, void *, struct session *);void set_val(struct terminal *, void *, int *);void charset_sel_list(struct terminal *, struct session *, int *, int);void terminal_options_ok(void *);void terminal_options(struct terminal *, void *, struct session *);void refresh_javascript(struct session *);void javascript_options(struct terminal *, void *, struct session *);void httpopt_fn(struct dialog_data *);int dlg_http_options(struct dialog_data *, struct dialog_item_data *);void ftpopt_fn(struct dialog_data *);int dlg_ftp_options(struct dialog_data *, struct dialog_item_data *);int dlg_proxy_options(struct dialog_data *, struct dialog_item_data *);void refresh_video(struct session *);void videoopt_fn(struct dialog_data *);void remove_zeroes(unsigned char *);void video_options(struct terminal *, void *, struct session *);void refresh_net(void *);void proxy_fn(struct dialog_data *);void net_options(struct terminal *, void *, void *);void netprog_fn(struct dialog_data *);void net_programs(struct terminal *, void *, void *);void cache_refresh(void *);void cache_opt(struct terminal *, void *, void *);void menu_shell(struct terminal *, void *, void *);void menu_kill_background_connections(struct terminal *, void *, void *);void menu_kill_all_connections(struct terminal *, void *, void *);void menu_save_html_options(struct terminal *, void *, struct session *);void html_refresh(struct session *);int dlg_assume_cp(struct dialog_data *, struct dialog_item_data *);int dlg_kb_cp(struct dialog_data *, struct dialog_item_data *);void menu_html_options(struct terminal *, void *, struct session *);void refresh_misc(void *);void miscopt_fn(struct dialog_data *);void miscelaneous_options(struct terminal *, void *, struct session *);void menu_set_language(struct terminal *, void *, struct session *);void menu_language_list(struct terminal *, void *, struct session *);void do_resize_terminal(struct terminal *);void dlg_resize_terminal(struct terminal *, void *, struct session *);void do_file_menu(struct terminal *, void *, struct session *);void do_view_menu(struct terminal *, void *, struct session *);void do_setup_menu(struct terminal *, void *, struct session *);/*static inline struct session *get_term_session(struct terminal *term){	if ((void *)term->windows.prev == &term->windows) {		internal("terminal has no windows");		return NULL;	}	return ((struct window *)term->windows.prev)->data;}*/void menu_about(struct terminal *term, void *d, struct session *ses){	msg_box(term, NULL, TEXT(T_ABOUT), AL_CENTER, TEXT(T_LINKS__LYNX_LIKE), NULL, 1, TEXT(T_OK), NULL, B_ENTER | B_ESC);}void menu_keys(struct terminal *term, void *d, struct session *ses){	msg_box(term, NULL, TEXT(T_KEYS), AL_LEFT | AL_MONO, TEXT(T_KEYS_DESC), NULL, 1, TEXT(T_OK), NULL, B_ENTER | B_ESC);}void menu_copying(struct terminal *term, void *d, struct session *ses){	msg_box(term, NULL, TEXT(T_COPYING), AL_CENTER, TEXT(T_COPYING_DESC), NULL, 1, TEXT(T_OK), NULL, B_ENTER | B_ESC);}void menu_manual(struct terminal *term, void *d, struct session *ses){	goto_url(ses, LINKS_MANUAL_URL);}void menu_homepage(struct terminal *term, void *d, struct session *ses){	goto_url(ses, LINKS_HOMEPAGE_URL);}void menu_calibration(struct terminal *term, void *d, struct session *ses){	goto_url(ses, LINKS_CALIBRATION_URL);}void menu_for_frame(struct terminal *term, void (*f)(struct session *, struct f_data_c *, int), struct session *ses){	do_for_frame(ses, f, 0);}void menu_goto_url(struct terminal *term, void *d, struct session *ses){	dialog_goto_url(ses, "");}void menu_save_url_as(struct terminal *term, void *d, struct session *ses){	dialog_save_url(ses);}void menu_save_bookmarks(struct terminal *term, void *d, struct session *ses){	save_bookmarks();}void menu_go_back(struct terminal *term, void *d, struct session *ses){	go_back(ses);}void menu_reload(struct terminal *term, void *d, struct session *ses){	reload(ses, -1);}void really_exit_prog(struct session *ses){	register_bottom_half((void (*)(void *))destroy_terminal, ses->term);}void dont_exit_prog(struct session *ses){	ses->exit_query = 0;}void query_exit(struct session *ses){	ses->exit_query = 1;	msg_box(ses->term, NULL, TEXT(T_EXIT_LINKS), AL_CENTER, (ses->term->next == ses->term->prev && are_there_downloads()) ? TEXT(T_DO_YOU_REALLY_WANT_TO_EXIT_LINKS_AND_TERMINATE_ALL_DOWNLOADS) : (!F || ses->term->next == ses->term->prev) ? TEXT(T_DO_YOU_REALLY_WANT_TO_EXIT_LINKS) : TEXT(T_DO_YOU_REALLY_WANT_TO_CLOSE_WINDOW), ses, 2, TEXT(T_YES), (void (*)(void *))really_exit_prog, B_ENTER, TEXT(T_NO), dont_exit_prog, B_ESC);}void exit_prog(struct terminal *term, void *d, struct session *ses){	if (!ses) {		register_bottom_half((void (*)(void *))destroy_terminal, term);		return;	}	if (!ses->exit_query && (!d || (term->next == term->prev && are_there_downloads()))) {		query_exit(ses);		return;	}	really_exit_prog(ses);}struct refresh {	struct terminal *term;	struct window *win;	struct session *ses;	void (*fn)(struct terminal *term, void *d, struct session *ses);	void *data;	int timer;};/* prototypes */void refresh(struct refresh *);void end_refresh(struct refresh *);void refresh(struct refresh *r){	struct refresh rr;	r->timer = -1;	memcpy(&rr, r, sizeof(struct refresh));	rr.fn(rr.term, rr.data, rr.ses);	delete_window(r->win);}void end_refresh(struct refresh *r){	if (r->timer != -1) kill_timer(r->timer);	mem_free(r);}void refresh_abort(struct dialog_data *dlg){	end_refresh(dlg->dlg->udata2);}void cache_inf(struct terminal *term, void *d, struct session *ses){	unsigned char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10, *a11, *a12, *a13, *a14, *a15, *a16;#ifdef G	unsigned char *b14, *b15, *b16, *b17;	unsigned char *c14, *c15, *c16, *c17;#endif	int l = 0;	struct refresh *r;	r = mem_alloc(sizeof(struct refresh));	r->term = term;	r->win = NULL;	r->ses = ses;	r->fn = cache_inf;	r->data = d;	r->timer = -1;	l = 0;	l = 0, a1 = init_str(); add_to_str(&a1, &l, ": "); add_num_to_str(&a1, &l, select_info(CI_FILES));add_to_str(&a1, &l, " ");	l = 0, a2 = init_str(); add_to_str(&a2, &l, ", "); add_num_to_str(&a2, &l, select_info(CI_TIMERS));add_to_str(&a2, &l, " ");	l = 0, a3 = init_str(); add_to_str(&a3, &l, ".\n");	l = 0, a4 = init_str(); add_to_str(&a4, &l, ": "); add_num_to_str(&a4, &l, connect_info(CI_FILES));add_to_str(&a4, &l, " ");	l = 0, a5 = init_str(); add_to_str(&a5, &l, ", "); add_num_to_str(&a5, &l, connect_info(CI_CONNECTING));add_to_str(&a5, &l, " ");	l = 0, a6 = init_str(); add_to_str(&a6, &l, ", "); add_num_to_str(&a6, &l, connect_info(CI_TRANSFER));add_to_str(&a6, &l, " ");	l = 0, a7 = init_str(); add_to_str(&a7, &l, ", "); add_num_to_str(&a7, &l, connect_info(CI_KEEP));add_to_str(&a7, &l, " ");	l = 0, a8 = init_str(); add_to_str(&a8, &l, ".\n");	l = 0, a9 = init_str(); add_to_str(&a9, &l, ": "); add_num_to_str(&a9, &l, cache_info(CI_BYTES));add_to_str(&a9, &l, " ");	l = 0, a10 = init_str(); add_to_str(&a10, &l, ", "); add_num_to_str(&a10, &l, cache_info(CI_FILES));add_to_str(&a10, &l, " ");	l = 0, a11 = init_str(); add_to_str(&a11, &l, ", "); add_num_to_str(&a11, &l, cache_info(CI_LOCKED));add_to_str(&a11, &l, " ");	l = 0, a12 = init_str(); add_to_str(&a12, &l, ", "); add_num_to_str(&a12, &l, cache_info(CI_LOADING));add_to_str(&a12, &l, " ");	l = 0, a13 = init_str(); add_to_str(&a13, &l, ".\n");#ifdef G	if (F) {		l = 0, b14 = init_str();		add_to_str(&b14, &l, ", ");		add_num_to_str(&b14, &l, imgcache_info(CI_BYTES));		add_to_str(&b14, &l, " ");				l = 0, b15 = init_str(); 		add_to_str(&b15, &l, ", ");		add_num_to_str(&b15, &l, imgcache_info(CI_FILES));		add_to_str(&b15, &l, " ");				l = 0, b16 = init_str(); 		add_to_str(&b16, &l, ", ");		add_num_to_str(&b16, &l, imgcache_info(CI_LOCKED));		add_to_str(&b16, &l, " ");				l = 0, b17 = init_str();		add_to_str(&b17, &l, ".\n");				l = 0, c14 = init_str();		add_to_str(&c14, &l, ", ");		add_num_to_str(&c14, &l, font_cache.bytes);		add_to_str(&c14, &l, " ");				l = 0, c15 = init_str(); 		add_to_str(&c15, &l, ", ");		add_num_to_str(&c15, &l, font_cache.max_bytes);		add_to_str(&c15, &l, " ");				l = 0, c16 = init_str(); 		add_to_str(&c16, &l, ", ");		add_num_to_str(&c16, &l, font_cache.items);		add_to_str(&c16, &l, " ");				l = 0, c17 = init_str();		add_to_str(&c17, &l, ".\n");	}#endif	l = 0, a14 = init_str(); add_to_str(&a14, &l, ": "); add_num_to_str(&a14, &l, formatted_info(CI_FILES));add_to_str(&a14, &l, " ");	l = 0, a15 = init_str(); add_to_str(&a15, &l, ", "); add_num_to_str(&a15, &l, formatted_info(CI_LOCKED));add_to_str(&a15, &l, " ");	l = 0, a16 = init_str(); add_to_str(&a16, &l, ".");	if (!F) msg_box(term, getml(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, NULL), TEXT(T_RESOURCES), AL_LEFT | AL_EXTD_TEXT, TEXT(T_RESOURCES), a1, TEXT(T_HANDLES), a2, TEXT(T_TIMERS), a3, TEXT(T_CONNECTIONS), a4, TEXT(T_cONNECTIONS), a5, TEXT(T_CONNECTING), a6, TEXT(T_tRANSFERRING), a7, TEXT(T_KEEPALIVE), a8, TEXT(T_MEMORY_CACHE), a9, TEXT(T_BYTES), a10, TEXT(T_FILES), a11, TEXT(T_LOCKED), a12, TEXT(T_LOADING), a13, TEXT(T_FORMATTED_DOCUMENT_CACHE), a14, TEXT(T_DOCUMENTS), a15, TEXT(T_LOCKED), a16, NULL, r, 1, TEXT(T_OK), NULL, B_ENTER | B_ESC);#ifdef G	else msg_box(term, getml(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,				a12, a13, b14, b15, b16, b17, a14, a15, a16,				c14, c15, c16, c17, NULL), TEXT(T_RESOURCES),			AL_LEFT | AL_EXTD_TEXT, TEXT(T_RESOURCES), a1,			TEXT(T_HANDLES), a2, TEXT(T_TIMERS), a3,			TEXT(T_CONNECTIONS), a4, TEXT(T_cONNECTIONS), a5,			TEXT(T_CONNECTING), a6, TEXT(T_tRANSFERRING), a7,			TEXT(T_KEEPALIVE), a8, TEXT(T_MEMORY_CACHE), a9,			TEXT(T_BYTES), a10, TEXT(T_FILES), a11, TEXT(T_LOCKED),			a12, TEXT(T_LOADING), a13, TEXT(T_IMAGE_CACHE), b14,			TEXT(T_BYTES), b15, TEXT(T_IMAGES), b16, TEXT(T_LOCKED),			b17, TEXT(T_FONT_CACHE), c14, TEXT(T_BYTES), c15,			TEXT(T_BYTES_MAX), c16, TEXT(T_LETTERS), c17,			TEXT(T_FORMATTED_DOCUMENT_CACHE), a14, TEXT(T_DOCUMENTS), a15, TEXT(T_LOCKED), a16, NULL, r, 1, TEXT(T_OK), NULL, B_ENTER | B_ESC);#endif	r->win = term->windows.next;	((struct dialog_data *)r->win->data)->dlg->abort = refresh_abort;	r->timer = install_timer(RESOURCE_INFO_REFRESH, (void (*)(void *))refresh, r);}#ifdef DEBUGvoid list_cache(struct terminal *term, void *d, struct session *ses){	unsigned char *a;	int l = 0;	struct refresh *r;	struct cache_entry *ce, *cache;	a = init_str();	r = mem_alloc(sizeof(struct refresh));	r->term = term;	r->win = NULL;	r->ses = ses;	r->fn = list_cache;	r->data = d;	r->timer = -1;	cache = (struct cache_entry *)cache_info(CI_LIST);	add_to_str(&a, &l, ":");	foreach(ce, *cache) {		add_to_str(&a, &l, "\n");		add_to_str(&a, &l, ce->url);	}	msg_box(term, getml(a, NULL), TEXT(T_CACHE_INFO), AL_LEFT | AL_EXTD_TEXT, TEXT(T_CACHE_CONTENT), a, NULL, r, 1, TEXT(T_OK), end_refresh, B_ENTER | B_ESC);	r->win = term->windows.next;	r->timer = install_timer(RESOURCE_INFO_REFRESH, (void (*)(void *))refresh, r);	/* !!! the refresh here is buggy */}#endif#ifdef LEAK_DEBUGvoid memory_cld(struct terminal *term, void *d){	last_mem_amount = mem_amount;}#define MSG_BUF	2000#define MSG_W	100void memory_info(struct terminal *term, void *d, struct session *ses){	char message[MSG_BUF];	char *p;	struct refresh *r;	r = mem_alloc(sizeof(struct refresh));	r->term = term;	r->win = NULL;	r->ses = ses;	r->fn = memory_info;	r->data = d;	r->timer = -1;	p = message;	sprintf(p, "%ld %s", mem_amount, _(TEXT(T_MEMORY_ALLOCATED), term)), p += strlen(p);	if (last_mem_amount != -1) sprintf(p, ", %s %ld, %s %ld", _(TEXT(T_LAST), term), last_mem_amount, _(TEXT(T_DIFFERENCE), term), mem_amount - last_mem_amount), p += strlen(p);	sprintf(p, "."), p += strlen(p);#ifdef JS	sprintf(p, "\n%ld %s.", js_zaflaknuto_pameti, _(TEXT(T_JS_MEMORY_ALLOCATED), term)), p += strlen(p);#endif#if 0 && defined(MAX_LIST_SIZE)	if (last_mem_amount != -1) {		long i, j;		int l = 0;		for (i = 0; i < MAX_LIST_SIZE; i++) if (memory_list[i].p && memory_list[i].p != last_memory_list[i].p) {			for (j = 0; j < MAX_LIST_SIZE; j++) if (last_memory_list[j].p == memory_list[i].p) goto b;			if (!l) sprintf(p, "\n%s: ", _(TEXT(T_NEW_ADDRESSES), term)), p += strlen(p), l = 1;			else sprintf(p, ", "), p += strlen(p);			sprintf(p, "#%p of %d at %s:%d", memory_list[i].p, (int)memory_list[i].size, memory_list[i].file, memory_list[i].line), p += strlen(p);			if (p - message >= MSG_BUF - MSG_W) {				sprintf(p, ".."), p += strlen(p);				break;			}			b:;		}		if (!l) sprintf(p, "\n%s", _(TEXT(T_NO_NEW_ADDRESSES), term)), p += strlen(p);		sprintf(p, "."), p += strlen(p);	}#endif	p = stracpy(message);	msg_box(term, getml(p, NULL), TEXT(T_MEMORY_INFO), AL_CENTER, p, r, 1, TEXT(T_OK), NULL, B_ENTER | B_ESC);	r->win = term->windows.next;	((struct dialog_data *)r->win->data)->dlg->abort = refresh_abort;

⌨️ 快捷键说明

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