4

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

/* REXXA */
say 'hello'

run_test:
say 'test'

...

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

我怎样才能修改 REXXB 只说“测试”?

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

编辑2:显然没有......有人有更好的想法吗? 未找到 RxFuncAdd 例程

编辑3:我一定没有正确解释我的要求,对此感到抱歉-根据NealB的回复下的评论,我本质上想要类似于在“数学”类中调用“罪”函数的东西。我写的代码是上面例子中的REXXB,我想尽量少改动REXXA。

4

3 回答 3

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 Reference External functions and subroutines, and function packages, z/OS V11 flavor描述了如何做到这一点。

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

于 2012-01-10T16:42:59.263 回答
2

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

雷克萨:

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

run_test:
say 'test'
return

雷克萨斯:

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

在 TSO 或 Windows 命令行提示符下:键入REXXA将同时打印hellotest。打字REXXB 只会打印test

我必须承认我觉得这个要求有点奇怪......

于 2012-01-09T17:37:48.673 回答
1

您也许可以使用PARSE SOURCE来确定您是被独立调用还是被另一个 Rexx exec 调用。我还没有这样做,但文档似乎表明它会起作用。

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

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

于 2012-01-09T12:46:08.960 回答