z/OS MVS Programming: Callable Services for High-Level Languages
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


PL/I example

z/OS MVS Programming: Callable Services for High-Level Languages
SA23-1377-02

**********************************************************************
*                                                                    *
*     PLI example                                                    *
*                                                                    *
**********************************************************************
 BPGPLI: PROCEDURE OPTIONS(MAIN);                                       00010023
                                                                        00020002
  %INCLUDE SYSLIB(CSRBPPLI);                                            00020122
                                                                        00020222
     /* INITs */                                                        00021013
 DCL M INIT(512) FIXED BIN(31);                                         00022035
 DCL N INIT(512) FIXED BIN(31);                                         00023035
 DCL P INIT(512) FIXED BIN(31);                                         00024035
                                                                        00025013
     /* Arrays */                                                       00026013
 DCL A (M,N) BIN FIXED(31);           /* First array                 */ 00029113
 DCL B (N,P) BIN FIXED(31);           /* Second array                */ 00029213
 DCL C (M,P) BIN FIXED(31);           /* Product of first and second */ 00029313
 DCL KELEMENT_SIZE INIT(4) FIXED BIN(31); /* Size of an element of an   00029416
                                         array. This value is tied      00029513
                                         directly to the data type of   00029613
                                         the three arrays (ie. FIXED(31)00029713
                                         is 4 bytes                  */ 00029813
                                                                        00029913
     /* Indices */                                                      00030013
 DCL I FIXED BIN(31),                                                   00031013
     J FIXED BIN(31),                                                   00031113
     K FIXED BIN(31);                                                   00031213
                                                                        00032013
     /* Others */                                                       00037013
 DCL RC FIXED BIN(31);                                                  00039013
 DCL RSN FIXED BIN(31);                                                 00039113
                                                                        00390108
                                                                        00391808
     /* Initialize the first two arrays such that each element          00411013
        equals the sum of the indices for that element (eg.             00412013
        A(4,10) = 14 */                                                 00413013
                                                                        00414013
 CALL CSRIRP (A(1,1), M*N*KELEMENT_SIZE, CSR_FORWARD,                   00415013
         KELEMENT_SIZE*N,                                               00416013
         0,                                                             00417013
         20,                                                            00418013
         RC,                                                            00419013
         RSN);                                                          00419113
 CALL CSRIRP (B(1,1), N*P*KELEMENT_SIZE, CSR_FORWARD,                   00419913
         KELEMENT_SIZE*P,                                               00420013
         0,                                                             00420113
         20,                                                            00420213
         RC,                                                            00420313
         RSN);                                                          00420413
 DO I = 1 TO M;                                                         00421213
   DO J = 1 TO N;                                                       00421313
     A(I,J) = I + J;                                                    00421413
   END;                                                                 00421513
 END;                                                                   00421613
                                                                        00421713
 DO I = 1 TO N;                                                         00421813
   DO J = 1 TO P;                                                       00421913
     B(I,J) = I + J;                                                    00422013
   END;                                                                 00422113
 END;                                                                   00422213
 CALL CSRRRP (A(1,1), M*N*KELEMENT_SIZE,                                00422313
         RC,                                                            00422513
         RSN);                                                          00422613
 CALL CSRRRP (B(1,1), N*P*KELEMENT_SIZE,                                00423413
         RC,                                                            00423613
         RSN);                                                          00423713
                                                                        00424513
     /* Multiply the two arrays together */                             00424613
                                                                        00424713
 CALL CSRIRP (A(1,1), M*N*KELEMENT_SIZE, CSR_FORWARD,                   00424813
         KELEMENT_SIZE*N,                                               00424913
         0,                                                             00425013
         20,                                                            00425133
         RC,                                                            00425213
         RSN);                                                          00425313
 CALL CSRIRP (B(1,1), N*P*KELEMENT_SIZE, CSR_FORWARD,                   00426113
         KELEMENT_SIZE,                                                 00426213
         (P-1)*KELEMENT_SIZE,                                           00426313
         50,                                                            00426413
         RC,                                                            00426513
         RSN);                                                          00426613
 DO I = 1 TO M;                                                         00427413
   DO J = 1 TO P;                                                       00427513
     C(I,J) = 0;                                                        00427613
     DO K = 1 TO N;                                                     00427713
       C(I,J) = C(I,J) + A(I,K) * B(K,J);                               00427813
     END;                                                               00427913
   END;                                                                 00428013
 END;                                                                   00428113
                                                                        00428213
 CALL CSRRRP (A(1,1), M*N*KELEMENT_SIZE,                                00428313
         RC,                                                            00428513
         RSN);                                                          00428613
 CALL CSRRRP (B(1,1), N*P*KELEMENT_SIZE,                                00429413
         RC,                                                            00429613
         RSN);                                                          00429713
                                                                        00430513
 END BPGPLI;                                                            01080024
***********************************************************************
*                                                                     *
*                                                                     *
*      JCL TO COMPILE AND LINKEDIT.                                   *
*                                                                     *
*                                                                     *
*                                                                     *
***********************************************************************
//PLIJOB JOB                                                            00010007
//*                                                                     00041001
//*  PL/I Compile and Linkedit                                          00042001
//*                                                                     00043001
//*  Change all CRTPLNx to CRTPLNy                                      00044001
//*                                                                     00045001
//GO EXEC PLIXCL,PARM.PLI='MACRO'                                       00050000
//PLI.SYSLIB DD DSN=REFPAT.DECLARE.SET,DISP=SHR
//PLI.SYSIN DD DSN=REFPAT.SAMPLE.PROG(PLI),DISP=SHR                     00060008
//LKED.SYSLMOD DD DSN=REFPAT.USER.LOAD,UNIT=3380,VOL=SER=RSMPAK,        00070000
// DISP=SHR                                                             00080000
//LKED.SYSIN DD *                                                       00090000
  INCLUDE  IN(CSRIRP,CSRRRP)                                            00100001
  NAME BPGPLI(R)                                                        00110008
/*                                                                      00120000
//*                                                                     00121001
//*     SYS1.CSSLIB is source of CSR stubs                              00130001
//*                                                                     00190000
//LKED.IN     DD DSN=SYS1.CSSLIB,DISP=SHR                               00200000
//PLIJOB JOB                                                            00010007
***********************************************************************
*                                                                     *
*                                                                     *
*      JCL TO EXECUTE.                                                *
*                                                                     *
*                                                                     *
*                                                                     *
***********************************************************************
//PLIRUN   JOB MSGLEVEL=(1,1),TIME=1440                                 00010000
//*                                                                     00011001
//*   EXECUTE A PL/I TESTCASE - CHANGE NAME ON NEXT LINE                00012001
//*                                                                     00013001
//GO       EXEC PGM=CRTPLN3                                             00020000
//STEPLIB  DD  DSN=REFPAT.USER.LOAD,DISP=SHR,                           00030000
//     UNIT=3380,VOL=SER=VM2TSO                                         00040000
//         DD DSN=CEE.SCEERUN,DISP=SHR                                  0
//SYSABEND DD SYSOUT=*                                                  00070000
//SYSLOUT  DD  SYSOUT=*                                                 00080000
//SYSPRINT DD  SYSOUT=*                                                 00090000

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014