Bu sayfadaki yazılar
Sayfanın metni
Sayfa 25
O library “diskfont.library” 1 library “graphics.library” 2 3 declare function OpenDiskFont & library 4 declare function OpenfFoni&library 5 6 — 1 7 fontnodisk 4 - 0 8 9 Demo: 10 restore 11 print “Bunlar FONTS:'taki font- lar:” 12 43 for x—1 to 10 14 read 15 PrepareFont Font$, fontdisk» 16 print:print “punto” 17 next x 18 19 print “Tekrar ROM'daki fonta geri döndük:” 20 21 read 4 22 PrepareFont fontnodisk» 23 print Font$,Boy» “punto”
52 end if 53 end sub
Programın 0 ve 1 numaralı satırlarındaki library emirleri ile, hangi library'leri kullanacağımızı biliyoruz. Eğer gereken .bmap dosyaları veya (diskette duran) library'lerin kendileri bulunamazsa burada “File not found” hata mesajı gelebilir. AmigaBASIC'ten aynı anda en fazla 5 library kullanabilirsiniz. 3 ve 4 numaralı satırlar da ise fonksiyon olarak kullanacağımız, yani geriye bir değer vermesini beklediğimiz iki emiri birer birer 'declare' ediyoruz, yani sisteme bildiriyoruz. Daha sonraki 13. satırdan başlayan FOR döngüsü içinde, Font adını ve boyunu READ ile okuduktan sonra 15. satırda PrepareFont adlı Subprogramı çağırarak o fontu açıyoruz. 16. satırda yeni fontumuz ile bir şeyler yazdıktan sonra bunu 10 kez tekrarlıyoruz. Burada kullandığımız fontlar 25 ve 26, satırlarda ki DATA satırlarında veriliyor. Daha sonra 28, satırdaki DATA satırından okunan topaz 8 fontu ile 22. satırda tekrar
24 25 data Topaz,11,Ruby, 12,Opal, 15 26 dataGarnet,16,Emerald, 17, Di- amond,20,Emerald,20,0pal9 27. 28 data topaz,8 29
30 library coles 381 32 end 33 34 sub diske) static 35 FontNames 4 “font” -chrS(0) 36 FontBoy4 —- Boy» 37 EskiFont&-peekl(window(8)-- 52) 38 39 40 TextAttr&(1)— 41 TextAttr& - varptr(TextAtrr&(0)) 42 43 if — 1 then 44 YeniFont&- OpenDiskFont& Textttr&) 45 else 46 YeniFont&—openFont&(TextAttr&) 47 end if 48 49 if YeniFont& — O then 50 call CloseFont(EskiFont&) 51 call
eski fonta dönülüyor. LİBRARY CLO-SE ile library'ler kapatıldıktan sonra program bitiyor. Sıra geldi PrepareFont adlı Subprogram'ın nasıl çalıştığını açıklamaya. 35. satırda, Names adlı string değişkene font adını, arkasına “.font” sonekini ve C dilinde string sonunu gösterdiği için O sayısını karakter olarak ekliyoruz. AMIGA işletim sistemi çoğu C dilinde yazılmış olduğu için, bazı yerlerde C'nin normalde yaptığı şeyleri yapmak için BASIC'ten bazı hileler başvurmamız gerekiyor, buradaki CHRS(0)'da bunlardan biri. Şimdi hafızada 'structure' avına çıkıyoruz. Bunlar yine C dilinde kullanılan ve bileşik bilgi gruplarını sakamaya yarayan hafıza parçalarıdır. Pencereler, fontlar ve benzeri her önemli olay için gereken bilgileri AMIGA işletim sistemi bu tür structure'lar halinde tutar, 37. satırda ile penceremizin RASTPORT structure adresini buluyoruz, buna 52 ekleyip oradan da pencereye o anda bağlı olan Font'un adresini buluyoruz, eğer yeni fontumuzu açabilirsek bu eski fontu kapatacağız. Adresler 32 bitlik sayılar oldukları için bu adresi saklamak için yine değişkenimizin adına & karakterini ekliyo- TUZ. Şimdi ise, açmak İstediğimiz font'a ait istediğimizi taşıyan bir structure yaratmamız lazım. BASIC dili structure türü değişkenlerden anlamadığı için yine bir hileye başvuruyoruz. İstediğimiz, TextAttr adlı bir structure, Bunun yapısı ise şöyle: ilk önce 4 byte font adını taşıyan string'in hafızadaki adresi, 2 byte font'un yüksekliği, 2 byte da stil bilgisi ki, bunlara biz O veriyoruz. Hilemiz ise, 4 bayt'lık tamsayı elemanlardan oluşan bir dizi (array) doldurup, bunu kullanmak. TeptAttr& adını verdiğimiz dizinin ilk elemanına 39. satırda FontNames adlı isim değişkeninin adresini SADDI ) (String ADDress) ile bulup yerleştiriyoruz. Font boyunu sonraki 2 byte'a koymak için, bunu 2 üstü 16 yani 65536 ile çarpıp dizinin ikinci elemanına (1 numaralı eleman) yerleştiriyoruz. Sonra 41. satırda ) (VARiable PoinTer) ile bu dizinin (daha doğrusu dizinin ilk elemanının) adresini bulup bunu da TextAttr& adlı değişkene koyuyoruz. Artık fazla bir şey kalmadı, açılacak font'un ROM'da mı yoksa diskte mi olduğuna göre OpenFonil ) fonksiyonlarını, parametre olarak TextAttr adresimizi vererek çağırıyoruz (satır 44 ve 46.) Hatırlayacaksınız, bunları başta declare etmiştik, bunların geri verdiği değer hafızaya yüklenen Font'un adresi. Eğer font başarıyla yüklenebilmişse, bu değer sıfırdan büyük olacaktır, eğef bir sorun çıkmışsa değer sifirdır. Satır 49'da bunu kontrol ettikten sonra 50. satırda CloseFontl ) ile eski fontu kapatıyoruz, 51. satırda da SetFontl ) ile penceremizin RASTPORT'una (Bunun adresini yine windowf(8) ile elde ediyoruz) yeni fontumuzu yerleştiriyoruz. 53. satırda Subprogramımız da bitiyor. Evet, BASIC örneğimizi de verdik. Gelecek sefer Assembler örneği vermeyi düşünüyorum. Eğer Assembler örneğini daha önce İsteyip de bana geç yazdığım için kızanlar ya da Pascal'da hiç örnek vermediğim için üzülenler varsa (Var mı acaba?), bu gibi istekler için bana yazıp İsteklerinizi belirtmenizi rica ettiğimi hatırlatayım. Unutmayın, ağlamayan bebeğe mama vermezler. Son olarak yazımın başındaki ricamı tekrarlamak istiyorum: LÜT-FEN aklınıza takılanlar, yazıda anlaşılmaz bulduklarınız ya da daha çok İlginizi çeken ve şimdiye kadar benim değinmediğim konular hakkında fikirlerinizi ve isteklerinizi belirtin. Dergiye 'AMIGA İşletim sistemi' rumuzu ile yazarsanız İsteklerinize yanıt vermek için elimden geleni yapacağım. Tekrar görüşünceye kadar size mutluluklar ve (AMIGA'nıza ve buna dayanabilmeniz için) sabır dilerim.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 24
İngilizce kitaplar: Technical Reference Manudal:Libraries and Devices Inside the AMIGA (with C) Advanced System Programmer's Guide for the AMİGA AMIGA Reference Manual AMIGA C for Beginners Advenced AmigaBASIC Almanca kitaplar: C für Einsteiger Das grosse C Buch zum AMIGA İntern AMIGA Programmierrichtlinien
AmigaBASIC'ten bir library'yi kullanabilmeniz için ön şart, o library'- ye ait bir dosyasının AmigaBASIC tarafından bulunabilmesidir. Bunun için bu dosya ya LIBS: mantıksal drive'inda ya da AmigaBASIC'in current dir'inde olmalıdır. Bu ya AmigaBASIC'in çalıştırıldığı veya daha sonra CHDİR komutuyla geçilmiş olan directory'- dir. Programınızı eğer program iconu üstüne çift klik ile çalıştırmışsanız, programınızın bulunduğu çekmece current directory olacaktır. Bu durumda herhalde en iyisi bmap dosyalarını LIBS:'e yerleştirmek olsa gerek. Extras1.3 disketindeki BasicDemos çekmecesindeki örnek programların bazıları library kullandıkları için, burada üç İlibrary'ye ait dosyaları bulunur. Bunlar exec,dos ve graphics.library için gereken dosyalardır, library isimlerin sonuna yerine “bmap' getirerek adlandırılırlar. Burada mevcut olmayan bir dosyasına gerek duyarsanız, ConvertFD adlı BASIC programını kullanarak yine extras disketinde bulunan FD (Function description, fonksiyon açıklaması) dosyalarından gereken bmap dosyalarını üretebilirsiniz. Tabii ki bu anlatacaklarımı Extras disketinizin orijinali üstünde değil, bir kapyası üstünde yapmayı unutmayın. Zaten Extras disketi neredeyse ağzına kadar dolu olduğu İçin orijinal diskette yer bulmazsınız. Tavsiyem, (eğer şimdiye kadar yapmamışsanız) Extras disketinin, sırf AmigaBA-SIC kullanmak için bir kopyasını Çıkarıp, buradaki BASIC'le ilgisi olmayan şeyleri silmenizdir. Tabii FD1.3 adlı çekmeceyi silmemelisiniz. Neyse, bir bmap dosyasını yaiçin ConvertFD adlı BASIC programını çalıştırın, size FD dosyasının adını sorunca, örneğin “fd1.3/intuition-lib.fd” yazın. Bmap dosya adını sorunca da “"intuition.bmap” yazın. ConvertFD, bazen, library'ye ait bazı fonksiyonların lomap dosyasına aktarılamadığını söyleyen Uyarılar verebilir, bu normaldir. Ayrıca, bazı library emirleri, AmigaBASIC emirleri ile aynı adı taşırlar. ConvertFD, bunların başına *x” koyar, 'Open' yerine 'xOpen' gibi. Ayrıca unutmayın, library fonksiyonlarında küçükbüyük harf ayrımı yapılır, bu yüzden emirleri aynen örneklerde yazıldığı gibi yazmalısınız, yoksa AmigaBASIC bunları tanıyamaz. BasicDemos'taki adlı program, aslında bir program değil, burada REM'ler içinde dosyalar ile ilgili bilgiler var. Bu programı herhangi bir editör veya AS-Cİl text gösterici ile okumanızı tavsiye ederim. Yine burada bulunan “Library” adlı program, 'graphics' ve 'dos' library'leri kullanan birkaç örnek veriyor. Bunlar ROM'daki topaz fontunun iki versiyonunu kullanarak eğik, altı çizili, kalın vb. bazı yazılar yazmak ve (sadece Shell'den çalıştırınca işleyen) 'list” adlı dos emrini (yani herhangi bir başka programı) AmigaBASIC'in içinden çalıştırmak. Bunun dışında LOABIİLDM-SAVECBM, LOADACBM ve SAVE-ILBM adlı programlar da library ro-
JUNE 1991 «RYTE 24 utine'leri kullanırlar. Deluxe Paint gibi resim programlarının da kullandığı İFF-ILBM resim formatını BA-SIC'ten okuyup yazma konusunda örnekler içeren bu programların, biraz uzun ve karışık olmalarına rağmen, ilginç örnekler olduklarına İnanıyorum. Aşağıda verdiğim program yine farklı fontlar ile ekrana yazı yazmaya yarıyor, ancak farkı, ROM'dakilere dışında, açılış disketinizdeki FONTS: mantıksal drive'ındaki bazı fontların da kullanmasıdır. Çalışması için FONTS: ve LIBS: mantıksal cihazlarına (yani açılış disketinize) ihtiyacı vardır, LIBS:'te 'diskfont.library” ve dolayısıyla font.bmap, ayrıca 'graphics.bmap' adlı dosyalar bulunmalıdır (hatırlayacağınız gibi kendisi ROM'da idi). Aşağıdaki programı satır numaraları olmadan verin, o numaraları sadece açıklama sırasında bahsettiğim yeri anlatabilmek için ekledim (Arexx sağolsun). Ayrıca değişken İsimlerinin arkasına eklenen gibi karakterleri değişkenin türünü göstermek açısından çok önemli oldukları için onları unutmamaya dikkat edin. Yüzde karakteri ise 32 bitlik (dört byte) tamsayı olduğunu gösterir. Bunlar olmazsa AmigaBASIC bir değişkeni 'kayar nokta' (floating point) kabul eder, bu da bizim amacımıza uymaz. .