PL/I Program Using TSOLNK to Invoke a Program

Figure 1. PL/I Program Demonstrating the Use of TSOLNK to Invoke a Program
 /*******************************************************************/
 /*  THIS PL/I PROGRAM ISSUES THE IEBCOPY PROGRAM IN TSO/E AND THEN */
 /*  PRINTS OUT THE COMMAND BUFFER  AND THE RETURN, REASON AND      */
 /*  ABEND CODES RESULTING FROM THE EXECUTION OF THE TSO SERVICE    */
 /*  FACILITY.  TO USE THE EXAMPLE THE USER MUST ALLOCATE THE       */
 /*  FOLLOWING FILES:                                               */
 /*       ALLOC F(FILEOUT) DSN(*)                                   */
 /*       ALLOC F(SYSIN) DSN(YOUR.SYSIN)                            */
 /*       ALLOC F(SYSPRINT) DSN(*)                                  */
 /*       ALLOC F(INDD) DSN(YOUR.INPDS)                             */
 /*       ALLOC F(OUTDD) DSN(YOUR.OUTPDS)                           */
 /*  THE EXAMPLE REQUIRES THE FOLLOWING CARD IN YOUR.SYSIN FILE:    */
 /*       EXAMPLE    COPY  OUTDD=OUTDD,INDD=INDD                    */
 /*                                                                 */
 /*  THIS PROGRAM WILL RUN ON THE OS/VS PL/I COMPILER RELEASE 2 OR  */
 /*  HIGHER.                                                        */
 /*******************************************************************/
 TSOCALL:
   PROCEDURE OPTIONS(MAIN);
 DECLARE 1 PARM1,
           2 PARM11 FIXED BINARY (15,0), /* RESERVED                 */
           2 PARM13 BIT(8),              /* ABEND FLAG               */
                                         /* 0 -ABEND WITHOUT DUMP    */
                                         /* 1 -ABEND WITH DUMP       */
           2 PARM14 BIT(8);              /* FUNCTION CODE            */
 DECLARE PARM2 CHARACTER(8);             /* NAME OF FUNCTION         */
 DECLARE PARM3 FIXED BINARY(31,0);       /* LENGTH OF CMD OR PROG    */
 DECLARE PARM4 FIXED BINARY(31,0);       /* FUNCTION RETURN CODE     */
 DECLARE PARM5 FIXED BINARY(31,0);       /* TSF REASON CODE          */
 DECLARE PARM6 FIXED BINARY(31,0);       /* FUNCTION ABEND CODE      */
 DECLARE (FILEOUT) FILE;                 /* PL/I OUTPUT FILE         */
 DECLARE TSOLNK ENTRY(                   /*                          */
   1,                                    /* STRUCTURE OF 4 BYTES     */
     2 FIXED BINARY(15,0),               /* BYTE 1 RESERVED          */
     2 BIT(8),                           /* BYTE 3 ABEND FLAG        */
     2 BIT(8),                           /* BYTE 4 FUNCTION FLAG     */
   CHARACTER (*),                        /* NAME OF PROGRAM OR CMD  */
   FIXED BINARY(31,0),                   /* LENGTH OF CMD OR PROG    */
   FIXED BINARY(31,0),                   /* FUNCTION RETURN CODE     */
   FIXED BINARY(31,0),                   /* TSF REASON CODE          */
   FIXED BINARY(31,0)                    /* FUNCTION ABEND CODE      */
   )
   EXTERNAL OPTIONS(ASSEMBLER RETCODE INTER);
 DECLARE PLIRETV BUILTIN;
 /******************************************************************/
 /*  START OF EXECUTABLE CODE                                      */
 /******************************************************************/
 PARM13='00000001'B;                   /* DUMP YES OR NO           */
 PARM14='00000010'B;                   /* FUNCTION IS A PROGRAM    */
 PARM2 = 'IEBCOPY';                    /* FUNCTION NAME            */
 PARM3 = 7;                            /* LENGTH OF PROGRAM        */
 CALL TSOLNK(PARM1,PARM2,PARM3,PARM4,PARM5,PARM6);
                                      /* CALL TSO SERVICE FACILITY */
      PUT FILE (FILEOUT) EDIT (' THE TSOLNK RETURN CODE IS ',PLIRETV)
                              (A,F(3)); /* PRINT OUT RETURN CODE OF
                                         TSO SERVICE FACILITY */
      PUT FILE (FILEOUT) EDIT (' THE FUNCTION RETURN CODE IS ',PARM4)
                        (SKIP, A, F(3)); /* PRINT OUT RETURN CODE OF
                                            IEBCOPY PROGRAM         */
      PUT FILE (FILEOUT) EDIT ('      THE TSF REASON CODE IS ',PARM5)
                        (SKIP, A, F(3)); /* PRINT OUT TSF REASON CODE*/
      PUT FILE (FILEOUT) EDIT ('  THE FUNCTION ABEND CODE IS ',PARM6)
                        (SKIP, A, F(3)); /* PRINT OUT ABEND CODE
                                            FOR IEBCOPY */
  END TSOCALL;