Linux程序设计入门 - SVGALIB 

  SvgaLib是Linux Console下的VGA驱动函数库。虽然它的品质还是有点低,支援 
   
  的萤幕卡种类不算太多,但是有许多的游戏及程序都是用它来做开发,可以算 
   
  是非官方的标准了。如果您准备要在Console下撰写图形功能的程序,目前来说 
   
  SVGALIB是您唯一的选择。目前使用SVGALIB的程序有许多,中文终端机使用 
   
  SVGALIB的就有a4c.tty/yact/bcs16。  
 
   
  这里我只讲一些简单的使用方法,如启动vga及mouse的使用。要有效地、高阶 
   
  的运用,技巧复杂很多,例如a4c.tty就另外往上架一层Star Window  
   
  Manager,来管理一个小型视窗系统。  
 
 
   
  vga  
   
     
 
   
  vgamouse  
   
     
 
 
 
   
  int vga_setmode(int mode);  
   
  int vga_hasmode(int mode);  
   
  int vga_setpalette(int index, int red, int green, int blue);  
   
  int vga_getpalette(int index, int *red, int *green, int *blue);  
   
  int vga_setcolor(int color);  
   
  int vga_drawpixel(int x, int y);  
   
  int vga_drawline(int x1, int y1, int x2, int y2);  
   
  int vga_getpixel(int x, int y);  
   
  vga_modeinfo *vga_getmodeinfo(int mode);  
 
   
  unsigned char *graph_mem;  
   
  unsigned char *vga_getgraphmem(void);  
 
   
  void vga_setpage(int p);  
   
  void vga_setreadpage(int p);  
   
  void vga_setreadpage(int p);  
   
  void vga_setwritepage(int p);  
   
  void vga_setdisplaystart(int a);  
   
  void vga_waitretrace(void);  
   
  int vga_init(void);  
   
  int vga_setrgbcolor(int r, int g, int b);  
   
     
   
     
 
 
 
   
  #define TEXT         0          /* Compatible with VGAlib v1.2 */  
   
  #define G320x200x16  1  
   
  #define G640x200x16  2  
   
  #define G640x350x16  3  
   
  #define G640x480x16  4  
   
  #define G320x200x256 5  
   
  #define G320x240x256 6  
   
  #define G320x400x256 7  
   
  #define G360x480x256 8  
   
  #define G640x480x2   9  
 
   
  #define G640x480x256 10  
   
  #define G800x600x256 11  
   
  #define G1024x768x256 12  
 
   
  #define G1280x1024x256 13       /* Additional modes. */  
 
   
  #define G320x200x32K 14  
   
  #define G320x200x64K 15  
   
  #define G320x200x16M 16  
   
  #define G640x480x32K 17  
   
  #define G640x480x64K 18  
   
  #define G640x480x16M 19  
   
  #define G800x600x32K 20  
   
  #define G800x600x64K 21  
   
  #define G800x600x16M 22  
   
  #define G1024x768x32K 23  
   
  #define G1024x768x64K 24  
   
  #define G1024x768x16M 25  
   
  #define G1280x1024x32K 26  
   
  #define G1280x1024x64K 27  
   
  #define G1280x1024x16M 28  
 
   
  #define G800x600x16 29  
   
  #define G1024x768x16 30  
   
  #define G1280x1024x16 31  
 
   
  #define G720x348x2 32           /* Hercules emulation mode */  
 
   
  #define G320x200x16M32 33       /* 32-bit per pixel modes. */  
   
  #define G640x480x16M32 34  
   
  #define G800x600x16M32 35  
   
  #define G1024x768x16M32 36  
   
  #define G1280x1024x16M32 37  
 
   
  /* additional resolutions */  
   
  #define G1152x864x16 38  
   
  #define G1152x864x256 39  
   
  #define G1152x864x32K 40  
   
  #define G1152x864x64K 41  
   
  #define G1152x864x16M 42  
   
  #define G1152x864x16M32 43  
 
   
  #define G1600x1200x16 44  
   
  #define G1600x1200x256 45  
   
  #define G1600x1200x32K 46  
   
  #define G1600x1200x64K 47  
   
  #define G1600x1200x16M 48  
   
  #define G1600x1200x16M32 49  
 
   
  typedef struct {  
   
     int width;  
   
     int height;  
   
     int bytesperpixel;  
   
     int colors;  
   
     int linewidth;          /* scanline width in bytes */  
   
     int maxlogicalwidth;    /* maximum logical scanline width */  
   
     int startaddressrange;  /* changeable bits set */  
   
     int maxpixels;          /* video memory / bytesperpixel */  
   
     int haveblit;           /* mask of blit functions available */  
   
     int flags;              /* other flags */  
   
     
   
     /* Extended fields: */  
   
     
   
     int chiptype;           /* Chiptype detected */  
   
     int memory;             /* videomemory in KB */  
   
     int linewidth_unit;     /* Use only a multiple of this as 
   
  parameter for set_displaystart */  
   
     char *linear_aperture;  /* points to mmap secondary mem aperture 
   
  of car  
   
     int aperture_size;      /* size of aperture in KB if 
   
  size>=videomemory.  
   
     void (*set_aperture_page) (int page);  
   
     /* if aperture_size<videomemory select a memory page */  
   
     void *extensions;       /* points to copy of eeprom for mach32 */  
   
     /* depends from actual driver/chiptype.. etc. */  
   
  } vga_modeinfo;  
 
 
 
   
  OK STATION, Webmaster, Brian Lin