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

📄 svgalib.c

📁 ELinks is an advanced and well-established feature-rich text mode web (HTTP/FTP/..) browser. ELinks
💻 C
📖 第 1 页 / 共 5 页
字号:
/* svgalib.c * (c) 2000-2002 Karel 'Clock' Kulhavy * This file is a part of the Links program, released under GPL. * * This does graphics driver of svgalib, svgalib mouse. * This doesn't do svgalib keyboard. */#include "cfg.h"/*:%s/->left/->clip.x1/g:%s/->right/->clip.x2/g:%s/->top/->clip.y1/g:%s/->bottom/->clip.y2/g*/#ifdef GRDRV_SVGALIB#include "links.h"#include "bits.h"#ifdef TEXT#undef TEXT#endif#include <vga.h>#include <vgamouse.h>#include "arrow.inc"extern struct itrm *ditrm;extern struct graphics_driver svga_driver;static int mouse_x, mouse_y, mouse_buttons; /* For tracking the state of the mouse */static int background_x, background_y; /* Where was the mouse background taken from */static unsigned char *mouse_buffer, *background_buffer, *new_background_buffer;static struct graphics_device *mouse_graphics_device;static int global_mouse_hidden;static long mouse_black, mouse_white; /* Mouse arrow pointer colors */static int (* mouse_getscansegment)(unsigned char *, int, int, int);static int (* mouse_drawscansegment)(unsigned char *, int, int, int);static int mouse_works = 0;static unsigned char *svga_driver_param; /* NULL by default */static int vga_mode; /* The mode that has been selected */static struct graphics_device *backup_virtual_device;static int mouse_aggregate_flag, mouse_aggregate_action;static int flags = 0; /* OR-ed 1: running in background		*       2: vga_block()-ed		*/#ifndef __SPAD__static int svgalib_timer_id;#endif/*---------------------------LIMITATIONS---------------------------------------*//* pixel_set_paged works only for <=8 bytes per pixel. * Doesn't work on video cards which have 1 pixel spanning more that 65536 bytes! ( :-) ) * vga_linewidth%vga_bytes must be zero. * The bitmaps have all consecutive data. No vidram mallocing is performed. *//*------------------------STRUCTURES-------------------------------------------*/struct modeline{	unsigned char *name;	int number;};/*-------------- GLOBAL VARIABLES --------------------------------------------*/#define NUMBER_OF_DEVICES	10#define TEST_INACTIVITY if (dev!=current_virtual_device) return;#define TEST_INACTIVITY_0 if (dev!=current_virtual_device) return 0;#define RECTANGLES_INTERSECT(xl0, xh0, xl1, xh1, yl0, yh0, yl1, yh1) (\				   (xl0)<(xh1)\				&& (xl1)<(xh0)\				&& (yl0)<(yh1)\				&& (yl1)<(yh0))#define TEST_MOUSE(xl,xh,yl,yh) if (RECTANGLES_INTERSECT(\					(xl),(xh),\					background_x,background_x+arrow_width,\					(yl),(yh),\					background_y,background_y+arrow_height)\					&& !global_mouse_hidden){\					mouse_hidden=1;\					hide_mouse();\				}else mouse_hidden=0;#define END_MOUSE if (mouse_hidden) show_mouse();/* Actual vga mode definition */int vga_linewidth;		/* Prepared out from vga_getmodeinfo */int xsize, ysize;		/* Prepared out from vga_getmodeinfo */int vga_bytes;			/* Prepared out from vga_getmodeinfo */int vga_colors;			/* Prepared out from vga_getmodeinfo */int vga_misordered;		/* Prepared out from vga_getmodeinfo */int vga_linear;			/* 1 linear mode, 0 nonlinear mode (paged) */int palette_depth;		/* 6 for normal VGA, 8 for VGA which supports 8 bit DAC */int accel_avail;		/* Which accel fns are available */int do_sync;			/* Tells the "normal" memory operations (those				 * that do not use accelerator) to do				 * vga_accel(ACCEL_SYNC) before writing into the				 * memory.				 */int vga_page=-1;int mode_x;			/* 1 if mode_X organization is set up */int bmpixelsize;		/* Number of bytes per pixel in bitmap */unsigned char *my_graph_mem;unsigned char *scroll_buffer = NULL; /* For paged scrolling only */struct modeline modes[]={#ifdef G320x200x16	{"320x200x16", G320x200x16 },#endif#ifdef G320x200x256	{"320x200x256", G320x200x256 },#endif#ifdef G320x200x32K	{"320x200x32K", G320x200x32K },#endif#ifdef G320x200x64K	{"320x200x64K", G320x200x64K },#endif#ifdef G320x200x16M	{"320x200x16M", G320x200x16M },#endif#ifdef G320x200x16M32	{"320x200x16M32", G320x200x16M32 },#endif#ifdef G320x240x256	{"320x240x256", G320x240x256 },#endif#ifdef G320x240x32K	{"320x240x32K", G320x240x32K },#endif#ifdef G320x240x64K	{"320x240x64K", G320x240x64K },#endif#ifdef G320x240x16M	{"320x240x16M", G320x240x16M },#endif#ifdef G320x240x16M32	{"320x240x16M32", G320x240x16M32 },#endif#ifdef G320x400x256	{"320x400x256", G320x400x256 },#endif#ifdef G320x400x32K	{"320x400x32K", G320x400x32K },#endif#ifdef G320x400x64K	{"320x400x64K", G320x400x64K },#endif#ifdef G320x400x16M	{"320x400x16M", G320x400x16M },#endif#ifdef G320x400x16M32	{"320x400x16M32", G320x400x16M32 },#endif#ifdef G320x480x256	{"320x480x256", G320x480x256 },#endif#ifdef G320x480x32K	{"320x480x32K", G320x480x32K },#endif#ifdef G320x480x64K	{"320x480x64K", G320x480x64K },#endif#ifdef G320x480x16M	{"320x480x16M", G320x480x16M },#endif#ifdef G320x480x16M32	{"320x480x16M32", G320x480x16M32 },#endif#ifdef G360x480x256	{"360x480x256", G360x480x256 },#endif#ifdef G400x300x256	{"400x300x256", G400x300x256 },#endif#ifdef G400x300x32K	{"400x300x32K", G400x300x32K },#endif#ifdef G400x300x64K	{"400x300x64K", G400x300x64K },#endif#ifdef G400x300x16M	{"400x300x16M", G400x300x16M },#endif#ifdef G400x300x16M32	{"400x300x16M32", G400x300x16M32 },#endif#ifdef G400x600x256	{"400x600x256", G400x600x256 },#endif#ifdef G400x600x32K	{"400x600x32K", G400x600x32K },#endif#ifdef G400x600x64K	{"400x600x64K", G400x600x64K },#endif#ifdef G400x600x16M	{"400x600x16M", G400x600x16M },#endif#ifdef G400x600x16M32	{"400x600x16M32", G400x600x16M32 },#endif#ifdef G512x384x256	{"512x384x256", G512x384x256 },#endif#ifdef G512x384x32K	{"512x384x32K", G512x384x32K },#endif#ifdef G512x384x64K	{"512x384x64K", G512x384x64K },#endif#ifdef G512x384x16M	{"512x384x16M", G512x384x16M },#endif#ifdef G512x384x16M32	{"512x384x16M32", G512x384x16M32 },#endif#ifdef G512x480x256	{"512x480x256", G512x480x256 },#endif#ifdef G512x480x32K	{"512x480x32K", G512x480x32K },#endif#ifdef G512x480x64K	{"512x480x64K", G512x480x64K },#endif#ifdef G512x480x16M	{"512x480x16M", G512x480x16M },#endif#ifdef G512x480x16M32	{"512x480x16M32", G512x480x16M32 },#endif#ifdef G640x200x16	{"640x200x16", G640x200x16 },#endif#ifdef G640x350x16	{"640x350x16", G640x350x16 },#endif#ifdef G640x400x256	{"640x400x256", G640x400x256 },#endif#ifdef G640x400x32K	{"640x400x32K", G640x400x32K },#endif#ifdef G640x400x64K	{"640x400x64K", G640x400x64K },#endif#ifdef G640x400x16M	{"640x400x16M", G640x400x16M },#endif#ifdef G640x400x16M32	{"640x400x16M32", G640x400x16M32 },#endif#ifdef G640x480x16	{"640x480x16", G640x480x16 },#endif#ifdef G640x480x256	{"640x480x256", G640x480x256 },#endif#ifdef G640x480x32K	{"640x480x32K", G640x480x32K },#endif#ifdef G640x480x64K	{"640x480x64K", G640x480x64K },#endif#ifdef G640x480x16M	{"640x480x16M", G640x480x16M },#endif#ifdef G640x480x16M32	{"640x480x16M32", G640x480x16M32 },#endif#ifdef G720x540x256	{"720x540x256", G720x540x256 },#endif#ifdef G720x540x32K	{"720x540x32K", G720x540x32K },#endif#ifdef G720x540x64K	{"720x540x64K", G720x540x64K },#endif#ifdef G720x540x16M	{"720x540x16M", G720x540x16M },#endif#ifdef G720x540x16M32	{"720x540x16M32", G720x540x16M32 },#endif#ifdef G800x600x16	{"800x600x16", G800x600x16 },#endif#ifdef G800x600x256	{"800x600x256", G800x600x256 },#endif#ifdef G800x600x32K	{"800x600x32K", G800x600x32K },#endif#ifdef G800x600x64K	{"800x600x64K", G800x600x64K },#endif#ifdef G800x600x16M	{"800x600x16M", G800x600x16M },#endif#ifdef G800x600x16M32	{"800x600x16M32", G800x600x16M32 },#endif#ifdef G848x480x256	{"848x480x256", G848x480x256 },#endif#ifdef G848x480x32K	{"848x480x32K", G848x480x32K },#endif#ifdef G848x480x64K	{"848x480x64K", G848x480x64K },#endif#ifdef G848x480x16M	{"848x480x16M", G848x480x16M },#endif#ifdef G848x480x16M32	{"848x480x16M32", G848x480x16M32 },#endif#ifdef G960x720x256	{"960x720x256", G960x720x256 },#endif#ifdef G960x720x32K	{"960x720x32K", G960x720x32K },#endif#ifdef G960x720x64K	{"960x720x64K", G960x720x64K },#endif#ifdef G960x720x16M	{"960x720x16M", G960x720x16M },#endif#ifdef G960x720x16M32	{"960x720x16M32", G960x720x16M32 },#endif#ifdef G1024x768x16	{"1024x768x16", G1024x768x16 },#endif#ifdef G1024x768x256	{"1024x768x256", G1024x768x256 },#endif#ifdef G1024x768x32K	{"1024x768x32K", G1024x768x32K },#endif#ifdef G1024x768x64K	{"1024x768x64K", G1024x768x64K },#endif#ifdef G1024x768x16M	{"1024x768x16M", G1024x768x16M },#endif#ifdef G1024x768x16M32	{"1024x768x16M32", G1024x768x16M32 },#endif#ifdef G1072x600x256	{"1072x600x256", G1072x600x256 },#endif#ifdef G1072x600x32K	{"1072x600x32K", G1072x600x32K },#endif#ifdef G1072x600x64K	{"1072x600x64K", G1072x600x64K },#endif#ifdef G1072x600x16M	{"1072x600x16M", G1072x600x16M },#endif#ifdef G1072x600x16M32	{"1072x600x16M32", G1072x600x16M32 },#endif#ifdef G1152x864x16	{"1152x864x16", G1152x864x16 },#endif#ifdef G1152x864x256	{"1152x864x256", G1152x864x256 },#endif#ifdef G1152x864x32K	{"1152x864x32K", G1152x864x32K },#endif#ifdef G1152x864x64K	{"1152x864x64K", G1152x864x64K },#endif#ifdef G1152x864x16M	{"1152x864x16M", G1152x864x16M },#endif#ifdef G1152x864x16M32	{"1152x864x16M32", G1152x864x16M32 },#endif#ifdef G1280x720x256	{"1280x720x256", G1280x720x256 },#endif#ifdef G1280x720x32K	{"1280x720x32K", G1280x720x32K },#endif#ifdef G1280x720x64K	{"1280x720x64K", G1280x720x64K },#endif#ifdef G1280x720x16M	{"1280x720x16M", G1280x720x16M },#endif#ifdef G1280x720x16M32	{"1280x720x16M32", G1280x720x16M32 },#endif#ifdef G1280x1024x16	{"1280x1024x16", G1280x1024x16 },#endif#ifdef G1280x1024x256	{"1280x1024x256", G1280x1024x256 },#endif#ifdef G1280x1024x32K	{"1280x1024x32K", G1280x1024x32K },#endif#ifdef G1280x1024x64K	{"1280x1024x64K", G1280x1024x64K },#endif#ifdef G1280x1024x16M	{"1280x1024x16M", G1280x1024x16M },#endif#ifdef G1280x1024x16M32	{"1280x1024x16M32", G1280x1024x16M32 },#endif#ifdef G1360x768x256	{"1360x768x256", G1360x768x256 },#endif#ifdef G1360x768x32K	{"1360x768x32K", G1360x768x32K },#endif#ifdef G1360x768x64K	{"1360x768x64K", G1360x768x64K },#endif#ifdef G1360x768x16M	{"1360x768x16M", G1360x768x16M },#endif#ifdef G1360x768x16M32	{"1360x768x16M32", G1360x768x16M32 },#endif#ifdef G1600x1200x16	{"1600x1200x16", G1600x1200x16 },#endif#ifdef G1600x1200x256	{"1600x1200x256", G1600x1200x256 },#endif#ifdef G1600x1200x32K	{"1600x1200x32K", G1600x1200x32K },#endif#ifdef G1600x1200x64K	{"1600x1200x64K", G1600x1200x64K },#endif#ifdef G1600x1200x16M	{"1600x1200x16M", G1600x1200x16M },#endif#ifdef G1600x1200x16M32	{"1600x1200x16M32", G1600x1200x16M32 },#endif#ifdef G1800x1012x256	{"1800x1012x256", G1800x1012x256 },#endif#ifdef G1800x1012x32K	{"1800x1012x32K", G1800x1012x32K },#endif#ifdef G1800x1012x64K	{"1800x1012x64K", G1800x1012x64K },#endif#ifdef G1800x1012x16M	{"1800x1012x16M", G1800x1012x16M },#endif#ifdef G1800x1012x16M32	{"1800x1012x16M32", G1800x1012x16M32 },#endif#ifdef G1920x1080x256	{"1920x1080x256", G1920x1080x256 },#endif#ifdef G1920x1080x32K	{"1920x1080x32K", G1920x1080x32K },#endif#ifdef G1920x1080x64K	{"1920x1080x64K", G1920x1080x64K },#endif#ifdef G1920x1080x16M	{"1920x1080x16M", G1920x1080x16M },#endif#ifdef G1920x1080x16M32	{"1920x1080x16M32", G1920x1080x16M32 },#endif#ifdef G1920x1440x256	{"1920x1440x256", G1920x1440x256 },#endif#ifdef G1920x1440x32K	{"1920x1440x32K", G1920x1440x32K },#endif#ifdef G1920x1440x64K	{"1920x1440x64K", G1920x1440x64K },

⌨️ 快捷键说明

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