Cache' позволяет определить пользовательские z-функции и z-переменные таким образом, что они будут доступны из любой области. К переменным относятся объекты, синтаксически употребимые в контексте переменных, например:
При этом в <varname> входят только символы латинских букв, цифры и специальные символы таким образом, что лексема <varname> может быть подставлена вместо локальной переменной. Для того, чтобы создать пользовательскую системную переменную, в Cache' зарезервированы рутины в области %SYS c %ZLANGV00.INT до %ZLANGV08.INT.
Для создания переменной следует выбрать для нее имя. Имя должно начинаться с буквы z. При вызове системной пользовательской переменной перед ее именем следует ставить символ доллара $. Например, $zvar. В одной из рутин %ZLANGV0*.INT создаем метку с именем, образованным из придуманного нами имени путем перевода его в верхний регистр. В нашем случае это будет ZVAR.
Далее следует определиться, будет ли эта переменная использоваться в левой части оператора приравнивания, например, s $zvar=123. Если да, то в тексте рутины следует добавить аргумент к метке ZVAR. В случае если переменную планируется использовать в контексте чтения, например, в правой части приравнивания, то в теле обработчика следует проверить контекст вызова, обратившись к системной переменной $Q. Если функция вызвана в контексте возврата, то следует вернуть значение, иначе - ничего не возвращать.
Заготовка кода, реализующего системную пользовательскую переменную, может иметь вид:
На этой заготовке можно отладить свою пользовательскую системную переменную. Вызывать созданную таким образом переменную можно нечувствительно к регистру, например
Будут обращениями к одной и той же системной пользовательской z-переменной.
Для создания пользовательской z - функции следует добавить соответствующий ей обработчик в одну из рутин %ZLANGF00.INT - %ZLANGF08.INT. Имя пользовательской z-функции должно начинаться на z. Следует определиться с количеством аргументов этой функции и создать обработчик. Имя метки в коде обработчика должно быть в верхнем регистре.
Например
На этой заготовке можно отладить свою пользовательскую системную функцию. К функции, так же как и к пользовательской системной переменной, можно обращаться нечувствительной к регистру, имя в вызывающем коде должно начинаться на символ доллара $.
Определенные описанным выше способом пользовательские z-функции могут быть вызваны в любой области, поэтому в их обработчиках не следует полагать, что их работа будет происходить только в определенной области. Перечисленные выше возможности Cache по расширению системных переменных и функций, равно как и описанных ранее пользовательских команд, позволяют с некоторым комфортом обустроить рабочее место как администратора, так и сопровождающего прикладного программиста. Как это может помочь системному программисту (некий каламбур) - пока не вижу способа.
Дело в том, что если в некой системе начинают использоваться определяемые пользователем z-функции, переменные или команды, то для их перенесения с компьютера разработки на компьютер эксплуатации следует также перенести и соответствующие рутины %ZLANG*. При переносе рутин естественным образом возникает замещение имевшегося кода. Видимо, для системного программиста использование в разработках определяемых пользователем z-функций, переменных и команд является слишком уж непозволительной роскошью в силу ее трудной переносимости. Вот если бы можно было в именах рутин %ZLANG* использовать читабельные суффиксы, тогда, видимо, использование определяемых переменных стало бы доступно и системным программистам.
Но даже в такой форме предоставляемые Cache' возможности уже смотрятся практично.
s <varname>=<varvalue> w <varname>
При этом в <varname> входят только символы латинских букв, цифры и специальные символы таким образом, что лексема <varname> может быть подставлена вместо локальной переменной. Для того, чтобы создать пользовательскую системную переменную, в Cache' зарезервированы рутины в области %SYS c %ZLANGV00.INT до %ZLANGV08.INT.
Для создания переменной следует выбрать для нее имя. Имя должно начинаться с буквы z. При вызове системной пользовательской переменной перед ее именем следует ставить символ доллара $. Например, $zvar. В одной из рутин %ZLANGV0*.INT создаем метку с именем, образованным из придуманного нами имени путем перевода его в верхний регистр. В нашем случае это будет ZVAR.
Далее следует определиться, будет ли эта переменная использоваться в левой части оператора приравнивания, например, s $zvar=123. Если да, то в тексте рутины следует добавить аргумент к метке ZVAR. В случае если переменную планируется использовать в контексте чтения, например, в правой части приравнивания, то в теле обработчика следует проверить контекст вызова, обратившись к системной переменной $Q. Если функция вызвана в контексте возврата, то следует вернуть значение, иначе - ничего не возвращать.
Заготовка кода, реализующего системную пользовательскую переменную, может иметь вид:
ZVAR(source) i $D(source) d . ; было присваивание переменной $ZVAR i $Q d . ; было чтение переменной $ZVAR q:$Q return q
На этой заготовке можно отладить свою пользовательскую системную переменную. Вызывать созданную таким образом переменную можно нечувствительно к регистру, например
s $ZVar=123 s $ZVAR=123 s $zvar=123
Будут обращениями к одной и той же системной пользовательской z-переменной.
Для создания пользовательской z - функции следует добавить соответствующий ей обработчик в одну из рутин %ZLANGF00.INT - %ZLANGF08.INT. Имя пользовательской z-функции должно начинаться на z. Следует определиться с количеством аргументов этой функции и создать обработчик. Имя метки в коде обработчика должно быть в верхнем регистре.
Например
ZFUNCTION(arg) i $D(arg) d . ; были переданы аргументы i $Q d . ; ожидается возврат q:$Q 123 q
На этой заготовке можно отладить свою пользовательскую системную функцию. К функции, так же как и к пользовательской системной переменной, можно обращаться нечувствительной к регистру, имя в вызывающем коде должно начинаться на символ доллара $.
Определенные описанным выше способом пользовательские z-функции могут быть вызваны в любой области, поэтому в их обработчиках не следует полагать, что их работа будет происходить только в определенной области. Перечисленные выше возможности Cache по расширению системных переменных и функций, равно как и описанных ранее пользовательских команд, позволяют с некоторым комфортом обустроить рабочее место как администратора, так и сопровождающего прикладного программиста. Как это может помочь системному программисту (некий каламбур) - пока не вижу способа.
Дело в том, что если в некой системе начинают использоваться определяемые пользователем z-функции, переменные или команды, то для их перенесения с компьютера разработки на компьютер эксплуатации следует также перенести и соответствующие рутины %ZLANG*. При переносе рутин естественным образом возникает замещение имевшегося кода. Видимо, для системного программиста использование в разработках определяемых пользователем z-функций, переменных и команд является слишком уж непозволительной роскошью в силу ее трудной переносимости. Вот если бы можно было в именах рутин %ZLANG* использовать читабельные суффиксы, тогда, видимо, использование определяемых переменных стало бы доступно и системным программистам.
Но даже в такой форме предоставляемые Cache' возможности уже смотрятся практично.
Комментариев нет:
Отправить комментарий