Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MUMPS СУБД. Практика применения и опыт программирования.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
6.7. ВНЕШНИЕ ПРОЦЕССЫ 451
также для подготовки временных данных в виде файлов для внешних трансляторов (LaTeX, XSL, языки программирования, и другие) и для использования результатов работы внешних процессов. Во втором слу­чае разработчики применяют специальные библиотеки обработки таких специальных форматов файлов и приведения их кодировок к внутренней текущей кодировке MUMPS системы.

6.7 Внешние процессы

Обращение к внешним процессам - это возможность, относящаяся не столько к функционалу собственно СУБД, сколько к задаче интегра­ции с другими компонентами или организация взаимодействия с уже готовыми подсистемами.
Внешний процесс запускается для выполнения определенной задачи. Ему могут быть переданы параметры, получены результаты и вариантов организации взаимодействия может быть множество, в зависимости от исполнения запускаемой программы.
К вариантам запуска внешнего процесса могут быть отнесены следу­ющие:
1. Запустить процесс и не дожидаться окончания его работы.
2. Запустить процесс и дождаться окончания его работы.
3. Запустить процесс и взаимодействовать с его стандартными кана­лами ввода - вывода как с устройством MUMPS.
При этом все три варианта допускают передачу процессу параметров командной строки, а также возможность запуска тенологически различ­ных процессов - exe, скриптов, командных файлов.
Первые две возможности обычно выполняются в MUMPS системах как системные расширенные функции.
Третья возможность более интересная. Запускаемый процесс при­нимает аргументы командной строки и читает свой стандартный вход­ной канал stdin, а результат пишет в свой стандартный выходной канал stdout. Для MUMPS процесса открытие внешнего процесса как устрой­ства означает запуск внешнего процесса с организацией взаимодействия с его каналами. Запускающий MUMPS процесс пишет в его канал stdin, а читает из его канала stdout.
Приведем пример такого устройства, запускающего встроенную в операционную систему команду DIR, и читающий результат.
Для системы Cach´e это может быть такой вариант:
452 ГЛАВА 6. ВНЕШНИЙ МИР
cmd
s dev="dir c:\ /w /b" o dev:("QR") u dev s $zt="end" f r line u $p w line,! q:line="" u dev
end
c dev q
Здесь ключевой элемент состоит в том, что устройство открывается с опцией Q, поэтому читается не из файла dir, а выходной канал процесса, запущенного внешней программой dir.
Для системы MiniM это может быть такой вариант:
dir ;
n zeof=$v("proc",5,0) n dev="|PIPE|dir /w" o dev:("rwt") n result u dev f q:$zeof r result($i(result)) u $p c dev i $v("proc",5,zeof) zw result q
Здесь ключевой элемент состоит в том, что используется устройство типа |PIPE|, что и означает запуск внешнего процесса с организацией чтения его выходного канала.
В системе GT.M это может быть такой вариант:
Set dev="MyProcs" OPEN dev:(COMMAND="ls":READONLY)::"PIPE"
Здесь ключевой элемент состоит в том, что устройству указывается область обработки "PIPE" и отдельно в опции устройства указывается выполняемая команда.
Таким образом, используя запуск внешнего процесса, разработчики могут подключать к разрабатываемой прикладной системе множество уже готовых программ.
К плюсам выполнения задачи внешним процессом относится его го­товность её выполнить и разработка запускаемой программы независи­мо от контекста её использования. В частности, трансляторы языков программирования работают независимо от того, из какой программы
6.8. ПОРТЫ 453
их вызвали. Ко второму плюсу относится использование запущенным процессом собственного адресного пространства, изолированного от за­пускающего. К третьему плюсу можно отнести возможность запускать процесс, работающий в другой архитектуре, например из 64-х битной MUMPS системы запускать и использовать процессы, выполненные как 32-х битные и наоборот, а также независимость от того, что внешний процесс может быть как самостоятельным и запущенным из исполняе­мого файла, так и интерпретатором скриптового языка.
К минусам использования внешних процессов можно отнести воз­можно увеличенное время их запуска по сравнению с обращением к такому же коду, выполненному в виде подключаемой DLL, и необходи­мость специальным образом готовить параметры и принимать результаты работы. Возможно, может понадобиться специальный небольшой парсер для разбора результата работы программы.
При использовании как внешних подключаемых DLL, так и внеш­них процессов в некоторых MUMPS системах может присутствовать приостанов работы остальных JOB, если эта MUMPS система выполне­на на собственном механизме переключения контекстов исполняющихся JOB. При передаче управления внешним средствам из контекста, кон­тролируемого таким интерпретатором, управление ему не возвращается, пока запущенная функция не отработает полностью до возврата или до возврата следующей порции.
Такие устаревшие и немасштабируемые MUMPS системы уже не раз­виваются и сняты с производства, хотя в эксплуатации еще могут на­ходиться сервера под их управлением. Первоначально такие системы были разработаны для работы под управлением операционных систем без встроенной многозадачности, например класса DOS, и унаследовали определенные архитектурные решения.

6.8 Порты

Под применением портов в отношении MUMPS систем понимают в ши­роком смысле и последовательные и параллельные порты, а в узком смысле практически всегда последовательные (а в еще более узком ­RS-232).
Первоначально, когда еще толком не было разработано сетевых со­единений компьютеров с полноценной сетевой инфраструктурой, к ком­пьютеру подключались терминалы. Это монитор с клавиатурой и приемо­передающим блоком, а связь выполняется кабелем по последовательному каналу.
454 ГЛАВА 6. ВНЕШНИЙ МИР
Характеристики связи были таковы, что именно последовательные каналы связи с хорошими токами позволяли связать терминалы с са­мим компьютером на довольно большие расстояния. Объем передачи был небольшой и пропускной способности таких каналов вполне хватало.
В настоящее время такие подключения практически не встречаются, терминалы практически не используются, их заменили полноценные пер­сональные компьютеры с полноценной сетевой инфраструктурой, поэто­му первоначальное назначение последовательных портов как основного коммуникационного средства ушло, но осталось применение последова­тельных портов для другого оборудования.
При появлении полноценных сетевых протоколов TCP/IP на смену железным терминалам пришли телнет - клиенты, эмулирующие их ра­боту и совместимые с передаваемыми форматами за тем исключением, что данные передаются по каналу TCP/IP, а не по последовательному каналу, и телнет клиент это не отдельная аппаратная конструкция, а программа, которая может быть запущена на компьютере во множестве экземпляров и для соединения с различными серверами по одному и тому же сетевому подключению.
Самые различные устройства могут быть подключены к компьютеру по последовательному порту - модемы, контрольно - кассовые машины, считыватели штрихкодов, денежные ящики, приемники купюр.
Последовательные порты также могут быть использованы для обо­рудования, не работающего непосредственно через COM порты, в виде виртуальных последовательных портов. В этом случае устанавливается специальный драйвер виртуального порта. Также могут использоваться аппаратные переходники с USB оборудования на COM порты.
Общий принцип работы с оборудованием по последовательному порту состоит в том, что используется устройство для COM порта. Устройству передаются опции открытия в команде OPEN или, при необходимости, изменяются опциями команды USE, и чтение - запись выполняются ко­мандами READ - WRITE. При этом MUMPS система направляет все указания устройству соответствующему аппаратному последовательно­му порту.
Для организации обмена с контрольно - кассовой аппаратурой нужно записывать и читать из порта байты, описанные в протоколе обмена на используемую аппаратуру. Обычно он выглядит примерно таким обра­зом:
1. Записать байт начала команды.
2. Записать байт кода команды.
6.8. ПОРТЫ 455
3. Записать байт конца команды.
4. Записать 2 байта контрольной суммы. После записи последовательности команд нужно прочитать из того
же устройства ответ о выполнении как определенную последователь­ность байт. В ней содержатся в указанном в протоколе кодировании данные с ответом.
Различные ККМ используют различные протоколы, но общие прин-
ципы полностью аналогичны описанному - это определенная последова­тельность байт. Для корректной работы аппаратуры она также может иметь особенности по настройке параметров порта для передачи - на­личие стоповых бит, число бит в байте, паритетность, скорость переда­чи, интервалы задержек. Эти параметры устанавливаются или в опциях команды OPEN, или в опциях команды USE, или вызовом отдельных системных функций.
Несмотря на то, что последовательные терминалы в настоящее время
считаются устаревшим оборудованием, тем не менее такое оборудование до сих пор находится в эксплуатации как чрезвычайно надежное и про­стое. Для подключения такой аппаратуры к MUMPS серверам исполь­зуются различного рода мультиплексоры, создающие необходимое для аппаратного подключения число последовательных портов, и в MUMPS системе запускаются процессы, обслуживающие обмен данными по по­следовательным портам.
В настоящее время техническая поддержка такого последовательно-
го оборудования, подключение различного рода железных терминалов, является отдельной и непростой задачей в силу очень малой распростра­ненности такого оборудования, и в настоящее время под терминалами с последовательными каналами специалисты скорее будут иметь в ви­ду различного рода платежные терминалы, внутри которых находится компьютер с набором последовательных портов и ККМ - оборудование стойки, подключенное через них.
Отдельно нужно сказать о работе с принтерами. Работа с принтерами
может быть выполнена как вывод текста на тексто - ориентированное устройство и как вывод PCL или PostScript команд на графически ­ориентированное устройство. Традиционно под работой с принтерами по портам подразумевается первый вариант, когда программа на MUMPS просто выводит текст в устройство, связанное с принтером. При этом принтеры могут быть аппаратно выполнены как соединяемые и через последовательный, и через параллельный порт.
В настоящее время современные MUMPS системы могут поддержи-
вать специальные устройства для работы с принтерами с поддержкой
456 ГЛАВА 6. ВНЕШНИЙ МИР
специализированных для принтеров опций - управление ориентацией страницы, качеством печати, ее цветностью и другими. Тем не менее, если принтер работает через обычный последовательный или параллель­ный порт, его можно использовать открыв программно соответствую­щий порт и посылая необходимые управляющие последовательности. Для каждого из принтеров, по крайней мере, выпускавшихся раньше, можно найти описание команд принтера для вывода на печать и текста и графических примитивов.
В некоторой степени исторический факт, что именно такая техноло­гия использования новых моделей принтеров, без использования драй­веров операционной системы, и применялась в различных прикладных MUMPS системах. При необходимости подключения новой модели и для графической печати для нее описывались команды вывода прими­тивов, посылающие последовательности байт в порт, или в некотором роде драйвер принтера, написанный на языке MUMPS. По сути, вывод на принтер производится либо выдачей текста, либо команд языка PCL или PostScript. Для вывода же просто текстовых документов вполне до­статочно обычных текстовых управляющих символов - перевод строки, табулятор, перевод страницы.
Глава 7

Практика применения

7.1 Терминальный режим

Название терминальный происходит от терминалов, это такие полуком­пьютеры, имеющие монитор, канал связи, клавиатуру, и простейшие средства сопряжения по линии связи, например по COM портам.
Такие клиентские места подключались к компьютеру, который стоял в отдельном помещении, или в большой стойке, или даже в нескольких. Терминал отсылал компьютеру нажатие клавиш, а компьютер отвечал командами что сделать с видеопамятью. В результате на экране отобра­жались алфавитно-цифровые символы.
Обычно такие терминалы выполнялись на монохромной электронно­лучевой трубке с зеленым люминофором. Но были терминалы и другого физического исполнения, вместо экрана могли использоваться даже пе­чатающие машинки. Общее название терминального интерфейса так и было закреплено.
В настоящее время терминальные устройства почти не используют­ся, их заменили программные средства, работающие на множестве опе­рационных систем. При этом полностью сохранились принципы взаи­модействия - отсылка нажатия клавиши от клиентской части серверу и отсылка команды изменения экрана от сервера к клиентской части.
В настоящее время также можно встретить термин CHUI - CHaracter User Interface как альтернатива названию GUI - Graphical User Interface. В практически любой операционной системе присутствуют такие про­граммы, в частности это обычные консоли, DOS - окна, графические телнет клиенты, имитирующие алфавитно-цифровой интерфейс.
В таких программах взаимодействие с компьютером выполнено в виде вывода символов, и, зачастую, с применением псевдографики, и ввода с
457
458 ГЛАВА 7. ПРАКТИКА ПРИМЕНЕНИЯ
клавиатуры. Терминальный интерфейс, по оценкам экспертов, позволяет строить программы с наиболее оптимальным для ввода данных интер­фейсом. В частности, при работе со счетами в банках, при вводе чека в супермаркетах, при выписке билетов многие разработчики стараются применить именно алфавитно-цифровой режим, как оптимальный для клавиатурного ввода с большой скоростью.
Такие же программы можно выполнять на языке MUMPS, поскольку клиентской части в общем-то все равно, какими программными сред­ствами принимается символ и отдается команда изменения изображения. Точно так же как на других языках, на языке MUMPS можно формиро­вать символами псевдографики оконный интерфейс, поля ввода, кнопки, и многое другое.
Современные MUMPS системы поддерживают терминально - ориен­тированные средства взаимодействия как минимум, зачастую с несколь­кими вариантами и способами физического соединения и исполнения.
В настоящее время все меньше MUMPS систем поддерживает став­шие физически экзотическими средства вроде COM портов на мульти­плексорах, или LAT интерфейс. При этом как минимум поддерживаются консольные и телнет-интерфейсы.
Консольным интерфейсом называется окно, принадлежащее непосред­ственно запущенному процессу, когда MUMPS процесс физически вы­водит в это окно и читает ввод с клавиатуры компьютера. Телнет ин­терфейсом называется программное взаимодействие MUMPS процесса с телнет клиентом. Телнет клиент это специальная программа, отобра­жающая окно и программно взаимодействующая с серверной частью по сетевому протоколу поверх TCP/IP.
Запуск консольного варианта (если он поддерживается) выполняет­ся или непосредственным запуском исполняемого файла с, возможно, указанием необходимых параметров. Для запуска телнет клиента необ­ходимо запустить саму программу и указать опции соединения - имя компьютера и порт который обслуживается телнет-сервером MUMPS системы. Например, запустив в Windows cmd.exe, в его окне набрать:
telnet localhost 23
Здесь localhost - это имя компьютера (локальный), 23 - номер об­служиваемого порта. При успешном соединении телнет клиент может вводить команды и отображать результат работы.
В качестве телнет клиентов могут быть использованы произвольные телнет клиенты, это могут быть как программы непосредственно кон­сольного исполнения, так и графические, показывающие окно эмуляции.
7.2. РЕДАКТОРЫ РУТИН 459
Многие MUMPS системы предоставляют уже настроенное инсталлято­ром меню запуска терминального входа в MUMPS систему.
Собственно, сам запуск такой программы, соответствующей входу в MUMPS систему, и является обычным и ежедневным делом для тех, кто работает с MUMPS системами, и может вызвать затруднение у разра­ботчиков, привыкших к только графическим средствам разработки. При использовании MUMPS системы первое, что необходимо найти, это спо­соб входа в нее в зависимости от версии, от используемой операционной системы. Далее, в силу традиций и совместимости различных MUMPS систем, все может выглядеть совершенно одинаково на совершенно раз­ных реализациях.
Обычно слева в начале строки MUMPS система обычно пишет промпт и сообщает в нем где находится текущий процесс, в какой из баз дан­ных. После него ожидает ввода команд. При этом можно, нажав стрелки вверх / вниз, выбрать предыдущий ввод. После ввода строки команд раз­работчик нажимает Enter и система выполняет введенные команды.
Протокол для телнет клиентов является открытым и данные переда­ются по сети как есть. Кроме него существуют возможности обратиться к MUMPS системе по закрытому каналу, используя протокол SSH, и различные SSH клиенты. По сути это примерно те же телнет клиенты, но использующие шифрование для закрытия канала обмена данными. Для настройки SSH канала необходимо либо обратиться к руководству на используемую MUMPS систему, либо настроить SSH шлюз внешни­ми средствами.
Обычно окно терминального интерфейса имеет стандартные размеры 80 по горизонтали на 25 по вертикали символов. При этом многие си­стемы имеют возможность увеличить размер по вертикали, в том числе с прокруткой.
Кроме символов псевдографики для оформления рамок и элементов интерфейса CHUI программы могут использовать также цвета. Напри­мер, пакет программ AltNC может работать с рутинами и глобалами различных MUMPS систем в стиле двухпанельного интерфейса Norton Commander, как в консоли так и в телнете, с раскраской панелей и под­светкой синтаксиса рутин на языке MUMPS.

7.2 Редакторы рутин

Вторым основным средством для разработчиков на MUMPS являются редакторы рутин. Рутина представляется в виде текста, как обычный текстовый файл. Редактирование такого текста может выполняться как
460 ГЛАВА 7. ПРАКТИКА ПРИМЕНЕНИЯ
отдельной графической программой с полновесным MDI интерфейсом, так и редатором написанным на самом MUMPS и редактирующим про­грамму в терминальном окне.
Для практически всех современных MUMPS систем существуют сред­ства редактирования текста, либо устанавливаемые в составе MUMPS системы, либо устанавливаемые и настраиваемые отдельно.
Для систем Cach´e и MiniM в комплект MUMPS системы входят графические MDI редакторы текста, для GT.M, Cach´e, DSM, M21 и MSM возможно использование внешних средств Serenji, а также для большинства MUMPS систем может быть использован редактор рутин, входящий в консольный AltNC.
Если MUMPS система поддерживает хранение исходных текстов ру­тин в виде файлов файловой системы, то можно использовать произ­вольный текстовый редактор.
В большинстве случаев редакторы рутин поддерживают редактиро­вание с подсветкой синтаксиса языка MUMPS и, возможно, с учетом специфики MUMPS системы, ее дополнительных возможностей синтак­сиса.
Кроме просто редактирования рутин редакторы также поддержива­ют обращение к компилятору рутин и показ результата трансляции с возможными ошибками синтаксиса.
Редакторы рутин в большинстве случаев соединяются с MUMPS си­стемой по протоколу выполненному поверх TCP/IP и могут работать как с сервером запущенным на том же компьютере, так и с любым другим, если к нему есть доступ по TCP/IP.
Зачастую редакторы рутин также содержат функцию экспорта и им­порта рутин. При этом нужно понимать, на каком из компьютеров будет сохраняться файл экспорта - на локальном, где работает редактор, или на сервере, где работает MUMPS система.
Для организации работы нескольких разработчиков над одним про­ектом могут применяться самые различные способы. Необходимо учи­тывать, что исходный текст рутин не является файлами как таковыми, чтобы использовать готовые средства контроля версий и, в зависимо­сти от принятых в компании - разработчике программного обеспечения внутренних правил это могут быть, например, такие:
1. Разработчики работают в одной базе данных и редактируют только рутины, закрепленные за ними, либо те рутины, которые определе­ны руководителем.
2. Разработчики работают в различных базах данных, в том числе и на различных серверах и проводят экспорт и импорт измененных