Relatif kelimesi de buradan gelmek- te. Aranan kayıt, dosyanın başlangıç adresine oranla (relatif veya göreceli olarak) bulunmakta. Relatif dosya kullanımını aşağıda- ki taslağa göre biçimlendirebiliriz: Bir relatif dosya hazırlamak: 1) Dosya açılır ve bu arada bir kay- dın kaç karakter uzunlukta olduğu belirtilir 2) Başlangıç için kaç tane kayıt için yer ayrılması gerektiği bildirilir. 3) Dosya kapatılır. Açılmış bir relatif dosyaya yeni bir kayıt yazmak: 1) Dosya açılır. 2) Yeni kaydın kaç numaralı kayıt olduğu bildirilir. 3) Kayıt yazılır. 4) Dosya kapatılır. Açılmış bir relatif dosyadan eski bir kaydı okumak: 1) Dosya açılır. 2) Okunacak kaydın kaç numaralı kayıt olduğu bildirilir. 3) Kayıt okunur. 4) Dosya kapatılır. Genel hatlarını bu şekilde verebi- leceğimiz olayın ayrıntılarına girelim artık. Relatıf dosya açarken de OPEN komutunu kullanıyoruz. Önce genel formatını görelim: OPEN dn,8,ia,*dosya,L,” * CHR$(uzunluk) ““DN”'(dosya numarası) ve “İA” (ikincil adres) parametrelerini sıralı dosyalardan biliyorsunuz. Geçen - yımızda da belirttiğimiz gibi “ia” ile belirlediğiniz ikincil adres aracılığı ile DOS'a bir kanal ayırmasını söylüyor- sunuz. Ve gene geçen bölümümüzde söylediğimiz gibi, dosyalara ayrılabi- lecek en fazla üç kanal olduğu için aynı anda iki relatif dosyanın açık ol- ması imkansız. Çünkü relatif dosya- lar, bu yazının ileri bölümlerinde gö- receğiniz nedenlerle, iki kanal birden kullanır. Bu nedenle, eğer.bir relatif dosya açıksa en fazla bir de sıralı dos- 64 ya açık olabilir. Tabii bu, iki relatif dosyayı aynı anda kullanamazsınız demek değil... Yapacağınız, ikincisini kullanmadan önce, birincisini CLO- SE ile kapatmak. Biz yine OPEN komutumuza dö- nelim. Dosya adından sonra yazdığı- mız L harfi, DOS'a verdiğimiz isim altında relatif dosya açmasını belir- tir. Arkasından gelen byte'da da dos- yanın bir kaydının kaç karakter uzunluğunda olduğu saklıdır. Dik- katli okuyucular hemen görmüşler- dir. Bir kaydın uzunluğunu vermek için CHR$ komutunu kullanıyoruz. Ancak CHR$'in parametresi Ü-255 arası bir değer alabilir. Demek ki, da- ha uzun kayıtlar kullanamıyoruz. As- lına bakarsanız relatif dosyalarda herbir kayıdın uzunluğu en az 1, en fazla da 254 karakter olabilir. Bir başka deyişle, hiçbir kayıt bir blok- tan uzun olamaz. Eh, bir blok 256 karakter aldığına ve bunların ilk iki- si dosyada bir sonra gelen blokun ad- resini gösterdiğine göre bize 254 byte yer kalıyo! Örneğm K adında bir relatif dos- ya açalım. Bu dosyanın içine stok bil- gilerimizi yazalım. Stoktaki her ka- lem mal için saklanacak bilgiler ve uzunlukları da şöyle olsun: Kayıt numarası: 4 basamak İsim: 15 karakter Mal kodu: 5 karakter Alış fiyatı: 6 basamak Satış fiyatı: 6 basamak 44 1545464 6-36 karakter eder. Demek ki, her kaydımız 36'şar ka- rakter uzunluğunda olacak. Şimdi böyle bir dosya yaratalım. OPEN 1,8,2,“K,L,” 4 CHRS$(36) Şimdi, dosya açmanın ikinci adı- mına geçelim. Ne demiştik? Başlan- gıç olarak kaç tane kayıt için yer ay- rılması gerektiğini bildirmeliydik. Bu- nun için de yapacağımız iş, DOS'a son kayda bir şey yazmasını istemek olacak. Başlangıçta hiçbir kayıt yok- tu ve dosyada da yeni kayıtlar için hiçbir yer ayrılmamıştı. Ancak diye- lim ki biz 100 numaralı kayda bir şey ” yazmak istedik. Bu durumda DOS'- un yapacağı iş, önce RECORD NOT FOUND hatasıniı vermek (ki, bunu hiç dikkate almıyoruz. Çünkü DOS, hata vermesine rağmen işine devam ediyor) ve sonra da 1-100 arası kayıt- lar için yer hazırlamak olacaktır. En sonunda da 100 numaralı kaydın üze- rine istediğimiz bilgiyi yazacaktır. Demek ki, relatif dosya açmak ile re- latif dosyaya bir kayıt girmek birbi- rine çok yakın. Öyle ise sırasi gelmiş- ken, relatif dosyaya nasıl yeni kayıt- lar girdiğimizi de görelim Önce DOS'a hangi kaydı yazmak istediğimizi belirtmeliyiz. Bunun için önce 15 numaralı komut kanalını açı- yoruz. Tabii, daha önce programın başında açmamışsak. Geçen bölüm- de bu kanalın açılması ve kapatılması ile ilgili söylediklerimizi hatırlayın. Neyse, açık olan komut kanalından da aşağıda gördüğünüz biraz uzunca bir komutu gönderiyoruz: PRIİNT# dn,“P” 4 CHRS$(a) * CEHERS$(k1) 4 CHRS(k2) * CHR$(byte) “dn” ile komut kanalının bağlı oldu- ğıı dosya numarasını kastediyoruz. #tia' ıse, relatif dosyanın bağlı oldu- gu ikincil adres. Sıra geldi kl ve k2 parametrelerine... Bir relatif dosya- da, disketin hafızası yettiği sürece, en fazla 65535 kayıt yeralabilir. Bunu ancak iki byte halinde verebiliriz, çünkü her byte 0-255 arası değer ala- bilir. Dolayısı ile kayıt numaramızı öyle iki parçaya ayırıyoruz ki, k1 4 256*k2 işlemi sonunda kayıt nu- marasını elde edebilelim. Bu tür işle- mi bundan önce de defalarca yaptık. “byte” parametresi ise, verilen ka- yıt numarası altında saklanan bilgi- nin kaç numaralı byte'ından itibaren okuma veya yazma işleminin yapıla- cağını belirtir. Bu genellikle | olacak- tır, Çünkü kaydı baştan okumak da- ha mantıklı. Ancak, kimi durumlar- da (örneğin sadece mal kodu gibi belli