Amiga Dünyası sayı 24, sayfa 23

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 23

i+=5;

while( *(list+i)!«10) i++; for(k=0;k<i-j;k++) title[k]=(char *)(list+j+k); title[k]='\0';

a=strncmp(list+i,"-",1); if(a==0) { no++;

while(*(list+i)!='+') i++; for(k=0;k<i-j;k++) view[no][k]=(char *)(list+j+k); view[no][k]='\0'; j=i+1; whiler(list+i)!=10)i++; for(k=0;k<i-j;k++) disk[no][k]=(char *)(list+j+k); disk[no][k]='\0'; } } } Search() rutininin ardından, artık 'view' ve 'disk' değişkenleri utility isimleriyle hazır bekliyor. Ayrıca 'title' değişkeni de menu ismimizi zaten saklıyordu. Artık menüyü yazmanın tam sırası. Bu işlemi menu() rutini ile gerçekleştirebiliriz.

menu() { char a[50]; strcpy(a,"MenuDesign (c) 1992 Programming by Cenker OZKURT"); print(320-4*(strlen(a)),192,a,strlen(a)); print(320-4*(strlen(title)),22,title,strlen(title));

Menü içerisinde kullandığımız print() fonksiyonu da, gölgeli yazı yazmamızı sağlıyor.

print(x,y,a,len) ıntx,y; char a[]; int len;

SetAPen(rp,2); Move(rp,x,y); Text(rp,a,len); SetAPen(rp,1); Move(rp,x-1,y-1); Text(rp,a,len); }

print() fonksiyonunun kullanımı oldukça kolay. x ve y, koordinatları; a, yazılacak değişkeni; len ise değişkenin uzunluğunu belirtiyor. Sonraki fonksiyon olan flood() ise 'view' değişkeninin içeriklerini daha önce çizilmiş olan kutuların içerisine yazıyor. Böylece diskette bulunan utility isimleri ekrana dökülmüş oluyor. Bu fonksiyon içerisinde de print() rutininin kullanıldığına dikkat edin.

flood() { register int x,y,ı; x=0; y=0; for(i=1 ;k=no;i++) {

print(73+x*170,34+y*16,view[i],strlen(view[i])); y++;if(y==10){y=0;x++;} } }

a=mouse() satırı ile, mouse ile seçilen utility ismi 'no' değişkenine atılarak belirleniyor.

mouse()

int ret; intq,w,p=0; int a.b.c.d; register int x,y; register int i.j; UBYTE *m=0xbfe001; while(1){

x=window->GZZMouseX; y=window->GZZMouseY+10; for(i=0;i<3;i++) { for(j=0;j<10;j++){ a=70+i*170; b=25+j*16; c=a+160; d-b+11;

if(x>a&&x<c&&y>b&&y<d&&(q!=a||w!=b)){

if(p==1) box(q,w,1); else p=1; box(a,b,2); q=a; w=b;

ıf(!(x>70&&x<570&&y>25&&y<185)) {

if(p==1) { box(q,w,1); q=0; w=0; p=0;}

if(p==0&&!(*m&64)) return(0); ret=i*10+j+1; if(ret<=no&&x>a&&x<c&&y>b&&y<d&&!(*m&64)) {

return (ret); } } } } } Rutin içerisinde mouse pozisyonunu almak için, x=window->GZZMouseX ve y=window->GZZMouseY kullanıyoruz. Bu satırlar sonunda mouse pozisyonu x ve y değişkenine aktarılmış oluyor. Bu değerleri almak için window yapı değişkenini kullandığımıza dikkat edin. Bu değişken içerisindeki diğer alt değişkenleri include dosyalarına bakarak incelemenizi tavsiye ederim.

Sonraki satırlarda mouse() fonksiyonu bir sonsuz while döngüsüne giriyor. Bu döngü içerisinde mouse oynatıldığı sürece kutuların renkleri değiştirilerek mouse pozisyonunun belirtmek istediği kutu kullanıcıya gösteriliyor. Bunları yaparken box() rutinin tekrar kullandığımıza dikkat edin.

Mouse tuşuna basıldığında, seçilen kutunun değeri mouse'un bulunduğu pozisyona göre hesaplanarak return ile 'a' değişkenine aktarılıyor. Artık yüklenmek istenen utility isminin indisi belirlendiğine göre sıra geldi yükleme işlemine.

İlk olarak 'a' değişkeninin değerinin sıfırdan farklı olup olmadığını kontrol ediyoruz. Bu bize seçimin doğru yapılıp yapılmadığını veriyor. Eğer yapılmadıysa program sona eriyor.

Seçim doğru yapıldığı takdirde, quit() ile açılan Library'ler ve hafızalar terk ediliyor.

quit() { if(list)FreeMem(list,1000); CloseLibrary(lntuitionBase); CloseLibrary (GfxBase); CloseLibrary(DosBase); }

sonraki işlemler ise ekranı temizlemek, yüklenecek olan programın ismini ekrana yazmak, name değişkenine program ismini taşımak ve yüklemek.

Programın açıklaması burada sona eriyor. Bu program ile Amiga C'de basit bir utility programının nasıl yapıldığını gördünüz.

Gelecek ay yeni örneklerle buluşmak üzere, hoşça kalın...

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