Bu sayfadaki yazılar
Sayfanın metni
Sayfa 15
Close(file); return(0);
}
/*...........................................*/ /* window'a kutular çiziliyor */ /*...........................................*/ 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,l); } } } /* --------------------- */ .
/* kutu çizme rutini */ /*--------------------- */ box(x,y,c) intc; 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+ll); Draw(rp,x,y); } /*---------------------------------------------- */ /* mouse ile program secimi bekleniyor */ /*----------------------------------------------*/ mouse()
{ int ret; int q,w,p=0; int a,b,c,d; register int x,y; register int i,j; UBYTE*m=0xbfe001;
while(l) |
x=window->GZZMouseX; y=window->GZZMouse Y+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+ll;
if(x>a&&x<c&&y>b&&y<d&&(q!=allw!=b)) {
if(p== l) box(q,w, 1); else p= 1; box(a,b,2); q=a; w=b; } if(!(x>70&&x<570&&y>25&&y<185)){
if(p==l) | box(q,w,l); q=0; w=0; p=0; ) ) if(p==0&&!(*m&64)) return(O); ret=i*10+j+l if(ret<=no&&x>a&&x<c&&y>b&&y<d&&!(*m&64)) return(ret); } } } }
Programımızın daha anlaşılır olması için /* */ satırları içerisinde açıklamaları da yanlarına yazdım. Böylece hangi rutin ne işe yarar anlamak daha kolay olacaktır. Bu arada disketteki listeyi hangi kurala göre vermemiz gerektiğini bir örnekle açıklayayım.- Listemiz aşağıda olduğu gibi girilmelidir.
menu=Ceko Utility -XcopyV6.3+xcopyv6.3 -XoperV 1.3+xoperv 1.3 -TurboImploderV4.0+TurboImploder4.0 -QBToolsV1.3+qbtoolsl.3 -Sentific Calculator+scal -Programm Calculator+pcal -PowerWindows+powerwindows -PowerPackerV4.0a+powerpacker4.0a -MultiRipperV2.0a+multiripperv2.0a -LHarc+lharc -FixDiskV1.2+fixdiskl.2 -DiskMasterV 1.4+dm 1.4 -DiskMonPro+diskmonpro -DiskCraft+diskcraft -Amas+amas -Ced+ced
Böyle ayrı bir dosyada listenin girilmesinin en büyük faydası, sizin de tahmin ettiğiniz gibi yeni liste girerken her seferinde C program listesini değiştirmemiz gerekmez. Yalnızca bu dosyadaki bilgileri yeniden düzenleyip, disketteki ismiyle çağırmamız yeterli olmaktadır.
Yukarıdaki listemizin ismi 'menulist' olsun. Bu listeyi df0: içerisindeki 's' directory'sine attığımızı farzedelim. Bu durumda programı çalıştırmak için;
menudesign df0:s/menulist yazmamız gerekmektedir. Dosyanın bulunduğu alt directory ismini ve dosya ismini doğru yazmayı unutmayın.
Bu arada yukarıdaki listeyi bir inceleyelim. Listede görüldüğü gibi -çeşitli utility isimleri girilmiş. Fakat burada '-' den ve '+' sonra gelen isimler farklı. Bunun sebebi; '-' den sonra gelen isimlerin ekrandaki, '+' dan sonra gelen isimlerin ise disketteki isimleri belirtmesinden doğuyor. Bu nedenle özellikle '+' dan sonra gelen isimlerin, diskette aynı isim altında bulunması şart. En baştaki 'menu=' ifadesinden sonraki isim ise listenin menü başlığını oluşturuyor.
Evet, sonuç olarak liste girilmesi için başka bir kurala gerek yok. Ancak şunu da belirtmem gerekir ki, kural dışı bir yazılım sonucu olacaklardan sorumlu değilim!.
Programın hazırlanması da aşağıda olduğu gibidir;
Compile işlemi kısaca; CC +L -s menudesign.c Link işlemi ise ; LN menudesign.o -ls32 -lc32
Bu ayki yazımızın da sonuna gelmiş bulunuyoruz. Programımızın tam açıklamasını yerimiz kalmadığı için gelecek ay yayınlayacağım. Şimdilik hepinize bol 'Bug'sız günler dilerim!...
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 14
quit(); scr_clear(); printf("Loading %s...\n",view[a]); strcpy(name[0],disk[a]); /*name yüklenecek olan ismi saklar */ execv(name[0],name); /* diskten yükleyerek calistirir */
}
/*…………………..……*/ /* Cikis rutini */ /*…………………..*/ quit()
{ if(list) FreeMem(list,1000); CloseLibrary(IntuitionBase); CloseLibrary(GfxBase); CloseLibrary(DosBase);
}
/*...........................*/ /* program in ismi */ /*…………………. */ menudesign()
{ char a[50];
strcpy(a,"MenuDesign (c) 1992 Programming by Cenker OZ- KURT");
print(320-4*(strlen(a)), 192,a,strlen(a)); print(320-4*(strlen(title)),22,title,strlen(title));
I
/*……………………………..*/ /* değişkenler temizleniyor */ /*………………………….*/ Clear()
( register int i;
for(i=0;i<30;i++j j strcpy(view[i]," "); strcpy(disk[i]," "); } }
/*………………………………………….*/ /* program isimleri yaziliyor */ ./*……………………………*/
flood()
{ register int x,y,i;
x=0; y=0; for(i=l;i<=no;i++) {
print(73+x*170,34+y*16,view[i],strlen(view[i])); y++; if(y==10) { y=0; x++; } } )
/*……………………………………………………………. */ /*yuklenen dosyadan isimler araniyor, değişkenlere ataniyor */ /*…………………………………………………………….*/
search()
{ int a; register int i,j,k;
for(i=0;i<=fin;i++) {
a=strncmp(list+i,"menu=",5); İf(a==0) { 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++; i++; j=i; while(*(list+i)!='+') i++;
for(k=0;k<i-j;k++) view[no][k]=(char)*(list+j+k); view[no][k]='0'; j=i+i;
while(*(list+i)!=10)i++; for(k=0;k<i-j;k++)disk[no][k]=(char)*(list+j+k); disk[no][k]='0'; } }
}
/*………………………………..*/ /* window'a yazma rutini */ /*………………………..*/ print(x.y,a,len) int x,y; char a[]; intlen;
{ SetAPen(rp,2); Move(rp,x,y); Text(rp,a,len); SetAPen(rp,l); Move(rp,x-l,y-l); Text(rp,a,len);
}
/*……………………………………………………………………*/ /* bir hafıza ayırarak, disketten listeyi buraya yükler */ /*……………………………………………………..*/ load(a) char af];
{ struct FileHandle *file;
fıle=Open(a,MODE_OLDFILE); if(file==NULL) {
printf("%s dosyası bulunamadı..!\n",a); quit(); exit(l); } list=AllocMem(1000,MEMF_CHIPIMEMF_CLEAR); if(list==NULL) {
printf("Hafıza yetersiz..!\n"); quit(); exit(1); } fın=Read(file,list,1000);