Amiga Dünyası sayı 23, sayfa 13

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 13

Hepinize iyi günler! Bu ayki yazımızda, diğer sayfalarda görmüş olduğunuz gibi, uzun bir (diğerlerine göre) örnek C programıyla karşı karşıyayız. Programımız, geçen sayıda vermiş olduğum örneklerin yeni bir versiyonu. Hatırlayacağınız gibi bu örnekler, bir menü oluşturarak disketteki programlarımızı kullanmamızı sağlıyordu. Bu ay da, benzer şekilde çalışan bir örnek geliştirmeyi uygun gördüm. Fakat yeni örneğimizin aynı zamanda da bazı yeni özellikleri bulunuyor.

Programımız karışık görülebilir. Fakat sakın siz de buna aldanıp yazmaktan veya incelemekten vazgeçmeyin. Çünkü böyle programları yazabilmeniz için, öncelikle yazılanları anlayabilmeniz gerekiyor. Programı yazarken elimden geldiğince alt rutinlere bölmeye çalıştım. Böylece her rutini siz de kendi programlarınızda kullanabilir ve daha rahat anlayabilirsiniz.

Yeni bir programı denerken, kesinlikle ilk bakışta satır satır incelemeyin. Listeye bakarken, rutinleri bloklar halinde görmeye ve ayırmaya çalışın. Daha sonra her bloğun ne işe yaradığını öğrenin. Böyle incelediğiniz zaman satırlar karışık gelmez ve programı anlamanız daha kolay olur.

Programda ilk olarak incelenmesi gereken blok, 'main()' bloğudur. Blok içerisinde yapılanlara dikkat edin. Daha sonra kullanılan değişkenlerin tipini, local veya global olduğunu ve ne amaçla kullanıldığını öğrenin. Altrutinleri bulun ve hangi parametrelerle kullanıldığını görün. Bundan sonra programı satır seviyesinde inceleyebilirsiniz.

Bu kadar tavsiyeden sonra, şimdi programımızın kullanılmasına bir göz atalım. Programımız compile edilip çalıştırıldıktan sonra, bir parametre istemektedir. Bu parametre, disketteki programların listesini içeren bir dosyadır. Bu dosyada, menü ismi, programın menüdeki ve disketteki ismi bir kurala göre herhangi bir text editör (en iyisi CED) ile yazılır. Programımız bu dosyadaki listeyi hafızasındaki değişkenlere atayarak saklar. Daha sonra bu liste kullanıcının seçebilmesi için ekrana sıralanır ve mouse ile kontrol edilerek seçilir. Seçilen program disketten yüklenerek çalıştırılır ve bu arada bizim programımız da kendini hafızadan siler. Programımızın yapmış olduğu iş, kısaca bu kadar. Ben bu programı yazarken, daha önce görmüş olduğum 'Selector' adındaki bir utility programından esinlendim. Bu örneği hazırlama nedenlerimin başında, sizlerin de benzer şekilde utility programları yazabileceğinizi göstermektir.

Şimdi programımızın listesine bir göz atalım. Bu arada programımızın adını 'MenuDesign' olarak belirledim. İsterseniz siz de yeni isimler koyabilirsiniz. Ne de olsa programımız bir Public Domain !...

/*...............................................................................*/ /* Programming and Coding by Cenker OZKURT */ /*...............................................................................*/ /*................................................*/ /* include Dosyalari */ /*................................................*/ #include <exec/types.h> #include <exec/memory.h>

#include <graphics/gfxbase.h> #include<intuition/intuitionbase.h> #include <libraries/dos.h>

/*...............................................*/ /* Library yapi değişkenleri */ /* ..............................................*/ struct IntuitionBase *IntuitionBase; struct GfxBase *GfxBase; struct DosBase *DosBase;

struct RastPort *rp; struct Window *window;

/*…………………………………………………………*/ /* Program içerisinde kullandigimiz Global değişkenler */ /*…………………………………………………………*/ char title[80]; charview[30][20]; chardisk[30][30]; char *name[]={ " ",0 }; char *list; int no=0; int fin;

/*……………….……………*/ /* Ana program satirlari */ /*……………………………*/ main(argcargv) int argc; char *argv[];

{ int a; /* local değişken */ if(argc=-l) /* menu listesi kontrol ediliyor */

printf( "Usage : menudesign [list]\n "); return(1); } /*………………….. */ /* library'ler aciliyor */ /*……………………*/

IntuitionBase=OpenLibrary("intuition. library ",0); GfxBase=OpenLibrary("graphics.library",0); DosBase=OpenLibrary("dos.library",0);

/*………………………………………………*/ /* window ve rp değişkenleri belirleniyor */ /* bu değişkenler belirlenmeden */ /* window'u kullanmamız mumkun değil */ /*………………………………………………*/ window=IntuitionBase->ActiveWindow; rp=window->RPort;

SetDrMd(rp,JAMl);

/*……………………………………………..*/ /* Bu satirlardan itibaren kendi hazirladigim */ /* rutinler cagriliyor */ /*……………………………………………..*/ clear(); /* değişkenleri temizler */ load(argv[1]); /* menu liste dosyasini disketten yükler */ scr_clear(); /*window'u siler.-Is32 kütüphanesinde bulunur */ draw_box(); /* window'a kutulari çizer */ search(); /* listedeki isimleri değişkenlere tasir */ menudesign(); /* programın ismini ekrana yazar */ flood(); /* programların isimlerini kutulara yazar */ a=mouse(); /* mouse ile program seçimini bekler */ if(a==0) { /* eger secilmezse cikar */ quit(); /* program cikisi */ scr_clear(); exit(0); }

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