Hlavní navigace

SVGAlib: rozšiřující volby

Jakub Matys 3. 9. 2004

V dnešním dílu si probereme funkci pro nastavování dalších voleb.

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(un­signed 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_EX­T_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_EX­T_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_SCRE­ENCOPY,
  • ACCELFLAG_PUTIMAGE,
  • ACCELFLAG_DRAWLINE,
  • ACCELFLAG_SET­FGCOLOR,
  • ACCELFLAG_SET­BGCOLOR,
  • ACCELFLAG_SET­TRANSPARENCY,
  • ACCELFLAG_SET­RASTEROP,
  • ACCELFLAG_PUT­BITMAP,
  • ACCELFLAG_SCRE­ENCOPYBITMAP,
  • ACCELFLAG_DRAW­HLINELIST,
  • 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_EX­T_AVAILABLE, VGA_AVAIL_ROP­MODES); – vrací integer s i-tým bitem nastaveným, pokud je i platným mode parametrem pro vga_accel(ACCEL_SET­RASTEROP, 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_EX­T_AVAILABLE, VGA_AVAIL_TRAN­SMODES); – vrací integer s i-tým bitem nastaveným, pokud je i platným mode parametrem pro vga_accel(ACCEL_SET­TRANSPARENCY, 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_EX­T_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_EX­T_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_EX­T_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_EX­T_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_EX­T_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í.

Našli jste v článku chybu?

3. 9. 2004 14:59

Johanka (neregistrovaný)

Ne (a i kdyby, autor tohoto serialu se ji vskutku ani neblizi :)), nicmene kazdy autor si muze sam rozvrhnout, jak velke chce jednotlive dily zhruba mit (v rozumnych mezich), aby to tyden co tyden stihal a dily byly pokud mozno tematicky ucelene.

3. 9. 2004 12:58

hkmaly (neregistrovaný)

Clanek na rootu ma maximalni delku ?

Vitalia.cz: Vláknina: Rozpustná, nebo nerozpustná?

Vláknina: Rozpustná, nebo nerozpustná?

Lupa.cz: E-shopy: jen sleva už nestačí

E-shopy: jen sleva už nestačí

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

Přehledná titulka, průvodci, responzivita

Vitalia.cz: I církev dnes vyrábí potraviny

I církev dnes vyrábí potraviny

Vitalia.cz: Jak koupit Mikuláše a nenaletět

Jak koupit Mikuláše a nenaletět

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

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

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

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

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

1. den EET? Problémy s pokladnami

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

DigiZone.cz: Další dva kanály nabídnou HbbTV

Další dva kanály nabídnou HbbTV