вторник, 19 марта 2019 г.

Как сделать MiniM Shell Script на языке MUMPS

MiniM Database Server может быть использован для выполнения скриптов автоматизации сохраненных в текстовых файлах на диске. Опишем процедуру, как сделать скрипты на языке MUMPS.

Для вызова из оболочки Windows скрипта сохраненного в файле нужно зарегистрировать расширение файла и назначить ему обработчик. Для скриптов на языке MUMPS будем использовать файлы с расширением .mumps. В качестве обработчика назначим командный файл mshell.cmd, который сохраним в рабочем подкаталоге MiniM \bin.

Далее в примере приводятся файлы как если бы MiniM Database Server был установлен в каталог w:\MiniM\

Для ассоциирования расширения файла с обработчиком надо внести дополнительные записи в реестр Windows. Пример как это можно сделать, в нотации файлов реестра:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.mumps]
@="MUMPS Script"

[HKEY_CLASSES_ROOT\MUMPS Script\DefaultIcon]
@="W:\\MiniM\\bin\\minim.exe,0"

[HKEY_CLASSES_ROOT\MUMPS Script\Shell\Open\Command]
@="\"w:\\MiniM\\bin\\mshell.cmd\" \"%1\" %*"
Файл обработчик должен передать параметры процессу MiniM:
@echo off
w:\minim\bin\minim.exe -x 
  "d RUN^%%MSHELL(\"%1\",\"%2\",\"%3\",\"%4\",\"%5\",
    \"%6\",\"%7\",\"%8\",\"%9\")" -h
Здесь вызывается специальная устанавливаемая нами рутина ^%MSHELL, которая должна выполнить действия:
  • Указанный в параметре файл прочитать и создать на его основе временную рутину MiniM
  • Временная рутина должна иметь имя производное от служебного префикса и иметь суффикс производный от номера процесса, чтобы одновременное выполнение двух и более скриптов не мешало друг другу
  • Временная рутина должна быть скомпилирована в исполняемый байткод
  • Полученный временный байткод должен быть выполнен как рутина
  • По окончании работы временная рутина и ее байткод должны быть удалены
Это выполняет следующая служебная рутина:
%MSHELL
%MSHELL ; MiniM MUMPS Shell scripts
 q
RUN(%fname,%param...)
 n %rname="MSHELL"_$j,%n,%line
 n %dev="|FILE|"_%fname,%eof=$v("proc",5,0)
 k ^rMAC(%rname)
 o %dev:("rt") u %dev
 s %n=1 f  r %line q:$zeof  d
 . s ^rMAC(%rname,%n)=%line
 . s %n=%n+1
 u 0 c %dev
 i $v("proc",5,%eof)
 i '$$COMP^%MPP(%rname) g err
 i $v("rou","c",%rname) g err
 d @("^"_%rname)
 k ^rMAC(%rname),^ROUTINE(%rname),^rOBJ(%rname)
 q
err
 w !,"Failed to compile script file",!,%fname,!
 r "Press any key to remove this routine and terminate.",!,*%n
 k ^rMAC(%rname),^ROUTINE(%rname),^rOBJ(%rname)
 q
В результате полной настройки мы можем создавать текстовые файлы в любом каталоге с расширением .mumps и запускать их так же как командные или другие скриптовые файлы.

В самом скриптовом файле на языке MUMPS можем использовать макросы, подпрограммы и точечный синтаксис, как если бы это была обычная рутина MiniM Database Server.

Выполнение .mumps скрипта начинается с его первой строки и продолжается либо до команды выхода quit либо до команды halt. Скрипт может использовать все возможности сервера MiniM Database Server. Процесс запускается в базе данных указанной в конфигурационном файле сервера minim.ini как база для процессов по умолчанию, секция [Process], ключ Namespace.

При работе скрипта он получает параметры командной строки, которые при исполнении скрипта доступны как индексированная локальная переменная %param. Например, при запуске скрипта
run.mumps option1 option2 
локальная переменная %param получает значения:
%param=8
%param(1)="option1"
%param(2)="option2"
%param(3)=""
%param(4)=""
%param(5)=""
%param(6)=""
%param(7)=""
%param(8)=""
Загрузить архив с исходными текстами MiniM Shell Scripts (zip, 3Kb)

Загрузить инсталлятор MiniM Shell Scripts (exe, 290 Kb)

Комментариев нет:

Отправить комментарий