T C图形函数一览(1)TC 图形函数函数名:initgraph功 能:gdriver和gmode分别表示图形驱动器和图形模式,path是指图形驱动程序所在的目录路径。用 法:void far initgraph(int far *gdriver, int far *gmode, char *path);在这里必须在path目录下找到一个对应于gdriver的文件扩展名为.BGI的图形驱动程序(c语言编译器提供了对应各类适配器的不同图形驱动程序),然后对其设置模式gmode。图形驱动器通常在TC根目录下或者根目录下面的BGI目录,以下给出一些图形驱动文件列表:ATT.BGICGA.BGI(CGA模式)EGAVGA.BGI(EGAVGA模式)HERC.BGIIBM8514.BGIPC3270.BGI 事实上现在我们最常用的是EGAVGA.BGI图形驱动文件,相对于其它几个图形驱动文件它出现的时间比较晚,因此所能达到的图形模式分辨率和色彩相对就更加高。以下给出图形驱动器、模式的符号常数及数值:图形驱动器(gdriver) 图形模式(gmode) 色彩 分辨率符号常数 数值 符号常数 数值 CGA 1 CGAC0 0 C0 320*200 CGAC1 1 C1 320*200 CGAC2 2 C2 320*200 CGAC3 3 C3 320*200 CGAHI 4 2色 640*200MCGA 2 MCGAC0 0 C0 320*200 MCGAC1 1 C1 320*200 MCGAC2 2 C2 320*200 MCGAC3 3 C3 320*200 MCGAMED 4 2色 640*200 MCGAHI 5 2色 640*480EGA 3 EGALO 0 16色 640*200 EGAHI 1 16色 640*350EGA64 4 EGA64LO 0 16色 640*200 EGA64HI 1 4色 640*350EGAMON 5 EGAMONHI 0 2色 640*350IBM8514 6 IBM8514LO 0 256色 640*480 IBM8514HI 1 256色 1024*768HERC 7 HERCMONOHI 0 2色 720*348ATT400 8 ATT400C0 0 C0 320*200 ATT400C1 1 C1 320*200 ATT400C2 2 C2 320*200 ATT400C3 3 C3 320*200 ATT400MED 4 2色 320*200 ATT400HI 5 2色 320*200VGA 9 VGALO 0 16色 640*200 VGAMED 1 16色 640*350 VGAHI 2 16色 640*480PC3270 10 PC3270HI 0 2色 720*350DETECT 0 硬件测试 函数名:closegraph功能:关闭图形模式用法:void far closegraph(viod)调用该函数后即退出图形状态而进入文本方式,并释放用于保存图形驱动程序和字体的系统内存。还需要补充一点的是我们可以采用另一个函数同样达到让硬件自动检测图形驱动器和模式的效果,其调用格式为:函数名: detectgraph功能: 通过检测硬件确定图形驱动程序和模式用法: void far detectgraph( int far *graphdriver, int far *gmode) 画点函数函数名: putpixel功 能: 在指定位置画一像素用 法: void far putpixel (int x, int y, int pixelcolor); 函数名: getpixel功 能: 取得指定像素的颜色用 法: int far getpixel(int x, int y);坐标位置的函数 函数名: getmaxx功 能: 返回屏幕的最大x坐标用 法: int far getmaxx(void);函数名: getmaxy功 能: 返回屏幕的最大y坐标用 法: int far getmaxy(void);函数明: getx功 能: 返回当前图形位置的x坐标用 法: int far getx(void);函数名: gety功 能: 返回当前图形位置的y坐标用 法: int far gety(void);函数名: moveto功 能: 将CP移到(x, y)用 法: void far moveto(int x, int y);函数名: moverel功 能: 将当前位置(CP)移动一相对距离用 法: void far moverel(int dx, int dy);画线函数函数名: line功 能: 在指定两点间画一直线用 法: void far line(int x0, int y0, int x1, int y1);函数名:lineto功能:画一作从现行光标到点(x, y)的直线 用法:void far lineto(int x, int y);函数名: linerel功 能: 从当前位置点(CP)到与CP有一给定相对距离的点画一直线用 法: void far linerel(int dx, int dy);函数名: circle功 能: 在给定半径以(x, y)为圆心画圆用 法: void far circle(int x, int y, int radius);函数名: arc功 能: 画一弧线用 法: void far arc( int x,int y,int stangle,int endangle, int radius );函数名: ellipse功 能: 画一椭圆用 法: void far ellipse( int x, int y, int stangle, int endangle, int xradius, int yradius);函数名: rectangle功 能: 画一个矩形用 法: void far rectangle( int left, int top, int right, int bottom );函数名: drawpoly功 能: 画多边形用 法: void far drawpoly( int numpoints, int far *polypoints );线型函数函数名: setlinestyle功 能: 设置当前画线宽度和类型用 法: void far setlinestyle( int linestype, unsigned upattern, int thickness);有关线的形状(linestyle) :符号常数 数值 含义SOLID_LINE 0 实线DOTTED_LINE 1 点线CENTER_LINE 2 中心线DASHED_LINE 3 点画线USERBIT_LINE 4 用户定义线有关线宽(thickness): 符号常数 数值 含义NORM_WIDTH 1 一点宽THIC_WIDTH 3 三点宽函数名: getlinesettings功 能: 取当前线型、模式和宽度用 法: void far getlinesettings( struct linesettingstype far *lininfo );该函数将有关线的信息存放到由lineinfo 指向的结构中,表中linesettingstype的结构如下: struct linesettingstype{ int linestyle; unsigned upattern; int thickness; } 例如下面两句程序可以读出当前线的特性 struct linesettingstype *info; getlinesettings(info); 函数名: setwritemode功 能: 设置图形方式下画线的输出模式用 法: void far setwritemode(int mode); 如果mode=0,则表示画线时将所画位置的原来信息覆盖了(复制模式)。如果mode=1,则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,异或模式下当线的颜色不变的时候,进行两次画线操作相当于没有画线。这一功能将在下一章“简单动画”中得到充分使用。图形填充函数函数名: bar功 能: 画一个二维条形图用 法: void far bar(int left,int top,int right,int bottom);函数名: bar3d功 能: 画一个三维条形图用 法: void far bar3d( int left, int top, int right, int bottom, int depth, int topflag);函数名: pieslice功 能: 绘制并填充一个扇形用 法: void far pieslice( int x, int stanle, int endangle, int radius );函数名: sector功 能: 画并填充椭圆扇区用 法: void far sector( int x, int y, int stangle, int endangle );填充方式函数名: setfillstyle功 能: 设置填充模式和颜色用 法: void far setfillstyle(int pattern, int color);color的值是当前屏幕图形模式时颜色的有效值。pattern的值及与其等价的符号常数。 关于填充式样pattern的规定:符号常数 数值 含义EMPTY_FILL 0 以背景颜色填充SOLID_FILL 1 以实填充LINE_FILL 2 以直线填充LTSLASH_FILL 3 以斜线填充(阴影线)SLASH_FILL 4 以粗斜线填充(粗阴影线)BKSLASH_FILL 5 以粗反斜线填充(粗阴影线)LTBKSLASH_FILL 6 以反斜线填充(阴影线)HATCH_FILL 7 以直方网格填充XHATCH_FILL 8 以斜网格填充INTTERLEAVE_FILL 9 以间隔点填充WIDE_DOT_FILL 10 以稀疏点填充CLOSE_DOS_FILL 11 以密集点填充USER_FILL 12 以用户定义式样填充 除USER_FILL(用户定义填充式样)以外,其它填充式样均可由setfillstyle()函数设置。当选用USER_FILL时, 该函数对填充图模和颜色不作任何改变。之所以定义USER_FILL主要因为在获得有关填充信息时用到此项。 函数名: setfillpattern功 能: 选择用户定义的填充模式用 法: void far setfillpattern( char far *upattern, int color ); 其中upattern是一个指向8个字节的指针。这8个字节定义了8x8点阵的图形。每个字节的8位二进制数表示水平8点,8个字节表示8行,然后以此为模型向个封闭区域填充。函数名: getfillpattern功 能: 将用户定义的填充模式拷贝到内存中用 法: void far getfillpattern(char far *upattern);函数名:getfillsetings功 能:获得现行图模的颜色并将存入结构指针变量fillinfo中用 法:viod far getfillsetings(struct linesettingstype far *lineinfo); 其中fillsettingstype结构定义如下: struct fillsettingstype{ int pattern; // 现行填充模式 int color; // 现行填充模式 };函数名: floodfill功 能: 填充一个有界区域用 法: void far floodfill(int x, int y, int border);x,y为封闭图形内的任意一点。border为边界的颜色,也就是封闭图形轮廓的颜色。调用了该函数后, 将用规定的颜色和图模填满整个封闭图形。 使用这个函数有几点需要注意:1.不能对边界点进行填充; 2.不封闭的图形将溢出到其外的封闭图区域,若其外没有封闭区域,以屏幕为封闭区域,填充整个屏幕; 3.点在图形外面,则填充封闭图形外的屏幕区域; 4.border的颜色值必须与图形边框颜色值相同。文本输出函数函数名: outtext功 能: 在视区显示一个字符串用 法: void far outtext(char far *textstring);函数名: outtextxy功 能: 在指定位置显示一字符串用 法: void far outtextxy(int x, int y, char *textstring); 由于没有中文平台的支持,所以*textstring通常只能是英文字符串。函数名: settextjustify功 能: 为图形函数设置文本的对齐方式用 法: void far settextjustify(int horiz, int vert);outtextxy()函数指定了字符串输出的初始位置(x,y),可是,比如对于字符串"Game"来说,初始位置(x,y)到底是对应"G"的左上角、左下角还是中间这需要由settextjustify()函数来规定。settextjustify()函数,将字符串按垂直方向可分为顶部, 中部和底部三个位置, 水平方向可分为左, 中, 右三个位置, 两者结合就有9个位置。请注意,这里的位置是针对字符串(如:Game)而不是第一个字母(如:G)而言的。settextjustify()函数的第一个参数horiz是指水平方向,第二个参数vert是指垂直方向,两个参数都有3个值可供选择,其实也就是各自选择三个位置中的一个,二者以结合就确定了其中一个位置对应于初始位置(x,y)。函数中各个参数的规定见下列各表所示:参数horiz和vert的取值 (修改):符号常数 数值 用于LEFT_TEXT 0 水平RIGHT_TEXT 2 水平BOTTOM_TEXT 0 垂直TOP_TEXT 2 垂直CENTER_TEXT 1 水平或垂直配图函数名: settextstyle功 能: 为图形输出设置当前的文本属性用 法: void far settextstyle ( int font, int direction, char size );该函数用来设置输出字符的字形(由font确定)、输出方向(由direction确定)和字符大小(由charsize确定)等特性。函数中各个参数的规定见下列各表所示:font的取值:符号常数 数值 含义DEFAULT_FONT 0 8*8点阵字(缺省值)TRIPLEX_FONT 1 三倍笔划字体SMALL_FONT 2 小号笔划字体SANSSERIF_FONT 3 无衬线笔划字体GOTHIC_FONT 4 黑体笔划字direction的取值:符号常数 数值 含义HORIZ_DIR 0 从左到右VERT_DIR 1 从底到顶charsize的取值:符号常数或数值 含义1 8*8点阵2 16*16点阵3 24*24点阵4 32*32点阵5 40*40点阵6 48*48点阵7 56*56点阵8 64*64点阵9 72*72点阵10 80*80点阵USER_CHAR_SIZE=0 用户定义的字符大小函数名: setusercharsize功 能: 为矢量字体改变字符宽度和高度用 法: void far setusercharsize( int multx, int dirx, int multy, int diry ); 这个函数只有在settextstyle( ) 函数中的charsize为0(或USER_CHAR_SIZE)时才起作用。调用函数setusercharsize()后, 每个显示在屏幕上的字符都以其缺省大小乘以mulx/divx为输出字符宽, 乘以muly/divy为输出字符高。附录D 时间延迟函数函数名: delay功 能: 将程序的执行暂停一段时间(毫秒)用 法: void delay(unsigned milliseconds);重画屏幕区域的函数函数名:getimage功 能:将指定区域的一个位图存到主存中用 法:void far getimage( int left, int top, int right, int bottom, void far *bitmap);函数名:putimage功 能:在屏幕上输出一个位图用 法:void far putimage( int x, int y, void far *bitmap, int op ); 图像大小函数函数名: imagesize功 能: 返回保存位图像所需的字节数用 法: unsigned far imagesize( int left, int top, int right, int bottom );异或模式函数 函数名: setwritemode功 能: 设置图形方式下画线的输出模式用 法: void far setwritemode(int mode); 参数MODE可以被设置位COPY_PUT或者XOR_PUT两种模式。当mode被设置为XOR_PUT,其后的图形操作将都采用异或方式。此外之前提到的putimage()函数也可以采用异或模式向屏幕复制图像。检测键盘输入函数函数名: kbhit功 能: 检查当前按下的键用 法: int kbhit(void);键盘接口函数函数名: bioskey功 能: 直接使用BIOS服务的键盘接口用 法: int bioskey(int cmd); 该函数通过bois中断0x16执行键盘操作,由参数cmd来决定具体的操作。Cmd 具体操作0 读取按键的ascii码1 测试是否有按键如果没有按键 返回0如果按键为ctrl+brk 返回-1如果是其他按键 返回按键本身键值(直到此按键被取出后恢复0)2 返回shift key 状态 以下是当cmd为2的时候,返回值的具体含义cmd返回值 触发特殊键0X01 Left ctrl0X02 Left alt0X04 Right ctrl0X08 Right alt0X10 Scroll lock0X20 Num lock0X40 Caps lock0X80 Sys rq bioskey()函数的优点在于:1.和kbhit()函数一样可以在不影响主程序运行的情况下检测是否有按键;2.可以方便地检测普通键具体ASCII码和扫描码;3.可以方便地检测功能键具体扫描码;4.可以检测特殊按键;5.只需要一个函数就能解决检测按键和读入按键的任务。 T C图形函数一览(2) 声音与延迟函数函数名: sound功 能: 以指定频率打开PC扬声器用 法: void sound(unsigned frequency);函数名: nosound功 能: 关闭PC扬声器用 法: void nosound(void);函数名: delay功 能: 将程序的执行暂停一段时间(毫秒)用 法: void delay(unsigned milliseconds);sound()函数用于让pc喇叭发声,nosound()函数用于使正在发声的pc喇叭静音。要使程序中的发声的具体方法,是调用sound()函数并延迟一定时间,然后使用nosound()函数静音,具体语句实现方法如下:sound(100);delay(100);nosound();产生随即数函数函数名: rand功 能: 随机数发生器用 法: void rand(void);函数名: random功 能: 随机数发生器用 法: int random(int num);初始化随机数函数函数名: randomize功 能: 初始化随机数发生器用 法: void randomize(void);in86()函数函数名: int86功 能: 通用8086软中断接口用 法: int int86( int intr_num, union REGS *inregs, union REGS *outregs ); 其中intr_num为软中断号,函数通过inregs寄存器向中断发出具体功能命令,函数将中断调用结果返回寄存器outregs。memset()函数函数名: memset功 能: 设置s中的所有字节为ch, s数组的大小由n给定用 法: void *memset(void *s, char ch, unsigned n);标准VGA显示模式表模式(16进制) 适配器 显示类型 颜色 字符格式 屏幕大小 字符大小 缓冲区首址 属性类型0/1 CGA 文本 16/16 40*25 320*200 8*8 B8000 彩色EGA 文本 16/64 40*25 320*350 8*14 B8000 彩色VGA 文本 16/256K 40*25 360*400 9*16 B8000 彩色CGA 文本 16/16 80*25 640*200 8*8 B8000 彩色2/3 EGA 文本 16/64 80*25 640*350 8*14 B8000 彩色VGA(3+) 文本 16/256K 80*25 720*400 9*16 B8000 彩色CGA 图形 4/16 40*25 320*200 8*8 B8000 彩色4/5 EGA 图形 4/64 40*25 320*200 8*8 B8000 彩色VGA 图形 4/256K 40*25 320*200 8*8 B8000 彩色CGA 图形 2/16 40*25 640*200 8*8 B8000 单色6 EGA 图形 2/64 40*25 640*200 8*8 B8000 单色VGA 图形 2/256K 40*25 640*200 8*8 B8000 单色7 MDA/EGA 文本 单色 80*25 720*350 9*14 B0000 单色VGA(7+) 文本 单色 80*25 720*400 9*16 B0000 单色D EGA 图形 16/64 40*25 320*200 8*8 A0000 彩色VGA 图形 16/256K 40*25 320*200 8*8 A0000 彩色E EGA 图形 16/64 80*25 640*200 8*8 A0000 彩色VGA 图形 16/256K 80*25 640*200 8*8 A0000 彩色F EGA/VGA 图形 单色 80*25 640*350 8*14 A0000 单色10 EGA 图形 16/64 80*25 640*350 8*14 A0000 彩色VGA 图形 16/256K 80*25 640*350 8*14 A0000 彩色11 VGA 图形 2/256K 80*30 640*480 8*16 A0000 彩色12 VGA 图形 16/256K 80*30 640*480 8*16 A0000 彩色13 VGA 图形 256/256K 40*25 320*200 8*8 A000 彩色常规内存函数申请函数:malloc(),farmalloc(),calloc(),farcalloc(),realloc(),farealloc()函数名: malloc功 能: 内存分配函数用 法: void *malloc(unsigned size);函数名: farmalloc功 能: 从远堆中分配存储块用 法: void far *farmalloc(unsigned long size);函数名: calloc功 能: 分配主存储器用 法: void *calloc(size_t nelem, size_t elsize);函数名: farcalloc功 能: 从远堆栈中申请空间用 法: void far *farcalloc( unsigned long units, unsigned ling unitsz );函数名: realloc功 能: 重新分配主存用 法: void *realloc(void *ptr, unsigned newsize);函数名: farrealloc功 能: 调整远堆中的分配块用 法: void far *farrealloc( void far *block, unsigned long newsize );使用函数:memcpy(),memset(),memmove(),movedata()函数名: memcpy功 能: 从源source中拷贝n个字节到目标destin中用 法: void *memcpy(void *destin,void *source,unsigned n);函数名: memset功 能: 设置s中的所有字节为ch, s数组的大小由n给定用 法: void *memset(void *s, char ch, unsigned n);函数名: memmove功 能: 移动一块字节用 法: void *memmove(void *destin,void *source,unsigned n);函数名: movedata功 能: 拷贝字节用 法: void movedata(int segsrc, int offsrc, int segdest, int offdest, unsigned numbytes);释放函数:free(),farfree()函数名: free功 能: 释放已分配的块用 法: void free(void *ptr);函数名: farfree功 能: 从远堆中释放一块用 法: void farfree(void);指针操作函数:MK_FP(),FP_OFF(),FP_SEG()函数名: MK_FP功 能: 设置一个远指针用 法: void far *MK_FP(unsigned seg, unsigned off);函数名: FP_OFF功 能: 获取远地址偏移量用 法: unsigned FP_OFF(void far *farptr);函数名: FP_SEG功 能: 获取远地址段值用 法: unsigned FP_SEG(void far *farptr);XMS功能调用索引表:功能号 功能 版本功能00H功能01H功能02H功能03H功能04H功能05H功能06H功能07H功能08H功能09H功能0AH功能0BH功能0CH功能0DH功能0EH功能0FH功能10H功能11H 取XMS版本号请求高内存区HMA释放高内存区HMA全程启用A20全程停用A20局部启用A20局部停用A20查询A20状态查询自由扩展内存分配扩展内存块释放扩展内存块移动扩展内存块锁住扩展内存块扩展内存块解锁取EMB句柄信息重新分配扩展内存块请求上位存储块UMB释放上位存储块UMB XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0EMS功能调用索引:功能号 功能功能40H功能41H功能42H功能43H功能44H功能45H功能46H功能47H功能48H功能4BH功能4CH功能4DH 取得EMS程序状态取得物理映射页面的段地址获取逻辑页页数信息分配句柄和内存内存映射释放句柄和内存获取EMM的版本号保存指定句柄映射关系恢复指定句柄映射关系获取EMM的句柄数获取指定句柄所分配的逻辑页页数取所有句柄分配情况键盘扫描码表:键名 扫描码 键名 扫描码 键名 扫描码Esc 1 A 30 F1 59! or 1 2 S 31 F2 60@ or 2 3 D 32 F3 61# or 3 4 F 33 F4 62$ or 4 5 G 34 F5 63% or 5 6 H 35 F6 64^ or 6 7 J 36 F7 65& or 7 8 K 37 F8 66* or 8 9 L 38 F9 67( or 9 10 : or ; 39 F10 68) or 0 11 “ or ‘ 40 F11 133- 12 ~ or ` 41 F12 134= 13 Left shift 42 Numlock 69Bksp 14 \ 43 Scroll lock 70Tab 15 Z 44 Home or 7 71Q 16 X 45 Up or 8 72W 17 C 46 Pgup or 9 73E 18 V 47 Gray - 74R 19 B 48 Left or 4 75T 20 N 49 Center or 5 76Y 21 M 50 Right or 6 77U 22 < or , 51 Gray + 78I 23 > or . 52 End or 1 79O 24 ? or / 53 Down or 2 80P 25 Right shift 54 Pgdn or 3 81{ or [ 26 Prt sc or * 55 Ins or 0 82} or ] 27 Alt 56 Del or . 83enter 28 Space bar 57 ctrl 29 Caps lock 58 键盘ASCII码表ASCII字符集 (0 - 127) 代码 字符 代码 字符 代码 字符 代码 字符0 32 [空格] 64 @ 96 `1 33 ! 65 A 97 a2 34 " 66 B 98 b3 35 # 67 C 99 c4 36 $ 68 D 100 d5 37 % 69 E 101 e6 38 & 70 F 102 f7 39 ' 71 G 103 g8 ** 40 ( 72 H 104 h9 ** 41 ) 73 I 105 i10 ** 42 * 74 J 106 j11 43 + 75 K 107 k12 44 , 76 L 108 l13 ** 45 - 77 M 109 m14 46 . 78 N 110 n15 47 / 79 O 111 o16 48 0 80 P 112 p17 49 1 81 Q 113 q18 50 2 82 R 114 r19 51 3 83 S 115 s20 52 4 84 T 116 t21 53 5 85 U 117 u22 54 6 86 V 118 v23 55 7 87 W 119 w24 56 8 88 X 120 x25 57 9 89 Y 121 y26 58 : 90 Z 122 z27 59 ; 91 [ 123 {28 60 < 92 \ 124 | 29 61 = 93 ] 125 }30 ? 62 > 94 ^ 126 ~31 63 ? 95 _ 127 &127;** 数值 8.9.10 和 13 可以分别转换为退格符、制表符、换行符和回车符。这些字符都没有图形表示,但是对于不同的应用程序,这些字符可能会影响文本的显示效果。ASCII字符集 (128 - 255)代码 字符 代码 字符 代码 字符 代码 字符128 € 160 [空格] 192 À 224 à129 ? 161 ¡ 193 Á 225 á130 ? 162 ¢ 194 Â 226 â131 ? 163 £ 195 Ã 227 ã132 ? 164 ¤ 196 Ä 228 ä133 … 165 ¥ 197 Å 229 å134 ? 166 ¦ 198 Æ 230 æ135 ? 167 § 199 Ç 231 ç136 ? 168 ¨ 200 È 231 ç137 ‰ 169 © 201 É 232 è138 ? 170 ª 202 Ê 233 é139 ? 171 « 203 Ë 234 ê140 ? 172 204 Ì 235 ë141 ? 173 205 Í 236 ì142 ? 174 (R) 206 Î 237 í143 ? 175 ¯ 207 Ï 238 î144 ? 176 ° 208 Ð 239 ï145 ‘ 177 ± 209 Ñ 240 ð146 ’ 178 ² 210 Ò 241 ñ147 “ 179 ³ 211 Ó 242 ò148 ” 180 ´ 212 Ô 243 ó149 ? 181 µ 213 Õ 244 ô150 – 182 214 Ö 245 õ151 — 183 · 215 × 246 ö152 ? 184 ¸ 216 Ø 247 ÷153 ™ 185 ¹ 217 Ù 248 ø154 ? 186 º 218 Ú 249 ù155 ? 187 » 219 Û 250 ú156 ? 188 ¼ 220 Ü 251 û157 ? 189 ½ 221 Ý 252 ü158 ? 190 ¾ 222 Þ 253 ý159 ? 191 ¿ 223 ß 254 þ方块表示在当前平台下不支持。中断改写中断服务程序函数(1)取得中断向量入口的函数getvect(intr-num),它读取中断名为intr-num的向量。函数名: getvect功 能: 取得中断向量入口用 法: void interrupt(*getvect(int intr_num));(2)设置中断向量入口的函数servect(intr-num,*isr),它将intr-num的向量指置为指向新中断服务程序地址的远指针。函数名: setvect功 能: 设置中断向量入口用 法: void setvect(int intr_num, void interrupt(*isr)());(3)通用的8086软中断接口函数int86(intr-num,inregs,outregs),它执行一个由参数intr-num所指定的8086软中断,并且在执行前,把inregs中的寄存器值拷到各个寄存器中,返回时把寄存器的值拷到outregs中。函数名: int86功 能: 通用8086软中断接口用 法: int int86( int intr_num, union REGS *inregs, union REGS *outregs );TSR函数1.退出并驻留内存函数keep(status,int size),它将当前函数驻留在空间为size个节(每节16个字节)的内存,其余部分被释放,出口状态保存在status中。函数名: keep功 能: 退出并继续驻留用 法: void keep(int status, int size);2.释放先前分配的DOS内存块函数freemem(seg),它将段地址为seg的内存块释放。在TSR中用于释放环境块。函数名: freemem功 能: 释放先前分配的DOS内存块用 法: int freemem(unsigned seg);3.设置远指针的宏MK_FP(seg,offs),seg为段地址,offs为偏移量。在TSR中用于访问内存中的特殊单元。函数名: MK_FP功 能: 设置一个远指针用 法: void far *MK_FP(unsigned seg, unsigned off);

评论