微机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] |
|
|
|
|
|