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

📄 menu.c

📁 ELinks is an advanced and well-established feature-rich text mode web (HTTP/FTP/..) browser. ELinks
💻 C
📖 第 1 页 / 共 5 页
字号:
	r->timer = install_timer(RESOURCE_INFO_REFRESH, (void (*)(void *))refresh, r);}#endifvoid flush_caches(struct terminal *term, void *d, void *e){	shrink_memory(SH_FREE_ALL);}/* jde v historii o psteps polozek dozadu */void go_backwards(struct terminal *term, void *psteps, struct session *ses){	long steps = (my_intptr_t) psteps;	/*if (ses->tq_goto_position)		--steps;	if (ses->search_word)		mem_free(ses->search_word), ses->search_word = NULL;*/	while (steps > 1) {		struct location *loc = ses->history.next;		if ((void *) loc == &ses->history) return;		loc = loc->next;		if ((void *) loc == &ses->history) return;		destroy_location(loc);		--steps;	}	if (steps)		go_back(ses);}struct menu_item no_hist_menu[] = {	{ TEXT(T_NO_HISTORY), "", M_BAR, NULL, NULL, 0, 0 },	{ NULL, NULL, 0, NULL, NULL, 0, 0 }};void history_menu(struct terminal *term, void *ddd, struct session *ses){	struct location *l;	struct menu_item *mi = NULL;	long n = 0;	foreach(l, ses->history) {		if (n) {			unsigned char *url;			if (!mi && !(mi = new_menu(3))) return;			url = stracpy(l->url);			if (strchr(url, POST_CHAR)) *strchr(url, POST_CHAR) = 0;			add_to_menu(&mi, url, "", "", MENU_FUNC go_backwards, (void *) n, 0, n - 1);		}		n++;	}	if (n <= 1) do_menu(term, no_hist_menu, ses);	else do_menu(term, mi, ses);}struct menu_item no_downloads_menu[] = {	{ TEXT(T_NO_DOWNLOADS), "", M_BAR, NULL, NULL, 0, 0 },	{ NULL, NULL, 0, NULL, NULL, 0, 0 }};void downloads_menu(struct terminal *term, void *ddd, struct session *ses){	struct download *d;	struct menu_item *mi = NULL;	int n = 0;	foreachback(d, downloads) {		unsigned char *u;		if (!mi) if (!(mi = new_menu(3))) return;		u = stracpy(d->url);		if (strchr(u, POST_CHAR)) *strchr(u, POST_CHAR) = 0;		add_to_menu(&mi, u, "", "", MENU_FUNC display_download, d, 0, n);		n++;	}	if (!n) do_menu(term, no_downloads_menu, ses);	else do_menu(term, mi, ses);}void menu_doc_info(struct terminal *term, void *ddd, struct session *ses){	state_msg(ses);}void menu_head_info(struct terminal *term, void *ddd, struct session *ses){	head_msg(ses);}void menu_toggle(struct terminal *term, void *ddd, struct session *ses){	toggle(ses, ses->screen, 0);}void display_codepage(struct terminal *term, void *pcp, struct session *ses){	long cp = (my_intptr_t)pcp;	struct term_spec *t = new_term_spec(term->term);	if (t) t->charset = cp;	cls_redraw_all_terminals();}void assumed_codepage(struct terminal *term, void *pcp, struct session *ses){	long cp = (my_intptr_t)pcp;	ses->ds.assume_cp = cp;	redraw_terminal_cls(term);}void charset_list(struct terminal *term, void *xxx, struct session *ses){	long i; int sel;	unsigned char *n;	struct menu_item *mi;	if (!(mi = new_menu(1))) return;	for (i = 0; (n = get_cp_name(i)); i++) {		if (is_cp_special(i)) continue;		add_to_menu(&mi, get_cp_name(i), "", "", MENU_FUNC display_codepage, (void *)i, 0, i);	}	sel = ses->term->spec->charset;	if (sel < 0) sel = 0;	do_menu_selected(term, mi, ses, sel);}void set_val(struct terminal *term, void *ip, int *d){	*d = (my_intptr_t)ip;}void charset_sel_list(struct terminal *term, struct session *ses, int *ptr, int noutf8){	long i; int sel;	unsigned char *n;	struct menu_item *mi;	if (!(mi = new_menu(1))) return;	for (i = 0; (n = get_cp_name(i)); i++) {		if (noutf8 && is_cp_special(i)) continue;		add_to_menu(&mi, get_cp_name(i), "", "", MENU_FUNC set_val, (void *)i, 0, i);	}	sel = *ptr;	if (sel < 0) sel = 0;	do_menu_selected(term, mi, ptr, sel);}void terminal_options_ok(void *p){	cls_redraw_all_terminals();}unsigned char *td_labels[] = { TEXT(T_NO_FRAMES), TEXT(T_VT_100_FRAMES), TEXT(T_LINUX_OR_OS2_FRAMES), TEXT(T_KOI8R_FRAMES), TEXT(T_FREEBSD_FRAMES), TEXT(T_USE_11M), TEXT(T_RESTRICT_FRAMES_IN_CP850_852), TEXT(T_BLOCK_CURSOR), TEXT(T_COLOR), TEXT(T_BRAILLE_TERMINAL), NULL };void terminal_options(struct terminal *term, void *xxx, struct session *ses){	struct dialog *d;	struct term_spec *ts = new_term_spec(term->term);	if (!ts) return;	d = mem_calloc(sizeof(struct dialog) + 12 * sizeof(struct dialog_item));	d->title = TEXT(T_TERMINAL_OPTIONS);	d->fn = checkbox_list_fn;	d->udata = td_labels;	d->refresh = (void (*)(void *))terminal_options_ok;	d->items[0].type = D_CHECKBOX;	d->items[0].gid = 1;	d->items[0].gnum = TERM_DUMB;	d->items[0].dlen = sizeof(int);	d->items[0].data = (void *)&ts->mode;	d->items[1].type = D_CHECKBOX;	d->items[1].gid = 1;	d->items[1].gnum = TERM_VT100;	d->items[1].dlen = sizeof(int);	d->items[1].data = (void *)&ts->mode;	d->items[2].type = D_CHECKBOX;	d->items[2].gid = 1;	d->items[2].gnum = TERM_LINUX;	d->items[2].dlen = sizeof(int);	d->items[2].data = (void *)&ts->mode;	d->items[3].type = D_CHECKBOX;	d->items[3].gid = 1;	d->items[3].gnum = TERM_KOI8;	d->items[3].dlen = sizeof(int);	d->items[3].data = (void *)&ts->mode;	d->items[4].type = D_CHECKBOX;	d->items[4].gid = 1;	d->items[4].gnum = TERM_FREEBSD;	d->items[4].dlen = sizeof(int);	d->items[4].data = (void *)&ts->mode;	d->items[5].type = D_CHECKBOX;	d->items[5].gid = 0;	d->items[5].dlen = sizeof(int);	d->items[5].data = (void *)&ts->m11_hack;	d->items[6].type = D_CHECKBOX;	d->items[6].gid = 0;	d->items[6].dlen = sizeof(int);	d->items[6].data = (void *)&ts->restrict_852;	d->items[7].type = D_CHECKBOX;	d->items[7].gid = 0;	d->items[7].dlen = sizeof(int);	d->items[7].data = (void *)&ts->block_cursor;	d->items[8].type = D_CHECKBOX;	d->items[8].gid = 0;	d->items[8].dlen = sizeof(int);	d->items[8].data = (void *)&ts->col;	d->items[9].type = D_CHECKBOX;	d->items[9].gid = 0;	d->items[9].dlen = sizeof(int);	d->items[9].data = (void *)&ts->braille;	d->items[10].type = D_BUTTON;	d->items[10].gid = B_ENTER;	d->items[10].fn = ok_dialog;	d->items[10].text = TEXT(T_OK);	d->items[11].type = D_BUTTON;	d->items[11].gid = B_ESC;	d->items[11].fn = cancel_dialog;	d->items[11].text = TEXT(T_CANCEL);	d->items[12].type = D_END;	do_dialog(term, d, getml(d, NULL));}#ifdef JSunsigned char *jsopt_labels[] = { TEXT(T_KILL_ALL_SCRIPTS), TEXT(T_ENABLE_JAVASCRIPT), TEXT(T_VERBOSE_JS_ERRORS), TEXT(T_VERBOSE_JS_WARNINGS), TEXT(T_ENABLE_ALL_CONVERSIONS), TEXT(T_ENABLE_GLOBAL_NAME_RESOLUTION), TEXT(T_MANUAL_JS_CONTROL), TEXT(T_JS_RECURSION_DEPTH), TEXT(T_JS_MEMORY_LIMIT_KB), NULL };static int kill_script_opt;static unsigned char js_fun_depth_str[7];static unsigned char js_memory_limit_str[7];static inline void kill_js_recursively(struct f_data_c *fd){	struct f_data_c *f;	if (fd->js) js_downcall_game_over(fd->js->ctx);	foreach(f,fd->subframes) kill_js_recursively(f);}static inline void quiet_kill_js_recursively(struct f_data_c *fd){	struct f_data_c *f;	if (fd->js)js_downcall_game_over(fd->js->ctx);	foreach(f,fd->subframes) quiet_kill_js_recursively(f);}void refresh_javascript(struct session *ses){	if (ses->screen->f_data)jsint_scan_script_tags(ses->screen);	if (kill_script_opt)		kill_js_recursively(ses->screen);	if (!js_enable) /* vypnuli jsme skribt */	{		if (ses->default_status)mem_free(ses->default_status),ses->default_status=NULL;		quiet_kill_js_recursively(ses->screen);	}	js_fun_depth=strtol(js_fun_depth_str,0,10);	js_memory_limit=strtol(js_memory_limit_str,0,10);	/* reparse document (muze se zmenit hodne veci) */	html_interpret_recursive(ses->screen);	draw_formatted(ses);}void javascript_options(struct terminal *term, void *xxx, struct session *ses){	struct dialog *d;	kill_script_opt=0;	snprintf(js_fun_depth_str,7,"%d",js_fun_depth);	snprintf(js_memory_limit_str,7,"%d",js_memory_limit);	d = mem_calloc(sizeof(struct dialog) + 12 * sizeof(struct dialog_item));	d->title = TEXT(T_JAVASCRIPT_OPTIONS);	d->fn = group_fn;	d->refresh = (void (*)(void *))refresh_javascript;	d->refresh_data=ses;	d->udata = jsopt_labels;	d->items[0].type = D_CHECKBOX;	d->items[0].gid = 0;	d->items[0].dlen = sizeof(int);	d->items[0].data = (void *)&kill_script_opt;	d->items[1].type = D_CHECKBOX;	d->items[1].gid = 0;	d->items[1].dlen = sizeof(int);	d->items[1].data = (void *)&js_enable;	d->items[2].type = D_CHECKBOX;	d->items[2].gid = 0;	d->items[2].dlen = sizeof(int);	d->items[2].data = (void *)&js_verbose_errors;	d->items[3].type = D_CHECKBOX;	d->items[3].gid = 0;	d->items[3].dlen = sizeof(int);	d->items[3].data = (void *)&js_verbose_warnings;	d->items[4].type = D_CHECKBOX;	d->items[4].gid = 0;	d->items[4].dlen = sizeof(int);	d->items[4].data = (void *)&js_all_conversions;	d->items[5].type = D_CHECKBOX;	d->items[5].gid = 0;	d->items[5].dlen = sizeof(int);	d->items[5].data = (void *)&js_global_resolve;	d->items[6].type = D_CHECKBOX;	d->items[6].gid = 0;	d->items[6].dlen = sizeof(int);	d->items[6].data = (void *)&js_manual_confirmation;	d->items[7].type = D_FIELD;	d->items[7].dlen = 7;	d->items[7].data = js_fun_depth_str;	d->items[7].fn = check_number;	d->items[7].gid = 1;	d->items[7].gnum = 999999;	d->items[8].type = D_FIELD;	d->items[8].dlen = 7;	d->items[8].data = js_memory_limit_str;	d->items[8].fn = check_number;	d->items[8].gid = 1024;	d->items[8].gnum = 30*1024;	d->items[9].type = D_BUTTON;	d->items[9].gid = B_ENTER;	d->items[9].fn = ok_dialog;	d->items[9].text = TEXT(T_OK);	d->items[10].type = D_BUTTON;	d->items[10].gid = B_ESC;	d->items[10].fn = cancel_dialog;	d->items[10].text = TEXT(T_CANCEL);	d->items[11].type = D_END;	do_dialog(term, d, getml(d, NULL));}#endifunsigned char *http_labels[] = { TEXT(T_USE_HTTP_10), TEXT(T_ALLOW_SERVER_BLACKLIST), TEXT(T_BROKEN_302_REDIRECT), TEXT(T_NO_KEEPALIVE_AFTER_POST_REQUEST), TEXT(T_DO_NOT_SEND_ACCEPT_CHARSET), TEXT(T_DO_NOT_ADVERTISE_COMPRESSION_SUPPORT), TEXT(T_RETRY_ON_INTERNAL_ERRORS), TEXT(T_REFERER_NONE), TEXT(T_REFERER_SAME_URL), TEXT(T_REFERER_FAKE), TEXT(T_REFERER_REAL_SAME_SERVER), TEXT(T_REFERER_REAL), TEXT(T_FAKE_USERAGENT), TEXT(T_FAKE_REFERER) };void httpopt_fn(struct dialog_data *dlg){	struct terminal *term = dlg->win->term;	int max = 0, min = 0;	int w, rw;	int y = 0;	checkboxes_width(term, dlg->dlg->udata, &max, max_text_width);	checkboxes_width(term, dlg->dlg->udata, &min, min_text_width);	max_text_width(term, http_labels[dlg->n - 4], &max, AL_LEFT);	min_text_width(term, http_labels[dlg->n - 4], &min, AL_LEFT);	max_text_width(term, http_labels[dlg->n - 3], &max, AL_LEFT);	min_text_width(term, http_labels[dlg->n - 3], &min, AL_LEFT);	max_buttons_width(term, dlg->items + dlg->n - 2, 2, &max);	min_buttons_width(term, dlg->items + dlg->n - 2, 2, &min);	w = term->x * 9 / 10 - 2 * DIALOG_LB;	if (w > max) w = max;	if (w < min) w = min;	if (w > term->x - 2 * DIALOG_LB) w = term->x - 2 * DIALOG_LB;	if (w < 5) w = 5;	rw = 0;	dlg_format_checkboxes(dlg, NULL, dlg->items, dlg->n - 4, 0, &y, w, &rw, dlg->dlg->udata);	y += gf_val(1, 1 * G_BFU_FONT_SIZE);	dlg_format_text_and_field(dlg, NULL, http_labels[dlg->n - 4], dlg->items + dlg->n - 4, 0, &y, w, &rw, COLOR_DIALOG_TEXT, AL_LEFT);	dlg_format_text_and_field(dlg, NULL, http_labels[dlg->n - 3], dlg->items + dlg->n - 3, 0, &y, w, &rw, COLOR_DIALOG_TEXT, AL_LEFT);	y += gf_val(1, 1 * G_BFU_FONT_SIZE);	dlg_format_buttons(dlg, NULL, dlg->items + dlg->n - 2, 2, 0, &y, w, &rw, AL_CENTER);	w = rw;	dlg->xw = rw + 2 * DIALOG_LB;	dlg->yw = y + 2 * DIALOG_TB;	center_dlg(dlg);	draw_dlg(dlg);	y = dlg->y + DIALOG_TB + gf_val(1, G_BFU_FONT_SIZE);	dlg_format_checkboxes(dlg, term, dlg->items, dlg->n - 4, dlg->x + DIALOG_LB, &y, w, NULL, dlg->dlg->udata);	y += gf_val(1, G_BFU_FONT_SIZE);	dlg_format_text_and_field(dlg, term, http_labels[dlg->n - 4], dlg->items + dlg->n - 4, dlg->x + DIALOG_LB, &y, w, NULL, COLOR_DIALOG_TEXT, AL_LEFT);	dlg_format_text_and_field(dlg, term, http_labels[dlg->n - 3], dlg->items + dlg->n - 3, dlg->x + DIALOG_LB, &y, w, NULL, COLOR_DIALOG_TEXT, AL_LEFT);	y += gf_val(1, G_BFU_FONT_SIZE);	dlg_format_buttons(dlg, term, dlg->items + dlg->n - 2, 2, dlg->x + DIALOG_LB, &y, w, &rw, AL_CENTER);}int dlg_http_options(struct dialog_data *dlg, struct dialog_item_data *di){	struct http_bugs *bugs = (struct http_bugs *)di->cdata;	struct dialog *d;	d = mem_calloc(sizeof(struct dialog) + 17 * sizeof(struct dialog_item));	d->title = TEXT(T_HTTP_BUG_WORKAROUNDS);	d->fn = httpopt_fn;	d->udata = http_labels;	d->items[0].type = D_CHECKBOX;	d->items[0].gid = 0;	d->items[0].dlen = sizeof(int);	d->items[0].data = (void *)&bugs->http10;	d->items[1].type = D_CHECKBOX;	d->items[1].gid = 0;	d->items[1].dlen = sizeof(int);

⌨️ 快捷键说明

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