Commodore sayı 23, sayfa 55
Sayfanın metni

Sayfa 55

GOTO 40 50 PRINT 55 1,“U2 2 0 18 0” 60 CLOSE 3 65 PRINT 70 CLOSE İ

Bildiğimiz yöntemlerle 18/0'ı buffer'a okuyup 144. byte'ına geliyoruz. A$'in içinde duran yeni disket adını 160 byte'ı ile 16 karaktere tamamlıyoruz. Daha sonra da 50. satırda buffer'a geri yazıyoruz. Satırın sonundaki noktalı virgüle dikkat! Eğer o olmazsa, ismi oluşturan 16 karakterin arkasına bir de 13 ($0D, RETURN karakterinin kodu) byte'ı eklenir, ki bunu pek de istediğimiz söylenemez. 55 numaralı satırda ise, gerçek yazma işlemini yapıyoruz ve buffer'daki yeni bilgiyi olduğu gibi 18/0'a geri yazıyoruz. Disketi initialize ederek, 1541'in disketin yeni adının farkına varmasını da sağladıktan sonra işimizi bitiriyoruz. Directory'i yükleyerek kontrol edin isterseniz...

BLOCK-ALLOCATE (B-A)

Eğer geçmiş iki bölümümüzü izlemişseniz, bu komutun ne işe yaradığını hemen anlamışsınızdır. Disketin saklı duran blok haritasında belli bir bloku dolu göstermek istersek bu komutu kullanmalıyız. Diskete bir program SAVE ettiğinizde, programın kapladığı bloklar otomatik olarak 1541 tarafından BAM'da dolu olarak işaretlenir. Daha sonra diskete yazılacak bir dosya, bu bloklara dokunmaz. Ancak biz normal yolların dışında diskette bir bloğa bir şey yazmışsak, bu bloğu korumamız gereklidir ve bu otomatik olarak yapılmaz. İşte burada imdadımıza B-A yetişir. Formatını bir görelim:

“B-A araç track sector”

Eğer dolu olarak işaretlemek istediğimiz blok daha önceden böyle işaretlenmişse, 65,NO BLOCK,TR,SE mesajı hata kanalında belirir. Burada, TR ve SE ile 1541 bize hâlâ boş duran bir sonraki en yakın blokun adresini vermektedir. Eğer diskette boş görünen bir blok yoksa, bir başka deyişle BAM'da bütün bloklar dolu olarak işaretlenmişse, TR ve SE sıfır olarak geri dönecektir.

Peki, dolu olarak işaretlemek istediğimiz blok aslında disketin üzerinde yoksa ne olacak? Örneğin 10. 82. Sector'ünün diskette olmadığını biliyoruz. Bu durumda da 66,ILLEGAL TRACK OR SECTOR,10,82 mesajını alırız.

Bu gördüklerimizi küçük bir örnekte uygulayalım:

100 OPEN 1,8,15 110 INPUT “TR,SE”;T;S 120 PRINT #1,“B-A 0”;T;S 130 INPUT #1,A,B$,TR,SE 140 IF A—0 THEN 190 150 IF A<>65 THEN PRINT A,B$,TR,SE: GOTO 210 160 IF TR-0 THEN PRINT “BOŞ BLOK GOTO 210 170 IF TR- 18 THEN TR - 18:SE-0 180 T-TR:S—-SE:GOTO 120 190 PRİNT T;S; “DOLDU!” 200 #1,“1” 210 CLOSE 1

Neler yaptık?.. Önce komut kanalı açılıyor. Görüldüğü gibi bir blok okumayacağımız için buffer'a ihtiyacımız yok. 110'da dolu gösterilecek Track ve Sector kullanıcıdan alınıyor.

Şu ana kadar

anlatılan komutlar

pratik, herkesin

kullanabileceği

komutlardı. Şimdi sıra geldi profesyonel olanlara.

Sonra da komut kanalından 1541'e B-A komutu gönderiliyor. 120. satıra dikkat! Track ve Sector numarasını değişken olarak da yazabiliyoruz!.. 130'da da hata mesajını okuyoruz. Eğer hata yoksa, 190'a gidip hangi blok için işaretleme yapıldığını gösteriyoruz. Ancak hata mesajı varsa ve bu 65 numaralı mesaj değilse, 150. satırda mesajı yazıp çıkıyoruz. Eğer 65 numaralı mesaj gelmişse, ama TR numarası 0 ise boş blok kalmamış demektir ve 160. satırda program biter. 170'e geldiğimizde, hata mesajının bir sonraki blok olarak directory zincirinden bir blok seçmesi olasılığına karşı önlem alıyoruz. 180'de de, tüm işlemi bir de yeni blok için deniyoruz. Sonuç olarak, ya kullanıcının verdiği ya da ona en yakın blok (eğer hâlâ boş blok varsa) dolu olarak işaretleniyor ve kullanıcı olup bitenden haberdar ediliyor. Peki, bu dolu olarak işaretlediğimiz, ama aslında bir dosyanın parçası olmayan bloklar ne zamana kadar böyle korunabilirler? Bir sonraki VALIDATE komutuna kadar! Çünkü bu komut, bir dosyaya ait olmayan her bloku boş olarak işaretlemektedir. Dolayısıyla, birbirinden kopuk bloklar kullandığınız disketlerinizi OPEN 1,8,15,“V”:CLOSE 1 ile validate etmemeniz tavsiye olunur...

BLOCK-FREE (B-F)

Bu komut, B-A'nın tam tersi. Daha önce dolu olarak işaretlenmiş (ya sizin tarafınızdan, ya da otomatik olarak) bir bloku tekrar boş göstermeye yarar. Formatı da hemen hemen aynı:

“B-F araç track

Örnek mi istersiniz?..

10 OPEN 1,8,15 20 PRINT #1,“B-F 0 10 10” 30 PRİNT #1,“1” 40 CLOSE |

10/10 numaralı bloku boş gibi gösterdik. Eğer blok daha önce de boşsa, bu bir hata mesajına yolaçmayacaktır. Ama 10/80'i boşaltmaya çalışsaydık. 66 numaralı mesaj gelirdi. Eğer bu komutu kullanarak, bir dosyayı oluşturan bloklardan birini boş göstermişseniz, daha sonra bu diskete bir başka dosya SA VE ettiğinizde, bu blok yeni dosya için kullanılabilir. Bu durumda, eski dosyayı oluşturan blok zinciri kopacaktır ve o dosyanın geri kalan bloklarını hiç geri gelmemek üzere kaybetmiş sayılırsınız. Eğer yeni dosyayı göndermeden validate yaparsanız, eski dosyaya ait bloklar tekrar dolu olarak işaretlenecektir.

BLOCK-EXECUTE (B-E)

Şu ana kadar kullandığımız komutlar her eve lazım, pratik, herkesin kullanabileceği komutlardı. Bundan sonra gelenler ise, profesyonel kullanımlar için. Makina dilini ve en önemlisi 1541'in işletim sistemini, örneğin DOS dökümünü iyi bilmeyi gerektiriyor. Biz burada sadece komutları kısaca açıklayacağız. Böylece ne tür komutlar olduğunu görebilirsiniz. Eğer daha derine inmek ve 1541'e açık kalp ameliyatı yapmak isterseniz, TELETEKNİK'ten bulabileceğiniz “Insight the 1541” kitabına ve özellikle bu kitaptaki DOS dökümüne başvurmanız gerekiyor. Tabii İngilizce biliyorsanız... B-E ile disketteki bir bloktan bir makine dili programı 1541'in buffer'- ına yüklemek ve orada çalıştırmak mümkün. Formatı:

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