ILE COBOL Programmer's Guide

Sample Code for ILE C Procedure Call Example 2

Example 2 has two code samples:

CPROC1 QCSRC
An ILE C procedure that is bound to the ILE COBOL program.

VARG1 QCBLLESRC
An ILE COBOL procedure that calls the bound ILE C procedure.

The sample code for CPROC1 QSRC is shown in Figure 72.

Figure 72. Source code for 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\n",
p1, p2, p3);
printf("In inner with p4=%d p5=%d p6=%d\n",
p4, p5, p6);
printf("In inner with p7=%d p8=%d p9=%d\n",
p7, p8, p9);
return(p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9);
}

The sample code for VARG1 QCBLLESRC is shown in Figure 73.

Figure 73. Source code for 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.


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]