(*~\Глагол\ПриложенияLink\ПГ\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                              ОТДЕЛ ОО;
(*============================================================================*)
(* НАЗНАЧЕНИЕ:                                                                *)
(*             Обработка Ошибок                                               *)
(* ПРИМЕЧАНИЯ:                                                                *)
(*             Определение кодов всех ошибок, распознаваемых преобразователем.*)
(*             Задачи по выводу на экран соответствующих текстовых сообщений  *)
(*============================================================================*)

ИСПОЛЬЗУЕТ 
        (*  \Глагол\              *)
 оЦепи    ИЗ "..\..\Отделы\Иное\",

  СС;

ВИД
  нТекстПоз- = НАБОР
    строка+,
    колонка+:ЦЕЛ
  КОН;
                 ЗадачаПоОшибке = ЗАДАЧА(строка,колонка:ЦЕЛ; текст-:ЦЕПЬ);
ПЕР
  задВыводОшибки:ЗадачаПоОшибке;

  текПоз+:нТекстПоз; (* позиция в файле обрабатываемого слова *)

ПОСТ
                                   (* Соответствие названий ошибок и их кодов *)
  НЕ_ОБЪЯВЛЕНО-              =100;
  ПЕРЕОПРЕДЕЛЕНИЕ-           =101;
  ДЛИННОЕ_НАЗВАНИЕ-          =102;
  НЕЗАКРЫТОЕ_ПРИМЕЧАНИЕ-     =103;
  НЕСОВПАДЕНИЕ_ИМЕНИ-        =104;
  ЭТО_НЕ_ПОСТОЯННАЯ-         =105;
  ЭТО_НЕ_ЗАДАЧА-             =106;
  ЭТО_НЕ_ВИД-                =107;
  ЭТО_НЕ_ПЕРЕМЕННАЯ-         =108;
  ЭТО_НЕ_НАБОР-              =109;
  ЭТО_НЕ_РЯД-                =120;
  ЭТО_НЕ_РАСШИРЕНИЕ-         =121;
  НЕВЕРНЫЙ_ЗНАК_В_ЧИСЛЕ-     =122;
  НЕВЕРНЫЙ_ЗНАК_В_ЦЕПОЧКЕ-   =123;
  НЕВЕРНОЕ_НАЧАЛО_ВИДА-      =124;
  НЕВЕРНОЕ_НАЧАЛО_МНОЖИТЕЛЯ- =125;
  ВЫХОД_ВНЕ_КОЛЬЦА-          =126;
  НЕВЕРНАЯ_ОТМЕТКА-          =127;
  ПОСТОЯННАЯ_НЕ_ЦЕЛАЯ-       =128;
  НЕТ_ОТВЕТА-                =129;
  ЛИШНИЙ_ОТВЕТ-              =130;
  ПРИСВАИВАНИЕ_ОТВЕТУ-       =131;
  НЕВЕРНЫЙ_ВИД_ОТВЕТА-       =132;
  СЛОЖНЫЙ_ОТВЕТ-             =133;
  ОТВЕТ_НЕ_ИСПОЛЬЗОВАН-      =134;
  НЕСООТВЕТСТВИЕ_ПРИЕМНИКА-  =135;
  ВИД_ПРИЕМНИКА-             =136;
  НЕВЕРНЫЙ_ПРИЕМНИК_ОРЯДА-   =137;
  МНОГО_ИСТОЧНИКОВ-          =138;
  МАЛО_ИСТОЧНИКОВ-           =139;
  ПРИСВАИВАНИЕ_НЕ_ПЕРЕМЕННОЙ-=140;
  ДОСТУП_ЗАПРЕЩЕН-           =141;
  ПЕРЕКРЕСТНЫЙ_ВИД-          =142;
  НЕПРАВИЛЬНЫЙ_ВИД_МЕТКИ-    =143;
  ПОВТОРНАЯ_МЕТКА-           =144;
  НЕВЕРНАЯ_ПОСТОЯННАЯ-       =145;
  РАЗНЫЕ_ОПОРНЫЕ_ВИДЫ-       =146;
  ИСТОЧНИК_НЕ_РЯД-           =147;
  ИСТОЧНИК_НЕ_ЦЕЛАЯ_ПОСТ-    =148;
  НЕВЕРНЫЙ_ИСТОЧНИК-         =149;
  НУЖНО_0_УРОВЕНЬ-           =150;
  ПЕР_ДЛЯ_ЧТЕНИЯ-            =151;
  ССЫЛКА_НЕ_ОТ_ПЕР-          =152;
  ССЫЛКА_НЕ_ОТ_ДОСТУПА-      =153;
  НОМЕР_НЕ_ОТ_ПЕР-           =154;
  НОМЕР_НЕ_ЦЕЛЫЙ-            =155;
  НЕТ_СВОЙСТВА-              =156;
  ОХРАНА_НЕ_У_ДОСТУПА-       =157;
  ОХРАНА_НЕВОЗМОЖНА-         =158;
  ОРЯД_НЕДОПУСТИМ-           =159;
  ВИД_НЕ_ДЛЯ_В-              =160;
  МНОЖЕСТВО_НЕ_ИЗ_ЦЕЛЫХ-     =161;
  ОЖИДАЕТСЯ_КЛЮЧ-            =162;
  И_НЕ_С_КЛЮЧОМ-             =163;
  ИЛИ_НЕ_С_КЛЮЧОМ-           =164;
  НЕ_НЕ_С_КЛЮЧОМ-            =165;
  НЕСОВМЕСТИМЫЕ_ВИДЫ-        =166;
  НЕСОВМЕСТИМОЕ_ПРИСВАИВАНИЕ-=167;
  ПЛЮС_НЕПРИМЕНИМ-           =168;
  МИНУС_НЕПРИМЕНИМ-          =169;
  УМНОЖЕНИЕ_НЕПРИМЕНИМО-     =170;
  ДЕЛЕНИЕ_НЕПРИМЕНИМО-       =171;
  ДЕЛИТЬ_НЕПРИМЕНИМО-        =172;
  ОСТАТОК_НЕПРИМЕНИМО-       =173;
  СРАВНЕНИЕ_НЕПРИМЕНИМО-     =174;
  НЕ_СОВМЕСТИМО_С_ЗАДАЧЕЙ-   =175;
  СТРОКА_ВЕЛИКА-             =176;
  МЕТКА_НЕ_СОВПАДАЕТ-        =177;
  НЕПРАВИЛЬНАЯ_МЕТКА-        =178;
  ВИД_ВЫБОРА-                =179;
  ЗАДАЧИ_И_ВИДЫ_ЗАПРЕЩЕНЫ-   =180;
  НЕСУЩЕСТВУЮЩИЙ_ВИД-        =181;
  НЕВЕРНАЯ_ЗАГОТОВКА-        =182;
  РАЗМЕР_БЕЗ_РЯДА-           =183;
  УПР_НЕ_ЦЕЛАЯ-              =184;
  ВЫХОД_ЗА_ГРАНИЦЫ_РЯДА-     =185;
  НЕВЕРНАЯ_РАЗМЕРНОСТЬ-      =186;
  ПЕРЕКРЕСТНОЕ_ИСПОЛЬЗОВАНИЕ-=187;
  ПЕРЕПУТАНЫ_ГРАНИЦЫ-        =188;
  ГРАНИЦЫ_МНОЖЕСТВА-         =189;
  ДЕЛЕНИЕ_НА_НОЛЬ-           =190;
  БОЛЬШОЕ_ЧИСЛО-             =191;
  БОЛЬШОЕ_ПРОИЗВЕДЕНИЕ-      =192;
  БОЛЬШАЯ_СУММА-             =193;
  БОЛЬШАЯ_РАЗНОСТЬ-          =194;
  БОЛЬШОЙ_ВЫБОР-             =195;
  БОЛЬШОЙ_КОД-               =196;
  НЕТ_МЕТОК-                 =197;
  НЕТ_РЕГИСТРОВ-             =198;
  НЕТ_ВЕЩ_РЕГИСТРОВ-         =199;
  МНОГО_МЕТОК-               =200;
  МНОГО_ОТДЕЛОВ-             =201;
  МНОГО_ОБЩЕДОСТУПНЫХ-       =202;
  МНОГО_ВЛОЖЕННЫХ-           =203;
  МНОГО_ПЕР_ЗАДАЧИ-          =204;
  МНОГО_ПРИЕМНИКОВ_ЗАДАЧИ-   =205;
  МНОГО_ПОСТОЯННЫХ-          =206;
  БОЛЬШАЯ_ГЛУБИНА-           =207;
  ПЕР_НЕДОПУСТИМЫ-           =208;
  УКАЗАНИЯ_НЕДОПУСТИМЫ-      =209;
  ОЖИДАЕТСЯ_ЗАДАЧА_УКАЗ_КОН- =210;
  ФАЙЛ_НЕ_ОТКРЫВАЕТСЯ-       =211;
  ФАЙЛ_НЕ_СОЗДАЕТСЯ-         =212;
  ОТДЕЛ_ОТЛИЧАЕТСЯ_ОТ_ФАЙЛА- =213;
  НЕОЖИДАННЫЙ_КОНЕЦ_ФАЙЛА-   =214;
  ТЕКСТОРЕЗ_НЕ_ПОНИМАЕТ-     =215;
  ТЕКСТОРЕЗ_НЕ_ОКОНЧЕН-      =216;
  МНОГО_УРОВНЕЙ_ТЕКСТОРЕЗА-  =217;
  ЛИШНИЙ_КОН_У_ТЕКСТОРЕЗА-   =218;
  ПРИЁМНИК_СОСТ_ВИДА-        =219;
  НЕОЖИДАННЫЙ_ОТДЕЛ-         =220;
  НЕСОВПАДЕНИЕ_РАЗМЕРОВ-     =221;
  ВЫЗОВ_ПЕРЕДАВАЕМОЙ-        =222;
  ВИД_ПЕРЕДАВАЕМОЙ-          =223;
                                 

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       ОтметитьПоз-( 
                          код :ЦЕЛ;
                    позОшибки-:нТекстПоз;
                     допТекст-:ЦЕПЬ
                   );
(*
 * Преобразует код ошибки <код> в текстовое сообщение и передает его
 * наверх. При этом дополнительный текст <допТекст> заменяет в исходном
 * сообщении первый (одиночный) символ '%'.
 *)
ПЕР
  поз:ЦЕЛ;
  текст:ЦЕПЬ[250];
УКАЗ
  ВЫБРАТЬ код ИЗ
  | СС.равно:     текст:='пропущено "="'
  | СС.из:        текст:='пропущена "," или "ИЗ"'
  | СС.название:  текст:='пропущено название'
  | СС.кон:       текст:='пропущено "КОН"'
  | СС.до:        текст:='пропущено "ДО"'
  | СС.отдел:     текст:='пропущено "ОТДЕЛ"'
  | СС.точка:     текст:='пропущена "."'
  | СС.запятая:   текст:='пропущена ","'
  | СС.двоеточие: текст:='пропущено ":"'
  | СС.пркругл:   текст:='пропущена ")"'
  | СС.прквадр:   текст:='пропущена "]"'
  | СС.прфигурн:  текст:='пропущена "}"'
  | СС.то:        текст:='пропущено "ТО"'
  | СС.вып:       текст:='пропущено "ВЫП"'
  | СС.к:         текст:='пропущено "К"'
  | СС.лкругл:    текст:='пропущена "("'
  | СС.присвоить: текст:='пропущено ":="'
  | СС.точкасзап: текст:='пропущена ";"'
  | СС.вида:      текст:='пропущено "ВИДА"'
  | СС.набор:     текст:='пропущено "НАБОР"'
  | СС.цепьпост:  текст:='пропущена цепочка знаков'

  | НЕ_ОБЪЯВЛЕНО:               текст:='название не объявлено'
  | ПЕРЕОПРЕДЕЛЕНИЕ:            текст:='переопределение названия'
  | НЕВЕРНЫЙ_ЗНАК_В_ЧИСЛЕ:      текст:='неверный знак в записи числа'
  | НЕВЕРНЫЙ_ЗНАК_В_ЦЕПОЧКЕ:    текст:='неверный знак в цепочке'
  | НЕСОВПАДЕНИЕ_ИМЕНИ:         текст:='название не совпадает с именем задачи'
  | НЕЗАКРЫТОЕ_ПРИМЕЧАНИЕ:      текст:='пояснение не закрыто'
  | НЕВЕРНОЕ_НАЧАЛО_ВИДА:       текст:='неверное начало объявления вида'
  | НЕВЕРНОЕ_НАЧАЛО_МНОЖИТЕЛЯ:  текст:='неверное начало множителя'
  | ВЫХОД_ВНЕ_КОЛЬЦА:           текст:='использование "ВЫХОД" вне "КОЛЬЦО"'
  | НЕВЕРНАЯ_ОТМЕТКА:           текст:='неверно отмеченное название'
  | ЭТО_НЕ_ПОСТОЯННАЯ:          текст:='результат выражения должен быть постоянным'
  | ПОСТОЯННАЯ_НЕ_ЦЕЛАЯ:        текст:='вид постоянной не целый'
  | ЭТО_НЕ_НАБОР:               текст:='понятие не является видом "НАБОР"'
  | СЛОЖНЫЙ_ОТВЕТ:              текст:='вид ответа задачи не может быть ни видом "НАБОР", ни видом "РЯД"'
  | ОТВЕТ_НЕ_ИСПОЛЬЗОВАН:       текст:='эта задача возвращает ответ'
  | ПРИСВАИВАНИЕ_НЕ_ПЕРЕМЕННОЙ: текст:='присваивание значения не переменной'
  | ДОСТУП_ЗАПРЕЩЕН:            текст:='доступ не связан с видом "НАБОР" или "РЯД"'
  | ПЕРЕКРЕСТНЫЙ_ВИД:           текст:='перекрёстное определение вида'
  | НЕВЕРНЫЙ_ПРИЕМНИК_ОРЯДА:    текст:='неверный приёмник открытого ряда'
  | НЕПРАВИЛЬНЫЙ_ВИД_МЕТКИ:     текст:='неправильный вид у метки выбора'
  | ПОВТОРНАЯ_МЕТКА:            текст:='повторное использование значения для метки выбора'
  | НЕВЕРНАЯ_ПОСТОЯННАЯ:        текст:='неверное значение постоянной'
  | МНОГО_ИСТОЧНИКОВ:           текст:='источников больше, чем приёмников в объявлении задачи'
  | МАЛО_ИСТОЧНИКОВ:            текст:='источников меньше, чем приёмников в объявлении задачи'
  | РАЗНЫЕ_ОПОРНЫЕ_ВИДЫ:        текст:='несовпадение опорного вида ряда у источника и приёмника'
  | ИСТОЧНИК_НЕ_РЯД:            текст:='источник, соответствующий открытому ряду, не является рядом'
  | ИСТОЧНИК_НЕ_ЦЕЛАЯ_ПОСТ:     текст:='источник должен быть постоянной целого вида'
  | НУЖНО_0_УРОВЕНЬ:            текст:='задача должна быть 0-го уровня'
  | ПЕР_ДЛЯ_ЧТЕНИЯ:             текст:='эта переменная (свойство) только для чтения'
  | ССЫЛКА_НЕ_ОТ_ПЕР:           текст:='ссылка не от переменной'
  | НОМЕР_НЕ_ОТ_ПЕР:            текст:='номер не у переменной'
  | НОМЕР_НЕ_ЦЕЛЫЙ:             текст:='номер не целого вида'
  | ЭТО_НЕ_РЯД:                 текст:='переменная не является рядом'
  | НЕТ_СВОЙСТВА:               текст:='свойство не определено в наборе'
  | ССЫЛКА_НЕ_ОТ_ДОСТУПА:       текст:='ссылка не от доступа'
  | ЭТО_НЕ_РАСШИРЕНИЕ:          текст:='не является расширением вида'
  | ОХРАНА_НЕ_У_ДОСТУПА:        текст:='охрана или проверка вида не у переменной вида доступ'
  | ОХРАНА_НЕВОЗМОЖНА:          текст:='охрана или проверка вида и не у переменной вида доступ, и не у приёмника ссылок'
  | ОРЯД_НЕДОПУСТИМ:            текст:='открытый ряд не может быть ни переменной, ни свойством в наборе, ни слагаемым ряда'
  | ВИД_НЕ_ДЛЯ_В:               текст:='данные для "В" и не целого вида, и не вида множество'
  | МНОЖЕСТВО_НЕ_ИЗ_ЦЕЛЫХ:      текст:='элемент множества не целого вида'
  | И_НЕ_С_КЛЮЧОМ:              текст:='"И" используется не с ключевым видом'
  | ИЛИ_НЕ_С_КЛЮЧОМ:            текст:='"ИЛИ" используется не с ключевым видом'
  | ПЛЮС_НЕПРИМЕНИМ:            текст:='"+" неприменимо к этому виду'
  | МИНУС_НЕПРИМЕНИМ:           текст:='"-" неприменимо к этому виду'
  | НЕ_НЕ_С_КЛЮЧОМ:             текст:='"НЕ" используется не с ключевым видом'
  | НЕСОВМЕСТИМЫЕ_ВИДЫ:         текст:='несовместимые виды'
  | УМНОЖЕНИЕ_НЕПРИМЕНИМО:      текст:='"*" неприменимо к этому виду'
  | ДЕЛЕНИЕ_НЕПРИМЕНИМО:        текст:='"/" неприменимо к этому виду'
  | ДЕЛИТЬ_НЕПРИМЕНИМО:         текст:='"ДЕЛИТЬ" неприменимо к этому виду'
  | ОСТАТОК_НЕПРИМЕНИМО:        текст:='"ОСТАТОК" неприменимо к этому виду'
  | СРАВНЕНИЕ_НЕПРИМЕНИМО:      текст:='сравнение неприменимо к этому виду'
  | ЭТО_НЕ_ВИД:                 текст:='не является видом'
  | НЕ_СОВМЕСТИМО_С_ЗАДАЧЕЙ:    текст:='не совместимо с (этой) задачей'
  | ЭТО_НЕ_ПЕРЕМЕННАЯ:          текст:='не является переменной'
  | НЕСОВМЕСТИМОЕ_ПРИСВАИВАНИЕ: текст:='несовместимое присваивание'
  | СТРОКА_ВЕЛИКА:              текст:='строка слишком велика для присваивания'
  | НЕСООТВЕТСТВИЕ_ПРИЕМНИКА:   текст:='несоответствие приёмника'
  | НЕТ_ОТВЕТА:                 текст:='вызов задачи без ответа'
  | ЛИШНИЙ_ОТВЕТ:               текст:='вызов задачи с ответом'
  | НЕВЕРНЫЙ_ВИД_ОТВЕТА:        текст:='не согласуется вид ответа'
  | МЕТКА_НЕ_СОВПАДАЕТ:         текст:='метка общедоступности не совпадает с меткой заготовки'
  | НЕПРАВИЛЬНАЯ_МЕТКА:         текст:='неправильная метка общедоступности'
  | ОЖИДАЕТСЯ_КЛЮЧ:             текст:='ожидается ключевой вид выражения'
  | ЭТО_НЕ_ЗАДАЧА:              текст:='понятие не является задачей'
  | ВИД_ПРИЕМНИКА:              текст:='вид источника отличен от вида соответствующего приёмника'
  | ПРИСВАИВАНИЕ_ОТВЕТУ:        текст:='вид выражения отличен от вида ответа задачи'
  | ВИД_ВЫБОРА:                 текст:='вид выражения выбора не является ни "ЦЕЛ", ни "ЗНАК"'
  | ЗАДАЧИ_И_ВИДЫ_ЗАПРЕЩЕНЫ:    текст:='это выражение не может быть ни видом, ни задачей'
  | НЕСУЩЕСТВУЮЩИЙ_ВИД:         текст:='доступ к несуществующему виду'
  | НЕВЕРНАЯ_ЗАГОТОВКА:         текст:='неверная заготовка задачи'
  | РАЗМЕР_БЕЗ_РЯДА:            текст:='"РАЗМЕР" применяется не для ряда'
  | НЕВЕРНАЯ_РАЗМЕРНОСТЬ:       текст:='размерность у "РАЗМЕР" отрицательная или слишком большая'
  | ПЕРЕКРЕСТНОЕ_ИСПОЛЬЗОВАНИЕ: текст:='перекрёстное использование отделов запрещено'
  | ПЕРЕПУТАНЫ_ГРАНИЦЫ:         текст:='нижняя граница больше, чем верхняя'
  | ГРАНИЦЫ_МНОЖЕСТВА:          текст:='элемент множества больше, чем МАКС(МНОЖ), или меньше, чем 0'
  | БОЛЬШОЕ_ЧИСЛО:              текст:='очень большое число'
  | БОЛЬШОЕ_ПРОИЗВЕДЕНИЕ:       текст:='очень большое произведение'
  | ДЕЛЕНИЕ_НА_НОЛЬ:            текст:='деление на ноль'
  | БОЛЬШАЯ_СУММА:              текст:='очень большая сумма'
  | БОЛЬШАЯ_РАЗНОСТЬ:           текст:='очень большая разность'
  | БОЛЬШОЙ_ВЫБОР:              текст:='диапазон выбора очень большой'
  | БОЛЬШОЙ_КОД:                текст:='очень большой код'
  | МНОГО_МЕТОК:                текст:='у "ВЫБРАТЬ" слишком много меток'
  | НЕТ_МЕТОК:                  текст:='у "ВЫБРАТЬ" совсем нет меток'
  | НЕТ_РЕГИСТРОВ:              текст:='попробуйте упростить выражение'
  | НЕТ_ВЕЩ_РЕГИСТРОВ:          текст:='не хватает вещественных регистров (попробуйте упростить выражение)'
  | НЕВЕРНЫЙ_ИСТОЧНИК:          текст:='неверное значение источника'
  | МНОГО_ОТДЕЛОВ:              текст:='используется очень много отделов'
  | МНОГО_ОБЩЕДОСТУПНЫХ:        текст:='очень много общедоступных понятий'
  | МНОГО_ВЛОЖЕННЫХ:            текст:='очень много вложенных наборов'
  | БОЛЬШАЯ_ГЛУБИНА:            текст:='очень большая глубина вложения расширенных наборов'
  | ДЛИННОЕ_НАЗВАНИЕ:           текст:='очень длинное название'
  | ПЕР_НЕДОПУСТИМЫ:            текст:='в отделе описания не могут находиться переменные'
  | УКАЗАНИЯ_НЕДОПУСТИМЫ:       текст:='в отделе описания не могут находиться указания'
  | МНОГО_ПЕР_ЗАДАЧИ:           текст:='очень большой размер переменных задачи'
  | МНОГО_ПРИЕМНИКОВ_ЗАДАЧИ:    текст:='очень большой размер приёмников'
  | МНОГО_ПОСТОЯННЫХ:           текст:='очень много постоянных'
  | ОЖИДАЕТСЯ_ЗАДАЧА_УКАЗ_КОН:  текст:='пропущено "ЗАДАЧА", "УКАЗ" или "КОН"'
  | ФАЙЛ_НЕ_ОТКРЫВАЕТСЯ:        текст:='невозможно открыть %'
  | ФАЙЛ_НЕ_СОЗДАЕТСЯ:          текст:='невозможно создать %'
  | УПР_НЕ_ЦЕЛАЯ:               текст:='управляющая переменная должна быть целого вида'
  | ВЫХОД_ЗА_ГРАНИЦЫ_РЯДА:      текст:='выход за границы ряда'
  | ОТДЕЛ_ОТЛИЧАЕТСЯ_ОТ_ФАЙЛА:  текст:='название отдела "%" отлично от имени файла'
  | НЕОЖИДАННЫЙ_КОНЕЦ_ФАЙЛА:    текст:='неожиданный конец файла'
  | ТЕКСТОРЕЗ_НЕ_ПОНИМАЕТ:      текст:='после "<*" может быть только "ЕСЛИ", "АЕСЛИ", "ИНАЧЕ", "КОН"'
  | ТЕКСТОРЕЗ_НЕ_ОКОНЧЕН:       текст:='пропущено "<*КОН*>"'
  | МНОГО_УРОВНЕЙ_ТЕКСТОРЕЗА:   текст:='очень много вложений указаний текстореза'
  | ЛИШНИЙ_КОН_У_ТЕКСТОРЕЗА:    текст:='лишний "<*КОН*>"'
  | ПРИЁМНИК_СОСТ_ВИДА:         текст:='приёмник значений не может быть составного вида'
  | НЕОЖИДАННЫЙ_ОТДЕЛ:          текст:='неожиданное употребление понятия отдела'
  | НЕСОВПАДЕНИЕ_РАЗМЕРОВ:      текст:='несовпадение размеров данных'
  | ВЫЗОВ_ПЕРЕДАВАЕМОЙ:         текст:='вызов передаваемых в другой язык задач недопустим'
  | ВИД_ПЕРЕДАВАЕМОЙ:           текст:='недопустимый вид у передаваемой в другой язык задачи'
  ИНАЧЕ
                                текст:='непредвиденный код ошибки'
  КОН;
                    (* Вставляем вместо "%" или в конец дополнительный текст. *)
  ЕСЛИ
       допТекст # ""
  ТО
                поз:=0;
    ПОКА
         (текст[поз] # "%")
        И
         (текст[поз] # 0X)
    ВЫП
      УВЕЛИЧИТЬ(поз)
    КОН;
    ЕСЛИ
          текст[поз]="%"
    ТО
        оЦепи.Удалить(текст,поз,1);
      ЕСЛИ
          текст[поз] # "%"
      ТО
        оЦепи.Вставить(допТекст,текст,поз)
      КОН
    ИНАЧЕ
        оЦепи.ДобавитьВКонец(текст,': ');
        оЦепи.ДобавитьВКонец(текст,допТекст)
    КОН
  КОН;
  задВыводОшибки(позОшибки.строка,позОшибки.колонка,текст)
КОН ОтметитьПоз;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       Отметить-(код :ЦЕЛ;
                               допТекст-:ЦЕПЬ);
УКАЗ
     ОтметитьПоз(код,ОО.текПоз,допТекст)
КОН Отметить;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       Ошибка-(код:ЦЕЛ);
УКАЗ
   ОтметитьПоз(код,ОО.текПоз,"")
КОН Ошибка;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       Подготовить-(зВыводОшибки:ЗадачаПоОшибке);
УКАЗ
  задВыводОшибки := зВыводОшибки;

  ОО.текПоз.строка:=0;
  ОО.текПоз.колонка:=0;
КОН Подготовить;

КОН ОО.
