设文无忧为首页 | 把文无忧加入收藏夹 | 站务联系     论文格式网:论文格文下载,论文格式大全,论文格式范例,如何写论文,怎么把握论文的格式,分类最全的论文范文格式网。
你所在的位置:首页 > 论文大全 > 计算机论文 > 操作系统论文
操作系统论文:微机UNIX直接视频图形程序设计
微机UNIX直接视频图形程序设计
| 文章出自:论文网 | 编辑:论文发表 | 点击: | 2012-03-31 11:49:24 |


进行图形法式贪图时,还须考虑视频接口的一个主要特征——虚拟终端功能,因为它准许节制几个自力的图形应用窗口,准许多个应用法式在统一个终端长进行切换。针对IBM尺度终端对虚拟终端进行有用治理的手法。
微机UNIX直接视频图形法式贪图有两种方式,一种是行使培植驱动法式(见参考文献1),另一种是针对IBM尺度终端进行编程,本文介绍后者。
一、图形法式贪图
1.检测视频适配器
视频显示器是由视频适配器硬件节制的,视频适配器决意了图形体式格局下显示图形的分辩率及概略的颜色[2]。行使系统挪用ioctl中的CONS-CURRENT饬令可以检测到当前的视频适配器,即:
ioctl(0,CONS-CURRENT,NULL)
返回-1时透露表现失足,即没有响应的视频适配器硬件,若是检测到VGA卡则返回值为VGA,若是检测到EGA卡则返回值为EGA,……。
2.初始化图形系统
初始化图形必需完成下列义务。
(1) 获取当前的视频显示体式格局
ioctl的CONS-GET饬令用来剖断当前适配器的显示体式格局,即:
ioctl(0,CONS-GET,NULL)
它返回显示体式格局的值,这些值在包含文件vtkd.h中均有界说,如:SW-VAG640x480C为VGA适配器设置成640x480分辩率彩色图形模式。
(2) 设置图形模式
直接将图形模式值放入ioctl中的饬令项即可设置响应的图形模式,如ioctl(0,SW-VGA640x480C,NULL)
将VGA适配器设置成640x480分辩率的彩色图形模式。
(3) 获取图形模式下视频缓冲区物理地址
行使ioctl的MAPCONS饬令可以实现此功能,即:
char *scrnmem;
scrnmem=(char *)ioctl(0,MAPCONS,NULL)
全数实现根底图素的垄断都将针对scrnmem进行,scrnmem就是EGA/VGA响应的四个位平面的重叠地址,有关EGA/VGA的结构可参阅[2]。
3.实现根底图素
DOS垄断系统下,对EGA/VGA的各类视频I/O寄放器进行垄断是很轻易的,可以直接行使汇编措辞in和out指令进行读写。然而,UNIX垄断系统下,对物理硬件的接见都是由UNIX系统焦点和培植驱动法式治理的,要接见EGA/VGA的各类I/O寄放器,必需获得对其接见的特权,为了实现这种功能要求,可以行使下列ioctl系统挪用体式格局:
ioctl(0,VGA-IOPRIVL,1) 获取VGA的各类I/O寄放器的接见特权
ioctl(0,EGA-IOPRIVL,1) 获取EGA的各类I/O寄放器的接见特权
UNIX垄断系统根底上是接纳C措辞编写的,只是在低层的系统内核方面才行使初级的汇编措辞,遵循这一原则,对EGA/VGA的I/O寄放器的接见可以接纳汇编措辞,而实现图形系统的根底图素则接纳C措辞。
若是用户的UNIX系统中已有inb()和outb()函数(嵌入在/usr/include/sys/inline.h中),则可以直接行使它们完成对各类I/O寄放器的读写,否则,必需编写下列初级汇编措辞例程:
/*向一端口输出一字节*/
/*从一端口输入一字节 */
void outb(int port,uchar value)
{
-asm push edx
-asm mov edx,port
-asm mov al,value
-asm out dx,al
-asm pop edx
}
uchar inb(int port)
{
-asm push edx
-asm mov edx,port
-asm in al,dx
-asm pop edx
}
根底图素日常包含:设置颜色,对换色板的垄断,画点、线、弧、矩形、圆、椭圆、多边形、画扇形、饼图,尽情图形加添,多边形加添,留存屏幕,规复屏幕等,这些垄断均可用C措辞实现,细节题目问题可参阅[2]。
4.关闭图形系统
退出图形系统之前必需规复EGA/VGA各I/O寄放器的值,并将显示模式规复到进入图形模式之前的模式。接纳下列ioctl挪用实现:
ioctl(0,MODESWITCH | oldmode,NULL)
oldmode是进入图形体式格局之前获取的体式格局,UNIX系统中,获取的体式格局和设置的体式格局之间的相干为:
设置体式格局值=获取体式格局值|MODESWITCH
二、虚拟终端的行使
虚拟终端(Virtual Terminal,简称VT)增强了UNIX系统V/386的接口功能,它不只准许单个用户拓荒一个图形应用软件,而且准许多用户、多道法式在统一个物理终端上运行,在最先一个用户的应用法式之前不必避免另一个应用法式,而且各个用户之间可以彼此切换。
虚拟终端有两种垄断体式格局[1],一种是自动垄断体式格局(VT-AUTO),这是默认情形,对照简单,应用法式并不认识终端用户接管或抛却当前VT的哀告,这意味着被切换失落的过程的任何输入输出都概略丢失落。另一种体式格局是过程节制体式格局(VT-PROCESS),该体式格局撑持应用法式与其余正在行使VT的过程之间同步,应用法式可以负责接管或抛却行使VT。
[1]中介绍了以过程体式格局节制VT的过程,并以培植驱动法式体式格局介绍了接管和抛却对VT节制的旗子记号处置责罚例程。本文给出针对IBM尺度终端编制VT的法式和响应的旗子记号处置责罚例程。
/* 设置虚拟终端 */
void setvirtualterm(void)
{
struct vt-mode vtmode;
signal(SIGUSR1,release-disp); //release-disp为抛却VT的旗子记号处置责罚例程
signal(SIGUSR2,acquire-disp); //acquire-disp为接管VT的旗子记号处置责罚例程
vtmode.mode=VT_PROCESS; //设置过程节制体式格局
vtmode.relsig=SIGUSR1;
vtmode.acqsig=SIGUSR2;
if (ioctl(0,VT-SETMODE,&vtmode)==-1) exit(1);//失足即中止此过程
}
/* 抛却VT的旗子记号处置责罚例程 */
void release-disp(void)
{
signal(SIGUSR1,release-disp);
留存整个图形屏幕于内部缓冲区videobuf中;
ioctl(0),MODESWITCH | oldmode,NULL);
//oldmode为进入图形模式之前的显示体式格局
ioctl(0,VT-RELDISP,VT-TRUE);
//VT-TRUE注解赞成抛却VT,若是此项为0,则透露表现拒绝抛却VT.
}
/* 接管VT的旗子记号处置责罚例程 */
void acquire-disp(void)
{
signal(SIGUSR2,acquire-disp);
ioctl(0,newmode,NULL);//newmode为应用法式所处的图形模式
scrnmem=(char *)ioctl(0,MAPCONS,NULL);
//从头获取图形缓冲区的物理地址
从videobuf中规复整个图形屏幕,并释放videobuf;
ioctl(0,VT-RELDISP,VT-ACKACQ); //VT-ACKACQ注解接管VT
}
在微机UNIX垄断系统下,针对EGA/VGA进行直接视频法式贪图,自力拓荒一个图形法式包,不只小巧轻易,而且可以重用畴昔在DOS下拓荒的图形应用法式。笔者在SCO UNIX系统下拓荒了一个小的低层图形软件包,许多畴昔的DOS图形应用法式都可以移植到UNIX系统下来。
其余,本文介绍的法式在行使前还应包含下列文件,即:
#include<stdio.h>
#include<sys/types.h>
#include<sys/console.h>
#include<sys/vtkd.h>
#include<termio.h>
#include<sys/signal.h>
分配空间时还应加上#include<malloc.h>

参考文献
1 仲萃豪等.UNIX系统V/386第4版-集成软件拓荒指南.北京:电子产业出书社,1992.8.
2 张福炎等.微型策画机IBM PC的事理与应用(续二)-图形显示器及其法式贪图.南京:南京年夜学出书社,1990.7.


友荐云推荐
相关论文列表
文无忧论文格式网是一个专业提供各类论文的标准格式,标准论文格式范文,各类论文范文模板,免费论文下载,各类应用文文书、合同范文等的论文网站。
Copyright©2012-2046 文无忧. All Rights Reserved .心无界 文无忧—文无忧 让你行文无忧 版权所有 文无忧lun.wen5u.com-论文无忧
网站合法性备案号:蜀ICP备14013885号-1