THESE
PAGES ARE FREE OF
JAVA
JAVASCRIPT
FRAMES
STORED ON A LINUX SERVER, AND RUNNING SPACEHAWKS' OWN LINUX BASED VOTING
AND MESSAGE BOARD CGI.
NO MICROSOFT RELATED PROGRAMS WERE USED TO CREATE THIS SITE.
|
|
|
|
|
SPACEHAWKS
WORLDNEWS
ISSUE 17 |
|
Rasztercsík
rendszerbarát módon
|
Avagy:
Relative
primitív rendszerbarát hardverbuzulás.
Hozzávalók:
OS3.0+, AGA. És esetünkben C fordító. (Ha belegondol(t)ok, tök fölösleges
ehhez AGA, de Emeric^SH-nak írtam ezt a cucát, és neki asszem van AGÁja. (Van.-Emeric
SH) Ha OCS/ECS kompatibilissé szeretnéd tenni, a képernyőnyitásnál 8 repülőgépes
helyett mondjuk 2 repülőgépes képet nyiss(ál). Asszem 3.0 nem is kell, de
én a stuffot csak ezen próbáltam.)
A feladat:
Csináljunk
kopper csíkokat a képernyőre. Eddig elég egyszerű, hiszen minden valamirevaló
Amiga kóder azzal kezdi pályafutását, hogy egy kopperlistát legyárt magának.
(Ezt az Emeric^SH mondta.) (Jó tudni, hogy ilyeneket mondok. Ennek ellenére
van benne valami...-Emeric SH) Ebbe pedig alapból be lehet rakni ilyeneket
minden további nélkül, sz'al nem nagy cucc. Kissé érdekesebb a mi esetünk,
mikoris ugyanezt egy rendszerbarátságos környezetben valósítjuk meg.
Ehhez szükségünk
lészen a graphics.doc és az intuisön.doc AutoDocs fájlokra.
Némi keresgélés
után rálelünk az
MrgCop(),
MakeVPort() grafixos és a
RethinkDisplay(), MakeScreen() intuisönös rutinokra.
(Van még
intuition.library/RemakeDisplay() és graphics.library/LoadView(), de ezek
minket most nem érdekelnek. Tulajdonképpen a grafixos MrgCop() és MakeVPort()
sem, ezeket csak azért írtam ide, mert értelmezésem szerint az általunk is
használni kívánt RethinkDisplay(), MakeScreen() ezek intuition alatti megfelelői).
Ezek a cuccok
kellenek majd a kopper listánk próbaüzemének megkezdéséhez. Meg a VideoControl().
Ez ahhoz kell, hogy a júzer kopperlistát levágja grafix a következő ViewPort-nál,
illetve ennek intuitionos megfejelőjénél, a következő Screennél.
De előbb
még a kopper listánkat is le kell ám gyártani. Erre gfx alatt x darab függvény
meg makró áll rendelkezésünkre. Pl.
CINIT(c,n)
CWAIT(c,x,y)
CMOVE(c,a,b)
CEND(c)
Ja, ezek
ám a graphics/gfxmacros.h-ban vannak! Ne felejtsük majd el beinklúdozni ezt
is. A CINIT() csöppnyire kilóg a sorból, mivel nem igazi kopper utasítást
pakol leendő a listánkba, hanem inicializálja azt. (Mivel a gfx-es UCopperListInit()
függvény kissé bugos, egy strucc UCopList-et nekünk kell lerohanni, NULL-ra
az AutoDocs szerint elszáll. De azért lehet próbálkozni. Ja, az n a tárolandó
utasítások számával arányos. Ld. AutoDocs. A CWAIT és CMOVE a megfelelő copper
utasítások megfelelői. A CWAIT-nál arra kell ügyelni, hogy az x és y képernyő
koordinátát jelent, azaz nekünk nem kell (és nem is lehet) foglalkoznunk azzal,
hogy a képernyő melyik szkenlányon kezdődik. A CMOVE C-s változatánál annyi
a keverés, hogy nem a regiszter címét, hanem ténylegesen a regisztert kell
átadni a makrónak... (Ha ez így sületlenségnek hangzik, lássátok meg a forrást
és a gfxmacros.h-t.) A CEND tulajdonképpen egy CWAIT 10000-es y koordinátával.
Poénkodnak is ezen rendesen kommodorék a grafix doksiban.
Namármost
ahhoz, hogy az itt leírt dolgokat kipróbálhassuk, már csak egy képernyőre
van szükségünk. Én ezt a (v36+) OpenScreenTags()-al nyitottam meg, és nyitottam
rajt' egy ablakot is a (v36+) OpenWindowTags()-al, így a tesztelős programocska
végére még egy várakozó ciklus is került.
Ha jó kis
AUTOOPENLIB-es C fordítónk van (pl. SAS/C, Maxon/HiSoft C, StormC), mással
nem is kell vacakolni, egyébként a libek megnyitása is ránk hárul.
A program
főbb részei:
1. kép és
ablaknyitás
2. copper list legyártása
2a. copper list foglalása,
inicializálása
(A _foglalás_ FONTOS
a MEMF_PUBLIC flag miatt. Ha csak beraknád statikus vagy autó strúraként
a programba, a jövőbeli/reménybeli memóriavédett AmigaOS alatt szépen
elszáll szegmenshibával...). (Tartok tôle arra még várni kell... Bár persze
mazo egyedek már most is felrakhatnak memódiavédô progikat. (ld. Aminet)
Eccerűen élvezet, mennyi rossz progi van.-Emeric SH)
2b. copper list feltöltése
2c. copper list berakása a Screen ViewPortjára, kopper lista vágás engedélyezése,
majd a rendszer kopperlisták újragyártása (csak a mi képernyőnkét gyártjuk
le újra, nem kell az egészet RemakeDisplay()-el).
3. némi velkám szöveg
a képernyőre
4. várakozás kilépésre
5. ablak és kép bezárása
(Ha jól olvastam az
AutoDocs-ot, a lefoglalt struct UCopList struktúránkat a graphics majd felszabadítja.
Na ezért sem célszerű a statikus változat.)
Sok sikert!
Att1s^exSH
|