プログラムとプロシージャーとの間でのポインターの受け渡し

CHAINLST プログラムは、最初の SALARY-REC レコード域のアドレスを取得する際に、 次のようにしてプログラム CHAINANC を呼び出します。

           CALL "CHAINANC" USING PTR-FIRST

PTR-FIRST は、呼び出し側プログラム (CHAINLST) の WORKING-STORAGE にポインター・データ項目として定義されています。

       WORKING-STORAGE SECTION.
       77  PTR-FIRST         POINTER  VALUE IS NULL.

CHAINANC に対する呼び出しから戻る時点で、PTR-FIRST にはチェーン・リスト中の最初のレコードのアドレスが入れられています。

PTR-FIRST は、最初は論理チェックとしてのヌル値に定義されています。 呼び出しエラーが起こり、かつ PTR-FIRST がチェーン中の最初のレコードのアドレス値を受け取ることがない場合、PTR-FIRST はヌル値のままになり、 プログラムのロジックによって、レコードの処理は行われなくなります。

NULL は、無効なアドレス値をポインター項目に代入するのに使用される形象定数です。 NULL は VALUE IS NULL 文節、SET ステートメント、およびポインターとの関係条件オペランドとして使用されます。

呼び出し側プログラムの LINKAGE SECTION には、チェーン・リスト中の最初のレコードに関する記述が入れられます。 また、CALL ステートメントの USING 句を使用して渡される部門コードに関する記述も含まれています。

       LINKAGE SECTION.
       01  SALARY-REC.
         05  PTR-NEXT-REC    POINTER.
         05  NAME            PIC X(20).
         05  DEPT            PIC 9(4).
         05  SALARY          PIC 9(6).
       01  DEPT-X            PIC 9(4).

レコード記述 SALARY-REC を PTR-FIRST 中のアドレスに基づくものにするには、次のように SET ステートメントを使用してください。

           CALL "CHAINANC" USING PTR-FIRST
           SET ADDRESS OF SALARY-REC TO PTR-FIRST