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

📄 unix.c

📁 elinks下lynx是最重要的二个文本浏览器, 在linux下非常实用, elinks也是gentoo安装过程中默认使用的浏览器, 这是elinks源代码
💻 C
字号:
/* UNIX system-specific routines. */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "osdep/system.h"#if defined(CONFIG_GPM) && defined(HAVE_GPM_H)#include <gpm.h>#endif#include "elinks.h"#include "main/select.h"#include "osdep/unix/unix.h"#include "osdep/osdep.h"#include "terminal/event.h"#include "terminal/mouse.h"#include "util/memory.h"#if defined(CONFIG_GPM) && defined(CONFIG_MOUSE)struct gpm_mouse_spec {	int h;	int cons;	void (*fn)(void *, unsigned char *, int);	void *data;};static voidgpm_mouse_in(struct gpm_mouse_spec *gms){	Gpm_Event gev;	struct term_event ev;	struct term_event_mouse mouse;	if (Gpm_GetEvent(&gev) <= 0) {		clear_handlers(gms->h);		return;	}	mouse.x = int_max(gev.x - 1, 0);	mouse.y = int_max(gev.y - 1, 0);	if (gev.buttons & GPM_B_LEFT)		mouse.button = B_LEFT;	else if (gev.buttons & GPM_B_MIDDLE)		mouse.button = B_MIDDLE;	else if (gev.buttons & GPM_B_RIGHT)		mouse.button = B_RIGHT;	else		return;	if (gev.type & GPM_DOWN)		mouse.button |= B_DOWN;	else if (gev.type & GPM_UP)		mouse.button |= B_UP;	else if (gev.type & GPM_DRAG)		mouse.button |= B_DRAG;	else		return;	set_mouse_term_event(&ev, mouse.x, mouse.y, mouse.button);	gms->fn(gms->data, (char *) &ev, sizeof(ev));}static intinit_mouse(int cons, int suspend){	Gpm_Connect conn;	conn.eventMask = suspend ? 0 : ~GPM_MOVE;	conn.defaultMask = suspend ? ~0 : GPM_MOVE;	conn.minMod = suspend ? ~0 : 0;	conn.maxMod = suspend ? ~0 : 0;	return Gpm_Open(&conn, cons);}static intdone_mouse(void){	return Gpm_Close();}void *handle_mouse(int cons, void (*fn)(void *, unsigned char *, int),	     void *data){	int h;	struct gpm_mouse_spec *gms;	h = init_mouse(cons, 0);	if (h < 0) return NULL;	gms = mem_alloc(sizeof(*gms));	if (!gms) return NULL;	gms->h = h;	gms->cons = cons;	gms->fn = fn;	gms->data = data;	set_handlers(h, (select_handler_T) gpm_mouse_in, NULL, NULL, gms);	return gms;}voidunhandle_mouse(void *h){	struct gpm_mouse_spec *gms = h;	if (!gms) return;	clear_handlers(gms->h);	mem_free(gms);	done_mouse();}voidsuspend_mouse(void *h){	struct gpm_mouse_spec *gms = h;	if (!gms) return;	gms->h = init_mouse(gms->cons, 1);	if (gms->h < 0) return;	clear_handlers(gms->h);}voidresume_mouse(void *h){	struct gpm_mouse_spec *gms = h;	if (!gms) return;	gms->h = init_mouse(gms->cons, 0);	if (gms->h < 0) return;	set_handlers(gms->h, (select_handler_T) gpm_mouse_in, NULL, NULL, gms);}#endif

⌨️ 快捷键说明

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