т) проц при конце физ файла = (имя файл f,

проц (имя файл) лог р) пуст: испр физ файл из f := р;

проц (имя файл, проц (имя файл) лог) пуст

on physical file end = при конце физ файла;

  1. проц при конце страницы = (имя файл f,

проц (имя файл) лог р) пуст: испр страница из f := р;

проц (имя файл, проц (имя файл) лог) пуст on page end = при конце страницы;

  1. проц при конце строчки = (имя файл f,

проц (имя файл) лог р) пуст: испр строчка из f := р;

проц (имя файл, проц (имя файл) лог) пуст

on line end = при конце строчки;

  1. проц при конце формата = (имя файл f,

проц (имя файл) лог р) пуст: испр формат из f := р;

проц (имя файл, проц (имя файл) лог) пуст

on format end = при конце формата;

  1. проц при ошибке значения = (имя файл f,

проц (имя файл) лог р) пуст:

испр ошибка значения из f := р;

проц (имя файл, проц (имя файл лог) пуст

on value error = при ошибке значения;

г) проц при ошибке литеры = (имя файл f,

проц (имя файл, имя лит) лог р) пуст: испр ошибка литеры из f := р;

проц (имя файл, проц (имя файл, имя лит) лог) пуст on char error = при ошибке литеры;

  1. проц переобозначение =' (имя файл f, строк обозн) пуст:

если открыт из f Л возм переобозначение (f) Л приемлемо обозн (обозн)

то обозначение из книга из f := обозн

все;

проц (имя файл, строк) пуст reidf = переобозначение;

  1. . Открытие и закрытие файлов.

{аа) Когда в ходе обмена происходит что-то, оставленное неопределен­ным, например, явно вызывается не определено (а), это вовсе не значит, что исполнение катастрофически и немедленно прерывается (2.1.4.3.h), а лишь что предпринимаются какие-то осмысленные действия, которые не описываются или их нельзя описать одним данным стандартом, то есть они зависят от реализации.

bb) Книга „связывается” с файлом при помощи процедур завести (Ь), создать (с) и открыть (d). Эта связь может прекратиться с помощью проце­дур закрыть (п), снять (о) и стереть (р).

сс) Когда файл „заводится” на каком-то канале, создается (5.2.3) кни­га с текстом заданного размера, с заданной идентифицирующей строкой, с полем запись, установленным в истина, и с логическим концом книги в (1,1,1). Некоторые реализации могут требовать (g), чтобы образующие идентифицирующую строку литеры были взяты из ограниченного множе­ства и чтобы эта строка была ограниченной длины. Может также потребо­ваться, чтобы никакие две книги не имели одинаковые идентифицирующие строки. Если заведение завершается успешно, то вырабатывается значение 0, а иначе вырабатывается ненулевое целое число (его значение может ука­зывать, почему файл не был успешно заведен) .

Когда файл „создается” на канале, заводится какой-то файл с книгой, размер текста которой принят по умолчанию для этого канала, а идентифи­цирующая строка не определена.

dd) Когда файл „открывается”, в цепочке связок ищется первая книга, такая, что соответствует (h) вырабатывает истина. (Точной метод соответ­ствия не определяется настоящим стандартом и, вообще говоря, зависит от реализации. Например, поставляемая в качестве параметра процедуры от­крыть строка может в некоторой форме включать в себя какой-нибудь па­роль) . Если достигается конец данной цепочки связок или книга уже была выбрана и ее поле запись вырабатывает истина, или запись в эту книгу воз­можна через данный канал, а книга уже открыта, то дальнейшее исполнение не определено. Если данный файл уже открыт, то операция вверх гномы обеспечивает возможность для подходящих системных действий над этой предварительно связанной книгой- (в случае, если не осталось никакой дру­гой копии данного файла, чтобы сохранить эту связь).

ее) Процедуру соединить можно использовать, чтобы соединить с фай­лом значение вида, специфицируемого одним из описателей имя [ ] лит,

имя [ ] [ ] лит или имя [ ] [ ] [ ] лит, таким образом, подобные пе­ременные можно использовать в качестве книги некоторого файла*

ff) Когда файл „закрывается”, его книга присоеданяется к цепочке связок, именуемой доступные книги. Затем активизируется некоторая си- стемная-задача при помощи вверх гномы. (Она может реорганизовать эту цепочку связок, удалить данную книгу или добавить ее другие копии. Она может также вызвать выдачу этой книги на внешнее устройство).

gg) Когда файл „снимается”, его книга присоединяется к цепочке свя­зок, именуемой снятые книги. Затем активизируется некоторая системная- задача при помощи вверх гномы. Снятую книгу нельзя снова открыть до тех пор, пока какая-нибудь последующая системная-задача не переместит эту книгу в цепочку связок, доступных для открытия.

hh) Когда файл „стирается”, активизируется некоторая системная-за­дача при помощи вверх гномы. (Она может некоторым образом удалить книгу, связанную с этим файлом.)}

  1. проц *не определено = цел: с какое-либо осмысленное

действие системы, выдающее целое число, чтобы указать, что было сделано; предполагается, что это действие системы может зависеть от знания любого значения, к которому есть доступ /”2.1.2.с} через участок любого окружения, старшего, чем то окружение, в кото­ром исполняется данное псевдопримечание {, несмотря на то, что . нельзя написать никакого конструкта Алгола 68, который может иметь доступ к этим значениям} с;

  1. проц завести =

(имя файл файл, строк обозн, канал кан, цел р,1, с) цел:

начало

вниз защита связей;

ПЕРВ книга книга !=

(ПЕРВ подв [1 : р] подв [1 :1] подв [1 : с] лит,

  1. обозн, истина, 1);

если файл доступен (кан) Л

(вывод из кан) (книга) Л

заведение из кан Л -п

(позиция (р, 1, с) вне макс позиция из кан)

Д—'(позиция (1,1,1) вне позиция (р, 1, с)) А

обозн приемлемо (обозн)

то

(открыт из файл I

вверх гномы I вверх защита связей);

файл := ' .

(книга, текст из книга, кан, пропуск, пропуск,

состояние: глоб лог := ложь,глоблог чистина,

глоб лог :=ложь, глоб лог := ложь, глоб лог := истина,

глоб позиция := (1,1,1), ” ”,

(станд код из кан) (книга),

Й процедуры обработки события: й ложь, ложь, ложь, ложь, ложь, ложь, (имя файл f, имя лит а) лог: ложь);

(-. возм двоичн (файл) I

настроить на литерное (файл));

О

иначе вверх защита связей; не определено

все

конец:

проц (имя файл, строк,

канал, цел, цел, цел) цел establish = завести;

  1. проц создать = (имя файл, файл, канал кан) цел:

начало позиция макс позиция = макс позиция из кан;

завести (файл, пропуск, кан, р из макс позиция,

  1. из макс позиция, с из макс позиция)

конец;

проц (имя файл, канал) цел create = создать;

  1. проц открыть = (имя файл файл, строк обозн, канал кан) цел: начало

вниз защита связей;

если файл доступен (кан)

то имя имени связка св := доступные кйиги;

лог есть := ложь;

пока (имя связка (св) :#=: нил) А -«есть

ЦК

если соответствует (обозн, кан, книга из св) то есть := истина

иначе св := след из св

все

кц;

если -ті есть

то вверх защита связей; не определено иначе имя книга книга := книга из св;

если запись из книга V (вывод из кан) (книга) А пользователи из книга > О

то

вверх защита связей; не определено

0 в этом случае открытию мешают другие пользователи — система может либо ждать, либо выдать ненулевое значение (указывающее на неуспех открытия) немедленно fl

иначе

пользователи из книга +:= 1;

(( вывод из кан) (книга) Iзапись из книга := истина);

имя имени связка (св) := след из св;

удалить связку из цепочки доступных jt

(открыт из файл I

вверх гномы I вверх защита связей);

файл :=

(книга, текст из книга, кан, пропуск, пропуск, 0 состояние: jt глоб лог := ложь, глоб лог := ложь,

глоб лог := ложь, глоб лог := ложь, глоб лог: = истина, •

глобпозиция := (1,1,1), (станд код из кан) (книга), процедуры обработки события: ложь, ложь, ложь, ложь, ложь, ложь, (имя файл f, имя лит а) лог: ложь);

(-. возм двоичн (файл) I настроить на литерное (файл) );

(-» возм ввод (файл) I настроить на запись (файл));

(-. возм вывод (файл) I настроить на чтение (файл) );

О

все

все

иначе вверх защита связей; не определено все

конец;

проц (имя файл, строк, кан) цел open = открыть;

  1. проц соединить =

(имя файл файл, имя [][][] лит том) пуст: если цел р = нигр том; цел 1 = нигр том [р];

цел с = нигр том [р] [1]; р = 1 А 1 = 1 А с = 1

то

проц и = (имя книга а) лог: истина;

проц л = (имя книга а) лог: ложь;

канал кан = (и, и, и, и, л, л, л, лог: ложь, позиция: (макс цел, макс цел, макс цел), пропуск,пропуск);

(открыт из файл I

вниз защита связей; вверх гномы);

файл :=

(глобкнига := (пропуск, (вегртом+ 1,1,1 ), пропуск, истина, 1), том, кан, пропуск, пропуск, 0состояние: 0глоб лог := ложь, глоб лог :=ложь, глоб лог := истина, глоб лог := ложь, глоб лог := истина,глоб позиция := (1,1,1), ” пропуск, 0 процедуры обработки события: ложь, ложь, ложь, ложь, ложь, ложь, (имя файл f, имя лит а) лог; ложь) иначе не определено

все;

проц (имя файл,

имя [ ] [ ] [ ] лит) пуст associate = соединить;

0 проц ^файл доступен = (канал кан) лог: с истина, если в данный момент

на'кан'але можно открыть некоторый другой файл, а иначе ложь с;

  1. проц ^обозн приемлемо = (строк обози) лог: с истина, если 'обозн'ачение премлемо для данной реализации в качестве обозначения, идентифицирующего новую книгу, а иначе ложь с;

  2. проц ^соответствует =

(строк обозн, канал кан, имя книга имя книги) лог: с истина, если книга, именуемая через 'имя книги', может идентифицироваться посредством этого 'обозн'ачения, и если к данной книге может быть правильный доступ через 'кан'ал, а иначе ложь с;

  1. проц *-ложь = (имя файл файл) лог: ложь

с включена для сокращения текста процедур 'завести', 'открыть' и 'соединить' с;

  1. проц ^-настроить на запись = (имя файл f) пуст : если возм вывод (f) V

возм установка (f) Л для двоичн из f Л для чтения из f то не определено иначе имя лог (для чтения из f) :=ложь;

имя лог (для записи из f) ;= истина • все;

  1. проц ^настроить на чтение = (имя файл 0 пуст: 1

если возм ввод (0 V

-п вОзм установка (0 Д

для двоичн из f А для записи из f

то не определено

иначе имя лог (для чтения из 0 := истина;

имя лог (для записи из 0 := ложь все;

  1. проц ^-настроить на литерное = (имя файл 0 пуст: если возм установка (0 Л для двоичн из f то не определено

иначе имя лог (для литер из 0 := истина;

имя лог (для двоичн из f) := ложь все;

ш) проц ^-настроить на двоичное = (имя файл f) пуст: если Т ВОЗМ ДВОИЧН (f) V-i

возм установка (f) Л для литер из f

то не определено

иначе имя лог (для литер из f) := ложь; имя лог (для двоичн из f) := истина

все;

п) проц Закрыть = (имя файл файл) пуст: если открыт из файл то

вниз защита связей;

имя лог (открыт из файл) :=ложь;

имя книга книга = книга из файл;

запись из книга := ложь;

пользователи из книга -:= 1;

(текст из файл I (подвтекст): доступные книги: ПЕРВ связка := (книга, доступные книги) );

. вверх гномы все;

проц (имя файл) пуст close = закрыть;

о) проц снять = (имя файл файл) пуст:

если открыт из файл то

вниз защита связей;

имя лог (открыт из файл) :=ложь;

имя книга книга = книга из файл;

запись из книга := ложь;

пользователи из книга — := 1;

(текст из файл I (подвтекст) : снятые книги := ПЕРВ связка := (книга, снятые книги));

вверх гномы все;

проц (имя файл) пуст lock = снять;

р) проц стереть = (имя файл файл) пуст: