To read an ISPF profile, REXX PROFREAD:
/*-------------------------------------------------------------------*/
/* THIS THING READS A PROFILE POOL AS A TABLE AND EXTRACTS/DISPLAYS */
/* ALL THE EXTENSION VARIABLES IN THAT POOL - I.E. ALL THE VARIABLES */
/* WHICH CAN BE 'VGET' FROM THE POOL - AND WRITES THEM TO A FILE. */
/* */
/* IT IS USEFUL IN THAT IT CAN BE USED TO REBUILD CORRUPTED PROFILE */
/* POOLS: E.G. AFTER TSO SESSIONS HAVE ABENDED AND MORE Z-CLIST DATA */
/* CANNOT BE ADDED BECAUSE THE PROFILE POOL IS SUPPOSEDLY 'FULL'. */
/* */
/* THE VARIABLES AND THEIR VALUES ARE WRITTEN OUT TO A VB FILE */
/* (LRECL=1028, FOR THE SAKE OF EXPEDIENCY) AND THIS FILE CAN LATER */
/* BE READ AS INPUT TO RECREATING THE ORIGINAL PROFILE POOL, BY */
/* ISSUING A 'VPUT' FOR EACH VARIABLE READ IN FROM THE FILE (AFTER */
/* ASSOCIATING THE VARIABLE WITH ITS VALUE, ALSO IN THIS FILE). */
/* */
/* INPUT FILE: <SYSUID>.ISPF.ISPPROF */
/* OUTPUT FILE: <SYSUID>.<PROFNAME>.VARLIST */
/* */
/* */
/* 10/06/96 CMP: TIDY-UP */
/* 04/06/96 CMP: UPDATED TO ALLOW EXTRACTING VARIABLES FROM ANY */
/* PROFILE (PROVIDED IT IS IN THE 'INPUT' FILE.) */
/* 03/06/96 CMP */
/*-------------------------------------------------------------------*/
ARG PROFNAME TRACE
IF ABBREV('DEBUG',TRACE,1) THEN TRACE ALL
INITS:
SYSUID = USERID()
PROCEDURE:
CALL LIBDEFS
CALL TABLE_STATUS
CALL CHECK_STATUS1
CALL CHECK_STATUS2
CALL PROCESS_POOL
IF OPEN_FLAG = 'YES' THEN ,
CALL TABLE_CLOSE
CALL ALLOC_DATASETS
CALL WRITE_POOL
CALL EDIT_POOL
CALL FREE_DATASETS
CALL RESET_LIBDEFS
CALL EXIT
LIBDEFS:
PROFDSN = SYSUID'.ISPF.ISPPROF'
IF PROFNAME = '' THEN ,
DO
SAY 'Please supply the name of the profile to be read from 'PROFDSN,
'when invoking this Clist.'
CALL EXIT
END
PROFDSNQ = "'"PROFDSN"'"
"ISPEXEC LIBDEF MATABLE DATASET ID("PROFDSNQ")"
RETURN
ALLOC_DATASETS:
PROFVARS = "'"SYSUID'.'PROFNAME'.VARLIST'"'"
IF SYSDSN(PROFVARS) ¬= 'OK' THEN ,
"ALLOC FI(PROFFILE) DA("PROFVARS") NEW CATALOG ,
SPACE(1,1) TRACKS RECFM(V B) LRECL(1028) BLKSIZE(27998)"
ELSE ,
"ALLOC FI(PROFFILE) DA("PROFVARS") SHR KEEP"
RETURN
TABLE_STATUS:
"ISPEXEC TBSTATS "PROFNAME" ,
STATUS1(STATUS1) STATUS2(STATUS2) LIBRARY(MATABLE)"
RETURN
CHECK_STATUS1:
IF STATUS1 ¬= 1 THEN ,
DO
SELECT
WHEN (STATUS1==2) THEN SAY ,
'Profile 'PROFNAME' does not exist in 'PROFDSN': please check.'
WHEN (STATUS1==3) THEN SAY ,
'Dataset 'PROFDSN' has not been allocated: please check.'
OTHERWISE
END /* SELECT */
CALL EXIT
END /* IF */
RETURN
CHECK_STATUS2:
SELECT
WHEN (STATUS2==1) THEN CALL OPEN_TABLE
OTHERWISE NOP
END /* SELECT */
RETURN
OPEN_TABLE:
"ISPEXEC TBOPEN "PROFNAME" ,
NOWRITE LIBRARY(MATABLE)"
IF RC > 0 THEN ,
DO
SAY 'RC = 'RC' on return from TBOPEN 'PROFNAME' - now you know.'
END /* IF */
ELSE ,
OPEN_FLAG = 'YES'
RETURN
PROCESS_POOL:
"ISPEXEC TBTOP "PROFNAME
"ISPEXEC TBSKIP "PROFNAME
"ISPEXEC TBGET "PROFNAME" SAVENAME(VARLIST)"
IF RC = 0 THEN ,
DO
TO = 1
FROM = TO+1
TO = POS(' ',VARLIST,FROM)
DO I = 1 TO 999999 WHILE TO > 0
J = SUBSTR(VARLIST,FROM,TO-FROM)
POOLVAR.I = LEFT(J,8) VALUE(J)
FROM = TO+1
TO = POS(' ',VARLIST,FROM)
END
TO = POS(')',VARLIST,FROM)
J = SUBSTR(VARLIST,FROM,TO-FROM)
POOLVAR.I = LEFT(J,8) VALUE(J)
END /* IF */
ELSE ,
DO
CALL TABLE_QUERY
IF RC = 0 THEN ,
DO
SAY 'Values returned by TBGET 'PROFNAME':'
SAY ' '
SAY 'SAVENAME = 'VARLIST
SAY ' '
SAY ' '
SAY 'Values returned by TBQUERY 'PROFNAME':'
SAY ' '
SAY 'KEYS = 'KEYNAME
SAY 'NAMENUM = 'TOTNAMES
SAY 'NAMES = 'NAMELIST
SAY 'ROWNUM = 'TOTROWS
SAY 'POSITION = 'CRPOS
SAY ' '
SAY ' '
SAY 'Use the above information to figure out what the problem is.'
SAY ' '
END
END /* ELSE */
RETURN
TABLE_QUERY:
"ISPEXEC TBQUERY "PROFNAME" KEYS(KEYNAME) NAMES(NAMELIST) ,
ROWNUM(TOTROWS) NAMENUM(TOTNAMES) POSITION(CRPOS)"
RETURN
WRITE_POOL:
POOLVAR.0 = I
"EXECIO * DISKW PROFFILE (STEM POOLVAR.)"
"EXECIO 0 DISKW PROFFILE (FINIS)"
IF RC = 0 THEN ,
SAY 'Dataset 'PROFVARS' has been updated with the variables',
'contained in '''PROFDSN'('PROFNAME')''.'
RETURN
EDIT_POOL:
"ISPEXEC VPUT (TRACE) SHARED"
"ISPEXEC EDIT DATASET("PROFVARS") MACRO(PROFTIDY)"
RETURN
TABLE_CLOSE:
"ISPEXEC TBCLOSE "PROFNAME" ,
LIBRARY(MATABLE)"
IF RC > 0 THEN ,
DO
SAY 'RC = 'RC' on return from TBCLOSE 'PROFNAME' - now you know.'
END /* IF */
RETURN
RESET_LIBDEFS:
"ISPEXEC LIBDEF MATABLE"
RETURN
FREE_DATASETS:
"FREE FI(PROFFILE)"
RETURN
EXIT:
EXIT 0
REXX edit macro %PROFTIDY (invoked by REXX PROFREAD):
/*-------------------------------------------------------------------*/
/* THIS THING IS INVOKED BY %PROFREAD TO REMOVE ALL VARIABLES WHICH */
/* BEGIN WITH 'ZPLEX' OR 'ZENQ', AND ALL VARIABLES WHOSE VALUES */
/* INCLUDE P'.' OR ARITHMETIC OPERATORS (+,-,/,=). */
/* */
/* REMOVE ALSO ALL VARIABLES BEGINNING WITH 'PTCRET'. */
/* CHANGE ALSO ALL VARIABLE VALUES 'PAGE' TO 'CSR'. */
/* */
/*-------------------------------------------------------------------*/
"ISREDIT MACRO"
"ISPEXEC VGET (TRACE) SHARED"
IF ABBREV('DEBUG',TRACE,1) THEN TRACE ALL
"ISREDIT EXCLUDE ALL ZPLEX 1"
"ISREDIT EXCLUDE ALL ZENQ 1"
"ISREDIT EXCLUDE ALL PTCRET 1"
"ISREDIT EXCLUDE ALL P'.' "
"ISREDIT EXCLUDE ALL '+' "
"ISREDIT EXCLUDE ALL '-' "
"ISREDIT EXCLUDE ALL '/' "
"ISREDIT EXCLUDE ALL '=' "
"ISREDIT FIND ALL COMM 1 "
"ISREDIT FIND ALL PID 1 "
"ISREDIT FIND ALL ZPROJ 1 "
"ISREDIT DELETE ALL X"
"ISREDIT CHANGE ALL PAGE CSR WORD 10"
"ISREDIT CHANGE ALL VIEW BROWSE WORD 10"
"ISREDIT SAVE"
"ISREDIT END"
EXIT 0
To update an ISPF profile, REXX PROFWRIT:
/*-------------------------------------------------------------------*/
/* This thing invokes TSO Clist %PROFWRI@ to rewrite the profile */
/* variables stored in DSN=<&SYSUID>.PROFNAME.VARLIST to a new */
/* application profile pool, NAPPL (i.e. to profile <NAPPL>PROF). */
/* */
/* 01/05/97 CMP: Tidy-up, rewritten in REXX */
/*-------------------------------------------------------------------*/
ARG PROFNAME NAPPL TRACE
IF ABBREV('DEBUG',TRACE,1) THEN TRACE ALL
INITS:
SYSUID = USERID()
NOGO = 'FALSE'
PROCESS:
CALL CHECK_PROFNAME
IF NOGO = 'TRUE' THEN ,
CALL SHOW_FORMAT
ELSE ,
DO
CALL CHECK_NAPPL
IF NOGO = 'TRUE' THEN ,
CALL SHOW_FORMAT
ELSE ,
CALL OK
END
CALL EXIT
CHECK_PROFNAME:
IF LENGTH(PROFNAME) < 5 ,
| LENGTH(PROFNAME) > 8 THEN ,
DO
NOGO = 'TRUE'
PROFVAR = SYSUID'.*.PROFVARS'
SAY 'Please supply the name of the five-to-eight character',
'profile "*" whose'
SAY 'variables are to be read-in from dataset 'PROFVAR',',
'when invoking'
SAY 'this Clist.'
END
RETURN
CHECK_NAPPL:
IF NAPPL = '' ,
| LENGTH(NAPPL) > 4 THEN ,
DO
NOGO = 'TRUE'
PROFVAR = SYSUID'.'PROFNAME'.PROFVARS'
SAY 'Please supply a one-to-four character',
'name for the new application into which'
SAY 'the variables stored in dataset 'PROFVAR' are to be written,'
SAY 'when invoking this Clist.'
END
RETURN
SHOW_FORMAT:
SAY ' '
SAY ' '
SAY 'Format is: %PROFWRIT <name of existing profile> <name of',
'new application>'
SAY ' '
SAY 'E.g. %PROFWRIT REXZPROF REXN, to read all variables stored',
'in dataset'
SAY SYSUID'.REXZPROF.VARLIST and write them to a new',
'application called REXN,'
SAY 'thus creating a new profile REXNPROF.'
SAY ' '
SAY 'Thanks a lot.'
RETURN
OK:
"ISPEXEC SELECT CMD(PROFWRI@ "PROFNAME TRACE") NEWAPPL("NAPPL")"
RETURN
EXIT:
EXIT 0
Clist %PROFWRI@ (invoked by REXX PROFWRIT):
PROC 1 PROFNAME DEBUG
/*-------------------------------------------------------------------*/
/* TSO CLIST TO READ IN ALL PROFILE POOL VARIABLES AND THEIR VALUES */
/* WRITTEN TO DATASET "<SYSUID>.<PROFILE POOL>.VARLIST" BY REXX */
/* CLIST %PROFREAD, THEN 'VPUT' THESE VARIABLES (AND THEIR VALUES) */
/* TO A NEW PROFILE POOL, WHICH CAN THEN BE COPIED OVER THE ORIGINAL */
/* PROFILE POOL IN BATCH MODE (OFFLINE) WHILST THE USER IS NOT */
/* SIGNED ON. */
/* */
/* THE PURPOSE OF THIS EXERCISE IS TO CLEAN UP THE PROFILE POOL */
/* AFTER IT BECOMES 'SCREWED UP' FOLLOWING SEVERAL ABENDS OF THE */
/* USER'S TSO ADDRESS SPACE (GENERALLY INDICATED BY MESSAGES THAT */
/* THE PROFILE POOL IS 'FULL', FOLLOWED BY FURTHER ISPF TSO ABENDS */
/* AND THE SITUATION JUST GETTING WORSE). THE ALTERNATIVE WOULD BE */
/* TO DELETE THE EXISTING PROFILE POOL AND LET THE APPLICATION (E.G. */
/* 'ISR' FOR ISPF) RECREATE IT EMPTY - WHICH THEN RESETS THE PROFILE */
/* VARIABLES TO THEIR DEFAULT VALUES (E.G. SCROLL = PAGE, ETC.) AND */
/* THE USER HAS NO OPTION BUT TO REKEY EACH AMENDED VARIABLE VALUE */
/* IN AGAIN. */
/* */
/* ADMITTEDLY, MOST USERS ARE CONTENT WITH THE DEFAULT VALUES AND */
/* THIS CLIST WILL BE OF NO USE TO THEM. OTHERS, SUCH AS MYSELF, USE */
/* PROFILE POOL VARIABLES QUITE EXTENSIVELY AND HAVE NO WISH TO HAVE */
/* TO REKEY-IN ALL THE PROFILE VARIABLE VALUES WHEN THE PROFILE POOL */
/* BECOMES TOO CORRUPTED TO BE USED. */
/* */
/* NOTE THAT THE EXISTING VARIABLES MUST FIRST HAVE BEEN EXTRACTED */
/* FROM THE PROFILE POOL VIA CLIST %PROFREAD - AND, OBVIOUSLY, THE */
/* SOONER THIS IS DONE WHEN THE PROFILE POOL SHOWS SIGNS OF BECOMING */
/* CORRUPTED, THE MORE LIKELY THAT ALL THE VARIABLES WILL BE SAVED. */
/* */
/* THE NEW PROFILE POOL TABLE IS CREATED WITH A PAD FACTOR OF 40%, */
/* TO ALLOW FOR FURTHER EXPANSION. */
/* */
/* */
/* 09/07/97 CMP: EXCLUDE VARIABLE ZENQ- WHICH ALSO SCREWS EVERYTHING */
/* UP */
/* 09/07/97 CMP: EXCLUDE VARIABLE ZPLEX WHICH CONTAINS ARITHMETIC */
/* OPERATORS AND SCREWS EVERYTHING UP */
/* 18/04/97 CMP: DISABLE EOF MESSAGE WARNING */
/* 13/06/96 CMP */
/*-------------------------------------------------------------------*/
CONTROL: +
CONTROL MAIN END(ENDO)
IF &DEBUG = DEBUG | &DEBUG = D THEN +
CONTROL LIST SYMLIST CONLIST MSG
ELSE +
CONTROL NOLIST NOSYMLIST NOCONLIST NOMSG
INIT: +
SET VARLIST =
SET PROFDSNQ =
SET PROFVARS =
ISPEXEC VGET (ZAPPLID)
PROCEDURE: +
SYSCALL LIBDEFS PROFNAME PROFDSNQ ZAPPLID
SYSCALL ALLOC_DATASETS PROFNAME PROFVARS
SET PROFVDSN = &PROFVARS
SYSCALL READ_POOL PROFNAME PROFVDSN VARLIST ZAPPLID
SYSCALL FREE_DATASETS PROFNAME
SYSCALL EXIT PROFNAME
LIBDEFS: +
PROC 0 PROFNAME PROFDSNQ ZAPPLID
SYSREF PROFNAME PROFDSNQ ZAPPLID
CONTROL END(ENDO)
SET PROFDSNQ = '&SYSUID..ISPF.ISPPROF(&ZAPPLID.PROF)'
IF &SYSDSN(&PROFDSNQ) = OK THEN +
TSOEXEC DELETE &PROFDSNQ
ENDO
ALLOC_DATASETS: +
PROC 0 PROFNAME PROFVARS
SYSREF PROFNAME PROFVARS
CONTROL END(ENDO)
SET PROFVARS = '&SYSUID..&PROFNAME..VARLIST'
IF &SYSDSN(&PROFVARS) ¬= OK THEN +
DO
WRITE
WRITE Dataset &PROFVARS.: &SYSDSN(&PROFVARS)
WRITE Please invoke %PROFREAD before reinvoking the present Clist.
WRITE
SYSCALL EXIT PROFNAME
ENDO
ELSE +
ALLOC FI(PROFFILE) DA(&PROFVARS) SHR KEEP
ENDO
READ_POOL: +
PROC 0 PROFNAME PROFVDSN VARLIST ZAPPLID
SYSREF PROFNAME PROFVDSN VARLIST ZAPPLID
CONTROL END(ENDO)
ERROR DO
WRITE ERROR - MAXCC = &MAXCC
RETURN
ENDO
SET MAXCC = 0
OPENFILE PROFFILE INPUT
READ_FIRST: +
GETFILE PROFFILE
DISABLE_EOF_WARNINGS_ETC: +
ERROR DO
RETURN
ENDO
PROCESS_PROFFILE: +
DO WHILE &MAXCC = 0
SET PROFVARS = &SUBSTR(1:8,&STR(&PROFFILE) )
DO L = &LENGTH(&STR(&PROFFILE)) TO 9 BY -1 +
WHILE &SUBSTR(&L,&STR(&PROFFILE)) = &STR( )
ENDO
IF &L > 9 THEN +
SET VARVAL = &SUBSTR(10:&L,&STR(&PROFFILE))
ELSE +
SET VARVAL =
SET SYSSCAN = 2
SET &&PROFVARS = &STR(&VARVAL)
SET SYSSCAN = 16
ISPEXEC VPUT (&PROFVARS) PROFILE
GETFILE PROFFILE
ENDO PROCESS_PROFFILE
SET MAXCC = 0
RE_ENABLE_WARNINGS_ETC: +
ERROR DO
WRITE ERROR - MAXCC = &MAXCC
RETURN
ENDO
CONTROL CAPS ASIS
WRITE Profile &ZAPPLID.PROF has been updated with the variables
WRITE contained in dataset &PROFVDSN..
CLOSFILE PROFFILE
ENDO
FREE_DATASETS: +
PROC 0 PROFNAME
SYSREF PROFNAME
CONTROL END(ENDO)
FREE FI(PROFFILE)
ENDO
EXIT: +
PROC 0 PROFNAME
SYSREF PROFNAME
CONTROL END(ENDO)
EXIT CODE(0)
ENDO
Note: All these REXX EXECs and Clists should be run as TSO batch jobs
(i.e. via JCL).
BTW If I have forgotten to list some other required REXX/Clist code,
please let me know - thanks.
CP
Paul Gilmartin wrote:
On Thu, 7 Jul 2016 12:16:16 -0400, John Eells wrote:
I believe edit profiles are kept in the ISREDIT member of your ISPPROF
data set. I'm not sure the format is documented anywhere, but there are
services to retrieve and change the settings.
Basically, if you define PROFILE FOO (which is as simple as using it on
the Edit or View entry panel), and you set up the profile as you wish,
and use it for FOO files, "it should just work." But you probably know
that much alreay.
For UNIX files it can be more complicated. Perhaps BPXWUNIX("file" file-id,
...),
parse the result then, as Charles notes, you can't do what you need with it.
RFE to document the format of HILITE files? (But which John E. at Share
Denver rejoiced that the format of Program Objects is now OCO; non-GUPI?)
z/OS ISPF Edit and Edit Macros is where I'd start looking for more info.
That would be in Knowledge Centre?
(Why has ISPF-L been so quiet this month?)
-- gil
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN