欢迎光临112期刊网!
网站首页 > 论文范文 > 计算机论文 > 软件技术 > 微机UNIX直接视频图形程序设计

微机UNIX直接视频图形程序设计

日期:2023-01-24 阅读量:0 所属栏目:软件技术


吴建林

unix操作系统提供了x-window图形窗口系统和openlook图形用户界面,这些系统不仅昂贵、庞大,而且不便于移植以前开发的dos图形应用程序。本文介绍利用微机内部硬件控制,针对ega/vga图形适配器,进行直接视频图形程序设计。对于比较熟悉pc-at体系结构和视频程序设计知识的程序员来说,更喜欢后者,因为能有效地利用硬件特性,加快图形处理速度。
进行图形程序设计时,还须考虑视频接口的一个重要特性——虚拟终端功能,因为它允许控制几个独立的图形应用窗口,允许多个应用程序在同一个终端上进行切换。本文提供针对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的信号处理例程
=vt_process; //设置进程控制方式
=sigusr1;
=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
#include
#include
#include
#include
#include
分配空间时还应加上#include

参考文献
1 仲萃豪等.unix系统v/386第4版-集成软件开发指南.北京:电子工业出版社,1992.8.
2 张福炎等.微型计算机ibm pc的原理与应用(续二)-图形显示器及其程序设计.南京:南京大学出版社,1990.7.


本文链接:http://www.qk112.com/lwfw/jsjlw/ruanjianjishu/229800.html

论文中心更多

发表指导
期刊知识
职称指导
论文百科
写作指导
论文指导
论文格式 论文题目 论文开题 参考文献 论文致谢 论文前言
教育论文
美术教育 小学教育 学前教育 高等教育 职业教育 体育教育 英语教育 数学教育 初等教育 音乐教育 幼儿园教育 中教教育 教育理论 教育管理 中等教育 教育教学 成人教育 艺术教育 影视教育 特殊教育 心理学教育 师范教育 语文教育 研究生论文 化学教育 图书馆论文 文教资料 其他教育
医学论文
医学护理 医学检验 药学论文 畜牧兽医 中医学 临床医学 外科学 内科学 生物制药 基础医学 预防卫生 肿瘤论文 儿科学论文 妇产科 遗传学 其他医学
经济论文
国际贸易 市场营销 财政金融 农业经济 工业经济 财务审计 产业经济 交通运输 房地产经济 微观经济学 政治经济学 宏观经济学 西方经济学 其他经济 发展战略论文 国际经济 行业经济 证券投资论文 保险经济论文
法学论文
民法 国际法 刑法 行政法 经济法 宪法 司法制度 法学理论 其他法学
计算机论文
计算机网络 软件技术 计算机应用 信息安全 信息管理 智能科技 应用电子技术 通讯论文
会计论文
预算会计 财务会计 成本会计 会计电算化 管理会计 国际会计 会计理论 会计控制 审计会计
文学论文
中国哲学 艺术理论 心理学 伦理学 新闻 美学 逻辑学 音乐舞蹈 喜剧表演 广告学 电视电影 哲学理论 世界哲学 文史论文 美术论文
管理论文
行政管理论文 工商管理论文 市场营销论文 企业管理论文 成本管理论文 人力资源论文 项目管理论文 旅游管理论文 电子商务管理论文 公共管理论文 质量管理论文 物流管理论文 经济管理论文 财务管理论文 管理学论文 秘书文秘 档案管理
社科论文
三农问题 环境保护 伦理道德 城镇建设 人口生育 资本主义 科技论文 社会论文 工程论文 环境科学