Hlavní navigace

SVGAlib: klávesnice, myš a grafická pamět

Jakub Matys 24. 9. 2004

V dnešním dílu si řekneme něco o vstupu z klávesnice, myši a o přístupu do grafické paměti.

int vga_getch(void);

Čeká na stisk klávesy stejně jako getchar. Pro neblokující čtení z klávesnice požijte vga_getkey nebo vga_waitevent.

int vga_getkey(void);

Přečte znak z klávesnice, aniž by čekal na stisk klávesy. Vrací nulu, pokud nebyl znak zadán, jinak vrací ASCII kód. Tato funkce nesmí být použita v raw módu.

int vga_waitevent(int which, fd_set *input, fd_set *output, struct timeval *timeout);

Pro tuto funkci je nutné vložit do vašeho kódu tyto hlavičkové soubory: sys/time.h, sys/tipes.h, unistd.h a vga.h. Tato funkce se používá na odchytávání událostí klávesnice nebo myši. Je postavena na knihovní funkci select(2) – doporučuji si přečíst dokumentaci pro hlubší porozumění vga_waitevent.

which může být 0 nebo kombinace (bitový součin) hodnot VGA_MOUSEEVENT a VGA_KEYEVENT. Pokud se zajímáte o čekání na deskriptory souborů určených pro vstup nebo pro nový výstup dat (+např. sokety), nastavte odpovídající bity do struktury fd_set(viz select). Pokud chctete používat časový limit pro návrat z vga_waitevent, nastavte strukturu struct timeval na požadovanou hodnotu. Jestliže se nezajímáte o žádné události, nastavte všechny ukazatele na NULL.

Pokud je timeout nastaven na NULL, funkce nebude používat časový limit, ale zablokuje se, dokud nenarazí na nějakou událost.

Pokud je vrácený integer < 0, byla vrácena chyba. Zpřístupněte globální proměnnou errno pro více informací. Pokud je hodnota >= 0, je možno zachytávat události z klávesnice či myši. Pokud nastane jedna z těchto dvou situací, jsou uvedeny do „provozu“ příslušné obnovovací funkce.

Co se týče výkonu není v podstatě rozdíl mezi raw a non-raw módem. Nesmíte také zapomenout používat pro čtení z klávesnice vga_getch místo vga_getkey.

Příklad: Jestliže chcete čekat v blokujícím módu na stisk klávesy nebo podnět myši, použijte:

vga_waitevent(VGA_MOUSEEVENT | VGA_KEYEVENT, NULL, NULL, NULL, NULL); 

Pokud chcete čekat, ale v neblokujícím módu:

#include <sys/time.h>
#include <sys/type.h>
#include <unistd.h>
#include <vga.h>

struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 0;

vga_waitevent(VGA_MOUSEEVENT | VGA_KEYEVENT, NULL, NULL, NULL, &timeout); 

Další kouzla jdou provádět také pomocí následujících funkcí.

int mouse_update(void);

Pro použití této funkce musíte includovat soubor vgamouse.h. Funkce čte události myši ze vstupního bufferu a aktualizuje interní proměnné knihovny, které shromažďují informace jako pozice myši, stav tlačítek… Funkce vračí 0, pokud nejsou žádné události, jinak vrací nenulovou hodnotu.

int keyboard_upda­te(void);

void keyboard_wait­forupdate(void);

Také pro tyto funkce musíte připojit na začáte vašeho kódu hlavičkový soubor, a to vgakeyboard.h.

Tyto rutiny kontrolují buffer klávesnice, o klávesnici si více povíme v příštím dílu. Pokude nejsou události, keyboard_update vrací 0 (jinak nenulovou hodnotu) a naproti tomu keyboard_wait­forupdate blokuje volající funkci, dokud nezjistí požadovanou událost.

To by bylo ke vstupům a nyní se podíváme na operace s grafickou pamětí.

void vga_setpage(int page);

Většina SVGA karet má více než 64 KB paměti, která je však dostačující pro použití běžného VGA. Velikost paměti mapované funkcí vga_getgraphmem je pouze oněch 64 KB. vga_setpage vybere page-tý pamětový chunk (64 KB), který je posléze viditelný funkcí vga_getgraphmem.

void vga_setreadpage(int page);

void vga_setwritepa­ge(int page);

Umožňuje různým paměťovým chunkům být modifikovaný čtením/zápisem do tohoto paměťového prostoru. To je velmi užitečná vlastnost pro kopírování obrazovky bod po bodu. Avšak pozor! Tato možnost není přístupná ve všech módech.

unsigned char graph_mem */Tato deklarace je už v vga.h/

unsigned char *vga_getgraphmem(vo­id);

Vrací pointer na 64KB frame buffer. vga_setpage, vga_setreadpage a vga_setwritepage umožnují nastavit, která stránka paměti bude ukazovat tuto pozici. vga_setlinearad­dressing mapuje celou VGA pamět v prostoru (musí být podporováno HW). V tomto módu vrací funkce lokaci tohoto prostoru. Můžete také přistupovat k globální proměnnégraph_mem.

To by bylo pro dnešek vše, v příštím dílu doděláme obsluhu grafické paměti a probereme si barevné palety.

Našli jste v článku chybu?

26. 9. 2004 18:19

Johanka (neregistrovaný)

Ma :) (autor senilni a ja slepa), dik.

24. 9. 2004 10:58

criton (neregistrovaný)

Mno, a nema tohle byt nahodou 5. a ne opet 4. dil? ;-)

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Nestlé vyvinula nový typ „netloustnoucího“ cukru

Nestlé vyvinula nový typ „netloustnoucího“ cukru

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Lupa.cz: Seznam mění vedení. Pavel Zima v čele končí

Seznam mění vedení. Pavel Zima v čele končí

DigiZone.cz: Sat novinky: slovenská TV8 HD i ruský NTV Mir

Sat novinky: slovenská TV8 HD i ruský NTV Mir

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí