The UNESCO micro CDS/ISIS Software

Приложение 6

Структура файла документов и формат записи

6.1. Формат записи файла документов

     Записи  документов  являются записями переменной длины,со-
держащими три части: головная часть фиксированной длины, оглав-
ление, и поля данных переменной длины.

6.1.1. Формат головной части

     Головная часть содержит следующие 7 целых (поля,  отмечен-
ные * являются 31-битовыми целыми со знаком):

     MFN   * Номер файла документов (МFN);
     MFRL    Длина записи (всегда одинаковое число);
     MFBWB * Обратный указатель - номер блока;
     MFBWP   Обратный указатель - смещение;
     BASE  Смещение  для  переменных полей (это комбинированная
длина головной части и оглавления записи в байтах);
     NVF     Число полей в записи (т.е. вхождений в оглавление);
     STATUS  Индикатор логического удаления (0 = запись  действи-
тельна, 1=запись отмечена для удаления).

     MFBWB и MFBWP первоначально установлены в 0, когда  запись
создается.  Впоследствии они обновляются каждый раз, когда сама
запись обновляется (смотри ниже).

6.1.2. Формат оглавления.

     Оглавление - это таблица указывающая на содержимое записи.
Имеется одно вхождение в оглавление для каждого поля, представ-
ленного в записи (т.е. оглавление имеет точно  ЧПЗ  вхождений).
Каждое вхождение в оглавление состоит из 3 целых чисел:

     TAG    Метка поля;
     POS   Смещение позиции первого символа поля в части перемен-
              ного поля (первое поле имеет POS=0);
     LEN     Длина поля в байтах;

     Общая длина оглавления в байтах является, таким образом,
6*NVF; поле BASE в головной части всегда: 18+6*NVF.

6.1.3. Переменные поля

     Эта часть содержит поля данных (в порядке,  указанном в ог-
лавлении). Поля данных размещены одно за другим без  разделитель-
ных символов.

6.2. Управляющая запись

     Первая  запись  в  главном  файле является управляющей, ее
система устанавливает автоматически. Это  никогда  не  доступно
пользователю  ISIS. Ее содержание следующее (поля, отмеченные *
являются 31-битовыми целыми со знаком):

     CTLMFN * всегда 0;
     NXTMFN * MFN назначен следующей создаваемой записи в ба-
              зе данных;
     NXTMFB * Номер последнего блока,  расположенного в файле
              документов ( первый блок равен 1);
     NXTMFF   Смещение  следующей  доступной  позиции  в послед-
              нем блоке;
     METYPE  Всегда 0 для данных пользователя (1 для файлов  сис-
              темных сообщений).

6.3. Формат блока файла документов

     Записи файла документов записываются последовательно, одна
за другой, каждая запись занимает точно MFRL байт. Файл записы-
вается  физическими блоками в 512 байт. Запись может начинаться
на границе любого слова между 0-498 (ни одна запись не  начина-
ется между 500-510) и может продолжаться на втором и более бло-
ках.
     Так  как файл документов создается и/или обновляется, сис-
тема устанавливает индекс, указывающий позицию  каждой  записи.
Индекс записывается в файле перекрестных ссылок (.XRF).

6.4. Файл перекрестных ссылок

Файл  XRF  организован, как таблица указателей на файл докумен-
тов. Первый указатель соответствует MFN1, второй - MFN2 и т.д.
     Каждый указатель

                     RECCNT *
                     MFCXX1 *
                     MFCXX2 *
                     MFCXX3 *

состоит из двух полей:

     XRFMFB (21 бит) Номер блока файла документов,  содержащего
                     запись
     XRFMFP  (11  бит) Смещение в блоке позиции первого символа
                     записи (первая позиция блока равна 0)

которые записаны в 31-битовом целом со знаком (4 байта) следую-
щим образом:

     указатель = XRFMFB*2048+XRFMFP

(таким образом, дающий максимальный размер файла документов в
500 Мегабайт).

     Каждый блок файла XRF имеет 512 байт и содержит 127 указа-
телей. Первое поле каждого блока (XRFPOS)  является  31-битовым
целым  со знаком, имеющим абсолютное значение номера блока XRF.
Отрицательный XRFPOS указывает на последний блок.

     Удаленные записи указываются следующим образом:

     XRFMFB 0 XRFMFP 0 логически удаленная запись (в этом  слу-
чае ABS (XRFMFB) является точный указатель блока и XRFMFP явля-
ется  смещением  записи,  которая  таким образом еще может быть
восстановлена).
     XRFMFB=-1 XRFMFP=0 физически удаленная запись.
     XRFMFB=0 XRFMFP=0  несуществующая запись (все записи за са-
мым большим MFN, присвоенным в базе данных)

6.5. Техника обновления файла документов

6.5.1. Создание новых записей

     Новые записи всегда добавляются в конец файла  документов,
с позиции, указанной в полях NXTMFB/NXTMFP в управляющей записи
файла документов. MFN, который будет назначен, также берется из
поля NXTMFN в управляющей записи.
     После  добавления записи, NXTMFN увеличивается на 1 и NXT-
MFB/NXTMFP обновляются на место следующей доступной позиции.При
добавлении новый указатель в файле XRF и поле XRFMFP соответст-
вует создаваемой записи, увеличенной на 1024, что указывает  на
необходимость инвертирования новой записи (после инвертирования
новой записи, 1024 вычитается из XRFMFP).

6.5.2. Обновление существующих записей

     Если  вы обновляете запись (т.е. вы вызываете ее при вводе
данных и выходите с помощью опции Х из редактора), система  за-
писывает  запись  обратно в файл документов, где запись зависит
от статуса записи, которая была первоначально прочитана.

    1. Попытка обновить запись не инвертированного файла

     Это условие указывается следующим:

     В  XRF  XRFMFP<512 и
     В  MST  MFBWB=0 и MFWBP=0

     В этом случае, запись всегда переписывается в конец  файла
документов (так, если бы это была новая запись), что указывает-
ся  NXTMFB/NXTMFP  в  управляющей записи. В новой версии записи
MFBWB/MFBWP устанавливаются на место старой версии записи, по-
ка в файле XRF указатель не укажет на новую версию. При  добав-
лении, 512 добавляется к XRFMFP, что указывает на необходимость
обновления  инвертированного  файла. Когда инвертированный файл
будет обновлен, старая версия записи будет определена к  удале-
нию, а новая версия будет добавлена к новому отправлению. После
обновления инвертированного файла, 512 будет вычтено из XRFMFP,
а MFBWB/MFBWP будут установлены в 0.

     2. Попытка обновить инвертированный файл

     Это условие указывается следующим:

     В XRF XRFMFP  512 и
     В MST MFBWB  0

     В  этом случае MFBWB/MFBWP указывают на версию записи, ко-
торая в настоящий момент отражена в инвертированном файле. Если
возможно, т.е. если длина записи не увеличивается, запись будет
записана обратно на старое место, иначе-в конец файла. В  обоих
случаях, MFBWB/MFBWP не меняются.

6.5.3. Удаление записей.

     Удаление  записи  аналогично обновлению, со следующими до-
полнительными особенностями:

     В XRF XRFMFB отрицательно
     В MST STATUS установлен в 1

6.6. Реорганизация файла документов.

     Как указано выше, записи главного файла обновляются,  уве-
личивая  размер файла MST, и это приводит к потере пространства
в файле, которое не может быть использовано. Реорганизация поз-
воляет использовать это пространство, исправив файл  с  помощью
пеpекомпановки.
     Во время фазы сброса файла документов создается файл сбро-
са (.ВКР). Структура и формат этого файла такой же как и в фай-
ле  (.MST), исключая то, что файл перекрестных ссылок не запра-
шивается, так как все записи соседствуют.
     Записи,  отмеченные для удаления, не сбрасываются. Поэтому
только последняя копия каждой записи сбрасывается,  система  не
позволяет вам выполнить сброс, если инвертированный файл не об-
новлен для одной или более записей.
     Во  время фазы восстановления, файл сброса последовательно
читается и программа воссоздает файлы MST и XRF. В  этом  месте
все записи, которые отмечены для логического удаления (до сбро-
са), вновь отмечаются, как физически удаленные (установкой XRF-
MFB=-1  и  XRFMFP=0). Удаленные записи обнаруживаются проверкой
пропусков в нумерации MFN.

[К оглавлению]