MFJZS099

DYNamic ALLOCation (DYNALLOC - SVC99) 機能を使用できるようになります。
注: SVC 99 マシン命令を発行する z/OS アセンブラー ルーチンをとおして SVC 99 を呼び出す場合、次の情報は該当しません。

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

パラメータの説明:

IDAS99RB.CPY によってマップされた SVC 99 要求ブロック。
IDAS99TU.CPY を使用して、テキスト ユニット (Text Units; TU) の構成を支援することもできます。
Caller-id
このパラメーター (caller-id) を使用することをお勧めしますが、INT または GNT としてコンパイルされる COBOL プログラムでは省略できます。非 COBOL プログラムの場合、このパラメーターは必須で、アドレス形式と文字データの CHARSET を解釈するために SVC 99 ハンドラーによって使用されます。バイナリ データは、常に z/OS (ビッグエンディアン) 形式でなければなりません。
retcode

retcode の戻り値は、汎用レジスター 15 に配置されている SVC 99 戻りコード値です。他のエラーおよび情報コードは、SVC99RB に格納されます。

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

呼び出しプログラムを AMODE でコンパイルした場合は、変更は不要です。null アドレスを使用して最終アドレスを示すことをお勧めします。つまり、TU 最終アドレスを x’80000000’ (上記の例内の (1) を参照) に設定します。

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

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

次のプログラムは 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