Amiga Dünyası sayı 22, sayfa 17

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 17

new_print(a,lin,col,max) chara(50);

int lin,col,max;

{

int i;

for(i=max;i>=0;i") {

scr_curs(lin,col); printf("%c\n",a[i]); scr_cursup(); scr_cinsert(); Delay(1); } printf("\n");

menu()

{

scr_clear(); strcpy(text," Utility Disk"); new_print(text,8,30,strlen(text)) strcpy(text,"Fl -> Utility 1"); new_print(text, 10,30,strlen(text))

strcpy(text,"F2 -> Utility 2"); new_print(text, 11,30,strlen(text))

strcpy(text,"F3 -> Utility 3"); new_print(text, 12,30,strlen(text))

strcpy(text,"F4 -> Utility 4"); new_print(text, 13,30,strlen(text))

strcpy(text,"F5 -> Utility 5"); new_print(text, 14,30,strlen(text))

strcpy(text,"F6 -> Utility 6"); new_print(text,15,30,strlen(text))

strcpy(text,"F10 -> Quit"); new_print(text, 16,29,strlen(text))

Programı yazdıktan sonra, Aztec V3.6a ile compile ederken:

CC +L prog.c

Link ederken:

LN prog.o -ls32 -lc32

yazmalıyız. -ls32 Screen fonksiyonlarının bulunduğu kütüphaneyi içeriyor. Şimdi programımızı incelemeye başlayabiliriz.

İlk satırlarda gerekli include dosyaları işleniyor. Sonraki satırlarda global olarak tanımlanan değişkenlerimiz var. Bunlar,

UBYTE*key=0xbfec01;

char*a[] = ("Utility 1",0}; char*b[]= {"Utility 2",0};

olarak tanımlandı, 'key' değişkenimizi pointer değişken olarak tanımlıyoruz ve bu sırada da adresini biz hex olarak 'bfec01' olarak veriyoruz. Bundan böyle '*key' bize bu adresin byte olarak değerini verecektir. Vermiş olduğumuz adres ise basmış olduğumuz herhangi bir tuşun hardware olarak değerini gösterir. Bu değerler ASCII standartında olmadığı için, herhangi bir tuşun değerini önceden bilmemiz gerekir. Programımızda '95' sayısı F1 tuşuna karşılık geliyor. Diğer tuşları ise aşağıda vermiş olduğum kısa program vasıtasıyla öğrenebilirsiniz.

#include <exec/types.h>

main()

{

UBYTE*key=0xbfec01;

while(1) {

printf("%d\n".*key); } }

Ctrl-C ile programdan çıkabilirsiniz. Ana programımızın diğer satırlarında a,b,..f'ye kadar disketten yükleyeceğimiz programların isimlerinin saklandığı değişkenleri tanımlıyoruz. Bu isimlerin disketteki isimler olmasına dikkat edin. Aksi takdirde disketinizdeki program icra edilmez.

char text[30]. bizim geçici buffer değişkenimizi belirtiyor. Bu değişken vasıtasıyla daha önce vermiş olduğum new_print() fonksiyonuna yazılacak olan dizi gönderiliyor.

Ana main() içerisinde program çalışmaya başlıyor. İlk olarak menu() rutinine sıçrayarak menü ekranımızı hazırlıyoruz. Burada ekrana gelen, yüklenecek olan program isimleri disketteki isimlerden farklı olabilir. Bu nedenle, mesela buraya bir de versiyon numarasını ekleyebilirsiniz.

Daha sonra while(1) ile sonsuz döngüye giriyor ve switch ile de *key değişkenini kontrol ederek tuş ayrımını yapıyoruz. Basılan tuşa göre de ekran temizleniyor, yüklenecek olan programın ismi yazılıyor ve disketteki program,

fexecv(a[0],a);

satırı ile çalışmaya başlıyor. Yüklenmiş olan utility programdan çıktıktan sonra da tekrar menü hazırlanıyor ve fonksiyon tuşlarından birine basılması için bekleniyor.

Programımızın genel açıklaması bu kadar. Bu programı istediğiniz gibi de düzenleyerek daha değişik menüler oluşturmanız oldukça kolay.

Evet, bu ayki program kargaşamız da burada sona eriyor. Gelecek ay yine Amiga C'de buluşmak üzere hepinize bol C Vitaminli günler dilerim...!

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