Micro Focus SVC 99 API である MFJZS099 は、次のように呼び出します (ここではスケルトン コードのみ示します)。
copy idas99rb replacing ==()== by ==s99rb==. copy idas99tu replacing ==()== by ==s99tu==. 1 caller-id. 3 caller-id-char pic x(04) value 'S099'. 3 caller-id-ptr pointer. *> ptr to s99rb 3 caller-id-bin pic 9(8) comp value 1. 3 caller-id-float comp-1 value 1. 1. 3 tu-ptr-list. 5 tu-ptr-ddn pointer. 5 tu-ptr-dsn pointer. 5 etc pointer. 3 pic x(4) value --either—(1) x’80000000’ --or-- (2) s99rb-last-ptr-val-x4-val. move low-values to s99rb --either— (3) move s99rb-len-host to s99rb-len --or-- (4) move s99rb-len-mf-ext to s99rb-len move s99rb-last-ptr-val-x4-val to s99rb-last-ptr-val-x4 --and-- set s99rb-s99tu-array-ptr to address tu-ptr-list set caller-id-ptr to address s99rb call 'MFJZS099' using s99rb caller-id returning s99rb-retc if s99rb-retc = 0 *> SVC99 ok else *> SVC99 not ok – check for errors end-if
パラメータの説明:
retcode の戻り値は、汎用レジスター 15 に配置されている SVC 99 戻りコード値です。他のエラーおよび情報コードは、SVC99RB に格納されます。
SVC99 は、TU (テキスト ユニット) アドレスの上位ビットを使用して、それを TU アドレス配列内の最後の TU アドレスとして解釈します。
呼び出しプログラムを AMODE でコンパイルした場合は、変更は不要です。null アドレスを使用して最終アドレスを示すことをお勧めします。つまり、TU 最終アドレスを x’80000000’ (上記の例内の (1) を参照) に設定します。
呼び出しプログラムを NOAMODE でコンパイルすると、テキスト ユニット (Text Unit; TU) アドレスの上位ビットは TU ポインター配列内の最終アドレスを示すものとしては解釈されません。この場合は、次のいずれか 1 つのオプションがあります。
次のプログラムは NOAMODE が有効の状態で実行されています。
copy idas99rb replacing ==()== by ==s99rb==. copy idas99tu replacing ==()== by ==s99tu==. 1 caller-id. 3 caller-id-char pic x(04) value 'S099'. 3 caller-id-ptr pointer. *> ptr to s99rb 3 caller-id-bin pic 9(8) comp value 1. 3 caller-id-float comp-1 value 1. 1 . 3 tu-ptr-list. 5 tu-ptr-ddn pointer. 5 tu-ptr-dsn pointer. 5 etc pointer. 4 pic x(4) value s99rb-last-ptr-val-x4-val. move low-values to s99rb move s99rb-len-mf-ext to s99rb-len move s99rb-last-ptr-val-x4-val to s99rb-last-ptr-val-x4 set s99rb-s99tu-array-ptr to address tu-ptr-list set caller-id-ptr to address s99rb call 'MFJZS099' using s99rb caller-id returning s99rb-retc if s99rb-retc = 0 *> SVC99 ok else *> SVC99 not ok – check for errors end-if
次のプログラムは AMODE が有効の状態で実行されています。
copy idas99rb replacing ==()== by ==s99rb==. copy idas99tu replacing ==()== by ==s99tu==. 1 caller-id. 3 caller-id-char pic x(04) value 'S099'. 3 caller-id-ptr pointer. *> ptr to s99rb 3 caller-id-bin pic 9(8) comp value 1. 3 caller-id-float comp-1 value 1. 1 . 3 tu-ptr-list. 5 tu-ptr-ddn pointer. 5 tu-ptr-dsn pointer. 5 etc pointer. 5 pic x(4) value x’80000000’. move low-values to s99rb move s99rb-len-host to s99rb-len set s99rb-s99tu-array-ptr to address tu-ptr-list set caller-id-ptr to address s99rb call 'MFJZS099' using s99rb caller-id returning s99rb-retc if s99rb-retc = 0 *> SVC99 ok else *> SVC99 not ok – check for errors end-if