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

📄 lineart.c

📁 linux 下svgalib编的一个界面程序示例
💻 C
字号:
/*  A program to test any mode for linear.  Default mode is G640x480x256 = 10**  or parameters may be used giving modes as integers.** linp [mode mode ...]**                          Don Secrest Oct. 1998*/#include <vga.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>static void screen(int mode){  int bpp,bott,endp,linlen,i,j,bii,col,p;  vga_modeinfo *minf;  unsigned char *vbuf;  int mem;    if(mode == 0)    {      printf("Usage:linp [mode mode ...]\n              where mode is an integer.\n");      return;    }  if(! vga_hasmode(mode)) {    printf("Invalid mode %d\n",mode);    return;  }  vga_setmode(mode);  minf = vga_getmodeinfo(mode);  if(! (minf->flags & CAPABLE_LINEAR)){    vga_setmode(TEXT);    printf("The mode %d is not capable of linear\n",mode);    return;  }  vga_setpage(0);  if(vga_setlinearaddressing() == -1) {    vga_setmode(TEXT);    printf("Could not set linear addressing for mode %d\n",mode);    return;  }  bpp = minf->bytesperpixel;  linlen = minf->width*bpp;  bott = linlen*17;            /* pointer 17 pixels wide. */  endp = linlen*minf->height;  mem = minf->linewidth*minf->height;  /* Do random pixels */  vbuf = vga_getgraphmem();  printf("Memory mapped to %08x. Mode = %d.\n",(int) vbuf,mode);  memset(vbuf,0,mem);    /* Clear out 2 megabytes of memory, */  for(i = 0;i < 100000;i++)    {      p = rand() % mem-2;      *(vbuf + p) = rand() & 0xff;      if(bpp > 1)	*(vbuf + p + 1) = rand() & 0xff;      if(bpp == 3) 	*(vbuf + p + 2) = rand() & 0xff;    }  /* Place marker at top left and bottem right. */  for(i = 0;i < 44;i += bpp) {    *(vbuf + i) = 0x60;    *(vbuf + bott + i) = 0x60;    *(vbuf + endp - i) = 0x60;    bii = endp -1 -bott;    *(vbuf + bii -i) = 0x60;    if(bpp > 1) {      *(vbuf + i + 1) = 0x60;      *(vbuf + i + 1 + bott) = 0x60;      *(vbuf - i - 1 + endp) = 0x60;      *(vbuf - i - 1 + bii) = 0x60;    }    if(bpp == 3) {            *(vbuf + i + 2) = 0x60;	    *(vbuf + i + 2 + bott) = 0x60;	    *(vbuf - i - 2 + endp) = 0x60;	    *(vbuf - i - 2 + bii) = 0x60;    }    col = (i == 0 || i >= 42)? 0x60:0;    for(j = 1;j < 17;j++) {      *(vbuf + i + linlen*j) = col;      *(vbuf - i + endp -1 - linlen*j) = col;      if(bpp > 1) {	*(vbuf + i + 1 + linlen*j) = col;	*(vbuf - i - 2 + endp - linlen*j) = col;      }      if(bpp == 3) {	*(vbuf + i + 2 + linlen*j) = col;	*(vbuf - i - 3 + endp - linlen*j) = col;      }    }  }  for(i = 5;i < 12;i += bpp)    for(j = 4;j < 12;j++) {            *(vbuf + i + linlen*j) = 0x3f;	    *(vbuf + endp - i - bpp - linlen*j) = 0x3f;    }  getchar();   /* Wait for a key punch */}intmain(int argc,char *argv[]){  int mode,c;  vga_init();  c=1;  if(argc == 1)    screen(10);     /* G640x480x256 */  else    c = 0;  while(argc > 1)    {      argc--;      c++;      if(isdigit(*argv[c]))	mode = atoi(argv[c]);      else if(*argv[c] == 'G')	mode = vga_getmodenumber(argv[c]);      else	{	  printf("Unknown mode %s\n",argv[c]);	  continue;	}      screen(mode);    }  vga_setmode(TEXT);  return 0;}

⌨️ 快捷键说明

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