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

📄 info.c

📁 一个很有名的浏览器
💻 C
字号:
/* Info dialogs *//* $Id: info.c,v 1.119.4.7 2005/04/06 09:11:18 jonas Exp $ */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <stdio.h>#include <stdlib.h>#include <string.h>#ifdef HAVE_UNISTD_H#include <unistd.h>#endif#include "elinks.h"#include "bfu/dialog.h"#include "cache/cache.h"#include "config/kbdbind.h"#include "config/options.h"#include "dialogs/info.h"#include "document/html/renderer.h"#include "intl/gettext/libintl.h"#include "lowlevel/select.h"#include "modules/version.h"#include "sched/connection.h"#include "sched/session.h"#include "terminal/terminal.h"#include "util/conv.h"#ifdef DEBUG_MEMLEAK#include "util/memdebug.h"#endif#include "util/memlist.h"#include "util/memory.h"#include "util/string.h"voidmenu_about(struct terminal *term, void *xxx, void *xxxx){	info_box(term, MSGBOX_FREE_TEXT,		 N_("About"), ALIGN_CENTER,		 get_dyn_full_version(term, 1));}struct keys_toggle_info {	struct terminal *term;	int toggle;};static voidpush_toggle_keys_display_button(void *data){	struct keys_toggle_info *info = data;	menu_keys(info->term, (void *) (long) !info->toggle, NULL);}voidmenu_keys(struct terminal *term, void *d_, void *xxx){	int d = (long) d_;	/* We scale by main mapping because it has the most actions */	int actions[MAIN_ACTIONS] = {		ACT_MAIN_MENU,		ACT_MAIN_QUIT,		ACT_MAIN_MOVE_LINK_NEXT,		ACT_MAIN_MOVE_LINK_PREV,		ACT_MAIN_SCROLL_DOWN,		ACT_MAIN_SCROLL_UP,		ACT_MAIN_SCROLL_LEFT,		ACT_MAIN_SCROLL_RIGHT,		ACT_MAIN_HISTORY_MOVE_BACK,		ACT_MAIN_GOTO_URL,		ACT_MAIN_GOTO_URL_CURRENT,		ACT_MAIN_DOCUMENT_INFO,		ACT_MAIN_HEADER_INFO,		ACT_MAIN_SEARCH,		ACT_MAIN_SEARCH_BACK,		ACT_MAIN_FIND_NEXT,		ACT_MAIN_FIND_NEXT_BACK,		ACT_MAIN_LINK_FOLLOW,		ACT_MAIN_LINK_DOWNLOAD,		ACT_MAIN_TOGGLE_HTML_PLAIN,		ACT_MAIN_NONE,	};	struct string keys;	struct keys_toggle_info *info;	info = mem_calloc(1, sizeof(*info));	if (!info || !init_string(&keys)) {		mem_free_if(info);		return;	}	info->term = term;	info->toggle = d;	if (info->toggle) {		int action;		enum keymap map;		for (action = 0; action < MAIN_ACTIONS - 1; action++) {			actions[action] = action + 1;		}		for (map = 0; map < KEYMAP_MAX; map++) {			add_actions_to_string(&keys, actions, map, term);			if (map + 1 < KEYMAP_MAX)				add_to_string(&keys, "\n\n");			/* Just a little reminder that the following code takes			 * the easy way. */			assert(MAIN_ACTIONS > EDIT_ACTIONS);			assert(EDIT_ACTIONS > MENU_ACTIONS);			if (map == KEYMAP_MAIN) {				actions[EDIT_ACTIONS] = ACT_EDIT_NONE;			} else if (map == KEYMAP_EDIT) {				actions[MENU_ACTIONS] = ACT_MENU_NONE;			}		}	} else {		add_actions_to_string(&keys, (int *) actions, KEYMAP_MAIN, term);	}	msg_box(term, getml(info, NULL), MSGBOX_FREE_TEXT | MSGBOX_SCROLLABLE,		N_("Keys"), ALIGN_LEFT,		keys.source,		info, 2,		N_("~OK"), NULL, B_ENTER | B_ESC,		N_("~Toggle display"), push_toggle_keys_display_button, B_ENTER);}voidmenu_copying(struct terminal *term, void *xxx, void *xxxx){	info_box(term, MSGBOX_FREE_TEXT,		 N_("Copying"), ALIGN_CENTER,		 msg_text(term, N_("ELinks %s\n"		 	 "\n"			 "(C) 1999 - 2002 Mikulas Patocka\n"			 "(C) 2001 - 2004 Petr Baudis\n"			 "(C) 2002 - 2005 Jonas Fonseca\n"			 "and others\n"			 "\n"			 "This program is free software; you can redistribute it "			 "and/or modify it under the terms of the GNU General Public "			 "License as published by the Free Software Foundation, "			 "specifically version 2 of the License."),			 VERSION_STRING));}static unsigned char *get_resource_info(struct terminal *term, void *data){	struct string info;	int terminal_count = 0, session_count = 0;	struct terminal *terminal;	struct session *ses;	long val;	if (!init_string(&info))		return NULL;	foreach (terminal, terminals)		terminal_count++;	foreach (ses, sessions)		session_count++;#define val_add(text) \	add_format_to_string(&info, text, val);	add_to_string(&info, _("Resources", term));	add_to_string(&info, ": ");	val = select_info(INFO_FILES);	val_add(n_("%d handle", "%d handles", val, term));	add_to_string(&info, ", ");	val = select_info(INFO_TIMERS);	val_add(n_("%d timer", "%d timers", val, term));	add_to_string(&info, ".\n");	add_to_string(&info, _("Connections", term));	add_to_string(&info, ": ");	val = connect_info(INFO_FILES);	val_add(n_("%d connection", "%d connections", val, term));	add_to_string(&info, ", ");	val = connect_info(INFO_CONNECTING);	val_add(n_("%d connecting", "%d connecting", val, term));	add_to_string(&info, ", ");	val = connect_info(INFO_TRANSFER);	val_add(n_("%d transferring", "%d transferring", val, term));	add_to_string(&info, ", ");	val = connect_info(INFO_KEEP);	val_add(n_("%d keepalive", "%d keepalive", val, term));	add_to_string(&info, ".\n");	add_to_string(&info, _("Memory cache", term));	add_to_string(&info, ": ");	val = cache_info(INFO_BYTES);	val_add(n_("%d byte", "%d bytes", val, term));	add_to_string(&info, ", ");	val = cache_info(INFO_FILES);	val_add(n_("%d file", "%d files", val, term));	add_to_string(&info, ", ");	val = cache_info(INFO_LOCKED);	val_add(n_("%d locked", "%d locked", val, term));	add_to_string(&info, ", ");	val = cache_info(INFO_LOADING);	val_add(n_("%d loading", "%d loading", val, term));	add_to_string(&info, ".\n");	add_to_string(&info, _("Document cache", term));	add_to_string(&info, ": ");	val = formatted_info(INFO_FILES);	val_add(n_("%d formatted", "%d formatted", val, term));	add_to_string(&info, ", ");	val = formatted_info(INFO_LOCKED);	val_add(n_("%d locked", "%d locked", val, term));	add_to_string(&info, ", ");	val = formatted_info(INFO_TIMERS);	val_add(n_("%d refreshing", "%d refreshing", val, term));	add_to_string(&info, ".\n");	add_to_string(&info, _("Interlinking", term));	add_to_string(&info, ": ");	if (term->master)		add_to_string(&info, _("master terminal", term));	else		add_to_string(&info, _("slave terminal", term));	add_to_string(&info, ", ");	val = terminal_count;	val_add(n_("%d terminal", "%d terminals", val, term));	add_to_string(&info, ", ");	val = session_count;	val_add(n_("%d session", "%d sessions", val, term));	add_char_to_string(&info, '.');#ifdef DEBUG_MEMLEAK	add_char_to_string(&info, '\n');	add_to_string(&info, _("Memory allocated", term));	add_to_string(&info, ": ");	val = mem_stats.amount;	val_add(n_("%d byte", "%d bytes", val, term));	add_to_string(&info, ", ");	val = mem_stats.true_amount - mem_stats.amount;	val_add(n_("%d byte overhead", "%d bytes overhead", val, term));	add_format_to_string(&info, " (%0.2f%%).",		(double) (mem_stats.true_amount - mem_stats.amount) / (double) mem_stats.amount * 100);#endif /* DEBUG_MEMLEAK */#undef val_add	return info.source;}voidresource_info(struct terminal *term){	refreshed_msg_box(term, 0, N_("Resources"), ALIGN_LEFT,			  get_resource_info, NULL);}

⌨️ 快捷键说明

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