激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

微機UNIX直接視頻圖形程序設計

時(shí)間:2024-07-05 14:34:15 計算機畢業(yè)論文 我要投稿
  • 相關(guān)推薦

微機UNIX直接視頻圖形程序設計

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

【微機UNIX直接視頻圖形程序設計】相關(guān)文章:

UNIX網(wǎng)絡(luò )的服務(wù)器程序設計方法03-20

試論GlideScope®視頻喉鏡和Macintosh直接喉鏡顯露喉部結構比03-08

氣柜直接置換-03-20

Windows 中斷程序設計03-28

靜態(tài)圖像的直接顯示03-06

C語(yǔ)言程序設計 (一)12-26

分枝結構的程序設計 (一)03-07

論Unix環(huán)境下程序和業(yè)務(wù)數據安全性探析01-06

論微機頻頻死機的原因及處理03-26

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频