





      Министерство приборостроения, средств автоматизации

                      и систем управления
       




                  Операционная система МОС ВП


             ПОДСИСТЕМА ИСПОЛНИТЕЛЬНОЙ БИБЛИОТЕКИ

                   Руководство программиста


                       Лист утверждения

                   2б.00152-01 33 09-4-ЛУ

                    Представители предприятия-разработчика

                           Руководитель темы
                           Зам. директора

                           _______________ Хрущев С.Н.
                           "___"__________ 1987 г.

                           Ответственный исполнитель темы
                           Зав. отделением

                           _______________ Остапенко Г.П.
                           "___"__________ 1987 г.

                           Зав. лабораторией

                           _______________ Нестеров А.А.
                           "___"__________ 1987 г.

                           М. н. с.

                           _______________ Шмытков В.И.
                           "___"__________ 1987 г.

                           Техник

                           _______________ Чачаева Т.Н.
                           "___"__________ 1987 г.

                           Нормоконтролер

                           --------------- Скворцов В.А.
                           "___"__________ 1987 г.


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





  Утвержден


  2б.00152-01 33 09-4-ЛУ







               
    




		  Операционная система МОС ВП


             ПОДСИСТЕМА ИСПОЛНИТЕЛЬНОЙ БИБЛИОТЕКИ


		   Руководство программиста
                   



                     
		     2б.00152-01 33 09-4
               
                                  
			 Листов 398/4К
		     

                         







1K
9K
394K
395K







                             1987
                                      
 Перв.примен.

  2б.00152-01                                        Литера











  


  





                  




		  Операционная система МОС ВП         


             ПОДСИСТЕМА ИСПОЛНИТЕЛЬНОЙ БИБЛИОТЕКИ


		   Руководство программиста
                   



		       00152-01 33 09-4                     

			  Листов 394
			  
		       

                           


















                             

			     1987

  






                            - 2 -

                       00152-01 33 09-4






                           АННОТАЦИЯ




       Данный документ предназначен для программистов, разра-

  батывающих программы на языках программирования,  поддержи-

  ваемых операционной системой МОС ВП (далее  по  тексту  МОС

  ВП).

       Документ состоит из одного раздела, в котором  описаны

  процедуры исполнительной  библиотеки,  выполняющие  функции

  управления экраном. Для каждой процедуры приведены  формат,

  описание выполняемых функций, описание аргументов и примеры

  использования процедур.































                            - 3 -

                       00152-01 33 09-4






                          СОДЕРЖАНИЕ


                                                 


  1.  Процедуры управления экраном                         10


  1.1.    SMG$ADD_KEY_DEF - добавление клавишного

          определения                                      10

  1.2.    SMG$_ALLOW_ESCAPE  -   разрешение   АР2

          последовательностей                              15

  1.3.    SMG$BEGIN_DISPLAY_UPDATE   -    перевод

          дисплея в пакетный режим                         18

  1.4.    SMG$BEGIN_PASTEBOARD_UPDATE  -  перевод

          компоновочного пульта в пакетный режим           20

  1.5.    SMG$CANCEL_INPUT  -   отмена   запросов

          ввода                                            22

  1.6.    SMG$CHANGE_PBD_CHARACTERISTICS        -

          изменение характеристик  компоновочного

          пульта                                           24

  1.7.    SMG$CHANGE_RENDITION    -     изменение

          установленных       по        умолчанию

          видеопризнаков                                   29

  1.8.    SMG$CHANGE_VIRTUAL_DISPLAY -  изменение

          признаков виртуального дисплея                   35

  1.9.    SMG$CHECK_FOR_OCCLUSION   -    проверка

          виртуального дисплея на перекрытие               40

  1.10.   SMG$CONTROL_MODE - управление режимом            47



                            - 4 -

                       00152-01 33 09-4


  1.11.   SMG$CREATE_KEY_TABLE - создание таблицы

          для клавишных определений                        52

  1.12.   SMG$CREATE_PASTEBOARD    -     создание

          компоновочного пульта                            53

  1.13.   SMG$CREATE_VIRTUAL_DISPLAY  -  создание

          виртуального дисплея                             60

  1.14.   SMG$CREATE_VIRTUAL_KEYBOARD -  создание

          виртуальной клавиатуры                           68

  1.15.   SMG$CURSOR_COLUMN - возвращение позиции

          колонки виртуального курсора                     75

  1.16.   SMG$CURSOR_ROW  -  возвращение  позиции

          строки курсора                                   77

  1.17.   SMG$DEFINE_KEY  -  выполнение   команды

          DEFINE/KEY                                       78

  1.18.   SMG$DEL_TERM_TABLE      -      удаление

          терминальной таблицы                             80

  1.19.   SMG$DELETE_CHARS - удаление символов             82

  1.20.   SMG$DELETE_KEY_DEF      -      удаление

          клавишного определения                           88

  1.21.   SMG$DELETE_LINE -  удаление  строки  из

          виртуального дисплея                             90

  1.22.   SMG$DELETE_PASTEBOARD    -     удаление

          компоновочного пульта                            95

  1.23.   SMG$DELETE_VIRTUAL_DISPLAY  -  удаление

          виртуального дисплея                             98

  1.24.   SMG$DELETE_VIRTUAL_KEYBOARD -  удаление

          виртуальной клавиатуры                           99




                            - 5 -

                       00152-01 33 09-4


  1.25.   SMG$DISABLE_UNSOLICITED_INPUT         -

          невозможность незапрошенного ввода              101

  1.26.   SMG$DRAW_LINE - вычерчивание линии              103

  1.27.   SMG$DRAW_RECTANGLE    -    вычерчивание

          прямоугольника                                  111

  1.28.   SMG$ENABLE_UNSOLICITED_INPUT          -

          возможность незапрошенного ввода                119

  1.29.   SMG$END_DISPLAY_UPDATE - вывод  дисплея

          из пакетного режима                             121

  1.30.   SMG$END_PASTEBOARD_UPDATE    -    вывод

          компоновочного  пульта   из   пакетного

          режима                                          123

  1.31.   SMG$ERASE_CHARS - стирание символов  на

          виртуальном дисплее                             125

  1.32.   SMG$ERASE_DISPLAY      -       стирание

          виртуального дисплея                            131

  1.33.   SMG$ERASE_LINE - стирание строки                138

  1.34.   SMG$ERASE_PASTEBOARD     -     стирание

          компоновочного пульта                           144

  1.35.   SMG$FIND_CURSOR_DISPLAY     -     поиск

          дисплея, с  которым  связан  физический

          курсор                                          148

  1.36.   SMG$FLUSH_BUFFER - считывание буфера            151

  1.37.   SMG$GET_BROADCAST_MESSAGE  -  получение

          передаваемого сообщения                         152

  1.38.   SMG$GET_CHAR_AT_PHYSICAL_CURSOR       -

          возвращение  символа,  находящегося   в




                            - 6 -

                       00152-01 33 09-4


          позиции курсора                                 155

  1.39.   SMG$GET_DISPLAY_ATTR    -     получение

          дисплейных признаков                            157

  1.40.   SMG$GET_KEY_DEF - получение  клавишного

          определения                                     161

  1.41.   SMG$GET_NUMERIC_DATA    -     получение

          числовых терминальных данных                    165

  1.42.   SMG$GET_PASTEBOARD_ATTRIBUTES         -

          получение   признаков    компоновочного

          пульта                                          168

  1.43.   SMG$GET_TERM_DATA      -      получение

          терминальных данных                             172

  1.44.   SMG$HOME_CURSOR - возвращение курсора           176

  1.45.   SMG$INIT_TERM_TABLE - инициализирование

          терминальной таблицы                            179

  1.46.   SMG$INIT_TERM_TABLE_BY_TYPE           -

          инициализирование терминальной  таблицы

          посредством    типа     терминала     в

          операционной системе МОС ВП                     181

  1.47.   SMG$INSERT_CHARS - вставка символов             185

  1.48.   SMG$INSERT_LINE - вставка строки                193

  1.49.   SMG$INVALIDATE_DISPLAY    -    помечает

          дисплей как неверный                            203

  1.50.   SMG$LABEL_BORDER  -  отмечает   границы

          виртуального дисплея                            204

  1.51.   SMG$LIST_KEY_DEFS     -      считывание

          клавишных определений                           214




                            - 7 -

                       00152-01 33 09-4


  1.52.   SMG$LOAD_KEY_DEFS - загрузка  клавишных

          определений                                     219

  1.53.   SMG$MOVE_VIRTUAL_DISPLAY -  перемещение

          виртуального дисплея                            222

  1.54.   SMG$PASTE_VIRTUAL_DISPLAY             -

          прикрепление виртуального дисплея               226

  1.55.   SMG$POP_VIRTUAL_DISPLAY   -    удаление

          серии виртуальных дисплеев                      230

  1.56.   SMC$PUT_CHARS  -  запись   символов   в

          виртуальный дисплей                             232

  1.57.   SMG$PUT_CHARS_HIGHWIDE     -     запись

          символов двойной ширины и высоты                241

  1.58.   SMG$PUT_CHARS_WIDE  -  запись  символов

          двойной ширины                                  247

  1.59.   SMG$PUT_LINE - запись строки текста  на

          виртуальный дисплей.                            252

  1.60.   SMC$PUT_LINE_HIGHWIDE - запись строки с

          символами двойной высоты и ширины               261

  1.61.   SMG$PUT_LINE_WIDE  -  запись  строки  с

          символами двойной ширины                        267

  1.62.   SMG$PUT_PASTEBOARD    -    запись    на

          компоновочный  пульт  через   программу

          компоновочного пульта                           275

  1.63.   SMG$PUT_VIRTUAL_DISPLAY_ENCODED       -

          запись кодированной строки на дисплее           278

  1.64.   SMG$PUT_WITH_SCROLL - запись  текста  и

          продвижение                                     283




                            - 8 -

                       00152-01 33 09-4


  1.65.   SMG$READ_COMPOSED_LINE     -     чтение

          скомпонованной строки                           292

  1.66.   SMG$READ_FROM_DISPLAY - чтение текста с

          дисплея                                         298

  1.67.   SMG$READ_KEYSTROKE  -   чтение   одного

          символа                                         305

  1.68.   SMG$READ_STRING  -  чтение   строки   с

          виртуальной клавиатуры                          316

  1.69.   SMG$READ_VERIFY        -         чтение

          последовательности символов с проверкой         331

  1.70.   SMG$REPAINT_LINE - переписывание  серии

          строк на текущем экране                         340

  1.71.   SMG$REPAINT_SCREEN   -    переписывание

          текущего экрана                                 343

  1.72.   SMG$REPASTE_VIRTUAL_DISPLAY   -   новое

          прикрепление виртуального дисплея               347

  1.73.   SMG$RESTORE_PHYSICAL_SCREEN           -

          воспроизведение физического экрана              353

  1.74.   SMG$RETURN_CURSOR_POS   -   возвращение

          позиции виртуального курсора                    355

  1.75.   SMG$RING_BELL  -  звучание  звонка  или
                                                              
          зуммера терминала                               357

  1.76.   SMG$SAVE_PHYSICAL_SCREEN  -  сохранение

          физического экрана                              359

  1.77.   SMG$SCROLL_DISPLAY_AREA  -  перемещение

          дисплейной области                              363

  1.78.   SMG$SET_BROADCAST_TRAPPING            -




                            - 9 -

                       00152-01 33 09-4


          возможность или  невозможность  захвата

          пересылаемых сообщений                          367

  1.79.   SMG$SET_CURSOR_ABS     -     абсолютная

          установка позиции виртуального курсора          370

  1.80.   SMG$SET_CURSOR_REL   -    относительная

          установка позиции виртуального курсора          373

  1.81.   SMG$SET_DEFAULT_STATE    -    установка

          состояния, задаваемое по умолчанию              376

  1.82.   SMG$SET_DISPLAY_SCROLL_REGION         -

          создание    дисплейной     перемещаемой

          области                                         378

  1.83.   SMG$SET_KEYPAD_MODE - установка  режима

          для малой клавиатуры.                           381
                                                    
  1.84.   SMG$SET_OUT_OF_BAND_ASTS  -   установка

          AST     программы     для     обработки

          недопустимых символов                           383

  1.85.   SMG$SET_PHYSICAL_CURSOR   -   установка

          курсора на физическом экране                    387

  1.86.   SMG$SNAPSHOT     -     запись     кадра

          компоновочного пульта                           389

  1.87.   SMG$UNPASTE_VIRTUAL_DISPLAY           -

          открепление виртуального дисплея                391


      Перечень ссылочных документов                       394











                            - 9K -

                      2б.00152-01 33 09-4


          возможность или  невозможность  захвата

          пересылаемых сообщений                          367

  1.79.   SMG$SET_CURSOR_ABS     -     абсолютная

          установка позиции виртуального курсора          370

  1.80.   SMG$SET_CURSOR_REL   -    относительная

          установка позиции виртуального курсора          373

  1.81.   SMG$SET_DEFAULT_STATE    -    установка

          состояния, задаваемое по умолчанию              376

  1.82.   SMG$SET_DISPLAY_SCROLL_REGION         -

          создание    дисплейной     перемещаемой

          области                                         378

  1.83.   SMG$SET_KEYPAD_MODE - установка  режима

          для малой клавиатуры.                           381

  1.84.   SMG$SET_OUT_OF_BAND_ASTS  -   установка

          AST     программы     для     обработки

          недопустимых символов                           383

  1.85.   SMG$SET_PHYSICAL_CURSOR   -   установка
                                 
          курсора на физическом экране                    387

  1.86.   SMG$SNAPSHOT     -     запись     кадра

          компоновочного пульта                           389

  1.87.   SMG$UNPASTE_VIRTUAL_DISPLAY           -

          открепление виртуального дисплея                391


      Перечень ссылочных документов                       394К









                           - 10 -

                       00152-01 33 09-4


      1. Процедуры управления экраном





       1.1. SMG$ADD_KEY_DEF - добавление клавишного

            определения


       Процедура SMG$ADD_KEY_DEF добавляет клавишное  опреде-

  ление в таблицу клавишных определений.


       Формат:


       SMG$ADD_KEY_DEF таблица, наименование

                       [,строка состояния] [,признаки]

                       [,эквивалентная строка]

                       [,строка нового состояния]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Таблица


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки




                           - 11 -

                       00152-01 33 09-4


       Определяет клавишную таблицу,  в  которую  добавляется

  определение  клавиши.  Аргумент  таблица  является  адресом

  длинного  слова  без   знака,   содержащего   идентификатор

  клавишной таблицы.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_KEY_TABLE.


       Наименование


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Обозначает  клавишу,  значение  которой  определяется.

  Аргумент   наименование   является   адресом   дескриптора,

  указывающего   имя   клавиши.   Процедура   SMG$ADD_KEY_DEF

  изменяет строку  в  символы  верхнего  регистра  и  удаляет

  пробелы, завершающие строку.

       Разрешенные наименования клавиш представлены в  табл.9

  [1].


       Строка состояния


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Определяет значение, возвращаемое до того, когда будет




                           - 12 -

                       00152-01 33 09-4


  нажата указанная клавиша. Аргумент строка состояния являет-

  ся адресом дескриптора, указывающего на строку состояния.

       Если строка состояния определена, определение для наз-

  ваной клавиши используется только в том случае, если  теку-

  щее состояние соответствует  строке  состояния.  Если  этот

  аргумент опущен, строка состояния является пустой строкой.


       Признаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Длиннословная     битовая     маска,      определяющая

  дополнительные признаки для определения  клавиши.  Аргумент

  признаки  является  адресом  длинного  слова   без   знака,

  содержащего маску признаков. Если  аргумент  опущен,  маска

  будет нулевой.


       Разрешенные признаки описаны в следующем списке:

  SMG$V_KEY_NOECHO

       - если бит установлен, он определяет, что  эквивалент-

         ная строка не отображается,  когда  клавиша  нажата.

         Если бит чист,  эквивалентная  строка  отображается.

         Если     SMG$V_KEY_TEPMINATE     не      установлен,

         SMG$V_KEY_NOECHO игнорируется;

  SMG$V_KEY_TERMINATE

       - если бит установлен, он определяет, что при  нажатии




                           - 13 -

                       00152-01 33 09-4


         клавиши, входная строка заканчивается,  и  не  может

         быть принято больше символов. Если чист, может  быть

         принято больше символов.  Иными  словами,  установка

         этого  бита  заставляет  обрабатывать  эквивалентную

         строку, как ограничитель;

  SMG$V_KEY_LOCKSTATE

       - если установлен и если аргумент строка  нового  сос-

         тояния определен, имя состояния, определенного  пос-

         редством  указанного  аргумента,  остается   текущим

         состоянием до тех пор, пока оно  явно  не  изменится

         последующим нажатием клавиш. Если чист, имя  состоя-

         ния, определенное посредством аргумента строка ново-

         го состояния, остается действительным только до сле-

         дующего нажатия клавиши;

  SMG$V_KEY_PROTECTED

       - если установлен,  бит  определяет,  что  определение

         этой клавиши не может  быть  изменено  или  удалено.

         Если чист, определение клавиши может  быть  изменено

         или удалено.


       Остальные биты не определены и должны быть нулями.


       Эквивалентная строка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора





                           - 14 -

                       00152-01 33 09-4


       Строка символов, появляющаяся в возвращаемой строке  в

  результате нажатия клавиши. Аргумент  эквивалентная  строка

  является адресом  дескриптора,  указывающего  эквивалентную

  строку.

       Эквивалентная строка отображается, если  только  уста-

  новлено SMG$V_KEY_NOECHO. Если указанный  аргумент  опущен,

  для клавиши не определена эквивалентная строка.


       Строка нового состояния


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Содержит  имя  нового  состояния,  которое  становится

  текушим состоянием, когда указанная клавиша  нажата.  Расс-

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

  вающего строку нового состояния.

       Если данный аргумент опущен, никакого нового состояния

  не возникает. Если текущее состояние  временное  (это  если

  SMG$V_KEY_LOCKSTATE не установлен для  большинства  недавно

  нажатых клавиш), текущая строка нового состояния становится

  нулевой строкой.


       Описание.


       Процедура SMG$ADD_KEY_DEF вставляет определение клави-

  ши в таблицу клавишных  определений.  Таблица  должна  быть

  создана обращением к процедуре SMG$CREATE_KEY_TABLE.  После



                           - 15 -

                       00152-01 33 09-4


  выполнения процедуры SMG$ADD_KEY_DEF  определенная  эквива-

  лентная строка возвратится при нажатии пользователем  опре-

  деляемой клавиши.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_PREDEFREP

       - успешное завершение. Заменено  предыдущее  клавишное

         определение;

  SMG$_INVDEFATT

       - неверные признаки клавишного определения;

  SMG$_INVKTB_ID

       - неверный аргумент таблица;

  SMG$_KEYDEFPRO

       - клавишное определение защищено от изменения или уда-

         ления;

  SMG$_WRONUMARG

       - неправильное число аргументов.


       Любые  значения  состояния   возвращаются   процедурой

  LIB$COPY_DXDX.



       1.2. SMG$_ALLOW_ESCAPE  -   разрешение   АР2           

            последовательностей


       Процедура SMG$_ALLOW_ESCAPE  разрешает  синтаксический

  разбор АР2 последовательностей, которые выводятся  на  вир-

  туальный дисплей.



                           - 16 -

                       00152-01 33 09-4


       Формат:


       SMG$_ALLOW_ESCAPE дисплей, флаг


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Определяет  дисплей,  на   который   разрешен   вывод,

  содержащий   АР2   последовательности.   Аргумент   дисплей

  является адресом  длинного  слова  без  знака,  содержащего

  идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_ DISPLAY.


       Флаг


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)





                           - 17 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством значения


       Определяет, будет ли  возможен  синтаксический  разбор

  АР2  последовательности.  Аргумент  флаг  является  адресом

  длинного слова без знака. Если флаг равен 1, синтаксический

  разбор включен; если флаг равен  0,  синтаксический  разбор

  выключен.


       Описание.


       Обычно, пишущийся  на  виртуальном  дисплее  текст  не

  может   содержать   АР2   последовательностей.    Процедура

  SMG$ALLOW_ESCAPE    позволяет    АР2    последовательностям

  интерпретироваться  как  разрешенные  операции   (например,

  команды для  видеопризнаков  или  команды  позиционирования

  курсора).  Таким  образом,  если  аргумент  флаг  равен  1,

  средство  управления  экраном   пытается   интерпретировать

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

  экраном, которая выполняет эту  функцию.  Если  флаг  равен

  нулю, появляется ошибка при обнаружении АР2  последователь-

  ности. При  использовании  процедуры,  виртуальный  дисплей

  должен быть прикреплен.
                                     
       Примечание. Процедура  SMG$ALLOW_ESCAPE  предназначена

  для разрешения существующим программам со вставленными  АР2

  последовательностями   быть   преобразованными   в    SMG$.

  Процедура не может быть использована для  новых  разрабаты-

  ваемых программ.





                           - 18 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG;

       - неправильное число аргументов;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVARG

       - неверный аргумент флаг.



       1.3. SMG$BEGIN_DISPLAY_UPDATE   -    перевод

            дисплея в пакетный режим


       Процедура   SMG$BEGIN_DISPLAY_UPDATE   сохраняет   все

  выводы  на  виртуальный  дисплей  до  тех  пор,   пока   не

  встретится процедура SMG$END_DISPLAY_UPDATE.


       Формат:


       SMG$BEGIN_DISPLAY_UPDATE дисплей


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения









                           - 19 -

                       00152-01 33 09-4


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей, который переводится  в

  пакетный режим. Аргумент дисплей  является  длинным  словом

  без знака, содержащим идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Описание.


       Процедура SMG$BEGIN_DISPLAY_UPDATE позволяет сохранить

  более одного изменения  на  дисплее.  Изменения  появляются

  только после их  завершения.  Таким  образом,  пользователь

  видит изменение  дисплея  от  начального  состояния  к  его

  окончательному  состоянию,   без   рассматривания   каждого

  промежуточного состояния.

       Выход дисплея из пакетного режима осуществляется  тог-

  да,  когда  вызывается   процедура   SMG$END_DISPLAY_UPDATE

  столько раз, сколько и  процедура  SMG$BEGIN_DISPLAY_UPDATE

  для   данного   дисплея.   Средство   управления    экраном

  отслеживает   режим   работы   дисплея.   Вызовы   процедур

  SMG$BEGIN_DISPLAY_UPDATE и SMG$END_DISPLAY_UPDATE могут  не

  появляться в одном и том же модуле.



                           - 20 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_BATWAS_ON

       - успешное завершение. Дисплей  переведен  в  пакетный

         режим;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INDIS_ID

       - неверный аргумент дисплей.



       1.4. SMG$BEGIN_PASTEBOARD_UPDATE  -  перевод

            компоновочного пульта в пакетный режим


       Процедура  SMG$BEGIN_PASTEBOARD_UPDATE  сохраняет  все

  выводы  на  компоновочный  пульт  до  тех  пор,   пока   не

  встретится      соответствующий       вызов       процедуры

  SMG$END_PASTEBOARD_UPDATE.


       Формат:


       SMG$BEGIN_PASTEBOARD_UPDATE идентификатор


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения





                           - 21 -

                       00152-01 33 09-4


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет компоновочный пульт, который переводится  в

  пакетный режим.  Аргумент  идентификатор  является  адресом

  длинного  слова  без   знака,   содержащего   идентификатор

  компоновочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Описание.


       Процедура SMG$BEGIN_PASTEBOARD_UPDATE позволяет делать

  более одного изменения на компоновочном пульте, и изменения

  появляются  только  после  их  завершения.  Таким  образом,

  пользователь видит изменение компоновочного пульта  от  его

  начального   состояния   к    конечному    состоянию    без

  рассматривания каждого промежуточного состояния.

       Выход из пакетного режима осуществляется тогда,  когда

  поцедура SMG$END_PASTEBOARD_UPDATE будет вызвана столько же

  раз, сколько и  процедура  SMG$BEGIN_PASTEBOARD_UPDATE  для

  данного компоновочного пульта. Средство управления  экраном

  отслеживает   пакетный    режим    работы    для    данного

  компоновочного        пульта.        Вызовы        процедур



                           - 22 -

                       00152-01 33 09-4


  SMG$BEGIN_PASTEBOARD_UPDATE   и   SMG$END_PASTEBOARD_UPDATE

  могут не появляться в том же самом модуле.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_BATWAS_ON

       - успешное завершение. Имел место перевод  в  пакетный

         режим;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор.



       1.5. SMG$CANCEL_INPUT  -   отмена   запросов

            ввода


       Процедура SMG$CANCEL_INPUT немедленно  отменяет  любое

  считывание,      которое      исходит      от      процедур

  SMG$READ_COMPOSED_LINE, SMG$READ_KEYSTROKE, SMG$READ_STRING

  или SMG$READ_VERIFY.


       Формат:


       SMG$CANCEL_INPUT клавиатура


       Код возврата:


       Использоваие в МОС ВП: значение состояния

       Тип: длинное слово (без знака)




                           - 23 -

                       00152-01 33 09-4


       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Клавиатура


       Использоваие в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальную клавиатуру, для  которой  отме-

  няется ввод. Аргумент клавиатура является адресом  длинного

  слова без знака, содержащего идентификатор клавиатуры.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_KEYBOARD.


       Описание.


       Процедура SMG$CANCEL_INPUT вызывает немедленное завер-

  шение     операций     по      вводу      для      процедур

  SMG$READ_COMPOSED_LINE, SMG$READ_KEYSTROKE, SMG$READ_STRING

  или SMG$READ_VERIFY с терминала. В перечисленные  процедуры

  возвращается код  состояния  SS$ABORT,  когда  используется

  процедура  SMG$CANCEL_INPUT.  Если  виртуальная  клавиатура

  связана с файлом системы управления данными  СУД-32  (далее

  по тексту СУД-32), рассматриваемая процедура не  действует,

  потому что невозможно отменить  незаконченную  операцию  по

  вводу, связанную с СУД-32.




                           - 24 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_RMSNOTCAN

       - успешное завершение. Операция СУД-32 не  может  быть

         отменена;

  SMG$_INKBD_ID

       - неверный аргумент клавиатура;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.6. SMG$CHANGE_PBD_CHARACTERISTICS        -

            изменение характеристик  компоновочного

            пульта


       Процедура   SMG$CHANGE_PBD_CHARACTERISTICS   позволяет

  изменять  ширину,  высоту  и  фоновый  цвет,  связанные   с

  компоновочным пультом.


       Формат:


       SMG$CHANGE_PBD_CHARACTERISTICS идентификатор

                                     [,требуемая ширина]

                                     [,результирующая ширина]

                                     [,требуемая высота]

                                     [,результирующая высота]

                                     [,требуемый цвет]

                                     [,результирующий цвет]





                           - 25 -

                       00152-01 33 09-4


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   компоновочный    пульт,    характеристики

  которого  изменяются.   Аргумент   идентификатор   является

  адресом длинного слова без знака, содержащего идентификатор

  компоновочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Требуемая ширина


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Требуемая ширина для компоновочного  пульта.  Аргумент




                           - 26 -

                       00152-01 33 09-4


  требуемая ширина является адресом целого длинного слова  со

  знаком, которое содержит  желаемую  ширину.  Если  аргумент

  опущен, ширина не изменяется.


       Результирующая ширина


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством ссылки


       Физическая  ширина  компоновочного  пульта.   Аргумент

  результирующая  ширина  является  адресом  целого  длинного

  слова со  знаком,  в  которое  записывается  действительная

  ширина компоновочного пульта.

       Результирующая ширина может быть больше чем требуемая,

  если для терминала не может быть явно установлена требуемая

  ширина. Результирующая ширина может быть меньше чем требуе-

  мая, если физическая ширина терминала меньше, чем требуемая

  ширина.


       Требуемая высота


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Требуемая высота для компоновочного  пульта.  Аргумент

  требуемая высота является адресом целого длинного слова  со




                           - 27 -

                       00152-01 33 09-4


  знаком, которое  содержит  желаемую  высоту  компоновочного

  пульта. Если этот аргумент опущен, высота не изменяется.


       Результирующая высота


       Использоваие в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством ссылки


       Физическая  высота  компоновочного  пульта.   Аргумент

  результирующая  высота  является  адресом  целого  длинного

  слова со  знаком,  в  которое  записывается  действительная

  высота компоновочного пульта.

       Результирующая высота может быть больше чем требуемая,

  если для терминала не может быть явно установлена требуемая

  высота. Результирующая высота может быть меньше чем требуе-

  мая высота, если физическая высота  терминала  меньше,  чем

  требуемая высота.


       Требуемый цвет


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Символическое имя желаемого цвета. Аргумент  требуемый

  цвет является адресом длинного слова без знака, содержащего

  желаемый цвет.




                           - 28 -

                       00152-01 33 09-4


       Если данный аргумент опущен, фоновый цвет не меняется.

  Разрешенными  вариантами   являются   SMG$C_COLOR_WHITE   и

  SMG$C_COLOR_BLACK.


       Результирующий цвет


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает  действительный  выбранный  цвет.   Аргумент

  результирующий цвет является  адресом  длинного  слова  без

  знака, в которое записывается действительный фоновый  цвет.

  Если терминал не поддерживает определенный цвет, выбирается

  ближайший подходящий.

       Процедура может возвращать значения SMG$C_COLOR_WHITE,

  SMG$C_COLOR_BLACK или  SMG$C_COLOR_UNKNOWN.  Если  аргумент

  требуемый  цвет  опущен,  значение  данного  аргумента   не

  изменяется.


       Описание.


       Процедура   SMG$CHANGE_PBD_CHARACTERISTICS   позволяет

  изменять  ширину,  высоту  и  фоновый  цвет,  связанные   с

  компоновочным пультом.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;




                           - 29 -

                       00152-01 33 09-4


  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_PBDIN_USE

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

         ном режиме;

  SMG$_INWIDARG

       - описана неправильная ширина;

  SMG$_INPAGAPG

       - неправильная высота;

  SMG$_INCOLARG

       - определен неизвестный фоновый цвет.



       1.7. SMG$CHANGE_RENDITION    -     изменение

            установленных       по        умолчанию

            видеопризнаков


       Процедура SMG$CHANGE_RENDITION изменяет  видеопризнаки

  для всего виртуального дисплея или его части.


       Формат:


       SMG$CHANGE_RENDITION дисплей, начальная строка,

                            начальная колонка, число строк,

                            число колонок [,видеопризнаки]

                            [,дополнение]


       Код возврата:


       Использование в МОС ВП: значение состояния





                           - 30 -

                       00152-01 33 09-4


       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  виртуальный  дисплей,   установленные   по

  умолчанию признаки которого  изменяются.  Аргумент  дисплей

  является адресом  длинного  слова  без  знака,  содержащего

  идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Начальная строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Позиция начальной строки  для  приема  видеопризнаков.

  Аргумент начальная строка является адресом целого  длинного

  слова со знаком, которое содержит номер начальной строки.





                           - 31 -

                       00152-01 33 09-4


       Начальная колонка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Позиция начальной колонки для  приема  видеопризнаков.

  Аргумент начальная колонка является адресом целого длинного

  слова со знаком, которое содержит номер начальной колонки.


       Число строк


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Число строк для приема видеопризнаков. Аргумент  число

  строк является адресом целого  длинного  слова  со  знаком,

  содержащего число строк.


       Число колонок


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Число колонок для приема видеопризнаков. Аргумент чис-

  ло  колонок  является  адресом  целого  длинного  слова  со




                           - 32 -

                       00152-01 33 09-4


  знаком, содержащего число колонок.


       Видеопризнаки


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска,  обозначающая  видеопризнаки  для  определенной

  части виртуального дисплея. Аргумент видеопризнаки является

  адресом   длинного   слова   без   знака,   биты   которого

  контролируют видеопризнаки. Каждый  бит  в  этом  аргументе

  вызывает соответствующее действие на дисплее.


       Видеопризнаки, которыми можно управлять таким образом,

  следующие:

  SMG$M_BLINK

       - дисплейное мерцание символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком;  это

         значит - использование противоположного  установлен-

         ному по умолчанию признака на виртуальном дисплее;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.








                           - 33 -

                       00152-01 33 09-4


       Схема видеопризнаки/дополнение работает по  следующиму

  алгоритму:

       1) каждый дисплей  имеет  установленные  по  умолчанию

  видеопризнаки, связанные с ним  при  создании  виртуального

  дисплея;

       2) при вызове процедуры  SMG$CHANGE_RENDITION,  выпол-

  няется логическая операция "или" для каждого бита  в  уста-

  новленных по умолчанию  видеопризнаках  и  соответствующего

  бита в аргументе видеопризнаки;

       3) затем выполняется логическая операция  "исключающее

  или" для каждого бита результата выше описанной операции  и

  соответствующего бита в аргументе дополнение.

       Используя два аргумента,  вызывающая  программа  может

  осуществлять независмый  контроль  за  каждым  признаком  в

  одном вызове.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска,  обозначающая  видеопризнаки  для  определенной

  части виртуального дисплея.  Аргумент  дополнение  является

  адресом длинного слова без знака, биты  которого  управляют

  видеопризнаками.

       Каждый бит в данном аргументе вызывает соответствующее

  действие  на   дисплее.   Видеопризнаки,   которыми   можно



                           - 34 -

                       00152-01 33 09-4


  управлять таким образом, такие же как для аргумента видеоп-

  ризнаки.

       Действие, предпринимаемое средством управления экраном

  для различных комбинаций признаков, представленно в табл.1.

                                                   Таблица 1

  ----------------------------------------------------------

  Видеопризнаки !  Дополнение  !         Действие
                                          
  ----------------------------------------------------------

        0       !      0       ! Признак не изменен

        1       !      0       ! Признак включен

        0       !      1       ! Признак установлен в допол-

                !              ! нение  к  установленному по

                !              ! умолчанию

        1       !      1       ! Признак выключен




       Описание.


       Процедура  SMG$CHANGE_RENDITION   позволяет   изменять

  установленный по умолчанию видеопризнак для  прямоугольного

  блока текста на определенном виртуальном дисплее. Например,

  возможно использовать  процедуру  для  изображения  обычной

  строки с обратным видеопризнаком.

                                                      
       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;







                           - 35 -

                       00152-01 33 09-4


  SMG$_NO_CHADIS

       - успешное   завершение.    Никаких    изменений    на

         виртуальном дисплее;

  SMG$_INVROW

       - неверная начальная строка.  Определенная  строка  за

         пределами виртуального дисплея;

  SMG$_INVCOL

       - неверная начальная колонка. Определенная колонка  за

         пределами виртуального дисплея;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVARG

       - неверное число строк, неверное число колонок, нерас-

         познаваемые аргументы видеопризнаки или дополнение;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.8. SMG$CHANGE_VIRTUAL_DISPLAY -  изменение

            признаков виртуального дисплея


       Процедура     SMG$CHANGE_VIRTUAL_DISPLAY     позволяет

  изменить  размеры,  признак  ограничения  и   видеопризнаки

  виртуального дисплея.


       Формат:


       SMG$CHANGE_VIRTUAL_DISPLAY дисплей, число строк,

                                  число колонок [,признаки]

                                  [,видеопризнаки]



                           - 36 -

                       00152-01 33 09-4


                                  [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  виртуальный  дисплей,  признаки   которого

  изменяются.  Аргумент  дисплей  является  адресом  длинного

  слова без знака, содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Число строк


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки






                           - 37 -

                       00152-01 33 09-4


       Определяет новое число строк для виртуального дисплея.

  Аргумент число строк является адресом целого длинного слова

  со знаком, которое содержит число  строк  для  виртуального

  дисплея.


       Число колонок


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  новое  число  колонок   для   виртуального

  дисплея. Аргумент число  колонок  является  адресом  целого

  длинного слова со знаком, которое  содержит  число  колонок

  для виртуального дисплея.


       Признаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет, ограничен ли виртуальный дисплей (по умол-

  чанию ограничен). Аргумент признаки является адресом  длин-

  ного слова без  знака,  которое  содержит  маску  признаков

  дисплея.

       Для   явного   определения    ограниченного    дисплея

  используйте маску SMG$M_BORDER. Все другие биты должны быть




                           - 38 -

                       00152-01 33 09-4


  нулями.


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет установленные по  умолчанию  видеопризнаки,

  применяемые  ко  всему  выводу  на   виртуальный   дисплей.

  Аргумент видеопризнаки является адресом длинного слова  без

  знака, содержащего маску видеопризнаков.

       Однако, например, вызов процедуры SMG$PUT_CHARS с явно
                                                       
  определенным видеопризнаком будет  отвергать  видеопризнак,

  установленный по умолчанию.


       Биты, которые могут быть установлены для рассматривае-

  мого аргумента, следующие:

  SMG$M_BLINK

       - устанавливает  по  умолчанию  на  дисплее   мерцание

         символов;

  SMG$M_BOLD

       - устанавливает по умолчанию на дисплее яркость симво-

         лов выше обычной;

  SMG$M_REVERSE

       - устанавливает по  умолчанию  на  дисплее  символы  с

         обратным видеопризнаком;






                           - 39 -

                       00152-01 33 09-4


  SMG$M_UNDERLINE

       - устанавливает по умолчанию на дисплее  подчеркивание

         символов.

       Возможно определить любую комбинацию признаков в одном

  вызове. Все другие биты должны быть нулями.


       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка  является  адресом  длинного  слова  без   знака,

  которое содержит определение символьной  установки.  Только

  значение  SMG$C_ASCII  является  разрешенным,   оно   также

  устанавливается по умолчанию.


       Описание.


       Процедура  SMG$CHANGE_VIRTUAL_DISPLAY  позволяет   вам

  изменять размер или установленные по умолчанию признаки для

  виртуального дисплея. Если изменяется  размер  виртуального

  дисплея,    средство    управления     экраном     пытается

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

  Если размер виртуального дисплея меньше, чем старый,  текст

  может быть усечен. Если новый размер  больше,  текст  может

  быть дополнен пространством справа.



                           - 40 -

                       00152-01 33 09-4


       Когда   устанавливаются   новые    размеры    дисплея,

  виртуальный курсор перемещается в строку 1, колонку 1. Если

  метка  границы  используется   для   дисплея   и   она   не

  соответствует новым размерам, то метка удаляется.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  LIB$_INSVIRMEM

       - недостаточная виртуальная память  для  распределения

         необходимых буферов;

  SMG$_INVARG

       - неверный видеопризнак или дисплейный признак;

  SMG$_WRONUMARG

       - неправильное число аргументов;
                                  
  SMG$_INVDIS_ID

       - неверный аргумент дисплей.



       1.9. SMG$CHECK_FOR_OCCLUSION   -    проверка

            виртуального дисплея на перекрытие


       Процедура   SMG$CHECK_FOR_OCCLUSION    проверяет    не

  перекрыт  ли   виртуальный   дисплей   другим   виртуальным

  дисплеем.


       Формат:


       SMG$CHECK_FOR_OCCLUSION дисплей, идентификатор,

                               состояние




                           - 41 -

                       00152-01 33 09-4


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет проверяемый виртуальный  дисплей.  Аргумент

  дисплей является адресом длинного слова без знака, содержа-

  щего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет проверяемый компоновочный  пульт.  Аргумент

  идентификатор является адресом длинного  слова  без  знака,




                           - 42 -

                       00152-01 33 09-4


  содержащего идентификатор компоновочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Состояние


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает значение, обозначающее перекрыт ли  дисплей.

  Аргумент является адресом целого длинного слова со  знаком,

  в которое записывается состояние о перекрытии. Данный аргу-

  мент установлен  в  1,  если  дисплей  перекрыт  другим,  и

  установлен в 0,  если  дисплей  не  перекрыт  на  указанном

  компоновочном  пульте.   Если   процедура   не   возвращает

  состояние SS$_NORMAL, содержимое рассматриваемого аргумента

  неопределено.


       Описание.


       Процедура SMG$CHECK_FOR_OCCLUSION определяет  перекрыт

  ли определенный виртуальный дисплей, который  прикреплен  к

  указанному  компоновочному   пульту,   другим   виртуальным

  дисплеем.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;




                           - 43 -

                       00152-01 33 09-4


  SMG$_NOTPASTED

       - указанный виртуальный дисплей не прикреплен  к  ука-

         занному компоновочному пульту;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует использование процедуры

  С  SMG$CHECK_FOR_OCCLUSION.

  С

  С  Эта процедура создает виртуальный дисплей и приписывает

  С  ему компоновочный пульт. Данные помещаются в этот

  C  виртуальный дисплей через процедуру SMG$PUT_CHARS.

  С-

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$PUT_CHARS

        INTEGER SMG$CHECK_FOR_OCCLUSION

        INTEGER DISPLAY1, DISPLAY2, PASTE1, PASTE2, ROWS,

     1  COLUMNS, BORDER

        INTEGER OCCLUSION




                           - 44 -

                       00152-01 33 09-4


        CHARACTER*29 техт

  C+

  C  Включить SMG определения. В частности нам нужно

  C  SMG$M_BORDER.

  С-

        INCLUDE ' ($SMGDEF)'

  С+

  С  Создать два виртуальных дисплея, используя процедуру

  С  SMG$CREATE_VIRTUAL_DISPLAY. Дать их границы.

  С-

        ROWS = 6

        COLUMNS = 50

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1        (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

        ROWS = 5

        COLUMNS = 30

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1        (ROWS, COLUMNS, DISPLAY2, SMG$M_BORDER)

  С+

  С  Создать компоновочный пульт, используя процедуру

  С  SMG$CREATE_PASTEBOARD.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD ( PASTE1 )

        ISTATUS = SMG$CREATE_PASTEBOARD ( PASTE2 )

  С+

  С  Использовать процедуру SMG$PUT_CHARS для посылки

  С  данных в виртуальные дисплеи.




                           - 45 -

                       00152-01 33 09-4


  С-

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,' THIS VIRTUAL

     1            DISPLAY HAS 6 ROWS AND 50 COLUMNS.',2, 1 )

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,' THIS IS А

     1            BORDERED VIRTUAL DISPLAY.',3, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,' SMG$PUT_CHARS

     1            PUTS DATA IN THIS VIRTUAL DISPLAY.',4, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,' THIS техт SHOULD

     1            ВЕ PARTIALLY OCCULDED.',5, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,' SO SHOULD PART

     1            OF THIS ROW.', 6, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY2, ' THIS IS

     1            VIRTUAL'. 3, 1, )

        ISTATUS = SMG$PUT_CHARS ( DISPLAY2,

     1            'DISPLAY #2.',4,1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY2,

     1            'THIS IS JUST SOME MORE техт. '. 5, 1 )

  С+

  С  Использовать процедуру SMG$PASTE_VIRTUAL_DISPLAY для

  С  прикрепления виртуального дисплея.

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1,

     1            PASTE1, 4, 15 )

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY2,

     1            PASTE2, 8, 15 )

  С+

  С  Проверить два виртуальных дисплея на перекрытие




                           - 46 -

                       00152-01 33 09-4


  С  вызовом процедуры SMG$CHECK_FOR_OCCLUSION.

  С-

        техт = ' THIS IS NOT OCCLUDED.'

        ISTATUS = SMG$CHECK_FOR_OCCLUSION (DISPLAY1,

     1            PASTE1, OCCLUSION )

        IN ( OCCLUSION .EQ. 0 ) THEN

            ISTATUS = SMG$PUT_CHARS (DISPLAY1, техт,1,1 )

        ELSE

            ISTATUS = SMG$PUT_CHARS (DISPLAY1, 'OCCLUDED.

     1                '. 1, 1 )

        END IF

        ISTATUS = SMG$CHECK_FOR_OCCLUSION ( DISPLAY2,

     1            PASTE2, OCCLUSION )

        IF ( OCCLUSION . ЕQ. 0 ) THEN

            ISTATUS = SMG$PUT_CHARS ( DISPLAY2, техт,1,1 )

        ELSE

            ISTATUS = SMG$PUT_CHARS (DISPLAY2, 'OCCLUDED.

     1                ', 1, 1 )

        END EF

        END


       Вывод, полученный с помощью программы на  языке  прог-

  раммирования ФОРТРАН, показан на рис. 1.













                           - 47 -

                       00152-01 33 09-4


  ----------------------------------------------------------
  ! OCCLUDED                                               !
  !    THIS VIRTUAL DISPLAY HAS 6 ROWS AND 50 COLUMNS      !
  !    THIS IS а BORDERED VIRTUAL DISPLAY                  !
  ------------------------------------                     !
  !    THIS DISPLAY IS NOT OCCLUDED  ! S VIRTUAL DISPLAY   !
  !                                  ! OCCLUDED            !
  !                                  -----------------------
  !    THIS IS VIRTUAL               !
  !    DISPLAY # 2                   !
  !    THIS IS INST SOME MORE техт   !
  ------------------------------------

                            Рис. 1




       1.10. SMG$CONTROL_MODE - управление режимом


       Процедура SMG$CONTROL_MODE  контролирует  буферизацию,

  минимальное обновление, а также  определяет,  очищается  ли

  экран, когда удаляется компоновочный пульт, и  используются

  ли символы табуляции для форматирования экрана.


       Формат:


       SMG$CONTROL_MODE идентификатор [,новый режим]

                        [,предыдущий режим]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения









                           - 48 -

                       00152-01 33 09-4


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения


       Определяет компоновочный пульт, режим  которого  будет

  изменен. Аргумент идентификатор является  адресом  длинного

  слова без знака, содержащего  идентификатор  компоновочного

  пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Новый режим


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   устанавливаемый   новый   режим.   Данный

  аргумент  является  адресом  длинного  слова   без   знака,

  содержащего установку для режима. Бит, установленный  в  1,

  означает,   что   режим   применяется,   тогда   как   бит,

  установленный в 0, запрещает этот режим работы.








                           - 49 -

                       00152-01 33 09-4


       Разрешенными установками являются следующие:

  SMG$M_BUF_ENABLED

       - позволяет выполнять буферизацию;

  SMG$M_MINUPD

       - позволяет выполнять минимальное обновление;

  SMG$M_CLEAR_SCREEN

       - заставляет  средство  управления   экраном   очишать

         экран, когда компоновочный пульт удаляется;

  SMG$M_NOTABS

       - заставляет   средство    управления    экраном    не

         использовать символы  табуляции  для  форматирования

         экрана.


       Все другие биты должны быть нулями.


       Предыдущий режим


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает установку режима, который был в действии  до

  вызова  процедуры  SMG$CONTROL_MODE.  Аргумент   предыдущий

  режим является адресом длинного слова без знака, в  которое

  записывается    предыдущая    установка    режима.     Бит,

  установленный  в  1,  означает,  что   определенный   режим

  применяется, тогда как бит, установленный  в  0,  означает,

  что этот режим запрещается.




                           - 50 -

                       00152-01 33 09-4


       Описание.


       Процедура  SMG$CONTROL_MODE  позволяет  запрашивать  и

  изменять режимы  работы  средства  управления  экраном  для

  определенного компоновочного пульта. Используются следующие

  режимы:

       1) буферизация. В этом режиме  устройство  усправления

  экраном   буферизует   все    выводы    для    эффективного

  использования системных $QIO. Пользователь может выдать  на

  экран любой вывод, который будет помещен  на  компоновочный

  пульт, но еще не записан на  терминал,  посредством  вызова

  процедуры SMG$FLUSH_BUFFER;

       2) минимальное обновление экрана. Как  установлено  по

  умолчанию,   средство    управления    экраном    старается

  минимизировать число символов, действительно посылаемых  на

  терминал. Посылаются только те символы, которые изменились.

  Однако,   при   этом   первоначальная    последовательность

  изменений  не  может   быть   сохранена.   (обычно,   экран

  переписывается так быстро, что это различие  незаметно.)  в

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

  вать  этот  режим  для  сохранения   порядка,   в   котором

  информация посылается на экран;

       3)  очистка  экрана.  Как  установлено  по  умолчанию,

  средство управления экраном очищает экран, когда  удаляется

  компоновочный пульт. Для предотвращения  этого,  установите

  соответсвующий бит в нуль;

       4) отсутствие табуляции.  Если  этот  бит  установлен,

  средство управления экраном не допускает терминальные табу-



                           - 51 -

                       00152-01 33 09-4


  ляции. Если  не  установлен,  средство  управления  экраном

  будет использовать физические табуляции для процедур  мини-

  мального  обновления.  Однако,  такое  использование   явно

  допускает, что табуляции установлены в местах, принятых  по

  умолчанию. Определите "отсутствие табуляции",  если  хотите

  быть уверены, что запрос выполнится, несмотря на табуляции,

  установленные  пользователем  на  терминале.  По  умолчанию

  установлено, что этот бит чист.

       Для установки требуемого режима вызывающая  программа,

  обычно, обращается к  этой  процедуре  дважды.  При  первом

  вызове  должен  быть   пропущен   аргумент   новый   режим;

  вызывающая программа проверит возвращаемое значение  преды-

  дущий режим. Второй вызов должен  обеспечить  значение  для

  аргумента новый режим.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVARG

       - неверный аргумент. Новый режим  имеет  установленные

         биты, которые  не  соответствуют  SMG$M_BUF_ENABLED,

         SMG$M_MINUPD, SMG$M_CLEAR_SCREEN или SMG$M_NOTABS;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;

  SMG$_WRONUMARG

       - неправильное число аргументов.







                           - 52 -

                       00152-01 33 09-4


       1.11. SMG$CREATE_KEY_TABLE - создание таблицы

             для клавишных определений


       Процедура  SMG$CREATE_KEY_TABLE  создает  таблицу  для

  клавишных определений.


       Формат:


       SMG$CREATE_KEY_TABLE таблица


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Таблица


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает идентификатор создаваемой клавишной таблицы.

  Аргумент таблица является адресом длинного слова без знака,

  в которое записывается идентификатор клавишной таблицы.









                           - 53 -

                       00152-01 33 09-4


       Описание.


       Процедура   SMG$CREATE_KEY_TABLE    создает    таблицу

  клавишных определений.  Клавишные  определения  могут  быть

  затем   добавлены   в   указанную    таблицу    процедурами

  SMG$ADD_KEY_DEF, SMG$LOAD_KEY_DEFS и SMG$DEFINE_KEY.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  LIB_INSVIRMEM

       - недостаточная виртуальная память.



       1.12. SMG$CREATE_PASTEBOARD    -     создание

             компоновочного пульта


       Процедура SMG$CREATE_PASTEBOARD создает  компоновочный

  пульт и возвращает назначенный ему идентификатор.


       Формат:


       SMG$CREATE_RASTEBOARD идентификатор [,вывод]

                             [,число строк] [,число колонок]

                             [,флаг]


       Код возврата:


       Использование в МОС ВП: значение состояния





                           - 54 -

                       00152-01 33 09-4


       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает   значение    идентификатора    создаваемого

  компоновочного  пульта.  Аргумент  идентификатор   является

  адресом   длинного   слова,    в    которое    записывается

  идентификатор нового компоновочного пульта.


       Вывод


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Определяет спецификацию файла или  логическое  имя,  с

  которым будет связан вывод на компоновочный пульт. Аргумент

  вывод  является  адресом  дескриптора,   указывающего   имя

  выходного устройства.  Если  этот  аргумент  опущен,  вывод

  посылается в SYS$OUTPUT.





                           - 55 -

                       00152-01 33 09-4


       Число строк


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает число строк  для  устройства,  определенного

  через аргумент вывод. Аргумент число строк является адресом

  целого длинного слова со  знаком,  в  которое  записывается

  число строк для определенного устройства.


       Число колонок


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает число колонок для устройства,  определенного

  через  аргумент  вывод.  Аргумент  число  колонок  является

  адресом  целого  длинного  слова  со  знаком,   в   которое

  записывается число колонок для определенного устройства.


       Флаг


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово без знака

       Доступ: только чтение

       Механизм: посредством ссылки





                           - 56 -

                       00152-01 33 09-4


       Определяет, очищен ли экран перед  тем,  как  средство

  управления экраном выполнит на него любой  вывод.  Аргумент

  флаг является адресом длинного слова без знака,  содержащим

  флаг сохранения экрана. Если аргумент флаг установлен в  0,

  экран первоначально очищен. Если установлен в 1,  экран  не

  очищается. Действие, установленное по умолчанию  -  очистка

  экрана. Средство управления экраном  работает  лучше,  если

  оно может управлять всем экраном.


       Описание.


       Процедура    SMG$CREATE_PASTEBOARD    создает    новый

  компоновочный пульт и возвращает назначенный идентификатор.

  Если создается компоновочный пульт на  устройстве,  которое

  уже имеет назначенный  компоновочный  пульт,  то  процедура

  возвращает   идентификатор   существующего   компоновочного

  пульта и код состояния  SMG$_PASALREXI.  Модульный  принцип

  предписывает, что если компоновочный пульт уже  существует,

  не удалять компоновочный пульт.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_PASALREXI

       - успешное   завершение.   Компоновочный   пульт   уже

         существует для этого устройства;

  LIB$_INSVIRMEM

       - недостаточная виртуальная память;





                           - 57 -

                       00152-01 33 09-4


  SMG$_WRONUMARG

       - неправильное число аргументов.


       Пример 1.


      С         CREPAS EXTRN'SMG$CREATE_PASTEBOARD'

      С         CREDIS EXTRN'SMG$CREATE_VIRTUAL_DISPLAY'

      С         PUTCHA EXTRN'SMG$PUT_CHARS'

      С         PASDIS EXTRN'SMG$PASTE_VIRTUAL_DISPLAY'

      С                Z-ADDO       ZERO      90

      С                Z-ADD1       LINCOL    90

      С                Z-ADD2       LINE      90

      с                Z-ADD5       COLUMN    90

      с                MOVE 'MENU'  OUT       4

      С* Создать компоновочный пульт

      С                CALL CREPAS

      С                PARM         PASTID    90 WL

      С                PARMV        ZERO

      С                PARM         HEIGHT    90 WL

      С                PARM         WIDTH     90 WL

      С* Создать виртуальный дисплей.

      С                CALL CREDIS

      С                PARM         HEIGHT    RL

      С                PARM         WIDTH     RL

      С                PARM         DISPID    90 WL

      С* Вывод

      С                CALL PUTCHA

      С                PARM         DISPID       RL




                           - 58 -

                       00152-01 33 09-4


      С                PARMD        OUT

      С                PARM         LINE         RL

      С                PARM         COLUMN       RL

      С* Прикрепить виртуальный дисплей

      С                CALL PASDIS

      С                PARM         DISPID       RL

      С                PARM         PASTID       RL

      С                PARM         LINCOL       RL

      С                PARM         LINCOL       RL

      С                SETON                     LR


       Представленная программа на языке программирования RPG

  II изображает 'MENU', начиная в строке 2, колонке 5.


       Пример 2.


  С+

  С  Этот пример на языке программирования ФОРТРАН демонстри-

  С  рует, как использовать процедуру SMG$CREATE_PASTEBOARD.

  С-

        IMPLICIT INTEGER*4 (A-Z)

        SMG$M_BOLD = 1

        SMG$M_REVERSE = 2

        SMG$M_BLINK = 4

        SMG$M_UNDERLINE = 8

  С+

  С  Установить экран терминала как компоновочный пульт

  С  вызовом процедуры SMG$CREATE_PASTEBOARD

  С-



                           - 59 -

                       00152-01 33 09-4


        STATUS = SMG$CREATE_PASTEBOARD (NEW_PID,,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Установить область виртуального дисплея вызовом

  С  процедуры SMG$CREATE_VIRTUAL_DISPLAY

  С-

        STATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1           (5,80,DISPLAY_ID,,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Прикрепить виртуальный дисплей к экрану, начиная со

  С  строки 10, колонки 15, используя процедуру

  С  SMG$PASTE_VIRTUAL_DISPLAY

  С-

        STATUS = SMG$PASTE_VIRTUAL_DISPLAY(DISPLAY_ID,

     1           NEW_PID,10,15)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Написать на экране три строки, используя процедуру

  С  SMG$PUT_LINE

  С-

        STATUS = SMG$PUT_LINE (DISPLAY_ID,'THIS LINE IS

     1           UNDERLINED',2, SMG$M_UNDERLINE,0,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

        STATUS = SMG$PUT_LINE (DISPLAY_ID,'THIS LINE IS

     1           BLINKING',2,SMG$M_BLINK,0,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))




                           - 60 -

                       00152-01 33 09-4


        STATUS = SMG$PUT_LINE (DISPLAY_ID,'THIS LINE IS

     1           REVERSE VIDEO',2,SMG$M_REVERSE,0,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

        END


       Программа на языке программирования  ФОРТРАН  вызывает

  процедуры управления экраном для создания вывода на экран.



       1.13. SMG$CREATE_VIRTUAL_DISPLAY  -  создание

             виртуального дисплея


       Процедура      SMG$CREATE_VIRTUAL_DISPLAY      создает

  виртуальный   дисплей   и   возвращает   назначенный    ему

  идентификатор.


       Формат:


       SMG$CREATE_VIRTUAL_DISPLAY число строк,

                                  число колонок, дисплей,

                                  [,признаки]

                                  [,видеопризнаки]

                                  [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово ( без знака)

       Доступ: только запись

       Механизм: посредством значения






                           - 61 -

                       00152-01 33 09-4


       Аргументы:


       Число строк


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  число  строк  в  создаваемом   виртуальном

  дисплее.  Аргумент  число  строк  является  адресом  целого

  длинного слова со знаком, которое содержит  желаемое  число

  строк.


       Число колонок


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет число  колонок  в  создаваемом  виртуальном

  дисплее. Апгумент число  колонок  является  адресом  целого

  длинного слова со знаком, которое содержит  желаемое  число

  колонок.


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись




                           - 62 -

                       00152-01 33 09-4


       Механизм: посредством ссылки


       Принимает   значение   идентификатора   дисплея    для

  создаваемого   виртуального   дисплея.   Аргумент   дисплей

  является  адресом  длинного  слова  без  знака,  в  которое

  записывается идентификатор дисплея.


       Признаки


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет,  ограничен  ли  виртуальный  дисплей   (по

  умолчанию ограничен). Аргумент  признаки  является  адресом

  длинного слова без знака, которое содержит маску  признаков

  дисплея. Для определения ограниченного дисплея используется

  маска  SMG$M_BORDER.  Если  аргумент  опущен,  дисплей   не

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

  определены. Если  определено  SMG$M_TRUNC_ICON,  появляется

  изображение  (обычно  в  виде  ромба),  когда  имеет  место

  усечение  при  превышении  размеров  виртуального  дисплея.

  Когда  используется   SMG$M_DISPLAY_CONTROLS,   управляющие

  символы,  такие  как  возврат  каретки  и  перевод   строки

  отображаются  как  символы  (<CR>  <LF>),  так  что   можно

  непосредственно видеть, где они находятся.








                           - 63 -

                       00152-01 33 09-4


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет установленные по  умолчанию  видеопризнаки,

  применяемые ко всему выводу на данном  виртуальном  дисплее

  до тех пор, пока  не  будут  отвергнуты  особой  процедурой

  (например,   процедурой   SMG$CHANGE_RENDITION).   Аргумент

  видеопризнаки является адресом длинного  слова  без  знака,

  которое содержит маску видеопризнаков.


       Разрешенные значения для этого аргумента следующие:

  SMG$M_BLINK

       - дисплейное мерцание символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком,  что

         означает    -     использование     противоположного

         установленному по умолчанию признака на  виртуальном

         дисплее;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.









                           - 64 -

                       00152-01 33 09-4


       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка  является  адресом  длинного  слова  без   знака,

  которое   содержит   определенную   символьную   установку.

  Разрешенным является только значение  SMG$C_ASCII,  которое

  устанавливается по умолчанию.


       Описание.


       Процедура  SMG$CREATE_VIRTUAL_DISPLAY  создает   новый

  виртуальный   дисплей   и   возвращает   назначенный    ему

  идентификатор. Сначала виртуальный дисплей содержит пробелы

  и виртуальный курсор находится в строке 1, колонке 1.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  LIB$_INSVIRMEM

       - недостаточная виртуальная память;

  SMG$_INVARG

       - неверный аргумент. Аргументы признаки или видеоприз-

         наки содержат неизвестное значение;





                           - 65 -

                       00152-01 33 09-4


  SMG$_WRONUMARG

       - неправильное число аргументов.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует, как использовать процедуру

  С  SMG$CREATE_VIRTUAL_DISPLAY.

  С-

        IMPLICIT INTEGER*4 (A-Z)

        CHARACTER*8O    OUT_STR,TRIM_STR

        CHARACTER*18    PROMPT

        / 'пожалуйста, введите данные' /

        SMG$M_BOLD = 1

        SMGM_REVERSE=2

        SMG$M_BLINK = 4

        SMG$M_UNDERLINE = 8

  С+

  С  Установить клавиатуру терминала как виртуальную

  С  клавиратуру вызовом процедуры SMG$CREATE_VIRTUAL

  С  _KEYBOARD.

  С-

        STATUS =  SMG$CREATE_VIRTUAL_KEYBOARD(KEYBOARD_ID,,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Установить экран терминала как компоновочный пульт,

  С  используя процедуру SMG$CREATE_PASTEBOARD.




                           - 66 -

                       00152-01 33 09-4


  С-

        STATUS = SMG$CREATE_PASTEBOARD (NEW_PID,,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Установить область виртуального дисплея вызовом

  С  процедуры SMG$CREATE_VIRTUAL_DISPLAY.

  С-

        STATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1           (5,80,DISPLAY_ID,,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Прикрепить виртуальный дисплей к экрану, начиная со

  С  строки 10, колонки 15. Прикрепить виртуальный дисплей,

  С  используя процедуру SMG$PASTE_VIRTUAL_DISPLAY.

  С-

        STATUS = SMG$PASTE_VIRTUAL_DISPLAY

        (DISPLAY_ID,NEW_PID,1O,15)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Подсказать пользователю ввод и принять этот ввод,

  С  используя процедуру SMG$READ_STRING.

  С-

        STATUS = SMG$READ_STRING(KEYBOARD_ID,OUT_STR,

     1           PROMPT,,,,,,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Очистить экран, используя процедуру




                           - 67 -

                       00152-01 33 09-4


  С  SMG$ERASE_RASTEBOARD.

  С-

        STATUS = SMG$ERASE_PASTEBOARD (NEW_PID)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Привести в порядок все заканчивающие пробелы в

  С  пользовательском вводе, используя процедуру STR$TPIM.

  С-

        STATUS = STR$TRIM(TRIM_STR,OUT_STR,STR_LEN)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Отобразить введенные пользователем данные, используя

  С  процедуру SMG$PUT_LINE.

  С-

        STATUS = SMG$PUT_CHARS (DISPLAY_ID,

     1           ' YOU ENTERED:' ,,,,,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

        STATUS = SMG$PUT_LINE(DISPLAY_ID, TRIM_STR

     1           (1:STR_LEN),,SMG$M_REVERSE,0,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

        END


       Вывод, полученный с помощью программы на  языке  прог-

  раммирования ФОРТРАН, показан на рис. 2 (на рисунке изобра-

  жена прямоугольная рамка).









                           - 68 -

                       00152-01 33 09-4


  ---------------------------------------------------------
  !                                                       !
  !                                                       !
  !                                                       !
  !                                                       !
  !                                                       !
  !                                                       !
  !                                                       !
  !                                                       !
  ---------------------------------------------------------

                            Рис. 2
   


       Пример,   вызывающий   процедуру   SMG$CREATE_VIRTUAL_

  DISPLAY на языке программирования RPG представлен в подраз-

  деле 1.12.



       1.14. SMG$CREATE_VIRTUAL_KEYBOARD -  создание

             виртуальной клавиатуры


       Процедура     SMG$CREATE_VIRTUAL_KEYBOARD      создает

  виртуальную  клавиатуру   и   возвращает   назначенный   ей

  идентификатор.


       Формат:


       SMG$CREATE_VIRTUAL_KEYBOARD клавиатура,

                                   [,спецификация файла]

                                 [,спецификация по умолчанию]

                                   [,полная спецификация]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)




                           - 69 -

                       00152-01 33 09-4


       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Клавиатура


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает  значение  идентификатора  для   виртуальной

  клавиатуры. Аргумент клавиатура является  адресом  длинного

  слова  без  знака,  в  которое  записывается  идентификатор

  клавиатуры.


       Спецификация файла


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка, содержащая спецификацию файла  или  логическое

  имя файла или терминала, используемого для этой виртуальной

  клавиатуры. Аргумент спецификация  файла  является  адресом

  дескриптора, указывающего  спецификацию  файла.  Если  этот

  аргумент опущен, это значение устанавливается по  умолчанию

  в SYS$INPUT.





                           - 70 -

                       00152-01 33 09-4


       Спецификация по умолчанию


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка, содержащая установленную по умолчанию специфи-

  кацию файла. Аргумент спецификация  по  умолчанию  является

  адресом   дескриптора,   указывающего   установленную    по

  умолчанию спецификацию файла. Если  этот  аргумент  опущен,

  используется нулевая строка.

       Рассматриваемый аргумент может  быть  использован  для

  определения установленного по умолчанию устройства и  ката-

  лога, позволяющего аргументу спецификация файла  обеспечить

  имя и тип файла.


       Полная спецификация


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только запись

       Механизм: посредством дескриптора


       Строка, в которую процедура записывает полную специфи-

  кацию для используемого файла. Аргумент полная спецификация

  является  адресом  дескриптора,  указывающего   строку,   в

  которой записывается используемая полная спецификация  фай-

  ла.





                           - 71 -

                       00152-01 33 09-4


       Описание.


       Процедура  SMG$CREATE_VIRTUAL_KEYBOARD  создает  связь

  между спецификацией файла (имя терминала или файл СУД-32) и

  виртуальной  клавиатурой.  Идентификатор  клавиатуры  затем

  передается  к  другим  SMG$  процедурам   для   определения

  действующего вводного потока.

       Если аргумент спецификация файла не имеет отношения  к

  терминалу, открывается файл с использованием СУД-32  и  все

  последующие  обращения  к  этому  файлу  выполняются  через

  СУД-32. Если по спецификации имеем терминал, эта  процедура

  назначает канал для терминала и устанавливает  терминальную

  клавиатуру    в    соответствующий    режим    (если     он

  поддерживается).  Эти  признаки  восстанавливаются   в   их

  предыдущие   значения,   когда    виртуальная    клавиатура

  удаляется.  Виртуальная  клавиатура  может   быть   удалена

  вызовом    процедуры    SMG$DELETE_VIRTUAL_KEYBOARD     или

  автоматически, когда завершается образ.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_FILTOOLON

       - длинная файловая спецификация (более 255 символов);

  SMG$_WRONUMARG

       - неправильное число аргументов;

  LIB$_INSEF

       - недостаточное число флагов события;




                           - 72 -

                       00152-01 33 09-4


  LIB$_INSVIRMEM

       - недостаточная виртуальная память;

  LIB$_INVSTRDES

       - неверный дескриптор строки.


       Некоторые значения состояния СУД-32  возвращает  через

  $OPEN или $CONNECT.

       Некоторые  значения   состояния   возвращаются   через

  $GETDVIW, $ASSIGN или $DCLEXH.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует использование процедур SMG$CREATE_VIRTUAL_

  С  KEYBOARD, SMG$CREATE_KEY_TABLE, SMG$ADD_KEY_DEF и

  С  SMG$READ_COMPOSED_LINE

  С-

        INTEGER SMG$CREATE_VIRTUAL_KEYBOARD,

     1  SMG$CREATE_KEY_TABLE

        INTEGER SMG$ADD_KEY_DEF, SMG$READ_COMPOSED_LINE

        INTEGER KEYBOARD, KEYTABLE

  С+

  С  Включить SMG определения. В частности, нам нужно

  С  SMG$M_KEY_NOECHO и SMG$M_KEY_TERMINATE.

  С-

        INCLUDE '($SMGDEF)'

  С+

  С  Создать виртуальную клавиатуру (используя процедуру



                           - 73 -

                       00152-01 33 09-4


  С  SMG$CREATE_VIRTUAL_KEYBOARD) и клавишную таблицу

  С  ( используя процедуру SMG$CREATE_KEY_TABLE).

  С-

        ISTATUS = SMG$CREATE_VIRTUAL_KEYBOARD (KEYBOARD)

        ISTATUS = SMG$CREATE_KEY_TABLE (KEYTABLE)

  С+

  С  Подсказка пользователю с помощью последующих

  С  инструкций.

  С-

        WRITE (6,*) 'когда вы увидите эту подсказку (->),

     1  нажмите следующие'

        WRITE (6,*) 'клавиши ( на главной клавиатуре ):'

        WRITE (6,*) '      RF1 '

        WRITE (6,*) '      5 '

        WRITE (6,*) '      8 '

        WRITE (6,*) '      PF3 '

        WRITE (6,*) ' '

        WRITE (6,*) 'когла вы сделаете это, следующее

     1  предложение (и'

        WRITE (6,*) 'ничего больше) появится после подсказки:

        WRITE (6,*) 'PF3 будет действовать как возврат

        каретки.)'

        WRITE (6,*) ' '

        WRITE (6,*) 'теперь время появиться всему тексту.'

  С+

  С  Добавить клавишные определения вызовом процедуры

  С  SMG$ADD_KEY_DEF.




                           - 74 -

                       00152-01 33 09-4


  С-

        ISTATUS = SMG$ADD_KEY_DEF (KEYTABLE, 'PF1',,,

     1            'NOW IS ТHE TIME FOR ')

        ISTATUS = SMG$ADD_KEY_DEF (KEYTABLE, 'KP5',,,

     1            'техт то APPEAR.')

        ISTATUS = SMG$ADD_KEY_DEF (KEYTABLE, 'KP8',,,

     1            'THIS SHOULD ве DELETED. IF YOU SEE THIS,

     1            AN ERROR EXISTS')

        ISTATUS = SMG$DELETE_KEY_DEF (KEYTABLE, 'KP8')

        ISTATUS = SMG$ADD_KEY_DEF (KEYTABLE, 'PF3',,

     1            SMG$M_KEY_NOECHO + SMG$M_KEY_TERMINATE,

     1            'THIS SHOULD NOT ве ECHOED.  IF YOU CAN

     1            SEE THIS, AN ERROR EXISTS.')

  С+

  С  Вызвать процедуру SMG$READ_COMPOSED_LINE для

  С  чтения строки ввода.

  С-

        WRITE (6,*) ''

        ISTATUS = SMG$READ_COMPOSED_LINE (KEYBOARD,

     1            KEYTABLE, R_TEXT, '->')

        END


       Сеанс вывода:


       Когда вы увидите  подсказку  (->),  нажмите  следующие

  клавиши ( на главной клавиатуре ):


       .PFI

       .5



                           - 75 -

                       00152-01 33 09-4


       .8

       .PF3

       Когда вы  сделаете  это,  следующее  предложение  (  и

  ничего больше) появится после подсказки:

       -> теперь время появиться всему тексту

       $



       1.15. SMG$CURSOR_COLUMN - возвращение позиции

             колонки виртуального курсора


       Процедура SMG$CURSOR_COLUMN возвращает позицию колонки

  текущего виртуального курсора на  определенном  виртуальном

  дисплее.


       Формат:


       SMG$CURSOR_COLUMN дисплей


       Код возврата:


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака )

       Доступ: только запись

       Механизм: посредством значения


       Процедура SMG$CURSOR_COLUMN возвращает позицию колонки

  текущего виртуального курсора.










                           - 76 -

                       00152-01 33 09-4


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово ( без знака )

       Доступ: только чтение

       Механизм: посредством ссылки


       Дисплей, для которого  позиция  колонки  возвращается.

  Аргумент дисплей является адресом длинного слова без знака,

  содержащего идентификатор дисплея.

       Данный      аргумент      возвращается      процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Описание.


       Процедура SMG$CURSOR_COLUMN возвращает длинное  слово,

  содержащее значение позиции колонки  текущего  виртуального

  курсора  для  определенного  виртуального   дисплея.   Если

  аргумент   дисплей    опущен,    процедура    сигнализирует

  SMG$_WRONUMARG.   Если   аргумент    неверный,    процедура

  сигнализирует SMG$_INVDIS_ID.


       Возвращаемые значения состояния:


       Отсутствуют.











                           - 77 -

                       00152-01 33 09-4


       1.16. SMG$CURSOR_ROW  -  возвращение  позиции

             строки курсора


       Процедура  SMG$CURSOR_ROW  возвращает  позицию  строки

  текущего виртуального курсора  на  определеном  виртуальном

  дисплее.


       Формат:


       SMG$CURSOR_ROW дисплей


       Код возврата:


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Процедура SMG$CURSOR_ROW  возвращает  позицию  текущей

  строки.


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Дисплей, для  которого  позиция  строки  возвращается.

  Аргумент дисплей является адресом длинного слова без знака,




                           - 78 -

                       00152-01 33 09-4


  содержащего идентификатор дисплея.

       Рассматриваемый   аргумент   возвращается   процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Описание.


       Процедура  SMG$CURSOR_ROW  возвращает  длинное  слово,

  содержащее значение позиции  строки  текущего  виртуального

  курсора для определенного виртуального дисплея.


       Сигнализируемые значения состояния:

  SMG$_INVDIS_ID

       - неверный аргумент;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.17. SMG$DEFINE_KEY  -  выполнение   команды

             DEFINE/KEY


       Процедура SMG$DEFINE_KEY выполняет команду DEFINE/KEY.


       Формат:


       SMG$DEFINE_KEY таблица, команда


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения




                           - 79 -

                       00152-01 33 09-4


       Аргументы:


       Таблица


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Идентификатор  таблицы  клавишных   определений,   для

  которой выполняется команда  DEFINE/KEY.  Аргумент  таблица

  является адресом  длинного  слова  без  знака,  содержащего

  идентификатор клавишной таблицы.

       Данный аргумент  возвращается  процедурой  SMG$CREATE_

  KEY_TABLE.


       Команда


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка, содержащая команду DEFINE/KEY для  выполнения.

  Аргумент команда является адресом дескриптора, указывающего

  команду для выполнения.


       Описание.


       Процедура SMG$DEFINE_KEY делает грамматический  разбор

  и выполняет команду  DEFINE/KEY.  Может  быть  использована




                           - 80 -

                       00152-01 33 09-4


  программами, которые обращаются к  команде  DEFINE/KEY,  но

  которые не делают грамматического разбора команды.

       Процедура    SMG$DEFINE_KEY     вызывает     процедуру

  CLI$DCL_PARSE для грамматического разбора командной  строки

  и   затем   делает    соответствующий    вызов    процедуры

  SMG$ADD_KEY_DEF.  Использование  этой  процедуры   требует,

  чтобы  образ  выполнялся  под  управлением   интерпретатора

  командного языка.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число аргументов.


       Некоторые  значения   состояния   возвращаются   через

  LIB$COPY_DXDX.

       Некоторые   значения   состояния   возвращаются   CLI$

  процедурами.

       Некоторые     значения     состояния      возвращаются

  SMG$ADD_KEY_DEF.



       1.18. SMG$DEL_TERM_TABLE      -      удаление

             терминальной таблицы


       Процедура  SMG$DEL_TERM_TABLE   завершает   доступ   к

  TERMTABLE.EXE   и    освобождает    смежное    пространство

  виртуальных адресов.





                           - 81 -

                       00152-01 33 09-4


       Формат:


       SMG$DEL_TERM_TABLE


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Отсутствуют


       Описание.


       Процедура  SMG$DEL_TERM_TABLE  заканчивает  доступ   к

  TERMTABLE.EXE. Обращение к  этой  процедуре  необязательно.

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

  программа   нуждается    в    многократном    использовании

  пространства виртуальных адресов, используемых  для  личной

  таблицы.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение.












                           - 82 -

                       00152-01 33 09-4


       1.19. SMG$DELETE_CHARS - удаление символов

                                                       
       Процедура   SMG$DELETE_CHARS   удаляет   символы    на

  виртуальном дисплее.


       Формат:
       

       SMG$DELETE_CHARS дисплей, число символов,

                        строка, колонка


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово (без знака)

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей, с  которого  удаляются

  символы. Аргумент дисплей является адресом  длинного  слова

  без знака, содержащего идентификатор дисплея.

       Данный аргумент  возвращается  процедурой  SMG$CREATE_

  VIRTUAL_DISPLAY.





                           - 83 -

                       00152-01 33 09-4


       Число символов


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет число удаляемых  символов.  Аргумент  число

  символов   является   адресом   целого   длинного    слова,

  содержащего число удаляемых символов.


       Строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: цедое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  позицию  строки,  в   которой   начинается

  удаление. Аргумент строка является адресом целого  длинного

  слова со  знаком,  содержащего  номер  строки,  на  которой

  начинается удаление.


       Колонка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет колонку,  в  которой  начинается  удаление.




                           - 84 -

                       00152-01 33 09-4


  Aргумент колонка является адресом целого длинного слова  со

  знаком, содержащего позицию колонки, в  которой  начинается

  удаление.


       Описание.


       Процедура SMG$DELETE_CHARS удаляет определенное  число

  символов, начиная с определенных позиций строки и  колонки.

  Остающиеся    символы    передвигаются    влево,    занимая

  освобожденное  пространство.  Процедура   удаляет   символы

  только в одной строке.

       Если определено  символов  больше,  чем  возможно  для

  удаления, процедура SMG$DELETE_CHARS удаляет все символы от

  определенной позиции колонки до конца строки.

       Процедура  оставляет  виртуальный  курсор  в   позиции

  первого удаляемого символа.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVROW

       - неверная  позиция  строки.  Определенная  строка  за

         пределами виртуального дисплея;

  SMG$_INVCOL

       - неверная позиция колонки.  Определенная  колонка  за

         пределами виртуального дисплея;

  SMG$_INVDIS_ID

       - неверный аргумент;





                           - 85 -

                       00152-01 33 09-4


  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVARG

       - неверный   аргумент.определенное   число    символов

         выходит за пределы виртуального дисплея.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует использование процедуры SMG$DELETE_CHARS.

  С-

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY,

     1  SMG$PUT_CHARS, SMG$DELETE_CHARS

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS, BORDER

  С+

  С  Создать виртуальный дисплей вызовом процедуры

  С  SMG$CREATE_VIRTUAL_DISPLAY. Чтобы дать его границу,

  С  установите BORDER = I. Отсутствие границы - BORDER = о.

  С-

        ROWS = 7

        COLUMNS = 50

        BORDER = 1

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            ( ROWS, COLUMNS, DISPLAY1, BORDER )

        IF  (.NOT. ISTATUS ) WRITE (6, 900)




                           - 86 -

                       00152-01 33 09-4


     1  ' SMG$CREATE_VIRTUAL_DISPLAY', ISTATUS

  С+

  С  Вызвать процедуру SMG$CREATE_PASTEBOARD для создания

  С  компоновочного пульта.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

        IF (. NOT. ISTATUS) WRITE (6. 900)

     1  ' SMG$CREATE_PASTEBOARD', ISTATUS

  С+

  С  Использовать процедуру SMG$PUT_CHARS для посылки данных

  С  в виртуальный дисплей.

  С-

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50

     1            COLUMNS. ',2, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS IS BORDERED VIRTUAL DISPLAY.', 4, 1)

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1            'SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL

     1            DISPLAY. ', 6, 1)

  С+

  С  Прикрепить виртуальный дисплей к  компоновочному пульту,

  С  используя процедуру SMG$PASTE_VIRTUAL_DISPLAY.

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY

     1            ( DISPLAY1, PASTE1, 4, 15)

  900   FORMAT (' ROUTINE ', а, 'RETURNED а STATUS OF ',Z8)




                           - 87 -

                       00152-01 33 09-4


  С+

  С  Вызвать процедуру SMG$DELETE_CHARS для удаления 4

  С  символов из строки 4, начиная с символа ( колонки )

  С  14, перемещая символы "RDER" в слове "BORDERED"

  С-

        ISTATUS = SMG$DELETE_CHARS ( DISPLAY1, 4, 4, 14 )

        END


       Вывод, полученный с помощью программы на  языке  прог-

  раммирования  ФОРТРАН,   перед   обращением   к   процедуре

  SMG$DELETE_CHARS показан на рис. 3.


  ---------------------------------------------------------
  !                                                       !
  !   THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50 COLUMNS      !
  !                                                       !
  !   THIS IS а BORDERED VIRTUAL DISPLAY                  !
  !                                                       !
  !   SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY     !
  !                                                       !
  ---------------------------------------------------------

                            Рис. 3



       Вывод,    полученный    после     вызова     процедуры

  SMG$DELETE_CHARS, показан на рис. 4.


  ----------------------------------------------------------
  !                                                        !
  !   THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50 COLUMNS       !
  !                                                        !
  !   THIS ISA BORD VIRTUAL DISPLAY                        !
  !                                                        !
  !   SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY      !
  !                                                        !
  ----------------------------------------------------------

                            Рис. 4





                           - 88 -

                       00152-01 33 09-4


       1.20. SMG$DELETE_KEY_DEF      -      удаление

             клавишного определения


       Процедура   SMG$DELETE_KEY_DEF    удаляет    клавишное

  определение из таблицы клавишных определений.


       Формат:


       SMG$DELETE_KEY_DEF таблица, наименование [,состояние]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Таблица


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово ( без знака )

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет клавишную  таблицу,  из  которой  удаляется

  клавишное определение. Аргумент  таблица  является  адресом

  длинного  слова  без   знака,   содержащего   идентификатор

  клавишной таблицы.







                           - 89 -

                       00152-01 33 09-4


       Наименование


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка, содержащая имя  клавиши,  определение  которой

  удаляется.   Аргумент   наименование    является    адресом

  дескриптора, указывающего имя клавиши. Перед использованием

  наименование  освобождается   от   последних   пробелов   и

  преобразуется в символы верхнего регистра.

       Табл.  9  [1]  представляет  разрешенные  наименования

  клавиш.


       Состояние


       Использование в МОС ВП: строка символов
      
       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка, содержащая  имя  состояния,  которое  уточняет

  клавишное определение. Аргумент состояние является  адресом

  дескриптора,  указывающего  имя  состояния.  Если  аргумент

  опущен, используется нулевое состояние. Таким образом, если

  клавиша имеет несколько определений, зависящих от различных

  значений  данного  аргумента,   рассматриваемая   процедура

  позволяет удалить только одно из этих определений.





                           - 90 -

                       00152-01 33 09-4


       Описание.


       Процедура   SMG$DELETE_KEY_DEF   удаляет   определение

  клавиши из указанной таблицы клавишных определений.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVKTB_ID

       - неверный аргумент;

  SMG$_KEYNOTDEF

       - клавиша не определена;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_KEYDEFPRO

       - клавишное определение защищено.



       1.21. SMG$DELETE_LINE -  удаление  строки  из

             виртуального дисплея


       Процедура   SMG$DELETE_LINE    удаляет    строки    из

  виртуального дисплея.


       Формат:


       SMG$DELETE_LINE дисплей, номер строки [,число строк]


       Код возврата:


       Использование в МОС ВП: значение состояния





                           - 91 -

                       00152-01 33 09-4


       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей, с  которого  удаляются

  строки. Аргумент дисплей является  адресом  длинного  слова

  без знака, содержащего идентификатор дисплея.

       Указанный     аргумент     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет первую строку,  удаляемую  из  виртуального

  дисплея. Аргумент  номер  строки  является  адресом  целого

  длинного слова, содержащего номер первой удаляемой строки.







                           - 92 -

                       00152-01 33 09-4


       Число строк


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет число удаляемых  строк.  Аргумент  является

  адресом целого длинного слова со знаком, содержащего  число

  удаляемых строк.


       Описание.


       Процедура SMG$DELETE_LINE удаляет одну или более строк

  из виртуального  дисплея  и  продвигает  оставшиеся  строки

  вверх,  в  освободившееся   пространство.   Снизу   дисплей

  дополняется  строками  из  пробелов.   Виртуальный   курсор

  находится в позиции первой колонки, в строке,  определенной

  аргументом номер строки.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVROW

       - неверная строка;





                           - 93 -

                       00152-01 33 09-4


  SMG$_INVARG

       - неверный аргумент.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует использование процедуры SMG$DELETE_LINE.

  С-

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,
                             
     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY,

     1  SMG$PUT_CHARS, SMG$DELETE_LINE

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS, BORDER

  С+

  С  Создать виртуальный дисплей вызовом процедуры

  С  SMG$CREATE_VIRTUAL_DISPLAY. Чтобы дать его границу,

  С  установите BORDER = 1. Отсутствие границы - BORDER = о

  С-

        ROWS = 7

        COLUMNS = 50

        BORDER = 1

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, BORDER)

        IF  (.NOT. ISTATUS) WRITE (6, 900)

     1   'SMG$CREATE_VIRTUAL_DISPLAY', ISTATUS

  С+

  С  Вызвать процедуру SMG$CREATE_PASTEBOARD для создания




                           - 94 -

                       00152-01 33 09-4


  С  компоновочного пульта.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

        IF (.NOT. ISTATUS) WRITE (6,900)

     1   'SMG$CREATE_PASTEBOARD', ISTATUS

  С+

  С  Использовать процедуру SMG$PUT_CHARS для посылки

  С  данных в виртуальный дисплей.

  С-

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50

     1            COLUMNS. ',2, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS IS а BORDERED VIRTUAL DISPLAY.

     1            ', 4, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'SMG$PUT_CHARS PUTS DATA IN THIS

     1            VIRTUAL DISPLAY. ' , 6, 1)

  С+

  С  Прикрепить виртуальныйй дисплей к компоновочному пульту,

  С  используя процедуру SMG$PASTE_VIRTUAL_DISPLAY.

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY (DISPLAY1,

     1            PASTE1, 4, 15)

  900   FORMAT ( ' ROUTINE '. А, 'RETURNED а STATUS OF '.Z8)

  С+

  С  Вызвать процедуру SMG$DELETE_LINE для удаления




                           - 95 -

                       00152-01 33 09-4


  С  строк 3, 4 и 5.

  С-

        ISTATUS = SMG$DELETE_LINE ( DISPLAY1, 3, 3)

        END


       Вывод, полученный программой на языке программирования

  ФОРТРАН  перед  обращением  к  процедуре   SMG$DELETE_LINE,

  показан на рис. 5.


  ----------------------------------------------------------
  !  THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50 COLUMNS        !
  !                                                        !
  !  THIS IS а BORDERED VIRTUAL DISPLAY                    !
  !                                                        !
  !                                                        !
  !  SMG$PUT CHARS PUTS DATA IN THIS VIRTUAL DISPLAY       !
  ----------------------------------------------------------

                            Рис. 5


       Вывод,    полученный    после     вызова     процедуры

  SMG$DELETE_LINE, показан на рис. 6.


  ----------------------------------------------------------
  !  THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50 CLUMNS         !
  !                                                        !
  !  SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY       !
  ----------------------------------------------------------

                            Рис. 6




       1.22. SMG$DELETE_PASTEBOARD    -     удаление

             компоновочного пульта


       Процедура SMG$DELETE_PASTEBOARD удаляет  компоновочный

  пульт.





                           - 96 -

                       00152-01 33 09-4


       Формат:


       SMG$DELETE_PASTEBOARD идентификатор [,флаг]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слов (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  удаляемый  компоновочный  пульт.  Аргумент

  идентификатор является адресом длинного  слова  без  знака,

  содержащего идентификатор компоновочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Флаг


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение





                           - 97 -

                       00152-01 33 09-4


       Механизм: посредством ссылки


       Определяет, очищает ли рассматриваемая процедура экран

  после   удаления   определенного   компоновочного   пульта.

  Аргумент флаг является адресом длинного  слова  без  знака,

  которое  содержит  флаг.  Если  значение  равно  1,   экран

  очищается; если 0, экран не очищается. Если данный аргумент

  опущен, по умолчанию устанавливается очистка экрана.


       Описание.


       Процедура SMG$DELETE_PASTEBOARD выдает всю  информацию

  на   дисплей,   заканчивает   использование   определенного

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

  с этим компоновочным пультом.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор.


       Любые значения состояния возвращаются  через  $DASSGN,

  LIB$FREE_VM, LIB$FREE_EF или SMG$FLUSH_BUFFER.











                           - 98 -

                       00152-01 33 09-4


       1.23. SMG$DELETE_VIRTUAL_DISPLAY  -  удаление

             виртуального дисплея


       Процедура      SMG$DELETE_VIRTUAL_DISPLAY      удаляет

  виртуальный дисплей.


       Формат:


       SMG$DELETE_VIRTUAL_DISPLAY дисплей


       Код возвата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  удаляемый  виртуальный  дисплей.  Аргумент

  дисплей  является  адресом  длинного   слова   без   знака,

  содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.





                           - 99 -

                       00152-01 33 09-4


       Описание.


       Процедура      SMG$DELETE_VIRTUAL_DISPLAY      удаляет

  виртуальный дисплей и стирает его из любого  компоновочного

  пульта, к  которому  дисплей  прикреплен.  Процедура  также

  освобождает буферное пространство, связанное с  виртуальным

  дисплеем.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INDIS_ID

       - неверный аргумент дисплей;

  SMG$_WRONUMARG

       - неправильное число аргументов.

       Любые   значения    состояния    возвращаются    через

  LIB$FREE_VM



       1.24. SMG$DELETE_VIRTUAL_KEYBOARD -  удаление

             виртуальной клавиатуры


       Процедура     SMG$DELETE_VIRTUAL_KEYBOARD      удаляет

  виртуальную клавиатуру.


       Формат:


       SMG$DELETE_VIRTUAL_KEYBOARD  клавиатура









                           - 100 -

                       00152-01 33 09-4


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Клавиатура


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет удаляемую виртуальную клавиатуру.  Аргумент

  клавиатура  является  адресом  длинного  слова  без  знака,

  содержащего идентификатор клавиатуры.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_KEYBOARD.


       Описание.


       Процедура     SMG$DELETE_VIRTUAL_KEYBOARD      удаляет

  виртуальную  клавиатуру.   Любые   терминальные   признаки,

  определенные при создании клавиатуры, будут  установлены  в

  предыдущие значения, а режим клавиатуры будет установлен  в

  первоначальное состояние.  Переназначается  канал  и,  если

  виртуальная   клавиатура   является   файлом,    то    файл

  закрывается.



                           - 101 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_NOT_A_TRM

       - информационное  сообщение.  Устройство  не  является

         терминалом;

  SMG$_INVKBD_ID

       - неверный аргумент клавиатура;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.25. SMG$DISABLE_UNSOLICITED_INPUT         -

             невозможность незапрошенного ввода


       Процедура   SMG$DISABLE_UNSOLICITED_INPUT    запрещает

  вызов программ AST (асинхронного системного прерывания) для

  незапрошенного ввода.


       Формат:


       SMG$DISABLE_UNSOLICITED_INPUT  идентификатор


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения







                           - 102 -

                       00152-01 33 09-4


       Аргументы:


       Идентифкатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  клавиатуру   (связанную   с   определенным

  компоновочным  пультом),  для  которой  незапрошенный  ввод

  запрещается.  Аргумент   идентификатор   является   адресом

  длинного  слова  без   знака,   содержащего   идентификатор

  компоновочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Описание.


       Процедура   SMG$DISABLE_UNSOLICITED_INPUT    запрещает

  незапрошенный ввод для определенного компоновочного пульта.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор.






                           - 103 -

                       00152-01 33 09-4


       Любые значения состояния возвращаются через $QIOW.



       1.26. SMG$DRAW_LINE - вычерчивание линии


       Процедура SMG$DRAW_LINE вычерчивает горизонтальную или

  вертикальную линию.


       Формат:


       SMG$DRAW_LINE  дисплей, начальная строка,

                      начальная колонка, последняя строка,

                      последняя колонка [,видеопризнаки]

                      [,дополнение]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей,  на  котором  вычерчи-

  вается линия. Аргумент дисплей  является  адресом  длинного



                           - 104 -

                       00152-01 33 09-4


  слова без знака, содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Начальная строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет строку, с которой  начинается  вычерчивание

  линии. Аргумент начальная строка  является  адресом  целого

  длинного слова  со  знаком,  содержащего  номер  строки,  с

  которой начинается вычерчивание линии.


       Начальная колонка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет колонку, с которой начинается  вычерчивание

  линии. Аргумент начальная колонка является  адресом  целого

  длинного слова со  знаком,  содержащего  номер  колонки,  с

  которой начинается вычерчивание линии.


       Последняя строка


       Использование в МОС ВП: длинное слово со знаком




                           - 105 -

                       00152-01 33 09-4


       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  строку,  в  которой   вычерчивание   линии

  заканчивается. Аргумент  последняя  строка  является  целым

  длинным  словом  со  знаком,  содержащим  номер  строки,  в

  которой заканчивается вычерчивание линии.


       Последняя колонка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет колонку, в которой заканчивается вычерчива-

  ние линии.  Аргумент  последняя  колонка  является  адресом

  целого длинного слова со знаком, содержащего номер колонки,

  в которой заканчивается вычерчивание линии.


       Видеопризнаки                                  


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая  видеопризнаки  для  вычерчиваемой

  линии. Аргумент  видеопризнаки  является  адресом  длинного

  слова без знака, содержащего маску  видеопризнаков.  Каждый



                           - 106 -

                       00152-01 33 09-4


  признак в  аргументе  вызывает  установку  соответствующего

  действия на дисплее.


       Видеопризнаки, которыми можно управлять, следующие:

  SS$M_BLINK

       - дисплейное мерцание символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком.  Это

         значит     -     использование      противоположного

         установленному по умолчанию признака;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.


       Средство управления экраном прикладывает  видеопризнак

  к дополнительному признаку.  Используя  эти  два  агумента,

  вызывающая   программа   может   осуществлять   независимый

  контроль за каждым признаком в одном вызове.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая  видеопризнаки  для  вычерчиваемой

  линии. Аргумент дополнение является адресом длинного  слова

  без знака, содержащего  маску  видеопризнаков.  Каждый  бит



                           - 107 -

                       00152-01 33 09-4


  признака в аргументе  вызывает  установку  соответствующего

  действия  для  дисплея.   Видеопризнаки,   которыми   можно

  управлять такие же как для аргумента видеопризнаки.

       Действие, предпринимаемое средством управления экраном

  для различных комбинаций признаков, представленно в табл.2.

                                                    Таблица 2

  -----------------------------------------------------------

  Видеопризнаки ! Дополнение ! Действие

  -----------------------------------------------------------

     0          !   0        ! Признак не изменен

     1          !   0        ! Признак включен

     0          !   1        ! Признак установлен в дополне-

                !            ! ние к установленному по умол-

                !            ! чанию

     1          !   1        ! Признак выключен




       Описание.


       Процедура SMG$DRAW_LINE вычерчивает линию с  начальной

  позиции  до  конечной  позиции.  Можно   вычертить   только

  горизонтальную    или    вертикальную    линии.    Символы,

  используемые  для  вычерчивания  линии  зависят   от   типа

  терминала. Позиция виртуального курсора не изменяется.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;





                           - 108 -

                       00152-01 33 09-4


  SMG$_INVCOL

       - неверный  номер  колонки.  Определенная  колонка  за

         пределами виртуального дисплея;

  SMG$_INVROW

       - неверный  номер  строки.  Определенная   строка   за

         пределами виртуального дисплея;

  SMG$_DIALINNOT

       - диагональная линия не допускается;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует использование процедуры SMG$DRAW_LINE.

  С-

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$DRAW_LINE

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS, BORDER

  С+

  С  Во- первых, создать виртуальный дисплей, используя

  С  процедуру SMG$CREATE_VIRTUAL_DISPLAY. Чтобы дать его

  С  границу, установите BORDER = 1. Отсутствие границы




                           - 109 -

                       00152-01 33 09-4


  С  будет BORDER = 0.

  С-

        ROWS = 7

        COLUMNS = 50

        BORDER = 1

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, BORDER )

        IF (.NOT. ISTATUS) WRITE (6,900)

     1   'SMG$CREATE_VTRTUAL_DISPLAY', ISTATUS

  С+

  С  Вызвать процедуру SMG$CREATE_PASTEBOARD для

  С  создания компоновочного пульта.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

        IF (.NOT. ISTATUS) WRITE (6,900)

     1   'SMG$CREATE_PASTEBOARD', ISTATUS

  С+

  С  Нарисовать вертикальную линию, используя процедуру

  С  SMG$DRAW_LINE. Начать в строке 2, колонке 20.

  С  закончить в строке 6.

  С-

        ISTATUS = SMG$DRAW_LINE (DISPLAY1, 2, 20, 6, 20)

  С+

  С  Теперь использовать процедуру SMG$DRAW_LINE для

  С  рисования вертикальной линии. Начать в строке 6,

  С  колонке 40. Закончить в строке 2. Это подобно

  С  нарисованной выше линии, но эта линия рисуется в




                           - 110 -

                       00152-01 33 09-4


  С  обратном направлении.

  С-

        ISTATUS = SMG$DRAW_LINE (DISPLAY1, 6, 40, 2, 40)

  С+

  С  Нарисовать горизонтальную линию, вызывая опять

  С  процедуру SMG$DRAW_LINE. Начать в строке 4, колонке 8.

  С  закончить в колонке 50.

  С-

        ISTATUS = SMG$DRAW_LINE (DISPLAY1, 4, 8, 4, 50)

  С+

  С  Прикрепить виртуальный дисплей, используя процедуру

  С  SMG$PASTE_VIRTUAL_DISPLAY.

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY

     1            ( DISPLAY1, PASTE1, 4, 15)

  900   FORMAT (' ROUTINE ', А, 'RETURNED А STATUS OF '.Z8)

        END


       Вывод, полученный программой на языке программирования

  ФОРТРАН, показан на рис. 7.


  ----------------------------------------------------------
  !                                                        !
  !                       !                  !             !
  !                       !                  !             !
  !        ------------------------------------------------!
  !                       !                  !             !
  !                       !                  !             !
  !                                                        !
  ----------------------------------------------------------

                            Рис. 7






                           - 111 -

                       00152-01 33 09-4


       1.27. SMG$DRAW_RECTANGLE    -    вычерчивание

             прямоугольника


       Процедура        SMG$DRAW_RECTANGLE        вычерчивает

  прямоугольник.


       Формат:


       SMG$DRAW_RECTANGLE дисплей, первая строка,

                          первая колонка, вторая строка,

                          вторая колонка [,видеопризнаки]

                          [,дополнение]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей,  на  котором  вычерчи-

  вается прямоугольник.  Аргумент  дисплей  является  адресом

  длинного слова без знака, содержащего  идентификатор  дисп-



                           - 112 -

                       00152-01 33 09-4


  лея.

       Значение  данного  аргумента  возвращается  процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Первая строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком )

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   номер   строки   левого   верхнего   угла

  прямоугольника. Аргумент  первая  строка  является  адресом

  целого длинного слова со знаком, содержащего  номер  строки

  левого верхнего угла прямоугольника.


       Первая колонка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  номер   колонки   левого   верхнего   угла

  прямоугольника. Аргумент первая  колонка  является  адресом

  целого длинного слова со знаком, содержащего номер  колонки

  левого верхнего угла прямоугольника.


       Вторая строка


       Использование в МОС ВП: длинное слово со знаком




                           - 113 -

                       00152-01 33 09-4


       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   номер   строки   нижнего   правого   угла

  прямоугольника. Аргумент  вторая  строка  является  адресом

  целого длинного слова со знаком, содержащего  номер  строки

  нижнего правого угла прямоугольника.


       Вторая колонка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  номер   колонки   нижнего   правого   угла

  прямоуольника. Аргумент  вторая  колонка  является  адресом

  целого длинного слова со знаком, содержащего номер  колонки

  нижнего правого угла прямоугольника.


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая видеопризнаки вычерчиваемой линии.

  Аргумент видеопризнаки является адресом длинного слова  без

  знака,  содержащего  видеопризнаки.  Каждый  бит  в  данном



                           - 114 -

                       00152-01 33 09-4


  аргументе вызывает установку соответствующего  действия  на

  дисплее.


       Видеопризнаки, которыми можно управлять, следующие:

  SS$M_BLINK

       - дисплейное мерцание символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком.  Это

         значит     -     использование      противоположного

         установленному по умолчанию признака на  виртуальном

         дисплее;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.


       Если тот же самый бит установлен в аргументах  видеоп-

  ризнаки и дополнение, средство управления  экраном  исполь-

  зует аргумент дополнение вслед за аргументом  видеопризнаки

  используя эти два  аргумента,  вызывающая  программа  может

  осуществлять независимый контроль  за  каждым  признаком  в

  одном вызове.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки




                           - 115 -

                       00152-01 33 09-4


       Маска, обозначающая видеопризнаки вычерчиваемой линии.

  Аргумент дополнение является  адресом  длинного  слова  без

  знака,  содержащего  маску  видеопризнаков.  Каждый  бит  в

  аргументе вызывает установку соответствующего  действия  на

  виртуальном дисплее.

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

  в аргументе видеопризнаки.

       Действие, предпринимаемое средством управления экраном

  для различных комбинаций признаков, представленно  в  табл.

  3.

                                                    Таблица 3

  -----------------------------------------------------------

  Видеопризнаки ! Дополнение ! Действие

  -----------------------------------------------------------

        0       !     0      ! Признак неизменен

        1       !     0      ! Признак включен

        0       !     1      ! Признак установлен в

                !            ! дополнение к установленному

                !            ! по умолчанию

        1       !     1      ! Признак выключен




       Описание.


       Процедура SMG$DRAW_RECTANGLE вычерчивает прямоугольник

  на виртуальном дисплее. Прямоугольник дан позициями  левого

  верхнего угла и нижнего правого угла. Символы, используемые

  для рисования линий, составляющих прямоугольник, зависят от




                           - 116 -

                       00152-01 33 09-4


  типа терминала. Позиция виртуального курсора не изменяется.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INCOL

       - неверная позиция колонки.  Определенная  колонка  за

         пределами виртуального дисплея;

  SMG$_INVROW

       - неверная  позиция  строки.  Определенная  строка  за

         пределами виртуального дисплея;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует использование процедуры

  С  SMG$DRAW_RECTANGLE.

  С

  С  Эта процедура создает виртуальный дисплей и использует

  С  процедуру SMG$DRAW_RECTANGLE для рисования примоуголь-

  С  ника в пределах ограниченного виртуального дисплея.

  С -

  С +

  С  Включить SMG определения. В частности, нам нужно



                           - 117 -

                       00152-01 33 09-4


  С  SMG$M_BORDER.

  С-

        INCLUDE '($SMGDEF)'

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY,

     1  SMG$DRAW_RECTANGLE

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS

  С+

  С  Создать виртуальный дисплей с границей вызовом

  С  процедуры SMG$CREATE_VIRTUAL_DISPLAY.

  С-

        ROWS =7

        COLUMNS = 50

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

        IF (. NOT. ISTATUS) WRITE (6,900)

        'SMG$CREATE_VIRTUAL_DISPLAY', ISTATUS

  С+

  С  Использовать процедуру SMG$CREATE_PASTEBOARD для

  С  создания компоновочного пульта.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

        IF (.NOT. ISTATUS) WRITE (6,900)

        'SMG$CREATE_PASTEBOARD', ISTATUS

  С+

  С  Используя процедуру SMG$DRAW_RECTANGLE, нарисовать




                           - 118 -

                       00152-01 33 09-4


  С  прямоугольник в пределах ограниченной области.

  С-

        ISTATUS = SMG$DRAW_RECTANGLE (DISPLAY1, 2, 10, 6, 20)

  С+

  С  Прикрепить виртуальный дисплей вызовом процедуры

  С  SMG$PASTE_VIRTUAL_DISPLAY

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1,

     1            PASTE1, 4, 15)

  900   FORMAT (' ROUTINE ', а, 'RETURNED а STATUS OF ', Z8)

        END


       Вывод, полученный примером программы на языке програм-

  мирования ФОРТРАН, показан на рис. 8.


  ----------------------------------------------------------
  !                                                        !
  !                                                        !
  !     -----------------                                  !
  !     !               !                                  !
  !     !               !                                  !
  !     !               !                                  !
  !     !               !                                  !
  !     !               !                                  !
  !     -----------------                                  !
  !                                                        !
  !                                                        !
  ----------------------------------------------------------

                            Рис. 8














                           - 119 -

                       00152-01 33 09-4


       1.28. SMG$ENABLE_UNSOLICITED_INPUT          -

             возможность незапрошенного ввода


       Процедура  SMG$ENABLE_UNSOLICITED_INPUT  позволяет  по

  незапрошенному  вводу  вызывать  в  ответ   программу   AST

  (асинхронное системное прерывание).


       Формат:


       SMG$ENABLE_UNSOLICITED_INPUT  идентификатор,

                                     адрес [,аргумент]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   компоновочный   пульт,    для    которого

  становится возможным незапрошенный ввод. Аргумент идентифи-

  катор  является   адресом   длинного   слова   без   знака,

  содержащего идентификатор компоновочного пульта.



                           - 120 -

                       00152-01 33 09-4


       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Адрес


       Использование в МОС ВП: процедура AST

       Тип: входная маска процедуры

       Доступ: только чтение

       Механизм: посредством ссылки


       Адрес AST программы, вызываемой по незапрошенному вво-

  ду с терминала. Аргумент адрес является адресом программной

  маски процедуры, что означает адрес самой программы.


       Аргумент


       Использование в МОС ВП: аргумент пользователя

       Тип: неопределенный

       Доступ: только чтение

       Механизм: посредством значения


       Значение,   передаваемое   AST   программе.   Аргумент

  содержит значение, передаваемое AST программе.


       Описание.


       Процедура  SMG$ENABLE_UNSOLICITED_INPUT  позволяет  по

  незапрошенному вводу вызывать AST программу  с  аргументами

  идентификатор  и  аргумент.  Данная  процедура  не   читает

  входных символов, она  просто  вызывает  AST  программу,  в

  которой    чтение    будет     исходить     от     процедур




                           - 121 -

                       00152-01 33 09-4


  SMG$READ_COMPOSED_LINE, SMG$READ_KEYSTROKE, SMG$READ_STRING

  или SMG$READ_VERIFY.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVPBD_ID

       - неверный аргумент идентификатор.

       Любые значения состояния возвращаются через $QIOW.



       1.29. SMG$END_DISPLAY_UPDATE - вывод  дисплея

             из пакетного режима


       Процедура  SMG$END_DISPLAY_UPDATE  завершает  пакетный

  режим работы для виртуального дисплея.


       Формат:


       SMG$END_DISPLAY_UPDATE  дисплей


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения








                           - 122 -

                       00152-01 33 09-4


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет действующий виртуальный  дисплей.  Аргумент

  дисплей  является  адресом  длинного   слова   без   знака,

  содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Описание.


       Процедуры           SMG$END_DISPLAY_UPDATE           и

  SMG$BEGIN_DISPLAY_UPDATE  работают  вместе  для  управления

  пакетным режимом  вывода  на  данном  виртуальном  дисплее.

  Каждый вызов процедуры SMG$BEGIN_DISPLAY_UPDATE увеличивает

  "счетчик  пакета  ",  тогда  как  каждый  вызов   процедуры

  SMG$END_DISPLAY_UPDATE уменьшает его.  Когда  этот  счетчик

  достигнет 0, виртуальный дисплей будет записан на экран.

       Вызов процедуры SMG$END_DISPLAY_UPDATE, когда "счетчик

  пакета"   равен   0,   является   разрешенной    операцией;

  возвращается успешное состояние.









                           - 123 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_BATWASOFF

       - успешное завершение. Пакетный режим уже был включен;

  SMG$BATSTIPRO

       - успешное завершение. Пакетный режим еще включен;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.30. SMG$END_PASTEBOARD_UPDATE    -    вывод

             компоновочного  пульта   из   пакетного

             режима


       Процедура SMG$END_PASTEBOARD_UPDATE заканчивает пакет-

  ный режим работы для компоновочного пульта.


       Формат:


       SMG$END_PASTEBOARD_UPDATE  идентификатор


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения





                           - 124 -

                       00152-01 33 09-4


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   компоновочный   пульт,    для    которого

  уменьшается  "счетчик   пакета".   Аргумент   идентификатор

  является адресом  длинного  слова  без  знака,  содержащего

  идентификатор компоновочного пульта.

       Значение  данного  аргумента  возвращается  процедурой

  SMG$CREATE_PASTEBOARD.

       Если "счетчик пакета" достигает 0, весь буферизованный

  вывод для определенного компоновочного пульта выводится  на

  экран.


       Описание.


       Процедуры         SMG$END_PASTEBOARD_UPDATE          и

  SMG$BEGIN_PASTEBOARD_UPDATE работают вместе для  управления

  пакетным режимом вывода для данного компоновочного  пульта.

  Каждый    вызов    процедуры    SMG$BEGIN_PASTEBOARD_UPDATE

  увеличивает  "счетчик  пакета",  тогда  как  каждый   вызов

  процедуры SMG$END_PASTEBOARD_UPDATE  его  уменьшает.  Когда

  "счетчик   пакета"   достигнет   0,   компоновочный   пульт

  записывается на экран.





                           - 125 -

                       00152-01 33 09-4


       Вызов   процедуры   SMG$END_PASTEBOARD_UPDATE,   когда

  "счетчик пакета" равен 0, является  разрешенной  операцией;

  возвращается успешное состояние.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_BATWASOFF

       - успешное завершение. Пакетный режим уже  был  выклю-

         чен;

  SMG$_BATSTIPRO

       - успешное завершение. Пакетный режим еще в действии;

  SMG$_INVDIS_ID

       - неверный аргумент идентификатор;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.31. SMG$ERASE_CHARS - стирание символов  на

             виртуальном дисплее


       Процедура   SMG$ERASE_CHARS   стирает    символы    на

  виртуальном дисплее путем замены их пробелами.


       Формат:


       SMG$ERASE_CHARS  дисплей, число символов,

                        номер строки, номер колонки








                           - 126 -

                       00152-01 33 09-4


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей, на  котором  стираются

  символы. Аргумент дисплей является адресом  длинного  слова

  без знака, содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Число символов


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  число  символов,  заменяемых  на  пробелы.

  Аргумент число символов является  адресом  целого  длинного




                           - 127 -

                       00152-01 33 09-4


  слова  со  знаком,  которое   содержит   число   заменяемых

  пробелами символов.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  строку,  в  которой  начинается   операция

  стирания. Аргумент номер  строки  является  адресом  целого

  длинного слова со знаком, содержащего номер строки, опреде-

  ляющего начало стирания.


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  колонку,  в  которой  начинается  операция

  стирания. Аргумент номер колонки  является  адресом  целого

  длинного слова со  знаком,  содержащего  номер  колонки,  в

  которой начинается стирание.


       Описание.


       Процедура   SMG$ERASE_CHARS   стирает    символы    на

  виртуальном дисплее путем замены их  пробелами.  Остающийся




                           - 128 -

                       00152-01 33 09-4


  на  дисплее  текст  не  перемещается.   Операция   стирания

  ограничена  определенной  строкой.  Если   число   символов

  больше,  чем  число  символов,  остающихся  в  строке,   то

  стираются все символы,  начиная  с  определенной  начальной

  позиции, до конца. Процедура  оставляет  курсор  в  позиции

  первого стертого символа.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVROW

       - неверная строка;

  SMG$_INVCOL

       - неверная колонка.


       Пример.


  С+

  С  Этот пример на языке программирования ФОРТРАН

  С  демонстрирует использование процедуры SMG$ERASE_CHARS.

  С

  С  Включить SMG определения. В частности, нам нужно

  С  SMG$M_BORDER.

  С-

        INCLUDE '($SMGDEF)'



                           - 129 -

                       00152-01 33 09-4


        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY,

     1  SMG$PUT_CHARS, SMG$ERASE_CHARS

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS

  С+

  С  Создать виртуальный дисплей с границей вызовом

  С  процедуры SMG$CREATE_VIRTUAL_DISPLAY.

  С-

        ROWS = 7

        COLUMNS = 50

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

  С+

  С  Вызвать процедуру SMG$CREATE_PASTEBOARD для создания

  С  компоновочного пульта.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

  С+

  С  Используя процедуру SMG$PUT_CHARS, послать данные в

  С  виртуальный дисплей.

  С-

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1            'THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50

     1            COLUMNS.', 2, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS IS а BORDERED VIRTUAL DISPLAY.




                           - 130 -

                       00152-01 33 09-4


     1            ', 4, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL

     1            DISPLAY.', 6, 1)

  С+

  С  Вызвать процедуру SMG$PASTE_VIRTUAL_DISPLAY для

  С  прикрепления виртуального дисплея.

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY (DISPLAY1,

     1            PASTE1, 4, 15)

  С+

  С  Стереть 4 символа в строке 4, начиная с символа

  С  ( колонки ) 14, вызовом процедуры SMG$ERASE_CHARS.

  С  это удалит символы "RDER" из слова " BORDERED ".

  С-

          ISTATUS = SMG$ERASE_CHARS (DISPLAY1, 4, 4, 14)

  END


       Начальный вывод, полученный программой на языке  прог-

  раммирования ФОРТРАН, показан на рис. 9.


  +--------------------------------------------------------+
  !                                                        !
  !  THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50 COLUMNS        !
  !                                                        !
  !  THIS IS А BORDERED VIRTUAL DISPLAY                    !
  !                                                        !
  !  SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY       !
  !                                                        !
  +--------------------------------------------------------+

                            Рис. 9






                           - 131 -

                       00152-01 33 09-4


       Вывод,    полученный    после     вызова     процедуры

  SMG$ERASE_CHARS, показан на рис. 10.


  +--------------------------------------------------------+
  !                                                        !
  !  THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50 COLUMNS        !
  !                                                        !
  !  THIS IS а во    ED VIRTUAL DISPLAY                    !
  !                                                        !
  !  SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY       !
  !                                                        !
  +--------------------------------------------------------+

                           Рис. 10




       1.32. SMG$ERASE_DISPLAY      -       стирание

             виртуального дисплея


       Процедура SMG$ERASE_DISPLAY  стирает  весь  или  часть

  виртуального   дисплея   путем   замены   символов   текста

  пробелами.


       Формат:


       SMG$ERASE_DISPLAY  дисплей [,начальная строка]

                          [,начальная колонка]

                          [,последняя строка]

                          [,последняя колонка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (со знаком)

       Доступ: только запись





                           - 132 -

                       00152-01 33 09-4


       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  стираемый  виртуальный  дисплей.  Аргумент

  дисплей  является  адресом  длинного   слова   без   знака,

  содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Начальная строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  строку,  с  которой  начинается   операция

  стирания. Аргумент начальная строка является адресом целого

  длинного слова  со  знаком,  содержащего  номер  строки,  с

  которой начинается стирание.

       Если данный аргумент не определен, аргумент  начальная

  колонка также игнорируется  и  стирается  весь  виртуальный

  дисплей.



                           - 133 -

                       00152-01 33 09-4


       Начальная колонка


       Использование в в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком )

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  колонку,  с  которой  начинается  операция

  стирания.  Аргумент  начальная  колонка  является   адресом

  целого длинного слова со знаком, содержащего номер колонки,

  с которой начинается стирание.

       Если данный аргумент не определен, то аргумент началь-

  ная строка также игнорируется и стирается весь  виртуальный

  дисплей.


       Последняя строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  строку,  в   которой   операция   стирания

  заканчивается. Аргумент последняя строка  является  адресом

  целого длинного слова со  знаком,  которое  содержит  номер

  последней стираемой строки.

       Если данный аргумент не определен, то аргумент послед-

  няя  строка  также  игнорируется   и   все   оставшиеся   в

  виртуальном дисплее строки стираются.





                           - 134 -

                       00152-01 33 09-4


       Последняя колонка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  колонку,  в  которой   операция   стирания

  заканчивается. Аргумент последняя колонка является  адресом

  целого длинного слова со  знаком,  которое  содержит  номер

  последней стираемой колонки.

       Если данный аргумент не определен, то аргумент послед-

  няя  строка  также  игнорируется   и   все   оставшиеся   в

  виртуальном дисплее колонки стираются.


       Описание.


       Процедура SMG$ERASE_DISPLAY  стирает  весь  или  часть

  виртуального   дисплея   путем   замены   символов   текста

  пробелами. Начальная позиция по умолчанию устанавливается в

  позицию 1,1. Последняя позиция по умолчанию устанавливается

  в  последнюю  строку  или  колонку.  Таким  образом,  чтобы

  стереть весь виртуальный дисплей, необходимо указать только

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

  свободная  позиция  после  стертой.  Если  стирается   весь

  дисплей, то виртуальный курсор находится в позиции 1,1.










                           - 135 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVCOL

       - неверный  номер  колонки.  Определенная  колонка  за

         пределами дисплея;

  SMG$_INVROW

       - неправильная позиция строки, определенная строка  за

         пределами виртуального дисплея;

  SMG$_WRONUMARG

       - неправильное число аргументов.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  иллюстрирует использование процедуры SMG$ERASE_DISPLAY.

  С-

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY,

     1  SMG$PUT_CHARS, SMG$ERASE_DISPLAY

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS, BORDER

  С+

  С  Вызвать процедуру SMG$CREATE_VIRTUAL_DISPLAY для

  С  создания виртуального дисплея. Чтобы дать его границу,




                           - 136 -

                       00152-01 33 09-4


  С  установить BORDER = 1. Отсутствие границы будет

  С  BORDER = 0.

  С-

        ROWS = 7

        COLUMNS = 50

        BORDER = 1

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            ( ROWS, COLUMNS, DISPLAY1, BORDER )

        IF (.NOT. ISTATUS) WRITE (6. 900)

     1   ' SMG$CREATE_VIRTUAL_DISPLAY', ISTATUS

  С+

  С  Используя процедуру SMG$CREATE_PASTEBOARD, создать

  С  компоновочный пульт.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

        IF (.NOT. ISTATUS) WRITE (6, 900)

     1   'SMG$CREATE_PASTEBOARD', ISTATUS

  С+

  С  Вызвать процедуру SMG$PUT_CHARS для посылки данных

  С  в виртуальный дисплей.

  С-

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50

     1            COLUMNS.', 2, 1)

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1            'THIS IS а BORDERED VIRTUAL DISPLAY.

     1            ', 4, 1)




                           - 137 -

                       00152-01 33 09-4


        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL

     1            DISPLAY. ', 6, 1)

  С+

  С  Прикрепить виртуальный дисплей, вызовом процедуры

  С  SMG$PASTE_VIRTUAL_DISPLAY.

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1,

     1            PASTE1, 4, 15)

  900   FORMAT (' ROUTINE '. А, 'RETURNED А STATUS OF ',Z8)

  С+

  С  Вызвать процедуру SMG$ERASTE_DISPLAY для стирания

  С  дисплея со строки 2, колонки 6 до строки 4,

  С  колонки 28.

  С-

        ISTATUS = SMG$ERASE_DISPLAY (DISPLAY1, 2, 6, 4, 28)

        END


       Начальный вывод, полученный программой на языке  прог-

  раммирования ФОРТРАН, показан на рис. 11.


  +--------------------------------------------------------+
  !                                                        !
  !  THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50 COLUMNS        !
  !                                                        !
  !  THIS IS а BORDERED VIRTUAL DISPLAY                    !
  !                                                        !
  !  SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY       !
  !                                                        !
  +--------------------------------------------------------+

                           Рис. 11






                           - 138 -

                       00152-01 33 09-4


       Вывод,    полученный    после     вызова     процедуры

  SMG$ERASE_DISPLAY показан на рис. 12.


  +--------------------------------------------------------+
  !                                                        !
  !  THIS                                                  !
  !                                                        !
  !                            DISPLAY                     !
  !                                                        !
  !  SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY       !
  !                                                        !
  +--------------------------------------------------------+

                           Рис. 12




       1.33. SMG$ERASE_LINE - стирание строки


       SMG$ERASE_LINE процедура стирает всю или часть  строки

  в виртуальном дисплее.


       Формат:


       SMG$ERASE_LINE  дисплей [,номер строки]

                       [,номер колонки]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения











                           - 139 -

                       00152-01 33 09-4


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   задействованный   виртуальный    дисплей.

  Аргумент дисплей является адресом длинного слова без знака,

  содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком )

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  строку,  в   которой   операция   стирания

  начинается. Аргумент номер строки является  адресом  целого

  длинного слова  со  знаком,  содержащего  номер  строки,  в

  которой начинается стирание. Если данный  аргумент  опущен,

  то аргумент номер колонки также игнорируется и используется

  текущая позиция курсора.








                           - 140 -

                       00152-01 33 09-4


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  колонку,  в  которой  начинается  операция

  стирания. Аргумент номер колонки  является  адресом  целого

  длинного слова со  знаком,  содержащего  номер  колонки,  в

  которой начинается стирание. Если данный  аргумент  опущен,

  то аргумент номер колонки также игнорируется и используется

  текущая позиция курсора.


       Описание.


       Процедура SMG$ERASE_LINE  стирает  строку,  начиная  с

  определеной позиции до конца  строки.  Если  не  определена

  начальная позиция, SMG$ERASE_LINE стирает текст  с  текущей

  позиции виртуального курсора до конца  строки.  Виртуальный

  курсор остается в позиции первого  пробела  после  стертого

  текста.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент;







                           - 141 -

                       00152-01 33 09-4


  SMG$_INVCOL

       - неверный  номер  колонки.  Определенная  колонка  за

         пределами виртуального дисплея;

  SMG$_INVROW

       - неверный  номер  строки.  Определенная   строка   за

         пределами виртуального дисплея;

  SMG$_WRONUMARG

       - неправильное число аргументов.


       Пример.


  С+

  С  данный пример программы на языке программирования

  С  ФОРТРАН демонстрирует использование процедуры

  С  SMG$ERASE_LINE.

  С-

        INCLUDE '($SMGDEF)'

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$PUT_CHARS,

     1  SMG$ERASE_DISPLAY

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS

  С+

  С  Использовать процедуру SMG$CREATE_VIRTUAL_DISPLAY для

  С  создания виртуального дисплея с границей.

  С-

        ROWS = 7

        COLUMNS = 50




                           - 142 -

                       00152-01 33 09-4


        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

        IF (.NOT. ISTATUS) WRITE (6, 900)

     1   'SMG$CREATE_VIRTUAL_DISPLAY', ISTATUS

  С+

  С  Вызвать процедуру SMG$CREATE_PASTEBOARD для создания

  С  компоновочного пульта.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

        IF (.NOT. ISTATUS) WRITE (6. 900)

     1   'SMG$CREATE_PASTEBOARD', ISTATUS

  С+

  С  Послать данные в виртуальный дисплей вызовом процедуры

  С  SMG$PUT_CHARS.

  С-

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50

     1            COLUMNS.', 2, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS IS а BORDERED VIRTUAL DISPLAY.

     1            ', 4, 1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'SMG$PUT_CHARS PUTS DATA IN THIS

     1            VIRTUAL DISPLAY.', 6, 1)

  С+

  С  Использовать процедуру SMG$PASTE_VIRTUAL_DISPLAY для

  С  прикрепления виртуального дисплея.




                           - 143 -

                       00152-01 33 09-4


  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1,

     1            PASTE1, 4, 15)

  900   FORMAT (' ROUTINE ', а, 'RETURNED а STATUS OF ',Z8)

  С+

  С  Вызвать процедуру SMG$ERASE_LINE для стирания строки

  С  2, затем вызвать снова для стирания последних 4 слов

  С  в строке 4.

  С-

        ISTATUS = SMG$ERASE_LINE ( DISPLAY1, 2, 1)

        ISTATUS = SMG$ERASE_LINE ( DISPLAY1, 4, 9)

        END


       Начальный вывод, полученный программой на языке  прог-

  раммирования ФОРТРАН, показан на рис. 13.


  +--------------------------------------------------------+
  !                                                        !
  !  THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50 COLUMNS        !
  !                                                        !
  !  THIS IS А BORDERED VIRTUAL DISPLAY                    !
  !                                                        !
  !  SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY       !
  !                                                        !
  +--------------------------------------------------------+

                           Рис. 13


       Вывод,    полученный    после     вызова     процедуры

  SMG$ERASE_LINE, показан на рис. 14.











                           - 144 -

                       00152-01 33 09-4


  +--------------------------------------------------------+
  !                                                        !
  !                                                        !
  !                                                        !
  ! THIS  IS                                               !
  !                                                        !
  ! SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY        !
  !                                                        !
  +--------------------------------------------------------+

                           Рис. 14




       1.34. SMG$ERASE_PASTEBOARD     -     стирание

             компоновочного пульта


       Процедура SMG$ERASE_PASTEBOARD  стирает  компоновочный

  пульт; Это значит - очищает экран.


       Формат:


       SMG$ERASE_PASTEBOARD  идентификатор


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)





                           - 145 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  стираемый  компоновочный  пульт.  Аргумент

  идентификатор является адресом длинного  слова  без  знака,

  содержащего идентификатор компоновочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Описание.


       Процедура  SMG$ERASE_PASTEBOARD  стирает  определенный

  компоновочный пульт. Физический курсор находится в  позиции

  1,1. Если виртуальные дисплеи прикреплены к  компоновочному

  пульту, они будут перезаписаны, когда  средство  управления

  экраном будет использоваться в следующий раз для вывода  на

  компоновочный пульт.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор.












                           - 146 -

                       00152-01 33 09-4


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует, как использовать процедуру

  С  SMG$CREATE_VIRTUAL_DISPLAY.

  С-

        IMPLICIT INTEGER*4 (A-Z)

        CHARACTER*80   OUT_STR, TRIM_STR

        CHARACTER*18    PROMPT    /'пожалуйста, введите

     1  данные'/

        SMG$_BOLD = 1

        SMG$M_REVERSE = 2

        SMG$M_BLINK = 4

        SMG$M_UNDERLINE = 8

  С+

  С  Установить терминальную клавиатуру как виртуальную

  С  вызовом процедуры SMG$CREATE_VIRTUAL_KEYBOARD.

  С -

        STATUS = SMG$CREATE_VIRTUAL_KEYBOARD (KEYBOARD_ID,,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL (STATUS))

  С+

  С  Установить экран терминала, как компоновочный пульт,

  С  используя процедуру SMG$CREATE_PASTEBOARD.

  С-

        STATUS = SMG$CREATE_PASTEBOARD (NEW_PID,,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+



                           - 147 -

                       00152-01 33 09-4


  С  Установить область виртуального дисплея вызовом

  С  процедуры SMG$CREATE_VIRTUAL_DISPLAY.

  С-

        STATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1           (5, 80, DISPLAY_ID,,,)

        IF (.NOT. STATUS) CALL LIB$STOP (%VAL (STATUS))

  С+

  С  Прикрепить виртуальный дисплей к экрану,

  С  начиная в строке 10, колонке 15. Для

  С  прикрепления виртуального дисплея использовать

  С  процедуру SMG$PASTE_VIRTUAL_DISPLAY.

  С-

        STATUS = SMG$PASTE_VIRTUAL_DISPLAY (DISPLAY_ID,

     1           NEW_PID, 10, 15)

        IF (.NOT.STATUS) CALL LIB$STOP (%VAL (STATUS))

  С+

  С  Подсказка пользователю для ввода, принять этот вывод,

  С  используя процедуру SMG$READ_STRING.

  С-

        STATUS = SMG$READ_STRING (KEYBOARD_ID,

     1           OUT_STR, PROMPT,,,,,,,)

        IF (.NOT. STATUS) CALL LIB$STOP (%VAL(STATUS))

  С+

  С Очистить экран, используя процедуру SMG$ERASE_PASTEBOARD

  С-

        STATUS = SMG$ERASE_PASTEBOARD (NEW_PID)

        IF (.NOT. STATUS) CALL LIB$STOP (%VAL(STATUS))




                           - 148 -

                       00152-01 33 09-4


  С+

  С  Привести в порядок все заканчивающие пробелы в

  С  пользовательском вводе, используя процедуру STR$TRIM.

  С-

        STATUS = STR$TRIM (TRIM_STR, OUT_STR, STR_LEN)

        IF (.NOT STATUS) CALL LIB$STOP (%VAL(STATUS))

  С+

  С  Отобразить введенные пользователем данные, используя

  С  процедуру SMG$PUT_CHARS и процедуру SMG$PUT_LINE

  С-

        STATUS = SMG$PUT_CHARS (DISPLAY_ID,'YOU ENTERED:',,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL STATUS))

        STATUS = SMG$PUT_LINE(DISPLAY_ID,TRIM_STR(1:STR_LEN),

     1           SMG$M_REVERSE, 0,,)

        IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

        END


       Программа на языке программирования  ФОРТРАН  вызывает

  процедуры управления экраном  для  формирования  вывода  на

  экран и отображения пользовательского ввода.



       1.35. SMG$FIND_CURSOR_DISPLAY     -     поиск

             дисплея, с  которым  связан  физический

             курсор


       Процедура      SMG$FIND_CURSOR_DISPLAY      возвращает

  идентификатор самого последнего прикрепленного виртуального

  дисплея, с которым связан физический курсор.




                           - 149 -

                       00152-01 33 09-4


       Формат:


       SMG$FIND_CURSOR_DISPLAY  идентификатор, дисплей


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: плосредством ссылки


       Определяет компоновочный пульт (физический  экран),  в

  котором находится курсор. Аргумент  идентификатор  является

  адресом длинного слова без знака, содержащего идентификатор

  компоновочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)





                           - 150 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством ссылки


       Принимает значение идентификатора дисплея,  в  котором

  находится  курсор.  Аргумент   дисплей   является   адресом

  длинного слова, в которое записывается идентификатор  дисп-

  лея.


       Описание.


       Процедура SMG$FIND_CURSOR_DISPLAY определяет виртуаль-

  ный дисплей на компоновочном пульте, чей курсор  соответст-

  вует физическому курсору экрана. Процедура возвращает иден-

  тификатор  самого  последнего  прикрепленного  виртуального

  дисплея. Если никакой из виртуальных дисплеев не  связан  с

  физическим курсором, то процедура возвращает 0, что являет-

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


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;

  SMG$_WRONUMARG

       - неправильное число аргументов.












                           - 151 -

                       00152-01 33 09-4


       1.36. SMG$FLUSH_BUFFER - считывание буфера


       Процедура     SMG$FLUSH_BUFFER     считывает      весь

  буферизованный вывод на терминал.


       Формат:


        SMG$FLUSH_BUFFER  идентификатор


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   компоновочный   пульт   для   считывания.

  Аргумент идентификатор является адресом длинного слова  без

  знака, содержащего идентификатор компоновочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.







                           - 152 -

                       00152-01 33 09-4


       Описание.


       Процедура SMG$FLUSH_BUFFER вызывает немедленное считы-

  вание всего буферизованного вывода на  терминал.  Указанная

  процедура обычно  вызывается  перед  выполнением  некоторых

  интенсивных вычислений центрального процессора  или,  когда

  экран терминала должен быть обновлен.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор.



       1.37. SMG$GET_BROADCAST_MESSAGE  -  получение

             передаваемого сообщения


       Процедура SMG$GET_BROADCAST_MESSAGE  определяет  будет

  ли  передаваться  сообщение   в   компоновочный   пульт   и

  возвращает сообщение.


       Формат:


       SMG$GET_BROADCAST_MESSAGE  идентификатор [,сообщение]

                                  [,длина]









                           - 153 -

                       00152-01 33 09-4


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  терминал,  проверяемый  для  представления

  передаваемого сообщения.  Аргумент  идентификатор  является

  адресом длинного слова без знака, содержащего идентификатор

  компоновочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Сообщение


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только запись

       Механизм: посредством дескриптора


       Строка, которая принимает передаваемое сообщение, если




                           - 154 -

                       00152-01 33 09-4


  такое сообщение имеет место.  Аргумент  сообщение  является

  адресом  дескриптора,  указывающего   память,   в   которую

  записывается текст сообщения. Если данный аргумент  опущен,

  передаваемое сообщение отбрасывается.


       Длина


       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает    действительную    длину     передаваемого

  сообщения. Аргумент длина является адресом слова, в которое

  записывается длина сообщения.


       Описание.


       Процедура SMG$GET_BROADCAST_MESSAGE определяет,  будет

  ли передаваться сообщение на  определенный  терминал  в  то

  время, когда имеет место прерывание, и  если  это  так,  то

  возвращает сообщение через аргумент сообщение. Если не было

  сообщения  на  терминал,  процедура  возвращает   состояние

  SMG$_NO_MORMSG.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_NO_MORMSG

       - успешное завершение. Никаких сообщений не было;




                           - 155 -

                       00152-01 33 09-4


  SMG$_WRONUMARG

       - неправильное число агументов;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор.


       Любые   значения    состояния    возвращаются    через

  LIB$SCOPY_DXDX.



       1.38. SMG$GET_CHAR_AT_PHYSICAL_CURSOR       -

             возвращение  символа,  находящегося   в

             позиции курсора


       Процедура  SMG$GET_CHAR_AT_PHYSICAL_CURSOR  возвращает

  символ, находящийся в текущей позиции физического курсора.


       Формат:


       SMG$GET_CHAR_AT_PHYSICAL_CURSOR  идентификатор, символ


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака





                           - 156 -

                       00152-01 33 09-4


       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет компоновочный пульт, на котором  выбирается

  символ. Аргумент идентификатор  является  адресом  длинного

  слова без знака, содержащего  идентификатор  компоновочного

  пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Символ


       Использование в МОС ВП: байт без знака

       Тип: байт (без знака )

       Доступ: только запись

       Механизм: посредством ссылки


       Код возвращаемого символа.  Аргумент  символ  является

  адресом байта без  знака,  в  который  записывается  код  в

  КОИ-8.


       Описание.


       Процедура   SMG$GET_CHAR_PHYSICAL_CURSOR    возвращает

  символ, занимающий текущую позицию физического  курсора  на

  экране.

       Примечание.  Если  средство  управления   экраном   не

  записало на экран элемента,  с  которым  связан  физический

  курсор, тогда содержание этой позиции  неизвестно.  В  этом




                           - 157 -

                       00152-01 33 09-4


  случае возвращается шестнадцатеричное значение FF.

       Если возвращаемыи символ имеет значение в КОИ-8 меньше

  20 (шестнадцатеричного), тогда символ является непечатаемым

  символом.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVPAS_ID

       - неверныи аргумент идентификатор.



       1.39. SMG$GET_DISPLAY_ATTR    -     получение

             дисплейных признаков



       Процедура  SMG$GET_DISPLAY_ATTR  возвращает  признаки,

  связанные с виртуальным дисплеем.


       Формат:


       SMG$GET_DISPLAY_ATTR дисплей, высота, ширина

                            [,признаки] [,видиопризнаки]

                            [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)





                           - 158 -

                       00152-01 33 09-4


       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   виртуальный   дисплей,    для    которого

  запрашивается информация. Аргумент дисплей является адресом

  длинного слова без знака, содержащего  идентификатор  дисп-

  лея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Высота


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает  число  строк  в  дисплее.  Аргумент  высота

  является адресом целого длинного слова со знаком, в которое

  записывается число строк.







                           - 159 -

                       00152-01 33 09-4


       Ширина


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает число колонок  в  дисплее.  Аргумент  ширина

  является адресом целого длинного слова со знаком, в которое

  записывается число колонок в дисплее.


       Признаки


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает текущие установленные по умолчанию  признаки

  (например,  SMG$M_BORDER).   Аргумент   признаки   является

  адресом длинного слова без знака,  в  которое  записываются

  текущие дисплейные признаки.


       Видеопризнаки


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает   текущие   установленные    по    умолчанию




                           - 160 -

                       00152-01 33 09-4


  видеопризнаки.  Аргумент  видеопризнаки  является   адресом

  длинного слова без знака, в  которое  записываются  текущие

  видеопризнаки.


       Разрешенными видеопризнаками являются следующие:

  SMG$M_BLINK

       - дисплейное мерцание символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видиопризнаком.  Это

         значит - использование обратного  установленному  по

         умолчанию признака на виртуальном дисплее;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.


       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка  является  адресом  длинного  слова  без   знака,

  которое  определяет   символьную   установку.   Разрешенным

  является    только    значение     SMG$C_ASCII,     которое

  устанавливается по умолчанию.




                           - 161 -

                       00152-01 33 09-4


       Описание.


       Процедура  SMG$GET_DISPLAY_ATTR  возвращает   признаки

  виртуального дисплея.


       Возвращаемые значения состояния:

  SS$_NORMAL
     
       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверныи аргумент дисплей;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.40. SMG$GET_KEY_DEF - получение  клавишного

             определения


       Процедура   SMG$GET_KEY_DEF    возвращает    клавишное

  определение для определенной клавиши.


       Формат:


        SMG$GET_KEY_DEF таблица, наименование

                        [,строка состояния] [,признаки]

                        [,эквивалентная строка]

                        [,строка нового состояния]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись



                           - 162 -

                       00152-01 33 09-4


       Механизм: посредством значения


       Аргументы:


       Таблица


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет клавишную таблицу,  из  которой  выделяется

  определение. Аргумент  таблица  является  адресом  длинного

  слова  без  знака,  содержащего   идентификатор   клавишной

  таблицы.   Значение   аргумента   возвращается   процедурой

  SMG$CREATE_KEY_TABLE.


       Наименование


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Определяет  имя  клавиши,  связанное  с  определением.

  Аргумент   наименование   является   адресом   дескриптора,

  указывающего наименование клавиши.


       Строка состояния


       Использование в МОС ВП: строка символов

       Тип: строка символов



                           - 163 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством дескриптора


       Определяет имя деиствующего состояния в период нажатия

  клавиши.  Аргумент  строка   состояния   является   адресом

  дескриптора, указывающего имя состояния.

       Смотрите описание процедуры SMG$ADD_KEY_DEF для  полу-

  чения большей информации.


       Признаки


        Использование в МОС ВП: длинное слово маски

        Тип: длинное слово (без знака)

        Доступ: только запись

        Механизм: посредством ссылки


       Принимает  битовую  маску  признаков  для   клавишного

  определения. Аргумент признаки  является  адресом  длинного

  слова, в которое записывается  битовая  маска,  описывающая

  клавишные признаки.


       Разрешенными являются следующие значения:

  SMG$V_KEY_NOECHO

       - если бит установлен, он определяет, что  эквивалент-

         ная строка не будет отражена при  нажатии  указанной

         клавиши.  Если  SMG$V_KEY_TEPMINATE  не  установлен,

         SMG$V_KEY_NOECHO игнорируется;

  SMG$V_KEY_TERMINATE

       - если бит установлен, он определяет, что при  нажатии

         на указанную клавишу, входная строка заканчивается и



                           - 164 -

                       00152-01 33 09-4


         больше не будет принято символов. Если  чист,  может

         быть принято больше символов;

  SMG$V_KEY_LOCKSTATE

       - если бит установлен и определена строка нового  сос-

         тояния, то имя состояния, определенного  посредством

         указанной строки, остается текущим состоянием до тех

         пор, пока оно не будет явно изменено. Если чист,  то

         имя сотояния остается в действии только до следующе-

         го нажатия клавиши;

  SMG$V_KEY_PROTECTED

       - если бит установлен, клавишное определение не  может

         быть изменено  или  удалено.  Если  чист,  клавишное

         определение может быть изменено или удалено.


       Эквивалентная строка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только запись

       Механизм: посредством дескриптора


       Принимает содержимое эквивалентной строки для  клавиш-

  ного определения. Аргумент  эквивалентная  строка  является

  адресом дескриптора, указывающего память, в которую записы-

  вается эквивалентная строка.


       Строка нового состояния


       Использование в МОС ВП: строка символов

       Тип: строка символов



                           - 165 -

                       00152-01 33 09-4


       Доступ: только запись

       Механизм: посредством дескриптора


       Принимает имя нового состояния, которое устанавливает-

  ся клавишным определением. Аргумент строка нового состояния

  является адресом дескриптора, указывающего память, в  кото-

  рую записывается строка нового состояния.


       Описание.


       Процедура SMG$GET_KEY_DEF возвращает клавишное опреде-

  ление, связанное с определенными аргументами наименование и

  строка состояния.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVKTB_ID

       - неверный аргумент таблица;

  SMG$_KEYNOTDEF

       - клавиша неопределена;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.41. SMG$GET_NUMERIC_DATA    -     получение

             числовых терминальных данных


       Любое   значение    состояния    возвращается    через

  LIB$SCOPY_DXDX.





                           - 166 -

                       00152-01 33 09-4


       Процедура    SMG$GET_NUMERIC_DATA     обращается     к

  TEPMTABLE.EXE  и  возвращает  числовую  последовательность,

  которая заставляет терминал выполнять  определенную  опера-

  цию.


       Формат:


       SMG$GET_NUMERIC_DATA адрес1, код, адрес2


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Адрес1


       Использование в МОС ВП: адрес

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет адрес входа в TERMTABLE для желаемого  тер-

  минала. Аргумент адрес1 является адресом длинного слова без

  знака, которое содержит адрес TERMTABLE.

       Перед    вызовом    процедуры     SMG$GET_NUMERIC_DATA

  необходимо получить адрес терминальной таблицы вызовом  или

  процедуры      SMG$INIT_TERM_TABLE,      или      процедуры




                           - 167 -

                       00152-01 33 09-4


  SMG$INIT_TERM_TABLE_BY_TYPE.


       Код


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Код запроса, который определяет запрашиваемую характе-

  ристику терминала. Аргумент код является целым длинным сло-

  вом со знаком, содержащим код запроса. Код запроса в  форме

  SMG$K_KOД, где код соответствует кодовому слову  в  таблице

  терминальных характеристик, например, ANSI_CRT.

       Поля разрешенных характеристик представлены в табл. 12

  [1], табл. 13 [1], табл. 14 [1].


       Адрес2


       Использование в МОС ВП: адрес

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Адрес  первого  байта  длинного   слова,   в   которое

  SMG$GET_NUMERIC_DATA записывает числовые данные для  харак-

  теристики. Аргумент адрес2 является длинным словом без зна-

  ка, которое содержит адрес указанного буфера.








                           - 168 -

                       00152-01 33 09-4


       Описание.


       Процедура SMG$GET_NUMERIC_DATA выделяет  запрашиваемую

  числовую информацию из определенной  терминальной  таблицы.

  Перед  вызовом  процедуры  SMG$GET_NUMERIC_DATA  необходимо

  получить    адрес    таблицы    вызовом    или    процедуры

  SMG$INIT_TERM_TABLE,             или              процедуры

  SMG$INIT_TERM_TABLE_BY_TYPE.


       Возвращаемые значения состояния:

  SMG$_INVTERTAB

       - неверный адрес терминальной таблицы;

  SMG$_INVREQCOD

       - неверный код запроса;

  SS$_NORMAL

       - нормальное успешное завершение.



       1.42. SMG$GET_PASTEBOARD_ATTRIBUTES         -

             получение   признаков    компоновочного

             пульта


       Процедура SMG$GET_PASTEBOARD_ATTRIBUTES получает приз-

  наки компоновочного пульта и  запоминает  в  информационной

  таблице компоновочного пульта.


       Формат:


       SMG$GET_PASTEBOARD_ATTRIBUTES  идентификатор, таблица,

                                      размер





                           - 169 -

                       00152-01 33 09-4


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет компоновочный пульт, для которого  запраши-

  вается информация. Аргумент идентификатор является  адресом

  длинного слова без знака, содержащего идентификатор  компо-

  новочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_ PASTEBOARD.


       Таблица


       Использование в МОС ВП: вектор байтов без знака

       Тип: байт (без знака)

       Доступ: только запись

       Механизм: посредством ссылки, ряда ссылок


       Принимает  признаки  компоновочного  пульта.  Аргумент




                           - 170 -

                       00152-01 33 09-4


  таблица  является  адресом  области  байтов  без  знака,  в

  которые записываются признаки компоновочного пульта.


       Значения в таблице могут быть доступны через следующие

  символические имена:

  SMG$L_DEVCHAR

       - характеристики устройства (длинное слово);

  SMG$L_DEVDEPEND

       - особые характеристики 1 (длинное слово);

  SMG$LDEVDEPEND2

       - особые характеристики 2 (длинное слово);

  SMG$B_DEVCLASS

       - класс устройства (байт) - например, DCL_TERM;

  SMG$B_SMG_DEVTYPE

       - внутренний тип устройства (байт);

  SMG$B_ROWS

       - число строк в устройстве (байт);

  SMG$W_WIDTH

       - ширина терминала (слово);

  SMG$B_COLOR

       - зарезервирован для дальнеишего использования (байт);

  SMG$B_PARITY

       - признаки паритета (байт) - это поле является 0, если

         устройство не терминал;

  SMG$W_FILL

       - символы заполнения (слово) - это  поле  является  0,

         если устройство не терминал;





                           - 171 -

                       00152-01 33 09-4


  SMG$W_SPEED

       - быстродеиствие терминала (слово) - это поле является

         0, если устроиство не терминал;

  SMG$W_CURSOR_ROW

       - строка, содержащая физический курсор (слово);

  SMGW_C URSOR_COL

       - колонка, содержащая физически курсор (слово);

  SMG$L_CURSOR_DID

       - верхний идентификатор дисплея, содержащего  физичес-

         кий курсор (длинное слово).


       Размер


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  число  байт  в   информационной   таблице.

  Аргумент размер является адресом длинного слова без  знака,

  содержащего размер (в байтах) таблицы.

       Даваемый размер должен быть точным.  Можно  определить

  размер     путем     символической     константы     SMG$S_

  PASTEBOARD_INFO_BLOCK.


       Описание.


       Процедура    SMG$GET_PASTEBOARD_ATTRIBUTES    получает

  признаки  компоновочного   пульта   и   запоминает   их   в

  информационнои таблице компоновочного пульта.



                           - 172 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVARG

       - неправильныи размер, определенныи в  аргументе  раз-

         мер;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.43. SMG$GET_TERM_DATA      -      получение

             терминальных данных


       Процедура  SMG$GET_TERM_DATA  обращается   к   TERMTAB

  LE.EXE и  возвращает  последовательноть  символов,  которая

  заставляет терминал выполнять определенную операцию.


       Формат:


       SMG$GET_TERM_DATA адрес1, код, максимальная длина,

                         длина, адрес2, вектор аргументов


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения









                           - 173 -

                       00152-01 33 09-4


       Аргументы:


       Адрес1


       Использование в МОС ВП: адрес

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  адрес  входа  в  TERMTABLE  для  желаемого

  терминала. Аргумент адрес1 является адресом длинного слова,

  которое содержит адрес TERMTABLE.

       Значение     аргумента     возвращается     процедурои

  SMG$INIT_TABLE или процедурои SMG$INIT_TERM_TABLE_BY_TYPE.


       Код


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Длиннословная константа в  форме  SMG$K_KOД,  где  код

  является именем поля запрашиваемой характеристики. Аргумент

  код является адресом  длинного  слова  без  знака,  которое

  содержит код запроса.

       Поля разрешенных характеристик представлены в табл. 12

  [1], табл. 13 [1], табл. 14 [1].








                           - 174 -

                       00152-01 33 09-4


       Максимальная длина


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредтвом ссылки


       Максимальная длина буфера, в который записываются дан-

  ные по запрашиваемой характеристике. Аргумент  максимальная

  длина является адресом целого  длинного  слова  со  знаком,

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

  записаны в буфер.


       Длина


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством ссылки


       Принимает  число  байт,  деиствительно  записанных   в

  буфер. Аргумент  длина  является  адресом  целого  длинного

  слова со знаком, в которое записывается число  байт,  пере-

  данных в буфер.


       Адрес2


       Использование в МОС ВП: адрес

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки



                           - 175 -

                       00152-01 33 09-4


       Адрес первого байта в буфере, которыи принимает данные

  о характеристике. Аргумент адрес2 является  длинным  словом

  без знака, которое содержит адрес буфера.


       Вектор аргументов


       Использование в МОС ВП: адрес

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки, ряда ссылок


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

  ристик, которые требуют переменного числа аргументов,  тех,

  что  требуют  замены  или  арифметического   действия   над

  аргументом. Первое длинное слово из данного массива длинных

  слов должно содержать значение числа аргументов,  следующих

  за первым длинным словом.


       Описание.


       Процедура SMG$GET_TERM_DATA должна  быть  использована

  только тогда, когда выполняется прямои (не SMG$) ввод/вывод

  на   терминал.   Она   обращается   к   TERMTABLE.EXE   для

  определенного типа терминала  и  возвращает  последователь-

  ность символов, которая выполняет определенную операцию.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;






                           - 176 -

                       00152-01 33 09-4


  SMG$_INVTERTAB

       - неверныи адрес терминальнои таблицы;

  SMG$_INVREQCOD

       - неверныи код запроса.



       1.44. SMG$HOME_CURSOR - возвращение курсора


       Процедура   SMG$HOME_CURSOR   перемещает   виртуальный

  курсор в определенный угол виртуального дисплея.


       Формат:


       SMG$HOME_CURSOR дисплей [,код]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный диплей, на котором перемещается

  виртуальный  курсор.  Аргумент  дисплей  является   адресом



                           - 177 -

                       00152-01 33 09-4


  длинного слова без знака, содержащего  идентификатор  дисп-

  лея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Код


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


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

  курсор.  Аргумент  код  является  адресом  длинного  слова,

  которое содержит код позиции.

       Разрешенные коды позиции представлены в табл. 4.

                                                    Таблица 4

  -----------------------------------------------------------

  Код               !          Значение

  -----------------------------------------------------------

  SMG$C_UPPER_LEFT  ! Строка 1, колонка 1 (верхнии левыи

                    ! угол). Эта позиция устанавливается по

                    ! умолчанию

  SMG$C_LOWER_LEFT  ! Строка N, колонка 1 (где N - число

                    ! строк в дисплее). Это нижний левый угол

  SMG$C_UPPER_RICHT ! Строка 1, колонка м (где м - число

                    ! колонок в дисплее). Это верхний правый

                    ! угол




                           - 178 -

                       00152-01 33 09-4


                                          Продолжение табл. 4

  -----------------------------------------------------------

  Код               !          Значение

  -----------------------------------------------------------

  SMG$C_LOWER_RICHT ! Строка N, колонка м (где N - число

                    ! строк, а м - число колонок в дисплее).

                    ! Это нижний правый угол




       Описание.


       Процедура   SMG$HOME_CURSOR   перемещает   виртуальный

  курсор в угол определенного виртуального дисплея,  согласно

  коду, определенному в аргументе код.  Вызывающая  программа

  должна знать размеры виртуального дисплея.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVARG

       - неверный аргумент.











                           - 179 -

                       00152-01 33 09-4


       1.45. SMG$INIT_TERM_TABLE - инициализирование

             терминальной таблицы


       Процедура  SMG$INIT_TERM_TABLE   инициализирует   базу

  данных  TERMTABLE  для  названного  терминала  так,   чтобы

  последовательность  вызовов   процедуры   SMG$GET_TERM_DATA

  могла выделить информацию и командные строки для терминала.


       Формат:


       SMG$INIT_TERM_TABLE терминал, адрес


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Терминал


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Определяет наименование терминала.  Аргумент  терминал

  является  адресом  дескриптора,  указывающего  наименование

  терминала. Наименование должно быть входом в TERMTABLE.EXE.





                           - 180 -

                       00152-01 33 09-4


       Адрес


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Адрес  входа   для   отдельного   типа   терминала   в

  TERMTABLE.EXE. Аргумент  адрес  является  адресом  длинного

  слова  без  знака,  которое  содержит  адрес  информации  в

  TERMTABLE.

       Используется этот адрес  ,когда  вызывается  процедура

  SMG$GET_TERM_DATA для определенного типа терминала.  Значе-

  ние адрес возвращается процедурои  SMG$INIT_TERM_TABLE  или

  процедурои SMG$INIT_TERM_TABLE_BY_TYPE.


       Описание.


       Процедура  SMG$INIT_TERM_TABLE   инициализирует   базу

  данных в TERMTABLE  для  названного  терминала,  так  чтобы

  последовательность  вызовов   процедуры   SMG$GET_TERM_DATA

  могла выделить информацию и командные строки для указанного

  терминала. Процедура должна быть ипользована только  тогда,

  когда выполняется прямои (не SMG$) ввод/вывод на терминалы.

       Процедура SMG$INIT_TERM_TABLE сначала ищет TERMTABLE в

  области, логически названнои  TEPM$TABLOC.  Если  TERMTABLE

  там  не  наидена,  то  процедура  ищет  глобальную   секцию

  SMG$TERMTABLE.






                           - 181 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_PRISECMAP

       - успешное   завершение.   Определение    найдено    в

         индивидуальной TERMTABLE;

  SMG$_CBLSECMAP

       - успешное   завершение.   Определение    найдено    в

         глобальной TERMTABLE;

  SMG$_UNDTERNOP

       - неопределенныи  терминал.  Накакого  определения  не

         наидено для терминала и  не  найдена  индивидуальная

         TERMTABLE;

  SMG$_UNDTERNOS

       - неопределенныи  терминал.  Никакого  определения  не

         наидено  для  терминала  и  не   наидена   системная

         TERMTABLE;

  SMG$_UNDTERNAM

       - неопределенное название терминала.



       1.46. SMG$INIT_TERM_TABLE_BY_TYPE           -

             инициализирование терминальной  таблицы

             посредством    типа     терминала     в

             операционной системе МОС ВП


       Процедура  SMG$INIT_TERM_TABLE_BY_TYPE  инициализирует

  базу данных в TERMTABLE для названного терминала так, чтобы

  последовательность  вызовов   процедуры   SMG$GET_TERM_DATA



                           - 182 -

                       00152-01 33 09-4


  могла выделить информацию и командные строки для терминала.


       Формат:


       SMG$INIT_TERM_TABLE_BY_TYPE тип терминала, адрес

                                   [,терминал]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Тип терминала


       Использование в МОС ВП: байт со знаком

       Тип: целый байт (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Тип устроиства  терминала,  определенного  посредством

  символического обозначения терминала в операционной системе

  МОС ВП или обеспечение  значением  возвращаемым  программой

  обслуживания $GETDVI. Аргумент тип терминала является адре-

  сом байта со знаком, который содержит тип терминала.


       Адрес


       Использование в МОС ВП: адрес




                           - 183 -

                       00152-01 33 09-4


       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Адрес входа в TERMTABLE для отдельного типа терминала.

  Аргумент адрес является адресом длинного слова без знака, в

  которое записывается адрес входа в терминальную таблицу.

       Используется этот адрес,  когда  вызывается  процедура

  SMG$GET_TERM_DATA для указанного типа терминала.


       Терминал


       Использование в МОС ВП: имя устроиства

       Тип: строка символов

       Доступ: только запись

       Механизм: посредством дескриптора


       Строка, в которую записывается наименование терминала,

  связанное с типом устроиства.  Аргумент  терминал  является

  адресом  дескриптора,  указывающего   память,   в   которую

  записывается наименование терминала.


       Описание.


       Процедура  SMG$INIT_TERM_TABLE_BY_TYPE  инициализирует

  базу данных в TERMTABLE для  определенного  типа  терминала

  так,    чтобы    поледовательность    вызовов     процедуры

  SMG$GET_TERM_ DATA могла выделить  информацию  и  командные

  строки для указанного типа терминала. Процедура должна быть

  использована только тогда,  когда  выполняется  прямои  (не




                           - 184 -

                       00152-01 33 09-4


  SMG$) ввод/вывод на терминалы.

       Процедура  SMG$INIT_TERM_TABLE_BY_TYPE  ищет   сначала

  TERMTABLE   в   области,   названной   логическим    именем

  TERM$TABLOC. Если TEPMTABLE не найдена в указанной области,

  процедура ищет глобальную секцию SMG$TERMTABLE.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_PRISECMAP

       - успешное   завершение.   Определение    найдено    в

         индивидуальной TERMTABLE;

  SMG$GBLSECMAP

       - успешное   завершение.   Определение    найдено    в

         глобальной TERMTABLE;

  SMG$_UNDTERNOP

       - неопределенныи  терминал.  Никакого  определения  не

         найдено для терминала и  не  наидена  индивидуальная

         TERMTABLE;

  SMG$_UNDTERNOS

       - неопределенный  терминал.  Никакого  определения  не

         найдено  для  терминала  и  не   найдена   системная

         TERMTABLE;

  SMG$_UNDTERNAM

       - неопределенное название терминала.









                           - 185 -

                       00152-01 33 09-4


       1.47. SMG$INSERT_CHARS - вставка символов


       Процедура   SMG$INSERT_CHARS   вставляет   символы   в

  виртуальный дисплей.


       Формат:


       SMG$INSERT_CHARS дисплей, строка, номер строки,

                        номер колонки [,видеопризнаки]

                        [,дополнение] [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   задествованный    виртуальный    дисплей.

  Аргумент дисплей является адресом длинного слова без знака,

  содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурои

  SMG$CREATE_VIRTUAL_DISPLAY.



                           - 186 -

                       00152-01 33 09-4


       Строка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка символов,  которые  будут  вставлены.  Аргумент

  строка  является  адресом  дескриптора,  который  указывает

  вставляемую строку.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Позиция  строки  в  дисплее,  в   которой   начинается

  вставка. Аргумент  номер  строки  является  адресом  целого

  длинного слова со знаком, содержащего номер строки.


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Позиция  колонки  в  дисплее,  в  которой   начинается

  вставка. Аргумент номер  колонки  является  адресом  целого




                           - 187 -

                       00152-01 33 09-4


  длинного слова со знаком, содержащего номер колонки.


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредтвом ссылки


       Маска,  обозначающая  видеопризнаки  для   вставляемых

  символов. Аргумент видеопризнаки является адресом  длинного

  слова без знака содержащего  маску  видеопризнаков.  Каждый

  бит признака в аргументе вызывает установку соответсвующего

  действия на дисплее.


       Видеопризнаки, которыми можно управлять, следующие:

  SMG$M_BLINK

       - дисплейное мерцание символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком.  Это

         значит использование противоположного установленному

         по умолчанию признака на виртуальном дисплее;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.


       Если тот же самый бит установлен  в  обоих  аргументах

  видеопризнаки и  дополнение,  средство  управления  экраном

  совмещает  признаки.  Используя  указанные  два  аргумента,



                           - 188 -

                       00152-01 33 09-4


  вызывающая программа может осуществлять  независимый  конт-

  роль за каждым признаком в одном вызове.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая видеопризнаки для вставляемых сим-

  волов. Аргумент дополнение является адресом длинного  слова

  без знака, содержащего  маску  видеопризнаков.  Каждый  бит

  признака в аргументе  вызывает  установку  соответствующего

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

  можно управлять, такие же как в аргументе видеопризнаки.


       Табл. 5 показывает действие, предпринимаемое средством

  управления экраном для различных комбинаций видеопризнаков.

                                                    Таблица 5

  -----------------------------------------------------------

  Видеопризнаки ! Дополнение !          Действия

  -----------------------------------------------------------

       0        !     0      ! Признак не изменен

       1        !     0      ! Признак включен

       0        !     1      ! Признак установлен в дополне-

                !            ! ние к установленному по

                !            ! умолчанию

       1        !     1      ! Признак выключен




                           - 189 -

                       00152-01 33 09-4


       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка является адресом длинного слова без знака,  кото-

  рое содержит код символьной установки. Разрешенным является

  только значение  SMG$C_ASCII,  которое  устанавливается  по

  умолчанию.


       Описание.


       Процедура  SMG$INSERT_CHARS   вставляет   определенную

  строку символов в определенные позиции. Символы  справа  от

  вставляемых сдвигаются вправо. Любые символы,  не  вместив-

  шиеся в текущей строке, отбрасываются.  Виртуальный  курсор

  остается в позиции символа, следующего за последним  встав-

  ленным.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVROW

       - неверная строка;







                           - 190 -

                       00152-01 33 09-4


  SMG$_INVCOL

       - неверная колонка;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVARG

       - нераспознаваемый код видеопризнака;

  LIN$_INVSTRDES

       - неверный дескриптор строки.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  иллюстрирует использование процедуры SMG$INSERT_CHARS.

  С-

        INCLUDE '($SMGDEF)'

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$PUT_CHARS,

     1  SMG$ERASE_DISPLAY

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS

  С+

  С  Использовать процедуру SMG$CREATE_VIRTUAL_DISPLAY для

  С  создания виртуального дисплея с границей.

  С-

        ROWS = 7




                           - 191 -

                       00152-01 33 09-4


        COLUMNS = 50

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

        IF (.NOT. ISTATUS) WRITE (6, 900)

     1            'SMG$CREATE_VIRTUAY_DISPLAY', ISTATUS

  С+

  С  Вызвать процедуру  SMG$CREATE_PASTEBOARD для создания

  С  компоновочного пульта.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

        IF (.NOT. ISTATUS) WRITE (6, 900)

     1   'SMG$_CREATE_PASTEBOARD', ISTATUS

  С+

  С  Послать данные в виртуальный дисплей, вызовом процедуры

  С  SMG$PUT_CHARS.

  С-

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1            'THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50

     1            COLUMNS.',2,1)

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1            'THIS а BORDERED VIRTUAL DISPLAY.', 4, 1)

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1            'SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL

     1            DISPLAY.', 6, 1)

  С+

  С  Использовать процедуру SMG$PASTE_VIRTUAL_DISLAY для

  С  прикрепления виртуального дисплея.




                           - 192 -

                       00152-01 33 09-4


  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY1 ( DISPLAY1,

     1            PASTE1, 4, 15)

  900   FORMAT (' ROUTINE ', А, 'RETURNED А STATUS OF '. Z8)

  С+

  С  Вызвать процедуру SMG$INSERT_CHARS для добавления строки

  С  1 текста, начиная в колонке 6. Подчеркнуть эти символы.

  С-

        ISTATUS = SMG$INSERT_CHARS ( DISPLAY1,

     1            'THIS IS А NEW ROW.', 1, 6, SMG$UNDERLINE)

  С+

  С  Вызвать процедуру SMG$INSERT_CHARS для добавления текста

  С  в строке 6. Заметим, что будет несколько символов,

  С  которые не вместяться в строке. Они будут отброшены.

  С  новый текст будет более ярким.

  С-

        ISTATUS = SMG$INSERT_CHARS ( DISPLAY1,

     1            'ТО THIS BORTERED DISPLAY.', 6, 28,

     1            SMG$M_BOLD)

        END


       Вывод, полученный программой на языке программирования

  ФОРТРАН, перед вызовом процедуры  SMG$INSERT_CHARS  показан

  на рис. 15.











                           - 193 -

                       00152-01 33 09-4


  -----------------------------------------------------------
  !                                                         !
  !     THIS VIRTUAL DISPLAY HAS 7                          !
  !                                                         !
  !     ROWS AND 70 COLUMNS                                 !
  !                                                         !
  !     техт ENTERED BY SMG$PUT_LINE_WIDE                   !
  !                                                         !
  -----------------------------------------------------------

                           Рис. 15



       Вывод, полученный программой на языке программирования

  ФОРТРАН, после вызова процедуры SMG$INSERT_CHARS показан на

  рис. 16.


  ----------------------------------------------------------
  !             THIS IS А  NEW ROW                         !
  !             ------------------                         !
  !                                                        !
  !  THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50 COLUMNS        !
  !                                                        !
  !  THIS IS А BORDERED VIRTUAL DISPLAY                    !
  !                                                        !
  !  SMG$PUT_CHARS PUTS DATA INTO THIS BORDERED DISPLAY    !
  !                                                        !
  ----------------------------------------------------------

                           Рис. 16




       1.48. SMG$INSERT_LINE - вставка строки


       Процедура SMG$INSERT_LINE вставляет строки в виртуаль-

  ный дисплей и продвигает содержание вывода на дисплее.


       Формат:


       SMG$INSERT_LINE дисплей, номер строки [,строка]

                       [,направление], [,видеопризнаки]

                       [,дополнение]  [,флаг]



                           - 194 -

                       00152-01 33 09-4


                       [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет задействованный виртуальный дисплей.  Аргу-

  мент дисплей является адресом  длинного  слова  без  знака,

  содержащего идентификатор дисплея.

       Значение данного аргумента дисплей возвращается проце-

  дурой SMG$CREATE_VIRTUAL_DISPLAY.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки






                           - 195 -

                       00152-01 33 09-4


       Определяет строку дисплея, в которую вставляется стро-

  ка символов и в которой  начинается  продвижение.  Аргумент

  номер строки является адресом целого длинного слова,  кото-

  рое содержит номер строки.


       Строка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка      символов,      вставляемая      процедурой

  SMG$INSERT_LINE. Аргумент строка является адресом  дескрип-

  тора, указывающего вставляемую строку.


       Направление


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет направление продвижения. Аргумент направле-

  ние является адресом длинного слова, которое  содержит  код

  направления.  Разрешенными  являются  значения  SMG$_UP   и

  SMG$M_DOWN. Значение SMG$M_UP устанавливается по умолчанию.


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски




                           - 196 -

                       00152-01 33 09-4


       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска,обозначающая видеопризнаки. Аргумент  видеоприз-

  наки является адресом длинного слова без знака, содержащего

  маску видеопризнаков. Каждый бит признака в аргументе вызы-

  вает установку соответствующего действия на дисплее.


       Видеопризнаки, которыми можно управлять, следующие:

  SMG$M_BLINK

       - дисплейное мерцание символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком.  Это

         значит - использование противоположного  установлен-

         ному по умолчанию признака на виртуальном дисплее;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.


       Если тот же самый бит установлен  в  обоих  аргументах

  видеопризнаки и  дополнение,  средство  управления  экраном

  использует аргумент дополнение вслед за аргументом  видеоп-

  ризнаки. Используя эти два аргумента, вызывающая  программа

  может осуществлять независимый контроль за каждым признаком

  в одном вызове.







                           - 197 -

                       00152-01 33 09-4


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая видеопризнаки. Аргумент дополнение

  является адресом длинного слова без знака, содержащего мас-

  ку видеопризнаков. Каждый бит признака в аргументе вызывает

  установку соответствующего действия на дисплее.  Видеоприз-

  наки, которыми можно управлять, такие же как для  аргумента

  видеопризнаки.

       Действие, предпринимаемое средством управления экраном

  для различных комбинаций признаков, представленно в табл.6.

                                                    Таблица 6

  -----------------------------------------------------------

  Видеопризнаки ! Дополнение !     Действие

  -----------------------------------------------------------

        0       !    0       ! Признак не изменен

        1       !    0       ! Признак включен

        0       !    1       ! Признак установлен в дополне-

                !            ! ние к установленному по умол-

                !            ! чанию

        1       !    1       ! Признак выключен










                           - 198 -

                       00152-01 33 09-4


       Флаг


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово(без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет действие,  если  текст  не  размещается  по

  ширине дисплея. Аргумент  флаг  является  адресом  длинного

  слова без знака, содержащего флаг. 0 определяет  отсутствие

  перехода на следующую строку, 1-переход на следующую  стро-

  ку.


       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка является адресом длинного слова, которое содержит

  код символьной установки. Разрешенным является только  зна-

  чение SMG$C_ASCII, которое устанавливается по умолчанию.


       Описание.


       Процедура SMG$INSERT_LINE позволяет вставлять информа-

  цию строки виртуального дисплея, отличную от первой и  пос-

  ледней строк. Существующие строки продвигаются в определен-



                           - 199 -

                       00152-01 33 09-4


  ном направлении для создания свободного пространства.  Если

  определен аргумент строка, информация в строке записывается

  в созданное пространство; в противном случае, новая  строка

  остается пустой. Если строка не достигает  ширины  дисплея,

  то она дополняется пробелами.

       Если установлен в 1 флаг и определеная строка  длинее,

  чем ширина виртуального дисплея, процедура  SMG$INSERT_LINE

  продвигает строку дисплея и записывает превышающие  символы

  в созданое пространство.  Если  флаг=0,  любые  превышающие

  символы отбрасываются. Виртуальный курсор остается в  пози-

  ции символа, следующего за последним записанным.

       Добавление информации в первую и последнюю строку вир-

  туального дисплея, рассматривается в подразделе 1.64.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVROW

       - неверная строка;

  SMG$_INVCOL

       - неверная колонка;

  SMG$_INVARG

       - неверный аргумент направление.





                           - 200 -

                       00152-01 33 09-4


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует использование процедуры SMG$INSERT_LINE.

  С

  С  Включить SMG определения. В частности, нам нужно

  С  SMG$M_BORDER, SMG$M_UNDERLINE и SMG$M_UP.

  С-

        INCLUDE '($SMGDEF)'

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$PUT_CHARS,

     1  SMG$ERASE_DISPLAY

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS

  С+

  С  Использовать процедуру SMG$CREATA_VIRTUAL_DISPLAY для

  С  создания виртуального дисплея с границей.

  С-

        ROWS = 7

        COLUMNS = 50

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

        IF (.NOT. ISTATUS) WRITE (6, 900)

     1   'SMG$CREATE_VIRTUAL_DISPLAY', ISTATUS

  С+

  С  Вызвать процедуру SMG$CREATE_PASTEBOARD для создания

  С  компоновочного пульта.



                           - 201 -

                       00152-01 33 09-4


  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

        IF (.NOT. ISTATUS) WRITE (6, 900),

     1   'SMG$CREATE_PASTEBOARD', ISTATUS

  С+

  С  Использовать процедуру SMG$PUT_CHARS для посылки

  С  данных в виртуальныи дисплей.

  С-

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1             'THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50

     1             COLUMNS.', 2, 1)

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1             'THIS IS А BORDERED VIRTUAL DISPLAY.

     1             ,' 4, 1)

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1             'SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL

     1             DISPLAY.,' 6, 1)

  С+

  С  Прикрепить виртуальныи дисплеи,используя процедуру

  С  SMG$PASTE_VIRTUAL_DISPLAY.

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY (DISPLAY1,

     1            PASTE1, 4, 15)

  900   FORMAT ('ROUTINE', А,' RETURNED А STATUS OF', Z8)

  С+

  С  Вызвать процедуру SMG$INSERT_LINE для добавления

  С  строки текста после строки 6 и продвижения дисплея.




                           - 202 -

                       00152-01 33 09-4


  С  А также, подчеркнуть новые символы.

  С-

        ISTATUS = SMG$INSERT_LINE (DISPLAY1, 7,

     1            'THIS IS А NEW LINE.', SMG$M_UP,

     1            SMG$M_UNDERLINE)

        END


       Начальный вывод, полученной программой на языке  прог-

  раммирования ФОРТРАН, показан на рис. 17.


  ----------------------------------------------------------
  !                                                        !
  !     THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50 COLUMNS.    !
  !                                                        !
  !     THIS IS А BORDERED VIRTUAL DISPLAY.                !
  !                                                        !
  !     SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY.   !
  !                                                        !
  ----------------------------------------------------------

                           Рис. 17



       Вывод,    полученной    после     вызова     процедуры

  SMG$INSERT_LINE, показан на рис. 18.


  ----------------------------------------------------------
  !                                                        !
  !   THIS VIRTUAL DISPLAU HAS 7 ROWS AND 50 COLUMNS.      !
  !                                                        !
  !   THIS IS А BORDERED VIRTUAL DISPLAY.                  !
  !                                                        !
  !   SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY      !
  !                                                        !
  !   THIS IS А NEW ROW                                    !
  !                                                        !
  ----------------------------------------------------------

                           Рис. 18







                           - 203 -

                       00152-01 33 09-4


       1.49. SMG$INVALIDATE_DISPLAY    -    помечает

             дисплей как неверный


       Процедура SMG$INVALIDATE_DISPLAY помечает дисплей  как

  неверный и вызывает переписывание всего дисплея.


       Формат:


        SMG$INVALIDATE_DISPLAY дисплей


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   задействованный   виртуальный    дисплей.

  Аргумент дисплей является адресом длинного слова без знака,

  содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.





                           - 204 -

                       00152-01 33 09-4


       Описание.


       Процедура SMG$INVALIDATE_DISPLAY помечает дисплей  как

  неверный и переписывает информацию на дисплее. Обычно, про-

  цедура используется  после  определения,  что  вывод  будет

  записываться на  дисплей  без  помощи  средства  управления

  экраном.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверныи аргумент дисплей.



       1.50. SMG$LABEL_BORDER  -  отмечает   границы

             виртуального дисплея


       Процедура  SMG$LABEL_BORDER  снабжает  меткой  границу

  виртуального дисплея.


       Формат:


       SMG$LABEL_BORDER дисплей [,метка] [,граница]

                        [,позиция] [,видеопризнаки]

                        [,дополнение]

                        [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)



                           - 205 -

                       00152-01 33 09-4


       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет задеиствованный виртуальный дисплей.  Аргу-

  мент дисплей является адресом  длинного  слова  без  знака,

  содержащего идентификатор дисплея.

       Значение  данного  аргумента  возвращается  процедурои

  SMG$CREATE_VIRTUAL_DISPLAY.


       Метка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Новая метка для  дисплеиной  границы.  Аргумент  метка

  является адресом  дескриптора,  указывающего  текст  метки.

  Если   данный   аргумент   опущен,    дисплей    становится

  непомеченным.







                           - 206 -

                       00152-01 33 09-4


       Граница


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет, какая из дисплейных границ содержит метку.

  Аргумент граница является адресом длинного слова без знака,

  которое содержит код позиции границы.


       Разрешенными позициями границы являются следующие:


       .SMG$K_TOP

       .SMG$K_BOTTOM

       .SMG$K_RIGHT

       .SMG$K_LEFT


       Если   рассматриваемый    аргумент    опущен,    метка

  изображается на верхней границе.


       Позиция


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет позицию символа, с которой начинается метка

  в  пределах  границы.  Аргумент  позиция  является  адресом

  длинного  целого  слова  со  знаком,  содержащего   позицию




                           - 207 -

                       00152-01 33 09-4


  символа. Если данный аргумент опущен, метка  размещается  в

  центре определенной границы.


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая видеопризнаки. Аргумент видеоприз-

  наки является адресом длинного слова без знака, содержащего

  маску  видеопризнаков.  Каждый  бит   признака   в   данном

  аргументе вызывает установку соответствующуего действия  на

  дисплее.


       Видеопризнаки, которымй можно управлять, сдедующие:

  SMG$M_BLINK

       - дисплейное мерцание символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком,  что

         значает испоьзование видеопризнака  противоположного

         установленному по умолчанию;

  SMG$M_UNDPRLINE

       - дисплейное подчеркивание символов.


       Если тот же самый бит установлен  в  обоих  аргументах

  видеопризнаки и  дополнение,  средство  управления  экраном



                           - 208 -

                       00152-01 33 09-4


  использует аргумент дополнение вслед за аргументом  видеоп-

  ризнаки.  Используя  указанные  два  аргумента,  вызывающая

  программа может осуществлять независимый контроль за каждым

  признаком в одном вызове.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая видеопризнаки. Аргумент дополнение

  является адресом  длинного  слова  без  знака,  содержащего

  маску  видеопризнаков.  Каждый  бит  в  аргументе  вызывает

  установку    соответсвующего    действия    на     дисплее.

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

  аргумента видеопризнаки.


       Действие, предпринимаемое средством управления экраном

  для различных комбинаций признаков, представленно в табл.7.

                                                    Таблица 7

  -----------------------------------------------------------

   Видеопризнаки  !  Дополнение ! Действие

  -----------------------------------------------------------

         0        !    0        ! Признак не изменен

         1        !    0        ! Признак включен

         0        !    1        ! Признак установлен в допол-

                  !             ! нение к  установленному  по




                           - 209 -

                       00152-01 33 09-4


                                          Продолжение табл. 7

  -----------------------------------------------------------

   Видеопризнаки  !  Дополнение ! Действие

  -----------------------------------------------------------

                  !             ! умолчанию

         1        !    1        ! Признак выключен




       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка  является  адресом  длинного  слова  без   знака,

  содержащего код символьной установки. Разрешенным значением

  является только  SMG$C_ASCII,  которое  устанавливается  по

  умолчанию.

       Процедура SMG$LABEL_BORDER позволяет определять  текст

  для   метки   виртуального   дисплея.   Если   определенный

  виртуальный  дисплей  еще  не  имеет  признака  ограничения

  дисплея, тогда указанный признак устанавливается. Если дана

  строка метки, она заменяет текущий текст метки для  указан-

  ной границы.  Если  дана  пустая  (нулевая)  строка  метки,

  граница становится не помеченной. Если текст метки не  рас-

  полагается в  пределах  границы,  то  процедура  возвращает



                           - 210 -

                       00152-01 33 09-4


  SMG$_INVAPG. Аргументы граница и позиция вместе  определяют

  начальную позицию текста метки  в  пределах  границы.  Если

  аргумент  позиция  опущен,  процедура  выбирает   начальную

  позицию  так,  чтобы  разместить   текст   в   центре   или

  горизонтально, или вертикально, в зависимости от  аргумента

  граница. Если оба  аргумента  граница  и  позиция  опущены,

  текст размещается в центре верхней границы.

       Аргумент позиция определяет начальные  позиции  строки

  или колонки для метки в пределах границы.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешое завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVARG

       - неверный аргумент. Комбинация аргументов метка, гра-

         ница, позиция дает позицию за пределами границы;

  SMG$_WRONUMARG

       - неправильное число аргументов.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует использование процедуры SMG$LABEL_BORDER.

  С

  С  Включить SMG определения. В частности, нам нужно

  С  SMG$M_BORDER,SMG$K_TOP, SMG$BOTTOM и SMG$K_RIGHT.



                           - 211 -

                       00152-01 33 09-4


  С-

        INCLUDE '($SMGDEF)'

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$PUT_CHARS

        INTEGER DISPLAY1, PASTE1

        INTEGER DISPLAY2, PASTE2

        INTEGER DISPLAY3, PASTE3, ROWS, COLUMNS

  С+

  С  Вызвать процедуру  SMG$CREATE_VIRTUAL_DISPLAY для

  С  создания виртуального дисплея номер 1. Дать его границу.

  С-

       ROWS = 4

       СOLUMS = 30



       ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1           (ROWS, COLUMS, DISPLAY1, SMG$M_BORDER)

  С+

  С  Вызвать процедуру SMG$CREATE_VIRTUAL DISPLAY для

  С  создания виртуального дисплея номер 2. Дать его границу.

  С-

       ROWS = 3

       СOLUMS = 30



       ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1           (ROWS, COLUMS, DISPLAY2, SMG$M_BORDER)

  С+




                           - 212 -

                       00152-01 33 09-4


  С  Создать виртуальный дисплей номер 3. Его границу не

  С  давать.

  С-

       ROWS = 4

       СOLUMS = 35



       ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1           (ROWS, COLUMS, DISPLAY3)

  С+

  С  Использовать процедуру SMG$CREATE_PASTEBOARD для

  С  создания компоновочного пульта.

  С-

       ISTATUS = SMG$CREATE_PASTBOARD (PASTE1)

  С+

  С  Вызвать процедуру SMG$PUT_CHARS для посылок данных в

  С  виртуальный дисплей.

  С-

       ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1           'А BORDERED VIRTUAL DISPLAY.', 2, 1)

       ISTATUS = SMG$PUT_CHARS ( DISPLAY2,

     1           'А BORDERED VIRTUAL DISPLAY.', 1, 1)

       ISTATUS = SMG$PUT_CHARS ( DISPLAY3,

     1           'STARTED AS AN UNBORDERED DISPLAY.', 2, 1)

  С+

  С  Вызвать процедуру SMG$LABEL_BORDER для метки границ

  с  виртуального дисплея.

  С-




                           - 213 -

                       00152-01 33 09-4


       ISTATUS = SMG$LABEL_BORDER ( DISPLAY1, 'SIDE',

     1           SMG$K_RICHT)

       ISTATUS = SMG$LABEL_BORDER ( DISPLAY2, 'LABEL воттом',

     1           SMK$K_BOTTOM, 1)

       ISTATUS = SMG$LABEL_BORDER ( DISPLAY3, 'FORCED

     1           BORDERING', SMG$K_TOP)

  С+

  С  Вызвать процедуру SMG$PASTE_VIRTUAL_DISPLAY для

  С  прикрепления виртуальных дисплеев.

  С-

       ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1, PASTE1

     1           2, 100)

       ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY2, PASTE1

     1           2, 45)

       ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY3, PASTE1

     1           10, 5)

  900  FORMAT (' ROUTINE ', А, ' RETURNED А STATUS OF ', Z8)

       ЕND


       Вывод, полученный программой на языке программирования

  ФОРТРАН, показан на рис. 19.

















                           - 214 -

                       00152-01 33 09-4


  ----------------------------- -----------------------------
  !                           ! !                           !
  !                           S !                           !
  !А BORDERED VIRTUAL DISPLAY I ! А BORDERED VIRTUAL DISPLAY!
  !                           D !                           !
  !                           е !                           !
  ----------------------------- LABEL ВОТТОМ-----------------

  ----------FORCED BORDERING-----------
  !                                   !
  ! STARTED AS AN UNBORDERED DISPLAY  !
  !                                   !
  -------------------------------------

                           Рис. 19




       1.51. SMG$LIST_KEY_DEFS     -      считывание

             клавишных определений


       Процедура  SMG$LIST_KEY_DEFS  возвращает   определение

  (эквивалентную строку), связанное с определенной клавишей в

  определенной клавишной таблице.


       Формат:


       SMG$LIST_KEY_DEFS таблица, контекст, [наименование]

                         [,строка состояния], [,признаки]

                         [,эквивалентная строка]

                         [,строка нового состояния]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения




                           - 215 -

                       00152-01 33 09-4


       Аргументы:


       Таблица


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет клавишную таблицу,  из  которои  выделяется

  клавишное определение. Аргумент  таблица  является  адресом

  слова  без  знака,  содержащего   идентификатор   клавишной

  таблицы.   Значение   аргумента   возвращается   процедурой

  SMG$CREATE_KEY_TABLE.


       Контекст


       Использование в МОС ВП: контекст

       Тип: целое длинное слово (со знаком)

       Доступ: изменение

       Механизм: посредством ссылки


       Обеспечивает средства для  выделения  серии  клавишных

  определений  из  клавишной   таблицы.   Аргумент   контекст

  является адресом  длинного  слово  со  знаком,  содержащего

  изменяемый контекст. Для первого обращения к этой процедуре

  вы должны установить аргумент в нуль.

       Значение     контекст     увеличивается     процедурой

  SMG$LIST_KEY_DEFS  так,  что  следующии  вызов   возвращает

  следующее клавишное определение для клавиши.




                           - 216 -

                       00152-01 33 09-4


       Наименование


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: изменение

       Механизм: посредством дескриптора


       Указывает клавишу,  определение  которой  считывается.

  Аргумент   наименование   является   адресом   дескриптора,

  указывающего наименование клавиши.


       Строка состония


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только запись

       Механизм: посредством дескриптора


       Содержит   имя   состояния,   которое    квалифицирует

  следующее определение в клавишнои таблице. Аргумент  строка

  состония является адресом дескриптора, указывающего память,

  в которую записывается имя состояния.


       Признаки


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Признаки  данного  клавишного  определения.   Аргумент




                           - 217 -

                       00152-01 33 09-4


  признаки является  адресом  длинного  слова  без  знака,  в

  которое записываются признаки клавиши.


       Возможными признаками являются следующие:

  SMG$V_KEY_NOECHO (бит 0)

       - если бит  установлен,  то  эквивалентная  строка  не

         отражается,   когда   клавиша    нажимается.    Если

         SMG$V_KEY_TERMINATE не установлен,  SMG$V_KEY_NOECHO

         игнорируется;

  SMG$V_KEY_TERMINATE (бит 1)

       - если  бит  установлен,  то  когда  клавиша   нажата,

         вводная строка закончена и  не  может  быть  принято

         больше символов. Если бит чист, может  быть  принято

         больше символов;

  SMG$V_KEY_LOCKSTATE (бит 2)

       - если бит установлен, и если определена строка нового

         состояния,   то   имя    состояния,    определенного

         посредством указанного аргумента,  остается  текущим

         состоянием до  тех  пор,  пока  оно  не  будет  явно

         изменено. Если бит чист, имя состояния, определенное

         посредством  аргумента   строка   нового   состояния

         остается в деиствии  только  до  следующего  нажатия

         клавиши;

  SMG$V_KEY_PROTECTED (бит 3)

       - если бит установлен, клавишное определение не  может

         быть изменено или удалено. Если бит чист,  клавишное

         определение может быть изменено или удалено.





                           - 218 -

                       00152-01 33 09-4


  Оставшиеся биты не определены.


       Эквивалентная строка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только запись

       Механизм: посредством дескриптора


       Строка для следующего клавишного определения. Аргумент

  эквивалентная   строка   является   адресом    дескриптора,

  указывающего память, в которую  записывается  эквивалентная

  строка.


       Строка нового состояния


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только запись

       Механизм: посредством дескриптора


       Строка, в которую записывается имя  нового  состояния,

  которое устанавливается следующим  клавишным  определением.

  Аргумент   строка   нового   состояния   является   адресом

  дескриптора, указывающего память в которую записывается имя

  нового состояния. Если клавишное определение  устанавливает

  новое состояние, то флаг признаков SMG$V_KEY_SETSTATE будет

  установлен.








                           - 219 -

                       00152-01 33 09-4


       Описание.


       Процедура  SMG$LIST_KEY_DEFS  при   повторном   вызове

  позволяет проверить все клавишные определения  в  клавишной

  таблице.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVKTB_ID

       - неверный аргумент таблица;

  SMG$_NOMOREKEYS

       - в таблице нет больше клавишных определений.


       Любые   значения    состояния    возвращаются    через

  LIB$COPY_DXDX.



       1.52. SMG$LOAD_KEY_DEFS - загрузка  клавишных

             определений


       Процедура SMG$LOAD_KEY_DEFS загружает  фаил  клавишных

  определений (команды DEFINE/KEY) в  определенную  клавишную

  таблицу.


       Формат:


       SMG$LOAD_KEY_DEFS     таблица, спецификация файла,

                             [,спецификация по умолчанию]

                             [,флаг]






                           - 220 -

                       00152-01 33 09-4


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип:  длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Таблица


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет клавишную таблицу,  в  которую  загружаются

  клавишные определения. Аргумент  таблица  является  адресом

  длинного  слова  без   знака,   содержащего   идентификатор

  клавишной таблицы.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_KEY_TABLE.


       Спецификация файла


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм:  посредством дескриптора


       Строка,  содержащая  спецификацию  файла  для   файла,




                           - 221 -

                       00152-01 33 09-4


  содержащего команды DEFINE/KEY. Аргумент спецификация файла

  является  адресом  дескриптора,  указывающего  спецификацию

  файла.


       Спецификация по умолчанию


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм:  посредством дескриптора


       Строка,   содержащая   установленную   по    умолчанию

  спецификацию   файла   для   файла,   содержащего   команды

  DEFINE/KEY. Аргумент  спецификация  по  умолчанию  является

  адресом   дескриптора,   указывающего   установленную    по

  умолчанию спецификацию файла. Если данный аргумент  опущен,

  используется нулевая строка.


       Флаг


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет, будет ли рассматриваться аргумент специфи-

  кация файла как  логическое  имя.  Аргумент  флаг  является

  адресом длинного слова без знака,  содержащего  флаг.  Если

  флаг установлен, спецификация  должна  транслироваться,  но

  если это невозможно, используется нулевая строка.




                           - 222 -

                       00152-01 33 09-4


       Описание.


       Процедура SMG$LOAD_KEY_DEFS открывает и  читает  файл,

  содержащий   команды   DEFINE/KEY,    вызывает    процедуру

  SMG$DEFINE_KEY  для  каждой  командной  строки   в   файле.

  Использование процедуры  SMG$LOAD_KEY_DEFS  требует,  чтобы

  вызывающая программа выполнялась под управлением  интерпре-

  татора диалогового командного языка DCL.  Процедура  указы-

  вает на ошибки, встречающиеся во время выполнения командных

  строк.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_FILTOOLON

       - слишком  длинная  спецификация  файла   (свыше   255

         символов).


       Некоторые  значения   состояния   возвращаются   через

  SMG$DEFIN_KEY. Некоторые  значения  состояния  возвращаются

  через $OPEN.



       1.53. SMG$MOVE_VIRTUAL_DISPLAY -  перемещение

             виртуального дисплея


       Процедура     SMG$MOVE_VIRTUAL_DISPLAY      перемещает

  виртуальный дисплей на  компоновочном  пульте  и  сохраняет

  порядок прикрепления.






                           - 223 -

                       00152-01 33 09-4


       Формат:


       SMG$MOVE_VIRTUAL_DISPLAY  дисплей, идентификатор,

                                 номер строки, номер колонки


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: поредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет перемешаемый виртуальный дисплей.  Аргумент

  дисплей  является  адресом  длинного   слова   без   знака,

  содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение



                           - 224 -

                       00152-01 33 09-4


       Механизм: посредством ссылки


       Определяет компоновочный пульт, на котором  происходит

  перемещение.  Аргумент   идентификатор   является   адресом

  длинного  слова  без   знака,   содержащего   идентификатор

  компоновочного пульта.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_PASTEBOARD.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  строку  компоновочного   пульта,   которая

  содержит  строку  I  определенного  виртуального   дисплея.

  Аргумент номер  строки  является  адресом  целого  длинного

  слова со знаком, которое содержит номер строки.


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  колонку  компоновочного  пульта,   которая

  содержит колонку I определенного  дисплея.  Аргумент  номер

  колонки является адресом  целого  длинного  слова,  которое



                           - 225 -

                       00152-01 33 09-4


  содержит номер колонки.


       Описание.


       Процедура     SMG$MOVE_VIRTUAL_DISPLAY      перемещает

  виртуальный дисплей из его текущей позиции  в  определенную

  позицию и сохраняет порядок прикрепления. Если дисплей  еще

  не прикреплен, процедура  прикрепляет  дисплей  к  вершине,

  определенной через заданную позицию.

       Дисплей не может перемещаться с одного  компоновочного

  пульта на другой. Однако, аргумент идентификатор требуется,

  т.к. виртуальный дисплей может  быть  прикреплен  к  любому

  числу компоновочных пультов.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершенией

  MG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;

  SMG$_WRONUMARG

       - неправильное число аргументов.


       Пример.


       Ссылаемся на пример программы на языке  программирова-

  ния ФОРТРАН, показанный в описании  процедуры  SMG$REPASTE_

  VIRTUAL_DISPLAY.





                           - 226 -

                       00152-01 33 09-4


       1.54. SMG$PASTE_VIRTUAL_DISPLAY             -

             прикрепление виртуального дисплея


       Процедура    SMG$PASTE_VIRTUAL_DISPLAY     прикрепляет

  виртуальный дисплей к компоновочному пульту.


       Формат:


       SMG$PASTE_VIRTUAL_DISPLAY  дисплей, идентификатор,

                                  номер строки, номер колонки


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет прикрепляемый виртуальный дисплей. Аргумент

  дисплей  является  адресом  длинного   слова   без   знака,

  содержащего идентификатор дисплея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.



                           - 227 -

                       00152-01 33 09-4


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет компоновочный  пульт,  к  которому  дисплей

  прикрепляется.  Аргумент  идентификатор  является   адресом

  длинного слова без знака,  которое  содержит  идентификатор

  компоновочного пульта.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  строку  компоновочного   пульта,   которая

  содержит  строку  I  определенного  виртуального   дисплея.

  Аргумент номер  строки  является  адресом  целого  длинного

  слова со знаком, содержащего номер сроки.


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки





                           - 228 -

                       00152-01 33 09-4


       Определяет  колонку  компоновочного  пульта,   которая

  содержит  колонку  I  определенного  виртуального  дисплея.

  Аргумент номер колонки  является  адресом  целого  длинного

  слова со знаком, которое содержит номер колонки.


       Описание.


       Процедура SMG$PASTE_VIRTAL_DISPLAY помещает дисплей на

  компоновочный пульт и делает дисплей видимым.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;

  SMG$_WRONUMARG

       - неправильное число аргументов.


       Пример.


      С           CREPAS    EXTRN'SMG$CREATE_PASTEBOARD'

      С           CREDIS    EXTRN'SMG$CREATE_VIRTUAL_DISPLAY'

      С           PUTCHA    EXTRN'SMG$CREATE_CHARS'

      С           PASDIS    EXTRN'SMG$CREATE_VIRTUAL_DISPLAY'

      С                     Z-ADD0          ZERO    90

      С                     Z-ADD1          LINCOL  90

      С                     Z-ADD2          LINE    90

      С                     Z-ADD5          COLUMN  90



                           - 229 -

                       00152-01 33 09-4


      С                     MOVE 'MENU'     OUT     4

      С* Создать компоновочный пульт

      С                     CALL CREPAS

      С                     PARM            PASTID  90 WL

      С                     PARMV           ZERO

      С                     PARM            HEIGTH  90 WL

      С                     PARM            WIDTH   90 WL

      С* Создать виртуальный дисплей

      С                     CALL CREDIS

      С                     PARM           HEIGHT      RL

      С                     PARM           WIDTH       RL

      С                     PARM           DISPID   90 WL

      С* Вывод 'меню'

      С                     CALL PUTCHA

      С                     PARM           DISPID      RL
       
      С                     PARMD          OUT

      С                     PARM           LINE        RL

      С                     PARM           COLUMN      RL

      С* Прикрепить виртуальный дисплей

      С                     CALL PASDIS

      С                     PARM           DISPID      RL

      С                     PARM           PASTID      RL

      С                     PARM           LINCOL      RL

      С                     PARM           LINCOL      RL

      С                     SETON                      LR


       Представленная  программа  на  языке  программирования

  RPGII изображает 'MENU', начиная в строке 2 колонке 5.



                           - 230 -

                       00152-01 33 09-4


       Программа на  языке  программирования  RPGII  вызывает

  несколько SMG процедур.  Другой  пример,  как  использовать

  процедуру SMG$PASTE_VIRTUAL_DISPLAY представлен в подразде-

  ле 1.12.



       1.55. SMG$POP_VIRTUAL_DISPLAY   -    удаление

             серии виртуальных дисплеев


       Процедура SMG$POP_VIRTUAL_DISPLAY удаляет определенный

  виртуальный  дисплей  и  все   дисплеи,   прикрепленные   к

  компоновочному  пульту  после  определенного   виртуального

  дисплея.


       Формат:


       SMG$POP_VIRTUAL_DISPLAY   дисплей, идентификатор


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение




                           - 231 -

                       00152-01 33 09-4


       Механизм: посредством ссылки


       Определяет самыи нижний (первый) виртуальный  дисплей,

  который будет удален.  Аргумент  дисплей  является  адресом

  длинного слова без знака, содержащего  идентификатор  дисп-

  лея.

       Значение     аргумента     возвращается     процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет компоновочный пульт, на котором имеет место

  удаление дисплея. Аргумент  идентификатор  явлется  адресом

  длинного слова без знака,  которое  содержит  идентификатор

  компоновочного пульта.


       Описание.


       Процедура SMG$POP_VIRTAUL_DISPLAY удаляет  (не  просто

  открепляет)  один  или  более  дисплеев   с   определенного

  компоновочного пульта, начиная с  определенного  дисплея  и

  включая все дисплеи, которые выше  в  порядке  прикрепления

  (это  значит,  что  они  прикреплены  после   определенного

  дисплея).






                           - 232 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.56. SMC$PUT_CHARS  -  запись   символов   в

             виртуальный дисплей


       Процедура  SMC$PUT_CHARS  записывает  на   виртуальный

  дисплей символы текста.


       Формат:


       SMG$PUT_CHARS дисплей, текст [,номер строки]

                     [,номер колонки] [,флаг]

                     [,видиопризнаки] [,дополнение]

                     [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения





                           - 233 -

                       00152-01 33 09-4


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет задействованный виртуальный дисплей.  Аргу-

  мент дисплей является адресом  длинного  слова  без  знака,

  содержащего идентификатор дисплея.

       Значение  данного  аргумента  возвращается  процедурой

  SMG$CREATE_VIRTUAL_DISPLAY.


       Текст


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Символы, записываемые на виртуальный дисплей. Аргумент

  текст является  адресом  дескриптора,  указывающего  строку

  символов.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение




                           - 234 -

                       00152-01 33 09-4


       Механизм: посредством ссылки


       Определяет строку, в которой  начинается  вывод.  Если

  аргумент опущен, вывод начинается в текущей  строке.  Аргу-

  мент номер строки является адресом целого длинного слова со

  знаком, которое содержит номер строки.


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет колонку, в которой начинается  вывод.  Если

  аргумент номер колонки опущен, вывод начинается  в  текущей

  колонке. Аргумент номер  колонки  является  адресом  целого

  длинного слова со знаком, которое содержит номер колонки.


       Флаг


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет, стирается ли строка перед записью  опреде-

  ленного текста. Аргумент  флаг  является  адресом  длинного

  слова без знака, которое содержит флаг. Если флаг  установ-

  лен, строка будет стерта. По умолчанию установлено не  сти-

  рать.



                           - 235 -

                       00152-01 33 09-4


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая видеопризнаки. Аргумент видеоприз-

  наки является адресом длинного слова без знака, содержащего

  маску видеопризнаков. Каждый бит признака в данном аргумен-

  те вызывает установку соответствующего действия на дисплее.


       Видеопризнаки, которыми можно управлять, следующие:

  SMG$M_BLINK

       - дисплейное мерцание символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видиопризнаком.  Это

         значит - использование противоположного  установлен-

         ному по умолчанию признака на дисплее;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.


       Если тот же самый бит установлен  в  обоих  аргументах

  видеопризнаки и  дополнение,  средство  управления  экраном

  использует аргумент дополнение вслед за аргументом  видеоп-

  ризнаки.  Используя  указанные  два  аргумента,  вызывающая

  программа может осуществлять независимый контроль за каждым




                           - 236 -

                       00152-01 33 09-4


  признаком в одном вызове процедуры.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая видеопризнаки. Аргумент дополнение

  является адресом длинного слова без знака, содержащего мас-

  ку видиопризнаков.

       Каждый бит признака в этом аргументе вызывает установ-

  ку соответствующего  действия  на  дисплее.  Видиопризнаки,

  которыми  можно  управлять,  такие  же  как   в   аргументе

  видеопризнаки.

       Действие, предпринимаемое средством управления экраном

  для различных комбинаций  видеопризнаков,  представленно  в

  табл. 8.

                                                    Таблица 8

  -----------------------------------------------------------

  Видиопризнаки ! Дополнение ! Действие

  -----------------------------------------------------------

        0       !    0       ! Признак не изменен

        1       !    0       ! Признак включен

        0       !    1       ! Признак установлен в дополне-

                !            ! ние к установленному по умол-

                !            ! чанию




                           - 237 -

                       00152-01 33 09-4


                                          Продолжение табл. 8

  -----------------------------------------------------------

  Видиопризнаки ! Дополнение ! Действие

  -----------------------------------------------------------

        1       !    1       ! Признак выключен




       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка является адресом длинного слова без знака, содер-

  жащего код символьной установки. Разрешенным является толь-

  ко значение SMG$C_ASCII, которое устанавливается по умолча-

  нию.


       Описание.


       Процедура SMG$PUT_CHARS записывает текст на определен-

  ный виртуальный дисплей, перезаписывая  любой  существующий

  текст  (см. подраздел  1.47  для  пояснения  записи  нового

  текста в то время как сохраняется существующий текст).

       По умолчанию установлено, что процедура  SMG$PUT_CHARS

  изменяет только те символы, в позиции которых  записывается

  новый текст. Однако,  вызывающая  программа  может  стереть



                           - 238 -

                       00152-01 33 09-4


  строку перед записыванием нового текста установкой аргумен-

  та флаг. Курсор остается в позиции символа, непосредственно

  следующего за последним записанным символом. Расматриваемая

  процедура записывает одну  строку;  превышающие  символы  в

  конце строки отбрасываются.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVCOL

       - неверная колонка;

  SMG$_INVROW

       - неверныя строка;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  LIB$_INVSTRDES

       - неверный дескриптор строки.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует использование процедуры SMG$PUT_CHARS.

  С-

        INTEGER SMG$CRFATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$PUT_CHARS



                           - 239 -

                       00152-01 33 09-4


        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS, BORDER

  С+

  С  Создать виртуальный дисплей. Дать его границу, уста-

  С  новить BORDER=1. Отсутствие границы будет BORDER=0.

  С-

        ROWS = 7

        COLUMNS = 60

        BORDER = 1



        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, BORDER)

        IF (.NOT. ISTATUS) WRITE (6, 900)

     1   'CREATE_VIRTUAL_DISPLAY', ISTATUS

  С+

  С  Создать компоновочный пульт.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

        IF (.NOT. ISTATUS) WRITE (6, 900)

     1   'SMG$CREATE_PASTEBOARD', ISTATUS

  С+

  С  Послать данные в виртуальный дисплей.

  С-

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1            'THIS VIRTUAL DISPLAY HAS 7 ROWS AND 50

     1            COLUMNS'

        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1            'THIS IS а BORDERED VIRTUAL DISPLAY'




                           - 240 -

                       00152-01 33 09-4


        ISTATUS = SMG$PUT_CHARS (DISPLAY1,

     1            'SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL

     1            DISPLAY'

  С+

  С  Прикрепить виртуальный дисплей.

  С-

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (DISPLAY1, PASTE1, 4, 15)

  900   FORMAT ('ROUTINE',A,'RETURNED А STATUS OF',Z8)

        END


       Вывод полученной программой на языке  программирования

  ФОРТРАН, показан на рис. 20.


  !---------------------------------------------------------!
  !                                                         !
  !                                                         !
  !     THIS VIRTUAL DISPLAY HAS 7 WOS AND 50 COLUMNS       !
  !                                                         !
  !     THIS IS А BORDERED VIRTUAL DISPLAY                  !
  !                                                         !
  !     SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY     !
  !                                                         !
  !                                                         !
  !---------------------------------------------------------!

                           Рис. 20



       Пример того, как вызвать  процедуру  SMG$PUT_CHARS  из

  программы на языке RPGII, представлен в подразделе 1.12.












                           - 241 -

                       00152-01 33 09-4


       1.57. SMG$PUT_CHARS_HIGHWIDE     -     запись

             символов двойной ширины и высоты


       Процедура  SMG$PUT_CHARS_HIGHWIDE  записывает  символы

  двойной ширины и высоты на виртуальный дисплей.

       Формат:


       SMG$PUT_CHARS_HIGHWIDE  дисплей, текст [,номер строки]

                               [,номер колонки]

                               [,видеопризнаки] [,дополнение]

                               [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   задействованный   виртуальный    дисплей.

  Аргумент дисплей является адресом длинного слова без знака,

  которое содержит идентификатор дисплея.




                           - 242 -

                       00152-01 33 09-4


       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Текст


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Символы, записываемые на виртуальный дисплей. Аргумент

  текст является адресом дескриптора, указывающего на текст.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  строку,  в   которой   начинается   вывод.

  Аргумент номер  строки  является  адресом  целого  длинного

  слова со знаком, которое содержит номер строки. Если данный

  аргумент опущен или равен нулю, вывод начинается в  текущей

  строке.


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение




                           - 243 -

                       00152-01 33 09-4


       Механизм: посредством ссылки


       Определяет  колонку,  в  которой   начинается   вывод.

  Аргумент номер колонки  является  адресом  целого  длинного

  слова со знаком, которое содержит номер колонки. Если  дан-

  ный аргумент опущен или  равен  нулю,  вывод  начинается  в

  текущей колонке.


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска,  которая  содержит  видеопризнаки  записываемой

  строки. Аргумент видеопризнаки  является  адресом  длинного

  слова без знака,  которое  содержит  маску  видеопризнаков.

  Каждый бит признака в данном аргументе  вызывает  установку

  соответствующего действия на дисплее.


       Видеопризнаки, которыми можно управлять, следующие:

  SMG$M_BLINK

       - мерцание символов на дисплее;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше нормальной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком;  это

         значит     -     использование      противоположного

         установленному   по   умолчанию   видеопризнака   на



                           - 244 -

                       00152-01 33 09-4


         виртаульном дисплее;

  SMG$M_UNDERLINE

       - подчеркивание символов на дисплее.


       Если тот же самый бит установлен в  аргументах  видеп-

  ризнаки и дополнение, средство управления экраном используя

  аргумент  дополнение  вслед  за  аргументом  видеопризнаки.

  Используя указанные  два  аргумента,  вызывающая  программа

  может осуществить независимый контроль за каждым  признаком

  в одном вызове.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: целое длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, содержащая видеопризнаки  записываемой  строки.

  Аргумент дополнение является адресом целого длинного  слова

  без знака, которое содержит маску видеопризнаков.

       Каждый  бит  признака  в  данном  аргументе   вызывает

  установку    соответствующего    признака    на    дисплее.

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

  аргументе такие же, как в аргументе видеопризнаки.

       Действие,   предпринимаемое    средством    управления

  экраном, для различных комбинаций признаков, представлено в

  табл. 9.






                           - 245 -

                       00152-01 33 09-4


                                                   Таблица 9

  ----------------------------------------------------------

   Видеопризнаки ! Дополнение !    Действие

  ---------------+------------+-----------------------------

         0       !      0     ! Признак не изменен

         1       !      0     ! Признак включен

         0       !      1     ! Признак установлен в допол-

                 !            ! нение  к  установленному по

                 !            ! умолчанию

         1       !      1     ! Признак выключен




       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка  является  адресом  длинного  слова  без   знака,

  которое  содержит  код  символьной  установки.  Действующим

  является  значение  SMG$C_ASCII,  которое  установлено   по

  умолчанию.


       Описание.


       SMG$PUT_CHARS_HICHWIDE  записывает   символы   двойной

  высоты и ширины на специфицированном  виртуальном  дисплее.



                           - 246 -

                       00152-01 33 09-4


  соотвествующая строка компоновочного пульта не  может  сос-

  тоять  из  символов  единичной  высоты/ширины   и   двойной

  высоты/ширины.  Если  строка  содержит  символы   единичной

  высоты/ширины, то вся строка  будет  переписана  в  символы

  двойной высоты/ширины. В противном  случае,  будет  записан

  только  определяемый  текст.  Если  текст  не   перекрывает

  строки, то строка дополняется пробелами. Виртуальный курсор

  остается в позиции символа, непосредственно  следующего  за

  последним записанным текстом.

       Если терминал не поддерживает символы двойной  высоты,

  одни и те же символы будут отображены на  двух  последующих

  строках.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVCOL

       - неверная строка;

  SMG$_INVROW

       - неверная колонка;

  LIB$_INVSTRDES

       - неверный дескриптор строки;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей.







                           - 247 -

                       00152-01 33 09-4


       1.58. SMG$PUT_CHARS_WIDE  -  запись  символов

             двойной ширины


       Процедура   SMG$PUT_CHARS_WIDE   записывает    символы

  двойной ширины на виртуальном дисплее.


       Формат:


       SMG$PUT_CHARS_WIDE  дисплей, текст [,номер строки]

                           [,номер колонки] [,видеопризнаки]

                           [,дополнение]

                           [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   задействованный   виртуальный    дисплей.

  Аргумент дисплей - адрес длинного слова без знака,  которое

  содержит идентификатор дисплея.



                           - 248 -

                       00152-01 33 09-4


       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Текст


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Символы, записываемые на виртуальный дисплей. Аргумент

  текст - адрес дескриптора, указывающего на текст.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  строку,  в   которой   начинается   вывод.

  Аргумент номер  строки  является  адресом  целого  длинного

  слова со знаком, которое содержит номер строки. Если данный

  аргумент опущен или равен нулю, вывод начинается в  текущей

  строке.


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение




                           - 249 -

                       00152-01 33 09-4


       Механизм: посредством ссылки


       Определяет  колонку,  в  которой   начинается   вывод.

  Аргумент номер колонки  является  адресом  целого  длинного

  слова со знаком, которое содержит номер колонки. Если  дан-

  ный аргумент опущен или  равен  нулю,  вывод  начинается  в

  текущей колонке.


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, содержащая видеопризнаки  записываемой  строки.

  Аргумент видеопризнаки - адрес длинного  слова  без  знака,

  которое содержит маску видеопризнаков. Каждый бит  признака

  в  данном  аргументе  вызывает  установку  соответствующего

  действия на дисплее.


       Видеопризнаки, которыми можно управлять, следующие:

  SMG$M_BLINK

       - мерцание символов на дисплее;

  SMG$M_BOLD

       - дисплейные символы с интенсивностью выше нормальной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком,  что

         означает    -     использование     противоположного

         установленному по умолчанию видеопризнака;



                           - 250 -

                       00152-01 33 09-4


  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.


       Если тот же самый бит установлен в аргументах  видеоп-

  ризнаки и дополнение, средство управления экраном используя

  аргумент  дополнение  вслед  за  аргументом  видеопризнаки.

  Используя указанные  два  аргумента,  вызывающая  программа

  может осуществлять независимый контроль за каждым признаком

  в одном вызове.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, содержащая видеопризнаки  записываемой  строки.

  Аргумент дополнение  -  адрес  длинного  слова  без  знака,

  которое содержит маску видеопризнаков. Каждый бит  признака

  в  данном  аргументе  вызывает  установку  соответствующего

  действия  на   дисплее.   Видеопризнаки,   которыми   можно

  управлять, в рассматриваемом аргументе такие же,  как  и  в

  аргументе видеопризнаки.

       Действие, предпринимаемое средством управления экраном

  для различных комбинаций признаков, представленно  в  табл.

  10.








                           - 251 -

                       00152-01 33 09-4


                                                  Таблица 10

  ----------------------------------------------------------

   Видеопризнаки ! Дополнение !        Действие

  ---------------+------------+-----------------------------

         0       !      0     ! Признак не изменен

         1       !      0     ! Признак  включен

         0       !      1     ! Признак установлен в дополне

                 !            ! ние к установленному по умол

                 !            ! чанию

         1       !      1     ! Признак выключен




       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка  является  адресом  длинного  слова  без   знака,

  которое  содержит  код  символьной  установки.  Действующим

  является  значение  SMG$C_ASCII,  которое  установлено   по

  умолчанию.


       Описание.


       SMG$PUT_CHARS_WIDE записывает текст двойной ширины  на

  специфицированном виртуальном  дисплее,  переписывая  любой



                           - 252 -

                       00152-01 33 09-4


  существующий текст. Строка не может  состоять  из  символов

  единичной и двойной ширины. Если  строка  содержит  символы

  единичной  ширины,  то   строка   вся   будет   переписана.

  Виртуальный  курсор  находится  слева  от  позиции  первого

  символа, следующего за записанным текстом.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVCOL

       - неверная колонка;

  SMG$_INVROW

       - неверная строка;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  LIB$_INVSTRDES

       - неверный дескриптор строки.



       1.59. SMG$PUT_LINE - запись строки текста  на

             виртуальный дисплей.


       Процедура SMG$PUT_LINE  записывает  строку  текста  на

  виртуальный дисплей.


       Формат:


       SMG$PUT_LINE  дисплей, текст [,число строк]




                           - 253 -

                       00152-01 33 09-4


                     [,видеопризнаки] [,дополнение] [,флаг]

                     [,символьная установка]


       Код возврата:


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   задействованный   виртуальный    дисплей.

  Аргумент дисплей - адрес длинного слова без знака,  которое

  содержит идентификатор дисплея.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Текст


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора




                           - 254 -

                       00152-01 33 09-4


       Символы, записываемые на виртуальный дисплей. Аргумент

  текст - адрес дескриптора, указыающего на текст.


       Число строк


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Число  приподнимаемых  строк.  Аргумент  число   строк

  является адресом целого длинного слова со  знаком,  которое

  содержит число приподнимаемых строк  после  вывода.  Данный

  аргумент необязателен.


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска,  которая  содержит  видеопризнаки  записываемой

  строки. Аргумент видеопризнаки - адрес длинного  слова  без

  знака, которое содержит маску  видеопризнаков.  Каждый  бит

  признака   в   данном    аргументе    вызывает    установку

  соответствующего действия на дисплее.


       Видеопризнаки, которыми можно управлять, следующие:

  SMG$M_BLINK

       - мерцание символов на дисплее;



                           - 255 -

                       00152-01 33 09-4


  SMG$M_BOLD

       - дисплейные символы с яркостью выше нормальной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком;  это

         значит     -     использование      противоположного

         установленному по умолчанию видеопризнака;

  SMG$M_UNDERLINE

       - подчеркивание символов на дисплее.


       Если тот же самый бит установлен в аргументах  видеоп-

  ризнаки и дополнение, средство управления  экраном  исполь-

  зует аргумент дополнение вслед за аргументом видеопризнаки.

  Используя указанные  два  аргумента,  вызывающая  программа

  может осуществлять независимый контроль за каждым признаком

  в одном вызове.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: целое длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, содержащая видеопризнаки  записываемой  строки.

  Аргумент дополнение является адресом целого длинного  слова

  без знака, которое содержит маску видеопризнаков.

       Каждый  бит  признака  в  данном  аргументе   вызывает

  установку    соответствующего    действия    на    дисплее.

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




                           - 256 -

                       00152-01 33 09-4


  аргументе такие же, как в аргументе видеопризнаки.

       Действие,   предпринимаемое    средством    управления

  экраном, для различных комбинаций признаков,  представленно

  в табл. 11.

                                                  Таблица 11

   ---------------------------------------------------------

    Видеопризнаки ! Дополнение !         Действие

   ---------------------------------------------------------

          0       !      0     ! Признак не изменен

          1       !      0     ! Признак включен

          0       !      1     ! Признак установлен в допол-

                  !            ! нение к установленному по

                  !            ! умолчанию

          1       !      1     ! Признак выключен




       Флаг


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет действие,  предпринимаемое  если  текст  не

  вмещается в строку. Аргумент флаг является адресом длинного

  слова  без  знака,  которое  содержит  флаг.  0  определяет

  отсутствие  переноса  (установлено  по  умолчанию),   а   1

  определяет возможность переноса.







                           - 257 -

                       00152-01 33 09-4


       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка  является  адресом  длинного  слова  без   знака,

  которое  содержит  код  символьной  установки.  Действующим

  является  значение  SMG$C_ASCII,  которое  установлено   по

  умолчанию.


       Описание.


       Процедура SMG$PUT_LINE  записывает  строки  текста  на

  виртуальный дисплей.

       Процедура  SMG$PUT_LINE   записывает   целую   строку,

  начиная с текущей позиции виртуального курсора. Если  текст

  не  перекрывает  целой  строки,   то   строка   дополняется

  пробелами.

       Если установлен  флаг,  строки  могут  перемещаться  в

  область, определенную аргументом  число  строк.  Если  флаг

  чист, избыточные символы отбрасываются.

       После  вызова   SMG$PUT_LINE,   позиция   виртуального

  курсора установлена в колонке 1 строки, следующей за  выво-

  дом. Аргумент число строк по умолчанию устанавливается в  1

  так, чтобы последующие обращения к SMG$PUT_LINE не вызывали




                           - 258 -

                       00152-01 33 09-4


  перекрытия.  Другие  SMG  процедуры,  которые  могут   быть

  использованы для записи строк текста на виртуальный дисплей

  - это процедуры SMG$PUT_LINE_WIDE, SMG$PUT_LINE_HIGHWIDE.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVSTRDES

       - неверный дескриптор строки.


       Пример.


  С+

  С  Программа на языке программирования ФОРТРАН показывает

  С  использование процедуры SMG$PUT_LINE.

  С-

  С+

  С  Включить SMG определения. В частности необходимо

  С  SMG$M_BORDER и SMG$M_UNDERLINE.

  С-

          INCLUDE '($SMGDEF)'

          INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1    SMG$CREATE_PASTEBOARD

          INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$PUT_CHARS

          INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS



                           - 259 -

                       00152-01 33 09-4


          CHARACTER*30 техт(3)

  С+

  С  Создать виртуальный дисплей с границей.

  С-

          ROWS = 7

          COLUMNS = 50

          ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1              (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

          IF (.NOT. ISTATUS) WRITE (6, 900)

     1     'SMG$CREATE_VIRTUAL_DISPLAY', ISTATUS

  С+

  С  Создать компоновочный пульт.

  С-

          ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

          IF (.NOT. ISTATUS) WRITE (6, 900)

     1     'SMG$CREATE_PASTEBOARD', ISTATUS

  С+

  С  Поместить данные на виртуальный дисплей.

  С-

          техт(1) = 'THIS VIRTUAL DISPLAY HAS 7'

          техт(2) = 'ROWS AND 50 COLUMNS'

          техт(3) = 'техт ENTERED BY SMG$PUT_LINE'

  С+

  С  После первой строки отпечатанного текста

  С  вызвать SMG$PUT_LINE для пропуска двух строк.

  С-

          ISTATUS = SMG$PUT_LINE ( DISPLAY1, техт(1), 2)




                           - 260 -

                       00152-01 33 09-4


  С+

  С  Теперь, используя SMG$PUT_LINE, подчеркнуть следующую

  С  строку текста

  С-

          ISTATUS = SMG$PUT_LINE ( DISPLAY1, техт(2), 1,

     1              SMG$M_UNDERLINE)

  С+

  С  Вывести на дисплей три строки текста

  С-

          ISTATUS = SMG$PUT_LINE ( DISPLAY1, техт(3))

  С+

  С  Прикрепить виртуальный дисплей

  С-

          ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1,

     1              PASTE1, 4, 15)

  900     FORMAT (' ROUTINE ',А,' RETURNED A  OF ',Z8)
 
          END
 

       Вывод, полученный программой на языке программирования

  ФОРТРАН, приведен на рис. 21.


  --------------------------------------------------
  !                                                !
  !   THIS VIRTUAL DISPLAY HAS 7                   !
  !                                                !
  !                                                !
  !   ROWS AND 50 COLUMNS                          !
  !   -------------------                          !
  !                                                !
  !   техт ENTERED BY SMG$PUT_LINE                 !
  !                                                !
  --------------------------------------------------

                         Рис. 21




                           - 261 -

                       00152-01 33 09-4





       1.60. SMC$PUT_LINE_HIGHWIDE - запись строки с

             символами двойной высоты и ширины


       Процедура SMC$PUT_LINE_HIGHWIDE  записывает  строки  с

  символами двойной высоты и ширины.


       Формат:


       SMC$PUT_LINE_HIGHWIDE дисплей, текст [,число строк]

                             [,видеопризнаки] [,дополнение]

                             [,флаг] [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: целое длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Идентификатор  дисплея.  Аргумент   дисплей   является

  адресом, который содержит идентификатор дисплея.




                           - 262 -

                       00152-01 33 09-4


       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Текст


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Выводимый  текст.  Аргумент  текст  является   адресом

  дескриптора, указывающего на записываемый текст.


       Число строк


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Число  приподнимаемых  строк.  Аргумент  число   строк

  является адресом целого длинного слова со  знаком,  которое

  содержит число приподнимаемых строк  после  вывода.  Данный

  аргумент необязателен.


       Видеопризнаки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки




                           - 263 -

                       00152-01 33 09-4


       Видеопризнаки. Аргумент видеопризнаки является адресом

  длинного слова со знаком, которое  содержит  видеопризнаки.

  Каждый бит признака в данном аргументе  вызывает  установку

  соответствующего действия на дисплее.


       Дополнение


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Дополнение  к  видеопризнакам.   Аргумент   дополнение

  является адресом длинного слова со знаком, которое содержит

  видеопризнаки.  Каждый  бит  признака  в  данном  аргументе

  вызывает дополнение к установке видеопризнака.

       Если тот же самый бит  определен  в  обоих  аргументах

  видеопризнаки и дополнение, используется аргументом  допол-

  нение вслед за аргументом видеопризнаки.  Используя  вместе

  указанные  два  аргумента,   вызывающая   программа   может

  осуществлять произвольный и независимый контроль за видеоп-

  ризнаком в одном вызове.

       Действие, предпринимаемое средством  управления  экра-

  ном, для различных признаков, проедставленно в табл. 12.













                           - 264 -

                       00152-01 33 09-4


                                                   Таблица 12

  -----------------------------------------------------------

   Видеопризнаки ! Дополнение !      Действие      

  ---------------+------------+------------------------------

         0       !      0     ! Признак не изменен

         1       !      0     ! Признак включен

         0       !      1     ! Признак установлен в

                 !            ! дополнение к установленному

                 !            ! по умолчанию

         1       !      1     ! Признак выключен




       Признаки, которыми можно управлять, следующие:

  SMG$M_BLINK

       - мерцание дисплейных символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратном  видеопризнаком.  Это

         значит  -  использование  изображения  с   признаком

         противоположным установленному по умолчанию;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.


       Флаг


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)





                           - 265 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством ссылки


       Значение, используемое  для  определения  возможен  ли

  перенос или нет. Аргумент флаг является длинным  словом  со

  знаком, которое содержит флаг. 0 означает отсутствие  пере-

  носа,  а  1  означает  возможность  переноса.  Если  данный

  аргумент опущен, по  умолчанию  устанавливается  отсутствие

  переноса.


       Символьная установка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Для выбора символьной установки используются следующие

  обозначения:

       - SMG$C_UNITED_KINGDOM;

       - SMG$C_ASCII (установлено по умолчанию);

       - SMG$C_SPEC_CRAPHICS;

       - SMG$C_ALT_CHAR;

       - SMG$C_ALT_CRAPHICS.


       Рассматриваемый аргумент необязателен.


       Описание.


       Процедура SMG$PUT_LINE_HIGHWIDE используется для запи-

  си строк с символами двойной высоты и ширины на виртуальном



                           - 266 -

                       00152-01 33 09-4


  дисплее. Процедура SMG$PUT_LINE_HIGHWIDE записывает текст с

  текущей позиции виртуального курсора до конца строки.  Если

  текст вызывающей программы не перекрывает строку, то строка

  дополняется пробелами.

       Обработка текста, который  превышает  ширину  дисплея,

  зависит от аргумента флаг.  Если  флаг  установлен,  строка

  может  переместиться  столько  раз,   сколько   указано   в

  аргументе число строк для  образования  пространства.  Если

  флаг не установлен, переполняющие символы теряются.

       После     вызова     SMG$PUT_LINE_HIGHWIDE     позиция

  виртуального курсора устанавливается в колонку 1  следующей

  строки, которая располагается после вывода. Аргумент  число

  строк  по  умолчанию  устанавливается  в   2,   так   чтобы

  последующие обращения к SMG$PUT_LINE_HIGHWIDE  не  вызывали

  перекрытия.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число (или комбинация) аргументов;

  LIB$_INVSTRDES

       - неверный дескриптор строки.













                           - 267 -

                       00152-01 33 09-4


       1.61. SMG$PUT_LINE_WIDE  -  запись  строки  с

             символами двойной ширины


       Процедура SMG$PUT_LINE_WIDE записывает строку с симво-

  лами двойной ширины на виртуальном дисплее.


       Формат:


       SMG$PUT_LINE_WIDE  дисплей, текст [,число строк]

                          [,видеопризнаки] [,дополнение]

                          [,флаг] [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   задействованный   виртуальный    дисплей.

  Аргумент дисплей является адресом длинного слова без знака,

  которое содержит идентификатор дисплея.





                           - 268 -

                       00152-01 33 09-4


       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Текст


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Символы, записываемые на виртуальный дисплей. Аргумент

  текст является адресом дескриптора, указывающего на текст.


       Число строк


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет число приподнимаемых  строк  после  вывода.

  Аргумент число строк  -  адрес  целого  длинного  слова  со

  знаком, которое содержит число приподнимаемых строк.


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки






                           - 269 -

                       00152-01 33 09-4


       Маска, обозначающая видеопризнаки записываемой строки.

  Аргумент видеопризнаки является адресом длинного слова  без

  знака,  содержащего  маску   видеопризнаков.   Каждый   бит

  признака   в   данном    аргументе    вызывает    установку

  соответствующего действия на дисплее.


       Видеопризнаки, которыми можно управлять, следующие:

  SMG$M_BLINK

       - мерцание дисплейных символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком;  это

         значит  -  использование  изображения  с  признаком,

         противоположным установленному по умолчанию;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.


       Если тот же самый бит установлен  в  обоих  аргументах

  видеопризнаки и  дополнение,  средство  управления  экраном

  использует аргумент дополнение вслед за аргументом  видеоп-

  ризнаки.  Используя  указанные  два  аргумента,  вызывающая

  программа может осуществлять независимый контроль за каждым

  признаком в одном вызове.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)




                           - 270 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая видеопризнаки записываемой строки.

  Аргумент дополнение  -  адрес  длинного  слова  без  знака,

  содержащего маску видеопризнаков.

       Каждый  бит  признака  в  данном  аргументе   вызывает

  установку    соответствующего    действия    на    дисплее.

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

  аргументе видеопризнаки.

       Действие, предпринимаемое средством управления экраном

  для различных комбинаций признаков, представленно  в  табл.

  13.

                                                  Таблица 13

  ----------------------------------------------------------

   Видеопризнаки ! Дополнение !    Действие

  ---------------+------------+-----------------------------

         0       !      0     ! Признак не изменен

         1       !      0     ! Признак включен

         0       !      1     ! Признак установлен в допол-

                 !            ! нение к установленному по

                 !            ! умолчанию

         1       !      1     ! Признак выключен




       Флаг


       Использование в МОС ВП: длинное слово маски





                           - 271 -

                       00152-01 33 09-4


       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет действие,  предпринимаемое  если  текст  не

  вмещается в строку. Аргумент флаг является адресом длинного

  слова без знака, содержащего флаг. 0 определяет  отсутствие

  переноса (установлено по умолчанию),а 1 определяет  возмож-

  ность переноса.


       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка - адрес длинного слова без знака, содержащего код

  символьной   установки.   Разрешенным   является   значение

  SMG$C_ASCII, которое устанавливается по умолчанию.


       Описание.


       Процедура SMG$PUT_LINE_WIDE записывает  строки  текста

  двойной ширины на  виртуальном  дисплее.  SMG$PUT_LINE_WIDE

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

  виртуального курсора. Если текст  вызывающей  программы  не

  заполняет всю строку, то строка дополняется пробелами.




                           - 272 -

                       00152-01 33 09-4


       Если  установлен   флаг,   строки   продвигаются   для

  образования пространства для переполняющих символов очеред-
                           
  ной строки дисплея. Если флаг чист, то  избыточные  символы

  отбрасываются.

       После вызова  SMG$PUT_LINE_WIDE  позиция  виртуального

  курсора установлена в колонку 1 следующей строки,  располо-

  женной после вывода.  Аргумент  число  строк  по  умолчанию

  установлен  в  1,  так  чтобы  последующие   обращнения   к

  SMG$PUT_LINE_WIDE не вызывали перекрытия.

       Другими процедурами, которые могут  быть  использованы

  для  записи  текста  на   виртуальный   дисплей,   являются

  SMG$PUT_LINE, SMG$PUT_LINE_HIGHWIDE.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неправильный аргумент дисплей;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  LIB$_INVSTRDES

       - неверный дескриптор строки.


       Пример.


  С+

  С  Эта программа на языке программирования ФОРТРАН

  С  показывает использование процедуры SMG$PUT_LINE_WIDE.

  С



                           - 273 -

                       00152-01 33 09-4


  С  Включить SMG определения. В частности, SMG$M_BORDER и

  С  SMG$M_UNDERLINE.

  С-

          INCLUDE '($SMGDEF)'

          INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1    SMG$CREATE_PASTEBOARD

          INTEGER SMG$PASTE_VIRTUAL_DISPLAY,

     1    SMG$PUT_LINE_WIDE

          INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS

          CHARACTER*34 техт(3)

  С+

  С  Создать виртуальный дисплей, используя

  С  SMG$CREATE_VIRTUAL_DISPLAY.

  С-

          ROWS = 7

          COLUMNS = 70

          ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1              (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

          IF (.NOT. ISTATUS) WRITE (6, 900)

     1     'SMG$CREATE_VIRTUAL_DISPLAY', ISTATUS

  С+

  С  Вызвать SMG$CREATE_PASTEBOARD для создания

  С  компоновочного пульта.

  С-

          ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

          IF (.NOT. ISTATUS) WRITE (6, 900)

     1     'SMG$CREATE_PASTEBOARD', ISTATUS




                           - 274 -

                       00152-01 33 09-4


  С+

  С  Использовать SMG$PUT_LINE для вывода данных на

  С  виртуальный дисплей.

  С-

          техт(1) = 'THIS VIRTUAL DISPLAY HAS 7'

          техт(2) = 'ROWS AND 70 COLUMNS.'

          техт(3) = 'техт ENTERED BY SMG$PUT_LINE_WIDE.'

  С+

  С  После вывода первой строки текста продвинуться на

  С  две строки.

  С-

          ISTATUS = SMG$PUT_LINE_WIDE (DISPLAY1, техт(1), 2)

  С+

  С  Подчеркнуть следующую строку текста.

  С-

          ISTATUS = SMG$PUT_LINE_WIDE ( DISPLAY1, техт(2), 1,

     1              SMG$UNDERLINE)

  С+

  С  Вывести три строки текста.

  С-

          ISTATUS = SMG$PUT_LINE_WIDE ( DISPLAY1, техт(3))

  С+

  С  Прикрепить виртуальный дисплей, используя

  С  SMG$PASTE_VIRTUAL_DISPLAY.

  С-

          ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1,

     1              PASTE1, 4, 5)




                           - 275 -

                       00152-01 33 09-4


  900     FORMAT (' ROUTINE ',А,' RETURNED А STATUS OF ',Z8)

          END


       Вывод, полученный программой на языке программирования

  ФОРТРАН, представлен на рис.22.


  --------------------------------------------------
  !                                                !
  !   THIS VIRTUAL DISPLAY HAS 7                   !
  !                                                !
  !   ROWS AND 70 COLUMNS                          !
  !   -------------------                          !
  !                                                !
  !   техт ENTERED BY SMG$PUT_LINE_WIDE            !
  !                                                !
  --------------------------------------------------

                           Рис. 22




       1.62. SMG$PUT_PASTEBOARD    -    запись    на

             компоновочный  пульт  через   программу

             компоновочного пульта


       Процедура  SMG$PUT_PASTEBOARD  позволяет  осуществлять

  запись информации на компоновочный  пульт  через  программу

  компоновочного пульта.


       Формат:


       SMG$PUT_PASTEBOARD  идентификатор, программа,

                           аргумент, флаг


       Код возврата:


       Использование в МОС ВП: значение состояния





                           - 276 -

                       00152-01 33 09-4


       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Идентификатор    компоновочного    пульта.    Аргумент

  идентификатор является адресом  целого  длинного  слова  со

  знаком, содержащего идентификатор компоновочного пульта.


       Программа


       Использование в МОС ВП: длинное слово без знака

       Тип: маска входа в процедуру

       Доступ: только чтение

       Механизм: посредством ссылки


       Программа компоновочного  пульта.  Аргумент  программа

  является адресом вызываемой программы.


       Аргумент


       Использование в МОС ВП: аргумент пользователя

       Тип: целое длинное слово (со знаком)





                           - 277 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством ссылки


       Аргумент компоновочного пульта. Используемое  значение

  является аргументом, определяемым пользователем  и  переда-

  ваемым в программу. Если аргумент опущен, то будет  передан

  нуль как используемый аргумент.


       Флаг


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Флаг (0 или 1).  Если  1,  то  первая  передаваемая  в

  программу строка будет переводом формата. Если аргумент  не

  определен, то не будет передан перевод формата.


       Описание.


       Процедура SMG$PUT_PASTEBOARD дает возможность произво-

  дить запись на компоновочный пульт через программу.  Проце-

  дура определяет программу, которая вызывается один раз  для

  каждой  строки  компоновочного  пульта.   Программа   будет

  получать  дескриптор  для  данной  строки  через   аргумент

  пользователя.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;



                           - 278 -

                       00152-01 33 09-4


  другие

       - ошибка, возвращаемая от программы пользователя.



       1.63. SMG$PUT_VIRTUAL_DISPLAY_ENCODED       -

             запись кодированной строки на дисплее


       Процедура  SMG$PUT_VIRTUAL_DISPLAY_ENCODED   позволяет

  записать на виртуальном дисплее строки, многократно исполь-

  зуя видеопризнаки.


       Формат:


       SMG$PUT_VIRTUAL_DISPLAY_ENCODED дисплей, длина, текст

                            [,номер строки] [,номер колонки]

                             [,флаг] [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки




                           - 279 -

                       00152-01 33 09-4


       Определяет   задействованный   виртуадьный    дисплей.

  Аргумент дисплей является адресом длинного слова без знака,

  которое содержит идентификатор дисплея.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Длина


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Длина кодированной  строки.  Аргумент  длина  -  адрес

  длинного  слова   без   знака,   которое   содержит   длину

  кодированной строки.


       Текст


       Использование в МОС ВП: адрес

       Тип: неопределенный

       Доступ: только чтение

       Механизм: посредством ссылки


       Структура  данных,  передаваемая  посредством  ссылки.

  Аргумент текст является адресом данных.

       Структура данных имеет три части:

       1) записываемый на дисплей текст;

       2)  одна  или  более  "троек",   каждая   из   которых

  определяет:




                           - 280 -

                       00152-01 33 09-4


       - начальную позицию поля в пределах текста;

       - длину поля;

       - видеопризнак для данного поля;

       3) целое число без знака, определяющее  число  байт  в

  тексте, которые не являются частью записываемого на дисплей

  текста, т.е. число байт во всех тройках плюс два байта  для

  целого слова без знака.

       Формат структуры данных, представлен в табл. 14.

                                                  Таблица 14

                    Формат структуры данных

  ----------------------------------------------------------

    Текст строки  ! Тройка ! Тройка ! Длина заключительной

                  !        !        !        части

  ----------------+--------+--------+-----------------------

  (Длина кодиро-  !        !        !  

  ванной строки - !        !        !

  длина заключи-  !        !        !

  тельной части)  ! 5 байт ! 5 байт !    2 байта




       Каждая "тройка" содержит пять байт:

       1) два байта для целого слова без знака, определяющего

  начальную  позицию  в  пределах  текста.   Первая   позиция

  нумеруется 1;

       2) два байта для целого слова без знака, определяющего

  число байт в поле;

       3) один байт, определяющий видеопризнаки для поля.





                           - 281 -

                       00152-01 33 09-4


       Каждая   "тройка"    обрабатывается    независимо    и

  видеопризнаки применяются в порядке определения. т.е., если

  одна "тройка" определяет подчеркивание символов в  позициях

  с 1 до 5, а другая "тройка" определяет  выделение  символов

  по яркости в позициях с 3 по 5, то  выделение  символов  по

  яркости наложится на подчеркивание в позициях с 3 по 5. Для

  определения более, чем одного признака  используется  логи-

  ческая операция "или".


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет строку, в которой начинается запись.  Аргу-

  мент номер строки является адресом целого длинного слова со

  знаком, которое содержит номер строки. Если аргумент опущен

  или если он равен нулю,  то  запись  начинается  в  текущей

  строке.


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет колонку, в которой начинается запись. Аргу-




                           - 282 -

                       00152-01 33 09-4


  мент номер колонки является адресом целого  длинного  слова

  со знаком, которое  содержит  номер  колонки.  Если  данный

  аргумент опущен или если он равен нулю, то запись начинает-

  ся в текущей колонке.


       Флаг


       Использование в МОС ВП: длинное слово маски

       Тип: целое длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет действие, если текст не размещается в стро-

  ке дисплея. Аргумент флаг является адресом  длинного  слова

  без знака, которое содержит флаг. Нуль определяет невозмож-

  ность переноса (по умолчанию), а единица допускает перенос.


       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: целое длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет по умолчанию набор символов для всего текс-

  та  виртуального  дисплея.  Аргумент  символьная  установка

  является адресом длинного слова без знака, которое содержит

  код  набора   символов.   Допустимым   значением   является

  SMG$C_ASCII, которое установлено по умолчанию.






                           - 283 -

                       00152-01 33 09-4


       Описание.


       Процедура  SMG$PUT_VIRTUAL_DISPLAY_ENCODED  записывает

  кодированную строку на заданном виртуальном  дисплее.  Если

  аргументы номер строки  и  номер  колонки  опущены,  строка

  записывается,  начиная  с  текущей   позиции   виртуального

  курсора. Если текст  не  заполняет  целую  строку,  то  она

  дополняется пробелами.

       Рассматриваемая процедура применима для записи  строк,

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

  строки.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$INVARG

       - неверный   аргумент   или   комбинация   аргументов.

         Например, одна из "троек" может определять начальный

         байт и число байт, которые превышают длину строки;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  LIB$_INSVIRMEN

       - недостаточная виртуальная память.



       1.64. SMG$PUT_WITH_SCROLL - запись  текста  и

             продвижение


       Процедура  SMG$PUT_WITH_SCROLL  записывает  текст   на

  виртуальном дисплее и  перемещает  информацию  на  дисплее,



                           - 284 -

                       00152-01 33 09-4


  если это необходимо.


       Формат:


       SMG$PUT_WITH_SCROLL дисплей [,текст] [,направление]

                           [,видеопризнаки] [,дополнение]

                           [,флаг] [,символьная установка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово без знака

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   задействованный   виртуальный    дисплей.

  Аргумент дисплей является адресом длинного слова без знака,

  содержащего идентификатор дисплея.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.








                           - 285 -

                       00152-01 33 09-4


       Текст


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Записываемый   текст.   Аргумент   текст    -    адрес

  дескриптора, указывающего на текст.


       Направление


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет направление продвижения,  если  продвижение

  необходимо. Аргумент направление - адрес длинного слова без

  знака, содержащего код направления. Действующими значениями

  являются SMG$M_UP (установлено по умолчанию) и SMG$M_DOWN.


       Видеопризнаки


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Маска, обозначающая видеопризнаки записываемой строки.

  Аргумент видеопризнаки является адресом длинного слова  без




                           - 286 -

                       00152-01 33 09-4


  знака,  содержащего  маску   видеопризнаков.   Каждый   бит

  признака   в   данном    аргументе    вызывает    установку

  соответствующего действия на дисплее.


       Видеопризнаки, которыми можно управлять, следующие:

  SMG$M_BLINK

       - мерцание дисплейных символов;

  SMG$M_BOLD

       - дисплейные символы с яркостью выше обычной;

  SMG$M_REVERSE

       - дисплейные символы с  обратным  видеопризнаком.  Это

         значит  -  использование  изображения  с  признаком,

         противоположным установленному по умолчанию;

  SMG$M_UNDERLINE

       - дисплейное подчеркивание символов.


       Если тот же самый бит установлен в аргументах  видеоп-

  ризнаки и дополнение, средство управления  экраном  исполь-

  зует аргумент дополнение вслед за аргументом видеопризнаки.

  Используя указанные  два  аргумента,  вызывающая  программа

  может осуществлять независимый контроль за каждым признаком

  в одном вызове.


       Дополнение


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки




                           - 287 -

                       00152-01 33 09-4


       Маска, обозначающая видеопризнаки записываемой строки.

  Аргумент дополнение является  адресом  длинного  слова  без

  знака, содержащего маску видеопризнаков.

       Каждый  бит  признака  в  данном  аргументе   вызывает

  установку    соответствующего    действия    на    дисплее.

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

  аргументе такие же, как в аргументе видеопризнаки.

       Действие, предпринимаемое средством управления экраном

  для различных комбинаций признаков, представленно  в  табл.

  15.

                                                   Таблица 15

  -----------------------------------------------------------

   Видеопризнаки ! Дополнение !        Действие     

  ---------------+------------+------------------------------

         0       !      0     ! Признак не изменен

         1       !      0     ! Признак включен

         0       !      1     ! Признак установлен в

                 !            ! дополнение к установленному

                 !      1     ! по умолчанию

         1       !      1     ! Признак выключен




       Флаг


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки




                           - 288 -

                       00152-01 33 09-4


       Определяет действие, предпринимаемое,  если  текст  не

  вмещается в строку. Аргумент флаг является адресом длинного

  слова без знака, содержащего флаг. 0 определяет  отсутствие

  переноса (установлено по умолчанию), 1 определяет перенос.


       Символьная установка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет символьную установку по умолчанию для всего

  текста на данном виртуальном дисплее.  Аргумент  символьная

  установка  является  адресом  длинного  слова  без   знака,

  содержащего код символьной установки. Действующим  является

  значение SMG$C_ASCII, которое установлено по умолчанию.


       Описание.


       SMG$PUT_WITH_SCROLL записывает  текст  на  виртуальном

  дисплее,  начиная  с  текущей  строки.  Как  только   текст

  достигнет конечной или начальной строки дисплея (зависит от

  направления продвижения), последовательность  вызовов  этой

  процедуры заставляет информацию на  дисплее  сворачиваться.

  Если  аргумент  текст  опущен,  процедура  запишет   пустую

  строку.

       Если аргумент флаг установлен, а текст превышает шири-

  ну дисплея,  записывается  следующая  строка  и  происходит

  продвижение. Если аргумент флаг  чист,  избыточные  символы



                           - 289 -

                       00152-01 33 09-4


  отбрасываются.

       Нельзя использовать  SMG$PUT_WITH_SCPOLL  для  вставки

  строки  в  середину  виртуального  дисплея  и   перемещения

  изображенных строк.  Для  этого  необходимо  переопределить

  дисплейную    область    для    продвижения    с    помощью

  SMG$SCROLL_DISPLAY_AREA, а затем записать строку  в  начале

  новой области виртуального дисплея.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_WRONUMARS

       - неправильное число аргументов;

  SMG$_INVARG

       - неверный аргумент. Напрмер, направление  продвижения

         иное, чем вверх или вниз;

  LIB$INDSTRDES

       - неверный дескриптор строки.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  демонстрирует использование процедуры

  С  SMG$PUT_WITH_SCROLL.

  С-

       РARAMETER  SMG$M_UP=1



                           - 290 -

                       00152-01 33 09-4


       РARAMETER SMG$M_DOMN =2

       РARAMETER SMG$M_BOLD=1

       РARAMETER SMG$M_REVERSE =2

       РARAMETER SMG$M_BLINK = 4

       РARAMETER SMG$M_UNDERLINE = 8

       IMPLICIT INTEGER*4 (А -Z)

  С+

  С  Вызов процедуры SMG$CREATE_PASTEBOARD для установления

  С  экрана терминала как компоновочного пульта.

  С-

       STATUS=SMG$CREATE_PASTEBOARD (NEW_PID,,,)

       IF (.NOT. STATUS) CALL LIB$STOP (%VAL(STATUS))

  С+

  С  Использование процедуры SMG$CREATE_VIRTUAL_DISPLAY для

  С  установаления области виртуального дисплея.

  С-

       STATUS = SMG$CREATE_VIRTUAL_DISPLAY(5,80,DISPLAY_ID..)

       IF (.NOT.STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Прикрепить виртуальный дисплей к экрану, начиная со

  С  строки 10, колонки 15 вызовом процедуры

  С  SMG$PASTE_VIRTUAL_DISPLAY.

  С-

       STATUS=SMG$PASTE_VIRTUAL(DISPLAY_ID,NEW_PID,10,15)

       IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

  С+

  С  Определение области продвижения вызовом процедуры




                           - 291 -

                       00152-01 33 09-4


  С  SMG$SET_DISPLAY_SCROLL_REGION.

  С-

       STATUS = SMG$SET_DISPLAY_SCROLL_REGION

     1          (DISPLAY_ID,10,15)

  С+

  С  Вызов процедур SMG$PUT_WITH_SCROLL и SMG$ERASE_LINE для

  С  печатания трех строк на экране. Первая строка будет под-

  С  черкнута, вторая - с мерцающими символами, третья - с

  С  обратным видеопризнаком.

  С-

       DO I= 1.10

       IF ((I/2) + (I/2) .EQ. I) THEN

                DIR = SMG$M_UP

       ЕLSE

                DIR = SMG$M_DOMN

       ЕNDIF

       STATUS = SMG$PUT_WITH_SCROLL (DISPLAY_ID.

     1          'эта строка подчеркивается',

     1          DIR, SMG$M_UNDERLINE,O ..)

       IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

       STATUS = SMG$ERASE_LINE(DISPLAY_ID..)

       IF (.NOI. STATUS) CALL LIB$STOP(%VAL(STATUS))

       STATUS= SMG$PUT_WITH_SCROLL (DISPLAY_ID,

     1         'эта строка с мерцающими символам и',

     1         DIR,SMG$M_BLINK,O,,)

       IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

       STATUS = SMG$ERASE_LINE (DISPLAY_ID..)




                           - 292 -

                       00152-01 33 09-4


       IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

       STATUS = SMG$PUT_WITH_SCROLL (DISPLAY_ID,

     1          'эта строка с обратным видеопризнаком',

     1          DIR,SMG$M_REVERSE,O,,)

       IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

       STATUS = SMG$ERASE_LINE (DISPLAY_ID..)

       IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS))

       ЕNDDO

       ЕND


       Пример программы  на  языке  программирования  ФОРТРАН

  вызывает  процедуры  управления  экраном  для   образования

  экранного вывода. Будучи запущенной,  программа  записавает

  три продвигаемые строки. Так как невозможно представить  на

  рисунке продвигаемый (или  мерцающий)  текст,  предлагается

  получить вывод для рассмотренной программы.



       1.65. SMG$READ_COMPOSED_LINE     -     чтение

             скомпонованной строки


       Процедура   SMG$READ_COMPOSED_LINE   читает    строку,

  скомпонованную   из   обычных   клавишных    элементов    и

  эквивалентных строк.


       Формат:


       SMG$READ_COMPOSED_LINE клавиатура, таблица, текст

                              [,подсказка] [,длина] [,дисплей

                              [функциональные клавиши]




                           - 293 -

                       00152-01 33 09-4


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Клавиатура


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  клавиатуру,  с  которой  будет   прочитана

  информация. Аргумент клавиатура - адрес длинного слова  без

  знака, содержащего идентификатор клавиатуры.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_KEYBOARD.


       Таблица


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки.


       Определяет   клавишную   таблицу,   используемую   для

  трансляции клавишных элементов. Аргумент  таблица  -  адрес




                           - 294 -

                       00152-01 33 09-4


  длинного  слова  без   знака,   содержащего   идентификатор

  клавишной таблицы.

       Значение      аргумента       возвращается       через

  SMG$CPEATE_KEY_TABLE.


       Текст


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка,  в  которую   SMG$READ_COMPOSED_LINE   заносит

  полную  скомпонованную  строку.  Аргумент  текст  -   адрес

  дескриптора, указывающего на память,  в  которую  заносится

  скомпонованная строка.


       Подсказка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механимз: посредством дескриптора.


       Строка, используемая для  подсказки  операции  чтения.

  Аргумент подсказка -  адрес  дескриптора,  указывающего  на

  строку подсказки.


       Длина


       Использование в МОС ВП: слово без знака




                           - 295 -

                       00152-01 33 09-4


       Тип: слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Принимает число прочитанных символов или  максимальной

  длины текста. Аргумент длина -  адрес  длинного  слова  без

  знака, в которое SMG$READ_COMPOSED_LINE записывает значение

  числа прочитанных символов.


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Указывает на физическое устройство, с которым  связана

  клавиатура. Аргумент дисплей -  адрес  длинного  слова  без

  знака, содержащего идентификатор дисплея.  Данный  аргумент

  необязателен,  если  не  используются  выводные   процедуры

  средства управления экраном.

       Если  используются  вводные   и   выводные   процедуры

  средства  управления  экраном,   рассматриваемый   аргумент

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

  Виртуальный  дисплей  должен  быть  прикреплен  к  тому  же

  терминалу,  какой  определен  аргументом  клавиатура  и  не

  должен быть перекрыт.

       Примечание. Виртуальный дисплей должен быть прикреплен

  к колонке 1 и не может иметь  других  виртуальных  дисплеев




                           - 296 -

                       00152-01 33 09-4


  справа. Это ограничение необходимо потому, что иначе  любое

  появление CTRL/R или CTRL/U  будет  стирать  целую  строку,

  включая все,  что  прикреплено  справа.  Чтобы  обойти  это

  ограничение, используйте процедуру SMG$REPAINT_LINE,  когда

  встречаются CTRL/R или CTRL/U.


       Функциональные клавиши


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Функциональные клавиши. Аргумент функциональные клави-

  ши  -  адрес  длинного   слова   без   знака,   содержащего

  функциональные клавиши.


       Описание.


       Процедура   SMG$READ_COMPOSED_LINE   читает    строку,

  составленную из обычных  клавишных  элементов  и  клавишных

  эквивалентных строк,  как  определено  в  специфицированной

  клавишной  таблице.   Признаки   для   определения   клавиш

  контролируют   отражается   ли   эквивалентная   строка   и

  заканчивается ли чтение определенным  клавишным  элементом.

  Обычые клавишные элементы всегда отображаются.

       Возврат каретки всегда завершает операцию чтения. Если

  напечатан  УC/Z  и  в  таблице   определения   клавиш   нет

  определения  для  УC/Z,  отображается  "EXIT",  и  операция

  чтения завершается. Если CTRL/Z первый символ, напечатанный



                           - 297 -

                       00152-01 33 09-4


  в   строке,   возвращается   значение   SMG$_EOF.   SMG$EOF

  возвращается  также  в  случае,  если  для  операции  ввода

  использует СУД-32 и возвращает значение  RMS$_EOF.  Никакие

  другие   признаки   окончания   не   распознаются,    кроме

  специфицированных в определении клавиш.

       Процедура  SMG$READ_COMPOSED_LINE  перед   выполнением

  операции ввода  вызывает  процедуру  SMG$FLUSH_BUFFER.  Это

  гарантирует, что экранное  изображение  будет  выведено  во

  время операции ввода. Дисплей не должен находится в  пакет-

  ном      режиме,      если      используется      процедура

  SMG$READ_COMPOSED_LINE.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SS$_CANCEL

       - операция    ввода/вывода    отменена     (процедурой

         SMG$CANCEL_INPUT);

  SMG$_EOF

       - конец файла;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVKBD_ID

       - неверный аргумент клавиатура;

  SMG$_INVKTB_ID

       - неверный аргумент таблица;







                           - 298 -

                       00152-01 33 09-4


  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_ILLBATFNC

       - ввод недопустим с дисплея в пакетном режиме;

  SMG$_INVCOL

       - неверная   колонка.   Операция    чтения    пытается

         использовать колонку вне виртуального дисплея.


       Некоторые  значения   состояния   возвращаются   через

  LIB$COPY_R_DX.

       Некоторые значения состояния возвращаются  через  $GET

  (кроме RMS$_EOF).

       Некоторые значения состояния возвращаются через $QIOW.



       1.66. SMG$READ_FROM_DISPLAY - чтение текста с

             дисплея


       Процедура   SMG$READ_FROM_DISPLAY   читает   текст   с

  виртуального дисплея.

       Формат:


       SMG$READ_FROM_DISPLAY дисплей, строка [,ограничители]

                             [,номер строки]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись





                           - 299 -

                       00152-01 33 09-4


       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей,  с  которого  читается

  текст. Аргумент дисплей является адресом длинного слова без

  знака, содержащего идентификатор дисплея.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Строка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка,  в  которую  процедура   SMG$READ_FROM_DISPLAY

  записывает информацию  из  виртуального  дисплея.  Аргумент

  строка  является  адресом  дескриптора,   указывающего   на

  память, в которую записывается строка.









                           - 300 -

                       00152-01 33 09-4


       Ограничители


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка, содержащая ограничитель или ограничители конца

  обратного   поиска,    определяющие    начальную    позицию

  возвращаемой  строки.   Аргумент   ограничители   -   адрес

  дескриптора, указывающего строку ограничителей. Если данный

  аргумент  опущен,   обратный   поиск   не   происходит,   и

  возвращаемая   строка   начинается   с   текущей    позиции

  виртуального курсора.


       Номер строки


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Аргумент номер  строки  -  адрес  длинного  слова  без

  знака,  содержащего  номер  строки  дисплея,   из   которой

  происходит чтение.


       Описание.


       Процедура  SMG$READ_FROM_DISPLAY  возвращает   строку,

  содержащую  часть  или  весь  текст   текущей   строки   на

  специфицированном виртуальном дисплее. Если опущен аргумент



                           - 301 -

                       00152-01 33 09-4


  ограничители, содержимое текущей строки (с текущей  колонки

  до крайней правой) будет возвращено. Если передан  аргумент

  номер строки, то  содержимое  указанной  строки  дисплея  с

  колонки 1 до  крайней  правой  возвращается.  Если  передан

  аргумент   номер   строки,    то    аргумент    оганичители

  игнорируется.

       Если определен аргумент ограничители, каждый символ  в

  нем обслуживается как  указатель  конца  обратного  поиска.

  Если   никаких   ограничителей   не   встречается,    поиск

  заканчивается в позиции первого символа строки.

       Процедура  SMG$READ_FROM_DISPLAY   перед   выполнением

  операции ввода  вызывает  процедуру  SMG$FLUSH_BUFFER.  Это

  гарантирует, что экранное  изображение  будет  выведено  во

  время операции чтения.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  LIB$_INVSTRDES

       - неверный дескриптор строки;

  LIB$_INSVIRMEM

       - недостаточная виртуальная память.











                           - 302 -

                       00152-01 33 09-4


       Пример.


  С+

  С  Этот пример демонстрирует использование

  С  SMG$READ_FROM_DISPLAY.

  С-

  С+

  С  INCLUDE THE SMG DEFINITIONS. IN PARTICULAR,WE WANT

  C  SMG$M_BORDER.

  С-

        INCLUDE '($SMGDEF)'

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY,SMG$SET_CURSOR_ABS

        INTEGER SMG$READ_FROM_DISPLAY,SMG$PUT_LINE

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS

        CHARACTER*80 техт

  С+

  С  USE SMG$CREATE_VIRTUAL_DISPLAY ТО CREATE ТHE VIRTUAL

  С  DISPLAY

  С  APD GIVE IT А BORDER

  С-

        ROWS = 5

        COLUMNS =60

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1  (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

  С+

  С  CREATE THE PASTEBOARD BY CALLING SMG$CREATE_PASTEBOARD.



                           - 303 -

                       00152-01 33 09-4


  C-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

  С+

  С  CALL SMG$PASTE_VIRTUAL_DISPLAY AND SMG$PUT_LINE ТО

  С  PASTE

  С  THE VIRTUAL DIPLAY AND PUT SOME техт ON LINE 2.

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY (DISPLAY,

     1            PASTE1,2,10)

        ISTATUS = SMG$PUT_LINE (DISPLAY1,'')

        ISTATUS = SMG$PUT_LINE (DISPLAY1,

     1            'THIS IS AN EXAMPLE OF USING

     1            SMG$READ_FROM_DISPLAY.')

  С+

  С  USE SMG$READ_FROM_DISPLAY ТО READ LINE 2 FROM THE

  С  VIRTYAL

  С  DISPLAY, STARTING АТ COLUMN 22

  С-

        ISTATUS = SMG$SET_CURSOR_ABS (DISPLAY1,2,22)

  С+

  С  SEARCH LINE 2 FROM COLUMN 22 ТО COLUMN 1 FOR NULL

  С  STRING.

  С  SINCE NO TERMINATOR WILL ВЕ SUPPLIED, NO

  С  "BACK_SEARCHING" WILL ТАКЕ

  С  PLACE техт WILL ВЕ ASSIGNED THE "VALUE" OF THE LINE

  С  СROM

  С  COLUMN 22 ТО THE RIGHTMOST COLUMN.




                           - 304 -

                       00152-01 33 09-4


  С-

        ISTATUS = SMG$READ_FROM_DISPLAY (DISPLAY1, техт)

  С+

  С  PUT THE LINE OF техт FOUND INTO THE VIRTUAL DISPLAY

  С  АТ ROW 4,

  С  COLUMN 10 BY CALLING SMG$SET_CURSOR_ABS AND

  С  SMG$PUT_LINE

  С-

        ISTATUS = SMG$SET_CURSOR_AWS (DISPLAY1,4,10)

        ISTATUS = SMG$PUT_LINE (DISPLAY1,TEXT)

  С+

  С  USE SMG$SET_CURSOR_ABS ТО SET CURSOR ВАСК ТО LINE 2,

  С  COLUMN 22.

  С-

        ISTATUS = SMG$SET_CURSOR_ABS (DISPLAY1,2,22)

  С+

  С  USE SMG$READ_FROM_DISPLAY ТО SEARCH LINE 2 FROM

  С  COLUMN 22 ТО

  С  COLUMN 1 FOR AN "F".NOW,"BACK-SEARCHING" WILL ТАКЕ

  С  PLACE.

  С  STARTING АТ COLUMN 22,"BACK-TRACK" ТО COLUMN 1

  С  LOOKING FOR "F"

  С  техт WILL THEN ВЕ ASSIGNED THE "VALUE" OF THE LINE

  С  FROM THE.

  С  техт WILL THEN WE ASSIGNED THE "VALUE" OF THE LINE

  C  FROM THE.

  С  PRESENT CURSOR POSITION (WHERE THE "F" IS,TO THE




                           - 305 -

                       00152-01 33 09-4


  с  RIGHTMOST

  С  COLUMN

  С-

        ISTATUS = SMG$READ_FROM_DISPLAY (DISPLAY1, TEXT,'F')

  С+

  С  PUT THE LINE OF техт FOUND INTO THE VIRTYAL DISPLAY AT

  С  ROW 4,COLUMN 10.

  С-

        ISTATUS = SMG$SET_CURSOR_ABS (DISPLAY1, 5,10)

        ISTATUS = SMG$PUT_LINE (DISPLAY1, техт)

        END



       1.67. SMG$READ_KEYSTROKE  -   чтение   одного

             символа


       Процедура SMG$READ_KEYSTROKE читает клавишный  элемент

  и возвращает код ограничителя для клавишного элемента.


       Формат:


       SMG$READ_KEYSTROKE  клавиатура, код [,подсказка]

                           [,период] [,дисплей]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения





                           - 306 -

                       00152-01 33 09-4


       Аргументы:

       Клавиатура


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Идентификатор клавиатуры. Аргумент клавиатура является

  длинным словом, содержащим определение, с какой  клавиатуры

  читать. Виртуальная клавиатура создается вызовом  процедуры

  SMG$CREATE_VIRTUAL_KEYBOARD.


       Код


       Использование в МОС ВП: слово без знака

       Тип: слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Код ограничителя клавиши. Аргумент код является словом

  без знака, в котором записывается  код,  показывающий,  что

  символ или клавиша  завершает  чтение.  Коды  ограничителей

  клавиш представлены в форме SMG$K_TRM_HAиMEHOBAHиE.  Наиме-

  нования клавиш представлены в табл. 9 [1].


       Подсказка


       Использование в МОС ВП: строка символов

       Тип: строка символов





                           - 307 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка   подсказки.   Аргумент   подсказка    является

  необязательной строкой, используемой для подсказки операции

  чтения.


       Период


       Использование в МОС ВП: длинное слово со знаком

       Тип:целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Счетчик для  периода.  Аргумент  период  необязателен.

  Если аргумент определен, любой символ, указанный до  завер-

  шения периода, вернется в буфер.


       Дисплей


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки

       Идентификатор  дисплея.  Аргумент   дисплей   является

  длинным словом, которое содержит идентификатор виртуального

  дисплея,  в  котором  происходит  чтение.   Если   аргумент

  определен, чтение начинается с текущей позиции виртуального

  курсора на данном виртуальном дисплее. Если опущен,  чтение

  начинается с текущей позиции физического курсора.




                           - 308 -

                       00152-01 33 09-4


       Описание.


       Процедура SMG$READ_KEYSTROKE читает клавишный  элемент

  из специфицированной виртуальной  клавиатуры  и  возвращает

  код  ограничителя  этого  клавишного   элемента   в   форме

  SMG$K_TRM_HAиMEHOBAHиE. Считываемый  клавишный  элемент  не

  отображается на экране. Клавишный элемент может быть  любым

  алфавитным символом, любой клавишей  малой  клавиатуры  или

  функциональной клавишей, или одной из направляющих стрелок.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SS$_CANCEL

       - операция    ввода/вывода    отменена     (процедурой

         SMG$CANCEL_INPUT);

  SMG$_EOF

       - конец файла;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVKBD_ID

       - неверный аргумент клавиатура;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  LIB$_XXX

       - некоторая ошибка из LIB$SCOPY_R_DX;

  RMS$_XXX

       - некоторая ошибка из $GET (кроме RMS$_EOF);




                           - 309 -

                       00152-01 33 09-4


  SS$_XXX

       - некоторая ошибка из $QIOW.


       Пример 1.


  С+

  С  Зтот пример программы на языке программирования ФОРТРАН

  С  показывает использование процедуры SMG$READ_KEYSTROKE.

  С-

  С+

  С  THIS ROUTINE CREATES а VIRTUAL DISPLAY AND WRITES IT

  С  ТО THE PASTEBOARD.

  С  DATA IS PLACED IN тне VIRTUAL DISPLAY VIA

  С  SMG$PUT_CHARS.

  С

  С  FIRST,INCLUDE THE DEFINITIONS. IN PARTICULAR, WE WANT

  С  SMG$M_BORDER.

  С-

        INCLUDE '($SMGDEF)'

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_VIRTUAL_KEYBOARD

        INTEGER SMG$READ_KEYSTROKE, SMG$PUT_LINE

        INTEGER DISPLAY1, PASTE1, KEYBOARD1, ROWS, COLUMNS,

     1  TERM_CHAR

        CHARACTER*3 техт

        CHARACTER*27 TEXT,OUTPUT




                           - 310 -

                       00152-01 33 09-4


  С+

  С  USE SMG$CREATE_VIRTUAL_DISPLAY ТО CREATE А VIRTUAL

  С  DISPLAY WITH А BORDER.

  С-

        ROWS =7

        COLUMNS = 60

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

  С+

  С  CREATE THE PASTEBOARD USING SMG$CREATE_PASTEBOARD.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

  С+

  С  USE SMG$CREATE_VIRTUAL_KEYBOARD ТО CREATE А VIRTUAL

  С  KEYBOARD.

  С-

        ISTATUS = SMG$CREATE_VIRTUAL_KEYBOARD (KEYBOARD1)

  С+

  С  USING SMG$PASTE_VIRTUAL_DISPLAY, PASTE THE VIRTUAL

  С  DISPLAY

  С  АТ ROW 3, COLUMN 9.

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY (DISPLAY1,

     1            PASTE1, 3, 9)

        ISTATUS = SMG$PUT_LINE (DISPLAY1,

     1           'ENTER THE CHARACTER K AFTER THE >>

     1           PROMPT.')




                           - 311 -

                       00152-01 33 09-4


        ISTATUS = SMG$PUT_LINE (DISPLAY1,

     1            'THIS CHARACTER WILL NOT ВЕ ECHOED AS YOU

     1            TYPE LT.')

        ISTATUS = SMG$PUT_LINE (DISPLAY1,

     1            'THE TERMINAL CHARACTER EQUIVALENT OF К IS

     1            DISPLAYED.')

        ISTATUS = SMG$PUT_LINE (DISPLAY1, ' ')

  С+

  С  CALL SMG$READ_KEYSTROKE ТО READ А KEYSTROKE FROM THE

  С  VIRTUAL

  С  PASTEBOARD.

  С-

        ISTATUS = SMG$READ_KEYSTROKE (KEYBOARD1,

     1            TERM_CHAR, '>>'., DISPLAY1)

        ISTATUS = SMG$PUT_LINE (DISPLAY1, ' ')

  С+

  С  USE OTS$CVT_L_TI ТО CONVERT THE DECIMAL VALUE OF





  С  TREM_CHAR ТО

  С  А DECIMAL ASCII  EXT STRING.

  С-



        ISTATUS = SMG$CVT_L_TI( TERM_CHAR, техт)

        TEXT_OUTPUT = ' TERMINAL CHARACTER IS: ' // техт

  С+

  С  CALL SMG$PUT_LINE AND SMG$PUT_CHARS ТО PRINT THE

  С  DECIMAL

  С  ASCII техт STRING.




                           - 312 -

                       00152-01 33 09-4


  С-

        ISTATUS = SMG$PUT_LINE (DISPLAY1, TEXT_OUTPUT)

        ISTATUS = SMG$PUT_CHARS (DISPLAY1, техт, 7, 25)

        END


       Вывод, полученный программой на языке программирования

  ФОРТРАН, следующий:


  ENTER THE CHARACTER K ALTER THE>>PROMPT.

  ТHIS CHARACTER WILL NOT BE ECHOED AS VOU TUPELT

  THE TERMINAL CHARACTER EQUVALENT OF K IS DISPLAYED

  >>

  TERMINAL CHARACTER IS: 107


       Пример 2.


  ОPTION TYPE=EXPLICIT

  !+

  ! Эта программа на языке программирования бейсик показывает

  ! использование SMG$READ_KEYSTROKE для чтения клавишного

  ! элемента с терминала.

  !

  ! Для создания этой программы используйте следующие

  ! команды:

  !

  !$ BASIC READ_KEY

  !$ CREATE SMGDEF.MAR

  !        .TITLE SMGDEF - DEFINE SMG$ CONSTANTE

  !        .IDENT /1-000/




                           - 313 -

                       00152-01 33 09-4


  !

  !        $SMGDEF CLOBAL

  !

  !        .END

  !$ MACRO SMCDEF

  !$ LINK READ_KEY,SMGDEF

  !

  !-

  DECLARE LONG KB_ID, RET_STATUS, TERM_CODE, I, TIMER

  EXTERNAL SUB LIB$SIGNAL( LONG BY VALUE )

  EXTERNAL SUB LIB$STOP( LONG BY VALUE )

  EXTERNAL LONG CONSTANT SS$_TIMEOUT

  EXTERNAL LONG CONSTANT SMG$K_TRM_PF1

  EXTERNAL LONG CONSTANT SMG$K_TRM_PERIOD

  EXTERNAL LONG CONSTANT SMG$K_TRM_UP

  EXTERNAL LONG CONSTANT SMG$K_TRM_RIGHT

  EXTERNAL LONG CONSTANT SMG$K_TRM_F6

  EXTERNAL LONG CONSTANT SMG$K_TRM_F20

  EXTERNAL LONG CONSTANT SMG$K_TRM_FIND

  EXTERNAL LONG CONSTANT SMG$K_TRM_NEXT_SCREEN

  EXTERNAL LONG CONSTANT SMG$K_TRM_TIMEOUT

  EXTERNAL LONG FUNCTION SMG$CREATE_VIRTUAL_KEYBOARD

  ( LONG, STRING )

  EXTERNAL LONG FUNCTION SMG$DELETE_VIRTUAL_KEYBOARD

  ( LONG )

  EXTERNAL LONG FUNCTION SMG$READ_KEYSTROKE( LONG, LONG,

  STRING, $ LONG, LONG )




                           - 314 -

                       00152-01 33 09-4


  !+

  ! PROMPT THE USER FOR THE TIMER VALUE. А VALUE OF O

  ! WILL CAUSE

  ! THE TYPE AHEAD BUFFER то BE READ.

  !-

  INPUT "ENTER THE TIMER VALUE (O TO READ TYPEAHEAD BUFFER):

        ";TIMER

  !+

  ! ESTABLISH A SMS CONNECTION TO SYS$INPUT. SIGNAL ANY

    UNEXPECTED

  ! ERRORS

  !-

  RET_STATUS = SMG$CREATE_VIRTUAL_KEYBOARD( KB_ID,

               "SYS$INPUT:" )

  IF (RET_STATUS AND 1%) = 0% THEN

       СALL LIB$SIGNAL( RET_STATUS )

  END IF

  !+

  !  READ A KEYSTOKE, TELL THE USER WAHT WE FOUND.

  !-

  RET_STATUS = SMG$READ_KEYSTROKE( KB_ID, TERM_CODE,

  ,TIMER, )

  IF (RET_STATUS <> SS$_TIMEOUT) AND ((RET_STATUS AND 1%)

     =0% THEN

       СALL LIB$SIGNAL( RET_STATUS )

  END IF

  PRINT "TERM_CODE = ";TERM_CODE




                           - 315 -

                       00152-01 33 09-4


  SELECT TERM_CODE

       СASE O TO 31

           PRINT "YOU TYPED A CONTROL CHARACTER"

       СASE 32 TO 127

           PRINT "YOU TYPED: ";CHR$(TERM_CODE)

       СASE SMG$K_TRM_PF1 TO SMG$K_TRM_PERIOD

           PRINT "YOU TYPED ONE OF THE KEYPAD KEYS"

       СASE SMG$K_TRM_UP TO SMG$K_TRM_RIGHT

           PRINT "YOU TYPED ONE OF THE CURSOR POSITIONING

           KEYS"

       СASE SMG$K_TRM_F6 TO SMG$K_TRM_F20

           PRINT "YOU TYPED ONE OF THE FUNCTION KEYS"

       СASE SMG$K_TRM_FIND TO SMG$K_TRM_NEXT_SCREEN

           PRINT "YOU TYPED ONE OF THE EDITING KEYS"

       СASE SMG$K_TRM_TIMEOUT

           PRINT " YOU DID NOT TYPE A KEY FAST ENOUGH"

       СASE ELSE

           PRINT "I'M NOT SURE WAHT KEY YOU TYPED"

  END SELECT

  !+

  ! CLOSE THE CONNECTION TO SYS$INPUT, AND SIGNAL ANY

    ERRORS.

  !-

  RET_STATUS = SMG$DELETE_VIRTUAL_KEYBOARD( KB_ID )

  IF (RET_STATUS AND 1%) = о% THEN

       СALL LIB$SIGNAL( RET_STATUS )

  END IF




                           - 316 -

                       00152-01 33 09-4


  END


       Программа  на  языке  программирования  БЕЙСИК  читает

  клавишные элементы и возвращает  их  код  и  имя  вводимого

  клавишного   элемента.   Вывод,    полученный    программой

  следующий:


       $BASIC READ_KEY

       $ MACRO SMGDEF

       $ LINK READ_KEY,SMGDEF

       $ RUN READ_KEY

       ЕNTER THE TIMER VALUE (O TO READ TYPEAHEAD

       ВUFFER): ? 9

       ТERM_CODE = 100

  YOU TYPED: D


       Отметим, что в примере пользователь  вводит  клавишный

  элемент  "D"  следом  за   первой   подсказкой.   Введенный

  клавишный элемент не отображается на экране.



       1.68. SMG$READ_STRING  -  чтение   строки   с

             виртуальной клавиатуры


       Процедура SMG$READ_STRING читает строку с  виртуальной

  клавиатуры.


       Формат:


       SMG$READ_STRING  клавиатура, текст [,подсказка]

                        [,максимальная длина] [,модификация]




                           - 317 -

                       00152-01 33 09-4


                        [,период] [,ограничители] [,длина]

                        [,код] [,дисплей] [,строка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Клавиатура


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальную клавиатуру, с которой  информа-

  ция читается. Аргумент клавиатура является адресом длинного

  слова без знака, содержащего идентификатор клавиатуры.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_KEYBOARD.


       Текст


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора




                           - 318 -

                       00152-01 33 09-4


       Строка,  в  которую  записывается   вводимая   строка.

  Аргумент текст является адресом  дескриптора,  указывающего

  на память, в которую текст записывается.


       Подсказка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка, используемая для  подсказки  операции  чтения.

  Аргумент   подсказка    является    адресом    дескриптора,

  указывающего строку подсказки.


       Максимальная длина


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  максимальное  число   читаемых   символов.

  Аргумент  максимальная  длина   является   адресом   целого

  длинного слова со знаком,  содержащего  максимальное  число

  читаемых символов. Максимальное  действующее  значение  для

  данного  аргумента  512.  Если   рассматриваемый   аргумент

  опущен, 512 устанавливается по умолчанию.








                           - 319 -

                       00152-01 33 09-4


       Модификация


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Битовая  маска,  определяющая  необязательный   режим.

  Аргумент модификация является адресом  длинного  слова  без

  знака, содержащего битовую маску.

       Можно определить  любой  символ  модификации,  который

  является действующим для IO$_READVBLK, обслуживаемой  через

  QIO.


       Период


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   число   секунд,   предусмотренных   между

  временем выдачи подсказки  и  завершением  операции  ввода.

  Аргумент период - адрес целого длинного  слова  со  знаком,

  содержащего число секунд.

       Если данный аргумент определен, символы,  представлен-

  ные до того, как время завершится, будут переданы в  строку
            

  текста.  Если  аргумент  опущен,  операция  ввода  остается

  активной до тех пор пока не будет введен ограничитель.





                           - 320 -
                           
                       00152-01 33 09-4


       Ограничители


       Использование в МОС ВП: длинное слово со знаком

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредтсвом дескриптора фиксированной длины.


       Либо   маска,   определяющая   какие   символы   будут

  трактоваться  как  ограничители  (короткая   форма),   либо

  дескриптор, указывающий на  такую  маску  (длинная  форма).

  Аргумент ограничители - адрес дескриптора, указывающего  на

  маску.

       Если ограничители установлены  с  помощью  значений  в

  коде КОИ-8 в интервале от 0 до  31,  используется  короткая
                            
  форма; создается маска  установкой  бита,  соответствующего

  значению КОИ-8 для желаемого  ограничителя.  Например,  для

  определения CTRL/A (значение в КОИ-8 = 1) как ограничителя,

  установить бит 1 в  маске.  Если  используются  в  качестве

  ограничителей значения в КОИ-8 вне интервала от  0  до  31,

  применяется длинная  форма;  сначала  создается  дескриптор

  следующего формата:

      31             16 15                      0
      -------------------------------------------
      ! Не использутся ! Размер маски в байтах  !
      -------------------------------------------
      !         Адрес   маски                   !
      -------------------------------------------


       Маска сама по себе  имеет  тот  же  формат,  что  и  в

  короткой форме, но  длинная  форма  позволяет  использовать

  наиболее  исчерпывающую  установку  символов-ограничителей.




                           - 321 -

                       00152-01 33 09-4


  Например, размер маски в 16 байт позволяет любому 7-битному

  символу в коде КОИ-8 быть установленным как ограничитель, а

  размер маски в 32 байта - 8-битному.

       Если маска  содержит  все  нули,  то  не  определяется

  никаких ограничителей. Чтение  заканчивается  тогда,  когда

  число символов, определенное  через  аргумент  максимальная

  длина, передано. Если аргумент ограничители опущен, ограни-

  чители устанавливаются по умолчанию.


       Длина


       Использование в МОС ВП: слово без знака

       Тип: слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Принимает  значение  числа  прочитанных  символов  или

  максимальный размер текста. Аргумент длина является адресом

  слова без знака, в которое записывается  число  прочитанных

  символов или максимальный размер.


       Код


       Использование в МОС ВП: слово без знака

       Тип: слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Принимает  код,   показывающий,   какой   символ   или

  клавишный элемент заканчивает операцию чтения. Аргумент код




                           - 322 -

                       00152-01 33 09-4


  - адрес слова без знака, содержащего код.

       Коды, которые могут быть использованы, представленны в

  табл.1 [1].


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Указывает на то же самое физическое устройство, что  и

  аргумент клавиатура.  Аргумент  дисплей  -  адрес  длинного

  слова без знака, содержащего идентификатор дисплея.  Данный

  аргумент  необязателен,  если  не  используется   процедура

  вывода через средство управления экраном.

       Если  используются  процедуры  ввода  и  вывода  через

  средство  управления  экраном,   рассматриваемый   аргумент

  определяет  виртуальный  дисплей,  на  который   происходит

  вывод. Виртуальный дисплей должен быть прикреплен к тому же

  терминалу,  какой  определен  аргументом  клавиатура  и  не

  должен быть закрыт. Вместе с тем виртуальный дисплей должен

  быть прикреплен  к  колонке  1  и  не  может  иметь  других

  виртуальных дисплеев справа.  Это  ограничение  необходимо,

  потому что иначе любое появление CTRL/R  или  CTRL/U  будет

  стирать целую строку, включая все, что прикреплено  справа.

  Чтобы  обойти  это  ограничение,   используется   процедура

  SMG$REPAINT_LINE   для    переписывания    строки,    когда

  встречаются CTRL/R или CTRL/U.



                           - 323 -

                       00152-01 33 09-4


       Вывод начинается с текущей позиции курсора,  а  курсор

  должен быть в колонке 1.


       Строка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством ссылки


       Механизм: посредством ссылки


       Аргумент  строка  является   необязательной   строкой,

  содержащей первоначальные символы для формируемого поля.


       Описание.


       Процедура  SMG$READ_STRING  возвращает   читаемую   на

  виртуальном дисплее строку символов. При  этом  дисплей  не

  должен находиться в пакетном режиме.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SS$_CANCEL

       - операция    ввода/вывода    отменена     (процедурой

         SMG$CANCEL_INPUT);

  SMG$_EOF

       - конец файла;







                           - 324 -

                       00152-01 33 09-4


  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVKBD_ID

       - неверный аргумент клавиатура;

  SMG$_INVKTB_ID

       - неверный аргумент таблица;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_ILLBATFNC

       - ввод недопустим с дисплея в пакетном режиме;

  SMG$_INVCOL

       - неверная колонка. Ввод происходит  вне  виртуального

         дисплея;

  SMG$_INVMAXLEN

       - определенная максимальная длина больше 512.


       Некоторые  значения   состояния   возвращаются   через

  LIB$COPY_RPX.

       Некоторые значения состояния возвращаются  через  $GET

  (кроме RMS$_EOF).

       Некоторые значения состояния возвращаются через $OIOW.


       Пример 1.


  !+

  ! Эта программа на языке программирования БЕЙСИК показывает

  ! использование SMG$READ_STRING

  ! для чтения строки, управляющей клавиши или клавиши

  ! малой клавиатуры.



                           - 325 -

                       00152-01 33 09-4


  !

  ! Для создания этой программы используйте следующие

  ! команды:

  !

  !$ BASIC SMGTEST

  !$ CREATE SMGDEF.MAR

  !        .TITLE SMGDEF - DEFINE SMG$ CONSTANTS

  !        .IDENT /1-000/

  !

  !        $SMGDEF GLOBAL

  !

  !        .END

  !$ MACRO SMGDEF

  !$ LINK SMGTEST.SIGDEF

  !

  !-

  DECLARE LONG KB_ID, RET_STATUS, STR_LEN, TERM_CODE,

  MODIFIER, I, TIMER

  DECLARE STRING DATA_STR, TERM_SET

  EXTERNAL LONG CONSTANT IO$M_TIMED

  EXTERNAL LONG CONSTANT IO$M_NOECHO

  EXTERNAL LONG CONSTANT IO$_NOFILTR

  EXTERNAL SUB LIB$SIGNAL (LONG BY VALUE )

  EXTERNAL SUB LIB$STOP( LONG BY VALUE )

  EXTERNAL LONG CONSTANT SS$_TIMEOUT

  EXTERNAL LONG CONSTANT SMG$K_TRM_PF1

  EXTERNAL LONG CONSTANT SMG$K_TRM_PERIOD




                           - 326 -

                       00152-01 33 09-4


  EXTERNAL LONG CONSTANT SMG$_TRM_UP

  EXTERNAL LONG CONSTANT SMG$K_TRM_RIGHT

  EXTERNAL LONG CONSTANT SMG$K_TRM_F6

  EXTERNAL LONG CONSTANT SMG$K_TRM_F20

  EXTERNAL LONG COSNTANT SMG$K_TRM_FIND

  EXTERNAL LONG CONSTANT SMG$K_TRM_NEXT_SCREEN

  EXTERNAL LONG CONSTANT SMG$K_TRM_TIMEOUT

  EXTERNAL LONG FUNCTION SMG$CREATE_VIRTUAL_KEYBOARD

  (LONG, STRING )

  EXTERNAL LONG FUNCTION SMG$DELETE_VIRTUAL_KEYBOARD

  ( LONG )

  EXTERNAL LONG FUNCTION SMG$READ_STRING( LONG, STRING,

  STRING, &

       LONG, LONG, LONG, STRING, LONG, LONG )

  !+

  ! PROMPT THE USER FOR TIMER VALUE. A VALUE OF 0 WILL

  ! CAUSE

  ! THE TYPE AHEAD BUFFER TO BE READ.

  ! -

  INPUT "ENTER TIMER VALUE (0 TO READD TYPEAHEAD BUFFER):

  ";TIMER

  !+

  ! TELL SMG TO USE TIMER VALUE

  !-

  MODIFIER = IO$M_TIMED

  !+

  ! ESTABLISH A SMG CONNECTION TO SYS$INPUT. SIGNAL




                           - 327 -

                       00152-01 33 09-4


  ! ANY UNEXPECTED

  ! ERRORS

  !-

  RET_STATUS = SMG$CREATE_VIRTUAL_KEYBOARD( KB_ID.

  "SYS$INPUT:" )

  IF (RET_STATUS AND 1%) = 0% THEN

       СALL LIB$SIGNAL( RET_STATUS )

  END IF

  !+

  ! TELL SMG TO USE ANY KEYSTROKE EXCEPT A LETTER OR

  ! NUMBER

  ! AS A TERMINATOR TO THE INPUT AND PERFORM THE READ.

  ! SIGNAL ANY ERROR EXCEPT SS$_TIMEOUT

  !

  TERM_SET = STRING$( 4%. -1% )+ STRING$(12%. О%)

  RET STATUS = SMG$READ_STRING(KB_ID, DATA_STR...$

           MODIFIER, TIMER, TERM_SET, $

           STR_LEN, TERM_CODE )

       IF (RET_STATUS <> SS$_TIMEOUT) AND ((RET_STATUS

          AND 1%)= 0% THEN

  END IF

  !+

  ! ALL THE DATA SHOULD COME BACK AS A TERMINATOR CODE,

  ! SINCE ANY

  ! CHARACTER CAN BE A TERMINATOR.

  !-

  PRINT " DATA STRING = ";LEFT( DATA_STR, STR_LEN)




                           - 328 -

                       00152-01 33 09-4


  PRINT "TERM_CODE = ";TERM_CODE

  SELECT TERM_CODE

       СASE 0 TO 31

           PRINT "YOU TYPED A CONTROL CHARACTER"

       СASE 32 TO 127

           PRINT "YOU TYPED: "; CHR$(TERM_CODE)

       СASE SMG$K_TRM_PF1 TO SMG$K_TRM_PERIOD

           PRINT " YOU TYPED ONE OF THE KEYPAD KEYS"

       СASE SMG$K_TRM_UP TO SMG$K_TRM_RIGHT

           PRINT "YOU TYPED ONE OF THE CURSOR

                  POSITIONING KEYS"

       СASE SMG$K_TRM_F6 TO SMG$K_TRM_F20

           PRINT "YOU TYPED ONE OF THE FUNCTION KEYS"

       СASE SMG$K_TRM_FIND TO SMG$K_TRM_NEXT_SCREEN

           PRINT " YOU TYPED ONE OF THE EDITING KEYS"

       СASE SMG$K_TRM_TIMEOUT

           PRINT "YOU DID NOT TYPE A KEY FAST ENOUGH"

       СASE ELSE

           PRINT "I 'M NOT SURE WHAT KEY YOU TYPED"

  END SELECT

  !+

  ! CLOSE THE CONNECTION TO SYS$INRUT, AND SIGNAL ANY

  ! ERRORS.

  !-

  RET_STATUS = SMG$DELETE_VIRTUAL_KEYBOARD( KB_ID )

  IF (RET_STATUS AND 1%) = 0% THEN

       СALL LIB$SIGNAL( RET_STATUS )




                           - 329 -

                       00152-01 33 09-4


  END IF

  END


       Программа    на    языке    программирования    БЕЙСИК

  демонстрирует  использование   процедуры   SMG$READ_STRING.

  Вывод, полученный программой, следующий:


  ENTER TIMER VALUE (0 TO READ TYPEAHEAD BUFFER): ? 5

      D

        DATA STRING = D

  TERM_CODE = 13

  YOU TYPED A CONTROL CHARACTER


       Пример 2.


  С+

  С  этот пример программы на языке программирования ФОРТРАН

  С  показывает использование процедуры SMG$READ_STRING.

  С

  С  THIS ROUTINE CREATES A VIRTUAL DISPLAY AND WRITES

  С  IT TO THE PASTEBOARD.

  С  DATA IS PLACED IN THE VIRTUAL DISPLAY VIA SMG$PUT_CHARS.

  С-

  С+

  С  INCLUDE THE SMG DEFINITIONS. IN PARTICULAR, WE WANT

  С  SMG$BORDER.

  С-

        INCLUDE '($SMGDEF)'

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,




                           - 330 -

                       00152-01 33 09-4


     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_VIRTUAL_KEYBOARD

        INTEGER SMG$READ_STRING

        INTEGER DISPLAY1, PASTE1, KEYBOARD1, ROWS, COLUMNS

        CHARACTER*20 TEXT

  С+

  С  CREATE A VIRTUAL DISPLAY WITH A BORDER USING

  С  SMG$CREATE_VIRTUAL_DISPLAU.

  С-

        ROWS = 7

        COLUMNS = 50

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

  С+

  С  USE SMG$CREATE_PASTEBOARD TO CREATE THE PASTEWOARD.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

  С+

  С  CREATE A VIRTUAL KEYBOARD BY CALLING

  С  SMG$CREATE_VIRTUAL_KEYBOARD.

  С-

        ISTATUS = SMG$CREATE_VIRTUAL_KEYBOARD ( KEYBOARD1)

  С+

  С  USE SMG$PASTE_VIRTUAL_DISPLAY TO PASTE THE VIRTUAL

  С  DISPLAY

  С  AT ROW 3, COLUMN 9.




                           - 331 -

                       00152-01 33 09-4


  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1,

     1            PASTE1,3,9)

  С+

  С  READ A STRING FROM THE VIRTUAL PASTEBOARD USING

  С  SMG$READ_STRING.

  С-

        ISTATUS = SMG$READ_STRING ( KEYBOARD1,

     1            TEXT, 'PROMPT', 20,..... DISPLAY)

        END


       Вывод, полученный прогаммой на языке  программирования

  ФОРТРАН перед вызовом SMG$READ_STRING, будет следующим:

       РROMPT

       Программа ожидает ввода. Курсор находится в  следующей

  позиции за словом подсказки.

       Вывод,   полученный   после   вызова   SMG$READ_STRING

  следующий:

       РROMPT 12345678901234567890.



       1.69. SMG$READ_VERIFY        -         чтение

             последовательности символов с проверкой


       Процедура  SMG$READ_VERIFY  читает  последовательность

  символов и проверяет ее.


       Формат:


       SMG$READ_VERIFY клавиатура, строка вывода,




                           - 332 -

                       00152-01 33 09-4


                       строка ввода, строка, символ1,

                       символ2 [,подсказка]

                       [,модификация] [,период]

                       [,ограничители] [,смещение]

                       [,код] [,дисплей1] [,эхо-строка]

                       [,дисплей2]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Клавиатура


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Идентификатор клавиатуры. Аргумент клавиатура является

  целым длинным словом со  знаком,  содержащим  идентификатор

  виртуальной клавиатуры.  Виртуальная  клавиатура  создается

  вызовом процедуры SMG$CREATE_VIRTUAL_KEYBOARD.


       Строка вывода


       Использование в МОС ВП: строка символов




                           - 333 -

                       00152-01 33 09-4


       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка вывода,  в  которую  процедура  SMG$READ_VERIFY

  записывает  читаемые  символы.   Аргумент   строка   вывода

  является  адресом  дескриптора,  указывающего   на   строку

  вывода.


       Строка ввода


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Вводная  строка,  содержащая  первоначальные   символы

  поля.  Аргумент   строка   ввода   -   адрес   дескриптора,

  указывающего вводную строку.


       Строка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Описательная строка, содержащая описание,  как  форми-

  руемое поле  должно  выглядеть.  Аргумент  строка  -  адрес

  дескриптора, указывающего на описательную строку.





                           - 334 -

                       00152-01 33 09-4


       Символ1


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Символ   заполнения.   Аргумент   символ1   -    адрес

  дескриптора, указывающего  на  строку,  содержащую  символ,

  который используется как символ заполнения в строке ввода.


       Символ2


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Символ очистки. Аргумент символ2 - адрес  дескриптора,

  указывающего на строку, которая содержит символ,  выводимый

  на дисплей в случае использования символа заполнения.


       Подсказка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Строка   подсказки.   Аргумент   подсказка   -   адрес

  дескриптора,  указывающего  на  строку,  которую  процедура




                           - 335 -

                       00152-01 33 09-4


  SMG$READ_VERIFY  использует  как  подсказку  для   операции

  чтения. Данный аргумент необязателен.


       Модификация


       Использование в МОС ВП: длинное слово маски

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Модификаторы. Аргумент  модификация  является  длинным

  словом битовой маски,  определяющей  необязательный  режим.

  Определяемые биты такие же, как в  элементе  TRM$_MODIFIERS

  списка QIO, представленно  в  описании  драйвера  терминала

  [2].


       Период


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Значение периода. Аргумент необязателен. Если аргумент

  период определен,  все  символы  возвращаются  в  буфер  до

  завершения   периода.   Если   аргумент   опущен,   символы

  возвращаются в буфер до появления ограничителя.


       Ограничители


       Использование в МОС ВП: строка символов




                           - 336 -

                       00152-01 33 09-4


       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Набор ограничителей.  Аргумент  ограничители  является

  дескриптором фиксированной  длины  (0-8  байт)  или  маской

  ограничителей (класс и  тип  данных  игнорируется).  Данный

  аргумент необязательный. Если аргумент опущен, используются

  стандартные ограничители СУД-32.


       Смещение


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Смещение в строке  ввода.  Аргумент  является  длинным

  словом, содержащим число выводимых символов после подсказки

  перед ожидаемым вводом.


       Код


       Использование в МОС ВП: слово без знака

       Тип: слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Код клавиши. Аргумент код является словом без знака, в

  которое   процедура   SMG$READ_VERIFY    записывает    код,

  показывающий какой символ или ограничитель  клавиши  завер-



                           - 337 -

                       00152-01 33 09-4


  шает чтение. Более подробная информация о  значениях  аргу-

  мента приведена в табл.9 [1].


       Дисплей1


       Использоваие в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Идентификатор  дисплея.  Аргумент  дисплей1   является

  целым длинным словом со  знаком,  содержащим  идентификатор

  виртуального дисплея, с которого чтение происходит.  Данный

  аргумент необязательный. Если аргумент определен, процедура

  SMG$READ_VERIFY   начинает   чтение   в   текущей   позиции

  виртуального  курсора.   Если   аргумент   опущен,   чтение

  начинается в текущей позиции физического курсора.


       Эхо-строка


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Отображаемая  строка.  Аргумент  эхо-строка   является

  строкой, которая печатается после того, как  первый  символ

  напечатается во  время  операции  чтения.  Данный  аргумент

  необязательный.






                           - 338 -

                       00152-01 33 09-4


       Дисплей2


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Альтернативный   идентификатор    дисплея.    Аргумент

  дисплей2  является  целым   длинным   словом   со   знаком,

  содержащим идентификатор виртуального  дисплея,  в  котором

  эхо-строка    будет     напечатана.     Данный     аргумент

  необязательный. Если аргумент определен, вывод начинается с

  текущей позиции виртуального курсора на данном  виртуальном

  дисплее.  Если  аргумент  опущен,   используется   значение

  дисплей1  если  аргумент  дисплей1  не   определен,   вывод

  начинается с текущей позиции физического курсора.


       Описание.


       Процедура  SMG$READ_VIRIFY  читает  последовательность

  символов  со  специфицированной  виртуальной  клавиатуры  и

  сверяет последовательность с  описательной  строкой.  Затем

  процедура   возвращает   читаемый   символ   в   вызывающую

  программу. Можно также определить, чтобы  возвращался  код,

  соответствующий ограничителю.

       В [2] описана дополнительная информация  об  операциях

  чтения с проверкой.








                           - 339 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SS$_CANCEL

       - операция    ввода/вывода    отменена     (процедурой

         SMG$CANCEL_INPUT);

  SMG$_DISREQ

       - обращение    к    SMG$READ_VERIFY    сделано     для

         подтверждения  правильности.  Неопределен   аргумент

         дисплей1,   последовательность   SCROLL_REVERSE   не

         найдена  для  указанного  терминала   в   TERMTABLE.

         Добавить  аргумент  дисплей1   в   вызов   процедуры

         SMG$READ_VERIFY  или   добавить   последовательность

         SCROLL_REVERSE в TERMTABLE.EXE;

  SMG$EOF

       - конец файла;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей1;

  SMG$_INVKBD_ID

       - неверный аргумент клавиатура;

  SMG$_LENNOTEQL

       - длины строк строка и строка ввода не эквивалентны;

  SMG$_LENMUSONE

       - длина строк символ1 и символ2 должна быть равна еди-

         нице;

  SMG$_WRONUMARG

       - неправильное число аргументов;




                           - 340 -

                       00152-01 33 09-4


  LIB$_XXX

       - некоторые ошибки из LIB$SCOPY_R_DX;

  RMS$_XXX

       - некоторые ошибки из $GET (кроме RMS$_EOF);

  SS$_XXX

       - некоторые ошибки из $QIOW.



       1.70. SMG$REPAINT_LINE - переписывание  серии

             строк на текущем экране


       Процедура SMG$REPAINT_LINE переписывает серию строк на

  текущем экране.


       Формат:


       SMG$REPAINT_LINE  идентификатор, номер строки

                         [,число строк]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)




                           - 341 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством ссылки


       Идентификатор компоновочного пульта. Аргумент  иденти-

  фикатор - адрес длинного слова без знака, содержащего иден-

  тификатор компоновочного пульта,  связанного  с  физическим

  экраном, который должен быть переписан.


       Номер строки


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Номер начальной строки. Аргумент номер строки -  адрес

  номера   физической   строки,    с    которой    начинается

  переписывание.


       Число строк


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Число смежных строк для переписывания. Аргумент  номер

  строки - адрес длинного слова без знака, содержащего  число

  строк.  Данный   аргумент   необязателен.   Если   аргумент

  неопределен, устанавливается значение 1.





                           - 342 -

                       00152-01 33 09-4


       Описание.


       Процедура  SMG$REPAINT_LINE  переписывает  строку  или

  серию  строк  текущего   экрана,   основываясь   на   своем

  внутреннем представлении о том, как экран будет  выглядеть.

  Процедура      SMG$REPAINT_LINE      вызывается,      когда

  предполагается, что содержимое экрана будет разрушено.

       Если включен пакетный режим для компоновочного пульта,

  переписывание  происходит  с  экранного  образа;  в  других

  случаях - с текстового образа. В SMG$REPAINT_LINE добавлена

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

  прикреплен к колонке 1. (Для дальнейшей информации об  ука-

  занном ограничении смотрите  подраздел  описания  процедуры

  SMG$READ_STRING).

       Рассматриваемая процедура  не  может  быть  применена,

  если переписываемая строка двойной высоты.

       Правильное использование процедура SMG$REPAINT_LINE  -

  это повторение строки после введения CTRL/U или  CTRL/R  на

  дисплей.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVPAS_ID

       - неверный контрольный блок компоновочного пульта.










                           - 343 -

                       00152-01 33 09-4


       1.71. SMG$REPAINT_SCREEN   -    переписывание

             текущего экрана


       Процедура  SMG$REPAINT_SCREEN   переписывает   текущий

  экран после того, как произошел ввод/вывод, не использующий

  SMG процедуры.


       Формат:


       SMG$REPAINT_SCREEN идентификатор


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет переписываемый  экран  терминала.  Аргумент

  идентификатор - адрес длинного слова без знака, содержащего

  идентификатор компоновочного пульта.







                           - 344 -

                       00152-01 33 09-4


       Описание.


       Процедура  SMG$REPAINT_SCREEN   переписывает   текущий

  экран. Процедура  предназначена  для  использования,  когда

  какой-нибудь   внешний   фактор    (например,    переданное

  сообщение) разрушает содержимое экрана.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;

  SMG$_WRONUMARG

       - неправильное число аргументов.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  показывает использование процедуры SMG$REPAINT_SCHREEN.

  С-

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$PUT_CHARS

        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS, BORDER

  С+

  С  CREATE THE VIRTUAL_DISPLAY. TO CREATE

  С  A BORDER, WE SET BORDER = 1. NO BORDER

  С  WOULD BE BORDER = 0.




                           - 345 -

                       00152-01 33 09-4


  С-

        INCLUDE '($SMGDEF)'

        ROWS = 3

        COLUMNS = 50

        BORDER = 1

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, BORDER)

  С+

  С  CREATE THE PASTEBOARD USING SMG$CREATE_PASTEBOARD.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

  С+

  С  PUT DATA IN THE VIRTUAL DISPLAY BY CALLING SMG$PUT_CHARS

  С-

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS VIRTUAL DISPLAY HAS 3 ROWS AND 50

     1            COLUMNS.',1,1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS IS A BORDERED VIRTUAL DISPLAY.',2,1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'SMG$PUT_CHARS PUTS DATA IN THIS

     1            DISPLAY.',3,1)

  С+

  С  CALL SMG$PASTE_VIRTUAL_DISPLAY TO PASTE THE VIRTUAL

  С  DISPLAY.

  С-

        ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1,




                           - 346 -

                       00152-01 33 09-4


     1            PASTE1, 4,15)

  С+

  С  MESS UP THE SCREEN WITH SOME FORTRAN OUTPUT.

  С-

        WRITE (6,*) ' MESS UP THE SCREEN.'

        WRITE (6<*) 'MORE MESS.'

  С+

  С  CALL SMG$REPAINT_SCREEN TO REPAINT THE SCREEN.

  С-

        ISTATUS = SMG$REPAINT_SCREEN ( PASTE1)

        END


       Вывод, полученный программой на языке программирования

  ФОРТРАН до вызова SMG$PEPAINT_SCREEN представлен на рис.23.


          --------------------------------------------------
          !                                                !
          ! THIS VIRTUAL HAS 3 ROWS AND 50 COLUMNS         !
          !                                                !
          ! THIS IS A BORDERED VIRTUAL DISPLAY             !
          !                                                !
  MESS UP THE SCREEN PUT_CHARS PUTS DATA IN THIS DISPLAY   !
          !                                                !
  MORE MESS                                                !
          !                                                !
          --------------------------------------------------

                           Рис. 23



       Вывод,  полученный  после  вызова  SMG$REPAINT_SCREEN,

  представлен на рис. 24.










                           - 347 -

                       00152-01 33 09-4


          ---------------------------------------------------
          !                                                 !
          ! THIS VIRTUAL DISPLAY HAS 3 ROWS AND 50 COLUMNS  !
          !                                                 !
          ! THIS IS A BORDERED VIRTUAL DISPLAY              !
          !                                                 !
          !      SMG$PUT_CHARS PUTS DATA IN THIS DISPLAY    !
          !                                                 !
          !                                                 !
          ---------------------------------------------------

                            Рис. 24


       1.72. SMG$REPASTE_VIRTUAL_DISPLAY   -   новое

             прикрепление виртуального дисплея


       Процедура SMG$REPASTE_VIRTUAL_DISPLAY заново  прикреп-

  ляет   виртуальный   дисплей   в   заданную   позицию    на

  компоновочном пульте. Порядок прикрепления не сохраняется.


       Формат:


       SMG$REPASTE_VIRTUAL_DISPLAY дисплей, идентификатор,

                                   номер строки,

                                   номер колонки


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения











                           - 348 -

                       00152-01 33 09-4


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет заново прикрепляемый  виртуальный  дисплей.

  Аргумент дисплей является адресом длинного слова без знака,

  содержащего идентификатор дисплея.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет компоновочный  пульт,  на  котором  дисплей

  прикрепляется.  Аргумент  идентификатор  -  адрес  длинного

  слова без знака, содержащего  идентификатор  компоновочного

  пульта.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)




                           - 349 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет номер строки компоновочного пульта, которая

  содержит строку 1 специфицированного виртуального  дисплея.

  Аргумент номер строки -  адрес  целого  длинного  слова  со

  знаком,  которое  содержит  номер   строки   компоновочного

  пульта.


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  номер   колонки   компоновочного   пульта,

  которая содержит колонку 1 специфицированного  виртуального

  дисплея. Аргумент номер колонки  -  адрес  целого  длинного

  слова со знаком, содержащего номер  колонки  компоновочного

  пульта.


       Описание.


       Процедура SMG$REPASTE_VIRTUAL_DISPLAY позволяет  прик-

  реплять виртуальный дисплей к новой позиции  компоновочного

  пульта.        Процедура         вызывает         процедуру

  SMG$UNPASTE_VIRTUAL_DISPLAY и  SMG$REPASTE_VIRTUAL_DISPLAY.

  При  этом   изменяется   порядок   прикрепления.   Операции

  открепления  и  нового  прикрепления  используют  процедуры




                           - 350 -

                       00152-01 33 09-4


  SMG$BEGIN_PASTEBOARD_UPDATE  и   SMG$END_PASTEBOARD_UPDATE.

  Поэтому на экране не будет никакого  эффекта  до  тех  пор,

  пока операция нового прикрепления не закончится.

       Описываемая процедура заставляет  виртуальный  дисплей

  находиться в вершине порядка прикрепления. Для  перемещения

  виртуального дисплея  без  изменения  порядка  прикрепления

  используется процедура SMG$MOVE_VIRTUAL_DISPLAY.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;

  SMG$_WRONUMARS

       - неправильное число аргументов.


       Пример.


  С+

  С  Этот пример программы на языке программирования ФОРТРАН

  С  показывает использование процедур

  С  SMG$REPASTE_VIRTUAL_DISPLAY и SMG$MOVE_VIRTUAL_DISPLAY.

  С-

        INTEGER SMG$CREATE_VIRTUAL_DISPLAY,

     1  SMG$CREATE_PASTEBOARD

        INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$PUT_CHARS

        INTEGER SMG$REPASTE_VIRTUAL_DISPLAY,



                           - 351 -

                       00152-01 33 09-4


     1  SMG$MOVE_VIRTUAL_DISPLAY

        INTEGER DISPLAY, PASTE1, ROWS, COLUMNS

  С+

  С  INCLUDE THE SMG DEFINITIONS. IN PARTICULAR,

  С  WE WANT SMG$M_BORDER.

  С-

        INCLUDE '($SMGDEF)'

  С+

  С  CREATE A VIRTUAL DISPLAY WITH A BORDER BY CALLING

  С  SMG$CREATE_VIRTUAL_DISPLAY.

  С-

        ROWS = 3

        COLUMNS = 50

        ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY

     1            (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)

  С+

  С  CALL SMG$CREATE_PASTEBOARD TO CREATE THE PASTEBOARD.

  С-

        ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)

  С+

  С  PUT DATA THE VIRTUAL DISPLAY USING SMG$PUT_CHARS.

  С-

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1,

     1            'THIS VTRTUAL DISPLAY HAS 3 ROWS AND 50

     1            COLUMNS. ',1,1)

        ISTATUS = SMG$PUT_CHARS ( DISPLAY1.

     1            'THIS IS A BORDERED VIRTUAL DISPLAY.' ,2,1)




                           - 352 -

                       00152-01 33 09-4


        ISTATUS = SMG$PUT_SHARS ( DISPLAY1,

     1            'SMG$PUT_CHARS PUTE DATA IN THIS VIRTUAL

     1            DISPLAY.',3,1)

  С+

  С  CALL SMG$PASTE_VIRTUAL_DISPLAY TO PASTE THE VIRTUAL

  С  DISPLAY.

  С-

         ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1,

     1             PASTE1, 4, 15)

  С+

  С  MOVE THE VIRTUAL DISPLAY BY CALLINGG

  С  SMG$MOVE_VIRTUAL_DISPLAY.

  С-

        ISTATUS = SMG$MOVE_VIRTUAL_DISPLAY ( DISPLAY1,

     1            PASTE1,10,5)

  С+

  С  CALL SMG$REPASTE_VIRTUAL_DISPLAY TO REPASTE THE

  С  ORIGINAL VIRTUAL DISPLAY AS IT WAS.

  С-

        ISTATUS = SMG$REPASTE_VIRTUAL_DISPLAY (DISPLAY1,

     1            PASTE1, 4,15)

        END


       Вывод, полученный программой на языке программирования

  ФОРТРАН после вызова SMG$REPASTE_VIRTUAL_DISPLAY  представ-

  лен на рис. 25.







                           - 353 -

                       00152-01 33 09-4


  ---------------------------------------------------
  !                                                 !
  ! THIS VIRTUAL DISPLAY HAS 3 ROWS AND 50 COLUMNS  !
  !                                                 !
  ! THIS IS A BORDERED VIRTUAL DISPLAY              !
  !                                                 !
  ! SMG$PUT_CHARS PUTS DATA IN THIS VIRTUAL DISPLAY !
  !                                                 !
  ---------------------------------------------------

                           Рис. 24




       1.73. SMG$RESTORE_PHYSICAL_SCREEN           -

             воспроизведение физического экрана


       Процедура SMG$RESTORE_PHYSICAL_SCREEN  восстанавливает

  изображение физического экрана таким,  каким  оно  было  во

  время вызова процедуры SMG$SAVE_PHYSICAL_SCREEN.


       Формат:


       SMG$RESTORE_PHYSICAL_SCREEN идентификатор, дисплей


       Код возврата:


       Использование в МОС ВП: значения состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством величины


       Аргументы:


       Идентификатор

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)




                           - 354 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   восстанавливаемый    физический    экран.

  Аргумент идентификатор является адресом длинного слова  без

  знака, содержащего идентификатор компоновочного пульта.

       Значение      аргумента       возвращается       через

  SMG$CREATE_PASTEBOARD.


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей,  созданный  процедурой

  SMG$SAVE_PHYSICAL_SCREEN. Аргумент дисплей - адрес длинного

  слова без знака, содержащего идентификатор дисплея.


       Описание.


       Процедура  SMG$RESTORE_PHYSICAL_SCREEN   воспроизводит

  экранное      изображение,      сохраненное      процедурой

  SMG$SAVE_PHYSICAL_SCREEN. Аргумент  дисплей  передается  от

  процедуры     SMG$SAVE_PHYSICAL_SCREEN     к      процедуре

  SMG$RESTORE_PHYSICAL_SCREEN.










                           - 355 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMGS_INVDIS_ID

       - неверный аргумент дисплей;

  SMGS_INVRAS_ID

       - неверный аргумент идентификатор.



       1.74. SMG$RETURN_CURSOR_POS   -   возвращение

             позиции виртуального курсора


       Процедура  SMG$RETURN_CURSOR_POS  возвращает   текущую

  позицию   виртуального   курсора    на    специфицированном

  виртуальном дисплее.


       Формат:


       SMG$RETURN_CURSOR_POS дисплей, номер строки,

                             номер колонки


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения











                           - 356 -

                       00152-01 33 09-4


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей, для  которого  опреде-

  ляется текущая позиция курсора. Аргумент  дисплей  -  адрес

  длинного слова без знака, содержащего  идентификатор  дисп-

  лея.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Номер строки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ:только чтение

       Механизм: посредством ссылки


       Получает позицию текущей  строки  курсора  в  пределах

  виртуального  дисплея.  Аргумент  номер  строки   -   адрес

  длинного слова, в котором записывается позиция строки.


       Номер колонки


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)




                           - 357 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством ссылки


       Принимает позицию текущей колонки курсора  в  пределах

  данного виртуального  дисплея.  Аргумент  номер  колонки  -

  адрес длинного слова, в котором записывается позиция колон-

  ки.


       Описание.


       Процедура  SMG$RETURN_CURSOR_POS  возвращает   текущие

  позиции  строки   и   колонки   виртуального   курсора   на

  специфицированном виртуальном дисплее.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$WRONUMARG

       - неправильное число аргументов.



       1.75. SMG$RING_BELL  -  звучание  звонка  или

             зуммера терминала


       Процедура SMG$RING_BELL  подает  сигнал  терминального

  звонка или зуммера.









                           - 358 -

                       00152-01 33 09-4


       Формат:


       SMG$RING_BELL  дисплей [,число сигналов]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип:длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  виртуальный  дисплей,  звонок  или  зуммер

  которого подает сигнал. Аргумент дисплей -  адрес  длинного

  слова без знака, содержащего идентификатор дисплея.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_ DISPLAY.


       Число сигналов


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение





                           - 359 -

                       00152-01 33 09-4


       Механизм: посредством ссылки


       Определяет  число  подаваемых  сигналов  звонком   или

  зуммером. Аргумент число сигналов - адрес  целого  длинного

  слова со знаком,  содержащего  число  подаваемых  сигналов.

  Если опущен, используется значение I.


       Описание.


       Процедура SMG$RING_BELL подает звуковой сигнал  звонка

  или зуммера для каждого компоновочного пульта  (терминала),

  к которому прикреплен специфицированный  виртуальный  дисп-

  лей. Число подаваемых  сигналов  определено,  по  умолчанию

  устанавливается в 1.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей.

       Некоторые значения состояния возвращаются через $QIOW.

       Некоторые  значения   состояния   возвращаются   через

  STR$DUPL_CHAR.



       1.76. SMG$SAVE_PHYSICAL_SCREEN  -  сохранение

             физического экрана


       Процедура      SMG$SAVE_PHYSICAL_SCREEN      сохраняет

  содержимое  экрана  так,  чтобы  последующее  обращение   к

  процедуре SMG$RESTORE_PHYSICAL_ SCREEN  могло  восстановить



                           - 360 -

                       00152-01 33 09-4


  его.


       Формат:


       SMG$SAVE_PHYSICAL_SCREEN  идентификатор, дисплей,

                                 [,начальная строка]

                                 [,последняя строка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет физический экран, содержимое которого долж-

  но быть сохранено. Аргумент идентификатор - адрес  длинного

  слова без знака, содержащего  идентификатор  компоновочного

  пульта.


       Дисплей


       Использование в МОС ВП: длинное слово без знака




                           - 361 -

                       00152-01 33 09-4


       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Принимает значение идентификатора дисплея,  созданного

  для хранения содержимого физического экрана. Аргумент дисп-

  лей  -  адрес  длинного  слова   без   знака,   в   которое

  записывается идентификатор дисплея.

       Значение  аргумента  должно  быть  передано  процедуре

  SMG$RESTORE_PHYSICAL_SCREEN для восстановления  сохраненной

  информации.


       Начальная строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   первую   сохраняемую   строку.   Аргумент

  является адресом целого длинного слова,  содержащего  номер

  строки. Если аргумент опущен,  используется  первая  строка

  компоновочного пульта.


       Последняя строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки




                           - 362 -

                       00152-01 33 09-4


       Определяет  последнюю  сохраняемую  строку.   Аргумент

  является  адресом  целого   длинного   слова   со   знаком,

  содержащего  номер  строки.  Если   аргумент   опущен,   то

  используется последняя строка компоновочного пульта.


       Описание.


       Процедура  SMG$SAVE_PHYSICAL_SCREEN   очищает   экран,

  создавая  виртуальный  дисплей,  который   в   ширину   как

  физический экран, а в высоту как  определено  в  аргументах

  начальная  строка  и  последняя  строка.   Если   указанные

  аргументы опущены, то создаваемый  виртуальный  дисплей  по

  высоте  такой  же   как   физический   экран.   Сохраняемая

  информация (экранное изображение) может быть  восстановлена

  вызовом процедуры SMG$RESTORE_PHYSICALL_ SCREEN.

       Описываемая  процедура  применима,  когда   вызывается

  процедура, которая  может  изменить  вывод  на  экране  без

  использользования процедур управления экраном. Перед  вызо-

  вом такой  процедуры  сохраняется  экранное  изображение  с

  помощью SMG$SAVE_PHYSICAL_SCREEN. После завершения процеду-

  ры  сохранения  восстанавливается  экранное  изображение  с

  помощью SMG$RESTORE_PHYSICAL_SCREEN.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;





                           - 363 -

                       00152-01 33 09-4


  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INSVIRMEN

       - недостаточная виртуальная память.



       1.77. SMG$SCROLL_DISPLAY_AREA  -  перемещение

             дисплейной области


       Процедура      SMG$SCROLL_DISPLAY_AREA      перемещает

  прямоугольную область виртуального дисплея.


       Формат:


       SMG$SCROLL_DISPLAY_AREA дисплей [,начальная строка]

                               [,начальная колонка]

                               [,высота] [,ширина]

                               [,направление] [,число строк]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)




                           - 364 -

                       00152-01 33 09-4


       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей, на котором имеет место

  перемещение. Аргумент является адресом длинного  слова  без

  знака, содержащего идентификатор дисплея.


       Начальная строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   первую   строку   перемещаемой   области.

  Аргумент начальная строка - адрес целого длинного слова  со

  знаком, которое содержит номер начальной строки.

       Если  аргумент  опущен,  используется  первая   строка

  специфицированного  виртуального   дисплея.   Если   опущен

  аргумент начальная строка или аргумент  начальная  колонка,

  используется значение, устанавливаемое по умолчанию (строка

  1, колонка 1).


       Начальная колонка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки






                           - 365 -

                       00152-01 33 09-4


       Определяет  первую   колонку   перемещаемой   области.

  Аргумент начальная колонка является адресом целого длинного

  слова со знаком, содержащего номер начальной колонки.

       Если  аргумент  опущен,  то  используется  колонка   I

  специфицированного виртуального дисплея.


       Высота


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  число  строк   в   перемещаемой   области.

  Аргумент высота - адрес целого длинного  слова  со  знаком,

  содержащего число строк.

       Если аргумент опущен, величина  будет  установлена  по

  умолчанию либо как высота перемещаемой области  (если  явно

  установлена с помощью SMG$SET_DISPLAY_SCROLL_REGION),  либо

  как высота специфицированного виртуального дисплея.


       Ширина


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   число   колонок   перемещаемой   области.

  Аргумент ширина - адрес целого длинного  слова  со  знаком,




                           - 366 -

                       00152-01 33 09-4


  содержащего число колонок.

       Если аргумент опущен, величина  будет  установлена  по

  умолчанию либо как высота перемещаемой области  (если  явно

  установлена с помощью SMG$SET_DISPLAY_SCROLL_REGION),  либо

  как ширина специфицированного виртуального дисплея.


       Направление


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет    направление    перемещения.     Аргумент

  направление является  адресом  длинного  слова  без  знака,

  содержащего код направления.

       Действующими являются значения  SMG$M_UP,  SMG$M_DOWN,

  SMG$M_RIGHT, SMG$M_LEFT. Значение SMG$M_UP  установлено  по

  умолчанию.


       Число строк


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет число строк, на которое производится  пере-

  мещение.  Аргумент  число  строк  является  адресом  целого

  длинного слова со знаком,  содержащего  число  строк.  Если




                           - 367 -

                       00152-01 33 09-4


  аргумент опущен, перемещение имеет место на одну строку.


       Описание.


       Процедура SMG$SCROLL_DISPLAY_AREA  перемещает  прямоу-

  гольную область специфицированного виртуального дисплея  на

  определенное число строк в определенном направлении.


       Возвращаемые значения состояния:

  SMG$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVCOL

       - неверная колонка;

  SMG$_INVROW

       - неверная строка;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.78. SMG$SET_BROADCAST_TRAPPING            -

             возможность или  невозможность  захвата

             пересылаемых сообщений


       Процедура SMG$SET_BROADCAST_TRAPPING разрешает или  не

  разрешает захват пересылаемых сообщений.


       Формат:


       SMG$SET_BROADCAST_TRAPPING  идентификатор




                           - 368 -

                       00152-01 33 09-4


                                   [,программа] [,аргумент]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет компоновочный пульт, поставленный  в  соот-

  ветствие терминалу. Аргумент идентификатор - адрес длинного

  слова без знака, содержащего  идентификатор  компоновочного

  пульта.    Значение    аргумента     возвращается     через

  SMG$CREATE_PASTEBOARD.


       Программа


       Использование в МОС ВП: AST процедура

       Тип: маска входа в процедуру

       Доступ: только чтение

       Механизм: посредством ссылки






                           - 369 -

                       00152-01 33 09-4


       Адрес AST программы, вызываемой когда сообщение  пере-

  дается на терминал. Аргумент является адресом AST  програм-

  мы. Если опущен аргумент  или  определен  адрес  0,  захват

  пересылаемого сообщения не разрешен.


       Аргумент


       Использование в МОС ВП: список аргументов

       Тип: неопределен

       Доступ: только чтение

       Механизм: посредством значения


       Значение,  передаваемое  в  AST  программу.   Аргумент

  является значением, передаваемым к AST программе.


       Описание.


       Процедура SMG$SET_BROADCAST_TRAPPING разрешает или  не

  разрешает   захватывать    сообщения,    пересылаемые    на

  специфицированный компоновочный пульт (терминал).  Если  вы

  определили разрешение захвата пересылаемых сообщений, но не

  сделали его неразрешенным перед тем, как завершится  образ,

  то пересылаемые на терминал сообщения теряются.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;






                           - 370 -

                       00152-01 33 09-4


  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_NOT_A_TRM

       - информационное  сообщение.  Компоновочный  пульт  не

         является терминалом.


       Некоторые  значения   состояния   возвращаются   через

  $DASSGN или $CANCEL.

       Некоторые  значения   состояния   возвращаются   через

  LIB$ASN_WTH_MBX.



       1.79. SMG$SET_CURSOR_ABS     -     абсолютная

             установка позиции виртуального курсора


       Процедура  SMG$SET_CURSOR_ABS  перемещает  виртуальный

  курсор в определенную позицию на виртуальном дисплее.


       Формат:


       SMG$SET_CURSOR_ABS  дисплей [,строка] [,колонка]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения










                           - 371 -

                       00152-01 33 09-4


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный  дисплей,  на  котором  позиция

  виртуального  курсора  устанавливается.  Аргумент  является

  адресом длинного слова без знака, содержащего идентификатор

  дисплея.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  позицию  строки,  в  которую  перемещается

  виртуальный курсор. Аргумент строка - адрес целого длинного

  слова со знаком, содержащего номер  строки.  Если  аргумент

  опущен, курсор остается в текущей строке.


       Колонка


       Использование в МОС ВП: длинное слово со знаком




                           - 372 -

                       00152-01 33 09-4


       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет позицию  колонки,  в  которую  перемещается

  виртуальный  курсор.  Аргумент  колонка  -   адрес   целого

  длинного слова со знаком, содержащего номер  колонки.  Если

  аргумент опущен,  виртуальный  курсор  остается  в  текущей

  колонке.


       Описание.


       Процедура  SMG$SET_CURSOR_ABS  перемещает  виртуальный

  курсор  в   определенную   позицию   на   специфицированном

  виртуальном дисплее.


       Возвращаемые значения состояния:

  SMG$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVCOL

       - неверная колонка;

  SMG$_INVROW

       - неверная строка;

  SMG$_WRONUMARG

       - неправильное число аргументов.








                           - 373 -

                       00152-01 33 09-4


       1.80. SMG$SET_CURSOR_REL   -    относительная

             установка позиции виртуального курсора


       Процедура  SMG$SET_CURSOR_REL  перемещает  виртуальный

  курсор на определенное число строк  и  колонок  от  текущей

  позиции виртуального курсора на виртуальном дисплее.


       Формат:


      SMG$SET_CURSOR_REL  дисплей [,число строк]

                          [,число колонок]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет    виртуальный    дисплей,    на    котором

  перемещается виртуальный курсор. Аргумент дисплей  -  адрес

  длинного слова без знака, содержащего  идентификатор  дисп-

  лея.



                           - 374 -

                       00152-01 33 09-4


       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Число строк


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  число  строк  для   перемещения   курсора.

  Аргумент число строк  -  адрес  целого  длинного  слова  со

  знаком, содержащего число строк для перемещения. Если аргу-

  мент опущен, виртуальный курсор остается в текущей  строке.

  Если    аргумент    положительный,    виртуальный    курсор

  перемещается вниз на определенное число строк.  Если  аргу-

  мент отрицательный, перемещается вверх.


       Число колонок


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово со знаком

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет число колонок для перемещения  виртуального

  курсора. Аргумент число колонок  -  адрес  длинного  слова,

  содержащего число колонок для  перемещения.  Если  аргумент

  опущен, виртуальный курсор остается в текущей колонке. Если

  аргумент положителен, виртуальный  курсор  перемещается  на




                           - 375 -

                       00152-01 33 09-4


  определенное   число   колонок   вправо.   Если    аргумент

  отрицателен - влево.


       Описание.


       Процедура  SMG$SET_CURSOR_REL  перемещает  виртуальный

  курсор на определенное число строк и  колонок  относительно

  текущей позиции  виртуального  курсора.  Если  определенные

  аргументы  число  строк  и   число   колонок   предполагают

  перемещение за границу виртуального  дисплея,  возвращается

  значение SMG$_INVROW или SMG$_INVCOL.


       Возвращаемые значения состояния:

  SMG$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVARG

       - неверный аргумент;

  SMG$_INVCOL

       - неверное значение аргумента число строк предполагает

         перемещение за границы виртуального дисплея;

  SMG$_INVROW

       - неверное значение аргумента число колонок  предпола-

         гает перемещение за границы виртуального дисплея;

  SMG$_WRONUMARG

       - неправильное число аргументов.







                           - 376 -

                       00152-01 33 09-4


       1.81. SMG$SET_DEFAULT_STATE    -    установка

             состояния, задаваемое по умолчанию


       Процедура  SMG$SET_DEFAULT_STATE  устанавливает  и/или

  возвращает  состояние,   задаваемое   по   умолчанию,   для

  клавишной таблицы.


       Формат:


       SMG$SET_DEFAULT_STATE таблица [,новое состояние]

                             [,старое состояние]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Таблица


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет    клавишную    таблицу,    для     которой

  устанавливается   состояние,   задаваемое   по   умолчанию.

  Аргумент  таблица  -  адрес  длинного  слова   без   знака,

  содержащего идентификатор клавишной таблицы. Значение аргу-



                           - 377 -

                       00152-01 33 09-4


  мента возвращается через SMG$CREATE_KEY_TABLE.


       Новое состояние


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Определяет   новое   состояние,    установленное    по

  умолчанию, для  включения  в  клавишную  таблицу.  Аргумент

  новое состояние - адрес  дескриптора,  указывающего  строку

  нового состояния.


       Старое состояние


       Использование в МОС ВП: строка символов

       Тип: строка символов

       Доступ: только чтение

       Механизм: посредством дескриптора


       Принимает  существующее  наименование  состояния   для

  заданной клавишной таблицы.  Аргумент  старое  состояние  -

  адрес дескриптора, указывающего  память,  в  которой  будет

  записываться строка старого состояния.


       Описание.


       Процедура  SMG$SET_DEPAULT_STATE  устанавливает  и/или

  возвращает  состояние,  установленное  по  умолчанию,   для

  существующей  таблицы  клавишных   определений.   Изменение




                           - 378 -

                       00152-01 33 09-4


  состояния,  установленного  по   умолчанию,   для   таблицы

  клавишных определений приводит к использованию клавиш малой

  клавиатуры для новой установки функций.


       Возвращаемые значения состояния:

  SMG$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVKTB_ID

       - неверный аргумент таблица;

  SMG$_INVSTANAM

       - неверное наименование состояния;

  LIB$INVSTRDES

       - неверный дескриптор строки.



       1.82. SMG$SET_DISPLAY_SCROLL_REGION         -

             создание    дисплейной     перемещаемой

             области


       Процедура    SMG$SET_DISPLAY_SCROLL_REGION     создает

  перемещаемую область на виртуальном дисплее.


       Формат:


     SMG$SET_DISPLAY_SCROLL_REGION дисплей

                                   [,начальная строка]

                                   [,последняя строка]


       Код возврата:


       Использование в МОС ВП: значение состояния




                           - 379 -

                       00152-01 33 09-4


       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет виртуальный дисплей, в котором имеет  место

  перемещение. Аргумент дисплей - адрес  длинного  слова  без

  знака, содержащего идентификатор дисплея.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY.


       Начальная строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   первую   строку   перемещаемой   области.

  Аргумент начальная строка - адрес целого длинного слова  со

  знаком, содержащего номер начальной строки.  Если  аргумент

  опущен, используется первая строка дисплея.





                           - 380 -

                       00152-01 33 09-4


       Последняя строка


       Использование в МОС ВП: длинное слово со знаком

       Тип: только чтение

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  последнюю  строку  перемещаемой   области.

  Аргумент   является   адресом   целого   длинного    слова,

  содержащего номер последней строки. Если  аргумент  опущен,

  используется последняя строка виртуального дисплея.


       Описание.


       Процедура    SMG$SET_DISPLAY_SCROLL_REGION     создает

  логическую  перемещаемую   область   на   специфицированном

  виртуальном дисплее,  используя  определенные  начальную  и

  последнюю строки. Если указанные  аргументы  опущены,  весь

  дисплей становится перемещаемой областью. Эта процедура  не

  изменяет содержимого экрана и позицию курсора.


       Возвращаемые значения состояния:

  SMG$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_INVCOL

       - неверная колонка;







                           - 381 -

                       00152-01 33 09-4


  SMG$_INVROW

       - неверная строка;

  SMG$_WRONUMARG

       - неправильное число аргументов.



       1.83. SMG$SET_KEYPAD_MODE - установка  режима

             для малой клавиатуры.


       Процедура SMG$SET_KEYPAD_MODE  устанавливает  цифровую

  малую клавиатуру терминала в цифровой режим или режим  при-

  ложения.


       Формат:


       SMG$SET_KEYPAD_MODE клавиатура, режим


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Клавиатура


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки




                           - 382 -

                       00152-01 33 09-4


       Определяет  виртуальную  клавиатуру,   режим   которой

  изменяется. Аргумент клавиатура - адрес длинного слова  без

  знака, содержащего идентификатор клавиатуры.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUALL_KEYBOARD.


       Режим


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет  цифровой  режим  или   режим   приложения.

  Аргумент режим является адресом длинного слова  без  знака,

  содержащего устанавливаемый режим. Если младший  бит  чист,

  клавиатура будет установлена в цифровой режим; если младший

  бит установлен - в режим  приложения.  Все  остальные  биты

  должны быть нулевые.


       Описание.


       Процедура SMG$SET_KEYPAD_MODE  устанавливает  цифровую

  малую клавиатуру терминала в цифровой режим или режим  при-

  ложения.  В  режиме  приложения  клавиши   цифровой   малой

  клавиатуры являются функциональными клавишами и могут  быть

  использованы  как  ограничители.  В  цифровом  режиме   эти

  клавиши эквивалентны соответствующим клавишам  на  основной

  клавиатуре.





                           - 383 -

                       00152-01 33 09-4


       Для  успешного  вызова  процедуры  SMG$SET_KEYPAD_MODE

  терминал должен поддерживать режим приложения.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$WRONMARS

       - неправильное число аргументов;

  SMG$_INVKED_ID

       - неверный аргумент клавиатура.



       1.84. SMG$SET_OUT_OF_BAND_ASTS  -   установка

             AST     программы     для     обработки

             недопустимых символов


       Процедура SMG$SET_OUT_OF_BAND_ASTS  разрешает  или  не

  разрешает обслуживание недопустимых символов.


       Формат:


       SMG$SET_OUT_OF_BAND_ASTS  идентификатор, маска

                                 [,программа] [,аргумент]


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения






                           - 384 -

                       00152-01 33 09-4


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет терминал, обслуживание для  которого  будет

  разрешено  или  не  разрешено   обслуживание   недопустимых

  символов. Аргумент идентификатор является адресом  длинного

  слова без знака, содержащего  идентификатор  компоновочного

  пульта.

       Значение      аргумента       возвращается       через

  SMG$CREATE_PASTEBOARD.


       Маска


       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет, какие управляющие символы будут рассматри-

  ваться как недопустимые. Аргумент маска  -  адрес  длинного

  слова  без  знака,  содержащего  маску.   Создается   маска

  установкой бита, который  соответствует  коду  назначаемого

  символа  в  КОИ-8  для  желаемого  символа.  Например,  для

  определения УС/А (в КОИ-8 значение равно 1) как  недопусти-




                           - 385 -

                       00152-01 33 09-4


  мого управляющего символа, установить  бит  1  в  аргументе

  маска. Если в маске  не  установлены  никакие  биты,  тогда

  отсутствуют недопустимые управляющие символы.


       Программа


       Использование в МОС ВП: AST процедура

       Тип: маска входа в процедуру

       Доступ: только чтение

       Механизм: посредством ссылки


       Адрес AST программы,  вызываемой  когда  на  терминале

  будет напечатан недопустимый управляющий  символ.  Аргумент

  является адресом маски входа в программу, то есть это адрес

  самой программы.


       Аргумент


       Использование в МОС ВП: аргумент пользователя

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения


       Аргумент, который задается для AST программы. Аргумент

  является  адресом  длинного  слова  без  знака,  содержащим

  значение,  передаваемое  в  AST  программу.   Однако,   AST

  программе может будет нужно  знать  недопустимый  символ  и

  аргумент идентификатор. Поэтому средство управления экраном

  создает структуру из 3-х длинных слов для их  содержания  и

  передает адрес этой структуры, как первый  аргумент  к  AST
                                                             



                           - 386 -

                       00152-01 33 09-4


  программе. Средство управления экраном  сохраняет  аргумент

  пользователя в этой структуре.

       Первое длинное слово содержит аргумент идентификатор и

  имеет символическое имя SMG$L_PASTEBOARD_ID. Второе длинное

  слово -  аргумент  и  имеет  символическое  имя  SMG$L_ARG.

  Третье   длинное   слово   содержит   значение   в    КОИ-8

  напечатанного недопустимого символа и может  быть  доступно

  путем двух  символических  имен:  SMG$B_CHARACTER  (младший

  байт), SMG$L_CHARACTER (длинное слово).


       Описание.


       Процедура  SMG$SET_OUT_OF_BAND_AST  разрешает  или  не

  разрешает обслуживание недопустимых символов на  специфици-

  рованном терминале. Если один из этих символов напечатан на

  терминале, вызывается AST программа.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор.













                           - 387 -

                       00152-01 33 09-4


       1.85. SMG$SET_PHYSICAL_CURSOR   -   установка

             курсора на физическом экране


       Процедура      SMG$SET_PHYSICAL_CURSOR      перемещает

  физический курсор  в  определенную  позицию  на  физическом

  экране.


       Формат:


      SMG$SET_PHYSICAL_CURSOR идентификатор, строка, колонка


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством ссылки


       Аргументы:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   физический   экран,   физический   курсор

  которого перемещается. Аргумент является  адресом  длинного

  слова без знака, содержащего  идентификатор  компоновочного

  пульта.





                           - 388 -

                       00152-01 33 09-4


       Значение      аргумента       возвращается       через

  SMG$CREATE_PASTEBOARD.


       Строка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет строку, в которую  перемещается  физический

  курсор. Аргумент строка является адресом длинного слова без

  знака, содержащего номер строки.


       Колонка


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет колонку, в которую перемещается  физический

  курсор. Аргумент колонка является  адресом  длинного  слова

  без знака, содержащего номер колонки.


       Описание.


       Процедура SMG$SET_PHYSICAL_CURSOR перемещает  физичес-

  кий курсор в  определенные  позиции  строки  и  колонки  на

  экране терминала.






                           - 389 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SMG$_NORMAL

       - нормальное успешное завершение;

  SMG$_WRONUMARG

       - неправильное число аргументов;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;

  SMG$_INVARG

       - неверная колонка.



       1.86. SMG$SNAPSHOT     -     запись     кадра

             компоновочного пульта


       Процедура  SMG$SNAPSHOT   записывает   текущий   буфер

  компоновочного пульта в файл  или  на  терминал  с  твердой

  копией, определенный с помощью аргумента идентификатор.


       Формат:


      SMG$SNAPSHOT идентификатор


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения









                           - 390 -

                       00152-01 33 09-4


       Аргумент:


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет файл или  терминал  с  твердой  копией  для

  приема содержимого буфера компоновочного  пульта.  Аргумент

  является адресом  длинного  слова  без  знака,  содержащего

  идентификатор компоновочного пульта.


       Описание.


       Процедуру  SMG$SNAPSHOT  имеет  смысл   применять,   в

  основном, когда вывод на терминал осуществляется под управ-

  лением  СУД-32  -  это  значит,  когда  устройством  вывода

  является файл или терминал определенного  типа.  Рассматри-

  ваемая процедура может быть использована также для переноса

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

  текущую информацию на компоновочном пульте  записываться  в

  файл или терминал. Никакого действия не  будет,  если  уст-

  ройство, определенное с  помощью  аргумента  идентификатор,

  является видеотерминалом, управляемым средством  управления

  экраном.

       Обычно,  если  вывод  происходит  в  файл,   то   файл

  принимает последний образ экрана. Рассматриваемая процедура

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


                           - 391 -

                       00152-01 33 09-4


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_NOTRMSOUT

       - успешное завершение. Никакого действия нет, вывод не

         управляется через СУД-32.


       Любые значения состояния возвращаются через СУД-32.



       1.87. SMG$UNPASTE_VIRTUAL_DISPLAY           -

             открепление виртуального дисплея


       Процедура    SMG$UNPASTE_VIRTUAL_DISPLAY    открепляет

  виртуальный дисплей от компоновочного пульта.


       Формат:


       SMG$UNPASTE_VIRTUAL_DISPLAY дисплей, идентификатор


       Код возврата:


       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Дисплей


       Использование в МОС ВП: длинное слово без знака





                           - 392 -

                       00152-01 33 09-4


       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет   виртуальный    дисплей,    удаляемый    с

  компоновочного пульта. Аргумент дисплей  -  адрес  длинного

  слова без знака, содержащего идентификатор дисплея.

       Значение      аргумента       возвращается       через

  SMG$CREATE_VIRTUAL_DISPLAY


       Идентификатор


       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки


       Определяет компоновочный пульт (физический  экран),  с

  которого удаляется виртуальный дисплей.  Аргумент  является

  адресом длинного слова без знака, содержащего идентификатор

  компоновочного пульта.


       Описание.


       Процедура     SMG$UNPASTE_VIRTUAL_DISPLAY      удаляет

  специфицированный     дисплей     со     специфицированного

  компоновочного  пульта,  и,  таким   образом,   с   экрана,

  связанного  с  компоновочным  пультом.  Эта  процедура   не

  разрушает  виртуальный  дисплей  или  его  содержимое,  она

  только  удаляет  его  связь  с  компоновочным  пультом   и,




                           - 393 -

                       00152-01 33 09-4


  следовательно, его  изображение  на  экране.  Любой  текст,

  перекрытый специфицированным дисплеем,  становится  видимым

  снова на экране.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - нормальное успешное завершение;

  SMG$_INVPAS_ID

       - неверный аргумент идентификатор;

  SMG$_INVDIS_ID

       - неверный аргумент дисплей;

  SMG$_WPONUMARG

       - неправильное число аргументов;

  SMG$_INVARG

       - неверный  аргумент.  Специфицированный   виртуальный

         дисплей не прикреплен к специфицированному  компоно-

         вочному пульту.

























                           - 394 -

                       00152-01 33 09-4





                 Перечень ссылочных документов






       1. Операционная система МОС  ВП.  Подсистема  исполни-

  тельной библиотеки. Руководство программиста.

  00152-01 33  09-1.

       2. Операционная    система    МОС    ВП.    Управление

  вводом-выводом. Руководство программиста. 00152-01 33 03-1.













             
























			   - 394К -

		     2б.00152-01 33 09-4




                 Перечень ссылочных документов



       1. Операционная система МОС  ВП.  Подсистема  исполни-

  тельной библиотеки. Руководство программиста. 

  2б.00152-01 33 09-1.

       2. Операционная  система  МОС ВП.  Управление  вводом-

  выводом. Руководство программиста. 2б.00152-01 33 03-1. 

  























                  








   
                       - 395K -
  
                 2б.00152-01 33 09-4
                                                      
   ------------------------------------------------------------
   I                                                          I
   I                  Лист регистрации изменений              I
   I                                                          I
   I----------------------------------------------------------I
   IНомера листов (страниц)IВсего IN     IВходящий IПодп.IДатаI
   I-----------------------IлистовIдоку- IN сопро- I     I    I
   IИ IИз- IЗа- IНо- IАнну-I(стра-Iмента Iводитель-I     I    I
   Iз Iме- Iме- Iвых Iлиро-Iниц)  I      Iного до- I     I    I
   Iм Iнен-Iнен-I    Iван- Iв до- I      Iкум. и   I     I    I
   I. Iных Iных I    Iных  Iкум.  I      Iдата     I     I    I
   I----------------------------------------------------------I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
  

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