UMX knowledge base
В этой статье описано как создавать собственные макросы Pascal используя скриптовые возможности UMX.

 


Для того, чтобы добавить новый макрос в UMX, вы должны поместить специальный файл описания скрипта в папку /Scripts, расположенную там, где установлен UMX.
Файл должен иметь расширение *.s и именть следующую структуру:

@SCRIPT <scriptname>
@LANG <langid>
<script definition>

В одном файле может быть несколько определений, следующих друг за другом. Признак начала определения - строка @SCRIPT <scriptname>

<scriptname> - это уникальное имя макроса, в The Bat он будет доступен с приставкой "FN", например, скрипт под названием TEST можно будет вызывать из шаблона при помощи макроса %FNTEST.

<langid> - это идентификатор языка: JS - Jscript, VB - VBscript, PAS - pascal.

<script definition> - это сам текст скрипта в соответствии с синтаксисом выбранного в секции @LANG языка.

Скриптовый язык Pascal UMX - это подмножество языка Delphi Pascal, реализованное при помощи библиотеки JVCL. Скрипт является либо простым арифметическим выражением, либо описанием функции используя синтаксис языка Pascal без строки function:

@SCRIPT TEST1
@LANG
PAS
//Первый скрипт
'Hello Word! Time is '+datetimetostr(now);

@SCRIPT TEST2
@LANG PAS
//Второй скрипт
var time:TDateTime;
begin
time:=now;
Result:='Hello Word! Time is '+datetimetostr(time);
end;

Чтобы вызвать скрипт из шаблона, необходимо использовать специальный автосгенерированный макрос %FNxxxxxxx, например, чтобы вызвать скрипт TEST2, надо использовать %FNTEST2

В данный момент можно использовать некоторые стандартные процедуры, функции и типы из модулей Delphi: System, SysUtils, Windows

Чтобы использовать внутренние переменные UMC, необходимо обращаться к ним с префиксом umc_ :


@SCRIPT TEST3
@LANG PAS
'UMC version is '+umc_ver

Вы можете использовать управляющие конструкции:
@SCRIPT TEST4
@LANG PAS
var i:integer;
begin
result:='';
for i:=32 to 255 do
result:=result+chr(i);
end;

@SCRIPT TEST5
@LANG PAS
var i:integer;
begin
result:='';
i:=32;
while i<=255 do begin
if (i<45)or(i>53) then
result:=result+chr(i);
i:=i+1;
end;
end;

Для доступа к параметрам макроса следует использовать функции ParamCount и ParamStr, смысл которых совпадает с аналогичными функциями паскаля.

@SCRIPT PARAMETERCOUNT
@LANG PAS
'Число параметров: '+inttostr(ParamCount)

@SCRIPT PARAMETERLIST
@LANG PAS
var i:integer;
begin
result:='';
for i:=1 to paramcount do result:=nl+inttostr(i)+'. '+paramstr(i);
end;

Желаю успехов в тестировании, присылайте интересные макросы мне на ящик, я включу их в дистрибутив следующих версий UMX.