<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 微機(jī)UNIX直接視頻圖形程序設(shè)計(jì)理工論文

    時(shí)間:2024-08-05 08:34:11 理工畢業(yè)論文 我要投稿
    • 相關(guān)推薦

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

      一、圖形程序設(shè)計(jì)

    微機(jī)UNIX直接視頻圖形程序設(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ǔ)言。

      如果用戶的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)稱VT)加強(qiáng)了UNIX系統(tǒng)V/386的接口功能,它不僅允許單個(gè)用戶開(kāi)發(fā)一個(gè)圖形應(yīng)用軟件,而且允許多用戶、多道程序在同一個(gè)物理終端上運(yùn)行,在開(kāi)始一個(gè)用戶的應(yīng)用程序之前不必停止另一個(gè)應(yīng)用程序,而且各個(gè)用戶之間可以互相切換。

      虛擬終端有兩種操作方式[1],一種是自動(dòng)操作方式(VT-AUTO),這是默認(rèn)情況,比較簡(jiǎn)單,應(yīng)用程序并不了解終端用戶接受或放棄當(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

      #include

      #include

      #include

      #include

      #include

      分配空間時(shí)還應(yīng)加上#include

      參考文獻(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.

    【微機(jī)UNIX直接視頻圖形程序設(shè)計(jì)理工論文】相關(guān)文章:

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

    UNIX網(wǎng)絡(luò)的服務(wù)器程序設(shè)計(jì)方法08-14

    UNIX常用的管理命令的使用論文10-29

    用SoC實(shí)現(xiàn)視頻圖形引擎功能的研究10-24

    試論GlideScope®視頻喉鏡和Macintosh直接喉鏡顯露喉部結(jié)構(gòu)比09-24

    關(guān)于醫(yī)學(xué)SCI論文寫(xiě)作之直接材料收集06-29

    網(wǎng)絡(luò)經(jīng)濟(jì)新模式——面向顧客的直接定制論文10-09

    關(guān)于運(yùn)用微機(jī)模擬物理演示實(shí)驗(yàn)的物理教學(xué)論文07-31

    主站蜘蛛池模板: 91精品视频在线| 精品久久久久一区二区三区| 亚洲国产精品自在线一区二区| 日韩三级精品| 亚洲精品电影网| 国产精品视频第一区二区三区| 久久久WWW成人免费精品| 久久福利青草精品资源站| 午夜精品久久久久久中宇| 国产精品国产三级国产a| 国产精品无码一区二区三级| 亚洲精品人成无码中文毛片| 国产精品99久久久久久www| 99久久精品国产麻豆| 无码精品一区二区三区在线| 狠狠精品久久久无码中文字幕 | 精品人妻久久久久久888| 久久久久久久久久久免费精品| AAA级久久久精品无码区| 国产午夜精品理论片久久影视| 精品一区二区三区自拍图片区| 亚洲精品无码MV在线观看| 亚洲一区二区精品视频| 日韩精品国产自在欧美| 毛片a精品**国产| 久久国产午夜精品一区二区三区| 国产精品亚洲αv天堂无码| 成人精品一区二区三区电影黑人| 久久福利青草精品资源站| 精品国产美女福利到在线不卡| 国产精品成人在线| 国产精品久久久福利| 精品久久久久久国产| 国产精品一二区| 久久成人精品视频| 最新国产精品亚洲| 国产精品1024视频| 国产精品推荐天天看天天爽| 国产精品无码一区二区在线观一| 国产精品国产三级在线高清观看 | 国产免费伦精品一区二区三区|