int21h

AA-lib

ASCII:
        The control code for all beginning programmers and those who would
        become computer literate.  Etymologically, the term has come down as
        a contraction of the often-repeated phrase "ascii and you shall
        receive."
        -- Robb Russon

What the hell?

AA-lib byl napsán Čechem a skvělým programátorem Janem Hubičkou. (Jeho další projekty např. XaoS, Xkoules)
Autor o této knihovně píše jako o plnohodnotné náhradě grafických API knihoven. No, o tom by se dalo polemizovat. Hlavní význam má hlavně pro milovníky ASCII-artu.
Jako knihovna pro C je portovatelná na prokticky všechny systémy a platformy na trhu.
Jinak například v Linuxu podporuje jak X, frambuffer i svga a to bez speciální kompilace.

První projekt v tomto jazyce byl napsán právě Hubičkou a bylo to originální demo s názvem BB.
V tom se ukazuje síla této knihovny. Obsahovalo plasmu, oheň, sníh, 3D objekty, zooming Mandelbrota,(patrně nejrychlejší na světě) a mnoho dalšího.

V tomto článku vás seznámím s ovládáním této knihovny

Zpracování

AA-lib je psán pro čisté C, takže není objektové.
Poskytuje základní funkce jako putpixel, nastavování palety atd.
Má vlastní handlery na myš a klávesnici.
Na všechno se dá aplikovat i autoinicializace, která si sama najde ovládání vaší obrazovky a vstupních zařízení.
Pracuje na principu flushingu. To znamená, že má virtualní obrazovku, kterou střídavě zobrazuje.
Jinak všechny funkce pro práci s pixely se zapisují do bufferu, který se uloží až po renderingu.

Takže základní kostra je
o Inicializovat obrazovku
o Nastavit paletu
o Grafika
o Rendrování
o Textové výstupy do obrazovky
o Prohození obrazovek (flush)


Grafika

Tohle je to nejzajímavější:
Každý znak obsahuje 2 pixely a reaguje na strukturu pixelů v něm a jeho sousedech.
** - vykreslí znak '-'

*.
.* - Vykreslí znak \
Atd.

Myslím, že se dá s touhle knihovnou pracovat na dost vysoké úrovni.
Jediný problém, na který jsem narazil je, že pokud se zapisuje za obrazovku, tak to spadne na Segmentation fault.
Program se sám ukončí přes SIG11. Ale možná to jde ošetřit (já s c terpve začínám)


Pokud do kódu přidáte tyto řádky:
if (!aa_parseoptions(NULL,NULL,&argc,argv)||argc!=1) {
        printf ("%s", aa_help);
        exit (1);
}
scr=aa_autoinit(&aa_defparams);   
bude program umět zpracovávat velkou nabídku přpínačů, jako třeba konfigurace zobrazení, výběr metody ditheringu, upřesnění hardwaru a podobně.

Cíle a úspěchy

Port all important software (like Doom, Second Reality, X windows etc..) on AA-lib.
To byl záměr. A co se podařilo?
O Second Reality v AA bohužel nic nevím, ale známé se například stal Dumb, což je port legendárního Dooma, dokonce i XWindow existuje, stejně tak Quake. AA pluginy mají i přehrávače videí Mplayer nebo Xine
Pro samotný AA-projekt byl vyvinut i prohlížeč obrázků PPM Aview nebo FLI přehrávač Flip.
Po nainstalování knihovny si můžete prohlédnout i demonstrační programy aatest, aainfo nebo aafire

Připravil jsem i pár příkladů, tak se na ně podívejte a uvidíte jestli vás to chytne jako mě, nebo to přenecháte jiným bláznům.
Je tam několik problémů, se kterými si nevím rady. Hlavně při ukončování a změně velikosti okna mi to pořád padá. Kdybyste někdo věděl, co s tím je, pošlete mi to prosím na mail. Díky.


]plasma.c[ - ]screenshoot[
]snih.c[

Kompilace
Přes standardní gcc asi takhle:
gcc source.c -Wall -laa -o output
A samozřejmě v kódu #include

        And remember...
          dT8  8Tb
         dT 8  8 Tb
        dT  8  8  Tb
     <PROJECT><PROJECT>
      dT    8  8    Tb
     dT     8  8     Tb
      means Ascii-art!  
2006-11-30 | BOby
Reklamy:
Snížení a omezení chuti k jídlu pro hubnutí