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

问题描述:

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

/* REXXA */ 
say 'hello' 

run_test: 
say 'test' 

...

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

我怎样才能修改REXXB说只有 '测试'?

编辑:进一步的研究表明我可能正在寻找RxFuncAdd - 任何人都可以确认,如果这与主机Rexx脚本工作?大多数涉及它的参考文献都是关于DLL库的......

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

编辑3:我必须没有适当解释我的要求,比较遗憾的是 - 按下NealB的回应评论,我基本上是想一个类似于调用“数学”类中的“罪”的功能。我写的代码是REXXB,上面的例子中,我想尽可能少地改变REXXA。

直接有没有办法在另一个程序来解决内部的标签。

我的第一个直觉反应是,你将不得不稍微修改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的人(无需许可证)。

+0

谢谢你,那正是我期待的。现有的rexx脚本使用与您的代码类似的概念(它用于解释输入到ISPF面板的命令),所以我会看看是否可以使用它。它已经是EXEC PDS的成员,所以其他解决方案都不适合。 – 2012-01-11 03:02:31

+0

我一直想尝试为REXX构建一个外部函数集,但我从来没有机会。有一天,希望... – zarchasmpgmr 2012-01-13 23:09:29

您可能可以使用PARSE SOURCE来确定您是单独调用还是由其他Rexx exec调用。我没有这样做,但文档似乎表明它会工作。

关于你以后的编辑:啊,你想写一个在Rexx中的DLL的道德等价物,多个入口点都不是主要的。我不认为有一种方法可以在System z上使用Rexx。

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

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命令行提示符处:键入REXXA将同时打印hellotest。打字REXXB 只会打印test

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

+0

感谢您的理解,我可能会过分复杂一点 - 我想尽可能少地改变REXXA,例如,在VB.NET中,如果我有一个名为'math'的类和一个名为'sin'的函数,我可以通过math.sin()从不同的代码调用'sin'...如果我有一堆现有的函数在rexx脚本(即REXXA)中,我可以只从REXXB中调用其中的一个,而不修改REXXA?关键的要求是,'图书馆'(即REXXA或假设的'数学'类)基本保持不变。 – 2012-01-09 22:24:26