









     Утвержден

     2б.00152-01 34 04-1-ЛУ 













                   ОПЕРАЦИОННАЯ СИСТЕМА МОС ВП

           Подсистема редактирования и форматирования

                        OБРАБОТКА ТЕКСТОВ

                      Руководство оператора 

                      2б.00152-01 34 04-2

                           Листов 82/2К






















                              1987 

        Перв. Примен.                       Литера о
        2б.00152-01


 
                            - 81K -

                         2б.00152-01 34 04-2

    ----------------------------------------------------------- 
    I               Лист регистрации изменений                I
    ----------------------------------------------------------- 
    I Номера листов (страниц)IВсего I       IВходящийI    I   I
    I------------------------IлистовI    N  I    N   I    IДа-I
    I   IИз- IЗа- I   IАнну- I(стра-I       Iсопрово-IПодпIта I 
    IИзмIме- Iме- IНо-Iлиро- Iниц) вIдокуменIдительноI    I   I
    I   Iнен-Iнен-IвыхIванныхIдокум.I   та  Iго докумI    I   I
    I   Iных Iных I   I      I      I       I и дата I    I   I 
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 
    I   I    I    I   I      I      I       I        I    I   I
    ----------------------------------------------------------- 


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                      ОПЕРАЦИОННАЯ СИСТЕМА МОС ВП
 
              Подсистема редактирования и форматирования
 
                           ОБРАБОТКА ТЕКСТОВ
 
                         Руководство оператора
 
 
                           00152-01 34 04-2
 
                               Листов 80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                 1987
 
 
 
 
 


                                - 2 -
 
                          00152-01 34 04-2
 
 
 
 
 
 
                              СОДЕРЖАНИЕ
 
 
 
 
 
      1.  Разработка программ в языке TPU                     4
 
      1.1.  Создание программ                                 5
 
      1.1.1.  Простые программы                               5
 
      1.1.2.  Сложные программы                               6
 
      1.1.3.  Программный синтаксис                           6
 
      1.2.  Компиляция программ                               8
 
      1.2.1.  Компиляция в командной строке интерфейса        10
 
      1.2.2.  Компиляция в буфере TPU                         10
 
      1.3.  Выполнение TPU-программ                           11
 
      1.3.1.  Прерывание выполнения                           12
 
      1.3.2.  Выполнение процедуры                            12
 
      1.4.  Отладка программ                                  13
 
      1.5.  Специальные программы в TPU (файлы инициализации) 14
 
      1.5.1.  Командные файлы                                 15
 
      1.5.2.  Секционные файлы                                17
 
      1.5.2.1.  Написание секционного файла                   17
 
      1.5.2.2.  Обработка секционного файла                   19
 
      1.5.2.3.  Пример секционного файла                      22
 
      1.5.2.4.  Специальные элементы секционных файлов        26
 
      1.6.  Обработка ошибок                                  27
 
 
 
      2.  Выполнение TPU                                      28
 
      2.1.  Обзор                                             28
 
      2.2.  Вызов TPU из командной процедуры DCL              29
 
      2.2.1.  Создание специальной среды редактирования       29


                                - 3 -
 
                          00152-01 34 04-2
 
 
 
      2.2.2.  Установление пакетно-подобного редактирования   30
 
      2.3.  Вызов TPU из пакетного задания                    33
 
      2.4.  Квалификаторы команды EDIT/TPU                    34
 
      2.4.1.  Квалификаторы /COMMAND, /NOCOMMAND              34
 
      2.4.2.  Квалификаторы /CREATE, /NOCREATE                35
 
      2.4.3.  Квалификаторы /DISPLAY, /NODISPLAY              36
 
      2.4.4.  Квалификаторы /JOURNAL и /NOJOURNAL             37
 
      2.4.5.  Квалификаторы /OUTPUT, /NOOTPUT                 39
 
      2.4.6.  Квалификаторы /READ_ONLY и /NOREAD_ONLY         40
 
      2.4.7.  Квалификаторы /RECOVER и /NORECOVER             41
 
      2.4.8.  Квалификаторы /SECTION и NOSECTION              43
 
      2.5.  Параметры команды EDIT/TPU                        44
 
 
 
      3.  Сообщения оператору                                 45
 
      3.1.  Сообщения об успешных действиях                   46
 
      3.2.  Информационные сообщения                          49
 
      3.3.  Предупреждающие сообщения                         51
 
      3.4.  Сообщения об ошибках                              63
 
      3.5.  Сообщения о фатальных ошибках                     77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


                                - 4 -
 
                          00152-01 34 04-2
 
 
                  1. Разработка программ в языке TPU
 
 
 
           Раздел описывает, как следует  об'единять  лексические
 
      элементы языка TPU в программы. Эти программы могут исполь-
 
      зоваться для решения задач  редактирования,  для  настройки
 
      или расширения существующих интерфейсов или для  разработки
 
      собственного интерфейса с TPU.
 
           Перед тем, как начать процесс написания  программ  для
 
      настройки или расширения существующего интерфейса,  необхо-
 
      димо хорошо знать исходный код TPU,  который  создает  этот
 
      интерфейс. Если желательно изменить, например, окно,  кото-
 
      рое используется для редактирования, необходимо  знать  имя
 
      переменной, которое используется  в  интерфейсе  для  этого
 
      окна.
 
           Если используется интерфейс редактора EVE и  требуется
 
      изменить размер главного окна, то следует использовать  имя
 
      переменной EVE$MAIN_WINDOW (многие имена процедур  и  пере-
 
      менных в интерфейсе редактора EVE начинаются с EVE$).
 
           Если используется интерфейс эмулятора малой клавиатуры
 
      ЕDT и потребовалось изменить размер главного окна, то необ-
 
      ходимо использовать имя переменной EDT$MAIN_WINDOW.
 
           Примеры процедур и синтаксиса  в  настоящем  документе
 
      приведены с использованием латинских символов для тех  эле-
 
      ментов, которые можно вводить  напрямую.  Зарезервированные
 
      слова TPU, такие как имена  встроенных  процедур,  ключевых
 
      слов и операторов языка, также показаны латинскими символа-
 
      ми. Элементы, построенные из символов кирилицы, в синтакси-
 
      ческих примерах или  в  примерах  процедур  указывают,  что
 
      необходимо обеспечить для них соответствующую замену.
 
           Данный раздел рассматривает следующие темы:


                                - 5 -
 
                          00152-01 34 04-2
 
 
           1) создание программ в TPU;
 
           2) компиляция программ;
 
           3) выполнение программ;
 
           4) отладка программ;
 
           5) специальные программы в TPU (файлы инициализации);
 
           6) обработка ошибок.
 
 
 
           1.1. Создание программ
 
 
           Для ввода или изменения исходного  кода  программы  на
 
      языке TPU необходимо использовать интерфейс редактирования,
 
      например, EVE или эмулятор малой клавиатуры EDT.  Программа
 
      должна представлять собой один или несколько пригодных  для
 
      выполнения операторов. Эти операторы могут быть перечислены
 
      внутри  операторов  PROCEDURE-ENDPROCEDURE  или   приведены
 
      отдельно.
 
 
 
           1.1.1. Простые программы
 
 
           Следующий оператор представляет собой  пример  простой
 
      программы:
 
           SHOW (SUMMARY)
 
           Этот оператор, введенный после  соответствующей  подс-
 
      казки от интерфейса редактирования,  вызовет  выполнение  в
 
      TPU "программы", связанной  с  оператором  SHOW  (SUMMARY).
 
      Если используется интерфейс эмулятора малой клавиатуры  EDT
 
      с командным файлом, написанным пользователем, то на  экране
 
      можно увидеть изображение, подобное следующему:
 
      TPU VERSION V1 UPDATе 0
 
      JOURNAL FILE: DISK$:[USER]CHAP5.TJL;1
 
      SECTION FILE: SYS$SYSROOT:[SYSLIB]EDTSECINI.GBL;4


                                - 6 -
 
                          00152-01 34 04-2
 
 
      TIMER MESSAGE: EXECUTING
 
      5 SYSTEM BUFFERS AND 3 USER BUFFERS
 
      63 CALLS TO LIB$GET_VM, 8 CALLS TO LIB$FREE_VM,
 
      274384 BYTES STILL ALLOCATED
 
 
 
           1.1.2. Сложные программы
 
 
           Файлы  исходного  кода,  которые  образуют   интерфейс
 
      редактора EVE и интерфейс эмулятора малой  клавиатуры  EDT,
 
      представляют собой примеры сложных программ  на  языке  TPU
 
      (далее TPU-программы). Файлы EVESECINI.TPU и  EDTSECINI.TPU
 
      содержат множество определений процедур, выполняемых опера-
 
      торов, которые определяют размещение информации на экране и
 
      ее изображение для соответствующего интерфейса.  Эти  файлы
 
      содержат также определения клавиш, задающие операции редак-
 
      тирования. Можно изучить эти файлы и увидеть  методы  прог-
 
      раммирования, которые использованы при создании этих интер-
 
      фейсов. Файл  SYS$LIBRARY:EVESECINI.TPU  -  файл  исходного
 
      кода,     образующий     интерфейс      редактора      EVE.
 
      SYS$LIBRARY:EDTSECINI.TPU - файл исходного кода, образующий
 
      EDT-интерфейс.
 
 
 
           1.1.3. Программный синтаксис
 
 
           Необходимо отделять один оператор от другого точкой  с
 
      запятой (эта конструкция является разделителем  операторов,
 
      а не ограничителем оператора). В любой программе необходимо
 
      располагать определения процедур перед выполняемыми  опера-
 
      торами, не являющимися частью этих процедурных определений.
 
      Корректный синтаксис TPU-программы приведен на примере 1.
 
           Варианты синтаксически корректных TPU-программ показа-


                                - 7 -
 
                          00152-01 34 04-2
 
 
      ны на примере 2.
 
           Пример 1.
 
      PROCEDURE...ENDPROCEDURE
 
      PRОCEDURE...ENDPROCEDURE
 
              .
 
              .
 
              .
 
      PROCEDURE...ENDPROCEDURE
 
      Оператор-1;
 
      Оператор-2;
 
              .
 
              .
 
              .
 
      Оператор-N;
 
           Пример 2.
 
      !Программа 1
 
      !Программа состоит из одной встроенной TPU-процедуры.
 
      SHOW (KEYWORDS)
 
      !Программа 2
 
      !Данная программа состоит из оператора, который
 
      !присваивает значение переменной TPU$V_VIDEO
 
      TPU$V_VIDEO:=UNDERLINE;
 
      !Программа 3
 
      !Данная программа состоит из оператора LOOP (с условием
 
      !для завершения) и встроенной TPU-процедуры ERASE_LINE.
 
      X:=0; LOOP X:=X+1; EXITIF X > 100; ERASE_LINE; ENDLOOP
 
      !Программа 4
 
      !Данная программа состоит из отдельной процедуры,
 
      !которая заставляет TPU воспринимать "QUI" как
 
      !команду, сигнализирующую о прекращении работы.


                                - 8 -
 
                          00152-01 34 04-2
 
 
      PROCEDURE QUI
 
      QUIT;
 
      ENDPROCEDURE
 
      !Программа 5
 
      !Данная программа является набором процедур, которые
 
      !заставляют TPU воспринимать выражения "E", "EX", "EXI"
 
      !в качестве команд для операции завершения.
 
      PROCEDURE E
 
      EXIT
 
      ENDPROCEDURE
 
      PROCEDURE EX
 
      EXIT
 
      ENDPROCEDURE
 
      PROCEDURE EXI
 
      EXIT
 
      ENDPROCEDURE
 
 
 
           1.2. Компиляция программ
 
 
           Перед  компиляцией  TPU-программ  необходимо  включить
 
      отображение информационных сообщений, которые помогут  раз-
 
      работать  аккуратные  программы.  Интерфейс  редактора  EVE
 
      включает отображение информационных сообщений во время ком-
 
      пиляции TPU-программ. Если используется интерфейс эмулятора
 
      малой клавиатуры EDT, то после запроса "TPU COMMAND:" необ-
 
      ходимо ввести команду отображения информационных сообщений:
 
      SET (INFORMATIONAL, ON)
 
           Номера строк, которые упоминаются  в  сообщениях  TPU,
 
      относятся к номерам строк исходной  программы.  Эти  номера
 
      помогут определить строку в программе,  в  которой  имеется
 


                                - 9 -
 
                          00152-01 34 04-2
 
 
      ошибка. Для перемещения  к  строке,  в  которой  обнаружена
 
      ошибка, необходимо расположиться  в  самом  начале  буфера,
 
      содержащего программу, и затем ввести команду  после  соот-
 
      ветствующей подсказки интерфейса:
 
      MOVE_VERTICAL (номер_строки-1)
 
           В EVE вместо данной команды можно использовать команду
 
      LINE. Например, LINE 42 установит текущую  позицию  символа
 
      на строку номер 42.
 
           Если используется интерфейс эмулятора малой клавиатуры
 
      EDT, то для чтения сообщений TPU, которые состоят  из  нес-
 
      кольких строк и которые удаляются из окна сообщений раньше,
 
      чем пользователь сможет прочитать их, следует  использовать
 
      встроенную  процедуру  POSITION  (окно_сообщений),  которая
 
      позволяет использовать клавиши со стрелками  для  прокрутки
 
      любых сообщений, находящихся вне экрана.
 
           Еще одним способом чтения длинных  сообщений  является
 
      увеличение окна сообщений.  Следующая  команда  увеличивает
 
      окно сообщений для эмулятора  малой  клавиатуры  EDT  путем
 
      добавления двух строк сверху этого окна:
 
      ADJUST_WINDOW (окно_сообщений, -2, 0)
 
           При работе  с  интерфейсом  EVE  используется  команда
 
      BUFFER MESSAGеS для получения окна сообщений. Для возрата к
 
      начальному буферу или другому буферу по желанию использует-
 
      ся команда BUFFER имя_буфера.
 
           Существует два способа компиляции TPU-программ:
 
           1) в командной строке EVE или эмулятора малой  клавиа-
 
      туры EDT;
 
           2) в буфере TPU.
 


                                - 10 -
 
                          00152-01 34 04-2
 
 
           1.2.1. Компиляция в командной строке интерфейса
 
 
           Можно компилировать некоторую  простую  TPU-программу,
 
      вводя ее в командной строке используемого интерфейса. После
 
      ввода команды SHOW (SUMMARY) на запрос "тPU  COMMAND:"  TPU
 
      скомпилирует (и выполнит) программу, связанную с оператором
 
      SHOW (SUMMARY).
 
 
 
           1.2.2. Компиляция в буфере TPU
 
 
           TPU-программы обычно компилируются путем ввода  проце-
 
      дур и операторов TPU в некоторый буфер и последующей компи-
 
      ляции этого буфера. Необходимо ввести оператор SHOW  (пере-
 
      менные) в любой буфер и затем скомпилировать этот  буфер  с
 
      помощью оператора, вводимого после соответствующей подсказ-
 
      ки используемого интерфейса:
 
      COMPILE (текущий_буфер)
 
           Программа, связанная с  SHOW  (переменные),  не  будет
 
      выполняться до тех пор, пока  не  будет  введена  следующая
 
      команда (оператор) в командной строке интерфейса:
 
      EXECUTE (текущий_буфер)
 
           Примечание. Необязательно компилировать все  программы
 
      до их выполнения. Если используется какой-то буфер,  диапа-
 
      зон  или  строка  как  параметр  для  встроенной  процедуры
 
      EXECUTE, TPU сначала компилирует,  а  затем  выполняет  эти
 
      программы.
 
           Встроенная процедура COMPILE необязательно  возвращает
 
      тип данных программа (PROGRAMM). Если желательно  использо-
 
      вать компилируемую программу позже в течение сеанса  работы
 
      с TPU, то можно связать эту программу  с  именем  некоторой
 
      переменной. Это можно сделать следующим образом:


                                - 11 -
 
                          00152-01 34 04-2
 
 
      Новая_программа := COMPILE (текущий_буфер)
 
           Если в результате  компиляции  не  было  сообщений  об
 
      ошибках, можно затем выполнить свою программу:
 
      EXECUTE (новая_программа)
 
           Встроенную процедуру COMPILE  можно  использовать  для
 
      компиляции отдельных частей буфера, а не всего буфера.  Для
 
      этого  необходимо  создать  область,  содержащую  операторы
 
      буфера, которые требуется скомпилировать, а  затем  указать
 
      эту область в качестве параметра для COMPILE.
 
 
 
           1.3. Выполнение TPU-программ
 
 
           Можно использовать программы, которые уже были скомпи-
 
      лированы, в качестве параметров  для  встроенной  процедуры
 
      EXECUTE. Кроме того, в качестве параметров можно  использо-
 
      вать буфера, диапазоны, строки, которые содержат  выполняе-
 
      мые операторы TPU. TPU сначала компилирует содержимое  этих
 
      буферов, диапазонов или строк, а затем выполняет  их.  Сле-
 
      дующий оператор, введенный в командной строке используемого
 
      интерфейса, выполняет программу, скомпилированную  ранее  и
 
      помеченную переменной новая_программа:
 
           EXECUTE (новая_программа)
 
           Следующий оператор ,  введенный  в  командной  строке,
 
      компилирует и затем выполняет операторы, пригодные к выпол-
 
      нению и расположенные в текущем буфере:
 
      EXECUTE (текущий_буфер)
 
           Небольшие TPU-программы могут быть введены,  скомпили-
 
      рованы и выполнены в командных строках, например:
 
      SET (TIMER, ON, 'выполнение')
 
           Данная  команда  выполняет  программу,   связанную   с
 


                                - 12 -
 
                          00152-01 34 04-2
 
 
      встроенной процедурой SET (TIMER,...), и приводит  к  тому,
 
      что строка "выполнение" будет отображаться с  интервалом  в
 
      одну секунду в процессе выполнения процедуры. Строка  отоб-
 
      ражается в последних пятнадцати позициях в области запроса.
 
 
 
           1.3.1. Прерывание выполнения
 
 
           Нажатие CTRL/C приводит к остановке  выполнения  прог-
 
      рамм, написанных пользователем. С помощью CTRL/C также мож-
 
      но остановить выполнение следующих встроенных процедур TPU:
 
           1) LEARN_BEGIN...LEARN_END  (обучающая  последователь-
 
      ность) ;
 
           2) READ_FILE ;
 
           3) SEARCH ;
 
           4) WRITE_FILE .
 
           Примечание.  т.к.  TPU  не  протоколирует  CTRL/C,  то
 
      использование CTRL/C может влиять на  точность  журнального
 
      файла. После ввода CTRL/C предполагается, что  пользователь
 
      выйдет из редактора, т.к. Иначе  можно  потерять  результат
 
      работы из-за некорректности журнального файла.
 
 
 
           1.3.2. Выполнение процедуры
 
 
           Если пользователь включил в программу определения про-
 
      цедур, то эти  процедуры  будут  скомпилированы,  их  имена
 
      будут включены в список процедур TPU при  выполнении  прог-
 
      раммы. Вызов таких процедур происходит одним  из  следующих
 
      способов:
 
           1) вводом имени скомпилированной процедуры после  зап-
 
      роса интерфейса "TPU COMMAND:";
 
           2) обращением к процедуре из программы или  из  другой


                                - 13 -
 
                          00152-01 34 04-2
 
 
      процедуры.
 
 
 
           1.4. Отладка программ
 
 
           TPU  позволяет  написать  свой  собственный  отладчик,
 
      который поможет  выяснить  ситуацию  в  критических  точках
 
      программы.  Места,  в  которых  пользователь  останавливает
 
      выполнение своей программы, называются точками приостанова.
 
      Можно указывать точки приостанова, используя  соответствую-
 
      щие параметры для встроенной процедуры SET.
 
           Приведенная  последовательность  действий  показывает,
 
      как можно использовать отладчик с TPU:
 
           1)       написать       TPU-программу,        подобную
 
      SYS$LIBRARY:DEBUG.TPU;
 
           2) написать процедуру  или  программу  на  языке  TPU,
 
      которую необходимо отладить;
 
           3) применить интерфейс редактирования,  обеспечивающий
 
      два текстовых буфера. Прочитать TPU-программу, которую надо
 
      отладить, в один буфер, а  программу-отладчик  -  в  другой
 
      буфер;
 
           4) скомпилировать буфер с  отлаживаемой  программой  и
 
      буфер с отладчиком;
 
           5) в командной строке интерфейса использOвать встроен-
 
      ную процедуру SET (DEBUG,...) для задания следующих элемен-
 
      тов:
 
           - процедуры или программы, которые необходимо
 
      отладить;
 
           - потребуется ли пошаговая отладка;
 
           - имя программы-отладчика.
 
      Например, чтобы использовать какую-то программу в  качестве
 


                                - 14 -
 
                          00152-01 34 04-2
 
 
      отладчика, необходимо ввести команду:
 
      SET (DEBUG, PROGRAM, 'своя_программа_отладчик') ;
 
           6)  программа-отладчик  должна  выдавать  запрос  типа
 
      "DEBUG>" и обрабатывать  команды  отладчика.  Ввести  соот-
 
      ветствующие команды после запроса;
 
           7) с помощью отладчика пройти по программе для  нахож-
 
      дения ошибок;
 
           8) выйти из отладчика.
 
 
 
           1.5. Специальные программы в TPU (файлы инициализации)
 
 
           В TPU имеется два типа файлов инициализации:
 
           1) командные файлы;
 
           2) секционные файлы.
 
           Командный файл представляет собой файл исходного  кода
 
      TPU, спецификация  которого  задается  после  квалификатора
 
      /COMMAND при вызове TPU. Секционный файл представляет собой
 
      откомпилированную, двоичную форму файла исходного кода TPU,
 
      спецификация которого задана после  квалификатора  /SECTION
 
      при вызове TPU.
 
           Предполагается, что с помощью командного файла пользо-
 
      ватель производит небольшую настройку интерфейса редактиро-
 
      вания. Если командный  файл  получается  большим  или  если
 
      желательно  произвести  серьезные  изменения  и  дополнения
 
      интерфейса, то более эффективно использовать двоичный  сек-
 
      ционный файл при вызове TPU.
 


                                - 15 -
 
                          00152-01 34 04-2
 
 
           1.5.1. Командные файлы
 
 
           Командный файл представляет собой файл исходного  кода
 
      TPU, который содержит процедуры, определения клавиш и  дру-
 
      гие выполняемые операторы языка TPU. Можно иметь  несколько
 
      командных файлов в каталоге  файлов.  Можно  написать  один
 
      командный файл, который настраивает редактор для  написания
 
      программ на языке  паскаль,  другой  командный  файл  может
 
      настраивать редактор на редактирование текста, и т.д.  Если
 
      имеется несколько командных файлов, то следует дать им име-
 
      на, которые  напомнят  их  содержание.  Если  имеется  один
 
      командный файл, который чаще всего используется, то необхо-
 
      димо дать ему имя TPUINI.TPU.
 
           Синтаксис  командной  строки  языка  DCL  для   вызова
 
      командных файлов TPU следующий:
 
      $ EDIT/TPU/COMMAND [=спецификация_файла]
 
           Если имя командного файла TPUINI.TPU, и он находится в
 
      текущем каталоге, то TPU будет читать этот файл по  умолча-
 
      нию. Если имя командного файла отлично от TPUINI.TPU или он
 
      расположен  вне  текущего  каталога,  то  необходимо   явно
 
      использовать квалификатор /COMMAND и указать полную  специ-
 
      фикацию файла после этого квалификатора.
 
           TPU читает командный файл, компилирует и выполняет все
 
      команды, которые не содержат  синтаксических  ошибок.  Если
 
      при этом обнаружатся ошибки, то TPU записывает сообщения об
 
      ошибке в область сообщений. Процедуры и определения  клавиш
 
      в командном файле могут модифицировать  интерфейс,  который
 
      определен в секционном файле, с которым была вызвана  прог-
 
      рамма TPU.
 
           Командный файл не должен содержать встроенную процеду-
 


                                - 16 -
 
                          00152-01 34 04-2
 
 
      ру SAVE. Процедура SAVE используется, если необходимо  соз-
 
      дать или дополнить секционный файл.
 
           В примере показан  командный  файл  для  TPU,  который
 
      изменяет размещение информации на экране, принятое по умол-
 
      чанию в интерфейсе эмулятора малой  клавиатуры  EDT,  путем
 
      создания  второго  окна,  которое  можно  использовать  для
 
      редактирования.
 
           Пример.
 
      PROCEDURE TWO_FILES
 
      EXTRA_FILE :=READ LINE ("имя_файла:") ; !запрос имени файла
 
      EXTRA_BUF  :=CREATE_BUFFER ("EXTRA", EXTRA_FILE) ;
 
      EXTRA_WINDOW:=CREATE_WINDOW (1, 11, ON) ;
 
      ADJUST_WINDOW (MAIN_WINDOW, +11, 0);!расширение главного
 
                                          !окна
 
      SET (STATUS_LINE, EXTRA_WINDOW, REVERSE
 
      "EXTRA WINDOW/EXTRA BUFFER") ;
 
      MAP (EXTRA_WINDOW, EXTRA_BUF) ;
 
      ENDPROCEDURE
 
           Если файлу, который содержит процедуру из данного при-
 
      мера, присвоить имя TWO_WIND.TPU, то можно  вызвать  TPU  с
 
      эмулятором малой клавиатуры еDT и командным файлом  следую-
 
      щей командой:
 
      $EDIT/TPU/SECTION=SYS$LIBRARY:EDTSECINI/COMMAND=-
 
      устройство:[пользователь]TWO_WIND.TPU
 
           Если добавляются процедуры или операторы  в  командный
 
      файл TWO_WIND.TPU, следует разместить все  процедуры  перед
 
      отдельными операторами, не входящими в какую-либо процедуру
 
      (например, определенияMи клавиш для перемещения курсора  из
 
      одного окна в другое).
 
           Имена переменным и  процедурам  следует  давать  таким


                                - 17 -
 
                          00152-01 34 04-2
 
 
      образом, чтобы они не противоречили зарезервированным  сло-
 
      вам и предопределенным идентификаторам в TPU. Можно исполь-
 
      зовать трехсимвольный префикс в именах переменных и  проце-
 
      дур (например, свои инициалы), за  которым  следует  символ
 
      подчеркивания (_). Можно дать процедуре из примера,  напри-
 
      мер, имя XYZ_TWO_WINDOWS.
 
 
 
           1.5.2. Секционные файлы
 
 
           Секционный файл представляет собой двоичное  представ-
 
      ление среды редактирования в TPU. Это набор компилированных
 
      определений процедур, переменных  и  клавишных  назначений.
 
      Преимущество использования двоичного файла для  определения
 
      интерфейса состоит в том, что исходный код не надо компили-
 
      ровать при каждом вызове редактора и, следовательно, интер-
 
      фейс с TPU быстро настраивается.
 
 
 
           1.5.2.1. Написание секционного файла
 
 
           Чтобы создать  секционный  файл,  необходимо  написать
 
      программу на языке TPU в соответствии с имеющимися правила-
 
      ми,  которые  включают  в  себя  использование   операторов
 
      PROCEDURE и ENDPROCEDURE для создания поименованных  проце-
 
      дур, которые можно вызывать во время выполнения  программы.
 
      Определения процедур должны располагаться в программе поль-
 
      зователя перед отдельными выполняемыми операторами.
 
           В зависимости от вида создаваемого  секционного  файла
 
      программа должна включать одну из следующих процедур:
 
           1) TPU$INIT_PROCEDURE ;
 
           2) TPU$LOCAL_INIT .
 
           Если создается секционный файл, то необходимо включить


                                - 18 -
 
                          00152-01 34 04-2
 
 
      процедуру TPU$INIT_PROCEDURE. Эта процедура состоит из опе-
 
      раторов, которые создают буфера,  окна,  связывают  окна  с
 
      буферами,  устанавливают  атрибуты  экрана,  инициализируют
 
      переменные, определяют режим протоколирования и т.д.  Поло-
 
      жение процедуры TPU$INIT_PROCEDURE  в  программе  не  имеет
 
      отношения к ее функции внутри этой программы. Как EVE,  так
 
      и   эмулятор   малой   клавиатуры   EDT   имеют   процедуру
 
      TPU$INIT_PROCEDURE в своем коде.
 
           Если создается секционный файл  добавлением  некоторых
 
      элементов к уже существующему секционному файлу, то следует
 
      разместить   инициализирующие   конструкции   в   процедуре
 
      TPU$LOCAL_INIT. Как EVE, так и  эмулятор  малой  клавиатуры
 
      EDT имеют пустую процедуру с именем TPU$LOCAL_INIT, которая
 
      вызывается в конце процедуры TPU$INIT_PROCEDURE.  Процедура
 
      пользователя с именем ТPU$LOCAL_INIT заменит эту  начальную
 
      процедуру с тем же именем в используемом интерфейсе.
 
           Последняя строка в программе, которая используется для
 
      создания секционного файла, должна  быть  оператором  QUIT.
 
      Эта команда приводит к выходу из  редактора  и  прекращению
 
      дальнейшего редактирования. Непосредственно перед  операто-
 
      ром QUIT должна стоять строка, содержащая встроенную проце-
 
      дуру SAVE. Эта  процедура  является  средством,  с  помощью
 
      которого запоминаются  все  текущие  определения  процедур,
 
      имена переменных, определения клавиш в двоичном виде.
 
           Основные компоненты исходной TPU-программы для  созда-
 
      ния секционного файла следующие:
 
           1) процедура TPU$INIT_PROCEDURE или TPU$LOCAL_INIT;
 
           2) процедуры, ограниченные операторами PROCEDURE и END
 
      PROCEDURE;
 
           3) исполнительные операторы TPU (следующие за  опреде-


                                - 19 -
 
                          00152-01 34 04-2
 
 
      лениями процедур);
 
           4) встроенная процедура  SAVE("спецификация_файла")  в
 
      предпоследней строке программы;
 
           5) встроенная процедура QUIT в последней строке  прог-
 
      раммы.
 
           Пример (синтаксис программы, которую  можно  использо-
 
      вать для создания секционого файла).
 
      PROCEDURE TPU$LOCAL_INIT
 
              .
 
              .
 
              .
 
      ENDPROCEDURE;
 
      PROCEDURE клавиши;
 
              .
 
              .
 
              .
 
      ENDPROCEDURE;
 
      Клавиши;    !вызов процедуры определения клавиш
 
      SAVE ("SYS$LOGIN:VT100INI.GBL");
 
      QUIT;
 
 
 
           1.5.2.2. Обработка секционного файла
 
 
           Существует два способа обработки секционного файла:
 
           1) если добавляются элементы к уже существующему  сек-
 
      ционному файлу, то будет вызван TPU с секционным файлом,  с
 
      командным файлом, а затем сохранится об'единенный  секцион-
 
      ный файл (этот процесс называется инкрементальным  сохране-
 
      нием);
 
           2) если создается новый секционный файл, то вызывается
 


                                - 20 -
 
                          00152-01 34 04-2
 
 
      TPU с командным файлом, но без секционного файла, а затем с
 
      помощью SAVE сохраняется новый секционный файл.
 
           Для  добавления  к  существующему  секционному   файлу
 
      выполняется следующее:
 
           1)вызов TPU C существующим  секционным  файлом,  таким
 
      как EVE или эмулятор малой клавиатуры EDT,  и  с  командным
 
      файлом, написанным пользователем:
 
      $EDIT/TPU [/SECTION=EVESECINI]/COMMAND=свой_редактор.TPU
 
      Эта команда приводит к  тому,  что  TPU  читает  секционный
 
      файл,  затем  читает,  компилирует  и  выполняет  указанный
 
      командный файл.  Написанный  пользователем  командный  файл
 
      должен содержать процедуру с именем TPU$LOCAL_INIT, которая
 
      содержит элементы инициализации. После этого новый (об'еди-
 
      ненный) контекст редактирования, полученный из  секционного
 
      и командного файлов, становится пригодным  для  использова-
 
      ния;
 
           2) сохранение об'единенного  контекста  редактирования
 
      для дальнейшего использования интерфейса одним из следующих
 
      способов:
 
           - выполнить  встроенную  процедуру  SAVE  в  командной
 
      строке созданного интерфейса  и  указать  файл,  в  котором
 
      необходимо сохранить интерфейс, в  качестве  параметра  для
 
      процедуры SAVE. Затем выполнить встроенную процедуру QUIT;
 
           - включить встроенные процедуры SAVE и QUIT в  послед-
 
      ние две строки своего командного файла.  После  вызова  TPU
 
      будет создан об'единенный  секционный  файл  и  осуществлен
 
      выход из редактора. Затем можно вызвать  редактор  с  новым
 
      секционным файлом.
 
           Примечание. Можно модифицировать существующий секцион-
 
      ный файл, изменив файл исходного кода, который создает этот


                                - 21 -
 
                          00152-01 34 04-2
 
 
      секционный файл, а затем перекомпилировав этот файл. Однако
 
      не рекомендуется так делать,  т.к.  Это  может  привести  к
 
      проблемам при работе с новыми версиями TPU.
 
           Для сохранения нового секционного файла необходимо:
 
           1) вызвать TPU  без  секционного  файла  ,  но  указав
 
      командный файл пользователя:
 
      $EDIT/TPU/NOSECTION/COMMAND=свой_редактор.TPU
 
      Данная  команда  заставляет  TPU  читать,  компилировать  и
 
      выполнять элементы командного  файла  свой_редактор.TPU.  В
 
      этом командном файле должна присутствовать процедура с име-
 
      нем TPU$INIT_PROCEDURE, которая  содержит  инициализирующие
 
      конструкции;
 
           2)  сохранить  контекст  редактора,  созданный  данным
 
      командным файлом, одним из следующих способов:
 
           - выполнить  встроенную  процедуру  SAVE  в  командной
 
      строке используемого интерфейса и в качестве параметра  для
 
      встроенной процедуры SAVE использовать имя файла, в котором
 
      необходимо сохранить описание среды  редактирования.  Затем
 
      ввести команду QUIT;
 
           - расположить обращения к встроенным процедурам SAVE и
 
      QUIT в последних двух строках командного файла. После вызо-
 
      ва TPU будет создан новый секционный файл, и программа вый-
 
      дет из редактора. Затем можно  вызывать  редактор  с  новым
 
      секционным файлом.
 


                                - 22 -
 
                          00152-01 34 04-2
 
 
           1.5.2.3. Пример секционного файла
 
 
           Если решено сконструировать  некоторый  интерфейс  для
 
      TPU, который существенно отличается от интерфейсов редакто-
 
      ра EVE и  эмулятора  EDT,  необходимо  обеспечить  основные
 
      структуры и определения клавиш, которые используются компи-
 
      лятором и интерпретатором программы TPU. В примере  показан
 
      исходный код, который  создает  минимальный  интерфейс.  Он
 
      обеспечивает следующие основные структуры:
 
           1) буфер и окно для сообщений TPU;
 
           2) буфер  и  окно  для  информации,  которая  выдается
 
      встроенной процедурой SHOW;
 
           3) буфер  и  окно  ,  в  которое  вводится  текст  или
 
      TPU-программа;
 
           4)  область  запросов-подсказок,  в  которую  вводятся
 
      команды для TPU.
 
           Из-за того, что при вызове без секционного  файла  TPU
 
      не имеет ни одного определения клавиш, программа, приведен-
 
      ная на примере, содержит следующие определения клавиш:
 
           1) возврат;
 
           2) удаление;
 
           3) выход из TPU;
 
           4) ввод команд TPU (в  данной  программе  используется
 
      клавиша "ТАВ").
 
           По умолчанию TPU  ищет  процедуру  TPU$INIT_PROCEDURE,
 
      поэтому операторы,  создающие  структуру  для  минимального
 
      интерфейса,  располагаются  в  этой  процедуре.  Операторы,
 
      которые определяют клавиши, стоят после  всех  процедур  из
 
      этого файла.
 
           Чтобы обработать файл исходного кода приведенного при-
 


                                - 23 -
 
                          00152-01 34 04-2
 
 
      мера необходимо ввести команду на уровне DCL:
 
      EDIT/TPU/NOSEсTION/COMMAND=MINI.TPU
 
           После ввода данной команды никакой секционный файл  не
 
      будет прочитан, т.к. Указан квалификатор  /NOSECTION  (этим
 
      обеспечивается то, что никакие процедуры или переменные  не
 
      будут загружены во внутренние  таблицы  ТPU).  Квалификатор
 
      /COMMAND указывает, что командный файл MINI.TPU будет  ком-
 
      пилироваться TPU. Встроенная процедура SAVE в конце команд-
 
      ного файла указывает, что все процедуры, переменные и опре-
 
      деления клавиш в этом файле должны быть сохранены в  двоич-
 
      ном виде в файле SYS$LOGIN:MINI.GBL.  Встроенная  процедура
 
      QUIT осуществляет выход из TPU.
 
           Теперь можно вызвать TPU с помощью  следующей  команды
 
      (процедуры и определения из нового секционного файла  будут
 
      использованы для создания интерфейса с ТPU):
 
      $EDIT/TPU/SECTION=SYS$LOGIN:MINI.GBL текст_файл
 
           Чтобы каждый раз не вводить при вызове TPU эту длинную
 
      команду, можно определить логическое имя TPUSECINI для сек-
 
      ционного файла. По умолчанию TPU  ищет  файл  с  логическим
 
      именем TPUSECINI и рассматривает его как секционный файл по
 
      умолчанию.
 
           Пример.
 
           Исходный код минимального интерфейса:
 
      ! MINI.TPU - минимальный интерфейс с TPU
 
      PROCEDURE TPU$INIT_PROCEDURE
 
      ! Создать буфер и окно для сообщений
 
      MESSAGE_BUFFER:=CREATE_BUFFER ("буфер сообщений");
 
      SET (NO_WRITE, MESSAGE_BUFFER);
 
      SET (SYSTEM, MESSAGE_BUFFER);
 
      SET (EOB_TEXT, MESSAGE_BUFFER,")


                                - 24 -
 
                          00152-01 34 04-2
 
 
      MESSAGE_WINDOW:=CREATE_WINDOW (21, 4, OFF);
 
      MAP (MESSAGE_WINDOW, MESSAGE_BUFFER);
 
      ! Создать буфер и окно для SHOW
 
      SHOW_BUFFER:=CREATE_BUFFER ("SHOW буфер");
 
      SET (NO_WRITE, SHOW_BUFFER);
 
      SET (SYSTEM, SHOW_BUFFER);
 
      INFO_WINDOW:=CREATE_WINDOW (1, 20, ON);
 
      ! Создать буфер и окно для редактирования
 
      MAIN_BUFFER:=CREATE_BUFFER ("главный буфер");
 
      MAIN_WINDOW:=CREATE_WINDOW (1, 20, ON);
 
      MAP (MAIN_WINDOW,MAIN_BUFFER);
 
      ! Создать область на экране для запросов
 
      SET (PROMPT_AREA, 21, 1, NONE);
 
      ! Установить текущую позицию символов в главный буфер
 
      ENDPROCEDURE;
 
      ! Определить клавиши для минимального редактирования
 
      DEFINE_KEY ("SPLIT_LINE", RET_KEY);
 
      DEFINE_KEY ("ERASE_CHARACTER (-1)", DEL_KEY);
 
      DEFINE_KEY ("EXECUTE(READ_LINE('TPU COMMAND: '))", TAB_KEY;
 
      DEFINE_KEY ("EXIT", CTRL_Z_KEY);
 
      ! Создать секционный файл и затем завершить работу
 
      SAVE ("SYS$LOGIN:MINI.GBL");
 
      QUIT;
 
      ! Конец MINI.TPU
 
           Если желательно добавить новые процедуры,  переменные,
 
      обучающие последовательности или определения клавиш к  сек-
 
      ционному файлу, необходимо отредактировать командный  файл,
 
      включив новые элементы, и затем заново скомпилировать  этот
 
      командный файл для получения нового секционного файла. Нап-
 
      ример, если потребовалось добавить определения  для  клавиш


                                - 25 -
 
                          00152-01 34 04-2
 
 
      со стрелками, можно отредактировать файл MINI.TPU  и  доба-
 
      вить следующие операторы (после определений процедур в этом
 
      файле):
 
      DEFINE_KEY ("MOVE_VERTICAL(-1)", UP);
 
      DEFINE_KEY ("MOVE_VERTICAL(1)", DOWN);
 
      DEFINE_KEY ("MOVE_HORIZONTAL(1)", RIGHT);
 
      DEFINE_KEY ("MOVE_HORIZONTAL(-1)", LEFT);
 
           Затем следует скомпилировать командный файл с  помощью
 
      команды:
 
      $ EDIT/TPU/NOSECTION/COMMAND=MINI.TPU
 
           Теперь при вызове TPU  с  секционным  файлом  MINI.GBL
 
      новые определения клавиш будут подключены.
 
           Другим способом, с  помощью  которого  можно  добавить
 
      определения клавиш к секционному файлу, является ввод  этих
 
      определений в виде текста  в  текущий  буфер.  Можно  затем
 
      нажать клавишу "ТАB" (запрос команды минимального интерфей-
 
      са) и ввести следующую команду в ответ на запрос:
 
      EXECUTE (CURRENT_BUFFER)
 
           Данная команда приведет к тому,  что  новые  клавишные
 
      определения будут добавлены к текущему контексту редактиро-
 
      вания. Чтобы эти определения были добавлены  к  секционному
 
      файлу с целью их использования в будущем, необходимо ввести
 
      следующий оператор после запроса команды:
 
      SAVE ("SYS$LOGIN:MINI.GBL")
 
           Если требуется сохранить исходный код для этих опреде-
 
      лений, необходимо вывести содержимое  текущего  буфера  или
 
      использовать встроенную процедуру EXIT для выхода из TPU, в
 
      результате чего содержимое этого буфера  будет  записано  в
 
      файл.
 


                                - 26 -
 
                          00152-01 34 04-2
 
 
           1.5.2.4. Специальные элементы секционных файлов
 
 
           Если используется один из имеющихся в TPU интерфейсов,
 
      то секционный файл, создающий этот интерфейс, уже обеспечи-
 
      вает определенные структуры и процедуры. Если решено  напи-
 
      сать свой собственный интерфейс без использования какого-то
 
      из существующих, то необходимо  включить  некоторые  особые
 
      структуры.
 
           Любой секционный файл должен включать процедуру с име-
 
      нем TPU$INIT_PROCEDURE и распознавать специальные идентифи-
 
      каторы: MЕSSAGE_BUFFER, SHOW_BUFFER и INFO_WINDOW.
 
           Процедура TPU$INIT_PROCEDURE должна выполнить  следую-
 
      щие операции:
 
           1) присвоить всем глобальным переменным начальные зна-
 
      чения;
 
           2) создать все требуемые для редактора рабочие  прост-
 
      ранства.
 
           Можно добавить также другие функции в  эту  процедуру,
 
      но указанные две функции она должна обязательно выполнять.
 
           В языке  редактирования  TPU  существует  определенная
 
      трактовка следующих идентификаторов:
 
           1) идентификаторы для сообщений:
 
           МESSAGE_BUFFER - в этот буфер записываются  сообщения,
 
      полученные  из  встроенных   процедур   TPU.   Если   буфер
 
      MESSAGE_BUFFER связан с окном, которое отображено на экран,
 
      то TPU корректирует это окно;
 
           2) идентификаторы для SHOW-информации:
 
           SHOW_BUFFER - в этот буфер TPU записывает  информацию,
 
      полученную из встроенной процедуры SHOW;
 
           INFO_WINDOW - TPU отображает сообщения,  записанные  в
 


                                - 27 -
 
                          00152-01 34 04-2
 
 
      буфере SHOW_BUFFER, и информацию, полученную из  встроенной
 
      процедуры HELP_TEXT, в  данную  область  экрана  терминала,
 
      если она существует.
 
           Для использования встроенной процедуры SHOW необходимо
 
      создать эти  специальные  идентификаторы  ,  чтобы  TPU  их
 
      использовала при работе с командой SHOW.
 
 
 
           1.6. Обработка ошибок
 
 
           Встроенные TPU-процедуры  могут  возвращать  следующие
 
      состояния:
 
           1) SUCCESS (успех);
 
           2) INFORMATIONAL (информационное состояние);
 
           3) WARNING (предупреждение);
 
           4) ERROR (ошибка);
 
           5) FATAL (фатальная ошибка).
 
           Получить  управление  над  сообщениями,  генерируемыми
 
      возвращаемыми состояниями, можно одним из следующих  спосо-
 
      бов:
 
           1) использовать TPU-оператор ON_ERROR в начале  проце-
 
      дуры для перехвата предупреждающих сообщений или  сообщений
 
      об ошибке, которые  возвращаются  встроенными  процедурами,
 
      выполняющимися внутри данной процедуры;
 
           2) использовать операторы  SET(INFORMATION,  OFF)  или
 
      SET(SUCCESS, OFF) для подавления отображения информационных
 
      сообщений или сообщений об успешном завершении.
 
           В дополнение к сообщениям, которые  генерируются  TPU,
 
      встроенная TPU-процедура может возвращать системные сообще-
 
      ния. Кроме того, каждая встроенная процедура может  возвра-
 
      тить следующие сообщения:
 


                                - 28 -
 
                          00152-01 34 04-2
 
 
           1) TPU$SUCCESS (успех) - встроенная процедура  успешно
 
      выполнилась;
 
           2) TPU$_ARGMISMATCH (ошибка) - встроенная процедура не
 
      поддерживает указанный тип данных аргумента;
 
           3) TPU$_TOOFEW (ошибка) - в вызове процедуры  не  хва-
 
      тает аргументов;
 
           4) TPU$_TOOMANY (ошибка)- в вызове  процедуры  слишком
 
      много аргументов.
 
 
 
 
                          2. Выполнение TPU
 
 
 
           2.1. Обзор
 
 
           При вводе следующей команды на уровне  DCL  вызывается
 
      программа TPU и некоторый двоичный секционный файл, который
 
      создает интерфейс редактирования EVE:
 
      $ EDIT/TPU
 
           TPU обеспечивает два секционных файла:
 
           1) SYS$LIBRARY:EVESECINI.GBL - для интерфейса редакто-
 
      ра EVE;
 
           2) SYS$LIBRARY:EDTSECINI.GBL - для интерфейса эмулято-
 
      ра малой клавиатуры EDT.
 
           Если желательно использовать интерфейс эмулятора малой
 
      клавиатуры EDT, можно определить логическое  имя  TPUSECINI
 
      для секционного файла эмулятора малой  клавиатуры  EDT  или
 
      ввести следующую команду на уровне DCL:
 
      $EDIT/TPU/SECTION=EDTSECINI[.GBL]
 
           Квалификатор /SECTION описан среди других квалификато-
 
      ров команды EDIT/TPU.
 
           Кроме квалификаторов команды EDIT/TPU  можно  задавать


                                - 29 -
 
                          00152-01 34 04-2
 
 
      параметры на уровне языка DCL.
 
           Помимо вызова TPU на  уровне  DCL  для  интерактивного
 
      редактирования, можно вызвать TPU командной процедурой  DCL
 
      и запустить TPU как пакетное задание.
 
 
 
           2.2. Вызов TPU из командной процедуры DCL
 
 
           Существуют две главные причины, по которым может  пот-
 
      ребоваться вызвать ТPU из командной процедуры:
 
           1) для установки специальной среды для  интерактивного
 
      редактирования;
 
           2) для установки работы типа  пакетного  задания  (это
 
      означает, что редакторская работа невидима  на  экране,  но
 
      результаты сеанса редактирования посылаются на экран).
 
 
 
           2.2.1. Создание специальной среды редактирования
 
 
           Можно запустить TPU со специальной средой редактирова-
 
      ния, написав командную процедуру уровня DCL, которая снача-
 
      ла устанавливает нужную среду и затем вызывает TPU. Необхо-
 
      димо  назначить  SYS$COMMAND  то  же  значение,  что  имеет
 
      SYS$INPUT.
 
           Пример 1 показывает командную  процедуру  уровня  DCL,
 
      которая запоминает последний редактируемый файл  и  исполь-
 
      зует его как входной файл для TPU. После  назначения  имени
 
      файла эта командная процедура уровня  DCL  вызывает  TPU  с
 
      секционным файлом, принятым по  умолчанию  (т.к.  не  задан
 
      другой секционный файл), и с командным  файлом,  написанным
 
      пользователем.
 


                                - 30 -
 
                          00152-01 34 04-2
 
 
           Пример 1.
 
      $ SET NOVERIFY
 
      $ ASSIGN/USER SYS$COMMAND SYS$INPUT
 
      $ IF P1 .NES. ""THEN F_ :== 'P1
 
      $ WRITE SYS$OUTPUT "*** ''F_' ***"
 
      $ EDIT/TPU/COMMAND=DISK$:[USER]TPUINI.TPU 'F_
 
           В примере 2 устанавливается некоторая  среда,  которая
 
      указывает позиции табуляции  для  программ,  написанных  на
 
      ФОРТРАНЕ.
 
           Пример 2.
 
      $ SET NOVERIFY
 
      $ ASSIGN/USER SYS$COMMAND SYS$INPUT
 
      $ IF P1.EQS. THEN GOTO REGULAR_INVOKE
 
      $ F_ :== 'P1
 
      $ FTN_TEST = F$FILE_ATTRIBUTES (F_, "RAT")
 
      $ IF FTN_TEST .NES. "FTN" THEN GOTO REGULAR_INVOKE
 
      $ FTN_INVOKE:
 
      $ EDIT/TPU/SECTION=EVESECINI/COMMAND=FTNTABS.TPU 'F_
 
      $ GOTO TPU_DONE
 
      $ REGULAR_INVOKE:
 
      $ EDIT/TPU/SECTION=EVESECINI 'F_
 
      $ TPU_DONE:
 
 
 
           2.2.2. Установление пакетно-подобного редактирования
 
 
           В некоторых случаях желательно поместить  все  команды
 
      редактирования в некоторый файл и затем заказать чтение  из
 
      этого файла вместо того, чтобы вводить эти команды вручную.
 
      Также может потребоваться, чтобы TPU выполняла все операции
 
      редактирования без отображения результатов на экран.  Можно
 


                                - 31 -
 
                          00152-01 34 04-2
 
 
      произвести такой тип редактирования  из  пакетного  задания
 
      или, если необходимо увидеть результаты сеанса редактирова-
 
      ния на экране, из  командной  процедуры  уровня  DCL.  Хотя
 
      редактирование не отображается на экране, но данный  терми-
 
      нал не является свободным во время выполнения такой команд-
 
      ной процедуры.
 
           В примере 1 показана командная процедура DCL с  именем
 
      INVISIBLE_TPU.COM, которая содержит одну командную  строку,
 
      вызывающую TPU следующим способом:
 
           - /NOSECTION - без секционного файла (для  инициализа-
 
      ции редактора не  используется  двоичный  секционный  файл,
 
      содержащий процедуры и клавишные определения);
 
           - /COMMAND=GSR.TPU - командный файл, содержащий коман-
 
      ды редактирования;
 
           _ /NODISPLAY - не  обрабатываются  функции  управления
 
      экраном (окна, курсор и т.д.).
 
           Файл GSR.TPU, который используется вместе с  командным
 
      квалификатором  /COMMAND,  осуществляет  просмотр  текущего
 
      буфера и заменяет строку или набор строк. Файл GSR.TPU при-
 
      веден в примере 2.
 
           Для обработки этих файлов в интерактивном режиме необ-
 
      ходимо ввести команду:
 
      $ INVISIBLE_TPU файл_для_редактирования
 
           Пример 1.
 
      !Командная процедура вызывает TPU без редакторского
 
      !интерфейса. Файл GSR.TPU содержит команды редактирования.
 
      !в качестве P1 следует указать редактируемый файл.
 
      !
 
      $ EDIT/TPU/NOSECTION/COMMAND=GSR.TPU/NODISPLAY 'P1'
 


                                - 32 -
 
                          00152-01 34 04-2
 
 
           Пример 2.
 
      PROCEDURE GLOBAL_SEARCH_REPLACE (стр_или_шаблон,стр2)
 
      !Данная процедура выполняет просмотр текущего буфера
 
      !и заменяет строку или шаблон на новую строку.
 
      LOCAL SRC_RANGE, счетчик;
 
      !Возврат в вызывающую программу, если строка
 
      !не найдена.
 
      ON_ERROR
 
      MSG_TEXT := FAO('COMPLETED !UL REPLACEMENT!%S', счетчик);
 
      MESSAGE (MSG_TEXT);
 
      RETURN;
 
      ENDON_ERROR;
 
      Счетчик:=0
 
      LOOP
 
      SRC_RANGE := SEARCH(строка_или_шаблон, FORWARD);
 
      ERASE(SRC_RANGE);
 
      POSITION (END_OF(SRC_RANGE));
 
      COPY_TEXT (STR2);
 
      Счетчик:=счетчик+1
 
      ENDLOOP;
 
      ENDPROCEDURE
 
      !Выполняемые операторы
 
      Вх_файл:=GET_INFO(COMMAND_LINE, 'имя_файла');
 
      Глав_буфер=CREATE_BUFFER('MAIN', вх_файл);
 
      POSITION (BEGINNING_OF (глав_буфер));
 
      GLOBAL_SEARCH_REPLACE('XYZ$_', 'USER$_');
 
      PAT1:='' & LINE_BEGIN & 'T';
 
      POSITION (BEGINNING_OF (глав_буфер));
 
      GLOBAL_SEARCH_REPLACE (PAT1, 'T');
 
      WRITE_FILE(глав_буфер, 'NEWFILE.DAT');


                                - 33 -
 
                          00152-01 34 04-2
 
 
      QUIT;
 
           Примечание. Если указан квалификатор /NODISPLAY  после
 
      команды EDIT/TPU, то не следует определять какие-либо  кла-
 
      виши, создавать или  манипулировать  окнами  в  том  файле,
 
      который содержит команды редактирования.
 
           Если используются встроенные процедуры QUIT  или  EXIT
 
      для выхода из редактора, то необходимо явно  указать  вывод
 
      всех модифицированных буферов (см. пример 2).  Если  буфера
 
      модифицированы и не выведены, то можно попасть в  бесконеч-
 
      ный цикл. Причиной этого является то, что TPU не  завершает
 
      команды QUIT или EXIT, если имеются модифицированные  буфе-
 
      ра, которые еще не выведены на диск. Вместо завершения  TPU
 
      запрашивает подтверждение того, что пользователь информиро-
 
      ван о том, что модифицированные буфера будут потеряны, если
 
      их не записать на внешнее устройство. При работе  в  режиме
 
      /NODISPLAY пользователь не  увидит  этого  запроса,  а  TPU
 
      будет в цикле ожидать ответ на свой запрос.
 
 
 
           2.3. Вызов TPU из пакетного задания
 
 
           Если  необходимо,  чтобы  редактирование  произошло  в
 
      пакетном режиме, можно использовать  команду  SUBMIT  языка
 
      DCL для посылки задания в очередь пакетных заданий.
 
           Например, если  требуется  произвести  редактирование,
 
      пользуясь файлом GSR.TPU в пакетном  режиме,  можно  ввести
 
      следующую команду:
 
      $ SUBMIT INVISIBLE_TPU.COM/LOG= -
 
      INVISIBLE_TPU.LOG/параметр=редактируемый_файл
 
           Это задание будет поставлено в очередь пакетных  зада-
 
      ний (по умолчанию) системы, и результаты  будут  посланы  в
 


                                - 34 -
 
                          00152-01 34 04-2
 
 
      файл регистрации, который создается пакетным заданием.
 
           Ограничения, которые накадываются на  пакетно-подобные
 
      командные процедуры, также накладываются на любое  пакетное
 
      задание.
 
 
 
           2.4. Квалификаторы команды EDIT/TPU
 
 
           Для указания специальной обработки вместе  с  командой
 
      EDIT/TPU возможно  использовать  квалификаторы.  В  таблице
 
      перечислены командные квалификаторы для EDIT/TPU и их  зна-
 
      чения по умолчанию.
 
 
                Квалификаторы команды EDIT/TPU
 
      -----------------------------------------------------
                                !
            Квалификатор        !   Значение по умолчанию
                                !
      -----------------------------------------------------
                                !
      /[NO]COMMAND[=спецф_файла]! /COMMAND=TPUINI
                                !
      /[NO]CREATE               ! /CREATE
                                !
      /[NO]DISPLAY              ! /DISPLAY
                                !
      /[NO]JOURNAL[=спецф_файла]! /JOURNAL=входн_файл.TJL
                                !
      /[NO]OUTPUT[=спецф_файла] ! /OUTPUT=входн_файл.тип
                                !
      /[NO]READ_ONLY            ! /NOREAD_ONLY
                                !
      /[NO]RFCOVER              ! /NORECOVER
                                !
      /[NO]SECTION[=спецф_файла]! /SECTION=TPUSECINI
 
 
           2.4.1. Квалификаторы /COMMAND, /NOCOMMAND
 
 
           Квалификатор /COMMAND определяет чтение программой TPU
 
      командного  файла,   написанного   пользователем,   который
 
      используется для целей инициализации.  По  умолчанию  типом
 
      файла для командных файлов TPU является TPU.  По  умолчанию
 
      TPU пытается читать командный файл с именем  TPUINI.TPU  из


                                - 35 -
 
                          00152-01 34 04-2
 
 
      каталога, принятого по умолчанию. Можно использовать полную
 
      спецификацию файла после квалификатора /COMMAND или опреде-
 
      лить  логическое  имя  TPUINI  для  обозначения  некоторого
 
      командного файла, который отличается от принятого по  умол-
 
      чанию.
 
           Следующая команда приводит  к  тому,  что  TPU  читает
 
      командный  файл  с  именем  SYS$LOGIN:личный_TPUINI.TPU   и
 
      использует Буква.ном в качестве входного файла  для  сеанса
 
      редактирования:
 
      $ EDIT/TPU/COMMAND=SYS$LOGIN:личный_TPUINI.TPU Буква.ном
 
           Чтобы предотвратить обработку программой TPU командно-
 
      го файла, используется квалификатор  /NOCOMMAND.  Если  TPU
 
      часто вызывается без командного файла, то можно  определить
 
      символическое имя, подобное следующему:
 
      $ EVE := EDIT/TPU/NOCOMMAND
 
           Когда не требуется  использовать  командный  файл,  то
 
      применение /NOCOMMAND уменьшает стартовое время, т.к. отме-
 
      няется поиск командного файла.
 
 
 
           2.4.2. Квалификаторы /CREATE, /NOCREATE
 
 
           Квалификатор /CREATE определяет  создание  TPU  нового
 
      файла, когда указанный входной файл не  существует.  Интер-
 
      фейс, основанный на ТPU, отвечает за обработку этого квали-
 
      фикатора. Интерфейс может получить информацию о том, указан
 
      или  нет  этот  квалификатор  при  вызове  TPU,   используя
 
      встроенную       процедуру       GET_INFO,        например:
 
      X:=GET_INFO(COMMAND_LINE, "CREATE")
 
           По умолчанию интерфейсы редактирования в TPU обеспечи-
 
      вают некоторый буфер,  из  содержимого  которого  создается
 


                                - 36 -
 
                          00152-01 34 04-2
 
 
      этот файл. Если  выводится  содержимое  буфера  (с  помощью
 
      встроенной процедуры WRITE_FILE либо путем выхода из редак-
 
      тора), то TPU создает новый файл для входной файловой  спе-
 
      цификации.
 
           Если используется /NOCREATE при вызове TPU и если ука-
 
      зывается некоторый входной файл, который не существует,  то
 
      интерфейсы печатают сообщение об ошибке и возвращают  поль-
 
      зователя на уровень команд DCL, например:
 
      $ EDIT/TPU/NOCREATE Новый_файл.DAT
 
      $ INPUT FILE DOES NOT EXIST: DISK$:[USER]Новый_файл.DAT
 
 
 
           2.4.3. Квалификаторы /DISPLAY, /NODISPLAY
 
 
           Задание квалификатора /DISPLAY  определяет  работу  на
 
      терминале, который поддерживается TPU, и использование тер-
 
      минальных функций,  таких  как  отображение  информации  на
 
      экране и работа с малой клавиатурой. По умолчанию действует
 
      квалификатор /DISPLAY. ТPU предполагает работу на  термина-
 
      ле, который она поддерживает, до тех пор пока не будет ука-
 
      зан квалификатор /NODISPLAY. Если использовался  квалифика-
 
      тор /DISPLAY при работе с устройством, которое не поддержи-
 
      вается TPU, то возвращается сообщение об  ошибке  и  работа
 
      прекращается.
 
           Квалификатор /NODISPLAY приводит к тому, что TPU будет
 
      работать без использования экрана и малой клавиатуры терми-
 
      нала. Квалификатор /NODISPLAY используют в  следующих  слу-
 
      чаях:
 
           1) при обработке TPU-процедур в пакетном задании;
 
           2) при работе с терминалом, который TPU  не  поддержи-
 
      вает.
 


                                - 37 -
 
                          00152-01 34 04-2
 
 
           Если указан /NODISPLAY, то команды манипуляции  окнами
 
      и экраном и клавишные определения  будут  вызывать  ошибки.
 
      Файлы инициализации, которые содержат  команды  манипуляции
 
      экраном (ADJUST_WINDOW,  CREATE_WINDOW,  MAP)  и  клавишные
 
      определения, будут обрабатываться при действующем  квалифи-
 
      каторе /NODISPLAY, но эти команды будут бессмысленны и даже
 
      могут возвратить сообщение об  ошибке  в  файл  регистрации
 
      пакетного задания или  на  экран.  Необходимо  использовать
 
      специальный файл инициализации (секционный  либо  командный
 
      файл)  для  тех  случаев,  когда  указывается  квалификатор
 
      /NODISPLAY. Этот файл не должен включать клавишные  опреде-
 
      ления  или  команды  манипуляции  экраном,  за  исключением
 
      READ_LINE, MESSAGE и LAST_KEY,  которые  будут  работать  с
 
      некоторыми ограничениями . К тому же этот файл должен  опи-
 
      сывать полный сеанс работы с TPU, т.е.  он  должен  оканчи-
 
      ваться командами QUIT или EXIT.
 
           Следующая команда  приводит  к  тому,  что  TPU  будет
 
      редактировать файл MY_BATCH_FILE.RNO без использования тер-
 
      минальных функций отображения информации:
 
      $ EDIT/TPU/NODISPLAY MY_BATCH_FILE.RNO
 
 
 
           2.4.4. Квалификаторы /JOURNAL и /NOJOURNAL
 
 
           Квалификатор /JOURNAL=Вх_файл.TJL определяет обработку
 
      программой TPU журнального файла сеанса  редактирования,  в
 
      результате чего имеется возможность восстановить прерванный
 
      сеанс. Интерфейс, основанный на ТPU, является ответственным
 
      за обработку этого квалификатора. Интерфейс может  получить
 
      информацию о том, был указан или нет этот квалификатор  при
 
      вызове TPU, используя встроенную процедуру GET_INFO, напри-
 


                                - 38 -
 
                          00152-01 34 04-2
 
 
      мер:
 
      Х:=GET_INFO (COMMAND_LINE, "JOURNAL")
 
           По умолчанию интерфейсы  TPU  поддерживают  журнальный
 
      файл, который имеет то же имя, что и входной  файл,  и  тип
 
      файла TJL. При вызове TPU без указания файла  по  умолчанию
 
      имя журнального файла будет TPU.TJL.  Для  задания  другого
 
      имени журнальному файлу  используется  полная  спецификация
 
      файла с квалификатором /JOURNAL.
 
           Если редактируется файл из другого каталога и требует-
 
      ся, чтобы журнальный файл был размещен в том  же  каталоге,
 
      необходимо использовать квалификатор /JOURNАL со специфика-
 
      цией файла, которая включает имя каталога. В противном слу-
 
      чае журнальный файл создается в каталоге, который принят по
 
      умолчанию.
 
           Встроенная процедура JOURNAL_OPEN  также  контролирует
 
      создание журнального файла сеанса редактирования и его имя.
 
      В файле инициализации эмулятора малой клавиатуры EDT и  EVE
 
      квалификатор /JOURNAL, используемый при вызове  TPU,  заме-
 
      щает имя и расширение файла, которые были даны  журнальному
 
      файлу командой JOURNAL_OPEN. Эти  интерфейсы  автоматически
 
      включают протоколирование, если явно не использован  квали-
 
      фикатор /NOJOURNAL. Использование  /NOJOURNAL  в  одной  из
 
      этих сред предотвращает выполнение команды JOURNAL_OPEN.
 
           TPU обеспечивает буфер  для  протоколирования  нажатых
 
      клавиш размером в 500  байт.  Если  протоколирование  имеет
 
      место, то вывод в  журнальный  файл  осуществляется,  когда
 
      этот буфер заполнен. Можно использовать встроенную процеду-
 
      ру SET (JOURNALING, целое_число) для регулирования  частоты
 
      протоколирования. Целое число может лежать в диапазоне от 1
 
      до 10. По умолчанию подразумевается 10,  что  соответствует


                                - 39 -
 
                          00152-01 34 04-2
 
 
      записи буфера  каждые  500  байт.  Меньшее  целое  вызывает
 
      запись этого буфера с большей частотой.  Однако  уменьшение
 
      этого числа приведет к снижению производительности TPU.
 
           Однажды создав журнальный файл, можно с помощью квали-
 
      фикатора /RECOVER обрабатывать команды TPU, которые  содер-
 
      жатся в журнальном  файле.  Следующая  команда  приводит  к
 
      тому, что TPU восстанавливает предыдущий сеанс редактирова-
 
      ния входного файла с именем МЕМО.ТXТ (если журнальный  файл
 
      имеет имя, отличное от имени входного файла, нужно включить
 
      как квалификатор /JOURNAL= спецификация_файла, так и квали-
 
      фикатор /RECOVER с командой EDIT/TPU):
 
      $ EDIT/TPU/RECOVER/JOURNAL=MEMO.SAV MEMO.TXT
 
           Чтобы отменить протоколирование сеанса редактирования,
 
      используется квалификатор /NOJOURNAL, например:
 
      $ EDIT/TPU/NOJOURNAL MEMO.TXT
 
 
 
           2.4.5. Квалификаторы /OUTPUT, /NOOTPUT
 
 
           Квалификатор  /OUTPUT=Вх_файл.тип   определяет   вывод
 
      результата сеанса редактирования в некоторый  файл.  Интер-
 
      фейс является ответственным за обработку этого квалификато-
 
      ра. Интерфейс может получить информацию о том,  был  указан
 
      или  нет  этот  квалификатор  при  вызове  TPU,   используя
 
      встроенную процедуру GET_INFO, например:
 
      х:=GET_INFO (COMMAND_LINE, "CREATE")
 
           Интерфейсы эмулятора малой клавиатуры EDT и EVE, кото-
 
      рые используются с квалификатором /OUTPUT, позволяют  прис-
 
      ваивать имя файлу, который создается из содержимого главно-
 
      го буфера при выходе из редактора.  По  умолчанию  выходной
 
      файл имеет то же имя, что и входной файл, и номер версии на
 


                                - 40 -
 
                          00152-01 34 04-2
 
 
      единицу больше, чем номер последней версии входного  файла.
 
      Можно задать другое  имя  для  выходного  файла,  используя
 
      сецификацию файла в квалификаторе /OUTPUT.
 
           Квалификатор /NOOUTPUT  позволяет  написать  интерфейс
 
      для TPU, который разрешит  пользователю  управлять  выводом
 
      информации в файл. Например, интерфейс для эмулятора  малой
 
      клавиатуры EDT написан таким образом, что, если указывается
 
      /NOOTPUT в  командной  строке,  TPU  устанавливает  атрибут
 
      NO_WRITE для главного буфера и не будет создавать  выходной
 
      файл для этого буфера.
 
           Следующая команда вызывает запись содержимого главного
 
      буфера в файл NEWLET.RNO при выходе из TPU:
 
      $ EDIT/TPU/OUTPUT=NEWLET.RNO LETTER.RNO
 
 
 
           2.4.6. Квалификаторы /READ_ONLY и /NOREAD_ONLY
 
 
           Квалификатор /READ_ONLY влияет на ведение  журнального
 
      файла и создание выходного файла  из  содержимого  главного
 
      буфера, если он модифицирован.
 
           Использование квалификатора /READ_ONLY подобно исполь-
 
      зованию квалификаторов /NOJOURNAL и /NOOUTPUT. Если  указан
 
      /READ_ONLY, TPU  не  будет  вести  журнальный  файл  сеанса
 
      редактирования и установит атрибут  NO_WRITE  для  главного
 
      буфера. Когда этот атрибут установлен для какого-то буфера,
 
      его содержимое не будет выводиться в  файл  при  выходе  из
 
      редактора. Встроенные процедуры  QUIT  и  EXIT  заканчивают
 
      сеанс работы с редактором  без  создания  новых  файлов  из
 
      содержимого главного буфера (даже если он  был  модифициро-
 
      ван).
 
           Если атрибут NO_WRITE не установлен для буфера, квали-
 


                                - 41 -
 
                          00152-01 34 04-2
 
 
      фикатор /NOREAD_ONLY указывает на запись  главного  буфера,
 
      если он был модифицирован, при выдаче команды EXIT.  Дейст-
 
      вует по умолчанию.
 
           Квалификатор /READ_ONLY  может  быть  использован  для
 
      настройки процесса обработки командной строки пользователя.
 
      Если используется EVE или эмулятор малой клавиатуры и  ука-
 
      зывается /READ_ONLY, то  не  будет  создаваться  журнальный
 
      файл. Квалификатор /NOREAD_ONLY приводит к  тому,  что  эти
 
      интерфейсы ведут журнальный файл в случае появления систем-
 
      ного прерывания и создают некоторый выходной файл при обра-
 
      ботке команды EXIT.
 
           Следующая  команда  предписывает  TPU  при  выходе  из
 
      редактора не выводить содержимое главного буфера:
 
      $ EDIT/TPU/READ_ONLY MEETING.MEM
 
 
 
           2.4.7. Квалификаторы /RECOVER и /NORECOVER
 
 
           Квалификатор /RECOVER  определяет  чтение  программной
 
      TPU журнального файла в момент начала  сеанса  редактирова-
 
      ния. По умолчанию принят квалификатор /NORECOVER.  Получить
 
      информацию об  установке  квалификатора  /RECOVER  можно  с
 
      помощью встроенной процедуры  GET_INFO.  Например,  команда
 
      х:=GET_INFO (COMMAND_LINE, "RECOVER") возвратит 1 (истина),
 
      если при вызове TPU был указан квалификатор /RECOVER, или 0
 
      (ложь), если не указан.
 
           Если выполняется встроенная процедура JOURNAL_OPEN, TO
 
      по умолчанию TPU открывает журнальный файл только для выво-
 
      да. Если был указан /RECOVER, и затем выполнена  встроенная
 
      процедура JOURNAL_OPEN, то журнальный файл открывается  для
 
      ввода и вывода. В последующем TPU продолжает протоколирова-
 


                                - 42 -
 
                          00152-01 34 04-2
 
 
      ние нажатых клавиш до конца сеанса  редактирования  или  до
 
      тех  пор,   пока   не   выполнится   встроенная   процедура
 
      JOURNAL_CLOSE.   Пользователь    контролирует    выполнение
 
      встроенной процедуры JOURNAL_OPEN.
 
           При восстановлении  сеанса  редактирования  все  файлы
 
      должны быть в том же состоянии, что и перед началом сеанса,
 
      который восстанавливается. Все характеристики должны быть в
 
      начальном состоянии и для  терминала.  Если  была  изменена
 
      ширина или длина страницы терминала, то необходимо изменить
 
      эти значения на первоначальные. Особенно  внимательно  сле-
 
      дует проверить значения:
 
           1) типа устройства;
 
           2) режима редактирования;
 
           3) восьмого бита;
 
           4) страницы;
 
           5) ширины.
 
           Следующая команда приводит к тому, что TPU  откроет  и
 
      восстановит   предыдущий   сеанс    редактирования    файла
 
      NOTES.TXT:
 
      $ EDIT/TPU/RECOVER NOTES.TXT
 
           Если журнальный файл имеет  другое  имя,  отличное  от
 
      имени входного файла, необходимо включить два  квалификато-
 
      ра: /JOURNAL=спецификация_файла и /RECOVER:
 
      $ EDIT/TPU/RECOVER/JOURNAL=SAVE.TJL LETTER.DAT
 


                                - 43 -
 
                          00152-01 34 04-2
 
 
           2.4.8. Квалификаторы /SECTION и NOSECTION
 
 
           Квалификатор  /SECTION=TPUSECINI   определяет   чтение
 
      программой TPU специального  файла  инициализации,  который
 
      хранится в двоичном виде. По умолчанию тип этого файла GBL.
 
      По  умолчанию  TPU  пытается   читать   файл   SYS$LIBRARY:
 
      TPUSECINI.GBL, который является секционным файлом,  создаю-
 
      щим интерфейс EVE. Возможно указывать другой файл инициали-
 
      зации, задавая полную спецификацию файла для  квалификатора
 
      /SECTION или определяя логическое имя TPUSECINI для другого
 
      секционного файла.
 
           Следующая команда вызывает  чтение  секционного  файла
 
      VT100INI.GBL:
 
      $ EDIT/TPU/SECTION=DISK$USER:[SMITH]VT100INI.GBL
 
           Файл, использованный как  значение  для  квалификатора
 
      /SECTION=спецификация_файла,  должен   быть   скомпилирован
 
      путем обработки исходного кода файла инициализации програм-
 
      мой TPU и последующим сохранением с помощью встроенной про-
 
      цедуры SAVE. Этот процесс преобразует файл в  соответствую-
 
      щую двоичную форму.
 
           Если указан  квалификатор  /NOSECTION,  TPU  не  будет
 
      читать двоичный файл инициализации.  Если  не  используется
 
      квалификатор /COMMAND с квалификатором /NOSECTION,  TPU  не
 
      будет иметь интерфейса пользователя, и никакие  клавиши  не
 
      будут определены. Из этого состояния есть только один выход
 
      из TPU - нажать CTRL/Y.
 


                                - 44 -
 
                          00152-01 34 04-2
 
 
           2.5. Параметры команды EDIT/TPU
 
 
           После команды EDIT/TPU на уровне языка DCL можно  ука-
 
      зывать любой файл системы MOC  ВП  (спецификацию  файла)  в
 
      качестве параметра. Спецификация файла указывает операцион-
 
      ной системе  имя  файла,  который  необходимо  создать  или
 
      редактировать с помощью TPU. Следующая команда вызывает TPU
 
      с секционным файлом эмулятора малой клавиатуры EDT и задает
 
      имя файла HISTORY.TXT:
 
      $ EDIT/TPU/SECTION=SYS$LIBRARY:EDTSECINI. HISTORY.TXT
 
           При вызове TPU  без  секционного  файла  не  требуется
 
      задания параметров. Однако большинство интерфейсов редакти-
 
      рования, основанных на  TPU,  используют  параметр  команды
 
      EDIT/TPU для задания файла для обработки. Например,  эмуля-
 
      тор малой клавиатуры EDT и EVE принимают один  необязатель-
 
      ный параметр  -  спецификацию  файла.  Можно  начать  сеанс
 
      редактирования без указания какого-либо входного файла,  но
 
      после введения данных в буфер редактор запросит имя  файла,
 
      когда будет попытка выйти из редактора. Синтаксис  команды,
 
      которая вызывает TPU, следующий:
 
      $ EDIT/TPU[/квалификатор,...] [спецификация_файла]
 
           Спецификация файла может быть только именем или полной
 
      спецификацией файла, например:
 
      $ EDIT/TPU DISK$USER:[SMITH] LETTER.DAT
 
           В зависимости от используемого  интерфейса  TPU  может
 
      обработать символы обобщения в какой-то части имени входно-
 
      го файла или нет. EVE  обрабатывает  символ  обобщения  при
 
      обнаружении подходящей пары для  этого  символа;  в  другом
 
      случае EVE не будет читать файл. Эмулятор малой  клавиатуры
 
      EDT не распознает символы обобщения.
 


                                - 45 -
 
                          00152-01 34 04-2
 
 
           Включать в спецификацию файла номер версии  как  часть
 
      этой спецификации необязательно. Если не указан номер  вер-
 
      сии файла, TPU осуществляет доступ к файлу с  самым  макси-
 
      мальным номером версии в данном  каталоге.  Если  требуется
 
      редактировать более раннюю версию, то  необходимо  включить
 
      этот номер версии в спецификацию файла.
 
           Если не указывается имя выходного файла с помощью ква-
 
      лификатора /OUTPUT, TO EVE и эмулятор малой клавиатуры  EDT
 
      используют имя входного файла и как  имя  выходного  файла.
 
      Первоначальная версия редактируемого файла  не  изменяется.
 
      Он остается в своем  каталоге,  если  только  администратор
 
      системы не установил  ограничения  на  номера  версий.  При
 
      выходе из TPU новый файл создается в каталоге входного фай-
 
      ла (если не указан другой каталог). Этот файл имеет  то  же
 
      самое имя, что и входной файл, но  номер  версии  будет  на
 
      единицу больше, чем номер версии редактируемого файла.
 
 
 
 
                        3. Сообщения оператору
 
 
 
           Данный раздел содержит список сообщений, которые выра-
 
      батывает программа TPU. Эти сообщения сопровождаются  пояс-
 
      нениями и рекомендациями пользователю. Они  упорядочены  по
 
      алфавиту и сгруппированы по отдельным уровням.
 


                                - 46 -
 
                          00152-01 34 04-2
 
 
           3.1. Сообщения об успешных действиях
 
 
      CREATED, 'спецификация_файла' CREATED
 
           Об'яснение. Указанный файл был успешно создан.
 
           Действие оператора. Нет.
 
 
      DEBUG, BREAK AT LINE 'целое_число'
 
           Об'яснение. Выполнен оператор BREAK.
 
           Действие оператора. Нет.
 
 
      ENDOFLINE, RETURNING A RANGE OF TEXT WITH AN END OF LINE
 
           Об'яснение. Успешное возвращение текстового диапазона,
 
      который содержит разграничитель строк.
 
           Действие оператора. Нет.
 
 
      EXITING, EDITOR SUCCESSFULLY EXITING
 
           Об'яснение. Завершение успешного выхода из образа TPU.
 
           Действия оператора. Нет.
 
 
      FILEIN, 'количество' LINE(S) READ FROM FILE 'имя_файла'
 
           Об'яснение. TPU открыл указанный файл и прочитал  ука-
 
      занное число строк из этого файла в буфер.
 
           Действие оператора. Нет.
 
 
      FILEOUT, 'количество' LINE(S) WRITTEN TO FILE 'имя_файла'
 
           Об'яснение. TPU записал указанное число строк из буфе-
 
      ра в указанный файл.
 
           Действия оператора. Нет.
 
 
      NEEDFILENAME, ENTER A FILE NAME TO WRITE BUFFER 'имя_буфе-
 
                    ра'; ELSE PRESS RETURN:
 
           Об'яснение. Модифицирован пригодный для записи  буфер,
 
      но нет имени файла, связанного с этим буфером.
 


                                - 47 -
 
                          00152-01 34 04-2
 
 
           Действие оператора. Ввести некоторое имя  файла,  если
 
      необходимо, чтобы содержимое этого буфера было  записано  в
 
      файл; в противном случае нажать клавишу RETURN.
 
 
      NOENDOFLINE, RETURNING A RANGE OF TEXT WITH NO END OF LINE
 
           Об'яснение. Успешное возвращение текстового диапазона,
 
      который не содержит разграничителя строк.
 
           Действия оператора. Нет.
 
 
      PROCESSBEG, SUBPROCESS ACTIVATED
 
           Об'яснение. Подпроцесс активизирован успешно
 
           Действия оператора. Нет.
 
 
      PROCESSEND, SUBPROCESS TERMINATED
 
           Об'яснение. Успешно активизированный подпроцесс  оста-
 
      новлен. В дальнейшем возможен  выход  из  TPU,  уничтожение
 
      процесса, выполнение LOGOUT в контексте  этого  подпроцесса
 
      или остановка этого подпроцесса другим пользователем систе-
 
      мы.
 
           Действие оператора. Нет.
 
 
      QUITTING, EDITOR SUCCESSFULLY QUITTING
 
           Об'яснение. Успешный выход из образа TPU без  сохране-
 
      ния  результатов  редактирования,  выполненного  в  течение
 
      сеанса редактирования.
 
           Действие оператора. Нет.
 
 
      REALLYQUIT, BUFFER MODIFICATIONS WILL NOT BE SAVED, CONTI-
 
                  NUE QUITTING (Y OR N)?
 
           Об'яснение. Сообщение является запросом  подтверждения
 
      того, что действительно необходимо выдать команду  QUIT,  а
 
      не EXIT. Oно отображается, когда существуют  модифицирован-
 


                                - 48 -
 
                          00152-01 34 04-2
 
 
      ные буфера, которые можно вывести.
 
           Действия оператора. Ввести NO, если решено  продолжить
 
      редактирование, и YES, если необходимо завершить выполнение
 
      команды QUIT. Следует вводить только YES или NO.
 
 
      RECOVERBEG, RECOVERY STARTED
 
           Об'яснение. Успешно начат процесс восстановления сеан-
 
      са работы с  TPU  по  предварительно  созданному  протоколу
 
      работы.
 
           Действие оператора. Нет.
 
 
      RECOVEREND, RECOVERY COMPLETE
 
           Об'яснение. Успешно  завершено  восстановление  сеанса
 
      работы с TPU по предварительно созданному протоколу работы.
 
           Действие оператора. Продолжать редактирование  как  до
 
      прерывания.
 
 
      RETURNING, EDITOR NOW RETURNING TO CALLER
 
           Об'яснение. Редактор возвратил  управление  тому,  кто
 
      его вызвал.
 
           Действие оператора. Нет.
 
 
      SECTSAVED, 'количество' PROCEDURE(S), 'количество' VARIAB-
 
                 LE(S), 'количество' KEY(S) SAVED
 
           Об'яснение. Успешно сохранены в секционном файле  ука-
 
      занное количество процедур, переменных и  определений  кла-
 
      виш.
 
           Действие оператора. Нет.
 
 
      SUCCESS, SUCCESSFUL COMPLETION
 
           Об'яснение. Успешное завершение  некоторой  функции  в
 
      TPU.
 


                                - 49 -
 
                          00152-01 34 04-2
 
 
           Действие оператора. Нет.
 
 
 
           3.2. Информационные сообщения
 
 
 
      BOTLINETRUNC, CALCULATED NEW LAST LINE 'целое', CHANGED TO
 
                    'целое'
 
           Об'яснение. Изменено некоторое окно, но новая  послед-
 
      няя строка этого окна была больше реального числа  физичес-
 
      ких экранных строк, поэтому TPU произвел обрезку на указан-
 
      ное значение.
 
           Действие оператора. Нет или заново выполнить запрос  к
 
      встроенной процедуре ADJUST_WINDOW с другими аргументами.
 
 
      EXPECTED, ONE OF THE FOLLOWING SYMBOLS WAS EXPECTED:
 
           Об'яснение. В программе  есть  синтаксическая  ошибка.
 
      Один из перечисленных символов ожидался, но не был найден.
 
           Действие оператора. Исправить синтаксическую ошибку  и
 
      заново скомпилировать свою программу.
 
 
      JOURNALBEG, JOURNAL OF EDIT SESSION STARTED
 
           Об'яснение.  Успешно  начато  протоколирование  сеанса
 
      работы с программой TPU.
 
           Действие оператора. Нет или запустить встроенную  про-
 
      цедуру JOURNAL_CLOSE, если требуется прекратить  протоколи-
 
      рование.
 
 
      REVERSECASE, CASE LIMITS WERE REVERSED AT LINE 'целое'
 
           Об'яснение. Найден оператор CASE, в котором максималь-
 
      ное и минимальное значение меток  переставлены  местами.  В
 
      операторе CASE минимальное значение метки должно идти  пер-
 
      вым.
 


                                - 50 -
 
                          00152-01 34 04-2
 
 
           Действие оператора. Поменять местами значения в опера-
 
      торе и скомпилировать его заново.
 
 
      SECTRESTORED, 'количество' PROCEDURE(S), 'количество'
 
                    VARIABLE(S), 'количество' KEY(S) RESTORED
 
           Об'яснение. Указанные элементы были успешно восстанов-
 
      лены из секционного файла.
 
           Действие оператора. Нет.
 
 
      STATOOLONG, TRUNCATING STATUS LINE TO 'число' CHARACTERS
 
           Об'яснение. Строка состояния окна  определена  слишком
 
      длинной - она не входит в границы текущей ширины физическо-
 
      го экрана терминала. Текст будет обрезан в  соответствии  с
 
      экраном.
 
           Действие оператора. Нет или переопределить строку сос-
 
      тояния на более короткую строку текста.
 
 
      SUPERSEDED, DEFINITION OF 'имя' SUPERSEDED AT LINE 'целое'
 
           Об'яснение. Информирует, что заданное новое  определе-
 
      ние будет заменять старое определение, уже данное для  кла-
 
      виши или процедуры.
 
           Действие оператора. Нет.
 
 
      TEXT, 'сообщение'
 
           Об'яснение. Отображается текст сообщения. Это  сообще-
 
      ние должно все само пояснять.
 
           Действие оператора. Нет.
 
 
      TOPLINETRUNC, CALCULATED NEW FIRST LINE 'целое', CHANGED
 
                    TO 1
 
           Об'яснение. Менялось окно, и  при  этом  новая  первая
 
      строка оказалась меньше 1, TPU обрезал ее до 1.
 


                                - 51 -
 
                          00152-01 34 04-2
 
 
           Действие оператора. Нет или заново выполнить запрос  к
 
      встроенной процедуре ADJUST_WINDOW с другими аргументами.
 
 
 
           3.3. Предупреждающие сообщения
 
 
 
      BADBUFWRITE, ERROR OCCURRED WRITING BUFFER 'имя_буфера'
 
           Об'яснение. Произошла  ошибка  ввода-вывода  во  время
 
      создания файла из содержимого буфера. Это может быть вызва-
 
      но ошибкой операционной системы или СУД-32. Пояснение,  что
 
      же произошло, должно быть отображено вместе с этим  сообще-
 
      нием. Создание файла прекращено в точке появления ошибки.
 
           Действие оператора. Устранить ошибку и повторить  опе-
 
      рацию.
 
 
      BADFIRSTLINE, FIRST LINE - 'целое', MUST BE BETWEEN 'целое'
 
                    AND 'целое'
 
           Об'яснение. В качестве первого аргумента для  встроен-
 
      ной процедуры CREATE_WINDOW была  указана  строка,  которая
 
      выходит за пределы экрана терминала.
 
           Действие оператора. Подобрать допустимое значение  для
 
      первой строки (между 1  и  максимальным  размером  страницы
 
      экрана) и заново ввести команду.
 
 
      BADMARGINS, MARGINS SPECIFIED INCORRECTLY
 
           Об'яснение.  Переданные  в  процедуры  FILL  или   SET
 
      (MARGINS,...) значения отступов некорректны.  Левый  отступ
 
      должен быть меньше, чем правый отступ и  больше  0.  Правый
 
      отступ должен быть меньше или равен  максимальному  размеру
 
      записи в буфере.
 
           Действие оператора. Исправить спецификации отступов  и
 
      повторить операцию.


                                - 52 -
 
                          00152-01 34 04-2
 
 
      BADREQUEST, REQUEST, 'имя', IS NOT UNDERSTOOD
 
           Об'яснение. Тип информации,  затребованной  с  помощью
 
      встроенной процедуры GET_INFO, непонятен или  не  поддержи-
 
      вается для данного типа данных.
 
           Действие оператора. Ввести  заново  правильную  строку
 
      запроса для типа данных первого параметра.
 
 
      BADWINDADJUST, ATTEMPT TO MAKE WINDOW LESS THAN 1 LINE
 
                     LONG, NO ADJUSTMENT
 
           Об'яснение. Попытка использовать встроенную  процедуру
 
      ADJUST_WINDOW для создания  окна,  размер  которого  меньше
 
      одной строки экрана терминала.
 
           Действие оператора. Проверить аргументы и заново ввес-
 
      ти значения, которые приведут к  созданию  окна  длиной  не
 
      менее одной строки, если в этом окне нет строки  состояния,
 
      или не менее двух строк, если в окне есть строка состояния.
 
 
      BADWINDLEN, WINDOW LENGTH = 'целое', MUST BE BETWEEN
 
                  'целое' AND 'целое'
 
           Об'яснение.  Указан  аргумент,  задающий   длину   для
 
      встроеной процедуры CREATE_WINDOW, который выходит за физи-
 
      ческий размер экрана.
 
           Действие оператора. Использовать допустимые  аргументы
 
      и ввести заново команду.
 
 
      BEGOFBUF, ATTEMPT TO MOVE PAST THE BEGINNING OF BUFFER
 
                'имя_буфера'
 
           Об'яснение. Попытка переместить текущую позицию редак-
 
      тирования назад за первый символ в буфере.  TPU  устанавли-
 
      вает текущую позицию  редактирования  на  первый  символ  в
 
      буфере.
 


                                - 53 -
 
                          00152-01 34 04-2
 
 
           Действие оператора. Остановить  перемещение  к  началу
 
      буфера.
 
 
      CANCELQUIT, QUIT CANCELLED BY REQUEST
 
           Об'яснение. Выполнение встроенной процедуры QUIT  было
 
      остановлено пользователем ответом NO на вопрос REALLYQUIT.
 
           Действие оператора. Нет.
 
 
      COMPILEFAIL, COMPILATION ABORTED AT LINE 'целое'
 
           Об'яснение. Существует синтаксическая ошибка  в  прог-
 
      рамме, которую пытались компилировать. Компиляция  преждев-
 
      ременно завершена.
 
           Действие оператора. Исправить синтаксическую ошибку  и
 
      заново запустить компиляцию.
 
 
      CREATEFAIL, UNABLE TO ACTIVATE SUBPROCESS
 
           Об'яснение.   Обращение   к    встроенной    процедуре
 
      CREATE_PROCESS потерпело неудачу, и подпроцесс не был запу-
 
      щен.
 
           Действие оператора. Заново создать подпроцесс и,  если
 
      опять постигнет неудача, проверить свои квоты ASTLM,  PRCLM
 
      или BYTLM.
 
 
      DELETEFAIL, UNABLE TO TERMINATE SUBPROCESS
 
           Об'ясненние. Обращение к  процедуре  DELETE  потерпело
 
      неудачу, и подпроцесс не был завершен.
 
           Действие оператора. Нет.
 
 
      DUPBUFNAME, BUFFER 'имя' ALREADY EXISTS
 
           Об'яснение. Первый аргумент для  встроенной  процедуры
 
      CREATе_BUFFER должен быть уникальной строкой. Указанное имя
 
      уже существует.
 


                                - 54 -
 
                          00152-01 34 04-2
 
 
           Действие оператора. Заново  выдать  команду  с  другой
 
      строкой в качестве первого параметра.
 
 
      ENDOFBUF, ATTEMPT TO MOVE PAST THE END OF BUFFER
 
                'имя_буфера'
 
           Об'яснение. Попытка переместить текущую позицию редак-
 
      тирования за последний символ в буфере. TPU делает  текущей
 
      позицией редактирования маркер конца буфера.
 
           Действие оператора.  Прекратить  перемещение  к  концу
 
      буфера.
 
 
      EXECUTEFAIL, EXECUTION ABORTED AT LINE 'целое'
 
           Об'яснение. При попытке выполнить свою программу обна-
 
      ружилась ошибка; программа прекращает свою работу  преждев-
 
      ременно.
 
           Действие оператора. Нет.
 
 
      EXITFAIL, ATTEMPT TO EXIT WAS UNSUCCESSFUL
 
           Об'яснение.  Ошибка  возникла  во   время   выполнения
 
      встроенной процедуры EXIT. Выход не был нормально завершен.
 
      Это обычно происходит при наличии проблем при записи  моди-
 
      фицированных буферов.
 
           Действие оператора. Разрешить проблему, которая вызва-
 
      ла остановку выполнения процедуры  EXIT,  и  заново  выдать
 
      команду EXIT.
 
 
      FACTOOLONG, FACILITY NAME, 'имя', EXCEEDS  MAXIMUM  LENGTH
 
                  'целое'
 
           Об'яснение. Имя средства, которое  пытались  использо-
 
      вать, имеет длину больше максимально допустимой.
 
           Действие оператора. Использовать более короткое имя.
 


                                - 55 -
 
                          00152-01 34 04-2
 
 
      FLAGTRUNC, VALUE OF MESSAGE FLAGS  EXCEEDS  MAXIMUM  VALUE
 
                 15, TRUNCATED
 
           Об'яснение. Значение флагов сообщений должно  быть  не
 
      больше 15. Процедура для записи сообщений использует  толь-
 
      ко 4 младших бита этого значения.
 
           Действие оператора. Задать допустимые значения  проце-
 
      дуре SET (MESSAGE_FLAGS,...).
 
 
      INVBUFDELETE, CANNOT DELETE A PERMANENT BUFFER
 
           Об'яснение. Попытка удалить буфер, который  с  помощью
 
      процедуры SET установлен как постоянный.
 
           Действие оператора. Нет.
 
 
      INVFAOPARAM, PARAMETER 'целое' MUST BE STRING OR INTEGER
 
           Об'яснение. Для  встроенной  процедуры  FAO  допустимы
 
      только строковые и целочисленные аргументы.
 
           Действие оператора.  Изменить  обращение  к  процедуре
 
      FAO, чтобы в нем были только строки или целые числа.
 
 
      INVTABSPEC, TABS SPECIFICATION INCORRECT, NOT CHANGED
 
           Об'яснение. Использован недопустимый аргумент встроен-
 
      ной процедуры SET (TAB_STOPS). Необходимо  указывать  целое
 
      значение между 1 и 65535 или строку, содержащую только про-
 
      белы и числа. Если задана строка, в которой числа  упорядо-
 
      чены по возростанию, будет обеспечена нормальная ситуация.
 
           Действие  оператора.  Исправить  аргументы  встроенной
 
      процедуры SET (TAB_STOPS).
 
 
      LINETOOLONG, LINE IS MAXIMUM LENGTH, CANNOT ADD TEXT TO IT
 
           Об'яснение. Строка в текстовом буфере уже имеет макси-
 
      мально допустимую длину.
 
           Действие оператора. Использовать встроенную  процедуру


                                - 56 -
 
                          00152-01 34 04-2
 
 
      SHOW, чтобы определить максимальную длину, и сделать строку
 
      короче.
 
 
      MAXMAPPEDBUF, A SINGLE BUFFER CAN BE MAPPED  TO  AT  MOST
 
                    'количество' WINDOW(S)
 
           Об'яснение. Попытка отобразить окно в  буфер,  который
 
      уже имеет максимально возможное число окон, отображенных  в
 
      него.
 
           Действие оператора. Отобразить окно на другой буфер.
 
 
      MAXVALUE, MAXIMUM VALUE IS 'целое'
 
           Об'яснение. Значение использованного аргумента  превы-
 
      шает максимально допустимое значение.
 
           Действие оператора.  Использовать  аргумент,  значение
 
      которого лежит в допустимых границах.
 
 
      MINVALUE, MINIMUM VALUE IS 'целое'
 
           Об'яснение. Значение использованного аргумента  меньше
 
      минимально допустимого значения.
 
           Действие оператора.  Использовать  аргумент,  значение
 
      которого лежит в допустимых границах.
 
 
      MULTIPLENAMES, THERE IS MORE THAN ONE  NAME  MATCHING, ALL
 
                     ARE RETURNED
 
           Об'яснение.  Встроенная  процедура  EXPAND_NAME  нашла
 
      более чем одно имя, подходящее данной строке, и  возвращает
 
      строку, являющуюся конкатенацией этих имен.
 
           Действие оператора. Нет.
 
 
      MUSTBEONE, STRING MUST BE 1 CHARACTER LONG
 
           Об'яснение. Ключевое имя  должно  состоять  из  одного
 
      символа.
 


                                - 57 -
 
                          00152-01 34 04-2
 
 
           Действие оператора. Ввести строку из одного символа.
 
 
      NOCOPYBUF, CANNOT COPY A BUFFER TO ITSELF
 
           Об'яснение. Попытка копировать буфер, находясь в  нем.
 
      Если позволить эту операцию, получится бесконечный цикл.
 
           Действие оператора. Переместиться в другой буфер перед
 
      началом операции копирования.
 
 
      NOCURRENTBUF, NO BUFFER HAS BEEN SELECTED AS DEFAULT
 
           Об'яснение. Пытались вводить  текст  или  использовали
 
      какую-то встроенную процедуру, которая модифицирует текущий
 
      буфер, не находясь ни в одном буфере. Это  может  произойти
 
      только тогда, когда ни один буфер не создан.
 
           Действие оператора. Установить некоторый буфер текущим
 
      путем перехода и размещения в нем  или  связкой  некоторого
 
      буфера с окном и отображением этого окна на экран.
 
 
      NODEFINITION, KEY 'имя_ключа' CURRENTLY HAS NO DEFINITION
 
           Об'яснение. В TPU нет определения для клавиши, которую
 
      нажали.
 
           Действие оператора. Нет  или  использовать  встроенную
 
      процедуру DEFINE_KEY для привязки какой-то функции  к  этой
 
      клавише.
 
 
      NOEOBSTR, CANNOT RETURN A STRING AT END OF BUFFER
 
           Об'яснение.  Встроенные   процедуры   CURRENT_LINE   и
 
      CURRENT_CHARACTER будут возвращать нулевую строку при пози-
 
      ционировании на EOB. Это предупреждающее  сообщение  позво-
 
      ляет отличать данный случай  от  того,  когда  пользователь
 
      находится в конце строки.
 
           Действие оператора. Обработать  ошибку  и/или  продол-
 
      жать.


                                - 58 -
 
                          00152-01 34 04-2
 
 
      NOJOURNAL, EDITING SESSION IS NOT JOURNALED
 
           Об'яснение. TPU начал сеанс редактирования без  прото-
 
      колирования.
 
           Действие оператора. Чтобы имело  место  протоколирова-
 
      ние,   необходимо   использовать    встроенную    процедуру
 
      JOURNAL_OPEN.
 
 
      NONAMES, THERE ARE NO NAMES MATCHING THE ONE REGUESTED
 
           Об'яснение. Встроенная процедура EXPAND_NAME не смогла
 
      найти ни одного имени, подходящего для запроса  пользовате-
 
      ля.
 
           Действие оператора. Нет.
 
 
      NONEXISTBUF, BUFFER 'имя' DOES NOT EXIST
 
           Об'яснение. Буфер, который пытались  использовать,  не
 
      был создан.
 
           Действие оператора.  Использовать  существующий  буфер
 
      или создать новый.
 
 
      NOPARENT, THERE  IS  NO  PARENT  PROCESS  TO  ATTACH TO AT
 
                LINE 'целое'
 
           Об'яснение. Текущий процесс является процессом  самого
 
      высокого уровня. Нет процесса-отца.
 
           Действие оператора. Присоединение недопустимо в данном
 
      контексте.
 
 
      NOPROCESS, NOSUBPROCESS TO INTERACT WITH
 
           Об'яснение. Пытались получить  или  послать  данные  в
 
      подпроцесс, который не существует.
 
           Действие оператора. Заново создать подпроцесс.
 
 
      NOSELECT, NO SELECT ACTIVE
 


                                - 59 -
 
                          00152-01 34 04-2
 
 
           Об'яснение. Пытались создать SELECT_RANGE до обращения
 
      к SELECT.
 
           Действие оператора. Начать выбор запросом к встроенной
 
      процедуре SELECT.
 
 
      NOSENDBUF, CANNOT  SEND  A  BUFFER  TO  A  PROCESS  USING
 
                 THE BUFFER
 
           Об'яснение. Пытались послать некоторый  буфер  в  про-
 
      цесс, используя этот буфер в качестве выходного  для  этого
 
      процесса. Может привести к бесконечному циклу.
 
           Действие оператора. Скопировать или переместить данные
 
      в другой буфер и послать этот новый буфер в процесс.
 
 
      NOSHOWBUF, VARIABLE SHOW_BUFFER DOES NOT EXIST OR IS NOT A
 
                 BUFFER
 
           Об'яснение. Встроенная  процедура  SHOW  предполагает,
 
      что SHOW_BUFFER представляет собой переменную,  ссылающуюся
 
      на некоторый буфер.
 
           Действие оператора. Создать переменную  SHOW_BUFFER  и
 
      связать ее с некоторым буфером до повторного запроса SHOW.
 
 
      NOTDEFINABLE, THAT KEY IS NOT DEFINABLE
 
           Об'яснение. Аргумент, переданный процедуре DEFINE_KEY,
 
      не является допустимой ссылкой на клавишу.
 
           Действие оператора. Использовать другое  значение  для
 
      этой клавиши.
 
 
      NOTLEARNING, YOU HAVE NOT BEGUN A LEARN SEQUENCE
 
           Об'яснение.   Была   запущена   встроенная   процедура
 
      LEARN_END без предшествующей ей процедуры LEARN_BEGIN.
 
           Действие  оператора.  Необходимо  запустить  обучающую
 
      последовательность до сохранения нажатых клавиш.


                                - 60 -
 
                          00152-01 34 04-2
 
 
      NOTONSCREEN, TEXT  CANNOT BE  SCROLLED UNLESS WINDOW IS ON
 
                   SCREEN
 
           Об'яснение. Пытались использовать встроенную процедуру
 
      SCROLL для окна, которое либо не отображено на экран,  либо
 
      полностью закрыто другими окнами.
 
           Действие оператора. Отобразить  окно  на  экран  перед
 
      использованием встроенной процедуры SCROLL.
 
 
      NOTSAMENBUF, THE MARKERS ARE NOT IN THE SAME BUFFER
 
           Об'яснение.   Задали    для    встроенной    процедуры
 
      CREATE_RANGE маркеры, которые не находятся в одном  буфере.
 
      Диапазон не может соединять буфера.
 
           Действие оператора. Создать диапазон  с  маркерами  из
 
      одного буфера.
 
 
      ONELEARN, CANNOT START A LEARN SEQUENсE WHILE ONE IS ACTIVE
 
           Об'яснение. В каждый момент времени может  создаваться
 
      только одна обучающая последовательность.
 
           Действие оператора. Завершить текущую обучающую после-
 
      довательность перед началом новой.
 
 
      ОNESELECT, SELECT ALREADY ACTIVE, MAXIMUM 1 PER BUFFER
 
           Об'яснение. Использовали встроенную процедуру SELECT в
 
      то время, когда выбор уже был  активизирован  для  текущего
 
      буфера.
 
           Действие оператора. Установить предыдущий маркер выбо-
 
      ра в 0 или удалить его.
 
 
      PARSEFAIL, ERROR PARSING 'спецификация_ файла'
 
           Об'яснение. СУД-32 обнаружила ошибку во время  разбора
 
      спецификации файла. За  этим  сообщением  должно  следовать
 
      сообщение СУД-32, поясняющее причину ошибки.


                                - 61 -
 
                          00152-01 34 04-2
 
 
           Действие оператора. Исправить ошибку, пользуясь  сооб-
 
      щением СУД-32.
 
 
      RECURLEARN, THE KEY DEFINED CANNOT  BE  PART  OF THE LEARN
 
                  SEQUENCE
 
           Об'яснение.    Определение     клавиши,     переданное
 
      DEFINE_KEY, было использовано как часть обучающей  последо-
 
      вательности. Это может  привести  к  рекурсивному  действию
 
      обучающей  последовательности,  и  эта   последовательность
 
      зациклится. Следовательно,  определение  клавиши  не  может
 
      быть использовано в данном контексте.
 
           Действие оператора. Назначить обучающую последователь-
 
      ность другой клавише.
 
 
      REPLAYFAIL, AN INCONSISTENCY HAS BEEN DISCOVERED,
 
                  HALTING EXECUTION
 
           Об'яснение.  Выполнение  обучающей  последовательности
 
      остановлено. Сохраненная последовательность нажатых  клавиш
 
      несовместима с текущими действиями. Вероятно, это произошло
 
      из-за того, что клавиши имели разные определения  в  момент
 
      создания и в момент использования.
 
           Действие оператора. Нет или, если есть подозрение, что
 
      эта обучающая последовательность некорректно изменила часть
 
      текста, проверить, какие  изменения  произвела  выполненная
 
      часть последовательности.
 
 
      REPLAYWARNING, AN INCONSISTENCY HAS BEEN DISCOVERED,
 
                     CONTINUING EXECUTION
 
           Об'яснение. Во время выполнения  обучающей  последова-
 
      тельности было  обнаружено  несоответствие  в  начальных  и
 
      текущих действиях. Можно продолжить выполнение, но  резуль-
 


                                - 62 -
 
                          00152-01 34 04-2
 
 
      таты могут быть не те,  которые  предполагаются.  Вероятно,
 
      это произошло из-за того, что клавиши имели разные  опреде-
 
      ления, когда  создавалась  обучающая  последовательность  и
 
      когда они использовались.
 
           Действие оператора. Нет или, если можно  предположить,
 
      что эта обучающая последовательность  не  закончилась  кор-
 
      ректно, проверить текст, на который подействовала эта  обу-
 
      чающая последовательность.
 
 
      SEARCHFAIL, ERROR SEARсHING 'спецификация_файла'
 
           Об'яснение. Указанный файл не может быть найден.  Сле-
 
      дующее дальше сообщение пояснит, почему это произошло.
 
           Действие оператора. Предпринять  действия,  основанные
 
      на причинах этой ошибки.
 
 
      SELRANGEZERO, SELECT RANGE HAS 0 LENGTH
 
           Об'яснение.    Использована    встроенная    процедура
 
      SELECT_RANGE, но нет выбранных символов.
 
           Действие оператора. Нет.
 
 
      SENDFAIL, UNABLE TO SEND TO SUBPROCESS
 
           Об'яснение. Произошла ошибка  при  записи  в  почтовый
 
      ящик, в который поступает входная информация для подпроцес-
 
      са.
 
           Действие оператора. Заново создать подпроцесс.
 
 
      STRNOTFOUND, STRING NOT FOUND
 
           Об'яснение. Неудачный поиск простой строки или  шабло-
 
      на.
 
           Действие оператора. Нет.
 
 
      TRUNCATE, LINE TRUCATED TO 'количество' CHARACTERS
 


                                - 63 -
 
                          00152-01 34 04-2
 
 
           Об'яснение. Пытались добавить текст к некоторой строке
 
      и это привело к тому, что длина строки превысила максималь-
 
      но допустимую. Добавляемый текст усекается  таким  образом,
 
      чтобы строки остались в допустимых пределах.
 
           Действие оператора. Нет.
 
 
      WINDNOTMAPPED, THE WINDOW IS NOT MAPPED TO A BUFFER
 
           Об'яснение. Пытались манипулировать окном, которое  не
 
      находится на экране.
 
           Действие оператора. Использовать встроенную  процедуру
 
      MAP, чтобы связать это окно с буфером на экране.
 
 
      WINDNOTVIS, BUILT-IN CANNOT OPERATE ON AN INVISIBLE WINDOW
 
           Об'яснение.  Встроенная  процедура,  которую  пытаются
 
      использовать (например, POSITION), может работать только  с
 
      видимыми окнами. Окно, использованное как аргумент, в  нас-
 
      тоящий момент полностью закрыто другими окнами.
 
           Действие оператора. Нет.
 
 
 
           3.4. Сообщения об ошибках
 
 
 
      AMBIGNAME, VARIABLE 'имя' CANNOT BE A  PROCEDURE  AT  LINE
 
                 'целое'
 
           Об'яснение.  Некоторое   время   назад   идентификатор
 
      использован как имя переменной, а сейчас попытались исполь-
 
      зовать тот же самый идентификатор как имя процедуры.
 
           Действие оператора. Использовать другое имя процедуры.
 
 
      ARGMISMATCH, DATA TYPE OF FIRST ARGUMENT UNSUPPORTED FOR
 
                   BUILT-IN
 
           Об'яснение. Обратились к встроенной процедуре и задали
 


                                - 64 -
 
                          00152-01 34 04-2
 
 
      в качестве первого аргумента элемент, тип  данных  которого
 
      не поддерживается в этой процедуре.
 
           Действие  оператора.  Скорректировать  типы  данных  в
 
      обращении к этой процедуре.
 
 
      BADASSIGN, TARGET OF THE ASSIGNMENT AT LINE 'целое' CANNOT
 
                 BE A FUNCTION/KEYWORD
 
           Об'яснение. В левой части любого оператора  присваива-
 
      ния должна быть переменная. Там не может быть имени  проце-
 
      дуры или ключевого слова.
 
           Действие оператора. Использовать другое имя переменной
 
      слева от оператора присваивания.
 
 
      BADCASE, UNRECOGNIZED CASE CONSTANT AT LINE 'целое'
 
           Об'яснение. Константами в операторе  CASE  могут  быть
 
      только целые числа, ключевые слова или односимвольные стро-
 
      ки.
 
           Действие оператора. Проверить метки оператора CASE или
 
      граничные значения оператора  FROM...TO,  чтобы  убедиться,
 
      что константы удовлетворяют этим правилам.
 
 
      BADCASELIMIT, CASE CONSTANT OUTSIDE OF CASE LIMITS AT LINE
 
                    'целое'
 
           Об'яснение. Константа в операторе CASE ,  используемая
 
      как метка варианта (INSIDE [...]), не попадает в  диапазон,
 
      заданный ограничителями FROM...TO.
 
           Действие оператора. Изменить ограничения  в  операторе
 
      CASE или скорректировать метки варианта и затем заново  его
 
      скомпилировать.
 
 
      BADCHAR, UNRECOGNIZED CHARACTER IN INPUT ON LINE 'целое'
 
           Об'яснение. Остановлен  процесс  компиляции  программы


                                - 65 -
 
                          00152-01 34 04-2
 
 
      пользователя, т.к. в ней обнаружены  управляющие  и  другие
 
      символы, которые не были распознаны.
 
           Действие оператора. Удалить нераспознанные  символы  и
 
      заново запустить компиляцию.
 
 
      BADDELETE, CANNOT DELETE STATIC STRING AT LINE 'целое'
 
           Об'яснение. Пытались удалить (модифицировать)  строко-
 
      вую константу, которая была передана  процедуре  как  аргу-
 
      мент.
 
           Действие оператора.  Проверить  программу  на  наличие
 
      этой ошибки и удалить оператор, вызывающий эту ошибку.
 
 
      BADEXITIF , EXITIF OCCURS OUTSIDE OF A LOOP AT LINE 'целое'
 
           Об'яснение. Оператор EXITIF должен располAгаться между
 
      операторами LOOP и ENDLOOP.
 
           Действие оператора. Удалить оператор  EXITIF,  который
 
      не удовлетворяет этому правилу.
 
 
      BADIF, IF STATEMENT CONTAINS AN ASSIGNMENT STATEMENT AT
 
             LINE 'целое'
 
           Об'яснение. Операторы IF должны содержать только логи-
 
      ческие операторы.  С  большой  вероятностью  это  сообщение
 
      появляется тогда, когда вместо "X=Y" использовали "X:=Y"  в
 
      части логического сравнения в операторе IF.
 
           Действие оператора. Изменить ":=" на "=".
 
 
      BADJOUFILE, RECOVERY TERMINATED DUE TO ERROR IN JOURNAL
 
                  FILE ACCESS
 
           Об'яснение. Операция восстановления была  остановлена,
 
      т.к. нет доступа к журнальному файлу.
 
           Действие оператора. Устранить ошибку  доступа  к  жур-
 
      нальному файлу и заново запустить операцию восстановления.


                                - 66 -
 
                          00152-01 34 04-2
 
 
      BADKEY, 'ключевое_слово' IS AN INVALID KEYWORD
 
           Об'яснение. Для встроенной процедуры указано  недопус-
 
      тимое ключевое слово в качестве параметра.
 
           Действие оператора. Исправить оператор и выполнить его
 
      заново.
 
 
      BADPROCNAME, VARIABLE USED AS A PROCEDURE AT LINE 'целое'
 
           Об'яснение. Имя переменной было использовано в  опера-
 
      торе PROCEDURE или в запросе к процедуре в виде имя(...).
 
           Действие оператора. Изменить имя процедуры.
 
 
      BADPROG, PROCEDURE DEFINITIONS MUST PRECEDE STATEMENTS IN
 
               A PROGRAM
 
           Об'яснение. В любой программе на языке TPU все опреде-
 
      ления процедур должны появляться до выполняемых операторов,
 
      расположенных вне процедур.
 
           Действие оператора. Откорректировать программу в соот-
 
      ветствии с установленными правилами.
 
 
      BADPROGDELETE, CANNOT DELETE CURRENT PROGRAM AT LINE 'це-
 
                     лое'
 
           Об'яснение. Текущая активная программа  пыталась  уда-
 
      лить саму себя.
 
           Действие оператора. Не  использовать  оператор  DELETE
 
      (MY_PROGRAM) внутри программы MY_PROGRAM.
 
 
      BADRETURN, RETURN OCCURS OUTSIDE OF A PROCEDURE AT LINE
 
                 'целое'
 
           Об'яснение. Оператор RETURN должен быть внутри  границ
 
      PROCEDURE... ENDPROCЕDURE.
 
           Действие оператора. Удалить операторы RETURN,  которые
 
      не удовлетворяют этому правилу.


                                - 67 -
 
                          00152-01 34 04-2
 
 
      BADUSERDESC, DESCRIPTOR FROM USER ROUTINE INVALID OR MEMORY
 
                   INACCESSIBLE
 
           Об'яснение.    Программа,    вызванная     посредством
 
      CALL_USER, некорректно заполняет  возвращаемый  дескриптор.
 
      Он либо недопустимый в TPU, либо отсылает к памяти, к кото-
 
      рой нет доступа для данного режима доступа.
 
           Действие  оператора.  Обратиться  к  документации   по
 
      использованию дескрипторов.
 
 
      BADVаLUE, INTEGER VALUE 'целое' IS  OUTSIDE  OF  SPECIFIED
 
                LIMITS
 
           Об'яснение. Введенный аргумент вне допустимых границ.
 
           Действие оператора. Ввести допустимый аргумент.
 
 
      CALLOVER, STACK OVERFLOW AT LINE 'целое'
 
           Об'яснение. Вложенный вызов процедуры вызвал  превыше-
 
      ние максимальной глубины вложенности, которая равна 100.
 
           Действие оператора. Переписать программу, чтобы глуби-
 
      на вложенности была меньше 100.
 
 
      CASETOOLARGE, CASE LIMITS DISTANCE TOO LARGE AT LINE 'це-
 
                    лое'
 
           Об'яснение.  В  операторе   CASE   границы,   заданные
 
      FROM...TO, превысили максимально допустимое число.
 
           Действие оператора. Разбить оператор CASE на несколько
 
      таких же операторов, но с допустимыми диапазонами.
 
 
      CLOSEIN, ERROR CLOSING INPUT FILE 'спецификация_файла'
 
           Об'яснение. В СУД-32 произошла ошибка закрытия указан-
 
      ного входного файла. Это сообщение  сопровождается  сообще-
 
      нием СУД-32, которое поясняет причину этой ошибки.
 
           Действие оператора. Предпринять действия,  основываясь


                                - 68 -
 
                          00152-01 34 04-2
 
 
      на сообщении СУД-32.
 
 
      CLOSEOUT, ERROR CLOSING OUTPUT FILE 'спецификация_файла'
 
           Об'яснение. В СУД-32 произошла ошибка во время  закры-
 
      тия указанного выходного файла. Это сообшение сопровождает-
 
      ся сообщением СУД-32, которое поясняет причину этой ошибки.
 
           Действие оператора. Предпринять действия,  основываясь
 
      на этом сообщении СУД-32.
 
 
      CONTROLC, ABORTED BY CONTROL C AT LINE 'число'
 
           Об'яснение. Текущая выполняемая программа  была  оста-
 
      новлена из-за того, что пользователь ввел (нажал) CTRL/C.
 
           Действие оператора. Нет или  выйти  из  ТРU  и  заново
 
      начать сеанс работы, если есть протокол.
 
 
      DIVBYZERO, DIVIDE BY ZERO
 
           Об'яснение. Деление на ноль запрещено.
 
           Действие оператора. Нет или откорректировать программу
 
      пользователя.
 
 
      FILECONVERTED, FILE FORMAT IS BEING CONVERTED TO SUPPORTED
 
                     TYPE
 
           Об'яснение. В буфер произведена запись из файла, кото-
 
      рый имеет нестандартные атрибуты.  Выходной  файл,  который
 
      создается, не будет  иметь  атрибутов  входного  файла,  но
 
      будет создан как VARIABLE с CR-атрибутами записи.
 
           Действие оператора. Нет.
 
 
      GETMEM, MEMORY ALLOCATION FAILURе
 
           Об'яснение. TPU пытается  выделить  память  для  своих
 
      структур данных, но пользователь не имеет свободной  памяти
 
      в левой  части  своей  области.  Это  может  произойти  при
 


                                - 69 -
 
                          00152-01 34 04-2
 
 
      использовании очень сложной среды редактирования.
 
           Действие оператора. Можно увеличить свою квоту в файле
 
      учета страниц и/или SYSGEN-параметр  VIRTUALPAGECNT.  Также
 
      можно попытаться удалить строки, диапазоны, маркеры, окна и
 
      буфера, которые не  используются,  или  можно  запросить  у
 
      администратора системы увеличение доступной памяти.
 
 
      INVIOCODE, INVALID OPERATION CODE PASSED TO TPU$FILEIO
 
           Об'яснение. Программе, выполняющей файловую операцию и
 
      поддерживаемой TPU, был  послан  недопустимый  запрос.  Это
 
      может произойти только тогда, когда используется вызываемый
 
      интерфейс и делается ссылка на программу TPU$FILEIO.
 
           Действие  оператора.  Если   используется   вызываемый
 
      интерфейс, то  откорректировать  свою  программу.  Если  не
 
      используется вызываемый интерфейс, то имеет место ошибка  в
 
      программном обеспечении.
 
 
      INVPARAM, PARAMETеR 'число' AT LINE 'число' ILLEGAL,
 
                EXPECTED 'тип' ACTUAL 'тип'
 
           Об'яснение. Некоторая встроенная процедура была вызва-
 
      на с недопустимым типом данных  в  качестве  одного  из  ее
 
      параметров.
 
           Действие оператора. Указать допустимый тип данных.
 
 
      KEYWORDPARAM, RESERVED WORD NOT APPROPRIATE IN THE CONTEXT
 
           Об'яснение. Ключевое слово или имя встроенной процеду-
 
      ры было использовано как параметр.
 
           Действие оператора. Изменить параметр и заново скомпи-
 
      лировать.
 
 
      MISSINGQUOTE, MISSING QUOTE ON LINE 'целое'
 
           Об'яснение. В программе в указанной строке есть откры-


                                - 70 -
 
                          00152-01 34 04-2
 
 
      вающая кавычка, а нет закрывающей.
 
           Действие оператора. Добавить кавычку и заново  скомпи-
 
      лировать.
 
 
      MIXEDTYPES, EXPRESSION INVOLVES MIXED DATA TYPES
 
           Об'яснение. Использован оператор с операндами  разного
 
      типа.
 
           Действие  оператора.  Проверить  тип  данных   каждого
 
      используемого операнда и убедиться, что  они  подходят  для
 
      этого оператора.
 
 
      NEEDTERMS, YOU WUST SPECIFY SOME WORD TERMINATORS FOR FILL
 
           Об'яснение. Встроенная процедура FILL требует  задания
 
      символов, которые определяют места разделения строк при  их
 
      заполнении.
 
           Действие  оператора.  Указать  строку,  содержащую  по
 
      крайней мере один ограничитель слов, который будет  исполь-
 
      зовать встроенная процедура FILL.
 
 
      NEEDTOASSIGN, BUILT-IN CALL MUST BE AN RHS OF ASSIGNMENT
 
                    STATEMENT AT LINE 'целое'
 
           Об'яснение.  Эта  встроенная  процедура   может   быть
 
      задействована только в  ситуациях,  когда  используется  ее
 
      возвращаемое значение.
 
           Действие оператора. Использовать эту встроенную проце-
 
      дуру как часть оператора присваивания или как часть выраже-
 
      ния.
 
 
      NESTERROR, NESTING LEVEL EXCEEDED AT LINE 'целое'
 
           Об'яснение. Вложенные операторы CASE, LOOP или IF пре-
 
      высили максимальный уровень вложенности, который равен 20.
 
           Действие оператора. Изменить уровень вложенности  этих


                                - 71 -
 
                          00152-01 34 04-2
 
 
      операторов на допустимый.
 
 
      NOCACHE, INSUFFICIENT VIRTUAL MEMORY TO ALLOCATE A NEW
 
               CACHE
 
           Об'яснение. Нет  достаточного  количества  памяти  для
 
      выделения ее под новый кэш.
 
           Действие оператора. Увеличить  свою  квоту  страниц  в
 
      файле счетов и/или  SYSGEN-параметр  VIRTUALPAGECNT.  Также
 
      можно попытаться удалить строки, диапазоны, маркеры, окна и
 
      буфера, которые используются, или запросить у администрато-
 
      ра системы увеличение доступной памяти.
 
 
      NOCALLUSER, COULD NOT FIND A ROUTINE FOR CALL_USER TO
 
                  INVOKE
 
           Об'яснение. Необходимо указывать подпрограмму, которую
 
      вызывает эта встроенная процедура.
 
           Действие оператора. Задать подпрограмму для встроенной
 
      процедуры CALL_USER.
 
 
      NOFILEACCESS, UNABLE TO ACCESS FILE 'имя'
 
           Об'яснение. Нет доступа к файлу, который пытались отк-
 
      рыть. Это сообщение сопровождается сообщением СУД-32, кото-
 
      рое поясняет причину ошибки.
 
           Действие оператора. Исправить ошибку, пользуясь  сооб-
 
      щением СУД-32.
 
 
      NONANSICRT, SYS$INPUT MUST BE AN ANSI CRT
 
           Об'яснение. Запущено TPU с SYS$INPUT, связанным с тер-
 
      миналом,  который  не  является  терминалом  ANSI,  или  из
 
      командной процедуры без переопределения SYS$INPUT.
 
           Действие оператора. Запустить TPU с устройства,  кото-
 
      рое поддерживается программой TPU, или  использовать  прог-


                                - 72 -
 
                          00152-01 34 04-2
 
 
      раммный  квалификатор  /NODISPLAY.  В  командной  процедуре
 
      перед вызовом  TPU  привести  в  соответствие  SYS$INPUT  и
 
      SYS$COMMAND.
 
 
      NOREDEFINE, BUILT-IN PROCEDURE 'имя' CANNOT BE REDEFINED
 
                  AT LINE 'целое'
 
           Об'яснение. Программа использует имя встроенной проце-
 
      дуры в TPU как имя процедуры пользователя. Встроенные  про-
 
      цедуры не могут быть заменены процедурами, которые написаны
 
      пользователем.
 
           Действие оператора. Дать своей процедуре имя,  которое
 
      не конфликтует с именами встроенных процедур TPU.
 
 
      OPENIN, ERROR OPENING 'входной_файл' AS INPUT
 
           Об'яснение. Файл не может быть открыт для  ввода.  Это
 
      соOбщение сопровождается сообщением СУД-32,  которое  пояс-
 
      няет причину ошибки.
 
           Действие оператора. Исправить ошибку, пользуясь  сооб-
 
      щением СУД-32.
 
 
      OPENOUT, ERROR OPENING 'выходной_файл'  AS OUTPUT
 
           Об'яснение. Файл не может быть открыт для вывода.  Это
 
      сообщение сопровождается сообщением СУД-32,  которое  пояс-
 
      няет причину ошибки.
 
           Действие оператора. Исправить ошибку, пользуясь  сооб-
 
      щением СУД-32.
 
 
      PARSEOVER, PARSER STACK OVERFLOW
 
           Об'яснение. Программа  является  слишком  сложной  для
 
      TPU.
 
           Действие оператора. Упростить программу.
 


                                - 73 -
 
                          00152-01 34 04-2
 
 
      PATOVER, PATTERN STACK OVERFLOW
 
           Об'яснение. Обрабатываемый  шаблон  содержит  активных
 
      элементов больше максимально допустимого числа (30).
 
           Действие оператора. Упростить шаблон.
 
 
      PREMATUREEOF, PREMATURE END-OF-FILE DETECTED
 
           Об'яснение. До этого момента компиляция программы  шла
 
      нормально, однако конец этой программы был обнаружен  преж-
 
      девременно,  например,  до   закрывающего   оператора   END
 
      PROCEDURE.
 
           Действие оператора. Скорректировать свою  программу  и
 
      заново ее скомпилировать.
 
 
      READERR, ERROR READING 'спецификация_входного_файла'
 
           Об'яснение. Не читается входной  файл.  Это  сообщение
 
      сопровождается сообщением СУД-32, которое поясняет  причину
 
      ошибки.
 
           Действие оператора. Исправить ошибку, пользуясь  сооб-
 
      щением СУД-32.
 
 
      RECOVERFAIL, RECOVERY TERMINATED ABNORMALLY; JOURNAL FILE
 
                   INCONSISTENCY
 
           Об'яснение. Вероятно процесс восстановления был выпол-
 
      нен на основе текстового файла, который отличается от файла
 
      в начале сеанса работы с  TPU,  или  настоящие  определения
 
      клавиш отличаются от определений в начале работы.
 
           Действие оператора. Попытаться запустить  восстановле-
 
      ние еще раз на том же типе терминала, с теми же параметрами
 
      терминала (DCL SHOW TERM), используя начальный входной файл
 
      и командные квалификаторы.
 


                                - 74 -
 
                          00152-01 34 04-2
 
 
      RESTOREFAIL, ERROR DURING RESTORE OPERATION
 
           Об'яснение. Эта ошибка  может  появиться  при  попытке
 
      восстановления секционного файла, который  вызывает  ошибку
 
      восстановления.
 
           Действие оператора. Проверить  спецификации  каталога,
 
      защиты и всех элементов в сопутствующем  сообщении  СУД-32,
 
      чтобы убедиться, что восстанавливается допустимый  секцион-
 
      ный файл.
 
 
      RMSERROR, SUD SERVICE ERROR
 
           Об'яснение. Появилась ошибка при использовании СУД-32.
 
      Это сообщение  сопровождается  сообщением  СУД-32,  которое
 
      дает дополнительную информацию о произошедшей ошибке.
 
           Действие оператора. Исправить ошибку, пользуясь  сооб-
 
      щением СУД-32.
 
 
      SAVEERROR, ERROR DURING SAVE OPERATION
 
           Об'яснение.  При  попытке  сохранить  секционный  файл
 
      произошла ошибка.
 
           Действие оператора. Проверить имя файла на  наличие  в
 
      нем синтаксических ошибок.
 
 
      STACKOVER, STACK OVERFLOW DURING COMPILATION
 
           Об'яснение. Данная программа слишком сложна для разбо-
 
      ра в TPU. Можно попытаться скомпилировать эту программу  на
 
      другом языке.
 
           Действие  оператора.  Если  компилируется   допустимая
 
      TPU-программа, то обратиться к разработчику.
 
 
      STRTOOLARGE, STRING GREATER THAN 65535 CHARACTERS AT LINE
 
                 'целое'
 
           Об'яснение.  В  операции  генерируется  строка,  длина


                                - 75 -
 
                          00152-01 34 04-2
 
 
      которой превышает 65535 символов.
 
           Действие оператора.  Использовать  выражение,  которое
 
      будет генерировать более короткую строку.
 
 
      SYNTAXERROR, SYNTAX ERROR ON LINE 'число'
 
           Об'яснение. В компилируемой программе  есть  синтакси-
 
      ческая ошибка.
 
           Действие оператора. Исправить синтаксическую ошибку  и
 
      заново скомпилировать.
 
 
      SYSERROR, SYSTEM  SERVICE ERROR
 
           Об'яснение. Появилась ошибка при использовании систем-
 
      ного сервиса операционной системы. Это сообщение  сопровож-
 
      дается сообщением, которое поясняет место и причину ошибки.
 
           Действие оператора. Исправить ошибку,  пользуясь  сис-
 
      темным сообщением.
 
 
      TOOFEW, TO FEW ARGUMENTS AT LINE 'целое'
 
           Об'яснение. Для этой  встроенной  процедуры  требуется
 
      определенноE количество параметров, а их задано меньше.
 
           Действие оператора. Заново ввести команду с  требуемым
 
      количеством параметров. Если есть затруднения, как это сде-
 
      лать, воспользоваться средством помощи.
 
 
      TOOMANY, TOO MANY ARGUMENTS AT LINE 'целое'
 
           Об'яснение. Для этой  встроенной  процедуры  требуется
 
      определенное количество параметров, а их указано больше.
 
           Действие оператора. Заново ввести команду с  требуемым
 
      количеством параметров. Если есть затруднения, как это сде-
 
      лать, можно использовать средства помощи программы TPU.
 
 
      TOOMANYPARAM, TOO MANY FORMAL PARAMETERS/LOCAL VARIABLES
 


                                - 76 -
 
                          00152-01 34 04-2
 
 
                    AT LINE 'целое'
 
           Об'яснение. Максимально разрешенное  число  формальных
 
      параметров и/или локальных переменных равно 31.
 
           Действие оператора. Уменьшить число  формальных  пара-
 
      метров или локальных переменных, чтобы их  число  лежало  в
 
      допустимом диапазоне.
 
 
      UNDEFINEDPROC, UNDEFINED PROCEDURE CALL 'имя' AT LINE 'це-
 
                     лое'
 
           Об'яснение. Вызванная процедура не имеет определения.
 
           Действие оператора. Проверить по буквам имя процедуры.
 
      Возможно, пропущена какая-то буква или добавлена лишняя.
 
 
      UNINITVAR, UNINITIALIZED VARIABLE
 
           Об'яснение. Использовалась переменная,  которая  имеет
 
      неопределенный тип данных.
 
           Действие оператора. Проверить по буквам  имя  перемен-
 
      ной. Присвоить некоторое значение этой переменной, располо-
 
      жив ее в левой части какого-либо оператора присваивания.
 
 
      UNKKEYWORD, AN UNKNOWN KEYWORD HAS BEEN USED AS AN
 
                  ARGUMENT
 
           Об'яснение. В тексте размещен  нераспознанный  элемент
 
      там, где предполагается допустимое ключевое слово.
 
           Действия оператора. Ввести команду SHOW  (KEYWORDS)  в
 
      командной строке своего интерфейса, чтобы распечатать  спи-
 
      сок допустимых ключевых слов.
 
 
      UNKOPCODE, UNKNOWN OPCODE AT LINE 'целое'
 
           Об'яснение. Внутренняя ошибка TPU.
 
           Действие оператора. Обратиться к разработчику.
 


                                - 77 -
 
                          00152-01 34 04-2
 
 
      UNKTYPE, UNKNOWN DATA TYPE AT LINE 'целое'
 
           Об'яснение. Внутренняя ошибка TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      WRITEERR, ERROR WRITING 'спецификация_выходного_файла'
 
           Об'яснение. Нельзя сделать запись в выходной файл. Это
 
      сообщение сопровождается сообщением СУД-32,  которое  пояс-
 
      няет причину ошибки.
 
           Действие оператора. Исправить ошибку, пользуясь  сооб-
 
      щением СУД-32.
 
 
 
           3.5. Сообщения о фатальных ошибках
 
 
 
      BADARGS, UNRECOGNIZED ARGUMENT TO PROCEDURE AT LINE 'це-
 
               лое'
 
           Об'яснение. Внутренняя ошибка TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      BADLOGIC, INTERNAL LOGIC ERROR DETECTED
 
           Об'яснение. Имеет место внутренняя ошибка программного
 
      обеспечения.
 
           Действие оператора. Обратиться к разработчику.
 
 
      BADREAD, READ NEXT OR READ PREV WITH CURRENT RECORD OF 0,
 
               DSCB: 'адрес'
 
           Об'яснение. Внутренняя ошибка в TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      ENDOFFILE, END OF FILE ON READ TO TERMINAL OR FILE
 
           Об'яснение. Преждевременно  встретился  признак  конца
 
      файла при чтении с входного устройства или из файла.
 
           Действие оператора. Обратиться к разработчику.


                                - 78 -
 
                          00152-01 34 04-2
 
 
      FAILURE, INTERNAL TPU FAILURE
 
           Об'яснение. Сбой внутри тPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      FREEMEM, MEMORY DEALLOCATION FAILURE
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      IDMISMATCH, SECTION NOT RESTORED, SECTION FILE MUST BE
 
                  REBUILT
 
           Об'яснение. Данная версия программы TPU несовместима с
 
      секционным файлом, к которому попытались обратиться.
 
           Действие оператора. Заново  создать  секционный  файл,
 
      запуская исходный файл с используемой версией TPU.
 
 
      INSVIRMEM, INSUFFICIENT VIRTUAL MEMORY
 
           Об'яснение.  Закончилась  неудачей  попытка  выделения
 
      дополнительной информациии под рабочее пространство.
 
           Действие оператора. Освободить пространство путем уда-
 
      ления или сброса файлов.
 
 
      INVACCESS, INVALID FILE ACCESS SPECIFIED
 
           Об'яснение. Внутренняя ошибка в TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      INVFCBDESC, DESCRIPTOR IN $FCB FOR 'адрес' IMPROPERLY
 
                  INITIALIZED
 
           Об'яснение. Внутренняя ошибка ТPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      INVITEMCODE, INVALID ITEM CODE SPECIFIED IN LIST
 
           Об'яснение. Внутренняя ошибка ТPU.
 
           Действие оператора. Обратиться к разработчику.


                                - 79 -
 
                          00152-01 34 04-2
 
 
      INVOPCODE, OPCODE IN DELAYED WORK QUEUE IS INVALID
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      NOFILEROUTINE, NO ROUTINE SPECIFIED TO PERFORM FILE I/O
 
           Об'яснение. Это сообщение возвращается из  вызываемого
 
      интерфейса посредством TPU$INITIALIZE.  Оно  показывает  на
 
      то, что не задана допустимая процедура ввода-вывода.
 
           Действие оператора. Указать процедуру ввода-вывода.
 
 
      NOSTRMEM, STRING ALLOCATION FAILURE AT LINE 'целое'
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      NOTDELETED, PURGING A RECORD NOT MARKED AS DELETED
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      NOTIMPOPCODE, OPCODE IN DELAYED WORK QUEUE NOT IMPLEMENTED
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      ONDELRECLIST, ATTEMPT TO ACCESS A RECORD ON THE DELETED
 
                    LIST
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      PROGLOST, PROGRAM LOST - SORRY
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      READQUEHEADER, ATTEMPT TO READ QUEUE HEADER OF DSCB:
 
                     'адрес'
 


                                - 80 -
 
                          00152-01 34 04-2
 
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      READZERO, READ OF RECORD ID 0, DSCB: 'адрес'
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      RECISDEL, DELETING A RECORD ALREADY MARKED AS DELETED
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      UNKNFAIL, INTERNAL TPU FAILURE, UNKNOWN REASON
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
      WRONGDATASET, RECORDS COULD NOT BE FOUND IN THE DATA SET
 
           Об'яснение. Сбой внутри TPU.
 
           Действие оператора. Обратиться к разработчику.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


                                          
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!