UNIX操纵系统提供了X-Window图形窗口系统和OPENLOOK图形用户界面,这些系统不仅昂贵、庞大,而且不便于移植以前开发的DOS图形应用程序。本文先容利用微机内部硬件控制,针对EGA/VGA图形适配器,进行直接视频图形程序设计。对于比较熟悉PC-AT体系结构和视频程序设计知识的程序员来说,更喜欢后者,由于能有效地利用硬件特性,加快图形处理速度。
进行图形程序设计时,还须考虑视频接口的一个重要特性——虚拟终端功能,由于它答应控制几个独立的图形应用窗口,答应多个应用程序在同一个终端上进行切换。本文提供针对IBM标准终端对虚拟终端进行有效治理的手段。
微机UNIX直接视频图形程序设计有两种方法,一种是利用设备驱动程序见参考文献1,另一种是针对IBM标准终端进行编程,本文先容后者。
一、图形程序设计
1.检测视频适配器
视频显示器是由视频适配器硬件控制的,视频适配器决定了图形方式下显示图形的分辨率及可能的颜色[2。利用系统调用ioctl中的CONS-CURRENT命令可以检测到当前的视频适配器,即摘要:
ioctl0,CONS-CURRENT,NULL
返回-1时表示出错,即没有相应的视频适配器硬件,假如检测到VGA卡则返回值为VGA,假如检测到EGA卡则返回值为EGA,……。
2.初始化图形系统
初始化图形必须完成下列任务。
1 获取当前的视频显示方,转自[好又多论文网]www.888lw.com式
ioctl的CONS-GET命令用来判定当前适配器的显示方式,即摘要:
ioctl0,CONS-GET,NULL
它返回显示方式的值,这些值在包含文件vtkd.h中均有定义,如摘要:SW-VAG640x480C为VGA适配器设置成640x480分辨率彩色图形模式。
2 设置图形模式
直接将图形模式值放进ioctl中的命令项即可设置相应的图形模式,如ioctl0,SW-VGA640x480C,NULL
将VGA适配器设置成640x480分辨率的彩色图形模式。
3 获取图形模式下视频缓冲区物理地址
利用ioctl的MAPCONS命令可以实现此功能,即摘要:
char *scrnmem;
scrnmem=char *ioctl0,MAPCONS,NULL
所有实现基本图素的操纵都将针对scrnmem进行,scrnmem就是EGA/VGA相应的四个位平面的重叠地址,有关EGA/VGA的结构可参阅[2。
3.实现基本图素 计算机论文
DOS操纵系统下,对EGA/VGA的各种视频I/O寄存器进行操纵是很方便的,可以直接使用汇编语言in和out指令进行读写。然而,UNIX操纵系统下,对物理硬件的访问都是由UNIX系统核心和设备驱动程序治理的,要访问EGA/VGA的各种I/O寄存器,必须获得对其访问的特权,为了实现这种功能要求,可以使用下列ioctl系统调用方式摘要:
ioctl0,VGA-IOPRIVL,1 获取VGA的各种I/O寄存器的访问特权
ioctl0,EGA-IOPRIVL,1 获取EGA的各种I/O寄存器的访问特权
UNIX操纵系统基本上是采用C语言编写的,只是在低层的系统内核方面才使用低级的汇编语言,遵循这一原则,对EGA/VGA的I/O寄存器的访问可以采用汇编语言,而实现图形系统的基本图素则采用C语言。
假如用户的UNIX系统中已有inb和outb函数嵌进在/usr/include/sys/inline.h中,则可以直接使用它们完成对各种I/O寄存器的读写,否则,必须编写下列低级汇编语言例程摘要:计算机硕士论文
/*向一端口输出一字节*/
/*从一端口输进一字节 */
void outbint port,uchar value
{
-asm push edx
-asm mov edx,port
-asm mov al,value
-asm out dx,al
-asm pop edx
}
uchar inbint port
{
-asm push edx
-asm mov edx,port
-asm in al,dx
-asm pop edx
}
基本图素一般包括摘要:设置颜色,对调色板的操纵,画点、线、弧、矩形、圆、椭圆、多边形、画扇形、饼图,任意图形填充,多边形填充,保存屏幕,恢复屏幕等,这些操纵均可用C语言实现,细节新题目可参阅[2。
4.封闭图形系统

 

 
本文出自:http://www.888lw.com/lunwen/chengxusheji/lw201270151.html

10-09 13:57