微机UNIX直接视频图形程序设计
和放弃对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);
保存整个图形屏幕于内部缓冲区videobu
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.
本文链接地址:http://www.oyaya.net/fanwen/view/172387.html
/* 设置虚拟终端 */
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);
保存整个图形屏幕于内部缓冲区videobu
f中;
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.
《微机UNIX直接视频图形程序设计(第2页)》