vga_ext_set
Pokud potřebujete nastavit další rozšiřující volby, pomůže vám funkce vga_ext_set. Z její hlavičky – int vga_ext_set(unsigned what, …); – je patrné, že se jedná o funkci s proměnným počtem parametrů.
Před použitím funkce je však nutné nejdříve otestovat, zda jsou rozšiřující volby dostupné (je to z důvodu zpětné kompatibility se staršími verzemi svgalib). Funkce vga_getmodeinfo() vrací strukturu naplněnou informacemi o módu. Pokud je položka int flags naplněna hodnotou HAVE_EXT_SET, jsou volby vga_ext_set podporovány.
Dostupnost jednotlivých voleb funkce je také závislá na aktuálním grafickém módu. Proto je důležité se dotázat na dostupnost vytoužené volby…
Dotazování se na dostupnost volby
vga_ext_set(VGA_EXT_AVAILABLE, VGA_AVAIL_SET); – vrací integer s i-tým bitem nastaveným, pokud jei platným what parametrem vga_ext_set.
vga_ext_set(VGA_EXT_AVAILABLE, VGA_AVAIL_ACCEL); – vrací integer s i-tým bitem nastaveným, pokud je i platným whatparametrem pro vga_accel(3). Pro srozumitelnější kód jsou v hlavičkovém souboru vga.h předdefinovány následující symbolické konstanty:
- ACCELFLAG_FILLBOX,
- ACCELFLAG_SCREENCOPY,
- ACCELFLAG_PUTIMAGE,
- ACCELFLAG_DRAWLINE,
- ACCELFLAG_SETFGCOLOR,
- ACCELFLAG_SETBGCOLOR,
- ACCELFLAG_SETTRANSPARENCY,
- ACCELFLAG_SETRASTEROP,
- ACCELFLAG_PUTBITMAP,
- ACCELFLAG_SCREENCOPYBITMAP,
- ACCELFLAG_DRAWHLINELIST,
- ACCELFLAG_SETMODE,
- ACCELFLAG_SYNC.
Jednotlivým položkám zatím nemusíte rozumět, více si o nich řekneme, až budeme probírat akcelerátory.
vga_ext_set(VGA_EXT_AVAILABLE, VGA_AVAIL_ROPMODES); – vrací integer s i-tým bitem nastaveným, pokud je i platným mode parametrem pro vga_accel(ACCEL_SETRASTEROP, mode). Příklad uvedený v manuálových stránkách:
if (vga_ext_set(VGA_EXT_AVAILABLE, VGA_AVAIL_ROPMODES) & (1 << ROP_XOR))
vga_accel(ACCEL_SETRASTEROP, ROP_XOR);
else
/* do something else */
vga_ext_set(VGA_EXT_AVAILABLE, VGA_AVAIL_TRANSMODES); – vrací integer s i-tým bitem nastaveným, pokud je i platným mode parametrem pro vga_accel(ACCEL_SETTRANSPARENCY, mode, …).
Operace s jednobitovými příznaky
Každý mód má určité speciální volby, které mohou být zapnuty nebo vypnuty aplikací. Vždy můžete nastavit příznaky, avšak pokud jsou vlastnosti jimi předávané již podporovány aktuálním módem, budou příznaky zahozeny.
vga_ext_set(VGA_EXT_SET, int bitflags); – příznaky obsažené v bitflags nastaví, těch zbývajících se nedotkne. Vrací předchozí nastavení.
vga_ext_set(VGA_EXT_CLEAR, int bitflags); – jako výše, ale s tím rozdílem že příznaky ruší.
vga_ext-set(VGA_EXT_RESET, int bitflags); – jako výše, ale nastaví příznaky na defaultní hodnotu.
Další volby
vga_ext_set(VGA_EXT_PAGE_OFFSET, int offset); – všechna následující volání vga_setpage(n) se chovají jako vga_setpage(n + offset). Je vrácena předchozí nastavená hodnota(0, pokud nebylo se stránkou nijak manipulováno).
vga_ext_set(VGA_EXT_FONTSIZE, int size); – nastaví velikost bufferu, který používají např. funkce vga_gettextfont a vga_puttextfont. Staré verze svgalib používají stanovenou velikost 8192.
Volání vga_ext_set(VGA_EXT_FONT_SIZE, 0) vrací velikost vnitřních bufferů svgalib. Jinak je vráceno předchozí nastavení.
To je pro dnešek vše. Protože se mi nikam nevešly ještě asi tři funkce pro zjištění informací o módech, povíme si o nich něco málo příště. A konečně si ukážeme pár „kreslících“ funkcí.