ФАЙЛИ ПРЯМОГО ДОСТУПУ У Бейсік ВВС

Система ВВС підтримує роботу з файлами прямого доступу при наявності дисковода для гнучких дисків Повний ідентифікатор файлу має наступний вигляд:

: Дисководимя_справочникаимя_файла де:

дисковод номер від 0 до 3, що ідентифікує фізичний дисковод імя-довідника – один символ, що ідентифікує окрему групу файлів на диску имя_файла – імя файлу, до складу якого входить до семи символів

Нижче наведені приклади допустимих імен:

: 1AONEPROG

: 0 $DATA1

Якщо імя довідника і номер дисковода не вказані, то за замовчуванням маються на увазі поточні значення цих параметрів Ці значення зображуються в роздруківці з відомостями про всі файлах на поточному диску, видаваної по команді * САТ Ці значення можуть бути змінені командами

* DIR змінює поточний довідник файлів * DRIVE змінює поточний дисковод

Імена файлів в операторах OPENIN і OPENOUT відносяться до поточного дисковода та поточного довідника

Оператор OPENIN відкриває файл для читання і запису в режимі прямого доступу, наприклад: 10 N = OPENIN (DAFILE)

10   CHAN=OPENIN(A$)

де А $ містить імя файлу

При створенні файлу оператором OPENOUT дискова файлова система резервує 64 сектора по 256 байт, тобто 16К байт Для кожного відкритого файлу в памяті ЕОМ резервується буферна область розміром в 256 байт Одночасно можуть бути відкритими до пяти файлів Обмін даними між буфером і диском здійснюється автоматично залежно від значення, присвоєного PTR #

При роботі з файлами прямого доступу можна користуватися всіма операторами, описаними в підрозділ 844 і 847 На додаток до них передбачені новий файловий оператор і функція PTR #, що дозволяє вибирати для подальшого читання або запису будь-який байт файлу Тим самим представляється можливість прямого доступу до області зберігання файлу на байтовому рівні Наприклад, оператор

100 PTR # M = 10 встановить покажчик позиції у файлі на байт 10, а оператор

100 PTR # M = NUM ​​встановить покажчик позиції у файл на байт з номером NUM оператор

100 PTR # M = PTR # M + 22 перемістить вказівник файлу на 22 байта від попереднього значення

оператор

100  PRINT PTR#M

надрукує поточне значення покажчика файлу Обміни даними між буфером і диском здійснюються залежно від значення PTR # Якщо воно дорівнює 5000, то в буфер зчитується 20-й сектор, що містить байти з 4864-го по 5119-й, і читання або запис відбуватимуться, починаючи з байта 5000 Проте в межах буфера покажчик файлу можна переміщати, не викликаючи нового обміну з диском Таким чином, концепція прямого доступу до файлу повністю орієнтована на побайтовую передачу даних Значення речових числових змінних записуються в пять байтів, а цілих – в чотири, і перед кожною такою серією байтів записується ще один байт, що ідентифікує тип значення Рядки записуються у вигляді послідовності складових їх символів, перед якою записується ще Два байти – один для ідентифікації строкового значення, а другий містить довжину рядка За допомогою операторів BGET # і BPUT # значення можна зчитувати і записувати по одному байту Оператор BPUT посилає один байт

файл в позицію, визначену поточним значенням покажчика файлу, а BGET читає байт з файлу

Наприклад, оператори

10  BPUT#N, 8

10   BPUT#N,A$

запишуть значення 8 або перший символ рядка А $ в позицію файлу, яка визначається поточним значенням покажчика А оператор

10 X $ = BGET # N вважає байт з файлу в Х $

Якщо у файлі повинна зберігатися, нерегулярна суміш значень числових змінних, рядків символів і байтів, то частина файлу треба виділити під довідник, який буде зчитуватися в масив негайно ж після відкриття файлу У цьому масиві повинні реєструватися початкові позиції всіх елементів даних файлу В іншому випадку можна зберігати формат логічного запису з фіксованою довжиною, містить кілька елементів Наприклад, логічна запис довжиною в 19 байт може містити два числових значення за 5 байт у кожному і рядок з 5 байт разом з однобайтового заголовками у числових значень і двобайтовим заголовком перед рядком Якщо номер такої логічної запису (0, 1, 2, 3, ..) міститься у змінній REC, то для вилучення необхідної записи в буфер можна скористатися оператором

50   PTR#M=REC*19

У наводиться прикладі поточна позиція встановлюється на байт 100 файлу DAFILE, а потім друкуються наступні 10 байт (символів):

10 REM ПРИКЛАД РОБОТИ З ФАЙЛОМ DAFILE

20 N=OPENIN(&quotDAFILE&quot)

30 РТР # N = 100

40 FOR I=1 TO 10

50   PRINT GET#N

60   PTR#N=PTR#N+1

70 NEXT I

80 CLOSE#N

90 END

Оператори INPUT і PRINT діють послідовним чином, але ними можна користуватися для читання і запису даних, починаючи з позиції, на яку показує поточне значення покажчика файлу, наприклад:

50   PTR#N=50

60 INPUT # N, А, В, С $

або

50   PTR#N=1000

60 PRINT # N, А, В, С $

При акуратній роботі і, можливо, за рахунок збереження у файлі схеми розміщення даних можна домогтися достатньої легкості читання і запису логічно повязаних наборів значень

Файлова функція EXT # (N) повертає довжину файлу в байтах: L = EXT # (N)

8 64 ФАЙЛИ ПРЯМОГО ДОСТУПУ В СИСТЕМІ PET ФІРМИ COMMODORE

Загальний метод доступу до дискових файлів в системі PET, а саме використання для каналу дискових команд вторинного адреси 15, зчитування реакції на команди по цьому ж каналу, і використання для обміну даними каналів 2-14 вже були описані в підрозділ 846

При роботі з файлами прямого доступу потрібна явним чином користуватися буфером в 256 байт, виділеним для кожного файлу Для цього за допомогою операторів PRINT по каналу команд 15 треба вимагати від дискового контролера передачі блоку з диска в буфер або назад Дані можуть бути лічені в буфер або записані з нього в файл за допомогою операторів INPUT # і PRINT #

Спосіб доступу до диску за допомогою команд досить складний Він виконується на основі адресації по доріжках і секторах, причому кожен сектор містить 255 байт даних і на 35 доріжках стандартного дисковода (Моделі 3040) поміщається від 17 до 21 секторів Таким чином, якщо Ви зберігаєте по одному запису в блоці розміром 255 байт, то Вам зазвичай треба посилатися на конкретну запис по її номеру, який програма повинна перетворювати в номер доріжки і номер сектора Максимальне число доступних блоків одно 670 За бажанням в одному блоці можна зберігати по два записи або більше Так як в буфері передбачений покажчик, забезпечує читання або запис окремих частин буфера, починаючи з зазначеної покажчиком позиції, то з його допомогою можна отримувати доступ до окремих записів з блоку Інформація розташовується на диску у напрямку від зовнішньої доріжки з номером 1 до внутрішньої доріжці з номером 35 таким чином: кожна з доріжок з 1-й по 17-ю містить по 21 сектору доріжка 18 містить 20 секторів, але користуватися нею не можна, так як на ній зберігається довідник файлів доріжки з 19-ї по 24-у містять по 20 секторів, доріжки з 25-ї по 30-у – по 18 секторів, а доріжки з 31-ї по 35-у – по 17 секторів Всього виходить 690 секторів, з яких для даних, за вирахуванням 20 секторів довідника файлів, залишається 670 секторів

У дискової системі PET передбачений багатий набір команд, що дозволяють виконувати дуже складні маніпуляції Нижче наведена схема роботи з диском в припущенні, що в кожному блоці зберігається по одного запису При цьому окремі дії можуть бути реалізовані у вигляді підпрограм Для застосування у великих програмах

(А) Відкрити файл прямого доступу з логічним номером С і для більшої зручності з вторинним адресою С в діапазоні 2 .. 14:

10 OPENC, 8, C # (Відкрити файл і зарезервувати буфер) 20 OPEN 15, 8, 15 (відкрити канал команд)

(Перевірити реакцію системи на наявність помилки)

(Б) Вважати запис Спочатку номер запису перетвориться в номер доріжки і номер сектора S номер дисковода D має дорівнювати 0 або 1:

(Перетворити номер запису в Т і S)

100 PRINT # 15, U1: C D T S (вважати блок з диска в буфер)

110 PRINT # 15, B-P: C 1 (встановити покажчик буфера на його початок)

(Перевірити реакцію системи на наявність помилки) 120 INPUT # C, список елементів

(Прочитати значення з буфера)

(В) Зробити запис: (перетворити номер запису в Т і S)

200 PRINT # 15, U1: C D T S (вважати блок з диска в буфер) 210 PRINT # 15, BP: C 1 (встановити покажчик буфера на його початок)

(Перевірити реакцію системи на наявність помилки) 220 PRINT # С, список елементів (записати дані в буфер)

230 PRINT # 15, U2: C D T S (вивести буфер на диск) (перевірити реакцію системи на наявність помилки)

(Г) Закрити файл:

300 CLOSE З 310 CLOSE 15

Джерело: Уолш Б Програмування на Бейсике: Пер з англ М: Радіо і звязок, 1988 336 с: ил

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*