2012-01-09 75 views
4

我有一個獨立運行的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。

回答

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的人(無需許可證)。

+0

謝謝你,那正是我期待的。現有的rexx腳本使用與您的代碼類似的概念(它用於解釋輸入到ISPF面板的命令),所以我會看看是否可以使用它。它已經是EXEC PDS的成員,所以其他解決方案都不適合。 – 2012-01-11 03:02:31

+0

我一直想嘗試爲REXX構建一個外部函數集,但我從來沒有機會。有一天,希望... – zarchasmpgmr 2012-01-13 23:09:29

1

您可能可以使用PARSE SOURCE來確定您是單獨調用還是由其他Rexx exec調用。我沒有這樣做,但文檔似乎表明它會工作。

關於你以後的編輯:啊,你想寫一個在Rexx中的DLL的道德等價物,多個入口點都不是主要的。我不認爲有一種方法可以在System z上使用Rexx。

想到的唯一技巧就是擁有一個主要入口點,您將要執行的實際函數的名稱及其參數傳遞給它。主入口點然後將調用指定的函數並返回。 Kludgy,對不起。

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命令行提示符處:鍵入REXXA將同時打印hellotest。打字REXXB 只會打印test

我必須承認,我覺得這個要求有點怪......

+0

感謝您的理解,我可能會過分複雜一點 - 我想盡可能少地改變REXXA,例如,在VB.NET中,如果我有一個名爲'math'的類和一個名爲'sin'的函數,我可以通過math.sin()從不同的代碼調用'sin'...如果我有一堆現有的函數在rexx腳本(即REXXA)中,我可以只從REXXB中調用其中的一個,而不修改REXXA?關鍵的要求是,'圖書館'(即REXXA或假設的'數學'類)基本保持不變。 – 2012-01-09 22:24:26