Bu sayfadaki yazılar
Sayfanın metni
Sayfa 27
Aldığımız oyunların başında birbirinden güzel introlar görüyoruz. Bu tarz şeyler yapabilmeyi herkes ister sanırım. Ama çok basit olmalarına rağmen, çok iyi bir machine code (makine dili) bilgisi gerektiren bu introları herkes yapamıyor. İşte bu nedenle intro ve demo yapan programcılar, herkesin yararlanabileceği intro veya demo yapıcı programlar yapıyorlar. Biz bunlara "Maker" diyoruz. Ben sizler için en iyi Intro Maker'ı araştırıp buldum ve zorlanmadan kullanmanız için açıklamasını yazmaya karar verdim. Bu programı, herkes kullanabilir. SOUNDTRACKER ile yapılan müzikler, bu MAKER'da kullanılabilir. Oldukça basit bir kullanıma sahip olan ve text editöre benzeyen RAINBOW WRITER, Alman cracker grubu RAINBOW TRIO tarafından yapılmış.
Programımızı ilk menüsünden başlayarak inceleyelim.
SHIFT+F1: Yeni mesajlar yazmaya başlamamıza yarar. Eğer daha önce mesaj yazdıysanız buraya girdiğiniz zaman hepsini kaybedersiniz.
F2: Yazdığınız mesajı izlemek ya da kontrol etmek için kullanabilirsiniz.
SHIFT+F2: Yazdığınız mesajı kontrol edip yazmaya devam edebilirsiniz. Buraya girildiğinde yazdığınız kısım bir kere gösterilir.
F3: Otomatik durma zamanını ayarlayabilirsiniz. F3'e bastığınızda, yanındaki sayı artar. İstediğiniz hızı ayarlayarak o hızda bırakın.
F4: Disk işlemleri menüsüne girmek için kullanılır.
SHIFT+F4: Mesaj yazıcı kısım için kısa açıklamalar.
F5(U/D): Mesaj kısmının arkasındaki yıldızların hızının ayarlanması içindir. Hızı azaltmak için F5'e SHIFT'le beraber basın. 00'da yıldızlar hareketsiz yerinde durur.
F6(U/D): Intro yapıcının içinde hazırda bulunan on iki fonttan birini seçmenize yarar. SHIFT'le beraber F6'ya basarsanız font numarasını geriye alırsınız.
F7: Alt kısımdaki kayan scroll'u (yazıyı) değiştirebilirsiniz.
SHIFT+F7: Mesajların yazıldığı kısımdaki kursor işaretini değiştirmenize yarar.
F8: Ekranın en üst kısmında bulunan başlığı değiştirmenize yarar.
F9: Renk editörü. Intro'nuzu hazırlarken kullanacağınız renkleri buradan ayarlayabilirsiniz.
* DISK OPTIONS: Ana
menüdeki F4 seçeneği ile girdiğiniz
DISK OPTIONS menüsünde, aşağıdaki seçeneklerle karşılaşıyorsunuz:
F1=SAVE YOUR MESSAGE TEXT: Diskete yazdığınız mesajı kaydeder. Burada yanlış anlama olmasın; bu seçenek yaptığınız introyu değil, sadece yazdığınız mesajı kaydeder.
F2=LOAD A MESSAGE TEXT: F1 ile diskete kaydettiğiniz mesajı bir daha yüklemek için kullanılır.
F3=SAVE AND COMPRESS LETTER: İşte işinize yarayacak bir seçenek. Yapılan intro'yu tek parça halinde diskete kaydetmek için kullanılır; hem de crunch edilmiş olarak. Artık kimse sizin yazılarınızı değiştiremez.
F4=LOAD A SOUNDTRACKER MODULE: Intro için disketten SOUNDTRACKER modülü yüklemeye yarar. Yalnız kısa bir hatırlatmada bulunmak istiyorum; otuz iki enstrümanlı SOUNDTRACKER ve NOISETRACKER modülleri, bu makerda çalışmaz.
F5=SEE THE DIRECTORY: Disketlerin directory'sine bakmak için kullanılır.
F6=LOAD A STANDART CHAR-SET: Standart karakter yüklemenize yarar.
F7= SAVE CHARSET: Yaptığınız karakterleri diskete kaydetmenize yarar.
F8= SAVE ALL CURSORS IN MEMORY: O anda editörde yapılan bütün kursorları diskete kaydeder.
F9=LOAD SAVED CURSORS INTO MEMORY: Daha önceden kaydedilmiş kursorları yüklemeye yarar.
* SCROLL EDITOR: Ana menüdeki F7 seçeneği ile girdiğiniz bu bölüm, ötekilere göre çok basit. Ortada mesaj textiniz gösterilirken, aşağıdan bu kayan yazı geçebilir. Eğer siz buraya bir şeyler yazmazsanız, bu kısımda hiçbir hareket olmaz. Burada kayan yazınıza F1'den F5'e kadar farklı hızlar koyabilirsiniz. Editor tuşları ise:
HOME: Scroll text başlangıcına git. END: Scroll text sonuna git. F9-F10: Hızlı olarak sağ ve sola ilerleme.
ESC: Ana menüye dönüş. * CURSOR EDITOR: Mesaj textinizi yazan kursoru bile burada değiştirebiliyorsunuz. Ama programın içinde birçok ilginç cursor bulunuyor. İlk önce F1 ve SHIFT F1 tuşları ile onlara bakmanızı tavsiye ederim. Eğer değişiklik yapacaksanız, şu işlemleri yapın: F3 ile EDIT moduna girin. '.' boş pixel, '+' dolu pixel demektir. F2 ile anim'in hızını ayarlayabilirsiniz. Charset editor ise, bu kısmın aynısıdır.
* COLOR EDITOR: Mesaj kısmındaki renkleri burada tanımlıyorsunuz. F1 ile renklere numara veriyorsunuz. F2, F3 ve F4 ile 4096 renkten istediğinizi seçiyorsunuz.
Şimdi mesaj yazıcı kısmındaki kullanım tuşlarına geçelim. Bu tuşlara, editör tuşları da diyebiliriz.
OK TUŞLARI: Kursoru hareket ettirmeyi sağlar.
SHIFT+DEL: Yazdığınız cümlelerin ya da kelimelerin arasına yazı eklemeye (insert) yarar.
HOME: Bu tuş nerede diye aramayın. SHIFT'le beraber nümerik klavyede '7' tuşuna bastığınızda, kursor en üst satıra çıkar.
END: Kursoru en alt satıra götürür. SHIFT'le beraber nümerik klavyeden ‘1’e basılması kafidir.
HELP: Ekranı temizler. F1-F4: Mesaj yazma hızını değiştirmeyi sağlar. 1 en hızlı. 4 en yavaşıdır.
F5: Mesaj gösterilirken herhangi bir tuşa basılmasını bekler.
F6-F10: Mesaj gösterme işlemini belli bir süre bekletir. Yani ekranı bir süre dondurarak mesajın okunmasını sağlar. Bekletme süresi verilen sayı büyüdükçe uzar.
CTRL+L: Mesaj kısmındaki karakterleri iki misli büyütür. Kayan yazı ve başlıktaki büyüklüğüne getirir.
CTRL+R: Karakteri reverse (negatif) duruma getirir.
CTRL+N: Yukarıdaki işlemlerle değiştirilen karakteri normal hale getirir.
ESC: Mesaj yazma kısmı bittikten sonra, ana menüye dönmeyi sağlar.
CTRL+0-9: Kontrol tuşu ile beraber 0 ile 9 sayılarından birine basarsanız, renk editörü ile belirlenmiş renkleri kullanabilirsiniz. Yalnız burada bir hatırlatma yapmam gerek. Bu tuşlarla renkleri değiştirirseniz, tüm mesaj textinin renkleri değişir.
CTRL+F(1-10): Yukarıdaki seçeneğin benzeridir. Ama basıldığı anda sadece kursorun bulunduğu satırın rengi değişir. Aşağıdaki satıra geçtiğinizde, bir önceki renge döner.
CTRL+D-E-F-G: Kursor satırının karakterleri içine renk tonlaması (copper) koyar. CTRL ile beraber herhangi bir harfe basmanız yeterlidir. Harflerin gösterdiği renkler: D=Gri, E=Kırmızı, F=Yeşil, G=Mavi.
Sorularınız ve gereksinimleriniz için bana yazmayı unutmayın. Gelecek sayıda buluşmak üzere, hoşçakalın.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 26
move.l INTBASE.al jsr -$19e(a6) EXIT3: rts
*..........................................................
INTNAME:dc.b "intuition. library",0 WINNAME:dc.b "Benim Window".0
WINDOW: dew 20,20
dew 300.100 dc.b 0.1 dc.l S80000+S200+$2 dc.l SI+S2+S4+$8 dc.l 0.0 dc.l WINNAME dc.l 0,0 dc.w 200,50 dc.w 400,200 dc.w I
INTBASE: dc.l 0 WINBASE:dc.l 0
Tabii söylememe gerek yok. Hemen oturup Seka'ya yeni örneği yazın. Veya eski source listesini yükleyip, üzerinde değişiklikler yapıp yeni halini oluşturun.
Yazımı bitirip hemen compile işlemini yapın. Eğer herhangi bir yazım veya sistem hatası meydana gelmezse, programı JSTART ile çağırabilirsiniz.
Artık mouse'un sağ tuşuna basmanız gerekmiyor. Window'u Workbench'teki gibi sol üst kısımdaki window kapama kutucuğuna mouse'un sol tuşu ile basarak window kapama ve çıkış işlemini gerçekleştiriyoruz.
Şimdi gelelim bu işin nasıl yapıldığına. Dikkat ederseniz, programımız 10. sayımızdaki örnekten biraz farklı gelişiyor. 10. sayıdaki programın ana parçası yani mouse'un sağ tuşu ile programdan çıkmayı bekleme bölümü yerine, 14 satırlık bir rutin ile değiştirdik.
İşte bu rutin bizim window'umuzun özelliklerini gerçekten kullanmamıza yarayacak.
Amiga'yı dizayn edenler, window'u kapamak, boyutlarını değiştirmek, window'u diğer window'ların arkasına göndermek, seçili window üzerinden bir tuşa basmak, seçili window'a bağlı olarak disk işlemleri gibi olayları sistemde kolayca kontrol etmek için, exec library'de mesaj okuyucu rutinler yazmışlar. Bu rutinler vasıtası ile biz bu olayları çok rahat tespit edip, programımızda herbiri için ayrı yönlendirme yapabiliyoruz.
Bu olayları sistemden okumak için, exec library'deki GetMsg($174) isimli rutini kullanacağız. Bu rutin bizden tek parametre isteyecektir. Bu parametre, Userport diye adlandırılan yine Amiga'yı dizayn edenlerin geliştirdikleri bir parametre olmaktadır.
Userport'u nerede bulacağımıza gelince; her window structure'ındaki 86. byte'dan itibaren bir longword değer olduğunu söyleyebiliriz. Onu okumak için kullandığımız komutlar ise şunlar: move.l WINDBASE,A0 move.l 86(A0),A0 Tabii sizin bu iki komutta anlayamadığınız bir kısım bulunmadığını tahmin ediyorum. Yine de bir hatırlatma gerekirse; Winbase'deki window structure adresinin değerini A0 registerine alıp, bir alt satırdaki komut ile bu değerin 86 byte fazlasındaki değeri tekrar A0'a gönderiyoruz, move.l 4,a6
Son olarak biliyorsunuz: A6 registerinde intuition library değeri vardı, onu exec library'nin tablo adresi olan 4 ile değiştiriyoruz.
jsr -$174(a6) Ve rutini çağırıyoruz. Rutinden çıktıktan sonra, D0 adresinde varsa bir mesaj onun hafızada yerleştiği değer kaydediliyor.
Şimdi buradan itibaren programın söz konusu kısmını yakından inceleyelim.
1 move.l d0.a0 2 move.l 20(a0).d6 3 tst.I dO 4 beq.S LOOP 5 cmp.l #$200.d6 6 bne.s LOOP
1. satırda D0'daki message adresini A0'a taşıyoruz. Bu işlemin nedeni, 2. satırdaki komutta gördüğünüz gibi message adresindeki 20. byte'daki longword değeri D6 registerine taşımak içindir.
Daha sonra 3. ve 4. satırlardaki işlem, message'ın gerçekten var olup olmadığıdır. Nasıl mı? Eğer GetMsg library rutininden çıkıldığında, D0 registerindeki message adresi değeri 0 değeri ise, message yok demektir. Eğer 0'dan farklı bir değer ise message var demektir. 4. satırdaki komutun tepkisi, message yok ise, LOOP label'ına atla; var ise, bir alt komut ile devam et olur.
5. ve altıncı satırlar, oldukça anlamlı satırlardır. 2. satırdaki işlemi merak etmişsinizdir. Neden message adresindeki 20. longword'u alıp D6'da sakladık? Açıklayalım.
Bu değer, message ile meydana gelen olayın sistem kodunu teşkil etmektedir. Değerin sistemdeki adı IDCMP'dir. Tabii hemen kavradığınızı tahmin ediyorum; $200 değeri de, window'un kapama kutucuğunu temsil eden IDCMP flag'ıdır. Tablo'da bu flag'lar toplu halde görülmektedir.
Gördüğünüz gibi, istenen olayın kodunu D6'daki değer ile karşılaştırarak o olayın gerçekleşip gerçekleşmediğini anlayabiliriz.
Siz de buradaki değerleri kullanarak, programda istediğiniz kontrolleri koyabilirsiniz.
Son olarak söylenecek bir şey kaldı. Aldığınız her message hafızada bir yer işgal etmektedir. Bu yüzden alınan her message'ı geri bırakmak gereklidir. Bu işi yapmazsak, hafızada devamlı arka arkaya birikeceklerdir. Bu işlem için yine exec'deki Putmsg($16e) rutinini kullanacağız. Bu kısım ise programda şöyle ayrılabilir.
move.l 4,a6 move.l WINBASE.a0 move.l 86(a0),a0 move.l d0,al jsr -$16e(a6)
Bu rutin iki parametreye ihtiyaç duyar. Birinci olarak window'un userport adresi, ikinci olarak ise message adresi. Ardından rutinin çağrılması yeterlidir.
Daha sonra normal çıkış işlemleri yapılabilir.
Yazı dizimizi burada noktalıyoruz. Gelecek sayıda görüşmek üzere hoşça kalın.
Bit Değer İsmi Anlamı
0 $0000001 SIZEVERIFY 1 $0000002 NEWSIZE WİNDOW BOYUTLARI DEĞİŞMİŞ 2 $0000004 REFRESHWINDOW 3 $0000008 MOUSEBUTTONS MOUSE TUŞLARINA BASILMIŞ 4 $0000010 MOUSEMOVE MOUSE KOORDİNATLARI DEĞİŞMİŞ 5 $0000020 GADGETDOWN 6 $0000040 GADGETUP 7 $0000080 REQSET 8 $0000100 MENUPICK BİR MENÜ SEÇİLMİŞ 9 $0000200 CLOSEWINDOW WİNDOW KAPAMA İKONUNA BASILMIŞ 10 $0000400 RAWKEY BİR TUŞA BASILMIŞ 11 $0000800 REQVERIFY 12 $0001000 REQCLEAR 13 $0002000 MENUVERIFY 14 $0004000 NEWPREFS PREFERENCES DEĞİŞTİRİLMİŞ 15 $0008000 DISKINSERTED SÜRÜCÜYE DİSK SOKULMUŞ 16 $0010000 DISKREMOVED SÜRÜCÜDEN DİSK ÇIKARILMIŞ 17 $0020000 WBENCHMESSAGE 18 $0040000 ACTIVEWINDOW WINDOW ACTIVE HALE GELMİŞ 19 $0080000 INACTIVEWINDOW WINDOW DEACTIVE HALDE 20 $0100000 DELTAMOVE