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ライブラリに関するものです...

EDIT 2: どうやらそうではありません... 誰かがより良いアイデアを思いつきましたか? RxFuncAdd ルーチンが見つかりません

編集 3: 要件を適切に説明していないはずです。申し訳ありませんが、NealB の応答の下のコメントによると、基本的に「数学」クラス内で「sin」関数を呼び出すことに似たものが必要です。私が書いているコードは上記の例では 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 フレーバーでは、これを行う方法について説明しています。

オプションで 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:

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

TSO または Windows コマンド ライン プロンプトから: 入力すると、とREXXAの両方が出力されます。入力 すると、印刷のみが行われます。hellotestREXXBtest

この要件が少し奇妙だと思うことを認めなければなりません...

于 2012-01-09T17:37:48.673 に答える
1

PARSE SOURCEを使用して、スタンドアロンまたは別の Rexx exec によって呼び出されているかどうかを判断できる場合があります。私はこれを行っていませんが、ドキュメントはそれが機能することを示しているようです。

後の編集について: ああ、Rexx で DLL に相当する道徳的なものを書きたいと思っています。System z で Rexx を使用するだけでそれを行う方法があるとは思えません。

頭に浮かぶ唯一の手法は、実行する実際の関数の名前とその引数を渡すプライマリ エントリ ポイントを用意することです。メイン エントリ ポイントは、指定された関数を呼び出して戻ります。クラジー、ごめんなさい。

于 2012-01-09T12:46:08.960 に答える