ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 17

Перевод всей документации выполнил Сергей АгАрков. Если возникли
какие-либо вопросы или  предложения по качеству  перевода, обра-
щайтесь:

Jew Smile MO Station 2:5040/22.3 Serg Agarkoff +7-(421)-626-8486
время работы станции с 15:00  до 23:30 по московскому времени  в
будние дни и круглосуточно в  выходные и праздники. По этому  же
телефону меня можно застать с 3:00 до 12:00 по московскому  вре-
мени. Спросить капитана Агаркова.

Домашний телефон +7-(421)-626-8486 чс 13:00 до 0:30 по москве.

		    ГЛАВА 11 - Файлы Данных

Структура файла даных..................................... 11-1
     FILE (описание структуры файла данных)............... 11-1
     CREATE (разрешает создание файла).................... 11-3
     DRIVER (задает тип файла данных)..................... 11-3
     ENCRYPT (шифровать файл данных)...................... 11-4
     OWNER (задает пароль для шифрования файла данных).... 11-4
     RECLAIM (использовать место от удаленных записей).... 11-5

Операторы структуры файла................................. 11-6
     INDEX (описывает статический индекс для файла)....... 11-6
     KEY (описывает динамический индекс (ключ) для файла). 11-7
     MEMO (описывает текстовое поле)...................... 11-8
     RECORD (описывает структуру записи).................. 11-9

Атрибуты для INDEX, KEY и MEMO............................ 11-10
     BINARY (MEMO содержит двоичные данные)............... 11-10
     DUP (разрешить повторяющиеся значения полей ключа)... 11-10
     NOCASE (KEY или INDEX - НЕ чувствительны к регистру). 11-11
     OPT (пустые или нулевые ключевые поля отбрасываются). 11-11

Команды работы с файлами.................................. 11-12
     BUILD (построить ключи и/или индексы для файла)...... 11-12
     CLOSE (закрыть файл данных).......................... 11-14
     COPY (копировать файл данных)........................ 11-14
     CREATE (создать пустой файл данных).................. 11-15
     EMPTY (очистить файл данных)......................... 11-15
     FLUSH (сбросить буфера ДОС на диск).................. 11-16
     LOCK (монопольный доступ к файлу).................... 11-17
     OPEN (открыть файл данных)........................... 11-18
     PACK (физически стереть удаленные записи)............ 11-19
     REMOVE (стереть файл данных)......................... 11-19
     RENAME (переименовать файл данных)................... 11-20
     SHARE (открыть файл данных).......................... 11-21
     STREAM (разрешить буферизацию через ДОС)............. 11-22
     UNLOCK (разблокировать заблокированный файл)......... 11-23

Команды работы с записями................................. 11-24
     ADD (добавить новую запись).......................... 11-24
     APPEND (добавить новую запись)....................... 11-25
     DELETE (удалить запись).............................. 11-26
     GET (считать запись по прямому доступу).............. 11-27
     HOLD (монопольный доступ к записи)................... 11-29
     NEXT (прочитать следующую запись последовательности). 11-30
     PREVIOUS (прочитать предыдущую запись послед-ности).. 11-31
     PUT (записать запись обратно в файл)................. 11-32
     RELEASE (освободить заблокированную запись).......... 11-33
     RESET (сброс указателя текущей записи)............... 11-34
     SET (инициировать последовательную обработку файла).. 11-35
     SKIP (пропустить записи в последовательности)........ 11-37

Функции работы с файлом................................... 11-38
     BOF (начало файла)................................... 11-38
     BYTES (размер файла в байтах)........................ 11-39
     DUPLICATE (проверить на дублирование ключевых полей). 11-40
     EOF (конец файла).................................... 11-41
     POINTER (относительный номер записи)................. 11-41
     POSITION (номер записи в последовательности)......... 11-42
     RECORDS (число записей).............................. 11-43
     SEND (отправить сообщение файловому драйверу)........ 11-43

Обработка транзакций...................................... 11-44
     COMMIT (завершить успешно проведенную транзакцию).... 11-44
     LOGOUT (начать транзакцию)........................... 11-45
     ROLLBACK (завершить ошибочную транзакцию)............ 11-46

		    СТРУКТУРА ФАЙЛА ДАННЫХ

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
FILE                           (описание структуры файла данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка       FILE,DRIVER()[,CREATE][,RECLAIM][,OWNER()][,ENCRYPT]
                     [,NAME()][,PRE()]
метка          [INDEX()]
метка          [KEY()]
метка          [MEMO()]
[метка]        RECORD
                 fields
             . .
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

DRIVER              Задает тип файла данных. Атрибут DRIVER тре-
                    буется для всех описаний структуры FILE.

CREATE              Позволяет  создать  файл  командой CREATE во
                    время работы программы.

RECLAIM             Разрешает повторно использовать место, осво-
		    божденное удаленными записями.

OWNER               Задает пароль для шифрования данных.

ENCRYPT             Шифрует файл данных.

NAME                Останавливает имя файла в стандарте ДОС.

PRE                 Объявляет префикс метки для структуры.

INDEX               Объявляет статический  индекс файла, который
                    должен быть перестроен во время исполнения.

KEY                 Объявляет  динамически  обновляющийся индекс
                    файла.

MEMO                Описывает  текстовое  поле переменной  длины
                    до 64K длиной).

RECORD              Объявляет структуру записи по полям.  Струк-
                    тура RECORD ДОЛЖНА  быть в описании  каждого
                    файла.

fields              Элементы данных в структуре RECORD.

FILE объявляет структуру файла данных. Метка структуры FILE  ис-
пользуется в операторах и функциях, работающих с файлами. Струк-
тура FILE должна завершаться точкой или оператором END.

Атрибуты структур FILE, KEY, INDEX, MEMO, операторы описания дан
ных и типы данных, которые могу содержаться в файле, целиком за-
висят от конкретного файлового драйвера. Все, что не поддержива-
ется файловой системой, заданной в атрибуте DRIVER, при открытии
файла вызовет сообщение об ошибке файлового драйвера. Атрибуты и
(или) типы данных, разрешенных для конкретной файловой  системы,
перечислены в документации на файловый драйвер.

Во время выполнения, под структуру RECORD выделяется память  для
использования в качестве буфера, где хранятся данные,  считанные
с диска. В файле обязательно должна быть структура RECORD.

Пример:

Names     FILE,DRIVER('Clarion')       !Описание структуры файла
Rec         RECORD
Name          STRING(20)
          . .                          !Конец описания файла

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
CREATE                                (разрешает создание файла)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             CREATE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Атрибут CREATE,  в описании  файла, позволяет  создавать файл на
диске оператором CREATE из  программы, в которой этот  файл опи-
сан.

Файлы, описанные без атрибута CREATE, могут быть созданы с помо-
щью Clarion Data Dictionary Administrator.

Пример:

Names FILE,DRIVER('Clarion'),CREATE!Описываем файл и разрешаем
				   !его создание
Rec     RECORD
Name      STRING(20)
      . .                          !Конец описания файла

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
DRIVER                                 (задает тип файла данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             DRIVER(filetype[,driver string])
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

filetype            Строковая константа, содержащая имя менедже-
                    ра файлов (Btrieve, Clarion итд.).

driver string       Строковая константа или переменная. содержа-
                    щая любые добавочные инструкции для  драйве-
		    ра. Атрибут DRIVER задает, какой драйвер ис-
                    пользуется для работы с файлом. Атрибут DRI-
                    VER требуется во всех описаниях файлов.

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

Внутренняя реализация той или иной команды доступа к файлу зави-
сит от файлового драйвера. Некоторые команды могут быть недоступ
ны с определенным драйвером из-за ограничений, налагаемых файло-
вой системой. Каждый файловый драйвер документируется  отдельно.
Все неподдерживаемые команды, атрибуты полей, типы данных  и/или
идиосинкразии файловой системы приводятся в документации.

Пример:

Names     FILE,DRIVER('Clarion')         !Начало описания файла
Record      RECORD
Name          STRING(20)
					 !Конец описания файла

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ENCRYPT                                  (шифровать файл данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             ENCRYPT
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Атрибут ENCRYPT, спользуемый совместно с атрибутом OWNER, указы-
вает на необходимость шифроания данных в файле. ENCRYPT разрешен
ТОЛЬКО  с  атрибутом  OWNER.  Даже  используя 16ричный редактор,
весьма трудно расшифровать зашифрованные данные.

(С.П.А - Сильно сомневаюсь. Если ключ к шифру задан как в приме-
ре для OWNER, то расшифровка - дело нескольких минут.)

Пример:

Names        FILE,DRIVER('Clarion'),OWNER('Clarion'),ENCRYPT
Record         RECORD
Name             STRING(20)
             . .

См. также: OWNER

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
OWNER                (задает пароль для шифрования файла данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             OWNER(password)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

password            Строковая константа или переменная.

Атрибут  OWNER  задает  пароль,  который  используется атрибутом
ENCRYPT для шифрования данных. Реализация метода шифрования  за-
висит от конкретного файлового драйвера.

Пример:

Customer  FILE,DRIVER('Clarion'),OWNER('abCdeF'),ENCRYPT
                                 !Шифруем данные с
				 !паролем "abCdeF"
Record      RECORD
Name          STRING(20)
          . .

См. также: ENCRYPT

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
RECLAIM                (использовать место от удаленных записей)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             RECLAIM
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Атрибут RECLAIM говорит о том, что файловый драйвер будет  поме-
щать новые записи в файл на место ранее удаленных, если  таковые
имеются. В противном случае запись будет добавлена в конец  фай-
ла. Реализация  метода RECLAIM  зависит от  файлового драйвера и
поддерживается НЕ всем файловыми системами.

Пример:

Names FILE,DRIVER('Clarion'),RECLAIM !Помещать новые записи на
				     !место ранее удаленных.
Record  RECORD
Name      STRING(20)
      . .

		   ОПЕРАТОРЫ СТРУКТУРЫ ФАЙЛА

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
INDEX                   (описывает статический индекс для файла)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка        INDEX([-][field])[NAME()][,NOCASE][,OPT]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

-                   Знак МИНУС перед компонентой индекса означа-
                    ет, что для полей с этой компонентой, индекс
                    сортируется по убыванию (от больших значений
                    к меньшим), по  умолчанию сортировка по воз-
		    растанию.

field               Метка поля  из  структуры RECORD файла,  для
                    которого строится индекс. Поле - это  компо-
                    нента  индекса.  Переменные  с атрибутом DIM
                    (массивы) нельзя использовать в качестве ин-
                    дексных полей.

NAME                Имя файла для индекса.

OPT                 В индекс не попадут сведения о тех  записях,
                    у которых все поля, используемые как  компо-
                    ненты индекса, пусты или содержат нуль.

NOCASE              Сортировку проводить без учета регистра.

INDEX описывает "статичный" ключ для файла данных. INDEX  обнов-
ляется только  оператором BUILD.  Он используется  для доступа к
записям в порядке, отличном от физического размещения записей  в
файле. INDEX можно использовать как для последовательного, так и
для произвольного  доступа к  файлу. В  INDEX-е ВСЕГДА разрешены
записи с одинаковым значением индексных полей (duplicated entri-
es).

INDEX может строиться на основании более чем одного поля.  Поря-
док,  в  котором  заданы  компоненты индекса, определяет порядок
сортировки записей по этому индексу. Самые первые компоненты МЕ-
НЕЕ значимы, самые последние - БОЛЕЕ. В общем, файл данных может
иметь до 255 индексов (и/или ключей) и каждый индекс может  быть
длиной до 255 байт (имеется  в виду суммарная длина всех  полей,
задействованных для построения  индекса), хотя точное  число ин-
дексных и ключевых файлов зависит от файлового драйвера.

Если в описании INDEX не заданы имена полей, то создается "дина-
мический"  индекс,  который  позволяет  использовать  любые поля
структуры RECORD в качестве своих компонент, за исключением мас-
сивов. Такие компоненты задаются во время исполнения вторым  па-
раметром оператора BUILD. Такой подход позволяет произвольно ин-
дексировать файлы во время исполнения (С.П.А - и позволяет избе-
жать одинаковых, в целом, процедур, использующих разные  порядки
сортировки одного и того же файла).

Пример:

Names    FILE,DRIVER('Clarion'),PRE(Nam)
NameNdx  INDEX(Nam:Name),NOCASE        !Индекс по имени
NbrNdx   INDEX(Nam:Number),OPT         !Индекс по номеру
Rec        RECORD
Name         STRING(20)
Number       SHORT
         . .

См. также: KEY, BUILD

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
KEY             (описывает динамический индекс (ключ) для файла)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка        KEY([-][field])[NAME()][,NOCASE][,OPT]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
-                   Знак МИНУС перед компонентой ключа означает,
                    что  для  полей  с  этой компонентой, индекс
                    сортируется по убыванию (от больших значений
                    к меньшим), по  умолчанию сортировка по воз-
		    растанию.

field               Метка поля  из  структуры RECORD файла,  для
                    которого строится ключ.  Поле - это   компо-
                    нента ключа. Переменные с атрибутом DIM (мас
		    сивы) нельзя использовать в качестве  ключе-
		    вых полей.

NAME                Имя файла для ключа.

OPT                 В ключ не попадут сведения о тех  записях, у
		    которых все поля, используемые как компонен-
		    ты ключа, пусты или содержат нуль.

NOCASE              Сортировку проводить без учета регистра.

DUP                 В файле данных разрешены записи с одинаковы-
                    ми значениями ключевых полей.

KEY - это индекс файла данных, который автоматически обновляется
при добавлении, изменении или удалении записей. Он  используется
для доступа к записям в порядке, отличном от физического  разме-
щения записей  в файле. INDEX можно использовать как для  после-
довательного, так и для произвольного  доступа к  файлу.

KEY может строится на основании более чем одного поля.  Порядок,
в котором заданы компоненты ключа, определяет порядок сортировки
записей по этому индексу. Самые первые компоненты МЕНЕЕ значимы,
самые последние - БОЛЕЕ. В общем, файл данных может иметь до 255
ключей (и индексов) и каждый ключ может быть длиной до 255  байт
(имеется в виду суммарная длина всех полей, задействованных  для
построения ключа), хотя точное число ключевых и индексных файлов
зависит от файлового драйвера.

Пример:

Names    FILE,DRIVER('Clarion'),PRE(Nam)
NameKey  KEY(Nam:Name),NOCASE,DUP        !Ключ по имени
NbrKey   KEY(Nam:Number),OPT             !Ключ по номеру
Rec        RECORD
Name       STRING(20)
Number     SHORT

   CODE
   Nam:Name = 'Clarion Software'       !Инициализируем ключевое
				       !  поле
   GET(Names,Nam:NameKey)              !Читаем запись
   SET(Nam:NbrKey)                     !Обрабатывать в порядке
				       !  возрастания поля
				       !  NAM:NUMBER

См. также: SET, GET, INDEX

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
MEMO                                  (описывает текстовое поле)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка        MEMO(длина)[,BINARY][,NAME()]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

длина               Числовая  константа,  задающая  максимальную
                    длину текста в символах. Должна быть в диапа
                    зоне от 1 до 65,536 байт.

BINARY              Указывает, что в МЕМО-поле должны  храниться
                    двоичные данные.

NAME                Задает имя файла, в котором будут находиться
                    МЕОМ-поля. Использование этого параметра за-
                    висит от файлового драйвера.

(МЕМО - англ. записка, памятка, примечание)

MEMO описывает строковое поле переменной длины, которое хранится
на диске. Параметр ДЛИНА задает максимальный размер поля  приме-
чаний. МЕМО должно быть описано ПОСЛЕ описания структуры RECORD.
Память под буфер МЕМО-полей выделяется при открытии файла, к ко-
торому это примечание относится, и освобождается при его  закры-
тии.

Теоретически, можно описать до 255 МЕОМ-полей для каждого файла.
Точное жже  их число  и способ  их хранения  на диске зависит от
файлового драйвера. Просматриваются MEMO-поля, обычно, с помощью
полей типа TEXT в экранах и отчетах.

Пример:

Names     FILE,DRIVER('Clarion'),PRE(Nam)
NameKey     KEY(Nam:Name)
NbrKey      KEY(Nam:Number)
Notes       MEMO(4800)          !Примечание длиной до 4800 байт.
Rec         RECORD
Name          STRING(20)
Number        SHORT
          . .

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
RECORD                              (описывает структуру записи)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
[метка]      RECORD[PRE()][,NAME()]
               поля
             .
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

поля                Одно или более описание переменных.

PRE                 Задает метку-префикс структуры.

NAME                Задает внешнее имя структуры RECORD. Исполь-
                    зование этого параметра зависит от файлового
                    драйвера.

Оператор RECORD описывает начало структуры файла данных.  Струк-
тура RECORD обязательно должна быть в описании файла. Каждое ПО-
ЛЕ - элемент структуры RECORD. Длина структуры RECORD  складыва-
ется из длин входящих в нее ПОЛЕЙ. При обращении к структуре RE-
CORD, она рассматривается, как структура типа GROUP.

Во время исполнения, под данные структуры RECORD, выделяется бу-
фер в статической памяти. ПОЛЯ, в буфере записи, дрступны  неза-
висимо от того открыт файл  или нет. Записи считываются в  буфер
из файла операторами NEXT, PREVIOUS или GET. Данные ПОЛЕЙ  обра-
батываются, а затем записываются в файл в виде цельной структуры
RECORD операторами ADD, PUT или DELETE.

Пример:

Names    FILE,DRIVER('Clarion')      !Описание структуры файла
Record     RECORD                    !  начало описания записи
Name         STRING(20)              !    описываем поле ИМЯ
Number       SHORT                   !    описываем поле НОМЕР
         . .                   !Конец описаний записи и файла


		АТРИБУТЫ ДЛЯ INDEX, KEY И MEMO

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
BINARY                           (MEMO содержит двоичные данные)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             BINARY
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Атрибут МЕМО-поля  BINARY указывает  на то,  что MEMO-поле может
содержать не  только текстовые,  но и  двоичные данные.  Обычно,
этот атрибут  используется для  хранения в  МЕМО-полях небольших
картинок, которые можно выводить в IMAGE-полях на экране.

Пример:

Names    FILE,DRIVER('Clarion'),PRE(Nam),
NameKey    KEY(Nam:Name)
NbrKey     KEY(Nam:Number)
Picture    MEMO(48000),BINARY		!Двоичное поле длиной
					!  до 48,000 байт
Rec        RECORD
Name         STRING(20)
Number       SHORT

См. также: MEMO, IMAGE

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
DUP               (разрешить повторяющиеся значения полей ключа)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             DUP
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Атрибут DUP, в описании ключа, позволяет иметь в файле несколько
записей с одинаковым значением ключевых полей. Если атрибут  DUP
пропущен, то попытка добавить или перезаписать запись с уже  су-
ществующими значениями ключевых полей, вызовет ошибку "Такая за-
пись уже есть" ("Creates Duplicate Key"), и запись не будет  за-
писана в файл. Во время последовательной обработки по ключу, за-
писи с одинаковыми ключевыми полями обрабаываются в том физичес-
ком порядке, в котором их ключевые поля расположены в файле клю-
ча. Операторы GET и SET  обращаются к первой записи из  тех, что
имеют одинаковые ключевые поля. Атрибут DUP НЕ нужен для  индек-
сов, поскольку индексы  ВСЕГДА допускают дублированные  значения
ключевых полей.

Пример:

Names    FILE,DRIVER('Clarion'),PRE(Nam)
NameKey    KEY(Nam:Name),DUP
                    !Ключ по имени, разрешаем одинаковые имена
NbrKey     KEY(Nam:Number)
                    !Ключ по номеру. Одинаковые номера запрещены
Rec        RECORD
Name         STRING(20)
Number       SHORT
         . .

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
NOCASE             (KEY или INDEX - НЕ чувствительны к регистру)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             NOCASE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Атрибут NOCASE в описании KEY или INDEX означает, что сортировка
полей по алфавиту будет  производиться без учета регистра  букв.
При записи в ключевой файл, все буквы будут приводиться к  верх-
нему регистру. Этот  атрибут не влияет  на данные, хранящиеся  в
файле данных и на небуквы.

Пример:

Names     FILE,DRIVER('Clarion'),PRE(Nam)
NameKey     KEY(Nam:Name),NOCASE
                        !Ключ по имени без учета регистра
NbrKey      KEY(Nam:Number)                  !Ключ по номеру
Rec         RECORD
Name          STRING(20)
Number        SHORT
          . .

См. также: INDEX,KEY

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
OPT             (пустые или нулевые ключевые поля отбрасываются)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             OPT
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Если задан атрибут ОРТ, то в ключ или индекс НЕ попадут сведения
о записях, у которых все ключевые поля пусты. В терминах атрибу-
та ОРТ, "пустое поле" означает, что числовое поле содержит нуль,
а символьное - только пробелы.

Пример:

Names   FILE,DRIVER('Clarion'),PRE(Nam)!Описание структуры файла
NameKey KEY(Nam:Name),OPT    !Ключ по имени, имя не может быть
			     !  пустым
NbrKey  KEY(Nam:Number),OPT  !Ключ по номеру. Номера не могут
			     !  быть нулевыми
Rec       RECORD
Name        STRING(20)
Number      SHORT
        . .

См. также:  INDEX,KEY


		   КОМАНДЫ РАБОТЫ С ФАЙЛАМИ

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
BUILD                  (построить ключи и/или индексы для файла)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
                    і ключ і
             BUILD( іиндексі [,компоненты])
                    і файл і
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

ключ                Метка описания КЛЮЧА.

индекс              Метка описания ИНДЕКСА.

файл                Метка описания ФАЙЛА.

компоненты          Строковая константа или переменная, содержа-
                    щая список полей, на основе которых  постро-
                    ить динамический ИНДЕКС. Имена полей  должны
                    разделяться запятыми, перед именем поля дол-
                    жен стоять знак плюс или минус, чтобы задать
                    сортировку по возрастанию или по убыванию.

Оператор BUILD  строит ключи  и индексы.  BUILD(ключ), BUILD(ин-
декс) и BUILD(файл) требуют монопольного доступа к файлу.  Т.е.,
файл должен быть  заблокирован (через LOCK)  или открыт с  кодом
доступа 12h  (ВСЕМ кроме  меня запрещено  чтение/запись) или 22h
(ВСЕМ кроме меня запрещена запись). BUILD(индекс,компоненты)  НЕ
требует монопольного доступа к файлу.

BUILD(ключ)
BUILD(индекс)       Строит  только  указанный  КЛЮЧ или  ИНДЕКС.
                    Файл  должен  быть  закрыт, заблокирован или
                    открыт в режиме 12h или 22h.

BUILD(файл)         Строит  все  КЛЮЧИ или  ИНДЕКСЫ ФАЙЛА.  Файл
                    должен быть закрыт, заблокирован или  открыт
                    в режиме доступа 12h или 22h.

BUILD(индекс,компоненты)
                    Позволяет строить  динамический ИНДЕКС.  Эта
                    форма BUILD не требует монопольного  доступа
                    к файлу, тем не  менее файл должен быть  от-
                    крыт в любом разрешенном режиме доступа. Ди-
                    намический  ИНДЕКС  создается  как временный
                    файл только для строящего его  пользователя.
                    Этот временный файл автоматически  удаляется
                    при закрытии файла.

Возвращаемые ошибки:
	 37 Файл еще не открыт
	 40 Такой ключ уже есть
	 63 Требуется монопольный доступ
	 76 Неверные параметры для индекса

Пример:

Names   FILE,DRIVER('Clarion'),PRE(Nam)!Описание структуры файла
NameKey   KEY(Nam:Name).OPT            !Описание ключа по имени
NbrNdx    INDEX(Nam:Number),OPT        !Описание индекса по но-
				       !  меру
DynNdx    INDEX()                      !Описываем динамический
				       !  индекс
Rec       RECORD
Name        STRING(20)
Number      SHORT
        . .
    CODE
    OPEN(Names,12h)             !Открываем файл с исключительным
				!  правом чтения/записи
    BUILD(Names)                !Строим все ключи для файла имен
    BUILD(Nam:NbrNdx)           !Строим индекс по номеру
    BUILD(Nam:DynNdx.'-Nam:Number,+Nam:Name')
          !Строим динамический индекс - по номеру с убыванием,
	  !  по имени с возрастанием.

См. также: OPEN, SHARE

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
CLOSE                                      (закрыть файл данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             CLOSE(файл)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка ФАЙЛА.

Оператор CLOSE закрывает ФАЙЛ. Обычно, это вызывает сброс диско-
вых буферов на диск  и освобождение памяти, выделенной  под них,
кроме буфера, хранящего данные структуры RECORD. Точный  порядок
закрытия файла зависит от файлового драйвера.

Пример:

CLOSE(Customer)                        !Закрыть файл покупателей

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
COPY                                    (копировать файл данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             COPY(файл,новый_файл)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка копируемого файла.

новый_файл          Строковая константа или переменная, содержа-
                    щая полную спецификацию файла (диск, каталог
                    и имя). Если в спецификации отсутствуют диск
                    и каталог, то подразумеваются текущий  ката-
                    лог текущего диска. Если указан только путь,
                    то для имени НОВОГО_ФАЙЛа используются имя и
                    расширение копируемого ФАЙЛа.

Оператор COPY создает копию файла, и делает соответствующую  за-
пись в каталоге. Копируемый ФАЙЛ должен быть закрыт, иначе будет
фозвращена  ощибка  "Файл  уже  открыт". Если спецификация НОВО-
ГО_ФАЙЛа совпадает со спецификацией оригинала, то такой оператор
COPY игнорируется.

Поскольку некоторые файловые драйверы используют несколько физи-
ческих ФАЙЛОВ для работы с ними как с ОДНИМ ФАЙЛОМ, то  подразу-
меваемые имя  и расширение файла зависят  от файлового драйвера.
Если происходит какая-либо ошибка, то файл не копируется.

Возвращаемые ошибки:
       02 Файл не найден
       03 Путь не существует
       05 Доступ запрещен
       52 Файл уже открыт

Пример:

  COPY(Names,'A:\')          !Копируем файл имен на дискету
  COPY(CompText,Filename)    !Копируем текстовый файл под другим
  			     !  именем

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
CREATE                              (создать пустой файл данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             CREATE(файл)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка файла, который надо создать.

Оператор CREATE создает в заданном каталоге пустой файл  данных.
Если файл уже  существует, то он  удаляется и пересоздается  как
файл, не содержащий данных. Файл долден быть закрыт, иначе  воз-
никает ошибка "Файл уже  открыт". CREATE не оставляет  созданный
файл открытым.

Возвращаемые ошибки:
	 03 Путь не существует
	 04 Слишком много открытых файлов
	 05 Доступ запрещен
	 52 Файл уже открыт
	 54 Нет атрибута CREATE

Пример:

  CREATE(Master)         !Создать новый основной файл
  CREATE(Detail)         !Создать новый файл подробностей

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
EMPTY                                     (очистить файл данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             EMPTY(файл)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка существующего файла.

EMPTY удаляет ВСЕ записи из заданного файла. EMPTY требует моно-
польного доступа к файлу. То есть файл должен быть открыт в  ре-
жиме доступа 12h (всем, кроме меня запрещены чтение/запись)  или
22h (всем, кроме меня запрещена запись)

Возвращаемые ошибки:
	63 Требуется монопольный доступ

Пример:

   OPEN(Master,18)                       !Открыть основной файл
   EMPTY(Master)                         !  и опустошить его

См. также: OPEN, SHARE

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
FLUSH                              (сбросить буфера ДОС на диск)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             FLUSH(файл)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка файла.

Оператор FLUSH завершает  операцию STREAM. Он  сбрасывает буфера
ДОС, что приводит к обновлению записи каталога для данного  фай-
ла. Поддержка этого оператора зависит от файловой системы и кон-
кретные результаты этой команды описаны в документации по файло-
вому драйверу.

Пример:

   STREAM(History)                 !Используем бувера ДОС
   SET(Current)                    !Идем в начало файла CURRENT.
   LOOP UNTIL EOF(Current)
     NEXT(Current)
     His:Record - Cur:Record
     ADD(History)
   .                               !Конец цикла
   FLUSH(History)                  !Заканчиваем  поточную  обра-
				   !  ботку и сбрасываем буфера.

См. также: STREAM

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
LOCK                                (монопольный доступ к файлу)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             LOCK(файл[,секунды])
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка файла,  открытого для совместного  до-
                    ступа.

секунды             Числовая  константа или переменная,  которая
                    задает максимальное время ожидание в  секун-
		    дах.

Оператор LOCK блокирует  файл от доступа  к нему других  рабочих
станций в многопользовательской среде. Обычно, это блокирует за-
пись в  файл или  его чтение  другими пользователями. Конкретная
работа оператора LOCK зависит от файлового драйвера.

LOCK(файл)          Пытается заблокировать файл до тех пор, пока
                    это не удастся.  Если файл уже  заблокирован
                    другой станцией, то  LOCK будет ждать,  пока
                    та станция не разблокирует файл.

LOCK(файл,секунды)  Если за заданное время не удалось заблокиро-
                    вать файл, то возвращается ошибка "Файл  уже
                    заблокирован".

Главная  проблема  с  блокированными  файлами,  это как избежать
"смертельного объятия". Это происходит, когда две станции  пыта-
ются заблокировать один и тот же набор файлов в разной  последо-
вательности, и обе используют оператор LOCK(файл). Одна  станция
уже заблокировала  файл, который  хочет заблокировать  другая, и
наоборот. Этой проблемы можно избежать, если использовать опера-
тор LOCK(файл,секунды) и всегда блокировать файлы в одном и  том
же порядке.

Возвращаемые ошибки:
	   32 Файл уже заблокирован

Пример:

   LOOP                      !Цикл во избежание "смертельного
   			     !  объятия"
     LOCK(Master,1)          !1 секунду пытаемся заблокировать
			     !  основной файл
     IF ERRORCODE() = 201    !Если кто-то уже блокирует его, то
       BEEP(0,100)           ! ждем секунду и
       CYCLE                 ! пытаемся снова...
     .
     LOCK(Detail,1)          !За секунду пытаемся заблокировать
			     !  файл подробностей

     IF ERRORCODE() = 201    !Если кто-то уже блокирует его, то
       UNLOCK(Master)        !  разблокируем занятый нами файл,
       BEEP(0,100)           !  подождем секунду и
       CYCLE                 !  еще разок попробуем
   . .                       !Конец операторов IF и LOOP

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
OPEN                                       (открыть файл данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             OPEN(файл[,режим доступа])
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка файла.

режим доступа       Числовая константа,  переменная или  выраже-
                    ние, задающее  уровень доступа  к файлу  как
                    для открывающего его пользователя, так и для
                    остальных пользователей  многопользовательс-
                    кой системы. Если пропущен, то  подразумева-
                    ется 22h (всем, кроме меня запрещена  запись
		    в этот файл)

Оператор OPEN открывает структуру FILE для обработки и  устанав-
ливает режим доступа. Поддержка различных уровней доступа  зави-
сит от файлового  драйвера. Все файлы  должны быть явно  открыты
перед их использованием. РЕЖИМ ДОСТУПА это битовая карта, указы-
вающая операционке, какой доступ предоставить открывающему поль-
зователю, и какой  доступ запретить для  остальных потенциальных
пользователей этого файла.  Допустимы следующие значения  режима
доступа:

               Дес. 16н. Режим доступа
               ДДДД ДДД  ДДДДДДД
Открывающий     0   0h   Только для чтения (Read Only)
пользователь    1   1h   Только для записи (Write Only)
                2   2h   Для чтения и записи (Read/Write)

Остальные       0   0h   Любой доступ (режим FCB-совместимости)
пользователи   16  10h   Запрещен любой доступ (Deny All)
               32  20h   Запрещена запись (Deny Write)
               48  30h   Запрещено чтение (Deny Read)
               64  40h   ??? (Deny None)

Возвращаемые ошибки:
	 02 Файл не найден
	 04 Слишком много открытых файлов
	 05 Доступ запрещен
	 52 Файл уже открыт
	 75 Неверный описатель типа поля

Пример:

ReadOnly     EQUATE(0)     !Мнемонические значения для режимов
WriteOnly    EQUATE(1)     !  доступа
ReadWrite    EOUATE(2)
DenyAll      EQUATE(10h)
DenyWrite    EQUATE(20h)
DenyRead     EQUATE(30h)
DenyNone     EQUATE(40h)
       CODE
       OPEN(Names,ReadWrite+DenyNone)  !Открываем полностью в
				       !  режиме разделения.

См. также: SHARE

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
PACK                        (физически стереть удаленные записи)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             PACK(файл)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка файла.

Оператор PACK убирает удаленные  записи из файла данных  и пере-
страивает его ключи.  Полученный файл будет компактен, насколько
это возможно. PACK требует,  как минимум, вдвое больше  места на
диске, чем занимает файл  с ключами и МЕМО-файлами.  Новые файлы
создаются из старых, а  старые файлы стираются ТОЛЬКО  после ус-
пешного завершения процесса.  PACK требует монопольного  доступа
к файлу.

Возвращаемые ошибки:
	  63 Требуется монопольный доступ

Пример:

  OPEN(Trans,12h)               !Монопольно открывает файл и
  PACK(Trans)                   !  упаковывает его.

См. также: OPEN, SHARE

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
REMOVE                                     (стереть файл данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             REMOVE(файл)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка файла, подлежащего удалению.

Оператор REMOVE стирает заданный файл из каталога аналогично ко-
манде ДОС Delete.  Файл долюен быть  закрыт, иначе будет  ошибка
"Файл уже открыт". При  возникновении какой-либо ошибки файл  НЕ
удаляется.

Возвращаемые ошибки:
	 02 Файл не найден
	 05 Доступ запрещен
	 52 Файл уже открыт

Пример:

  REMOVE(OldFile)                       !Удаляем старый файл
  REMOVE(Changes)                       !Удаляем файл изменений

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
RENAME                               (переименовать файл данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             RENAME(файл,новый_файл)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка переименовываемого файла.

новый_файл          Строковая константа или переменная, содержа-
                    щая спецификацию файла. Если в  спецификации
                    не заданы диск и путь, то используется теку-
                    щий  каталог  текущего  диска.  Если  указан
                    только путь, то в качестве имени и  расшире-
                    ния нового файла используются имя и расшире-
                    ние оригинала. Файл не модет быть переимено-
                    ван на другой диск.

Оператор RENAME либо меняет имя файла, либо переносит его в дру-
гой каталог  на этом  же диске.  Файл, подлежащий переминованию,
должен быть закрыт, иначе  произойдет ошибка "Файл уже  открыт".
Если ФАЙЛ и НОВЫЙ_ФАЙЛ идентичны, то оператор RENAME игнорирует-
ся. При возникновении какой-либо ошибки, файл не  переименовыва-
ется.

Поскольку некоторые файловые драйверы используют несколько физи-
ческих ФАЙЛОВ для работы с ними как с ОДНИМ ФАЙЛОМ, то  подразу-
меваемые имя и расширение файла зависят от файлового драйвера.

Возвращаемые ошибки:
	  02 Файл не найден
	  03 Путь не существует
	  05 Доступ запрещен
	  52 Файл уже открыт

Пример:

  RENAME(Text,'text.bak')          !Делаем резервную копию
  RENAME(Master,'\newdir')         !Перемещаем в другой каталог

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
SHARE                                      (открыть файл данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             SHARE(файл[,режим доступа])
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка файла.

режим доступа       Числовая константа,  переменная или  выраже-
                    ние, задающее  уровень доступа  к файлу  как
                    для открывающего его пользователя, так и для
                    остальных пользователей  многопользовательс-
                    кой системы. Если пропущен, то  подразумева-
                    ется 42h (всем, кроме меня, DENY NONE).

Оператор SHARE открывает файл для обработки и устанавливает  ре-
жим доступа к нему.  Оператор SHARE аналогичен оператору  OPEN и
отличается от  него только  режимом доступа  по умолчанию. РЕЖИМ
ДОСТУПА это битовая карта, указывающая операционке, какой доступ
предоставить открывающему пользователю,  и какой   доступ запре-
тить для  остальных потенциальных пользователей этого файла. До-
пустимы следующие значения режима доступа:

               Дес. 16н. Режим доступа
               ДДДД ДДД  ДДДДДДД
Открывающий     0   0h   Только для чтения (Read Only)
пользователь    1   1h   Только для записи (Write Only)
                2   2h   Для чтения и записи (Read/Write)

Остальные       0   0h   Любой доступ (режим FCB-совместимости)
пользователи   16  10h   Запрещен любой доступ (Deny All)
               32  20h   Запрещена запись (Deny Write)
               48  30h   Запрещено чтение (Deny Read)
               64  40h   ??? (Deny None)

Возвращаемые ошибки:
	  02 Файл не найден
	  04 Слишком много открытых файлов
	  05 Доступ запрещен
	  52 Файл уже открыт
	  75 Неверный описатель типа поля

Пример:

ReadOnly     EQUATE(0)     !Мнемонические значения для режимов
WriteOnly    EQUATE(1)     !  доступа
ReadWrite    EOUATE(2)
DenyAll      EQUATE(10h)
DenyWrite    EQUATE(20h)
DenyRead     EQUATE(30h)
DenyNone     EQUATE(40h)
       CODE
       SHARE(Names,ReadOnly+DenyWrite) !Открываем в режиме толь-
				       !  ко для чтения.

См. также: OPEN

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
STREAM                         (разрешить буферизацию через ДОС)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             STREAM(файл)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка файла.

Некоторые файловые системы  сбрасывают буфера при  каждой записи
на диск. Оператор STREAM запрещает это автоматический сброс. Бу-
фера дОС  выделяются командой  BUFFERS= в  файле CONFIG.SYS. Они
зранят записываемое на диск до  тех пор, пока все бувера  не за-
полнятся, а затем все сразу сбрасываются на диск. Элементы ката-
лога обновляются только при  физической записи буферов на  диск.
Операция STREAM завершается с закрытием файла, что автоматически
сбрасывает буфера на диск, либо с выполнением оператора FLUSH.

Поддержка этого оператора зависит от файловой системы и  описана
в документации по файловому драйверу данной системы.

Пример:

    STREAM(History)                !Используем буфера ДОС
    SET(Current)                   !Идем в начало файла CURRENT
    LOOP UNTIL EOF(Current)
      NEXT(Current)
      His:Record - Cur:Record
      ADD(History)
    .  !End loop
    FLUSH(History)                 !Завершаем поточную обработку
				   ! и сбрасываем буфера на диск

См. также: FLUSH

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
UNLOCK                     (разблокировать заблокированный файл)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             UNLOCK(файл)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

файл                Метка файла.

Оператор UNLOCK разблокирует ранее заблокированный оператором
LOCK файл данных. Он не может разблокировать файл, заблокирован-
ный другой станцией. Если файл не блокирован или блокирован дру-
гой станцией, то оператор UNLOCK игнорируется. UNLOCK не возвра-
щает каких-либо ошибок. Точное действие UNLOCK зависит от файло-
вого драйвера.

Пример:

   LOOP                      !Цикл во избежание "смертельного
   			     !  объятия"
     LOCK(Master,1)          !1 секунду пытаемся заблокировать
			     !  основной файл
     IF ERRORCODE() = 201    !Если кто-то уже блокирует его, то
       BEEP(0,100)           ! ждем секунду и
       CYCLE                 ! пытаемся снова...
     .
     LOCK(Detail,1)          !За секунду пытаемся заблокировать
			     !  файл подробностей

     IF ERRORCODE() = 201    !Если кто-то уже блокирует его, то
       UNLOCK(Master)        !  разблокируем занятый нами файл,
       BEEP(0,100)           !  подождем секунду и
       CYCLE                 !  еще разок попробуем
   . .                       !Конец операторов IF и LOOP


Яндекс цитирования