國(guó)家工信部網(wǎng)站備案實(shí)名:湖北自考網(wǎng) 為考生提供湖北自考信息服務(wù),僅供學(xué)習(xí)交流使用,官方信息以湖北教育考試院為準(zhǔn)。

湖北自考網(wǎng)

網(wǎng)站首頁(yè) 自考專(zhuān)業(yè) 自考院校 考場(chǎng)查詢(xún) 成績(jī)查詢(xún) 網(wǎng)上報(bào)名 考生平臺(tái)
專(zhuān)題:
自考報(bào)名時(shí)間 考試時(shí)間 自考培訓(xùn) 模擬考試 教材大綱 免考辦理 轉(zhuǎn)考辦理 實(shí)踐考核 畢業(yè)申請(qǐng) 學(xué)位英語(yǔ)培訓(xùn) 學(xué)位申請(qǐng) 專(zhuān)升本 成人高考 招生老師
湖北自考在線 湖北學(xué)位英語(yǔ)培訓(xùn)班 湖北成人高考報(bào)名 湖北自考視頻免費(fèi)領(lǐng)取
當(dāng)前位置:湖北自考網(wǎng) > 微機(jī)UNIX直接視頻圖形程序設(shè)計(jì)

微機(jī)UNIX直接視頻圖形程序設(shè)計(jì)

湖北自考網(wǎng) 來(lái)源: 時(shí)間:2005-11-09 00:00:00
微機(jī)UNIX直接視頻圖形程序設(shè)計(jì)
吳建林

UNIX操作系統(tǒng)提供了X-Window圖形窗口系統(tǒng)和OPENLOOK圖形用戶(hù)界面,這些系統(tǒng)不僅昂貴、龐大,而且不便于移植以前開(kāi)發(fā)的DOS圖形應(yīng)用程序。本文介紹利用微機(jī)內(nèi)部硬件控制,針對(duì)EGA/VGA圖形適配器,進(jìn)行直接視頻圖形程序設(shè)計(jì)。對(duì)于比較熟悉PC-AT體系結(jié)構(gòu)和視頻程序設(shè)計(jì)知識(shí)的程序員來(lái)說(shuō),更喜歡后者,因?yàn)槟苡行У乩糜布匦?,加快圖形處理速度。
進(jìn)行圖形程序設(shè)計(jì)時(shí),還須考慮視頻接口的一個(gè)重要特性——虛擬終端功能,因?yàn)樗试S控制幾個(gè)獨(dú)立的圖形應(yīng)用窗口,允許多個(gè)應(yīng)用程序在同一個(gè)終端上進(jìn)行切換。本文提供針對(duì)IBM標(biāo)準(zhǔn)終端對(duì)虛擬終端進(jìn)行有效管理的手段。
微機(jī)UNIX直接視頻圖形程序設(shè)計(jì)有兩種方法,一種是利用設(shè)備驅(qū)動(dòng)程序(見(jiàn)參考文獻(xiàn)1),另一種是針對(duì)IBM標(biāo)準(zhǔn)終端進(jìn)行編程,本文介紹后者。
一、圖形程序設(shè)計(jì)
1.檢測(cè)視頻適配器
視頻顯示器是由視頻適配器硬件控制的,視頻適配器決定了圖形方式下顯示圖形的分辨率及可能的顏色[2]。利用系統(tǒng)調(diào)用ioctl中的CONS-CURRENT命令可以檢測(cè)到當(dāng)前的視頻適配器,即:
ioctl(0,CONS-CURRENT,NULL)
返回-1時(shí)表示出錯(cuò),即沒(méi)有相應(yīng)的視頻適配器硬件,如果檢測(cè)到VGA卡則返回值為VGA,如果檢測(cè)到EGA卡則返回值為EGA,……。
2.初始化圖形系統(tǒng)
初始化圖形必須完成下列任務(wù)。
(1) 獲取當(dāng)前的視頻顯示方式
ioctl的CONS-GET命令用來(lái)判斷當(dāng)前適配器的顯示方式,即:
ioctl(0,CONS-GET,NULL)
它返回顯示方式的值,這些值在包含文件vtkd.h中均有定義,如:SW-VAG640x480C為VGA適配器設(shè)置成640x480分辨率彩色圖形模式。
(2) 設(shè)置圖形模式
直接將圖形模式值放入ioctl中的命令項(xiàng)即可設(shè)置相應(yīng)的圖形模式,如ioctl(0,SW-VGA640x480C,NULL)
將VGA適配器設(shè)置成640x480分辨率的彩色圖形模式。
(3) 獲取圖形模式下視頻緩沖區(qū)物理地址
利用ioctl的MAPCONS命令可以實(shí)現(xiàn)此功能,即:
char *scrnmem;
scrnmem=(char *)ioctl(0,MAPCONS,NULL)
所有實(shí)現(xiàn)基本圖素的操作都將針對(duì)scrnmem進(jìn)行,scrnmem就是EGA/VGA相應(yīng)的四個(gè)位平面的重疊地址,有關(guān)EGA/VGA的結(jié)構(gòu)可參閱[2]。
3.實(shí)現(xiàn)基本圖素
DOS操作系統(tǒng)下,對(duì)EGA/VGA的各種視頻I/O寄存器進(jìn)行操作是很方便的,可以直接使用匯編語(yǔ)言in和out指令進(jìn)行讀寫(xiě)。然而,UNIX操作系統(tǒng)下,對(duì)物理硬件的訪問(wèn)都是由UNIX系統(tǒng)核心和設(shè)備驅(qū)動(dòng)程序管理的,要訪問(wèn)EGA/VGA的各種I/O寄存器,必須獲得對(duì)其訪問(wèn)的特權(quán),為了實(shí)現(xiàn)這種功能要求,可以使用下列ioctl系統(tǒng)調(diào)用方式:
ioctl(0,VGA-IOPRIVL,1) 獲取VGA的各種I/O寄存器的訪問(wèn)特權(quán)
ioctl(0,EGA-IOPRIVL,1) 獲取EGA的各種I/O寄存器的訪問(wèn)特權(quán)
UNIX操作系統(tǒng)基本上是采用C語(yǔ)言編寫(xiě)的,只是在低層的系統(tǒng)內(nèi)核方面才使用低級(jí)的匯編語(yǔ)言,遵循這一原則,對(duì)EGA/VGA的I/O寄存器的訪問(wèn)可以采用匯編語(yǔ)言,而實(shí)現(xiàn)圖形系統(tǒng)的基本圖素則采用C語(yǔ)言。
如果用戶(hù)的UNIX系統(tǒng)中已有inb()和outb()函數(shù)(嵌入在/usr/include/sys/inline.h中),則可以直接使用它們完成對(duì)各種I/O寄存器的讀寫(xiě),否則,必須編寫(xiě)下列低級(jí)匯編語(yǔ)言例程:
/*向一端口輸出一字節(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
}
基本圖素一般包括:設(shè)置顏色,對(duì)調(diào)色板的操作,畫(huà)點(diǎn)、線、弧、矩形、圓、橢圓、多邊形、畫(huà)扇形、餅圖,任意圖形填充,多邊形填充,保存屏幕,恢復(fù)屏幕等,這些操作均可用C語(yǔ)言實(shí)現(xiàn),細(xì)節(jié)問(wèn)題可參閱[2]。
4.關(guān)閉圖形系統(tǒng)
退出圖形系統(tǒng)之前必須恢復(fù)EGA/VGA各I/O寄存器的值,并將顯示模式恢復(fù)到進(jìn)入圖形模式之前的模式。采用下列ioctl調(diào)用實(shí)現(xiàn):
ioctl(0,MODESWITCH | oldmode,NULL)
oldmode是進(jìn)入圖形方式之前獲取的方式,UNIX系統(tǒng)中,獲取的方式和設(shè)置的方式之間的關(guān)系為:
設(shè)置方式值=獲取方式值|MODESWITCH
二、虛擬終端的使用
虛擬終端(Virtual Terminal,簡(jiǎn)稱(chēng)VT)加強(qiáng)了UNIX系統(tǒng)V/386的接口功能,它不僅允許單個(gè)用戶(hù)開(kāi)發(fā)一個(gè)圖形應(yīng)用軟件,而且允許多用戶(hù)、多道程序在同一個(gè)物理終端上運(yùn)行,在開(kāi)始一個(gè)用戶(hù)的應(yīng)用程序之前不必停止另一個(gè)應(yīng)用程序,而且各個(gè)用戶(hù)之間可以互相切換。
虛擬終端有兩種操作方式[1],一種是自動(dòng)操作方式(VT-AUTO),這是默認(rèn)情況,比較簡(jiǎn)單,應(yīng)用程序并不了解終端用戶(hù)接受或放棄當(dāng)前VT的請(qǐng)求,這意味著被切換掉的進(jìn)程的任何輸入輸出都可能丟失。另一種方式是進(jìn)程控制方式(VT-PROCESS),該方式支持應(yīng)用程序與其它正在使用VT的進(jìn)程之間同步,應(yīng)用程序可以負(fù)責(zé)接受或放棄使用VT。
[1]中介紹了以進(jìn)程方式控制VT的過(guò)程,并以設(shè)備驅(qū)動(dòng)程序方式介紹了接受和放棄對(duì)VT控制的信號(hào)處理例程。本文給出針對(duì)IBM標(biāo)準(zhǔn)終端編制VT的程序和相應(yīng)的信號(hào)處理例程。
/* 設(shè)置虛擬終端 */
void setvirtualterm(void)
{
struct vt-mode vtmode;
signal(SIGUSR1,release-disp); //release-disp為放棄VT的信號(hào)處理例程
signal(SIGUSR2,acquire-disp); //acquire-disp為接受VT的信號(hào)處理例程
vtmode.mode=VT_PROCESS; //設(shè)置進(jìn)程控制方式
vtmode.relsig=SIGUSR1;
vtmode.acqsig=SIGUSR2;
if (ioctl(0,VT-SETMODE,&vtmode)==-1) exit(1);//出錯(cuò)即終止此進(jìn)程
}
/* 放棄VT的信號(hào)處理例程 */
void release-disp(void)
{
signal(SIGUSR1,release-disp);
保存整個(gè)圖形屏幕于內(nèi)部緩沖區(qū)videobuf中;
ioctl(0),MODESWITCH | oldmode,NULL);
//oldmode為進(jìn)入圖形模式之前的顯示方式
ioctl(0,VT-RELDISP,VT-TRUE);
//VT-TRUE表明同意放棄VT,如果此項(xiàng)為0,則表示拒絕放棄VT.
}
/* 接受VT的信號(hào)處理例程 */
void acquire-disp(void)
{
signal(SIGUSR2,acquire-disp);
ioctl(0,newmode,NULL);//newmode為應(yīng)用程序所處的圖形模式
scrnmem=(char *)ioctl(0,MAPCONS,NULL);
//重新獲取圖形緩沖區(qū)的物理地址
從videobuf中恢復(fù)整個(gè)圖形屏幕,并釋放videobuf;
ioctl(0,VT-RELDISP,VT-ACKACQ); //VT-ACKACQ表明接受VT
}
在微機(jī)UNIX操作系統(tǒng)下,針對(duì)EGA/VGA進(jìn)行直接視頻程序設(shè)計(jì),獨(dú)立開(kāi)發(fā)一個(gè)圖形程序包,不僅小巧方便,而且可以重用以前在DOS下開(kāi)發(fā)的圖形應(yīng)用程序。筆者在SCO UNIX系統(tǒng)下開(kāi)發(fā)了一個(gè)小的低層圖形軟件包,許多以前的DOS圖形應(yīng)用程序都可以移植到UNIX系統(tǒng)下來(lái)。
另外,本文介紹的程序在使用前還應(yīng)包含下列文件,即:
#include<stdio.h>
#include<sys/types.h>
#include<sys/console.h>
#include<sys/vtkd.h>
#include<termio.h>
#include<sys/signal.h>
分配空間時(shí)還應(yīng)加上#include<malloc.h>

參考文獻(xiàn)
1 仲萃豪等.UNIX系統(tǒng)V/386第4版-集成軟件開(kāi)發(fā)指南.北京:電子工業(yè)出版社,1992.8.
2 張福炎等.微型計(jì)算機(jī)IBM PC的原理與應(yīng)用(續(xù)二)-圖形顯示器及其程序設(shè)計(jì).南京:南京大學(xué)出版社,1990.7.

結(jié)束
本文標(biāo)簽
特別聲明:1.凡本網(wǎng)注明稿件來(lái)源為“湖北自考網(wǎng)”的,轉(zhuǎn)載必須注明“稿件來(lái)源:湖北自考網(wǎng)(m.heywebguys.com)”,違者將依法追究責(zé)任;
2.部分稿件來(lái)源于網(wǎng)絡(luò),如有不實(shí)或侵權(quán),請(qǐng)聯(lián)系我們溝通解決。最新官方信息請(qǐng)以湖北省教育考試院及各教育官網(wǎng)為準(zhǔn)!
限時(shí),免費(fèi)獲取學(xué)歷提升方案

已幫助10w萬(wàn)+意向?qū)W歷提升用戶(hù)成功上岸

  • 毛澤東思想概論

    毛澤東思想概論

    培訓(xùn)優(yōu)勢(shì):課時(shí)考點(diǎn)精講+刷題+沖刺,熟練應(yīng)對(duì)考試題型。全程督促學(xué)習(xí),安排好學(xué)習(xí)計(jì)劃。 毛澤東思想概論...自考培訓(xùn)
  • 英語(yǔ)二

    英語(yǔ)二

    本課程既是一門(mén)語(yǔ)言實(shí)踐課程,也是拓寬知識(shí)、了解世界文化的重要素質(zhì)課程,它以培養(yǎng)學(xué)習(xí)者的綜合語(yǔ)言應(yīng)用能力為目標(biāo),使他們?cè)趯W(xué)習(xí)、工作和社會(huì)交往中能夠使用英語(yǔ)進(jìn)行有效的交流。 英語(yǔ)二...自考培訓(xùn)
  • 馬克思主義基本原理概論

    馬克思主義基本原理概論

    本書(shū)包括兩個(gè)部分:自學(xué)考試大綱和基本原理。主要內(nèi)容有,馬克思主義是關(guān)于工人階級(jí)和人類(lèi)解放的科學(xué),物質(zhì)世界及其發(fā)展規(guī)律,認(rèn)識(shí)的本質(zhì)及其規(guī)律,人類(lèi)社會(huì)及其發(fā)展規(guī)律,資本主義的形成及其發(fā)展,資本主義發(fā)展的歷史進(jìn)程,社會(huì)主義社會(huì)及其進(jìn)程,共產(chǎn)主義社會(huì)及其進(jìn)程等。 馬克思主義基本原理概論...自考培訓(xùn)
  • 思想道德修養(yǎng)與法律基礎(chǔ)

    思想道德修養(yǎng)與法律基礎(chǔ)

    《思想道德修養(yǎng)與法律基礎(chǔ)》課具有鮮明的政治性、思想性、理論性、針對(duì)性、科學(xué)性、知識(shí)性以及實(shí)踐性和修養(yǎng)性。它包羅政治、思想、道德、心理本質(zhì)、學(xué)習(xí)成才和法律本質(zhì)等內(nèi)容,指導(dǎo)和回答大學(xué)生在人生、抱負(fù)、信念等方面遍及關(guān)心和迫切需要解決的問(wèn)題。 思想道德修養(yǎng)與法律基礎(chǔ)...自考培訓(xùn)
  • 中國(guó)近代史綱要

    中國(guó)近代史綱要

    “中國(guó)近現(xiàn)代史綱要”全國(guó)高等教育自學(xué)考試指定教材,依據(jù)中央審定的普通高等學(xué)?!爸袊?guó)近現(xiàn)代史綱要”編寫(xiě)大綱以及馬克思主義理論研究和建設(shè)工程重點(diǎn)教材《中國(guó)近現(xiàn)代史綱要》,結(jié)合自學(xué)考試的特點(diǎn)設(shè)計(jì)了十章,集中講述1840年鴉片戰(zhàn)爭(zhēng)爆發(fā)一直到2007年中國(guó)共產(chǎn)黨第十七次全國(guó)代表大會(huì)召開(kāi)的160多年的中國(guó)近現(xiàn)代歷史。 中國(guó)近代史綱要...自考培訓(xùn)
微信公眾號(hào) 考試交流群
湖北自考網(wǎng)微信公眾號(hào)

掃一掃關(guān)注微信公眾號(hào)

隨時(shí)獲取湖北省自考政策、通知、公告以及各類(lèi)學(xué)習(xí)資料、學(xué)習(xí)方法、課程。