📄 1043.html
字号:
FD_SET(int fd, fd_set *set); <br>
FD_ZERO(fd_set *set); <br>
<br>
FD_ZERO清除所有fd_set。 <br>
FD_SET将fd加入fd_set中。 <br>
FD_CLR将fd从fd_set中移除。 <br>
FD_ISSET检查fd是否属於该fd_set。 <br>
<br>
struct timeval { <br>
int tv_sec; <br>
int tv_usec; <br>
}; <br>
<br>
<br>
Linux程式设计-16.TarBall <br>
http://www.openchess.org/noitatsko/programming/ (2001-05-26 14:08:00) <br>
<br>
我写了一个targz的函数库,专门处理档案安装的事宜,这个函数库在我写的X Corona Package Installer中使用到。它与zlib一起使用。 <br>
targz.h <br>
targz.c <br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
typedef struct { <br>
char name[100]; <br>
char mode[8]; <br>
char uid[8]; <br>
char gid[8]; <br>
char size[12]; <br>
char mtime[12]; <br>
char chksum[8]; <br>
char typeflag; <br>
char linkname[100]; <br>
char magic[6]; <br>
char version[2]; <br>
char uname[32]; <br>
char gname[32]; <br>
char devmajor[8]; <br>
char devminor[8]; <br>
char prefix[155]; <br>
} TarEntry; <br>
<br>
GNU Tar档案格式 <br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
typedef struct { <br>
char * Package; <br>
char * FileName; <br>
char * path; <br>
gzFile fp; <br>
int size; <br>
int totalsize; <br>
int expanding; <br>
int mode; <br>
int result; <br>
TarEntry ** NAME; <br>
} TarBall; <br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
TarBall * tgzOpen(char * Filename,char * mode); <br>
开启一个tarball档,档名为Filename。 <br>
mode <br>
"r":为读取模式。 <br>
"w":为写入模式。 <br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
int tgzLookup(TarBall * tgz); <br>
撷取tarball内档案资讯。 <br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
int tgzClose(TarBall * tgz); <br>
关闭tarball档。 <br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
int tgzExpand(TarBall * tgz); <br>
解开档案。 <br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
int tgzSkip(TarBall * tgz); <br>
<br>
跳过下一个档案,不安装。 <br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
int tgzAppend(TarBall * tgz,char *FileName); <br>
新增档案到tarball中,必须要是Write Mode <br>
<br>
Linux程式设计-17.SVGALIB <br>
http://www.openchess.org/noitatsko/programming/ (2001-05-26 15:00:00) <br>
SvgaLib是Linux Console下的VGA驱动函数库。虽然它的品质还是有点低,支援的萤幕卡种类不算太多,但是有许多的游戏及程式都是用它来做开发,可以算是非官方的标准了。如果您准备要在Console下撰写图形功能的程式,目前来说SVGALIB是您唯一的选择。目前使用SVGALIB的程式有许多,中文终端机使用SVGALIB的就有a4c.tty/yact/bcs16。 <br>
这里我只讲一些简单的使用方法,如启动vga及mouse的使用。要有效地、高阶的运用,技巧杂很多,例如a4c.tty就另外往上架一层Star Window Manager,来管理一个小型视窗系统。 <br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
vga <br>
<br>
vgamouse <br>
<br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
int vga_setmode(int mode); <br>
int vga_hasmode(int mode); <br>
int vga_setpalette(int index, int red, int green, int blue); <br>
int vga_getpalette(int index, int *red, int *green, int *blue); <br>
int vga_setcolor(int color); <br>
int vga_drawpixel(int x, int y); <br>
int vga_drawline(int x1, int y1, int x2, int y2); <br>
int vga_getpixel(int x, int y); <br>
vga_modeinfo *vga_getmodeinfo(int mode); <br>
<br>
unsigned char *graph_mem; <br>
unsigned char *vga_getgraphmem(void); <br>
<br>
void vga_setpage(int p); <br>
void vga_setreadpage(int p); <br>
void vga_setreadpage(int p); <br>
void vga_setwritepage(int p); <br>
void vga_setdisplaystart(int a); <br>
void vga_waitretrace(void); <br>
int vga_init(void); <br>
int vga_setrgbcolor(int r, int g, int b); <br>
<br>
<br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
#define TEXT 0 /* Compatible with VGAlib v1.2 */ <br>
#define G320x200x16 1 <br>
#define G640x200x16 2 <br>
#define G640x350x16 3 <br>
#define G640x480x16 4 <br>
#define G320x200x256 5 <br>
#define G320x240x256 6 <br>
#define G320x400x256 7 <br>
#define G360x480x256 8 <br>
#define G640x480x2 9 <br>
#define G640x480x256 10 <br>
#define G800x600x256 11 <br>
#define G1024x768x256 12 <br>
<br>
#define G1280x1024x256 13 /* Additional modes. */ <br>
<br>
#define G320x200x32K 14 <br>
#define G320x200x64K 15 <br>
#define G320x200x16M 16 <br>
#define G640x480x32K 17 <br>
#define G640x480x64K 18 <br>
#define G640x480x16M 19 <br>
#define G800x600x32K 20 <br>
#define G800x600x64K 21 <br>
#define G800x600x16M 22 <br>
#define G1024x768x32K 23 <br>
#define G1024x768x64K 24 <br>
#define G1024x768x16M 25 <br>
#define G1280x1024x32K 26 <br>
#define G1280x1024x64K 27 <br>
#define G1280x1024x16M 28 <br>
<br>
#define G800x600x16 29 <br>
#define G1024x768x16 30 <br>
#define G1280x1024x16 31 <br>
<br>
#define G720x348x2 32 /* Hercules emulation mode */ <br>
<br>
#define G320x200x16M32 33 /* 32-bit per pixel modes. */ <br>
#define G640x480x16M32 34 <br>
#define G800x600x16M32 35 <br>
#define G1024x768x16M32 36 <br>
#define G1280x1024x16M32 37 <br>
<br>
/* additional resolutions */ <br>
#define G1152x864x16 38 <br>
#define G1152x864x256 39 <br>
#define G1152x864x32K 40 <br>
#define G1152x864x64K 41 <br>
#define G1152x864x16M 42 <br>
#define G1152x864x16M32 43 <br>
<br>
#define G1600x1200x16 44 <br>
#define G1600x1200x256 45 <br>
#define G1600x1200x32K 46 <br>
#define G1600x1200x64K 47 <br>
#define G1600x1200x16M 48 <br>
#define G1600x1200x16M32 49 <br>
<br>
typedef struct { <br>
int width; <br>
int height; <br>
int bytesperpixel; <br>
int colors; <br>
int linewidth; /* scanline width in bytes */ <br>
int maxlogicalwidth; /* maximum logical scanline width */ <br>
int startaddressrange; /* changeable bits set */ <br>
int maxpixels; /* video memory / bytesperpixel */ <br>
int haveblit; /* mask of blit functions available */ <br>
int flags; /* other flags */ <br>
<br>
/* Extended fields: */ <br>
<br>
int chiptype; /* Chiptype detected */ <br>
int memory; /* videomemory in KB */ <br>
int linewidth_unit; /* Use only a multiple of this as parameter for set_displaystart */ <br>
char *linear_aperture; /* points to mmap secondary mem aperture of car <br>
int aperture_size; /* size of aperture in KB if size>=videomemory. <br>
void (*set_aperture_page) (int page); <br>
/* if aperture_size void *extensions; /* points to copy of eeprom for mach32 */ <br>
/* depends from actual driver/chiptype.. etc. */ <br>
} vga_modeinfo; <br>
<br>
<br>
Linux程式设计-18.Dialog (1)前言 <br>
http://www.openchess.org/noitatsko/programming/ (2001-05-26 17:04:00) <br>
dialog是个shell scripts用的,事实上当您下载Linux Kernel时,里面有个scripts/lxdialog目录,其实那就是dialog原始码,只是Linux kernel为了避免与原有dialog相突,将名字修改为lxdialog。当您使用"make menuconfig"时,便是在用dialog这套工具。另外,Slackware的安装程式,事实上也是用dialog这套工具来做界面的。 <br>
您可以利用shell script来呼叫dialog,也可以利用perl来呼叫它,用以提供较友善的使用者界面。 <br>
<br>
利用dialog这个工具,您可以在不需要写"艰深"的ncurses的程式的状况下,使用Shell Script,完成很杂的操作界面,大大减少产品开发时间。 <br>
<br>
Linux程式设计-19.gpm <br>
http://www.openchess.org/noitatsko/programming/ (2001-05-27 12:10:00) <br>
<br>
<br>
gpm是Linux console下的滑鼠驱动程式,它主要提供文字模式下的滑鼠事件处理。Linux下文字界面的滑鼠几乎都是用gpm来处理。 <br>
gpm的文件在gpm原始码的doc目录中,详细的说明可参考该目录中的文件gpm programming guide,此处只提供给您KickStart的一些技巧及一些参考说明。 <br>
<br>
特别注意到以下的例,需在console下执行,不可在X Window的 Terminal下执行。 <br>
<br>
<br>
<br>
-------------------------------------------------------------------------------- <br>
<br>
例 : gpm_mouse.c <br>
gpm原始码中有一个mev.c的程式,主要用来测试滑鼠状态。事实上,mev.c是个很好的例,本例便是取自mev.c,经过简化修改而来。 <br>
#include <br>
#include <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -