AMOS PRO
Retro bilgisayarHepinizi sevgiyle selamlıyorum, sevgili Amos delileri. Bu yılın da sonu geldi. Yine klasik ve zırva yılbaşı işkence programları bir iki gün ekranları işgal edecek. Eskiden bir televizyon ve daha az zırvalık vardı. Şimdi hepsi birbiriyle yarışırcasına zırvalamakta, en çok saçmalayan kendini en iyi zannediyor. Eh! Ne diyeyim, Tanrı akıl fikir versin. Gelecek yıl hepinize mutluluklar getirsin diyeceğim, ama getirmeyecek, bu yüzden gelecek yıl size getirebildiği kadar az üzüntü ve sıkıntı getirsin diyorum. Bu iç sıkan güzel girişten sonra gene Amos üzerine geyiklemeye başlıyorum. Sizlerden bir iki mektup aldım ve sevindirik oldum. Sorularınıza birazdan değineceğim. Şimdi nihayet elime geçen AMOS PRO 2.0'dan bahsetmek istiyorum. Bir kere Amos Pro 2.0'ı piyasada aramayın, kesinlikle bulamazsınız. Bir de cahil ve abes sorularla moralinizi bozarlar. (Amos mu ? No © ? Program mı ? Amiga'da mı ? PC'de mi ? Strateji mi yoksa ? Börek yer misin ? vb). Amos Pro 2.0, bu günlerde moda olduğu üzere, belli dosyalarını değiştirerek (update) çalışır hale geliyor. Yani, elinizde Amos 1.00 yoksa 2.00 da yok demektir. Peki, 2.00'da neler olmuş? En önemlisi, AGA makinalarda çalışıyor. Ama bu özellik de işaret, AGA özelliklerini kullanmadan AGA'da çalışıyor. Aynen Blitz Basic gibi. Bir ara Blitz Basic'den de bahsedeceğim. Amiga Format ve bazı garip dergiler öve öve bitirememişler. Açıkçası, o da AGA özelliklerini kullanmadan AGA'da çalışanlardan. Bir sürü de garipliği ve kullanışsız özelliği var. Amos Pro 2.00'da Amos Pro 1.00'da bulunan bir sürü hata da halledilmiş. Artık değişken değerleri bozulmadan işlem yapabilmekte. Hata listesinde verilen örneği aynen yazıyorum, belki daha önceden siz de karşılaşmışsınızdır. Mutlu olun halletmişler. 5) B$=A$ Left(A$, 1)='B' Print A$ Print B$ Amos Pro 1.00: Baaaa Baaaa Amos Pro 2.00: Baaaa aaaaa Önemli diğer bir gelişme de ERASE fonksiyonunun düzeltilmiş olması. Eski versiyon bazı durumlarda alakasız hata mesajları geri göndermekteydi. Şimdi gerçek hata mesajlarını yakalayabilirsiniz. Hata listesi uzayıp gitmekte, ufak tefek bir sürü hata halledilmiş. Belkide şimdiye kadar hiç biriyle karşılaşmadınız, ama halledilmiş olmaları güzel. Amos'u çalıştırıp HELP tuşuna bastığınızda yapılan tüm yenilikleri ve halledilen hataları liste halinde görebilirsiniz. Amos 2.00 update 3 diskten oluşuyor. İlk disk sadece Amos Pro 2.00'a sahip olmanızı sağlıyor. Diğer iki disk ise AMOS PRO 2.00 COMPILER. Compiler sadece versiyon 2.00'de çalışmakta. Test programlarında yazdığına göre Amos 1.35 Compiler'a göre 2-100 ile daha hızlı çalışmakta. Örnek programlardan birini Compile ettim. Normal bir A1200'de 40 kadar bob'u tek Frame'de (tek ekran) hareket ettirebilmekte. Açıkçası etkilendim. Amos Pro ile ilgili son haber yine Amos Help içinden. Yazdığına göre bu sene sonlarında AGA versiyonu piyasaya çıkacakmış. Bek-
OKUR MEKTUPLARI
Ve şimdi de mektuplarınız. İlk olarak şimdiye kadar aldığım en şirin mektuba değinmek istiyorum. Mektup Levent ÖZER imzalı, bir sürü soru sormuş, işte cevapları: Amosta data save nasıl gerçekleştiriliyor?
Sanırım data save deyiminden kastın dosyalama işlemleri. KGE'nin sana verdiği cevap da tamamen hammal bir yöntemi içeriyor. Dosyalama yapmak için Bload ve Bsave komutlarını kullanmak sana büyük işkenceler çektirir. Dosya açmak ve işlemek için standart Basic komutlarının tamamı Amos komut setinde de yeralmakta. Klasik Basic iki tip dosya erişimine izin vermekte. Sıralı (Sequential) ve Rastgele (Random) erişimli dosyalar. İlk olarak aralarındaki farkı anlatmam gerekiyor. Sıralı erişimli dosyalarda dosya içindeki kayıtlara istediğin anda erişemezsin. Örneğin, 100. kayıt nodaki bilgiye erişebilmek için dosya başından 100 kaydı sırayla okuman gerekir. Aynı kural yazma işlemi için de geçerlidir. Bu dezavantajı yüzünden, kayıtlar arasında sürekli gezmeyi ve rastgele herhangi birine erişmeyi gerektiren programlarda sıralı dosyalar kullanılmaz. Bu dosya türü daha çok tüm kayıtlara erişmeyi gerektiren yerlerde kullanılır. Örneğin, herhangi bir programın dosyası sıralı erişimli dosya olarak açılabilir. Program çalıştığında bir kez okunur ve program ile ilgili ayarlamalar yapılır. Ve her değişiklik yapıldığında da dosyayı yeniden yazarsınız. Oyunların Highscore listeleri de bu şekilde tutulabilir. Aynı zamanda sistemin kullandığı StartUp-Sequence dosyası da sıralı erişim dosyalardandır. Ayrıca sıralı erişilen dosyalar açılırken, sadece yazma veya sadece okuma işlemlerine açılabilirler. Rastgele erişimli dosyaların ise böyle sorunları yoktur. Sıralı erişilen dosyalara istediğiniz tipte bilgi yazabilirsiniz (Nümerik, AlfaNümerik). Rastgele erişimli dosyalar ise sadece AlfaNümerik bilgi yazmanıza izin verirler. Sıralı erişilen dosyaların demin bahsettiğim dezavantajlarına rağmen kolay kullanılır olmaları, bazı durumlarda rastgele erişimli dosyalar yerine tercih edilmelerine sebeptir. İşte sıralı erişim dosya komutları: Open Out DosyaNo,Dosyaİsmi$ Bu komut sıfırdan dosya yaratmak yada açılmış bir dosya içindeki tüm kayıtları silmek için kullanılır. Bu yüzden biraz dikkatli olmanızı tavsiye ederim. Eğer içinde kayıt bulunan bir dosyayı bu şekilde açarsanız tüm kayıtlarınıza sıkı bir hoşça kal çekin çünkü onlar geri gelmeyecek şekilde sildiniz. Komut parametreleri ise oldukça kolay. Dosya no, açtığınız dosyaya vereceğiniz numara. Yazma işlemlerini bu numarayı parametre olarak verip, yapacaksınız. Dosya erişiminiz ne olursa olsun açtığınız dosyaya bir no vermek zorundasınız. Dosyaİsmi$'da dosyanın tüm Path'i ile birlikte ismini verdiğiniz parametredir. Örnek: Open Out 1, "data" veya Dosya$= "Work:Dosyalar/RahmiMerdiven.data" Open Out 1,dosya$ Her iki kullanımda Work Drive'ı içindeki Dosyalar çekmecesinden (Directory) RahmiMerdiven.Data adlı dosyayı açtırmaya yarar. Ve dosya nosu olarak 1'i kullanırlar. Dosya ismi içindeki büyük veya küçük harf kullanımı, herhangi bir değişikliğe yol açmaz.
Append DosyaNo,Dosyaİsmi$ Open Out komutundan tek farkı önceden yaratılmış bir dosyayı açarken içindeki kayıtları silmez. Eğer verdiğiniz isimde bir dosya diskte mevcut değilse, dosyayı yaratır. Parametre kullanımı tamamen Open Out komutunda olduğu gibidir.
Open Out ve Append komutları herhangi bir dosyayı sadece yazma işlemi için açabilirler.
Yazma işlemi için açılmış bir dosyaya bilgi aktarmak için kullanılır. Örnek: Open Out 1, "fiyatlar" : Print #1, "fiyat-10000" : Print #1, "Kdv oranları :" : Close 1 data dosyasının içi : (1) Sandal (2) Fiyatlar (3) 10000 (4) Kdv Oranları : Not: Parantez içindeki sayılar kayıt nosunu gösterir. Gerçekte dosya içinde bu numaralar yoktur.
Open In DosyaNo,Dosyaİsmi$ Herhangi bir dosyayı, okuma işlemi yapmak için açar. Ortalıkta verdiğiniz isimde bir dosya yoksa, acımadan hata verir.
DosyaNo,Değişkenler ine değer çin kullanılır
Open In 1, "Work:Dosyalar/RahmiMerdiven.data"
Close
Dosya içi
(1)'Orhan
Sonuç (Ekranda görünen):
Orhan Bahtiyar - Mavi Pasta
Line Input# Input komutundan farklı olan tek yanı, Input komutunun virgül işaretini ayraç olarak tanıması. Bu sayede aynı kayıt no içinden iki farklı değişkenler içinde okuyabilirsiniz. Line Input ise satır içinde herhangi bir ayıraç kullanmadan, o kayıt no içindeki tüm bilgiyi tek değişkenin içine okur. Yani bir önceki örnekte yerine Line Input# kullanırsanız. A$ içine "Orhan Bahtiyar, Mavi Pasta" değeri gelecektir.
Close DosyaNo ile açılan dosyayı kapatır. Eğer dosyaNo verilmez ise tüm dosyaları kapatır.
Amos dışında, Basic kullanmış ve dosyalama ile Basic ortamında uğraşmış olanlar için ufak bir uyarı yapmak istiyorum. Amos, inatla, şimdiye kadar standart olmuş her şeyle uyumsuz olmak için elinden geleni yapar bir dil. Dosyalama konusunda klasik Basic'le Amos en büyük uyumsuzluk, aşağıdaki programda karşımıza çıkıyor.
Open Out 1, "Work.Dosyalar/RahmiMerdiven.data"
TM
Close 1
1,"Wark:Dosyalar/RahmiMerdiven.dala"
İnputeta$
Print a$
Close t
Standart Amos
A$ tt HH Gördüğünüz gibi Amos'ta aynı kayıt içine iki farklı değer atsanız da, okurken her ikisi de aynı değişkenin içinde gelmekte. Büyük saçmalık, Nedeni belirsiz. Sanırım, François Lionet Amos'u yazarken bir yerden sonra sıkılmış ve bazı şeyleri atlamış. Neyse şimdi sıra rastgele erişim dosyalarında. İşte komutları:
Open Random Random dosyaların sıralı dosyalardan farklı olan yönlerini biliyorsunuz. Random dosya açmak için tek komut var. Bu komut sıralı dosya açmanın hepsinin özelliklerini kapsamakta. Dosya ismi ile verilen dosya diskte mevcut değilse, verilen komut ile dosya yaratılır. Bu komut ile dosya hem yazma hem de okuma modunda açılmış olur. Parametreler ise önceki kullanımdan farklı bir kullanıma sahip değil.
Field As değişken$,uzunluk As değişken$,... Rastgele erişimli bir dosya açtığınızda, okuma ve yazma işleminde kullanacağınız değişkenleri de önceden belirlemek zorundasınız. Yani dosya içinden farklı yerlerde farklı değişkenlerin içine değer okuyamazsınız. Field komutu bu değişkenleri tanımlamanızı sağlayan komuttur. Açıklamak istiyorum. Örnek: Open Random 1, data" Field 1,30 As Lale$, 10 As Zambak$,15 As Klasor$
Dosya değişkenlerinin nasıl tanımlandığını sanırım anlatabildim. Örnekteki dosyanın her uzunluğu 55 byte olacaktır. Bunu, Field komutundaki değişken uzunluklarını toplayarak hesaplayabilirsiniz. Değişkenler Field içinde tanımlandıklarından daha uzun değerleri dosyaya yazamazlar. Yani 30 uzunluğundaki bir değişkene 60 uzunluğunda bir değer atarsanız, dosyaya bu değişkenin ilk 30 karakteri atılır. Değer atama işlemi normal değişkenlere değer atama işleminden farklı değil. Yani, Lale$="Ahmet Ciğer" tanımlaması geçerli kullanımdır.
Get Get komutu, sıralı dosyalardaki Input# komutuna karşılık gelir. Verilen KayıtNo'daki değerleri, Field ile belirtilen değişkenlerin içine okur. Eğer verilen kayıtno, dosya içindeki kayıt sayısından fazla ise değişkenlere boş değer (NULL) atılır.
Put DosyaNo KayıtNo
Bu komut da dosyaya bilgi yazmak için kullanılır Biraz ömekli-
yelim.
Open Random 1, 'Work:Dosyalar/RahmiMerdiven data"
Field 1,30 As Lale$, 0 As Zambak$,15 As Klasor$
Cis
İnput
İnput “İkinci değer : ";Zambak$
“Ucuncu değer : ;Klasor$
Put 1,1
Print Lale$
Print Zambak$
Print Klasor$
Close 1
#Lof (DosyaNo) DosyaNo ile verilen dosyanın uzunluğunu verir. Bu uzunluk Byte cinsindendir. Bu komut sayesinde Random dosyanızda kaç kayıt bulunduğunu öğrenebilirsiniz. Örnek:
Opon Random 1,"Work:Dosyalar/RahmiMerdiven.data"
Field 1,30 As Laie$, 10 As Zambak$, 15 As Klasor$
Print sayı,
Close
Evet ilk sorunu uzun uzun cevapladım. Sanırım pek çok okuyu-
cumuz için faydalı olmuştur. Anlamadığınız bir yer varsa dergiye
başvurabilirsiniz. Şimdi diğer sorular:
Eğer iyi bir program yaparsam Manyetik Paket'te yayınlanır mı? Yayınlanır. Gönderdiğim diske takvim programı yazar mısın? Hayır, Hiç vaktim yok. Neden dergide yayınladığın programları Fold etmiyorsun? Dergide yayınladığım Procedure'leri Fold edersem, okuyucular nasıl kendi bilgisayarlarında bu yazarlar? Herhalde dergi sayfası üzerine gelip F9'a basarlarsa UnFold olmaz. Sanırım Yani, bilmem ki... Bir denesek mi? Yok... Yok... Olmaz. Yaptığım menajerlik oyununda, oyuncular takım gücünü nasıl etkilerler? İyi etkilerler.
Object
hazırlayıp programlarımda nasıl Diğer bir mektup da Salih KATIRCI'dan. Object teriminden Bob ve Sprite'ları kastettiğini düşünerek sorunu cevaplıyorum. Çizdiğin objeleri SpriteX yardımıyla kesip diske kaydedersin. Kaydettiğin dosya bir Amos Bank'ıdır. Bu Bank'ı, 1 nolu banka Load komutuyla yükle (Load 1). Artık objelerini kullanabilirsin.
Mektup... Ha...Ha...Ha... Bir mektup daha. İmza Fatih ŞAHİN. Sevgili Fatih gönderdiğin programlar için teşekkürler. Okuyucu ilgisini, diğer programlarına göre daha çok çekeceğini düşündüğüm, DualPlayfield örneğini hatalarından arındırarak Manyetik Paket içinde yayınladım. Umarım Manyetik Paket alıyorsundur. Tanım üzerindeki değişiklikleri görmeni isterim. Fatih, mektubunda köşemle ilgili çeşitli eleştirilerde bulunmuş. Mektubun bu kısımlarını aynen yayınlıyorum. — ŞU ana kadar okuduğum dergilerden gördüğüm kadarıyla okuyucu, yazarınkinden daha çok kendinden de bir şeyler bulduğu yayınlara daha çok ilgi gösteriyor... Eğer okuyuculardan daha çok program gelirse Amos köşesini dergiden çıkarıp ofset baskı olarak dergide ayrı bir ek haline getirebiliriz. Derginin maliyeti artmış olacak ama diğerleri ne düşünür bilmiyorum, ben bu dergiye 30.000 lira vermek yerine sayfa sayısı ve farkı iki kat artmış bir dergi okumayı tercih ederim.” Okuyucu, yazar ilişkisi hakkındaki görüşlerine tamamen katılıyorum. Baştan beri yazılanları takip edenler bilirler her yazımda, bana mektup yollayın, programlar hakkında fikirlerinizi belirtin, haberleşelim yahu demişimdir. Ama okuyucular sağ olsunlar, pek mektup göndermediler. Belki de millet yazacak bir şey bulamıyordur diye düşündüm, büyük bir programa başlayayım dedim. Yine çok az mektup geldi. Mektup yazanların ve program gönderenlerin hakkını yememek lazım hepsine tekrar teşekkürler. Zaten gelen mektupların tamamını dergide yayınladım. EFEKT için rutin (sadece Uğur Yıldırım) programlarını rutinlerimin içine ekledim. Yani gelen hiçbir şey ziyan edilmedi. Ama ne yapayım kader. Teknik yazar olmak zor bir şey. Her zaman az mektup ve soru gelir. Yani isim vermek istemiyorum, milletin köşesine (Arka Kapı, Nasıl isimse bu. Bari Çatı Katı deseydik.) ansiklopedi çıkaracak kadar mektup gelir bana gelen mektuplarla Cin Ali hikayesi bile çıkarılamaz. Neyse, hiç kimsenin derdi yok herhalde. Köşeyi ayrı bir ek halinde çıkarma fikri güzel fakat mali sorumlu ne düşünür bilmiyorum. Ama daha çok mektup gelirse sayfa sayım artabilir. Artmasa da daha çok okuyucuya hitap eden bir köşe haline gelir. Bu tamamen okuyuculara kalmış. Mektup için ler. Yazışmak isteyenler için Fatih'in adresi ve telefonu. Fatih ŞAHİN T.C.D.D. Dispeçer Tesisleri Şefliği 44080 Malatya Tel: 0422322 44 Mektuplarını bekliyorum. Ve yine o. Belalı adam. Yüzyılın en fikir üreten adamı. Onu anlatmaya kelime bulamıyorum, bulmak Evet. MUDER, Muder'in mektubu gayet uzun. Bir sürü fikirden bahsetmiş. Hiç birine burada değinmeyeceğim, belki aranızda tanıyan vardır, adamı öldürmek falan ister, yani sebep Omayayırr. Neyse ilk Muder sorusu; geçen sayılardan birinde alınan bilmem ne reklamında Claudia Schiffer kullanılmış. Resmini nereden bulmuşuz. Muder, o fotoğrafı ben çektim. İkinci soru Rainbow ile ilgili. Ekranda Rainbow yaratmak şu komutlardan yararlanabilirsin. Set Rainbow no,renk,uzunluk No : Rainbow'una vereceğin no. En fazla 4 adet rainbow tanımlama imkanın var. Bu yüzden. No değeri 0 ile 3 arasında olabilir-
Renk : Rainbow'un hangi renk üzerinden görüneceği. Bu değerde 0 ile 15 arasında verilebilir. (Normal Amiga sistemi bu şekilde bir kısıtlama getirmez.) Örneğin 2 değerini verip, siyahtan maviye geçiş yapılırsa ekranda 2 nolu renkle boyanmış bölgeler Rainbow'dan Uzunluk : Rainbow işlemi için kaç renkte geçiş yapılacağı bu değer ile belirtilir. Örneğin siyahtan maviye 32 renkte geçiş yapmak istiyorsan bu değer 32 olmalı. Uzunluk için 16 ile 65500 arası değer verebilirsiniz. RS,G$,E$ : Bu stringler Rainbow paleti içinde geçişinin hangi formüle uygun olarak yapılacağını belirler. Kullanılışı '(SatırAdım, Sayaç)" şeklindedir. Satır, aynı rengin kaç satır devam edeceğini, Adım rengin her seferinde kaç artacağı, Sayaç ise arttırma işleminin kaç defa yapılacağını belirler. Örnek vermem gerekiyor. İşte örnek : Set Rainbow Bu komut sayesinde 0. renk üzerinden 32 uzunluğunda bir Rainbow belirlemiş olursunuz. Satır deyimini Scan line deyimi yerine kullanıyorum. Renk tonlaması halinde Mavi $000'dan başlayıp $004'ye kadar gidecektir. Şimdi bunu nasıl hesapladım. Aşağıdaki tablo sizi mutlu eder umarım. ScanLine — Renk Scanline Renk
2 3 4 $000 8 $004 Rainbow no, RenkNo, Y Uzunluk
Komut Set Rainbow ile tanımlanan Rainbow'un ekranda görünmesini sağlar. No : Set Rainbow ile tanımlanan Rainbow'un nosu. Renkno : İlk olarak kaçıncı rengin ekranda gösterileceği, Y: Rainbow'un başlayacağı ekran koordinatı. (Pixel cinsinden) Uzunluk : Kaç Scan Line boyunca rainbow'un basılacağı. Bu değer Set Rainbow ile verilen uzunluktan fazla ise Rainbow ilk değerlerden itibaren yeniden basılmaya başlar. Yine bitti, belki görüşürüz. Hoşça kalın, ya da kalmayın, beni ilgi- TOLGA KAHRAMAN