在外部Rexx脚本中调用特定函数

时间:2012-01-09 05:11:39

标签: mainframe rexx

我有一个独立运行的Rexx脚本,我希望使用另一个Rexx脚本来调用其中的特定功能。我知道我可以用call调用整个外部Rexx文件和内部Rexx函数,但是我能在外部脚本中调用单个函数吗?以下示例说明了我想要做的事情:

/* REXXA */
say 'hello'

run_test:
say 'test'

...

/* REXXB */
call 'REXXA' /* will say both 'hello' and 'test' */

如何修改REXXB以仅说'test'?

编辑:进一步研究表明我可能正在寻找RxFuncAdd - 任何人都可以确认这是否适用于大型机Rexx脚本?涉及它的大多数引用都与DLL库有关......

编辑2:显然不是......有人有更好的想法吗? RxFuncAdd routine not found

编辑3:我一定不能正确解释我的要求,抱歉 - 根据NealB的回应中的评论,我基本上想要类似于在'数学'课程中调用'罪'功能。我在上面的示例中编写的代码是REXXB,我想尽可能少地更改REXXA。

3 个答案:

答案 0 :(得分:6)

直接无法在另一个程序中处理内部标签。

我的第一个直觉反应是你必须稍微修改REXXA以添加带有功能代码的包装函数,例如

/* REXX A */

arg a1 a2 a3 a4 a5 (etc.)
select
when a1 = 'SIN'
  call sin a2 a3 ....
when a1 = 'COS'
  call cos a2 a3 ....
end
exit rc

sin:
  return some equation involving a2 that I last saw about 33 years ago

cos:
  return some equation involving a2 that I last saw about 33 years ago

/* REXX B */
call 'REXXA' 'sin 85' 

但是,TSO下的REXX支持外部函数和子程序,可以用多种语言编写,包括REXX。 TSO / E REXX参考External functions and subroutines, and function packages, z/OS V11 flavor描述了如何执行此操作。

文档中有一条关于可选编译REXX的说明。如果您没有它,您可以找到获得许可的人,可以将其编译为与ALTLIB一起使用(无需许可证)。

答案 1 :(得分:2)

cschneid有正确的想法...... 以下在TSO(z / os)和Windows ooRexx下工作:

REXXA:

/* REXXA */
parse source . as_a .
if as_a = 'COMMAND' then
   say 'hello'

run_test:
say 'test'
return

REXXB:

/* REXXB */
call 'REXXA' /* will say 'test' */
return

在TSO或Windows Comand Line提示符下:键入REXXA将同时打印hellotest。输入REXXB 将仅打印test

我必须承认我发现这个要求有点奇怪......

答案 2 :(得分:1)

您或许可以使用PARSE SOURCE来确定您是独立调用还是由其他Rexx执行。我没有这样做,但文档似乎表明它可以正常工作。

关于你以后的编辑:啊,你想在Rexx中编写一个DLL的道德等价物,多个入口点都不是主要的。我不相信只有在System z上使用Rexx才能做到这一点。

我想到的唯一技术是拥有一个主入口点,您可以将要执行的实际函数的名称及其参数传递给该入口点。然后主入口点将调用指定的函数并返回。 Kludgy,对不起。