1 Ocak 1988 Tarihli Commodore Gazetesi Sayfa 54

1 Ocak 1988 tarihli Commodore Gazetesi Sayfa 54
Metin içeriği (otomatik olarak oluşturulmuştur)

PRINT #ile de içlerine yeni bilgiler girilebilir. Yalnız burada bir sorun karşımıza çıkacaktır. Eğer buffer'da- ki bilgiyi oluşturan byte'lar arasında belli aralıklarla virgül, iki nokta üst- üste, RETURN kodu (13) gibi byte'- lar yoksa INPUT # sorun çıkaracak- tır, çünkü bu komut en fazla 88 ka- rakter uzunlugunda bilgi okuyabil- mektedir. Örneğin arka arkaya gelen 88 byte arasında yukarıda bahsedilen üç byte'dan biri yoksa bilgisayar ha- ta verecektir. Buna bir çözüm, buffer'ları byte byte okumaktır. Bu da GET # ile olur. Ancak bu komut da, eğer bir byte'ın değeri sıfır ise sorun çıkarır. Bu nedenle aşağıdaki gibi bir düzelt- me gereklidir: 100 GET*2,A$ 1101F A$-4 ” THEN A$ —- CHR$(0) Artık tek tek direkt blok komutla- rını görebiliriz... BLOCK-READ (B-R) Bu komut (Blok Okuma) ile daha önceden ayarladığımız buffer'ın içi- ne disketteki bir blokun okunmasını sağlarız. Komut 15 numaralı hatta ve komut kanalından gönderilmelidir. Ancak B-R komutu okunan blokun ilk byte'ını okumaz. Bu nedenle blo- kun tamamını okuyan Ul komutu kullanılır. Komutun formatı şu şekil- dedir: “Ul kanal araç track sector” Kanal numarası, buffer'ı isterken kullandığımız ikincil adrestir. Araç için 0 yazmamız gerekiyor. Eğer 1541 tek değil de çift sürücülü bir alet ol- saydı, buraya hangi sürücüyü kullan- mak istediğimizi yazacaktık Track ve Sector numaralarını da zaten biliyor- sunuz. Ancak bu sayıların hepsini on- luk sistemde yazmak gerekiyor. DISKMON 'daki gibi onaltılık sistem kullanmak hataya yolaçacaktır. Şimdi aşağıdaki örnek programa bir gözatın: 10 OPEN 1,8,15 20 ÖPEN 3,8,2,'$* 30PRINI |1, “Ul 2018:0” 40 GET*4*3 A$ 50 PRINT ASC(A$) ASC(B$) 60 CLOSE 3 20 CLOSE 1 Sonuç olarak 18 ve 1 sayılarını gö- receksiniz. Şimdi neler olduğunu açıklayalım. Önce 15 numaralı komut kanalını açıyoruz. Sonra da 2 numaralı kanal- dan bir buffer istiyoruz. Buffer gel- dikten sonra da, 18 0 numaralı Track'ı (yani directory zincirinin ilk halkasını) buffer'a okutuyoruz. Ar- kasından, buffer'ın ilk iki byte'ını A$ ve B$ içine okuyoruz. Aslında bu iki byte üzerinde daha önce gördüğümüz sıfır byte'ını düzeltecek kontrolu yap- mamız gerekirdi. Ancak sonucu ön- ceden bildiğimiz için buna gerek gör- medik. Son satırda da gelen byte'la- rı sayıya çevirip ekrana yazıyoruz. Directory'de 18/00'dan sonra gelen blok 18/1 olduğu için yukarıdaki so- nucu elde ediyoruz. Sonunda da ka- nalları kapatıyoruz. Yukarıdaki programın 40-50 satır- larını silip aşağıdaki satırları yazın: 40 FOR I— 70 256 45 GETİt3,A$ 50 PRINT A$; 55 NEXT I . Şimdi de, 18/0'daki tüm byte'ları karakter şeklinde göreceksiniz. An- LOCK-WRITE (Blok Yaz) bilgileri değiştirip yazmamızı sağlar. Önemli ve aynı zamanda tehlikeli olabilecek bir komuttur bu. cak bu karakterlerin bu kısmı Com- modore 64 için kontrol karakteri ye- rine geçtiğinden ekranda komik şey- ler olabilir. Gene de arada bazı anla- şılır karakter dizileri olduğunu göre- ceksiniz. Örneğin disketin adı ve ID”- si gibi. Aşağıdaki değişikliği yapar- sanız, karakter yerine byte değerlerini görürsünüz: 50 PRINT ASC(A$ 4 CHRS(0)); Doğrudan ASC(A$) yazmadığımı- zı ve böylece kendimizi A$'in boş ol- ması durumunda ASC fonksiyonu- nun yaratacağı hatadan korumuş ol- duğumuzu görüyorsunuz. Eğer okuduğumuz blokun tamamı- nı karakter veya sayı olarak listele- mekten başka bir şey yapamıyor ol- saydık, bu komut pek bir işe yara- mazdı. Öyleyse, bir başka komutu görelim... BUFFER-POİNTER (B-P) Bu komut (depo göstergeci) ile, buffer'a okuduğumuz bloktaki byte'- ları herhangi birinden itibaren oku- maya başlamamız sağlanıyor. Örne- ğin, geçmiş bölümleri hatırlarsanız, disketin adı 18/0'da 144. byte'dan iti- baren 16 byte'lık bir alan kaplıyor- du. Önce B-P komutunun genel for- matını görelim, sonra da disketin adı- nı, 18/0'daki diğer byte'ları okuma gereği olmadan nasıl izole edebilece- ğimize bakalım: “B-P kanal pozisyon” 10 OPEN 1,8,15 20 ÖOPEN 3,8,2, 7444 30 PRİINT #1,“Ul 2018 0” 35 PRINT#1,“B-P 2 144” 40 FOR I=1 TO 16 45 GET 46 1F A$ CHRS(IÖO) THEN 60 50 PRINI A$; 5SS NEXT I 60 CLOSE 3 70 CLOSE | Görüldüğü gibi, önce 18/0'ı oku- duk ve ikinci kanalın buffer'ının gös- tergecini 144. byte'ın üzerine getirdik. Sonra da, disketin adını ya 16 karak- ter oluncaya ya da SHIFI-SPACE'in karakter kodu olan 160'a rastlayın- caya kadar okuduk. B-P ile göstergeci ılerı geri oynat- makta hiçbir mahsur . 144'e ge- tirip disketin adını okuduktan sonra 0'a getirip bir sonraki Track numa- rasını öğrenebiliriz. Yani, buffer'ın içeriğini baştân aşağı seri yöntemle inceleme zorunluluğumuz yok. BLOCK-WRITE (B-W) Bu komut (Blok Yaz) ise, buffer'- daki bilgileri değiştirip disketin üze- rine yazmamızı sağlıyor. Önemli, ama kullanımı tehlikeli olabilecek bir komut. Eğer disketin üzerinde yan- lış bir yere yanlış bir byte yazarsanız, programlarınızı ve hatta disketinizin tümündeki bilgileri kullanamaz hale gelebilirsiniz. Bizden söylemesi... B-W komutu da B-R gibi buffer'- in ilk byte'ında hata yaratmakta. Bu nedenle onun yerine U2 kullanılır. Formatına gelince: “U2 kanal araç track sector”” Dilerseniz bunun örneğini disketin adını değiştirerek görelim: 10 OPEN 1,8,15 20 ÖPEN 3,8ş2,; © *” 30 PRINTA4 1,“U1l 2018 0” 35 PRİNT*#-1,“B-P 2 144*” 36 A$ - “DENEME” 40 IF LEN(A$) <16 THEN A$- A$ * CHRS$(160):

Bu sayıdan diğer sayfalar: