Язык программирования Форт


Глава 10. Хранение программ и данных - часть 16


Определите слово , которое действует по аналогии с CMOVE>. 11. Можете ли вы определить новое слово, которое производит копирование "вперед" () в зависимости от того, перекрываются или не перекрываются области исходных блоков и область назначения скопированных блоков?

Хранение данных в блоках

Мы уже несколько раз говорили о том, что поскольку Форт в большинстве своих версий не использует файлы операционной системы, то хранить данные, как в файлах, хотя и трудно, но все же возможно. Практически хранение данных в блоках обладает большей гибкостью, чем хранение в файлах, хотя следует признать, что нужно приложить некоторые усилия, чтобы вести учет блоков и связей между блоками. Более того, можно сконструировать файлы, основанные на концепции блоков, и директорию (справочник), которая используется так же, как директория операционной системы. Сначала рассмотрим хранение данных. Простейший способ запомнить данные в блоках состоит в том, чтобы поместить массивы в буферы диска, откуда их можно переместить для хранения на диск. Предположим, что у вас имеется массив, который вы создали таким образом: CREATE TESTARRAY 20 , 26 , 326 , 999 , 228 ' т.е. 10-байтовый массив с пятью 16-разрядными числами. Вы можете сохранить содержимое массива на диске с помощью TESTARRAY 50 BLOCK 10 CMOVE UPDATE а для извлечения данных из массива с диска можно использовать 50 BLOCK TESTARRAY 10 CMOVE

Конечно, из всего блока мы использовали всего 10 байтов. Вы можете сохранить на диске в каждом блоке до 102 таких 5- элементных массивов с номерами 0 - 101. Для этого определим сначала две переменные: VARIABLE STORBLK VARIABLE ARRLEN и инициализируем их: 50 STORBLK ! 10 ARRLEN !

Теперь определим слова для записи массивов на диск: : ARRAYPUT ( адр n - ) (Поместить_массив) STORBLK @ BLOCK (Помещает блок в буфер) SWAP ARRLEN @ * + (Рассчитывает размер места для хранения) ARRLEN @ CMOVE UPDATE ; (Перемещает массив в блок) Для примера, при вводе TESTARRAY 5 ARRAYPUT содержимое TESTARRAY будет запомнено в массиве номер 5 блока STORBLK.


- Начало -  - Назад -  - Вперед -