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

Reply via email to