вид «-вставка = подв [1 : 0] ст (проц цел повт 0 оритель 0, об (строк, лит) стр 0 ока текста 0) ;
вид «-шаблон = ст (об (трафарет, травыб, трафор, трабесф, пуст) траф, вставка в);
вид «-трафарет = ст (цел тип 0 трафарета 0, подв [1:0] рамка рамки);
вид «-рамка = ст (вставка в, проц цел повт 0 оритель 0, лог подав 0 ление 0, лит марк 0 ер 0);
вид «-травыб 0 трафарет выбора 0 =
ст (вставка в, цел тип
(t логического или целого Ji.
подв [1:0] вставка стр оки текста (к);
вид *-трафор fi трафарет форматного 0 = ст (вставка в, проц формат прф);
вид *-трабесф fi трафарет бесформатного = ст (вставка в, подв [1:0] проц цел спец);
проц *взять след fi ующий 0 шаблон = (имя файл f, лог чит |іать ji, имя шаблон шаблон) пуст:
начало
лог есть шаблон := ложь, формат окончен := ложь;
пока есть шаблон
цк если. ук р азатель фор 0 мата (і из f = 0 то
если формат окончен
то не определено
инее (испр формат из f) (f)
то имя цел (укфор из f) := 1;
утн из (F из формат из f) [1] := 1;
счет из (F из формат из f) [1] := 1;
иначе формат окончен := истина все
иначе
имя цел укфор = укфор из f;
имя подв [ ] кадр алеф = F из формат из f:
выб (н из алеф [укфор]) [утн из алеф [укфор] ] в
(пакет пак):
([1 :вегр (в1 из пак)] подвставкапв;
оук из алеф [ удк из пак] := укфор; укфор := пропуск; (подготовить вставку (в1 из пак, пв), счет из алеф [удк из пак] := повт из пак);
(алеф :¥=: F из формат из f I не определено);
(чит I ввести вставку (f, пв)
I вывести вставку (f, пв) );
утн из алеф [удк из пак] :=
(счет из алеф [удк из пак] > 010
I есть шаблон := истина; шаблон := (пустое, ( ) );
вегр н из алеф [удк из пак]);
укфор := удк из пак),
(шаблон шабл) : (есть шаблон := истина; шаблон := шабл) быв;
пока
(укфор Ф 0
I утн из алеф [укфор] = вегр н из алеф [укфор]
I ложь)
цк если (счет из алеф [укфор] — := 1) < 0
то
если (укфор := оук из алеф [укфор]) #= 0
то
вставка добав =
выб (н из алеф [укфор]) [утн из алеф [укфор] ] в
(пакет пак):
(оук из алеф [удк из пак] :=0; в2изпак), (шаблон шабл): выб траф из шабл в
(трафор траф):
(цел к := укфор:
пока оук из алеф [к] ¥= укфор цк к +:= 1 кд;
алеф := алеф [:k - 1 ];
в из шабл) быв
быв;
цел m = вегр в из шаблон, п = вегр добав;
[l:m + n] ст (проц цел повт, об (строк, лит) стр) с;
с [1 : ш] :'= в из шаблон; с [m + 1 : т + п] := добав;
в из шаблон := с все
иначе утн из алеф [укфор] := О все кц;
(укфор Ф О I утн из алеф [укфор] +:= 1) все кц конец;
вид *-подаставка = ст (цел повт, об (строк, лит) стр);
проц ^-подготовить вставку =
(вставка вст, имя [ ] подвставка прдвст) пуст: ^совместно вызывает все повторители во 'вст' авке
если вегр вст = 1 то
повт из подвст [1] := повт из вст [1];
стр из подаст [1] := стр из вст [1]
инее вегр вст > 1
то (подготовить вставку (вст [1], подаст [1]), подготовить вставку (вст [2 :], подвст [2 :]))
все;
вид *-подрамка =
ст (подв [1 : 0] подвставка пв, цел повт, лог подав, лит марк);
проц ^подготовить рамки =
([ ] рамка рамки, имя [ ] подрамка подрамки) пуст: совместно вызывает
все повторители в рамках 'рамки' ji
если вегр рамки = 1 то
?- 136
f[1 : вегр (в из рамки [1])] подвставка пв; (подготовить вставку (в из рамки [1], пв), повт из подрамки [1 ] := повт из рамки [1]); пв из подрамки [1] :=пв;
подав из подрамки [1] := подав из рамки [1];
марк из подрамки [1] := марк из рамки [1]
инее вегр рамки > 1
то (подготовить рамки (рамки [1],подрамки [1]), подготовить рамки (рамки [2:], подрамки [2:]))
все;
проц ^вывести вставку =
(имя файл f, [ ] подвставка пв) пуст: начало настроить на запись (f);
для к до вегр пв
ЦК
выб стр из пв [к] в
(лит а) : разместить (f, повт из пв [к], а, ложь), (строк s):
до повт из пв [к] ЦК
для і до вегр S
ц
вывести литеру (f, s [і])кц
к проверить позицию (f);кц быв кц конец; h) проц ^ввести вставку = (имя файл f, [ ] подвставка пв) пуст: начало настроить на чтение (f);
для к до вегр пв цк
выб стр из пв [к] в
(лит а) : разместить (f, повт из пв [к], а, истина),
(строк s):
(лит с;
до повт из пв [к]
цк
для і до вегр S
цк проверить позицию (f);
ввести литеру (f, с);
(с #= s [і]
І (-і (испр ошибка литеры из f) (f, с := s [і])
I не определено);настроить на чтение (f) )
кц
кц)
быв
кц
конец;
і) проц ^-разместить =
(имя файл f, цел повт, лит а, лог чит) пуст: если а = ”х” то до повт вперед (f) кц инее а = ”у” то до повт цк назад (f) кц инее а = ”1” то до повт цк нов строчка (f) кц инее а = ”р” то до повт цк нов страница (f) кц инее а = ”к” то уст номер литеры (f, повт) инее а = ”q”
то до повт
цк
если ЧИТ
то лит с; проверить позицию (f); ввести литеру (f, с);
(с ¥= пробел I
(-і (испр ошибка литеры из f) (f, с := пробел) I не определено); настроить на чтение (f)) иначе проверить позицию (f);
вывести литеру (f, пробел)
все;
кц
все;
І) проц ^-выполнить трафор = (имя файл f, трафор трафор, лог чит) пуст: начало формат прф;
[1 : вегр (в из трафор) ] подвставка пв; (подготовить вставку (в из трафор, пв), прф := прф из трафор);
(чит I ввести вставку (f, пв)
I вывести вставку (f, пв));
имя цел укфор = укфор из f;
имя подв [ ] кадр алеф = f из формата из f; цел ш = вегр алеф, п = вегр (F из прф);
[1 :m + n] кадре; с [1 : ш] :=алеф;
с [m + 1 : m + n] := F из прф;
алеф := с; оук из алеф [m + 1] := укфор;
укфор :=т+ 1; утниз алеф [укфор] := 1;
счет из алеф [укфор] := 1;
для і от m +1 до ш + п
для j до вегр н из алеф [і]
ЦК
выб (н из алеф [i]) [j] В
(пакет пак):
(н из алеф [i] [j] := пакет (в 1 из пак, повт из пак, удк из пак + т,в 2 из пак)
быв
кц
кц
конец;
к) проц ^присоединить формат =
(имя файл f, формат формат) пуст:
начало
формат из f :=
с вновь созданное имя, которое начинает именовать выдачу фактического-описателя-формата и область действия которого равна области действия значения, выдаваемого посредством 'формат' с
:= формат;
укфор из f := глоб цел := 1;
утн из (F из формат из f) [1] := 1;
счет из (F из формат из f) [1] :■= 1;
оук из (F из формат из f) [1] :=0
конец;
Форматный вывод.
а) проц ф вывод =
(имя файл f, [ ] об (выводимое, формат) х) пуст: если открыт из f то
для к до вегр х
цк выб настроить на запись (f);
настроить на литерное (f);
х [к] в
(формат формат) : присоединить формат (f, формат), (выводимое выв):
начало цел j := 0
шаблон шаблон, [ ] провывод у = стройвывод выв;
пока (j +:= 1) < вегр у
цк лог не конч := ложь;
взять след шаблон (f, ложь, шаблон);
настроить на запись (f);
[1 : вегр (в из шаблон)] подвставк^ подвст;
выб траф из шаблон в
(трафарет трафарет):
начало цел повт, ук азатель рам ок := 1;
[1 : вегр (рамки из трафарет) ] подрамка Подрамки;(подготовить рамки (рамки из трафарет, подрамки), подготовить вставку (в из шаблон, подвст) );
строк s;
on ? = (строк s) лог:
(і истина, если следующий маркер есть один из элементов 's', а иначе ложь (і если украм > вегр подрамки
то ложь
иначе подрамка пр = подрамки [украм];
повт := повт из пр;
если литера в строке '
(марк из пр, лог цел, s)
то украм +:= 1; истина иначе ложь
все все; оп ? = (лит с) лог: ?строк (с); проц цел трафарет =
(имя лог образец знака) цел: (цел 1 := 0;
пока ? ”zuv” цк (повт >0 11 + := повт) кц;
образец знака := ? ”+
пока ? ”zd”
цк (повт >0 11 + := повт) кц; 1);
< проц ред актировать Д цел = (Д цел і) пуст: (лог образец знака;
цел 1 := цел трафарет (образец знака);
строк t = предст целого (абс і, 1);
если литера в строке (литера ошибки лок цел, t) V 1 = 0 V і образец знака А і < Д 0
то не конч := истина иначе t прип s;
(1 - верг t) X ”0” прип s;
(образец знака I (х < Д 0 I ” I ”+”) прип s) все) >;
< проп ред Д вещ = (Д вещ в) пуст:
(цел b := 0, а := 0,
пор := 0, Д вещ у := абс в, лог знак 1, строк точка = b := цел трафарет (знак 1); (? **. ” I а := цел трафарет (лок лог);
точка := ” .”);
если ? ”е”
то Д нормализовать (у, Ь, а, пор) ;
редцел (пор);
”ю” прип S
все;
строк t = предст рационального
(у, b + а + (а #= 0 111 0), а);
если литера в строке
(литера ошибки, лок цел, t) V
а + b = 0 V _|знак 1 Л г < Д 0 то не конч := истина
иначе t [:b] + точка + t [Ь + 2:]прип s;
(b + а + (а =# о 111 0) - вегр t) X ” 0” прип s;
(знак 1 I (в < Д О I ”-”1 прип s)
все) >;
< проц ред Д компл = (Д компл дк) пуст:
пока ?’’ і” цк украм +:= 1 кц;
ред Д вещ (мч дк) ;
”1” прип s; украм := 1; ред Д вещ (вчдк)) >;
< проц ред Д бит =
(Д бит дб, цел основание) пуст:
(Д цел п.:= абс дб; ? "г”;
цел 1 := цел трафарет (лок лог);
пока литеру в цифру (С (п мод У основание) ) прип s;
п -5-:= У основание; п ¥= Д О
цк пропуск кц;
если вегр s < 1
то (1 - вегр s) X "О” прип s
иначе не конч := истина
все) >,
проц счет 0 чик лит ер (і = цел :
(цел 1 := 0;
пока ? "а” цк (повт >0 I 1+:=повт) кц; 1) ;
выб тип из трафарет в
(і целое (і
(у В] і
< (Д цел і) : ред Д цел (і) >