Amiga Dünyası sayı 24, sayfa 22

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 22

clear(); load(argv[1]); scr_clear(); draw_box(); search(); menu(); flood(); a=mouse(); İf(a==0) {

quit(); scr_c!ear(); exit(0); } quit(); scr_clear(); printf ("Loading %s...\n",view[a]); strcpy(name[01,disk[a]); execv(name[0],name);

şeklindedir. Şimdi her bir rutini derinlemesine inceleyebiliriz.

clear(), 'view' ve 'disk' değişkenlerini boş karakterlerle dolduruyor ve temizliyoruz. Bunu yaparken strcpy() fonksiyonu işimizi rahatlıkla görüyor, 'i' değişkenini de register değişken olarak kullanarak işlemimizin hızını arttırıyoruz.

clear() register int i;

for(i=0;i<30;i++) {

strcpy(view[i]," "); strcpy(disk[i]," "); } } Sonraki fonksiyon olan load(argv[l]), verilen parametreyi yük- lemek için kullanılıyor. Buradaki argv[l] parametresini menu lis- tesinin disketteki ismini saklıyor.

load(a) char a[]; { struct FileHandle *file;

file=Open(a,MODE_OLDFILE); if(fiİe==NULL) {

printf("%s not found..!\n",a); quit(); exit(1);

satırlarında 'file' yapı değişkeni dosya pointer göstergesi olarak tanımlanıyor, 'file' FileHandle tipinde bir yapıyı oluşturuyor. Bu yapı ile dosya işlemleri yürütülüyor. Sonraki satırda dosya açılarak file yapı değişkeni kontrol ediliyor. Eğer dosya açılamadıysa bir mesajla program sona eriyor. Bu nedenle yüklerken MenuDesign isminin yanındaki menü liste ismini doğru vermemiz gerekiyor.

list=AllocMem(1000,MEMF_CHIPJMEMF_CLEAR); if(list==NULL) {

printf ("Can't Allocate Memory.. !\n"); quit(); exit(1); } fin=Read(file,list,1000); Close(file); return(0); }

Yukarıdaki satırlarda, menü listesinin bulunduğu hafıza değişkeni olan 'list' değişkenine, AllocMem ile 1000 byte'lık bir yer ayrılarak bu bölgenin ilk adresi saklanıyor. Biz diğer rutinlerde bu adresten yararlanacağız.

Sonraki satırlarda hafızanın yeterliliğini kontrol ederek menü listesini yüklemeye başlıyoruz. Read() fonksiyonu yükleme işlemini gerçekleştiriyor ve 'fin' değişkenine, yüklenen byte sayısını veriyor. Bu satırlar sonunda menü listesinin bulunduğu hafıza bölgesinin başlangıcını 'list' uzunluğunu ve sonunu 'fin' değişkeni ile saptamış oluyoruz.

draw_box() { register int x,y;

for(x=0;x<3;x++) {

for(y=0;y<10;y++){

box(70+x*170,25+y*16,1); } } } draw_box() rutini, ekranımızı kutularla dolduruyor. Buradaki box() rutini de bizim hazırlamış olduğumuz bir kutu çizme rutini.

box(x,y,c) int c: register int x,y; { SetAPen(rp,c); Move(rp,x,y); Draw(rp,x+160,y); Draw(rp,x+160,y+11); Draw(rp,x,y+11); Draw(rp,x,y); }

Bu rutinde x ve y değişkenleri kutunun çizileceği koordinatı saptıyor. c değişkeni ise kutu rengini belirtiyor. Bu renk değişkeni sırasıyla istediğimiz renkte kutuyu çizebiliyoruz. Böylece kullanıcı mouse pozisyonundaki programı yüklemesi gerektiğini rahatlıkla anlayabiliyor.

Search() rutini, en önemli rutini oluşturuyor. Burada menü listesinin ekrandaki ve disketteki isimleri, 'list' adresinden 'list+fin' adresine kadar aranarak kaydediliyor. Bu işlemler şu kademelerden geçiyor.

İlk olarak 0'dan 'fin'e kadar bir 'i' döngüsü oluşturuluyor. Bu bizim arayacağımız hafıza bölgesinin uzunluğunu belirtiyor. Sonraki satırda, listede 'menu=' ifadesinin bulunup bulunmadığı, strncmp() fonksiyonu ile karşılaştırarak öğreniliyor. Dikkat ettiyseniz 'list+i'den işleme başlıyoruz. strncmp()'deki 5 sayısı karşılaştırılan karakter sayısını belirtiyor. Eğer sonuç 0 ise bu parametrelerin içeriklerinin eşit olduğu anlamına gelmektedir. Böyle bir durumda, 'menu='den sonraki karakterler satır sonuna kadar kontrol edilerek 'title' değişkenine aktarılıyor. Satır sonu return ile bittiğine göre, decimal olarak 10 değerini arıyoruz.

Bir sonraki kademe ise '-' ve '+' karakterlerinden sonraki cümleleri 'view' ve 'disk' değişkenlerine aktarmakla geçiyor. Bu işlemler menü isminin bulunduğu gibi yapılıyor. Her eşitleme sonunda değişkenlerin uzunluğunu belirtmek için son karaktere '\0', satır sonu karakteri koyduğumuza dikkat edin. Bu, dizinin uzunluğunu bulmamızı sağlıyor.

search () { int a; register int i.j.k; for(i=0;i<=fin;i++) {

a=stmcmp(list+i,,,menu=",5); if(a==0) {

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