GLOBAL_LINKS
DOWNLOAD_AREA
NEWS_COLUMN
 
   
   
   


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.

VOYAGER
IBROWSE
AWEB
 
MSIE


 






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

 

 

 

 
(C) Copyright 1999 SpaceHawks

SNEWS16 SNEWS15 SNEWS14