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

📄 accel.c

📁 linux 下svgalib编的一个界面程序示例
💻 C
📖 第 1 页 / 共 3 页
字号:
			for(i = 0; i < 8; i++)			    bmaptmp[i] = rotbyte(gl_font8x8['3' * 8 + i]);			vga_accel(ACCEL_PUTBITMAP, x + w - 9, y + h - 9,				8, 8, bmaptmp);			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 255, 0));			xo = (w - wizard_width) / 2;			yo = (h - wizard_height) / 2;			vga_accel(ACCEL_PUTBITMAP, x + xo, y + yo,				wizard_width, wizard_height, conv_wizard_bits);		    }		    break;		case 7:		    if ((accelfuncs & ACCELFLAG_PUTBITMAP) &&			    (accelfuncs & ACCELFLAG_SETTRANSPARENCY) &&			    (transfuncs & ACCELFLAG_PUTBITMAP) &&			    (transmodes & (1 << ENABLE_BITMAP_TRANSPARENCY))) {			gl_write(x + 1, y + h + 3, "BitmapTransparency");			gl_putbox(x + 1, y + 1, w - 2, h - 2, scaleimage); 			vga_accel(ACCEL_SETTRANSPARENCY, ENABLE_BITMAP_TRANSPARENCY);			vga_accel(ACCEL_SETBGCOLOR, gl_rgbcolor(255, 0, 0));			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 0, 0));			vga_accel(ACCEL_PUTBITMAP, x + 1, y + 1,				wizardmsk_width, wizardmsk_height, conv_wizardmsk_bits);			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 255, 0));			vga_accel(ACCEL_PUTBITMAP, x + 1, y + 1,				wizard_width, wizard_height, conv_wizard_bits);			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 0, 0));			vga_accel(ACCEL_PUTBITMAP, x + w - wizard_width - 1, y + 1,				wizard_width, wizard_height, conv_wizard_bits);			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 0));			vga_accel(ACCEL_PUTBITMAP, x + 1, y + h - wizard_height - 1,				wizard_width, wizard_height, conv_wizard_bits);			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 255));			vga_accel(ACCEL_PUTBITMAP, x + w - wizard_width - 1,				y + h - wizard_height - 1,				wizard_width, wizard_height, conv_wizard_bits);			vga_accel(ACCEL_SETTRANSPARENCY, DISABLE_BITMAP_TRANSPARENCY);		    }		    break;		case 8:		    if (accelfuncs & ACCELFLAG_SCREENCOPYMONO) {			gl_write(x + 1, y + h + 3, "MonoScreenCopy");			vga_accel(ACCEL_SETBGCOLOR, gl_rgbcolor(255, 0, 0));			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 0));			vga_accel(ACCEL_SCREENCOPYMONO, x + 1, y + h + 3,				x + 1, y + 1, 14 * 8, 8);			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 0, 0));			vga_accel(ACCEL_SETBGCOLOR, gl_rgbcolor(0, 255, 0));			vga_accel(ACCEL_SCREENCOPYMONO, x + 1, y + h + 3,				x + w - 1 - 14 * 8, y + 1, 14 * 8, 8);			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 0, 0));			vga_accel(ACCEL_SETBGCOLOR, gl_rgbcolor(255, 255, 255));			vga_accel(ACCEL_SCREENCOPYMONO, x + 1, y + h + 3,				x + 1, y + h - 9, 14 * 8, 8);			vga_accel(ACCEL_SETBGCOLOR, gl_rgbcolor(0, 0, 0));			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 255, 255));			vga_accel(ACCEL_SCREENCOPYMONO, x + 1, y + h + 3,				x + w - 1 - 14 * 8, y + h - 9, 14 * 8, 8);		   }		   break;		case 9:		   if (accelfuncs & ACCELFLAG_POLYLINE) {			unsigned short X = x + 1, Y = y + 1, W = x + w - 2,				       H = y + (h >> 1) - 2;						unsigned short coords[] = {				X, Y, (X + W)/2, Y, W, Y,				W, H, X + (3 * (W - X))/4, H,				(X + W)/2, (Y + H)/2,				X + (W - X)/4, H, X, H, X, Y			};			gl_write(x + 1, y + h + 3, "Polyline");			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 0));			draw_poly(coords);			if ((ropfuncs & ACCELFLAG_POLYLINE) &&				(accelfuncs & ACCELFLAG_SETRASTEROP) &&				(ropmodes & (1 << ROP_XOR))) {			    vga_accel(ACCEL_SETRASTEROP, ROP_XOR);			    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 255));			}						H = y + h - 2 - H;			for (X = 1; X < (sizeof(coords) / sizeof(unsigned short)); X += 2) {			    coords[X] += H;			}			draw_poly(coords);			if ((ropfuncs & ACCELFLAG_POLYLINE) &&				(accelfuncs & ACCELFLAG_SETRASTEROP)) {			    vga_accel(ACCEL_SETRASTEROP, ROP_COPY);			}		   }		   break;		case 10:		   if (accelfuncs & ACCELFLAG_POLYHLINE) {			gl_write(x + 1, y + h + 3, "PolyHLine");			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 0));			draw_polyhli(x + 1, y + 1, w - 2, h - 2);		   }		   break;		case 11:		   if ((accelfuncs & ACCELFLAG_POLYLINE) &&				(accelfuncs & ACCELFLAG_SETRASTEROP) &&				(accelfuncs & ACCELFLAG_SCREENCOPYMONO) &&				(accelfuncs & ACCELFLAG_POLYFILLMODE) &&				(accelfuncs & ACCELFLAG_DRAWLINE) &&				(ropfuncs & ACCELFLAG_DRAWLINE) &&				(maxy > (HEIGHT + h)) &&				(ropmodes & (1 << ROP_XOR))) {			gl_write(x + 1, y + h + 3, "PolygonFillMode");			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 0, 0));			vga_accel(ACCEL_FILLBOX, x + 1, HEIGHT, w - 2, h - 2);			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 255, 255));			vga_accel(ACCEL_SETRASTEROP, ROP_XOR);			vga_accel(ACCEL_POLYFILLMODE, 1);			draw_polygon(1, x + 1, HEIGHT, w - 2, h - 2);			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 0, 0));			vga_accel(ACCEL_SETRASTEROP, ROP_COPY);			vga_accel(ACCEL_SCREENCOPYMONO, x + 1, HEIGHT,				  x + 1, y + 1, w - 2, h - 2);			vga_accel(ACCEL_POLYFILLMODE, 0);			vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 0));			draw_polygon(0, x + 1, y + 1, w - 2, h - 2);		   }		   goto endtest;	    }	}  endtest:    vga_getch();}void drawdisk(int x, int y, int n, int *xmin, int *xmax) {    int i;    int *xmin2, *xmax2;    xmin2 = alloca(sizeof(int) * n);    xmax2 = alloca(sizeof(int) * n);    for (i = 0; i < n; i++) {	xmin2[i] = xmin[i] + x;	xmax2[i] = xmax[i] + x;    }    vga_accel(ACCEL_DRAWHLINELIST, y, n, xmin2, xmax2);}char *RopNames[] = { "Copy/Replace", "Or", "And", "Xor", "Invert" };void RopTest(void) {    int x, y, i, w, h, wsq, xo, yo, red, x1, x2;    int *xmin, *xmax;    if (!(ropfuncs & (ACCEL_DRAWHLINELIST | ACCELFLAG_FILLBOX))) {	printf("Rasteroperation test needs HLINELIST or FILLBOX\n");	return;    }    vga_accel(ACCEL_SETTRANSPARENCY, ENABLE_TRANSPARENCY_COLOR, gl_rgbcolor(255, 0, 0));    w = BOXES_WIDTH - 2 * BOXES_B;    h = BOXES_HEIGHT - 2 * BOXES_B;    wsq = min((w * 2)/3, (h * 2)/3);    xmin = alloca(sizeof(int) * wsq);    xmax = alloca(sizeof(int) * wsq);    xo = wsq / 2;    yo = xo * xo;    for (i = 0; i < wsq; i++) {	red = sqrt(yo - (i - xo) * (i - xo));	xmin[i] = xo - red;	xmax[i] = xo + red;    }    yo = h - wsq - 1;    xo = (w - wsq) / 2;    red = gl_rgbcolor(255, 0, 0);    x1 = xo - (wsq - yo)/2;    if (x1 < 1)	x1 = 1;    x2 = w - wsq - x1;    gl_write(0, 0, "Testing raster operations:");    for(y = BOXES_B + 8, i = 0; y < HEIGHT; y += BOXES_HEIGHT)	for(x = BOXES_B; x < WIDTH; x += BOXES_WIDTH) {	    DrawFrame(x, y, x + w - 1, y + h - 1, red);	    if (! (ropmodes & (1 << i)))		goto nextrop;	    if ((i == ROP_AND) || (i == ROP_XOR)) {		vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 255, 255));		vga_accel(ACCEL_FILLBOX, x + 1, y + 1, w - 2, h - 2);		if (accelfuncs & ACCELFLAG_DRAWHLINELIST) {		    vga_accel(ACCEL_SETRASTEROP, i);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 255));		    drawdisk(x + x1, y + 1, wsq, xmin, xmax);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 0, 255));		    drawdisk(x + x2, y + 1, wsq, xmin, xmax);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 255, 0));		    drawdisk(x + xo, y + yo, wsq, xmin, xmax);		} else {		    vga_accel(ACCEL_SETRASTEROP, i);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 255));		    vga_accel(ACCEL_FILLBOX, x + x1, y + 1, wsq, wsq);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 0, 255));		    vga_accel(ACCEL_FILLBOX, x + x2, y + 1, wsq, wsq);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 255, 0));		    vga_accel(ACCEL_FILLBOX, x + xo, y + yo, wsq, wsq);		}	    } else {		if (accelfuncs & ACCELFLAG_DRAWHLINELIST) {		    vga_accel(ACCEL_SETRASTEROP, i);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 0, 0));		    drawdisk(x + x1, y + 1, wsq, xmin, xmax);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 0));		    drawdisk(x + x2, y + 1, wsq, xmin, xmax);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 0, 255));		    drawdisk(x + xo, y + yo, wsq, xmin, xmax);		} else {		    vga_accel(ACCEL_SETRASTEROP, i);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(255, 0, 0));		    vga_accel(ACCEL_FILLBOX, x + x1, y + 1, wsq, wsq);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 255, 0));		    vga_accel(ACCEL_FILLBOX, x + x2, y + 1, wsq, wsq);		    vga_accel(ACCEL_SETFGCOLOR, gl_rgbcolor(0, 0, 255));		    vga_accel(ACCEL_FILLBOX, x + xo, y + yo, wsq, wsq);		}	    }	    vga_accel(ACCEL_SETRASTEROP, ROP_COPY);	    gl_write(x + 1, y + h + 3, RopNames[i]);	  nextrop:	    i++;	    if (i >= (sizeof(RopNames) / sizeof(char *)))		goto endtest;	}  endtest:    vga_getch();}void QixDemo(int rop, char *txt) {    int current = 0, dx1, dy1, dx2, dy2, i, cols = 1, cx1, cx2, cy1, cy2;    int startclock, diffclock;    unsigned long pixels = 0, numlines = 0;    struct {	unsigned short x1;		unsigned short y1;		unsigned short x2;		unsigned short y2;		int col;	int pix;    } lines[QIXLINES];    if ( !(ropmodes & (1 << rop)) ||	 !(accelfuncs & ACCELFLAG_DRAWLINE))		return;    if ((rop != ROP_COPY) &&	 !(accelfuncs & ACCELFLAG_SETRASTEROP))		return;    DrawDots();    gl_write(1, 1, txt);    memset(lines, 0, sizeof(lines));    cx1 = rand() % WIDTH;    cy1 = rand() % HEIGHT;    cx2 = rand() % WIDTH;    cy2 = rand() % HEIGHT;    dx1 = 5 - rand() % 10;    dy1 = 5 - rand() % 10;    dx2 = 5 - rand() % 10;    dy2 = 5 - rand() % 10;    if (rop != ROP_COPY)	vga_accel(ACCEL_SETRASTEROP, rop);    startclock = clock();    for(i = 0; i < 10000; i++) {	diffclock = clock() - startclock;	if (diffclock > 5 * CLOCKS_PER_SEC)	    break;	if (lines[current].col) {	    if (rop != ROP_COPY)		vga_accel(ACCEL_SETFGCOLOR, lines[current].col);	    else		vga_accel(ACCEL_SETFGCOLOR, 0);	    vga_accel(ACCEL_DRAWLINE, lines[current].x1, lines[current].y1,		      lines[current].x2, lines[current].y2);	    numlines++;	    pixels += lines[current].pix;	}	cx1 += dx1;	if ((cx1 < 0) || (cx1 >= WIDTH)) {	    dx1 = -dx1;	    cx1 += dx1 << 1;	}	cx2 += dx2;	if ((cx2 < 0) || (cx2 >= WIDTH)) {	    dx2 = -dx2;	    cx2 += dx2 << 1;	}	cy1 += dy1;	if ((cy1 < 0) || (cy1 >= HEIGHT)) {	    dy1 = -dy1;	    cy1 += dy1 << 1;	}	cy2 += dy2;	if ((cy2 < 0) || (cy2 >= HEIGHT)) {	    dy2 = -dy2;	    cy2 += dy2 << 1;	}	lines[current].x1 = cx1;	lines[current].x2 = cx2;	lines[current].y1 = cy1;	lines[current].y2 = cy2;	lines[current].col = cols;	vga_accel(ACCEL_SETFGCOLOR, cols++);	if (cols >= COLORS)	    cols = 1;	vga_accel(ACCEL_DRAWLINE, lines[current].x1, lines[current].y1,		  lines[current].x2, lines[current].y2);	numlines++;	pixels += lines[current].pix = max(abs(lines[current].x1 - lines[current].x2),					   abs(lines[current].y1 - lines[current].y2));	current++;	if (current >= QIXLINES)	    current = 0;    }    if (rop != ROP_COPY)	vga_accel(ACCEL_SETRASTEROP, ROP_COPY);    cy1 = ((long long) numlines * CLOCKS_PER_SEC) / diffclock;    cx1 = ((long long) pixels * CLOCKS_PER_SEC) / diffclock;    cx2 = cx1 * BYTESPERPIXEL;    printf("%s: %ld.%ld Klines/s (%ld.%ld Mpixels/s or %ld.%ld Mbytes/s)\n", txt,	   cy1 / 1000L, (cy1 % 1000L) / 100L,	   cx1 / 1000000L, (cx1 % 1000000L) / 100000L,	   cx2 / 1000000L, (cx2 % 1000000L) / 100000L);}

⌨️ 快捷键说明

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