MFJZS099

MFJZS099 は、SVC 99 呼び出しを発行します。

構文:

call "MFJZS099" using s99rb caller-id returning retcode

パラメーター:

s99rb 下記参照 IDAS99RB.CPY によってマップされた SVC 99 要求ブロック。IDAS99TU.CPY を使用して、テキスト ユニット (Text Units; TU) の構成を支援することもできます。
caller-id 下記参照 このパラメーターを使用することをお奨めしますが、INT および GNT としてコンパイルされた COBOL プログラムの場合は必須ではありません。非 COBOL プログラムの場合、このパラメーターは必須であり、アドレスのフォーマットと文字データの CHARSET を解釈するために SVC 99 ハンドラーによって使用されます。バイナリ データは、常に z/OS (ビッグエンディアン) フォーマットでなければなりません。
retcode pic 9(8) comp 汎用レジスター 15 に配置されている SVC 99 戻りコード。他のエラーおよび情報コードは、SVC99RB に格納されます。

コメント:

SVC99 は、TU (テキスト ユニット) アドレスの上位ビットを使用して、それを TU アドレス配列内の最後の TU アドレスとして解釈します。

呼び出しプログラムを NOAMODE でコンパイルすると、TU アドレスの上位ビットは TU ポインター配列内の最終アドレスを示すものとしては解釈されません。この場合は、次の 2 つのオプションがあります。

  • 最後の TU アドレスが x'80000000' または x'00000080' のいずれかの値によって示されていることを確認します。これにより、ホストとのソース互換性が維持されます。これらの両方が稼働中のコンピューター上の正当なアドレスである可能性がある場合は、次のオプションが唯一の代替方法となります。
  • 任意の最終アドレス値を SVC99 要求ブロック (S99RB) の拡張部分で指定します。

呼び出しプログラムを AMODE でコンパイルした場合は、変更は不要です。null アドレスを使用して最終アドレスを示すことをお奨めします。たとえば、TU 最終アドレスを x'80000000' に設定します。

例:

NOAMODE を使用して実行されているプログラム:

copy idas99rb
        replacing ==()== by ==s99rb==.
    copy idas99tu
        replacing ==()== by ==s99tu==. 
    01 caller-id.
       03 caller-id-char               pic x(04) value 'S099'.
       03 caller-id-ptr                pointer.*> ptr to s99rb
       03 caller-id-bin                pic 9(8) comp value 1.
       03 caller-id-float              comp-1 value 1.
    01 .
       03 tu-ptr-list.
          05 tu-ptr-ddn                pointer.
          05 tu-ptr-dsn                pointer.
          05 etc                       pointer. 
          05	                       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 retcode
     if retcode = 0 
        *> SVC99 ok            
     else      
        *> SVC99 not ok – check for errors
     end-if
    

AMODE を使用して実行されているプログラム:

copy idas99rb
        replacing ==()== by ==s99rb==.
    copy idas99tu
        replacing ==()== by ==s99tu==. 
    01 caller-id.
       03 caller-id-char               pic x(04) value 'S099'.
       03 caller-id-ptr                pointer.*> ptr to s99rb
       03 caller-id-bin                pic 9(8) comp value 1.
       03 caller-id-float              comp-1 value 1.
    01 .
       03 tu-ptr-list.
          05 tu-ptr-ddn                pointer.
          05 tu-ptr-dsn                pointer.
          05 etc                       pointer. 
          05	                       pic x(4) value x'80000000' 
           
     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 retcode
     if retcode = 0 
        *> SVC99 ok            
     else      
        *> SVC99 not ok – check for errors
     end-if