Amiga Dünyası sayı 23, sayfa 32

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 32

Merhaba! Bir ay aradan sonra tekrar birlikteyiz. Bu ay yine birtakım library fonksiyonlarını öğreneceğiz. Biliyorum, her seferinde library fonksiyonları öğrenmek biraz sıkıcı. Fakat bunları şimdiden öğrenirsek ilerde program yazmaya başladığımızda pek fazla açıklama yapmama gerek kalmayacak. Bu yüzden bana biraz daha sabırlı olmanızı dilemek ve hemen yeni fonksiyonlar tanıtmaya başlamak kalıyor. Bu ay tanıtacağım library fonksiyonlarını biraz daha düzenli olarak başlıklar altında topladım. Bu sayede, bir fonksiyonun açıklamasını aradığınızda daha rahat bir şekilde bulabilirsiniz. Hemen başlıyorum..

IOErr Bu fonksiyon dos library'sinde bulunmaktadır. Kullanımı da çok basit. Çağırırken hiçbir parametre gerektirmiyor. Library ofseti -132 (=-$84) olan bu fonksiyonun işlevi de hayli yararlı. Herhangi bir giriş/çıkış fonksiyonunu çağırdığınızda bir hata oluşmuşsa, IOErr fonksiyonu bu hata hakkında daha ayrıntılı bilgi verir. Library'de giriş/çıkış işlemlerini gerçekleştiren fonksiyonlar hata oluşması durumunda çağrıldıktan sonra d0 register'ine 0 yazarlar. Böyle bir durumda sizin ayrı bir rutine dallanıp burada IOErr ile hatayı algılayıp kullanıcıyı uyarmanız gerekmekte. Fonksiyon çağrıldıktan sonra d0'da hata mesajını tanımlayan bir sayı bulunur. Bu sayı 0 olduğunda hiçbir hata oluşmamış demektir. Aşağıda IOErr fonksiyonunun gösterdiği hatalar kod numaralarıyla listelenmiştir.

103 - insufficient free store: Kullanıma ayrılmış hafıza doldu. FreeMem ile hafıza boşaltın ve tekrar deneyin.

121 - file is not an object module: Çağırmaya çalıştığınız dosya çalıştırılabilir dosya (executable) değil. Kontrol edin.

202 - object in use: Başka bir task ya da program bu file'ı kullanıyor. Aynı anda çalışan diğer taskların ya da programların bu file'ı UnLock ettiklerinden emin olun. Bir dosyayı shell ya da CLI üzerinden çalıştırdığınızda da bu hata oluşabilir. Bu durumda shell/CLI'ı kapamanız gerekmekte.

203 - object already exist: Yaratmaya çalıştığınız dosya ile aynı isimde başka bir dosya diskette zaten mevcut. İsim değiştirerek tekrar deneyin.

Cem GENCER 204 - directory not found: Belirtilen isimde directory bulunamadı. Bu hatayı engellemek için ilk önce directory'nin var olup olmadığını kontrol edin.

205 - object not found: Belirtilen isimde dosya bulunamadı. İlk önce dosyanın varlığını kontrol ederseniz bu hata oluşmaz.

209 - action not known: Böyle bir işlem tanınmıyor. Saçma bir komut girerseniz bu mesajla karşılaşabilirsiniz. 210 - invalid stream component name: File ya da directory isminde geçerli olmayan bir karakter kullanılmış. Düzeltip tekrar deneyin.

211 - invalid lock: File lock'ta elde ettiğiniz lock değeri geçerli değil.

212 - object wrong type: Çalıştırmaya çalıştığınız dosyanın file tipi yanlış. Bu hata bir device ismini (mesela ram:) program ismi olarak kullanmanızda oluşabilir.

213 - disk not validated: Bilgisayar diskete bilgi yazarken disketi çıkardığınızda, o an yaratılan dosya kapanamaz. Bu durumda her disketi takışınızda sizden boot ettiğiniz disketi takmanızı ister. Böyle bir diskete yazmaya kalkıştığınızda da bu hatayı alırsınız. WorkBench ya da içerisinde Disk-Validator dosyasının bulunduğu (L directory'sinde) bir disket yardımıyla disketi tekrar düzeltebilirsiniz. Fakat son yaratmaya çalıştığınız dosya boş dosya olur.

214 - disk write protected: Disketin write protect deliği açık konumdayken diskete yazmaya kalkıştığınızda bu hata kodunu alırsınız.

215 - rename across devices: Rename işleminin device isimlerini farklı girerseniz bu hata kodunu elde edersiniz. Normalde rename işleminde farklı isim ve/veya farklı directory girilebilir. Farklı directory ismi girdiğinizde file, eski directory'den silinip yeni directory'nin içerisine yazılır. Fakat bu işlemi device'larla yapamazsınız.

216 - directory not empty: Boş olmayan bir directory'i silmeye kalkıştığınızda bu mesajı alırsınız.. İlk önce o directory içerisindeki tüm dosyaları silin, ardından directory'i silebilirsiniz.

218 - device not mounted: Verilen isimde bir device sisteme mount edilmemiş ya da takılı değil.

219 - seek error: Dos library'sinden Seek fonksiyonunu hatalı bir parametre ile çağırdığınızda bu kodu alabilirsiniz. Seek fonksiyonunu da bu ay tanıtacağımdan daha ayrıntılı bilgi için daha aşağılara bakmanızı öneririm.

220 - comment too big: Bir file'ın comment'ını (dosya notu) değiştirmeye kalkıştığınızda, not string'i izin verilenden uzun ise bu kod karşınıza çıkacaktır.

221 - disk full: Disket dolmak üzereyse ya da dolmuşsa ve bu diskete yeni bir file yazmaya kalkıştığınızda bu kodu elde edersiniz.

222 - file is protected from deletion: File project'i silmeye karşı korumalı olan bir dosyayı silmeye kalkıştığınızda bu hata kodunu alabilirsiniz.

223 – write protected: File protect'i yazmaya karşı korumalı bir dosyaya yazmaya kalkıştığınızda IOErr fonksiyonu bu hata kodunu verir.

224 - read protected: File protect'i okumaya karşı korumada olan bir dosyayı okumaya kalkıştığınızda bu kodu elde edersiniz. KickStart 1.2 ve 1.3'lerde bu protect modu daha tamamlanmadığından bu mesajı da almanız çok zor…

225 - not a dos disk: Disket sürücüsüne takılan disket DOS formatında değil.

226 – no disk in drive: Erişmeye çalıştığınız disket sürücüsünde disket takılı değil.

Delay: Bu fonksiyon da dos library'sinden. Ne işe mi yarıyor? Gayet basit, belli bir süre beklememizi sağlıyor. Bekleme süresini 1/50 saniye olarak d1'e yazmamız ve fonksiyonu -198 (=-$c6) library ofsetiyle çağırmamız yeterli.

ExNext: İşte yine bir dos fonksiyonu daha! Geçen ay öğrenmiş olduğumuz Examine fonksiyonu sadece bir directory'nin directory header'ını elde etmemizi sağlıyordu. ExNext fonksiyonu ise directory header'a bakarak burada yer alan ilk file'a ait header'ı bulmamızı sağlıyor. Bu fonksiyonu ardarda çağırdığımızda her seferinde o directory'deki bir sonraki file'a ait header'ı elde ederiz. Bu şekilde de istediğimiz directory'nin içeriğini okuyabiliriz. ExNext'in parametreleri Examine ile aynı. Filelock'u d1'e, boş fileinfoblock'un adresini de d2'ye yazıyoruz. Fonksiyonu çağırmak için kullandığımız ofset de -108 (=-$6c). ExNext fonksiyonu, directory'e ait başka file yoksa d0 register'ına 0 yazar. Tam bir directory alabilmek için ExNext fonksiyonunu, directory'deki tüm file header'ları okuyuncaya kadar tekrarlamalısınız.

Aşağıdaki kısa alt rutin directory'i okur. Rutini doğru kullanmak için başlangıçta gerekli library'leri açmalısınız. Program

AMIGA ASSEMBLER

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