ILE C プロシージャー呼び出し例 2 のサンプル・コード

例 2 には、以下の 2 つのサンプル・コードがあります。

CPROC1 QCSRC
ILE COBOL プログラムにバインドされている ILE C プロシージャー。
VARG1 QCBLLESRC
バインド済み ILE C プロシージャーを呼び出す ILE COBOL プロシージャー。

CPROC1 QSRC のサンプル・コードは、図 72 に示されています。

図 72. CPROC1 QSRC のソース・コード
/* CPROC1 QCSRC --- ILE C Procedure */
#include <stdio.h>

int inner(va_list);

int CPROC1(int p0, ...)
{
    int rc;
    va_list args;
    va_start(args,p0);
    rc = inner(args);
    va_end(args);
    return rc;
}

int inner(va_list v) {
    int p1,p2,p3=0;
    int p4,p5,p6=0;
    int p7,p8,p9=0;
    p1 = va_arg(v,int);
    p2 = va_arg(v,int);
    p3 = va_arg(v,int);
    p4 = va_arg(v,int);
    p5 = va_arg(v,int);
    p6 = va_arg(v,int);
    p7 = va_arg(v,int);
    p8 = va_arg(v,int);
    p9 = va_arg(v,int);
    printf("In inner with p1=%d p2=%d p3=%d&yen;n",
                             p1,   p2,   p3);
    printf("In inner with p4=%d p5=%d p6=%d&yen;n",
                             p4,   p5,   p6);
    printf("In inner with p7=%d p8=%d p9=%d&yen;n",
                             p7,   p8,   p9);
    return(p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9);
}

VARG1 QCBLLESRC のサンプル・コードは、図 73 に示されています。

図 73. VARG1 QCBLLESRC のソース・コード
      *********************************************************************
      * cbl1 qcbllesrc
      *
      * Description:
      *
      *   COBOL source with ILE C procedure call.
      *
      *********************************************************************
             IDENTIFICATION DIVISION.

       PROGRAM-ID.     VARG1.

      *** This program demonstrates how to call a C procedure
      *** using variable-length argument list.

       AUTHOR.
       INSTALLATION.   IBM Toronto Lab.
       DATE-WRITTEN.
       DATE-COMPILED.

       ENVIRONMENT DIVISION.

       CONFIGURATION SECTION.

       SOURCE-COMPUTER. IBM-ISERIES.
       OBJECT-COMPUTER. IBM-ISERIES.
         SPECIAL-NAMES. LINKAGE PROCEDURE FOR "CPROC1"
                                USING ALL DESCRIBED.

       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.

       01 PARM0                   PIC S9(9) BINARY VALUE 0.
       01 PARM1                   PIC S9(9) BINARY VALUE 1.
       01 PARM2                   PIC S9(9) BINARY VALUE 2.
       01 PARM3                   PIC S9(9) BINARY VALUE 3.
       01 PARM4                   PIC S9(9) BINARY VALUE 4.
       01 PARM5                   PIC S9(9) BINARY VALUE 5.
       01 PARM6                   PIC S9(9) BINARY VALUE 6.
       01 PARM7                   PIC S9(9) BINARY VALUE 7.
       01 PARM8                   PIC S9(9) BINARY VALUE 8.
       01 PARM9                   PIC S9(9) BINARY VALUE 9.
       01 RC1                     PIC S9(9) BINARY VALUE 0.

       PROCEDURE DIVISION.

       MAIN.

             CALL PROCEDURE "CPROC1" USING BY VALUE
                                       PARM0
                                       PARM1
                                       PARM2
                                       PARM3
                                       PARM4
                                       PARM5
                                       PARM6
                                       PARM7
                                       PARM8
                                       PARM9
                  RETURNING INTO RC1.
             GOBACK.