Hi Steve,
I am having a problem with the contination to the next line on the exec when issuing a TSS or TSO command. What we do is issue TSS or TSO commands from a PDS member using $RUN and then we trap the output. The PDS member is up to 255 characters long for each line, but some commands are continued to the next line in the member.
The error we are getting is:
Command ===> TSS CRE(TESTacid) NAME('Test acid definition') TYPE(USER) -
TSS0242E UNKNOWN KEYWORD - -
TSS0301I TSS FUNCTION FAILED, RETURN CODE = 4
Error occured on this command ==> TSS CRE(TESTacid) NAME('Test acid definition'
) TYPE(USER) -
Return Code = 4
---------------------------------------------------------
Command input:
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 TSS CRE(TESTacid) NAME('Test acid definition') TYPE(USER) -
000002 dept(scodept) pass(afge7lmn,0)
****** **************************** Bottom of Data ****************************
-------------------------------------------------------
/* REXX ($RUN) */
/* DESCRIPTION: EDIT AND EXECUTE ALL TSO & TSS COMMANDS */
/* IN PDS MEMBER */
/* USES REXX $RUNCMD AS SUB ROUTINE */
/* THANKS TO JOHN COFFEY FOR HELP WITH OUTTRAP */
/* 2009/12/22 AUTHOR: JIM SMITH - OFFICE OF THE STATE CONTROLLER */
/* BOISE, IDAHO */
/* TRACE ALL */
IF SYSVAR(SYSENV) = "BACK"
THEN DO
SAY "* ----------------------------------------- *"
SAY "* $RUN ONLY EXECUTES UNDER ISPF/TSO *"
SAY "* EDIT OR VIEW *"
SAY "* ----------------------------------------- *"
EXIT 12
END
ADDRESS ISREDIT
"MACRO"
SIGNAL ON FAILURE
SIGNAL ON SYNTAX
/* SIGNAL ON ERROR */
CALL MAIN_ROUTINE
RETURN
/*-------------------------------------------------------------------*/
/*- HANDLE ANY PROBLEMS ENCOUNTERED -*/
/*-------------------------------------------------------------------*/
FAILURE: SAY "FAILURE OCCURED ON LINE" SIGL; CALL CLEANUP;
SYNTAX: SAY "SYNTAX ERROR ON LINE" SIGL; CALL CLEANUP;
/* ERROR: SAY "COMMAND FAILED " SIGL; CALL CLEANUP; */
/*--CLEANUP ROUTINE ------------------*/
CLEANUP:
ADDRESS ISREDIT
"MACRO"
"LINE_BEFORE .ZFIRST = NOTELINE "" " ,
"================================================================="""
"LINE_BEFORE .ZFIRST = NOTELINE "" " ,
"$RUN HAS FAILED"""
"LINE_BEFORE .ZFIRST = NOTELINE "" " ,
"ONE COMMAND IN THIS PDS MEMBER FAILED"""
"LINE_BEFORE .ZFIRST = NOTELINE "" " ,
"PLEASE CHECK FOR VALID TSO/TSS COMMANDS"""
"LINE_BEFORE .ZFIRST = NOTELINE "" " ,
"================================================================"""
"LOC 0 "
ADDRESS "ISPEXEC" " SETMSG MSG(ISRZ000)"
EXIT 12
/*--MAIN ROUTINE ---------------------*/
MAIN_ROUTINE:
ADDRESS ISPEXEC "CONTROL ERRORS RETURN"
ADDRESS ISREDIT
"EX X'5C' 1 1 ALL" /* EXCLUDE ALL '*' IN COL 1 */
"DEL X ALL"
"RESET" /* RESET ALL */
"SAVE"
RETCDE = RC
IF RETCDE > 19
THEN DO
SAY "* ----------------------------------------- *"
SAY "* $RUN ONLY EXECUTES UNDER ISPF/TSO *"
SAY "* EDIT OR VIEW *"
SAY "* ----------------------------------------- *"
EXIT 12
END
"(TOP) = LINENUM .ZFIRST" /* SAVE FIRST ROW LINE NUMBER */
"(BOT) = LINENUM .ZLAST" /* SAVE LAST ROW LINE NUMBER */
IF BOT > 50
THEN SAY "PLEASE WAIT"
ADDRESS TSO
/* ALLOCATE TEMP FILE FOR VIEWING OUTPUT */
DDNM = 'DD'||RANDOM(1,99999) /* CHOOSE RANDOM DDNAME */
JUNK = MSG(OFF)
"ALLOC FILE("||DDNM||") UNIT(VIO) NEW TRACKS SPACE(5,5) DELETE",
" REUSE LRECL(140) RECFM(F B) BLKSIZE(8960)"
JUNK = MSG(ON)
/* ISSUE TSO COMMAND(S) AND TRAP OUTPUT */
JUNK=OUTTRAP('LINE.')
'$RUNCMD'
JUNK=OUTTRAP('OFF')
/* VIEW OUTPUT OF COMMANDS */
"EXECIO" LINE.0 "DISKW" DDNM "(STEM LINE. FINIS"
ADDRESS ISPEXEC "LMINIT DATAID(TEMP) DDNAME("||DDNM||")"
ADDRESS ISPEXEC "VIEW DATAID("||TEMP")"
ADDRESS ISPEXEC "LMFREE DATAID("||TEMP")"
/* DISPLAY LINES OF OUTPUT COUNT */
ADDRESS ISREDIT
"MACRO"
"LINE_BEFORE .ZFIRST = NOTELINE "" " ,
"================================================================="""
"LINE_BEFORE .ZFIRST = NOTELINE "" " ,
"$RUN HAS COMPLETED"""
"LINE_BEFORE .ZFIRST = NOTELINE "" " ,
"COMMANDS EXECUTED COUNT IN UPPER RIGHT HAND CORNER """
"LINE_BEFORE .ZFIRST = NOTELINE "" " ,
"PRESS PF1 FOR LONG MESAGE; PRESS PF3 OR QQ TO QUIT """
"LINE_BEFORE .ZFIRST = NOTELINE "" " ,
"================================================================"""
"LOC 0 "
ADDRESS "ISPEXEC" " SETMSG MSG(ISRZ000)"
CMDCNT = BOT - TOP + 1
ZERRSM = CMDCNT '= CMDS EX'
ZERRLM = CMDCNT "= COMMANDS EXECUTED"
ZERRALRM="NO"
ZERRHM="*"
ADDRESS 'ISPEXEC' 'SETMSG MSG(ISRZ002)'
/* FREE ALLOCATION OF TEMP FILE */
ADDRESS "ISPEXEC" "FREE FI("||DDNM||")"
RETURN
-----------------------------------------------
$RUNCMD is another REXX exec that is called from $RUN