Posts

Showing posts from April, 2015
FEATURES :  Ease to Use  Free Format  Convenient Built - in Functions  Debugging Capabilities  Interpreted Language  Extensive Parsing capabilities Components of REXX  Instructions  Built – in Functions  TSO/E  External Functions  Data Stack Functions What is a REXX Exec ?  Contains REXX language Instructions and  Commands   Starts with the comment line with the word       REXX     Example :   /*             REXX                         */  Say  ‘This is my First REXX program’  Ease to Use Ø Free Format Ø Convenient Built - in Functions Ø Debugging Capabilities Ø Interpreted Language Ø Extensive Parsing capabilities

Running EXEC explicitly & implicitly

Running EXEC explicitly From any ISPF comman d line        TSO EXEC ‘USERID.REXX.EXEC(TIMEGAME)’ From TSO shell        EXEC ‘USERID.REXX.EXEC(TIMEGAME)’ Running EXEC implicitly allocate the PDS that contains it to a system file (SYSPROC  or SYSEXEC) The exec can be run as any TSO command

REXX SETUP -- How to setup Rexx -- A Guide for Beginners

REXX SETUP   1)       TSO EX 'USERID.REXX.EXEC(HELLO)' EX---- directly running from the TSO panel 2)       EX 'USERID.REXX.EXEC(HELLO)' EX – directly running from the ready panel When you logon to ISPF, ISPF assigns a pre-defined set of DDNames to few PDS datasets. To view this set, you can enter the command TSO ISRDDN from the ISPF panel. DDNAME     DATA SET NAME SYSEXEC     PROD.CEXEC SYSPROC    USERID.CLIST There are two ways to do this: 1) If your system adminstrator allows, you can run a CLIST or REXX program when you logon to ISPF. This will usually appear as a message when you logon. Ask you system admin if you can do this, as this is the best way to do this. If it is a CLIST, add the following command in the CLIST, CONCATD FI(SYSEXEC) DA('USERID.REXX.EXEC') If it is a REXX, add the following command, "ALLOC FILE(SYSEXEC) DAT...

REXX PROGRAM TO DETERMINE IF A JOB IS ACTIVE

/* REXX */ /* REXX PROGRAM TO DETERMINE IF A JOB IS ACTIVE. */ /* PARAMETERS: JOB NAME */ /* JOB NUMBER */ /* USER */ /* RETURNS: "1" ACTIVE , "0" NOT ACTIVE */ /*********************************************************************/ PARSE ARG JOB_NAME USER JOB_NUMBER BUFFER = 0 'ADDREXBUF BUFFER(&BUFFER)' /* CREATE ACTIVE JOB LISTING. */ 'WRKACTJOB OUTPUT(*PRINT)' /* CREATE TEMPORARY WORK FILE TO STORE SPOOLED FILE OUTPUT  */ 'CHKOBJ QTEMP/ACTJOBLST *FILE' IF RC ¬= '0' THEN 'CRTPF QTEMP/ACTJOBLST RCDLEN(132)' /*COPY THE LAST SPOOLED FILE FROM WRKACTJOB TO THE TEMPORARY WORK FILE.*/ 'CPYSPLF FILE(SCMDH71) TOFILE(QTEMP/ACTJOBLST) SPLNBR(*LAST)' /*COPY THE WRKACTJOB OUTPUT FROM QTEMP TO THE REXX QUEUE.*/ 'CPYFTOREXQ FROMFILE(QTEMP/ACTJOBLST) MBR(ACTJOBLST)'  DO QUEUED()  PARSE PULL ACT_JOB_NAME ACT_USER ACT_JOB_NUMBER REST  /* IF ACTIVE JOB IS SAME AS ARGUMENT, THEN RETURN 1.*/  IF JOB...

CREATE MISSING GDG in JCL

ADDRESS ISREDIT                                                                 "MACRO"                                                                                                                                                         /*--------------------------------------------------------------------*/       /*---------------------   FIND JOB REGION  ---------------------------*/       /*---------------...

CHECK THE PDS using REXX

/*Rexx*/                                                                       DSN = 'XT2.SMS.AUS20682.SRC'                                                   CHECK_GDG:                                                                        /* CHECK IF GDG EXISTS */                                                      ADDRESS TSO               ...

FIND THE GDG USING REXX

/*REXX*/                                                                       DSN = 'XT2.SMS.AUS12345.CBL'                                                   CHECK_GDG:                                                                        /* CHECK IF GDG EXISTS */                                                      ADDRESS TSO               ...

DELETE and DEFINE AUTOMATION

/* Rexx */                                                                     /* trace all */                                                               /*                                                                                     Purpose        : To give proper override for del/def statements                                       ...