MiniM. Saving time.


| About | Download | Tools | Knowledge Base | How to Buy |

MiniM Overview

Getting Started

Download

Documentation

Tools

Cache Tools

GT.M Tools

Knowledge Base

FAQ

Contacts

Copyrights

MiniM Knowledge Base | Nov 10, 2010

Как сделать $Z переменную

В некоторых задачах переноса программ на MiniM может возникнуть необходимость эмулировать $Z переменную, которую не поддерживает MiniM. Эта статья описывает как ее можно создать, на примере переменной $ZPOS.

Чтобы создать $Z переменную в MiniM, нужно использовать три возможности MiniM Database Server:

  1. Возможность написать на MUMPS свою дополнительную $Z функцию
  2. Использовать факт что вызов подпрограммы без аргументов в MiniM эквивалентен вызову подпрограммы с нулевым числом аргументов.
  3. Использовать факт, что пользовательские $Z функции в MiniM можно вызывать нечувствительно к регистру.

Вызов подпрограммы без аргументов производится так:

s retvalue=$$func^routine

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

s retvalue=$$func^routine()

Поскольку в MiniM Database Server эти два вызова эквивалентны, можно создать пользовательскую $Z переменную, которая в действительности есть пользовательская $Z функция и создать пользовательскую $Z функцию с нулевым числом аргументов.

Рассмотрим в качестве примера реализации пользовательской $Z переменной эмуляцию системной переменной $ZPOS. Эта переменная возвращает позицию в файле если текущее устройство ввода-вывода является файлом операционной системы. Для MiniM это соответствует устройству типа |FILE|.

Нужно создать рутину с именем начинающимся на символы %ZFUNC. В примере используем имя %ZFUNCFILE, поясняющее что в этой рутине будут подпрограммы для устройства |FILE|.

В этой рутине нужно создать подпрограмму с именем метки в верхнем регистре ZPOS. В подпрограмме необходимо вычислить текущую позицию в текущем устройстве если это устройство типа |FILE| и вернуть полученное значение. В MiniM Database Server это выполняется функцией $v("dev",8).

Пример рутины %ZFUNCFILE:

%ZFUNCFILE ; emulate $ZPOS system variable
 q
ZPOS ; return current offset of file device
 q $v("dev",8)

После импорта рутины и её компиляции дополнительная переменная $ZPOS готова к использованию. Например:

  s dev="|FILE|zscript.vbm" 
  o dev:("rwt") 
  u dev 
  r line 
  s pos=$zpos 
  c dev

Здесь открывается устройство типа |FILE| в тектовом режиме, читается одна строка, после чего вычисляется значение текущей позиции в файле вызовом новой $Z переменной $zpos, и файл закрывается.

С использованием описанной техники MiniM Database Server позволяет создать произвольные $Z переменные, если программист знает способ как вычислить значение этой переменной на MUMPS либо используя встроенные функции $view, либо расширенные вызовы $zdll, либо иным способом.

Программист должен понимать, что переопределить встроенные $Z переменные и функции в MiniM Database Server нельзя.

Евгений Каратаев
support@minimdb.com


Copyright (C) 2017 Eugene Karataev
Emails: Info Tech Support