您现在的位置: 中国悠悠网 >> 文档中心 >> 论文中心 >> 计算机类 >> 文章正文
微机unix直接视频图形程序设计 艺术论文 | 免费论文
 
单,应用程序并不了解终端用户接受或放弃当前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.




上一页  [1] [2]