Amiga Dünyası sayı 18, sayfa 36

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 36

Burada da 'deneme' ismi altında yeni bir dosya açıyoruz. Open() içerisindeki MODE_NEWFILE macrosu, bize açılacak olan file'ın yeni bir file olduğunu belirtiyor. Tabii ki bu, Open() fonksiyonunun mod parametresi oluyor. Eğer eski bir file üzerinde işlem yapacaksak, MODE_OLDFILE macrosunu kullanmalıyız.

Daha sonra, aynı şekilde dosyanın açılıp açılmadığını kontrol ederek eğer açılmadıysa programdan çıkıyoruz.

Write(file,"0123456789",10); satırında ise, 10 karakterlik bir diziyi "deneme' dosyasına yazıyor ve;

Close(file); CloseLibrary(DosBase); ile dosyayı ve dos.library'yi kapıyoruz. Diğer Read() ve Seek() fonksiyonlarını da aynı şekilde bu program içerisinde kullanabilirsiniz.

Örnek programımız ve input/output işlemleri burada sona eriyor. Böylece Amiga'da kullanabileceğimiz bütün dosyalama işlemlerini de öğrenmiş bulunuyoruz.

Artık Amiga'da grafik işlemlerine gire- biliriz. Bu ay ilk olarak Amiga'da Screen (ekran) açılımını öğreneceğiz. Şimdi ör- nek programımızı vererek konuya girelim; #include <stdio.h> ümclude #graphics/gfx.h> ffînclude #intuition/intuition.h>

sturuct GfxBase *GfxBase; sturuct IntuitionBase *IntuitionBase;

sturuct Screen *scr; sturuct RastPort *rp;

sturuct NevvScreen nw={ 0.0.320,200,4,0,1 ,NULL, CUSTOMSC- REEN,NULL,NULL,NULL,NULL };

main()

IntuitionBase= OpenLibrary ("intuition.- library" ,0); ıf(IntuitionBase==NULL) {

printf("intuitionbase error!\n"); return(l); I

GfxBase = OpenLibrary ("graphics.lib- rary", 0); if(GfxBase==NULL) {

printf("gfxbase error!\n"); CloseLibrary(IntuitionBase); return(l); I

scr=OpenS creen(&nw); if(scr==NULL) {

printf("screen error!\n"); CloseLibrary(GfxBase);

CloseLibrary(IntuitionBase); return(l); ' }

rp=&(scr->RastPort);

Move(rp,100,100); Text(rp,"Amiga Dünyası", 13);

Delay(lOO);

CloseScreen(scr); CloseLibrary(GfxBase); CloseLibrary(IntuitionBase); return(O);

} Buradaki örneğimizle, Amiga'da bir screen açıyoruz ve Text() grafik komutu sayesinde de 'Amiga Dünyası' yazı dizisini, Move() komutu ile ekranın 100'e 100'lük koordinatına yerleştiriyoruz. Programımızın yaptığı iş kısaca böyle. Bu ekranı açtıktan sonra, siz de ekranınızı istediğiniz gibi kullanabilirsiniz. Şimdi programımızı daha derinlemesine inceleyelim:

#include <stdio.h> #include <graphics/gfx.h> #include <intuition/intuition.h> ile grafik ve intuition için gerekli olan yapılar ve macrolar tanımlanarak program derlenmeye hazırlanıyor. Daha sonra, struct GfxBase *GfxBase; struct IntuitionBase *IntuitionBase; satırları ile GfxBase ve IntuitionBase sistem yapıları bir pointer olarak tanımlanıyor. Burada dikkat edilecek husus; GfxBase ve IntuitionBase yapıları pointer olarak tanımlanırken, farklı bir isim kullanılmaması. Aksi takdirde derleyici grafik ve intuition kullanan rutinleri ana programa bağlarken (link sırasında), hata gösterecektir. Bu pointerler sistemin standart yapılarıdır ve değiştirilemezler.

Bir sonraki satırlarda ise; struct Screen *scr; struct RastPort *rp; bulunmaktadır, scr, bizim ekran açıldıktan sonra kullanacağımız, ekranla ilgili bilgileri saklayan yapı değişkenimizdir. Bu değişken vasıtasıyla ekranın hangi hafıza bloğunda bulunduğunu, mouse pozisyonunu ve buna benzer birçok bilgiyi kontrol edebiliriz. Daha sonra, struct NewScreen nw={0,0,320,200,4,0,1,NULL,CUSTOMSCREEN,NULL,NULL,NULL,NULL}; satırları bulunmaktadır. NewScreen, bizim yeni ekranımızın yapı değişkenidir ve bu da Amiga sisteminin standart yapılarındandır. Biz bu yapı yardımıyla ekran özelliklerimizi sisteme bildiririz ve ekranımızı açarız. Buradaki 'nw' değişkeni de, bu yapı özelliğinde tanımlanarak ilk değerleri alır. İlk değerlerimiz sırasıyla; x başlangıç (LeftEdge), y başlangıç (TopEdge), genişlik (Width), uzunluk (Height), bitplane sayısı (Depth), kalem rengi (DetailPen), kağıt rengi (BlockPen), ekran görünümü (ViewMode), ekran tipi (Type), ekranın kullanacağı font ismi (TextAttr), ekran ismi (DefaultTitle), ekranda kullanılacak olan kutular (Gadgets) ve ekranın plane düzeni (bitmap) dir. Bu yapı da, gfx.h içinde aşağıdaki gibi tanımlanmaktadır. struct NewScreen

{ SHORTLeftEdge,TopEdge,Widlraieight, Depth; UBYTE DetailPen, BlockPen; USHORT VievvModes; USHORTType; struct TextAttr *Font; UBYTE *DefaultTitle; struct Gadget *Gadgets; struct BitMap *CustomBitMap;

};

Bir sonraki satırlarda ise, ana programa başlanır. GfxBase ve IntuitionBase library'leri açılarak, eğer bir hata yoksa;

scr=OpenScreen(&nw); satırına gelinir. 'nw' bizim ekranla ilgili bilgilerin saklandığı yapımızdır. OpenScreen() fonksiyonu ile bu ekran açılır ve 'scr' değişkenine, ekranla ilgili bilgilerin saklandığı yapı adresi aktarılır. Eğer ekranımız açılamazsa, NULL makrosuyla geri döner ve library'ler kapanarak programdan çıkılır. Ekran açıldıktan sonra ise, rp=&(scr->RastPort); ile açılan ekranımızın hafıza yapısıyla ilgili bilgilerin saklandığı RastPort değişkeninin adresi, 'rp' değişkenine aktarılır. Ve daha sonra,

Move(rp,100,100); Text(rp, "Amiga Dünyası", 13); ile logomuz yazılır. Delay() ile bir süre bekledikten sonra, açılan ekranımız ve library'ler kapanarak, programdan hatasız olarak çıktığımızı belirten;

return(0); satırı ile programımızdan çıkarız.

Programımızı bir kez daha inceledikten ve yazılımını da kavradıktan sonra artık deneyebilirsiniz. Derleme işlemleri ise kısaca (Aztec C V3.6a için!):

cc +l prog.c -o prog.o -lc32 şeklindedir. Editör yardımıyla programımızı yazın ve siz de üzerinde oynayın.

Şimdilik bu kadar. Gelecek ay yeni örneklerle buluşmak üzere hepinize iyi çalışmalar dilerim.

Klavyeyle gezinmek için ← ve → tuşları.