微機UNIX直接視頻圖形程序設計
吳建林
UNIX操作系統(tǒng)提供了X-Window圖形窗口系統(tǒng)和OPENLOOK圖形用戶界面,這些系統(tǒng)不僅昂貴、龐大,而且不便于移植以前開發(fā)的DOS圖形應用程序。本文介紹利用微機內(nèi)部硬件控制,針對EGA/VGA圖形適配器,進行直接視頻圖形程序設計。對于比較熟悉PC-AT體系結構和視頻程序設計知識的程序員來說,更喜歡后者,因為能有效地利用硬件特性,加快圖形處理速度。
進行圖形程序設計時,還須考慮視頻接口的一個重要特性——虛擬終端功能,因為它允許控制幾個獨立的圖形應用窗口,允許多個應用程序在同一個終端上進行切換。本文提供針對IBM標準終端對虛擬終端進行有效管理的手段。
微機UNIX直接視頻圖形程序設計有兩種方法,一種是利用設備驅動程序(見參考文獻1),另一種是針對IBM標準終端進行編程,本文介紹后者。
一、圖形程序設計
1.檢測視頻適配器
視頻顯示器是由視頻適配器硬件控制的,視頻適配器決定了圖形方式下顯示圖形的分辨率及可能的顏色[2]。利用系統(tǒng)調用ioctl中的CONS-CURRENT命令可以檢測到當前的視頻適配器,即:
ioctl(0,CONS-CURRENT,NULL)
返回-1時表示出錯,即沒有相應的視頻適配器硬件,如果檢測到VGA卡則返回值為VGA,如果檢測到EGA卡則返回值為EGA,……。
2.初始化圖形系統(tǒng)
初始化圖形必須完成下列任務。
(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) 獲取圖形模式下視頻緩沖區(qū)物理地址
利用ioctl的MAPCONS命令可以實現(xiàn)此功能,即:
char *scrnmem;
scrnmem=(char *)ioctl(0,MAPCONS,NULL)
所有實現(xiàn)基本圖素的操作都將針對scrnmem進行,scrnmem就是EGA/VGA相應的四個位平面的重疊地址,有關EGA/VGA的結構可參閱[2]。
3.實現(xiàn)基本圖素
DOS操作系統(tǒng)下,對EGA/VGA的各種視頻I/O寄存器進行操作是很方便的,可以直接使用匯編語言in和out指令進行讀寫。然而,UNIX操作系統(tǒng)下,對物理硬件的訪問都是由UNIX系統(tǒng)核心和設備驅動程序管理的,要訪問EGA/VGA的各種I/O寄存器,必須獲得對其訪問的特權,為了實現(xiàn)這種功能要求,可以使用下列ioctl系統(tǒng)調用方式:
ioctl(0,VGA-IOPRIVL,1) 獲取VGA的各種I/O寄存器的訪問特權
ioctl(0,EGA-IOPRIVL,1) 獲取EGA的各種I/O寄存器的訪問特權
UNIX操作系統(tǒng)基本上是采用C語言編寫的,只是在低層的系統(tǒng)內(nèi)核方面才使用低級的匯編語言,遵循這一原則,對EGA/VGA的I/O寄存器的訪問可以采用匯編語言,而實現(xiàn)圖形系統(tǒng)的基本圖素則采用C語言。
如果用戶的UNIX系統(tǒng)中已有inb()和outb()函數(shù)(嵌入在/usr/include/sys/inline.h中),則可以直接使用它們完成對各種I/O寄存器的讀寫,否則,必須編寫下列低級匯編語言例程:
/*向一端口輸出一字節(jié)*/
/*從一端口輸入一字節(jié) */
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語言實現(xiàn),細節(jié)問題可參閱[2]。
4.關閉圖形系統(tǒng)
退出圖形系統(tǒng)之前必須恢復EGA/VGA各I/O寄存器的值,并將顯示模式恢復到進入圖形模式之前的模式。采用下列ioctl調用實現(xiàn):
ioctl(0,MODESWITCH | oldmode,NULL)
oldmode是進入圖形方式之前獲取的方式,UNIX系統(tǒng)中,獲取的方式和設置的方式之間的關系為:
設置方式值=獲取方式值|MODESWITCH
二、虛擬終端的使用
虛擬終端(Virtual Terminal,簡稱VT)加強了UNIX系統(tǒng)V/386的接口功能,它不僅允許單個用戶開發(fā)一個圖形應用軟件,而且允許多用戶、多道程序在同一個物理終端上運行,在開始一個用戶的應用程序之前不必停止另一個應用程序,而且各個用戶之間可以互相切換。
虛擬終端有兩種操作方式[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);
保存整個圖形屏幕于內(nèi)部緩沖區(qū)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);
//重新獲取圖形緩沖區(qū)的物理地址
從videobuf中恢復整個圖形屏幕,并釋放videobuf;
ioctl(0,VT-RELDISP,VT-ACKACQ); //VT-ACKACQ表明接受VT
}
在微機UNIX操作系統(tǒng)下,針對EGA/VGA進行直接視頻程序設計,獨立開發(fā)一個圖形程序包,不僅小巧方便,而且可以重用以前在DOS下開發(fā)的圖形應用程序。筆者在SCO UNIX系統(tǒng)下開發(fā)了一個小的低層圖形軟件包,許多以前的DOS圖形應用程序都可以移植到UNIX系統(tǒng)下來。
另外,本文介紹的程序在使用前還應包含下列文件,即:
#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系統(tǒng)V/386第4版-集成軟件開發(fā)指南.北京:電子工業(yè)出版社,1992.8.
2 張福炎等.微型計算機IBM PC的原理與應用(續(xù)二)-圖形顯示器及其程序設計.南京:南京大學出版社,1990.7.
2.部分稿件來源于網(wǎng)絡,如有不實或侵權,請聯(lián)系我們溝通解決。最新官方信息請以湖北省教育考試院及各教育官網(wǎng)為準!
-
122023-04湖北自考風景園林專業(yè)本科畢業(yè)論文范文湖北自考風景園林專業(yè)本科畢業(yè)論文范文
-
122023-04湖北自考土木工程專業(yè)本科畢業(yè)論文范文湖北自考土木工程專業(yè)本科畢業(yè)論文范文
-
122023-04湖北自考計算機信息安全本科畢業(yè)論文范文湖北自考計算機信息安全本科畢業(yè)論文范文
-
122023-04湖北自考建筑學本科畢業(yè)論文范文湖北自考建筑學本科畢業(yè)論文范文
-
122023-04湖北自考軟件工程本科畢業(yè)論文湖北自考軟件工程本科畢業(yè)論文
-
122023-04湖北自考網(wǎng)絡工程專業(yè)本科畢業(yè)論文范文湖北自考網(wǎng)絡工程專業(yè)本科畢業(yè)論文范文
已幫助10w萬+意向學歷提升用戶成功上岸
毛澤東思想概論
培訓優(yōu)勢:課時考點精講+刷題+沖刺,熟練應對考試題型。全程督促學習,安排好學習計劃。 毛澤東思想概論...自考培訓英語二
本課程既是一門語言實踐課程,也是拓寬知識、了解世界文化的重要素質課程,它以培養(yǎng)學習者的綜合語言應用能力為目標,使他們在學習、工作和社會交往中能夠使用英語進行有效的交流。 英語二...自考培訓馬克思主義基本原理概論
本書包括兩個部分:自學考試大綱和基本原理。主要內(nèi)容有,馬克思主義是關于工人階級和人類解放的科學,物質世界及其發(fā)展規(guī)律,認識的本質及其規(guī)律,人類社會及其發(fā)展規(guī)律,資本主義的形成及其發(fā)展,資本主義發(fā)展的歷史進程,社會主義社會及其進程,共產(chǎn)主義社會及其進程等。 馬克思主義基本原理概論...自考培訓思想道德修養(yǎng)與法律基礎
《思想道德修養(yǎng)與法律基礎》課具有鮮明的政治性、思想性、理論性、針對性、科學性、知識性以及實踐性和修養(yǎng)性。它包羅政治、思想、道德、心理本質、學習成才和法律本質等內(nèi)容,指導和回答大學生在人生、抱負、信念等方面遍及關心和迫切需要解決的問題。 思想道德修養(yǎng)與法律基礎...自考培訓中國近代史綱要
“中國近現(xiàn)代史綱要”全國高等教育自學考試指定教材,依據(jù)中央審定的普通高等學?!爸袊F(xiàn)代史綱要”編寫大綱以及馬克思主義理論研究和建設工程重點教材《中國近現(xiàn)代史綱要》,結合自學考試的特點設計了十章,集中講述1840年鴉片戰(zhàn)爭爆發(fā)一直到2007年中國共產(chǎn)黨第十七次全國代表大會召開的160多年的中國近現(xiàn)代歷史。 中國近代史綱要...自考培訓

掃一掃關注微信公眾號
隨時獲取湖北省自考政策、通知、公告以及各類學習資料、學習方法、課程。