Bu sayfadaki yazılar
Sayfanın metni
Sayfa 21
AMIGA
CENKER ÖZKURT Evet Amiga'cılar, yazımız devam ediyor. Hatırlayacağınız gibi, geçen ay 'MenuDesign' adlı bir program hazırlamıştım. Şimdi bu programımızı biraz daha derinlemesine incelemeye başlayabiliriz. Açıklamalara başlamadan önce, vermiş olduğum örneği yazıp denediğinizi farz ediyorum. Eğer denemediyseniz bu açıklamaları anlamanız zor olabilir. Ayrıca programın ana mantığını da ancak programı kullanarak daha rahat anlayabilirsiniz. Evet, artık programımızın incelemesine geçebiliriz. #include <exec/types.h> #include <exec/memory.h> #include <graphics/gfxbase.h> #include <intuition/intuitionbase.h> #include <libraries/dos.h> Hatırlayacağınız gibi ilk satırlarda her zaman olduğu gibi #include satırları mevcut. Bu dosyalarda kullandığımız yapı değişkenleri ve tipleri tanımlanarak program sürüyor. Bu dosyalar bildiğiniz gibi 'include' kütüphanesinde bulunuyor. Eğer dosyalar bu kütüphane içerisinde bulunamazsa compile sırasında program hata verecektir. Bu nedenle gerek yazım sırasında gerekse de çalışma disketinizde bu dosyaların doğru yazıldığına ve bulunduğuna dikkat etmeniz gerekir.
struct IntuitionBase * Intuition Base; struct GfxBase *GfxBase; struct DosBase *DosBase;
struct RastPort *rp; struct ViewPort *vp; struct Window *window; Diğer satırlarda ise kullandığımız yapı değişkenlerini tanımlıyoruz. Burada mesela 'IntuitionBase' yapı değişkeni #include dosyaları içerisinden '#include <intuition/intuitionbase.h>' dosyası içerisinde tanımlanıyor. IntuitionBase yapı değişkenini incelemek isterseniz, bu dosyayı yükleyip inceleyebilirsiniz. Bunun yanında 'GfxBase', 'gfxbase.h' ve 'DosBase'
'dos.h' içerisinde tanımlanıyor.
Sonraki satırlarda ise kullanacağımız ekran özelliklerini taşıyan RastPort ve ViewPort, Window özelliklerini taşıyan window yapı değişkenleri bir pointer yapı olarak tanımlanıyor. Burada pointer olarak tanımlamamızın sebebi, daha önceki yazılarımda da belirttiğim gibi bu yapıların orijinal yapıları görüntülemesi amacıyla kullanılmasından doğuyor.
char title[80]; char view[30][20]; char disk[30][30]; char *name[]={" ",0}; int no=0; int fin;
char *list; Bundan sonraki değişkenlerimiz bize ait. Bu değişkenleri diğer rutinlerin de tanıyabilmesi için main dışında 'global değişken' olarak tanımladık. Değişkenlerin görevleri ise şöyle;
title -> Menu listesi içerisindeki 'menu=' ifadesinden bir sonraki satıra kadar olan cümleyi saklıyor. Burada 'menu=' ifadesinden sonraki cümle 'Amiga Dünyası Utility Disk' ise, 'title' değişkeninin her indisi bu cümleyi tutacak şekilde bir karakter saklıyor. Bu örneğe göre 'title' değişkenin içeriği de şöyle oluşuyor;
title[0]='A' title 1 ='m' title'2='i* title 3 ='g' title[4]=,a'
olarak devam eder. Dikkat ettiyseniz her indise bir karakter düşüyor. Buna göre 'title' dizisi en fazla 80 karakterlik bir diziyi taşıyabilir. Tabii ki bu sayıyı arttırmak elinizde. view -> Menu listesi içerisindeki '-' ifadesinden '+' ifadesine kadar olan cümleleri saklıyor. Tanıma göre; view[30][20];
30, saklayabileceği cümle sayısını, 20 ise cümlenin uzunluğunu belirtiyor, 'view' değişkeni, disketteki programların listesini görüntülemek amacıyla kullanılıyor.
disk -> Menu listesi içerisindeki '+' ifadesinden satır sonuna kadar olan cümleleri saklıyor. Burada gene 30, saklayabileceği cümle sayısını, diğer 30 ise uzunluğunu belirtiyor, 'disk' değişkeni disketteki programların asıl isimlerini saklamak için kullanılıyor.
name -> mouse ile seçilen programın disketteki ismini 'execv' komutunun kullanabileceği şekilde tutmak için kullanılıyor.
no -> Menu listesi içerisindeki Utility program isimlerinin sayısını saklıyor. Bu aynı zamanda disketteki programların sayısını da gösterir.
fin -> Disketten yüklenen menu listesinin file olarak uzunluğunu belirtiyor. Bu değişkene göre utility isimleri 'list' değişkeninden 'list+fin'e kadar olan bölgede aranıyor.
list -> Pointer, değişken olarak menu listesinin yüklendiği hafıza bölgesinin başlangıç adresini saklıyor. Bu değer AllocMem() fonksiyonundan alınıyor.
Programda kullandığımız ana değişkenler bu kadar. Bu değişkenler bütün alt rutinlerde tanımlıdır. Diğer değişkenler ise geçici (local) değişken olarak tanımlanıyor.
Bu tanımlardan sonra şimdi gelelim ana programın icra edildiği main() fonksiyonuna. main() içerisindeki 'argc' ve 'argv' değişkenleri, verilen parametreleri ve parametre sayılarını saklıyor, 'argc' parametre sayısı, 'argv' ise parametrenin kendisini oluşturuyor. Bir örnek vermek gerekirse;
MenuDesign df0:s/menulist Burada, MenuDesign programımızın ismi, df0:s/menulist ise yüklenecek olan listenin bulunduğu directory ve ismini belirtiyor. Bu girişe göre, argc=1, argv[1]="df0:s/menulist" olarak tanımlanır, 'argc' kontrolü ile gerekli parametrelerin girilip girilmediğini öğrenmemiz mümkün. Bu olayları,
main(argcargv) int argc; char argvfj;
int a; if(argc==1) {
printf("Usage : menu [list] \n"); return(1); }
satırları ile kontrol ediyoruz. Daha sonra,
lntuitionBase=Openl_ibrary ("intui- tion.library", 0);
GfxBase=Open Library ("graphics.- library", 0);
DosBase=OpenLibrary ("dos.lib- rary", 0);
window=lntuitionBase->ActiveWindow; rp=window->RPort;
satırları ile kullanılacak olan Library'ler ve değişkenler tanımlanıyor. Yalnız burada programın daha anlaşılır olması için, Library'lerin açılıp açılmadığını kontrol etmedim. İsterseniz siz güvenilirlik açısından kontrol edebilirsiniz.
SetDrMd(rp, JAM1); Satırında, yazı modu tanımlanıyor. Bu modlar ekrana yazarken kullanılacak mantık işlemini belirtiyor. JAM1 modu, bize üst üste yazılan karakterlerde birbirlerini yok etmemesi için kullanılıyor. Diğer bir deyişle OR işlemi yapıyor. Bu modu kullanmamamdaki sebep, print() rutini ile gölgeli yazı oluşturmak içindi. Diğer kullanılabilecek modlar ise, JAM2 ve COMPLEMENT modlarıdır. Bu modların işlevlerini deneyerek görebilirsiniz.
Daha sonraki satırlarda, programın işlevini gerçekleştiren bizim hazırlamış olduğumuz alt rutinler mevcut. Bu rutinler belirli bir sırada çağrılarak adım adım program işleniyor. Bu sıra,
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 20
Iay'dir. Buraya gireceğiniz saniye cinsinden zaman dilimi içersinde hiçbir mouse hareketi olmamışsa mouse pointer'ı kapatılır. Normali 10 saniyedir. Preferences'! kullanırken bu. parametreyi 0 konumuna getirin, yoksa preferences yardımıyla 'system-configuration' dosyasını diskete kaydederken mouse pointer'ı kapalı (pointer tanımlaması yokmuş gibi) olarak kaydedilir.
Normalde bir fonksiyon tuşuna makro tanımlamak istediğimizde bunu ikinci ve üçüncü satırdaki gadget'ları kullanarak yapabiliriz. Fakat bunun için Mach II penceresinin açık olması gerekmekte. Bir programla çalışırken yeni bir makro tanımlamak bazen çok uğraştırıcı olabilir; özellikle makroda çeşitli menü ve mouse işlemleri yapılıyorsa. Parametre gadget'larının hemen altındaki sıradaki ilk gadget'ı Start/Stop konumuna getirdiğimizde istediğimiz zaman makro tanımlayabiliriz. Makro tanımlamak için de şu işlemleri yapmamız gerekmekte:
1. <Alt>+<ESC> tuşlarına basarak macro tanımlama moduna geçerek makroyu atamak istediğimiz fonksiyon tuşunu basmalıyız. Bunun için gerekirse Amiga ve/veya CTRL tuşlarını da kullanmalıyız.
2. Bunun ardından da makro tanımını klavyeyi kullanarak girmeliyiz.
3. En son olarak da makro tanımını bitirmek için tekrar <Alt>+<ESC>'e basmamız gerekmekte.
Bu işlemleri sırayla doğru olarak yaptıktan sonra artık istediğimiz zaman makroyu, fonksiyon tuşuna (+ekstra tuşlar) basarak çağırabiliriz.
Gadget'imiz Execute konumundaysa, <sol Amiga>+<ESC> tuş kombinasyonuna basarak Mach II tanımlama penceresinin dördüncü satırında yer alan komut dizisini çalıştırabiliriz. Bu normalde yeni bir CLI penceresi açmayı sağlamakta.
Requester modunda Mach II tanımlama penceresini direkt olarak açmayı sağlamakta. Bildiğiniz gibi normalde bu pencereye erişmek için saat göstergecinin üzerinde sağ mouse tuşuna basmamız gerekmekteydi. <CTRL>+<sol Amiga>+<ESC> tuş kombinasyonu da aynı işlevi görmektedir.
Gadget'imiz Match modundaysa, istediğimiz makroyu karşılaştırma yöntemiyle çağırabiliriz. Bu özellik, makro tuşunu unutmuşsak, fakat makro tanımının başını hatırlayabiliyorsak çok kullanışlıdır. Bunun için <SHIFT>+<ALT>+<ESC> tuşlarına basmanız, ardından da klavyeyi kullanarak hatırladığınız makro tanımlamanın baş kısmını girmeniz gerekmekte. Makronun bir kısmını girdikten sonra <RETURN>'a bastığınızda, tüm makrolar teker teker bakılarak uyuşan ilk makro çağrılacaktır.
Mach II penceresinin sondan bir önceki satın yardımıyla yaptığımız ayarlamaları saklamak için kullanacağımız dosya directory'sini ve ismini belirleyebiliriz. Normalde burada 'srmach.config' yazılıdır. Bu, parametrelerin s directory'sine mach.confıg adıyla kaydedileceğini belirtir. Save yardımıyla yapılan ayarlamaları kaydedebilir ve Load ile de istediğimiz zaman bu dosyayı tekrar okuyabiliriz. Mach II her açılışında, varsa bu dosyayı otomatik olarak yükleyecektir. Remove ile Mach II'nin kazandırdığı tüm özellikleri kapayabiliriz. Done ise tekrar çalışma ortamına dönmemizi sağlar.
MAKRO KOMUTLARI:
\N ... CLI penceresinde bir satır aşağıya hareket. \T ... CLI penceresinde TAB hareketi. \E ... <Escape> tuşuna basılmış gibi davranır. \D ... <Del> tuşunun fonksiyonunu gerçekleştirir. \B ... <BckSpc> tuşunun işlemini yapar (soldaki karakteri siler). W ... <\> işaretini kullanmanızı sağlar. \H ... <Help> tuşuna basılmış gibi davranır. \u ... <ok yukarı> Nd ... <ok aşağı> \1 ... <ok sola> V ... <ok sağa>
NO - \9 ... nümerik klavyeden sayılar \. ... nümerik klavyeden <.> V ... nümerik klavyeden <-> \e ... nümerik klavyeden <Enter> X ... nümerik klavyeden <(> \) ... nümerik klavyeden <)> \* ... nümerik klavyeden <*> \+ ... nümerik klavyeden <+> V ... nümerik klavyeden </> \F1-\F0 ... fonksiyon tuşları 1-10 (10 için F0) \Y ... Tarihin uzun olarak CLI ekranına yazılmasını sağlar. \y ... Tarihin kısa olarak CLI ekranına yazılmasını sağlar. \b ... Ekranın anında karartılmasını sağlar. \f ... Disketten başka bir konfigürasyon dosyasını yükleyip çalıştırılmasını sağlar. Dosya ismi \f 'den hemen sonra aralıksız olarak girilmelidir. \X ... Verilen string'in CLI üzerinden çalıştırılmasını sağlar. Bu komutla string yerine istediğiniz program ismini yazarak onun otomatik olarak çalıştırılmasını sağlayabilirsiniz. \P ... Komuttan hemen sonra aralıksız olarak verilen değer kadar saniye beklemeye gidilir. Değer verilmemişse 1 saniye beklenilir. • \Q ... Mach II'yi hafızadan atıp çıkmanızı sağlar
(remove). NG ... Anında beep edilmesini sağlar. \a ... Başında bu komut olan makro, Mach II çalıştırılıp konfigürasyon dosyası da yüklendikten sonra otomatik olarak çalıştırılır. Bu şekilde bilgisayarınızı her açışınızda istediğiniz programın çalıştırılmasını sağlayabilirsiniz. Komuttan sonra zaman da belirtebilirsiniz. Bu durumda sistem saati, belirttiğiniz zaman ile aynı olduklarında o makro çalıştırılır. Burada zamanı 4 haneli bir sayı olarak girmelisiniz. Sayının soldaki iki hanesi saati, kalan sağdaki iki hane de dakikayı belirlemek içindir. \a komutunu kullanacağınız zaman bunun makronun başında bulunmasına dikkat edin. \Mx ... Mouse x koordinatı. Koordinat, \Mx'den hemen sonra üç haneli rakam olarak girilmeli. \Mx ve \My komutları ile mouse işaretçisini istediğiniz bir koordinata hareket ettirebilirsiniz. \My ... Mouse y koordinatı. \Mld ... sol mouse tuşu basılı durumdaymış gibi davranır. \Mlu ... sol mouse tuşu basılıp bırakılmış gibi davranır. \Mrd ... sağ mouse tuşu basılı durumdaymış gibi davranır. \Mru ... sağ mouse tuşu basılıp bırakılmış gibi davranır. \C ... <CTRL> tuşuna basılmış gibi davranır. Bunun gibi diğer özel tuş gerçekleştiren makro komutlarını bir harfin soluna yazarsanız özel tuşla beraber o karakter tuşuna basılmış gibi davranılır. \S ... <SHIFT> tuşuna basılmış gibi davranır. \A ... <ALT> tuşuna basılmış gibi davranır. \L ... <sol Amiga> tuşuna basılmış gibi davranır. \R ... <sağ Amiga> tuşuna basılmış gibi davranır. \h ... Mach II yardımcı ekranının gösterilmesini sağlar.
Yardımcı ekranda tüm makro tuşları ve kısa olarak tanımlamaları aynı anda ekranda görülebilir. Bu, bir tuşu unuttuğunuzda çok yardımcı olacaktır. Bu ekranı tekrar kapamak için aynı komutu belli bir işlem (örneğin mouse tuşuna basıldığında) ya da belli bir süreden (\P komutu ile) sonra tekrarlamanız gerekmekte. (\h'den hemen sonra vereceğiniz rakam, yardımcı ekranın yüksekliğini belirler. Bu değer en az 52 olabilir. İşte sonunda bitti! Ama sizin de anladığınız gibi Mach II'nin yapamayacağı yok. Dilerseniz mouse koordinat komutları ve mouse tuş simülasyon komutları ile komple bir programın uygulamalı demonstrasyonunu bile yapabilirsiniz.
Çalışmalarınızda basanlar...