Appendix V -- ISPEXEC and ISREDIT Variables

Examples:

The QUERYALL macro results seen here [TSO code] can be invoked from a MACRO during testing to generate DATALINES at the end of your test. Do not save the changed macro or data being tested as you will have added lines that you probably do not want to keep.

================================================================================

Appendix V                                                            Appendix V

                                                       Author: David McRitchie
                                                   formatted on  1995/04/01 06:54
                                                              dmcritchie.. at ..hotmail.com
--------------------------------------------------------------------------------
Appendix V.
users.       ISPF CLIST creators
type.        Sample clist used herein  resides in  IS03.LIBR.CLIST(QUERYALL)
manual.      SC34-4253  EDIT MACROS (check by using clist %MANUALS before ordering)
related document members.  NCLIST entire manual, REXX, CLISTS, DOCLIST.

--------------------------------------------------------------------------------
Appendix-V    Sample of CLIST variables available
--------------------------------------------------------------------------------
    related   see EDITOR material beginning on first page.
--------------------------------------------------------------------------------


Appendix-V INDEX
TSO Symbolic Variables
TSO Control Variables
TSO CLIST CONTROL Statement
TSO CLIST Error Routines
PDF EDITOR variables
Place a Short message on Panel
Setting Cursor Location
Setting Variables or mode
Setting/Retrieving SHARED pool variables or application PROFILE
Affect view of current member or other member
Other commands
LISTDSI Information, and ALLOCATE
Special Techniques
Ampersand and Double quote

REXX material
REXX Control Variables
REXX LISTDSI Information, and ALLOCATE
REXX Stacks, PUSH, PULL, QUEUE
REXX Translate Function


TSO Symbolic Variables   [Appendix-V INDEX] refer to manual GC28-1274 TSO Terminal User's Guide for more specific information (may be an old manual or number).

+------------------------------------------------------------------------------+
|                                                                              |
|  Symbolic value                 Use                                          |
|  &DATATYPE(expression)          To determine if an expression is entirely    |
|                                     numeric. Returns either NUM or CHAR.     |
|                                 e.g.  &datatype(3*2/4)   results in NUM      |
|  &EVAL(expression)              To determine the result of an arithmetic     |
|                                     expression.                              |
|  &LENGTH(expression)            To determine the number of characters in the |
|                                     result of an evaluated expression.       |
|  &NRSTR(string)                 To define a non-rescannable character string |
|                                     for symbolic substitution.  Use to       |
|                                     prevent removal of first ampersand when  |
|                                     when a character string is prefixed with |
|                                     double ampersands.  Use to prevent more  |
|                                     than one level of symbolic substitution  |
|                                     of a variable.                           |
|  &STR(string)                   To use a string of characters as a real      |
|                                     value.                                   |
|                                                                              |
|                            Since square brackets are not available, optional |
|                             material is enclosed in European brackets <...>. |                                                 <
|                                                                              |
|&SUBSTR(expression<:expression>,string) To use a portion of a character string|
|                                   as a real value.                           |
|&SYSCAPS(string)          Change string to uppercase                          |
|&SYSDSN(data set name)    Check if dataset exits, returns "OK" or               |
|                                    other value.  See page NCAPXB-1.  (in REXXS
                                                                               |
|                                   AA use STREAM)                             |
|&SYSINDEX(index,string,<,start>) an argument within a string                  |
                           Locate
|                            e.g.   = &SYSINDEX(.,&dsname.) + 1                |
|&SYSLC(string)            Change string to lowercase.  CONTROL ASIS or NOCAPS
|
|                                  must be                                     |
Z&SYSNSUB(level,expression)Limit the level of symbolic substitution. Level can
|                                   be set from zero to 99.                       |
+------------------------------------------------------------------------------+


TSO Control Variables   [Appendix-V INDEX]

These CLIST variables are available during the running of any CLIST.   For  more
information refer to SC28-1304 TSO Extensions CLISTs.

+---------------+------------+----------------------------------------+--------+
|Category       |  Symbolic  | Information Represented by Variable    | Example|
|               |  Variable  |                                        |        |
+---------------+------------+----------------------------------------+--------+
|User-oriented  | &SYSUID    | Current User's identification          | IS03   |
|               | &SYSPROC   | LOGON procedure name                   | TECHT  |
|               | &SYSPREF   | Data set name prefix                   | IS03   |
|               |            |                                        |        |
|Current ...    | &LASTCC    | Most recent return code                | 0      |
| procedure     | &MAXCC     | Highest return code                    | 8      |
|               | &SYSDLM    | Termination delimiter                  | 0      |
|               | &SYSDVAL   | Terminal parameters                    |        |
|               | &SYSLTERM  | Contains number of lines avail./screen | 27     |
|               | &SYSWTERM  | Width of the screen                    | 132    |
|               |            |                                        |        |
|System ...     | &SYSCPU    | CPU time (session) secs.hundredths     | 6.24   |
| Environment   | &SYSHSM    | Level of HSM available to the clist    |        |
|               | &SYSISPF   | Whether ISPF management services avai. | ACTIVE |
|               | &SYSLRACF  | Level of RACF available to the clist   | 1070   |
|               | &SYSRACF   | Indicates whether RACF installed       | AVAILABL
                                                                               |
|               | &SYSSRV    | Number of SRM serv. units used (session).92058  |
                                                                      |
|               | &SYSTSOE   | Level of TSO/E installed               | 1040   |
|               |            |                                        |        |
|CLIST ...      | &SYSENV    | Foreground or background execution     | FORE   |
| related       | &SYSICMD   | Implicit execution member name         | QUERYALL
                                                                               |
|               | &SYSNEST   | Nested procedure indicator             | NO     |
|               | &SYSPCMD   | Current primary command name           | EXEC   |
|               | &SYSSCAN   | Symbolic substitution rescan limit     | 16     |
|               | &SYSSCMD   | Current subcommand name                | VERSION|
|               |            |                                        |        |
|Current date   | &SYSTIME   | Current time hh:mm:ss                  | 20:39:58
                                                                               |
| and time      | &SYSDATE   | Current date mm/dd/yy                  | 01/02/86
                                                                               |
|(different     | &SYSSTIME  | Date form  hours:minutes               | 13:23  |
| variables     | &SYSSDATE  | Date format year/month/day.            | 88/01/02
                                                                               |
| in REXX)      | &SYSJDATE  | Julian date format  year.days.         | 88.002 |
+---------------+------------+----------------------------------------+--------+
|REXX exec for the above basically omit the ampersand and are in the           |
|form:        SAY SYSVAR(syspref)                                              |
+------------------------------------------------------------------------------+
|                 ISP@MSTR -- MASTER, and ISR@PRIM -- ISPF/PDF PRIMARY OPTION  |
|                             ISPF Dialog Management Guide and Reference   SC  |
|                                       ISPEXEC VGET(........)  SHARED|PROFIL  |
+------------------------------------------------------------------------------+

Check out the following also:    (found Nov 1997)
  appclu = MVSVAR('sysappclu')
  for more information see my list of manuals at end of this section.



+---------------+---------------------------+-------------------------+--------+
|Category       |  ISPEXEC                  | Description             | Examp  |
+---------------+---------------------------+-------------------------+--------+
|System         | ISPEXEC VGET (ZUSER )     |  Userid                 |  IS03  |
| Variables     | ISPEXEC VGET (ZPREFIX)    |  Prefix                 |  IS03  |
|               | ISPEXEC VGET (ZTIME )     |  Time                   |  20:1  |
|               | ISPEXEC VGET (ZTERM )     |  Terminal               |  3278  |
|               | ISPEXEC VGET (ZCHARLM)    | Terminal characteristic | ISP32  |
|               | ISPEXEC VGET (ZDATE )     |  Date                   |  89/0  |
|               | ISPEXEC VGET (ZJDATE )    |  Date                   |  89.2  |
|               | ISPEXEC VGET (ZKEYS )     |  PF Keys                |  24    |
|               | ISPEXEC VGET (ZPFSHOW)    |  PFSHOW ON/OFF          |  OFF   |
|               | ISPEXEC VGET (ZPFCTL)     |  User Authorization     |        |
|               |                           |   to use PFSHOW         |        |
|               |                           |   USER|ON|OFF           |        |
|               | ISPEXEC VGET (ZPFFMT)     |  Format of PFSHOW       |  MAX   |
|               |                           |   PRI (13-24), ALT(1-12)|        |
|               |                           |   ALL (1-24)            |        |
|               | ISPEXEC VGET (ZPF01 )     |  PF01                   |  HELP  |
|               | ISPEXEC VGET (ZPF03 )     |  PF03                   |  END   |
|               | ISPEXEC VGET (ZPF04 )     |  PF04                   |  :ts   |
|               | ISPEXEC VGET (ZPF012)     |  PF012                  |  curs  |
|               | ISPEXEC VGET (ZPF024)     |  PF024                  |  retr  |
|               | ISPEXEC VGET (ZPL01 )     |  PF01   show            |        |
|               | ISPEXEC VGET (ZPL03 )     |  PF03   show            |        |
|               | ISPEXEC VGET (ZPL04 )     |  PF04   show            |        |
|               | ISPEXEC VGET (ZPL012)     |  PF012  show            |        |
|               | ISPEXEC VGET (ZPL024)     |  PF024  show            |        |
|               | ISPEXEC VGET (ZLOGON )    |  PROC                   |  TECH  |
|               | ISPEXEC VGET (VVER  )     |  Version                |  ISPF  |
|               | ISPEXEC VGET (ZAPPLID)    |  Application            |  ISR   |
+---------------+---------------------------+-------------------------+--------+
|REXX exec for ISPEXEC and ISREDIT Environments                                |
|                 ADDRESS "ISPEXEC" "SELECT service"           |
|                 ADDRESS "ISPEXEC" "VGET (variable) shared|profile" |
+------------------------------------------------------------------------------+

+------------------------------------------------------------------------------+
|      word for word from Chapt 5 ISPF Customization SC34-4117-0 page 81 (???) |
|  Invoking a ISPSTART or SELECT service from a clist                          |
|                                                                              |
|                                                                              |
| Tablename           This is the name of an input table that resides          |
|                     in the table input library (ddname ISPTLIB).  This table |
|                     drives the update process, eliminating the need for user |
|                     interaction.                                             |
|                                                                              |
| INSTALL             Use of this keyword parameter indicates that input       |
|                     for the update process (in this case, an add, delete, or |
|                     replace function) resides in the sequential input data s |
|                     (ddname ISPPIN).                                         |
|                                                                              |
| BACKOUT             Use of this keyword parameter indicates that input for   |
|                     the update process (in this case a restore function) res |
|                     in the sequential input data set (ddname ISPPIN).        |
|                                                                              |
| Examples:                                                                    |
|                                                                              |
|                                                                              |
|  ISPEXEC LIBDEF ISPPLIB DATASET ID('_____');                                 |
|           from a command list dialog                                         |
|                                                                              |
|  CALL ISPLINK ('SELECT',buflen,'PGM(ISPPUP) PARM(tablename)');               |
|           from a module dialog                                               |
|                                                                              |
|                                                                              |
|  ISPEXEC SELECT PGM(ISPPUP) PARM(INSTALL)');                                 |
|           from a command list dialog                                         |
|                                                                              |
|                                                                              |
|  &ZSEL = 'PGM(ISPPUP) PARM(tablename)'                                       |
|           from a selection panel                                             |
|                                                                              |
|                                                                              |
|  ISPSTART PGM(ISPPUP) PARM(BACKOUT)');                                       |
|           directly from the host system                                      |
|                                                                              |
+------------------------------------------------------------------------------+

+------------------------------------------------------------------------------+
|  STEPLIB function without use of a STEPLIB in the TSO PROC.                  |
|                                                                              |
|    ISPEXEC LIBDEF ISPLLIB DATASET ID('TECH.QW.V23.LINKLIB')                  |
|                                                                              |
|  Other libraries                                                             |
|                                                                              |
|    ISPEXEC LIBDEF ISPMLIB DATASET ID('TECH.QW.V23.MESSAGES')                 |
+------------------------------------------------------------------------------+

+---------------+------------+----------------------------------------+--------+
|Current date   | DATE('U')  | Current date mm/dd/yy                  | 01/02  |
| and time      | DATE('O')  | Date format year/month/day.            | 88/01  |
| functions     | DATE('J')  | Julian date format       year.days.    | 88002  |
| in REXX       | TIME('N')  | Current time       hours:minutes:seconds 13:23  |
                                                                      |
|               | TIME()     | Current time  (same as above, but above|form n  |
+---------------+------------+----------------------------------------+--------+

&SYSDSN(data set name) -- Determining Whether a Data Set Exists

  OK                          /*the data sets exists or the data set and memb
  MEMBER NOT FOUND
  MEMBER SPECIFIED, BUT THE DATASET IS NOT PARTITIONED
  DATASET NOT FOUND
  ERROR PROCESSING REQUESTED DATASET
  PROTECTED DATASET           /* the dataset is RACF-protected*/
  VOLUME NOT ON SYSTEM
  INVALID DATASET NAME, dsname
  MISSING DATA SET NAME
  UNAVAILABLE DATASET

 CLIST syntax:       x = &SYSDSN('sys1.userproc')
                     x = &SYSDSN('&filename(&member)')

 REXX syntax:        x = SYSDSN("'sys1.userproc'")
                     x = SYSDSN("'"fulldsn"("member")'")
 or                  x = SYSDSN('''sys1.userproc''')
 unqualified as      x = SYSDSN('libr.exec')
 or                  x = SYSDSN(libr.exec)
 REXXSAA on a PC     x = stream('...\file.txt','c','query exists')
                          return full pathname if file exists,  null string i

 OS/2 syntax:        DIR /S filespec < filespec

LIBRARIAN equivalent for SYSDSN
The following code has not been tested but was supplied by LIBRARIAN under
tracking #1668787 11/1192 by James Mim.  LIBRARIAN must be at least
level 9202 the current level is 9207, and ours is 9102 (so we can't use yet).
To find level get into ELIPS and enter OPTION on the command line.

     SELECT PGM(ELIPS) DSN('librarian.dataset') CMD('B module;end')

     will return RC=14 if member not found.


TSO CONTROL Statement
  [Appendix-V INDEX]
       refer to manual SC28-1304 TSO Extensions CLISTs for more specific info
       See also DIALOG error interception on page NCAPXB-1.

    default
      CONTROL NOPROMPT NOSYMLIST NOLIST NOCONLIST CAPS MSG FLUSH

    options
      CONTROL PROMPT SYMLIST LIST CONLIST NOCAPS|ASIS NOMSG NOFLUSH MAIN

    descriptions of selected items
      SYMLIST,   list statements before symbolic substitution
      LIST,      list statements after symbolic substitution
      CONLIST,   list CLIST statements after symbolic substitution but before
      FLUSH,NOFLUSH   control of input stack when an error occurs
      MAIN,      cannot be flushed (NOFLUSH is assumed regardless of specific
      PROMPT,    ...


TSO Error Routines   [Appendix-V INDEX]

  ERROR DO
   ...
  END

  ERROR OFF       to turn off error processing

DIALOG error interception

For  more  information  refer  to SC34-4266 "ISPF Dialog Management Guide and
Reference" Chapter 17 Miscellaneous Services page 481 in SC34-4266-0.
 Control Service -- prefixed by ISPEXEC CONTROL
   DISPLAY LOCK        Allow next display without unlocking keyboard
   NONDISPL            Do not diplay the next panel, and simulate  Enter  key
                       or END.
   DISPLAY REFRESH     Refresh entire screen display
   DISPLAY LINE        Refresh entire screen after expected line-mode output
   SPLIT               Enable or disable split-screen operations.
   ERRORS CANCEL       Errors - terminate with return code or higher.
   ERRORS RETURN       Errors  -  return  control  to function.  Message id is
                       stored in ZERRMSG.  RETURN applies only to the current
                       (next) function and then reverts back to  the  default
                       of CANCEL.

An example within REXX exec

     Address "ISPEXEC" "CONTROL ERRORS RETURN"
     Address "ISPEXEC" "EDIT DATASET("||DSNAME||") MACRO"||MACRO||")"                                                                                   "
     If RC <> 0 then ...
        Address "ISREDIT"
        "LINE_BEFORE .ZF = MSGLINE """||time('n')||,
            "-- ERROR in your parameters --" zerrsm""""
        "LINE_BEFORE .ZF = MSGLINE """||zerrmsg zerrlm||""""                                                                                            "
        ZEDSMSG = zerrsm
        ZEDLMSG = zerrmsg zerrlm
        Address "ISPEXEC" "SETMSG MSG(ISRZ000)"
    END

An example within CLIST language

          ISPEXEC CONTROL ERRORS RETURN
          ISPEXEC  EDIT DATASET(&DSNAME.) &MACRO. &PANEL.
          SET RC = &LASTCC.
          IF &RC ¬= 0 THEN IF &STR() ¬= &STR(&ZEDLMSG.) THEN DO
             SET &ZEDSMSG = &STR(&ZERRSM)
             SET AAA = &ZERRLM
             SET AAA = &AAA.
             SET AAA = &STR(RC=&RC., &AAA. -- &RMEMBER.)
             SET &ZEDLMSG = &STR(&AAA.)
             ISPEXEC     SETMSG MSG(ISRZ000)
          END
          EXIT CODE(&RC.)

One  more  REXX example,    DISPLAY LOCK only applies to the next DISPLAY, it
must be reinstated for each display.  It remains in effect until the  execute
ends or another DISPLAY LOCK occurs.  (The following in the SPELL macro.)  If
ISRZ001  is  used  instead of ISRZ000 the color of the message will be yellow
instead of white and the alarm will sound.  Quiet is preferred.

          ZEDSMSG =
          ZEDLMSG = '** Spell checking in progress **'
          ADDRESS 'ISPEXEC' 'CONTROL DISPLAY LOCK'
          ADDRESS 'ISPEXEC' 'DISPLAY MSG(ISRZ000)'
            -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
          ZEDSMSG =
          ZEDLMSG = '** SCRIPT/VS checking words **'
          ADDRESS 'ISPEXEC' 'CONTROL DISPLAY LOCK'
          ADDRESS 'ISPEXEC' 'DISPLAY MSG(ISRZ000)'
            -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
          ZEDSMSG =
          ZEDLMSG = '** SPELL CHECKING IN PROGRESS ** -- FINAL PHASE'
          ADDRESS 'ISPEXEC' 'CONTROL DISPLAY LOCK'
          ADDRESS 'ISPEXEC' 'DISPLAY MSG(ISRZ000)'

PDF EDITOR variables   [Appendix-V INDEX] available during the running of a MACRO clist refer to manual SC34-2133 for more specific information
QUERYALL Macro QUERYALL clist was used to obtain values shown below
   ISREDIT (VAR001       ) = AUTOLIST                    OFF
   REFORMAT .a .b 1 55 60 115 56 59 120 130      OF
   ISREDIT (VAR003,VAR004) = AUTOSAVE                    OFF     ,PROMPT
   ISREDIT (VAR005       ) = BLKSIZE                     006233
   ISREDIT (VAR006,VAR007) = BOUNDS                      001,251

    WARNING the use of NUMBER ON when  using  RECFM  of  V  will  operate
        internally with the column numbers of the data portion (excluding
        the  sequence numbers) and externally to the user the columns are
        numbered including the seq number .   so that  col  1  internally
        will  be viewed by the user as column 9.  This affects BOUNDS and
        DISPLAY_COLS.

       -----internal to clists------------      --------as seen by user--
    ---------
       positioned  BOUNDS  DWIDTH  DISPLAY      positioned  BOUNDS  DWIDT
    H  DISPLAY
       seq.number  001,243    243  001,116      seq.number  009,251    24
    3  001,124
       data        001,243    243  001,124      data        009,251    24
    3  009,132
       far right   001,243    243  001,173      far right   009,251    24
    3  128,251

ISREDIT  (VAR008       )    = CAPS                           OFF

ISREDIT  (VAR009,VAR010)    = CHANGE_COUNTS                  00000000,0000000
0
          number of strings changed                          ==CHG>
          number of strings that could not be changed                  ==ERR>

ISREDIT  (VAR011,VAR012)    = CTL_LIBRARY                    NOCHECK     ,FIR
STLIB
          variable name to contain lock status of the member
          variable name to contain additional status information
ISREDIT  (VAR013,VAR014)    = CURSOR                         000074,000

ISREDIT  (VAR014A)          = DATA_CHANGED                   000 s/b YES or N
O
ISREDIT  (VAR016       )    = DATA_WIDTH                     251

          logical data width      unnumbered same as  LRECL
           STD is LRECL-8,   COBOL is LRECL-6,   STD COBOL is LRECL-14
ISREDIT  (VAR018       )    = DATAID                         ISR00041

          return code =4   dataid created by edit will be freed by edit

ISREDIT  (VAR018A      )    = DATASET                        IS03.SHARE.TEXT

ISREDIT  (VAR019,VAR020)    = DISPLAY_COLS                   001,124

           first and last data column currently visible to end user
          * commands that refer to DISPLAY values are invalid in a recovery m
acro
ISREDIT  (VAR021,VAR022)    = DISPLAY_LINES                  000074,000087

          first and last line number visible if macro terminated at this poin
t

ISREDIT  (VAR023E,VAR024E) = EXCLUDE_COUNTS                  00000000,0000000
0
          number of strings found (excluded)
          number of lines on which strings were excluded

ISREDIT  (VAR023,VAR024)    = FIND_COUNTS                    00000001,0000000
1
          number of strings found
          number of lines on which strings were found

ISREDIT  (VAR025,VAR026)    = FLOW_COUNTS                    00000000,0000000
0
          number of original lines participated in text flow operation
          number of lines that were generated by the text flow operation
          if varname1 > varname2, difference is number of lines deleted
          if varname1 < varname2, difference is number of lines added

ISREDIT  (VAR027,VAR028)    = HEX                            OFF ,

ISREDIT  (VAR029       )    = IMACRO                         NONE

ISREDIT  (VAR031,VAR032)    = LABEL .ZFIRST                           ,000

          name of label found on current line, and highest nesting level (0 i
s highest)
          return code =4   label not found
ISREDIT  (VAR033       )    = LEVEL                          00

ISREDIT  (VAR035       )    = LINE 9          >APPENDIX V.
          content of VAR035 is the content of line 9
ISREDIT  (VAR036       )    = LINE .ZLAST            <content of .ZLAST line>                                                    <

ISREDIT  (VAR037       )    = LINENUM .ZLAST                 000087

ISREDIT  (VAR039       )    = MACRO_LEVEL                    001

ISREDIT  (VAR043       )    = MEMBER                         NCAPXB

ISREDIT  (VAR045       )    = NOTE                           ON

ISREDIT  (VAR047,VAR048)    = NULLS                          ON ,ALL

ISREDIT  (VAR049,VAR050)    = NUMBER                 ->> OFF,NOSTD   NOCOBOL
NODISPL
ISREDIT  (VAR051       )    = PACK                           OFF

ISREDIT  (VAR053,VAR054)    = PROFILE                        TEXT,UNLOCK

          name of current profile, and LOCK or UNLOCK status
ISREDIT  (VAR055       )    = RANGE_CMD

         return code =8   line command setting not acceptable out of RANGE_CM
D
ISREDIT  (VAR057       )    = RECFM                          V

ISREDIT  (VAR059       )    = RECOVERY                       OFF

ISREDIT  (VAR061       )    = RMACRO                         NONE

          * commands that refer to DISPLAY values are invalid in a recovery m
acro
          *   elips     !ELIED0
          *   ZAPPLID   ISR
          ***
          *   LIB@EDIT  LIB@EDRT   ZEDTDSN   ZZDBDSN
ISREDIT  (VAR063,VAR064)    = SEEK_COUNTS                    00000000,0000000
0
          number of strings found
          number of lines on which strings were found

ISREDIT  (VAR065       )    = STATS                          ON

ISREDIT  (VAR067A,VAR067B)    = TABS
    OFF,
                                      ON | OFF,  tab char and ALL | STD
ISREDIT  (VAR071       )    = USER_STATE       <<USED TO STORE USER_STATE>>                                                   <
ISREDIT  USER_STATE = (VAR071)              <<USED TO RESTORE USER_STATE>>
ISREDIT  (VAR073       )    = VERSION                        01

ISREDIT  (VAR075       )    = XSTATUS .ZCSR                  NX

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Setting Variables or mode in clists
       refer to manual SC34-2133 for more specific information
       the equal sign, optional in most cases, is required on LABEL

     ISREDIT AUTONUM  mode ON|OFF
     ISREDIT AUTOSAVE mode ON | OFF PROMPT | OFF NOPROMPT
     ISREDIT BOUNDS   left right
     ISREDIT CAPS     mode ON|OFF
     ISREDIT CURSOR  = line col
          The following statements may change the cursor position
           CHANGE EXCLUDE FIND SEEK TSPLIT
          A LOCATE does not change the cursor position

     ISREDIT DEFINE   name {CMD MACRO | PGM MACRO | ALIAS name2 | NOP | RESET
}
     ISREDIT HEX      {ON DATA | ON VERT | OFF }
     ISREDIT IMACRO   name|NONE to set the initial macro
     ISREDIT LABEL    lptr = labelname <level>
     ISREDIT LABEL    .ZCSR = .POINT <0          --  optional level 0 - 255,
                              0 makes label visable at all levels
     ISREDIT LEVEL    num
     ISREDIT LINE     lptr = data            (to change line content see manu
al)
             (refer to manual SC34-2133 for more specifics)
     ISREDIT LINE_AFTER lptr = <DATALINE | NOTELINE | MSGLINE> "data"
             (refer to manual SC34-2133 for more specifics)
     ISREDIT LINE_AFTER lptr = (LINEDATA)
             (*** where LINEDATA is a variable, do not use ampersands on this
 one ***)
     ISREDIT LINE_AFTER .zcsr = LINE .zcsr      /* .zcsr an example of any lp
tr  */
             (*** one method used to repeat a line ***)
     ISREDIT LINE_BEFORE lptr = <DATALINE | NOTELINE | MSGLINE> "data"
             (refer to manual SC34-2133 for more specifics)
     ISREDIT MASKLINE = data                 (create mask for added lines)
             (refer to manual SC34-2133 for more specifics)
     ISREDIT NOTE     = mode                 {ON | OFF} (whether dialog model
 include notes)
     ISREDIT NULLS    = {ON | OFF | ALL | STD}
     ISREDIT NUMBER   = {ON | OFF | STD | COBOL | STD COBOL | DISPLAY}
     ISREDIT PACK     = {ON | OFF}
     ISREDIT PROFILE                         (refer to manual SC34-2133 for m
ore specifics)
     ISREDIT RECOVERY = {ON | OFF}
     ISREDIT RENUM    <STD> <COBOL> <DISPLAY> same as on NUMBER
     ISREDIT REPLACE  member lptr-range
     ISREDIT RESET    <LABEL|CHANGE|ERROR|SPECIAL|EXCLUDED|COMMAND> <lptr-ran                                                 <
ge>
     ISREDIT RMACRO   = name                 Set Recovery Macro
     ISREDIT SCAN     = {ON | OFF}
     ISREDIT STATS    = {ON | OFF} determine whether statistics kept
     ISREDIT TABS     =                      (refer to manual SC34-2133 for m
ore specifics)
     ISREDIT TABSLINE =                      (refer to manual SC34-2133 for m
ore specifics)
     ISREDIT USER_STATE = (varname)          ...see manual for values save/re
stored
     ISREDIT VERSION  = num
     ISREDIT XSTATUS  lptr = X | NX          sets status on line
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Setting Variables or mode in REXX   [Appendix-V INDEX]
A separate little section has been created for REXX  as  a  reminder  to  use
quotes  except  around variables.  Obtaining variables was more straight for-
ward.  In setting variables you may have a variable ("PTR") which is    an  ad-
dress  (PTR=".STA")    which  must then be used as a REXX variable, since there
will be no TSO clist substitution for the likes of "&PTR.".
       refer to manual SC34-2133 for more specific information
       the equal sign, optional in most cases, is required on LABEL

 Address "ISREDIT:"        Set Default for ISREDIT

     "AUTONUM"    mode                         ON|OFF
     "AUTOSAVE" mode                           ON | OFF PROMPT | OFF NOPROMPT
     "BOUNDS"     left right
     "CAPS"       mode                         ON|OFF
     "CURSOR =" line col
          The following statements may change the cursor position
           CHANGE EXCLUDE FIND SEEK TSPLIT
          A LOCATE does not change the cursor position

     "DEFINE"     name      {CMD MACRO | PGM MACRO | ALIAS name2 | NOP | RESET}
     "HEX"        {ON DATA | ON VERT | OFF }
     "IMACRO"     name|NONE                    to set the initial macro
     "LABEL"    lptr  "=labelname <level">
     "LABEL      .ZCSR=.POINT <0>"   -- optional level 0 - 255,
                              0 makes label visable at all levels
     "LEVEL"      num
     "LINE"     lptr  "="data       (to change line content see manual)
             (refer to manual SC34-2133 for more specifics)
     "LINE_AFTER" lptr"= <DATALINE | NOTELINE | MSGLINE"> """data"""
             (refer to manual SC34-2133 for more specifics)
     "LINE_AFTER" lptr"= (LINEDATA)"
             (*** where LINEDATA is a variable ***)
             (refer to manual SC34-2133 for more specifics)
     "LINE_BEFORE" lptr"=" <DATALINE | NOTELINE | MSGLINE> "data"                                                                                         "
             (refer to manual SC34-2133 for more specifics)
     "MASKLINE=" data             (create mask for added lines)
             (refer to manual SC34-2133 for more specifics)
     "NOTE     =" mode          {ON | OFF} (whether dialog model include notes)
     "NULLS    =" {ON | OFF | ALL | STD}
     "NUMBER   =" {ON | OFF | STD | COBOL | STD COBOL | DISPLAY}
     "PACK     =" {ON | OFF}
     "PROFILE"                                 (refer to manual SC34-2133 for
more specifics)
     "RECOVERY=" {ON | OFF}
     "RENUM"        <STD> <COBOL> <DISPLAY> same as on NUMBER
     "REPLACE"    member lptr-range
     "RESET"        <LABEL|CHANGE|ERROR|SPECIAL|EXCLUDED|COMMAND> <lptr-range>                                                  <
     "RMACRO   =" name         Set Recovery Macro
     "SCAN     =" {ON | OFF}
     "STATS    =" {ON | OFF} determine whether statistics kept
     "TABS     =" (refer to manual SC34-2133 for more specifics)
     "TABSLINE=" (refer to manual SC34-2133 for more specifics)
     "USER_STATE =" varname         ...see manual for values
save/restored
     "VERSION =" num
     "XSTATUS" lptr "=" status       --             sets status on line  X or NX
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Receiving Responses from the Terminal

     WRITENR Please supply value for A ...
     READ
     WRITE Value received is &SYSDVAL

     WRITE Please supply values A,B,C,D
     WRITE    e.g.  15,24,,73    or   '15'  '24'  ''  '73'
     READ A,B,C,D = &STR(value)
     WRITE A has value of &A.,...,D has value of &D.

Receiving Responses from the Terminal using REXX

     SAY 'Please supply value for A ...'
     PULL a
     SAY  Value received is a

     SAY "Please supply values A,B,C,D"
     SAY "     e.g.  15,24,,73    or   '15'  '24'  ''  '73'"
     PULL A B C D
     SAY 'A has value of 'A',...,D has value of 'D

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Setting/Retrieving SHARED pool variables or application PROFILE   [Appendix-V INDEX]

     ISPEXEC VGET (variable) SHARED
     WRITE variable = &variable

     SET variable = &STR(value)
     ISPEXEC VPUT (variable) SHARED

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Place a Short message on Panel   [Appendix-V INDEX]
Clist code to Place a short message on panel and a long message for HELP

           SET &ZEDSMSG = MISSING MEMBER
           SET &ZEDLMSG = MEMBERNAME TO BE DELETED FROM "&DSN." WAS NOT SPEC-
IFIED
           ISPEXEC SETMSG MSG(ISRZ000)
           EXIT CODE(0)


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Clist code to Place a long message on panel immediately

           SET &ZEDSMSG =
           SET &ZEDLMSG = &STR(**Spell Checking in progress **)
           ISPEXEC CONTROL DISPLAY LOCK
           ISPEXEC SETMSG MSG(ISRZ000)
           EXIT CODE(0)


Setting Cursor Location   [Appendix-V INDEX]
      ISREDIT CURSOR = line col

Affect view of current member or other member   [Appendix-V INDEX]
     ISREDIT CHANGE ...
     ISREDIT COPY   ...
     ISREDIT CREATE ...
     ISREDIT DOWN   amt
     ISREDIT FIND   ...
     ISREDIT LEFT   amt
     ISREDIT LOCATE ...
     ISREDIT MOVE   ...
     ISREDIT REPLACE ...
     ISREDIT RIGHT  amt
     ISREDIT SEEK ...
     ISREDIT SHIFT  ...
     ISREDIT SORT   ...
     ISREDIT UP     amt

Other commands not described at this time
  [Appendix-V INDEX]
     ISREDIT BUILTIN ...
     ISREDIT CTL_LIBRARY
     ISREDIT DEFINE  ...
     ISREDIT PROCESS ... and  RANGE_CMD
     ISREDIT SCAN   on/off      (there is an example later)

LISTDSI Information, and ALLOCATE
  [Appendix-V INDEX]
LISTDSI Information -- TSO Clist                  and REXX exec version

   SET DSN = 'IS03.LIBR.CLIST(JUNK)'              dsn = "is03.libr.clist(junk)"
   LISTDSI &DSN.  +                               x = LISTDSI(dsn) DIRECTORY
                                                                   _________

   SYSDSNAME       Data Set Name                       IS03.LIBR.CLIST
   SYSVOLUME       Volume serial id                    TSOD12
   SYSDSORG        Data Set Organization               PO
   SYSRECFM        Record format                       VB
   SYSLRECL        Logical record length               255
   SYSBLKSIZE      Block size                          19069
   SYSKEYLEN       Key length                          0
   SYSCREATE       Creation date                       1987/043
   SYSEXDATE       Expiration date                     0
   SYSREFDATE      Last referenced date                1988/242
   SYSUPDATED      Change indicator                    YES
   SYSUNIT         Device on which volume resides      3380
   SYSUNITS        Space units                         TRACK
   SYSADIRBLK      Directory blocks allocated (PDS only)
                                                       200
   SYSPRIMARY      Primary allocation in space units   45
   SYSSECONDS      Secondary allocation in space units 0
   SYSUDIRBLK      Directory blocks used (PDS only)    55
   SYSMEMBERS      Number of members (PDS only)        326
   SYSALLOC        Allocation in space units           45
   SYSUSED         Allocation used, in space units     41
   SYSBLKSTRK      Directory blocks per track for unit 4
   SYSEXTENTS      Number of extents used              1
   SYSTRKSCYL      Tracks per cylinder per unit        15
   SYSMSGLVL1      First level message (if an error)
   SYSMSGLVL2      First level message (if an error)
   SYSPASSWORD     password indication                 NONE
   SYSRACFA        RACF indication                     GENERIC
   SYSREASON       LISTDSI reason code                 0000

+------------------------------------------------------------------------------+
|                       TSO CLIST to ALLOCATE a dataset                        |
+------------------------------------------------------------------------------+
|   ALLOCATE DA(&NEW) NEW SPACE(&SYSPRIMARY,&SYSSECONDS) +                     |
|      LIKE (&BASE) CATALOG                                                    |
|                                                                              |
| or                                                                           |
|                                                                              |
|   ALLOCATE DA(&NEW) NEW SPACE(&SYSPRIMARY,&SYSSECONDS) +                     |
|      &SYSUNITS DIR(&SYSADIRBLK) +                                            |
|      RECFM(&SUBSTR(1:1,&SYSRECFM.   ) &SUBSTR(2:2,&SYSRECFM.   ) +           |                                                                              . 
|            &SUBSTR(3:3,&SYSRECFM.   ) &SUBSTR(4:4,&SYSRECFM.    ) +          |                                                                              . 
|      LRECL(&SYSLRECL.) BLKSIZE(&SYSBLKSIZE.)                                 |
|                                                                              |
+------------------------------------------------------------------------------+
|  Generated code will look like this visually to you (REXX has commas at end  |
| not &plus)                                                                   |
|                                                                              |
|     ALLOCATE DA('xxxxxxx') NEW SPACE(45,0) +                                 |
|        VOL(TSOD12) UNIT(3380)  +                                             |
|        TRACK DIR(200) +    <DIRECTORY must be included on command>           |
|        RECFM(V B +                                                           |
|                ) +                                                           |
|        LRECL(255) BLKSIZE(19069)                                             |
+------------------------------------------------------------------------------+

+------------------------------------------------------------------------------+
| in REXX exec the ALLOCATE would read as follows (drop the ampersands)        |
+------------------------------------------------------------------------------+
|                                                                              |
|             SUBSTR(string,n,length) same as in PLI,  REXX also has           |
|             SUBSTR(string,n,length,pad)  e.g.  SUBSTR('abc',2,6,'.')         |
|             STRIP(string,'t')   remove trailing blanks (,' ' default)        |
|                                                                              |
|   x = LISTDSI("'old.dsn'")       /* x is set to a function code */             |
|  "ALLOCATE DA('xxxxxxx') NEW SPACE("SYSPRIMARY","sysseconds")",                    |                                                                          "
|     "UNITS DIR(0"sysadirblk")",                                                  |
|     "RECFM("STRIP(SUBSTR(sysrecfm,1,1) SUBSTR(sysrecfm,2,1,' '),               |
|           SUBSTR(sysrecfm,3,1,' ') SUBSTR(sysrecfm,4,1,' '),'t')")",           |
|     "LRECL("syslrecl") BLKSIZE("sysblksize")"                                      |                                                                          "
|  /* say "x=" x     returns  x= 0  */                                           |
+------------------------------------------------------------------------------+
|  Generated code will look like this visually to you (REXX has commas at end  |
| not &plus)                                                                   |
|                                                                              |
|     ALLOCATE DA('xxxxxxx') NEW SPACE(45,0) ,                                 |
|        VOL(TSOD12) UNIT(3380) ,                                              |
|        TRACK DIR(200) ,         <DIRECTORY must be included on command>      |
|        RECFM(V B) ,                                                          |
|        LRECL(255) BLKSIZE(19069)                                             |
+------------------------------------------------------------------------------+

Special Techniques
  [Appendix-V INDEX]
Techniques for some troublesome parts of CLISTS
   This code is available in IS03.LIBR.CLIST(PATTERN) at Mytown.
             -- dataset name will be different but look for PATTERN.txt

       SET LP = &STR(()
       SET I = 1
       DO WHILE &I <= 100
        SET TOKEN = &&TOK&I
        SET TOKEN = &STR(&SYSCAPS(&TOKEN))
        IF &STR(&TOKEN) = &STR() THEN GOTO END_TOK
        IF HELP = &STR(&TOKEN) | NX = &STR(&TOKEN) -
           | LEFT = &STR(&TOKEN) | RIGHT = &STR(&TOKEN) -
           THEN DO
             SET &&TOKEN. = &STR(&TOKEN)
             IF DEBUG = &DEBUG THEN WRITE &I TOK&I=&TOK&&I TOKEN=&TOKEN                                                                                     &                &
             GOTO NXT_TOK
           END
        IF &SUBSTR(1:6,&STR(&TOKEN)      ) = &STR(BEGIN&STR(&LP)) +
         THEN DO
           SET BEGIN = &SUBSTR(7:&EVAL(&LENGTH(&STR(&TOKEN))-1),+
             &STR(&TOKEN) )
           GOTO NXT_TOK
         END
        SET REMAIN = &STR(&REMAIN &STR(&TOKEN))
 NXT_TOK: -
        SET I = &I + 1
      END
 END_TOK: SET I = &I

Ampersand and Double quote
  [Appendix-V INDEX]
Ampersand (x'50') and Double Quote (x'48')
      are not compatible with CLIST use of SUBSTR after use of
      "ISREDIT (CONTENT) = LINE LINENUM" for a more
      complete example, examine the content of the REFORMAT clist.

      ISREDIT C ALL X'50' X'47'
  or  ISREDIT C ALL '&&' X'47'
      ISREDIT C ALL '"' X'48'

      ISREDIT C ALL '.hr     ' '.hr 1 left right'
      ISREDIT C ALL '.hr 1 &&&&$CL.' '.hr left right'
      ISREDIT C ALL '.hr 0 &&&&$CL.' '.hr left right'
                           ====
     /* Note it takes 4 ampersands in a clist to replace a single ampersand*/

      ISREDIT (VAR075) = XSTATUS &K.
      IF &NX = NX AND &VAR075 = X THEN GOTO LOOP1NXT

      ISREDIT (LINE@AAA) = LINE &K.

      SET STR2 = &SUBSTR(&SUB1.:&SUB2.,&STR(&LINE@AAA))
--------------------------------------------------------------------------------

&SYSNSUB(level,expression) -- limiting level of symbolic substitution
_

&SYSSCAN=times -- max symbolic substitutions scans per line

  ISREDIT MACRO
  SET PIEBALD = &STR(JACK &SYSNSUB(0,&AMP.) JILL WENT UP THE HILL)
  SET AMP = XXX
  SET &SYSSCAN=1
  SET L = &LENGTH(&SYSNSUB(1,&PIEBALD.))
  WRITE &SYSNSUB(0,&PIEBALD.)
  WRITE &SYSNSUB(1,&PIEBALD.)
  ISREDIT LINE_AFTER  .ZL = DATALINE "&SYSNSUB(0,&PIEBALD.) L=&L."
  ISREDIT LINE_AFTER  .ZL = DATALINE "&SYSNSUB(1,&PIEBALD.) L=&L."
  ISREDIT LINE_AFTER  .ZL = DATALINE "1...5...10...15...20...25...30.."
  EXIT CODE(0)

JACK &AMP. JILL WENT UP THE HILL L=32
JACK XXX JILL WENT UP THE HILL L=32
1...5...10...15...20...25...30..


&SCAN -- limit scanning to one time
_

  ISREDIT (varname) = SCAN     obtain current value, if of interest

  ISREDIT SCAN OFF
  ISREDIT LINE &LNUM = "&&SYSDATE is a CLIST built-in function -- (&SYSDATE.)"                                                                                  "
  ISREDIT SCAN ON

00010 &SYSDATE is a CLIST built-in function -- (05/31/91)

      ISREDIT MACRO
      /* IS03.LIBR.CLIST(NTEST) */
      SET MSG = &SYSNSUB(1,/*A && B '"'" ")
      WRITE &NRSTR(&MSG.)
      WRITE &STR(&SYSNSUB(1,&MSG.))
      ISREDIT LINE_AFTER .ZL = DATALINE "/&STR(*) &STR(&SYSNSUB(1,&MSG.))"                                                                                      "
      ISREDIT LINE_AFTER .ZL = DATALINE "/&STR(*) &NRSTR(&MSG.)"
    /* /*A & B '"'""
    /* /*A & B '"'""
    /* /*A & B '"'""C
    /* /*A & B '"'""C
    /* /*A & B '"'""C"
    /* /*A & B '"'""C"
    /* /*A & B '"'"
    /* /*A & B '"'"
    /* the example as included at "SET MSG" will fail, but works for
    /* each of the above.

Best methods for obtaining and copying lines

 (the following has been extracted from the CUT clist)
  LOOP: ISREDIT (TEMPFLE) = LINE &LNEBGN.
        PUTFILE TEMPFLE
        SET &LNEBGN = &LNEBGN + 1
        IF &LNEBGN > &LNEEND THEN GOTO CLOSIT
        GOTO LOOP

  CLOSIT: CLOSFILE TEMPFLE

 (the following has been extracted from the PASTE clist)
    /*                                           */
    /*   PASTE : TAKE THE OUTPUT DATASET     */
      CONTROL NOFLUSH NOLIST NOMSG
      ISREDIT MACRO NOPROCESS

      ALLOC F(TEMPFLE) DA('&DATASET') SHR REUSE
      ISREDIT PROCESS DEST
      /* it is important to check return code -- refer to manual*/
      /* also see the clists  CUT and PASTE                     */
      ISREDIT (DEST) = LINENUM .ZDEST
      SET DEST = &DEST
      OPENFILE TEMPFLE INPUT

      LOOP: GETFILE TEMPFLE
            /* Corrections above and below,  D.MCRITCHIE 4/24/91 */
            ISREDIT LINE_AFTER &DEST = (TEMPFLE)
            SET &DEST = &DEST + 1
            GOTO LOOP

For  an  example  of  the old clist SYSOUTTRAP see the @STRAP edit macro on page
&pg@STRAP, which shows codings for both REXX and clist.

Coding to create a new member using vanilla TSO edit.
      IF &SYSPREF = THEN SET PREF = &SYSUID
      ELSE IF &SYSPREF = &SYSUID THEN SET PREF = &SYSUID
      ELSE SET PREF = &SYSPREF..&SYSUID
      ALLOCATE FI(OUTFILE) DS('&SCDS(MASTTEMP)') SHR REUSE
      OPENFILE OUTFILE OUTPUT
      SET OUTFILE = &STR(.* This member was created by an ISPF dialog)
      PUTFILE OUTFILE
      SET OUTFILE = &STR(.* It will get replaced -- do not change it)
      PUTFILE OUTFILE
      SET OUTFILE = .im MASTSG1A
      PUTFILE OUTFILE
      SET OUTFILE = .im A&PNUM
      PUTFILE OUTFILE
      SET OUTFILE = .im MASTSG3A
      PUTFILE OUTFILE
      CLOSFILE OUTFILE
      FREE FI(OUTFILE)

Calling a Subprocedure

Note:
  &A contains a variable value
  B contains a variable name

Returning Information from a Subprocedure
  - Return codes
  - SYSREF variables
  - NGLOBAL variables    e.g.   NGLOBAL variable <... variable>

The following example has been modified from the example in TSO Extension CLISTs
SC28-1304.  Comments may have to be removed for example to function.

PROC 0
   SET &A = AL
   SET &B = Jr.
   SYSCALL XYZ JONES &A B /* pass parameters to XYZ */
   WRITE &PARM1, &PARM2 &PARM3 /* result: JONES, AL Jr. */
   WRITE Jones, // &A. &B.
XYZ: PROC 3 PARM1 PARM2 PARM3 /* receive parameters on PROC stmt */
   SYSREF PARM3             /* indicate parm3 holds a variable name */
   WRITE &PARM1, &PARM2 &PARM3 /* result: JONES, AL Jr. */
   SET PARM1 = NPARM1
   SET PARM2 = NPARM2
   SET PARM3 = NPARM3

END
END

results

 JONES, AL Jr.  /* Result:  JONES, AL             Jr. */
 ,
 Jones, // AL NPARM3
 PROC 0
 SYSCALL XYZ 0258 CCRBG
 SYSCALL XYZ 0267 IS03
 SYSCALL XYZ 0258 C047
 SYSCALL XYZ 0258 BWMRB
 SYSCALL XYZ 0258 TCDDE
 SYSCALL XYZ 0267 I047
 SYSCALL XYZ 0267 IS0B
 EXIT CODE(0)
 XYZ: PROC 2 ACCT PIC#
   SET NEWACCT =
   WRITE &ACCT. &PIC#.
   IF 0258 = &ACCT. THEN DO
      IF &DATATYPE(&SUBSTR(2:2,&PIC#.99999)) ¬= NUM        AND &DATATYPE(&SUBSTR                                                                                    &                                               &
(3:3,&PIC#.99999)) ¬= NUM        AND &DATATYPE(&SUBSTR(4:4,&PIC#.99999)) ¬= NUM
       AND &DATATYPE(&SUBSTR(5:5,&PIC#.99999)) ¬= NUM       THEN DO
         SET NEWACCT = &STR(D-)&SUBSTR(1:2,&PIC#.99)
         WRITE  &B.     NEWACCT = &NEWACCT FOR &ACCT. &PIC#.
      END
   END
 END

results

COMMAND INVOKING @STRAPQ CLIST MACRO ===> @STRAPQ fixusera

0258 CCRBG
          NEWACCT = D-CC   FOR 0258 CCRBG
0267 IS03
0258 C047
0258 BWMRB
          NEWACCT = D-BW   FOR 0258 BWMRB
0258 TCDDE
          NEWACCT = D-TC   FOR 0258 TCDDE
0267 I047
0267 IS0B

PFK Usage in CLISTs

To show pfkeys or not to show pfkeys

   PFSHOW ON|OFF   <--- on ISPF
     ISPEXEC VGET (ZPFCTL)
     SET SVPFCTL = &ZPFCTL.
      &ellipse.
     SET ZPFCTL = &SVPFCTL.
     ISPEXEC VPUT (ZPFCTL)

To change a PFKEY for duration of a clist

   KEYS  (and then make changes)  <--- on ISPF
     ISPEXEC VGET (ZPF04)
     SET SVPF04  = &ZPF04.
      &ellipse.
     SET ZPFC04 = &SVPF04.
     ISPEXEC VPUT (ZPF04.)

Prefix and userid usage in CLISTs

Since some individuals will be running with PREFIX off,  clists  should  provide
for this possibility.   An example is found in SAS606.

  IF &STR(&SASUSER) EQ THEN DO
      IF &STR(&SYSPREF.) EQ &STR() -
         THEN SET &SASUSER = &STR('&SYSUID..SAS606.SASUSER')
         ELSE SET &SASUSER = &STR('&SYSPREF..SAS606.SASUSER')

An  example of more generic nature can be found in the clist CSTSOP which stores
prefix for later related clists.  This clist is initiated from panel  VUTSOP  or
VSTSOP used for on-line access to the SOP manual.


Library Access Services
Reference clist  @DIRSTAT  RESETDIR  @DIR

hierarchy (order) of Library Management functions

Some examples of usage are the clists (or REXX executes) -- @DIR (directory
     clist),  @DIRSTAT,  @SAVEX,  RESETDIR (reset directory)

  "(DSN018A) = DATASET"         /* ---- example in REXX -------------- */
  "LMINIT    DATAID(XCCX) DATASET('"||DSN018A||"')"
    "LMOPEN    DATAID("||XCCX||") OPTION(INPUT)"     /* use after LMINIT */
       ...
       "LMMFIND   DATAID("||XCCX||") MEMBER("||MEMBER||") STATS(YES)"                                                                                           "
       ...
       "LMMSTATS DATAID("||XCCX||") MEMBER("||MEMBER||")" TOKEN
       ...
    "LMCLOSE   DATAID("||XCCX||")"      /* use when finished LMOPEN */
  "LMFREE    DATAID("||XCCX||")"        /* when finished DATAID assigned by LMINIT*/
  EXIT 1

If  OPTION(OUTPUT)  is  used  on LMOPEN such as for LMMDEL, then need an enqueue
value such as ENQ(SHRW) on the LMINIT.  An example is the KILL clist.

LMINIT will assign to the DATAID named variable the name of a  ddname.    Had  a
variable  name  been  used then the variable name would have received the value.
Usage above in REXX is clear but use in clist language may pose a bit of  diffi-
culty  in interpretation.  Recommend never using an ampersand with the DATAID on
the LMINIT in clist language (contrary to some examples in manuals).

 To find out what Application Id you are in, enter:

            ====> TSO Q WHAT

+------------------------------------------------------------------------------+
| The following was attempted to see variables in for applid(lib@)             |
|                                                                              |
|   TSO Q SELECT PANEL(ISRTXD1) NEWAPPL(LIB@)                                  |
|                                                                              |
|  it did not work,  but I am sure that I once had something that did.         |
|  It did attempt to invoke ISPEXEC SELECT PANEL(ISRTXD1) NEWAPPL(LIB@)        |
|  It did reset the Application Id, but the panel will not accept              |
| the value since it goes out in flames on a dialog error.                     |
|  The actual profile for LIB@  is in  userid.ISPF.PROFILE(LIB@PROF).          |
+------------------------------------------------------------------------------+
  PANEL NAME = ISRYVPN        MESSAGE NAME = ISPZZ100

  --------------------------------- VARIABLES --------------------  ROW 1 OF 431
  COMMAND ===>                                                  SCROLL ===> PAGE

  ADD/DELETE/CHANGE VARIABLES.  UNDERSCORES NEED NOT BE BLANKED.
  ENTER END COMMAND TO FINALIZE CHANGES, CANCEL COMMAND TO END WITHOUT CHANGES.

        VARIABLE  P A VALUE                        APPLICATION: ISR

   '''' Z_______  S N
   '''' ZAPLCNT_  S N 0000
   '''' ZAPPLID_  S N ISR
   '''' ZCOLORS_  S N 0007
   '''' ZDATE___  S N 89/07/20
   '''' ZDATEF__  S N YY/MM/DD
   '''' ZDATEFD_  S N YY/MM/DD
   '''' ZDAY____  S N 20
   '''' ZDBCS___  S N NO
   '''' ZENVIR__  S N ISPF 2.3MVS/XA  TSO
   '''' ZHILITE_  S N YES
   '''' ZJDATE__  S N 89.201
   '''' ZLOGNAME  S N IS03.SPFLOG4.LIST
   '''' ZLOGON__  S N TECH
   '''' ZLSTLPP_  S N 0060
   '''' ZLSTNAME  S N
   '''' ZLSTNUML  S N 0000
   '''' ZLSTTRUN  S N 0120
   '''' ZMONTH__  S N 07
   '''' ZPREFIX_  S N IS03
   '''' ZSCREEN_  S N 2
   '''' ZSCREEND  S N 0027
   '''' ZSCREENW  S N 0132
   '''' ZSCRMAXD  S N 0027
   '''' ZSCRMAXW  S N 0132
   '''' ZSPLIT__  S N NO
   '''' ZTEMPF__  S N IS03.SPFTEMP2.CNTL
   '''' ZTEMPN__  S N ISP20379
   '''' ZTIME___  S N 20:43
   '''' ZUSER___  S N IS03
   '''' ZYEAR___  S N 89
   '''' AMT_____  P   PAGE

TSO Symbolic Variables -- used in REXX
       refer to manual SC28-1883-0 TSO/E Ver 2 -- REXX reference, for more speci
       Document Number: SC28-1883-07
fic information
       refer to manual SC28-1882-0 TSO/E Ver 2 -- REXX User's Guide, for usage i
       Document Number: SC28-1882-05
nformation


REXX material
  [Appendix-V INDEX]
REXX

+------------------------------------------------------------------------------+
|                                                                              |
|  Symbolic value                 Use                                          |
|                                                                              |
|  DATATYPE('expression')         To determine if an expression is entirely    |
|                                     numeric. Returns either NUM or CHAR.     |
|                                 e.g.  &datatype('3*2/4') results in NUM      |
|                                                                              |
|  DATATYPE('expression',type)    type                                         |
|                                     .                                        |
|                                 Alphameric(a-z,A-Z,0-9),  Bits,  C (mixed    |
|                                     SBCS/DBCS),  Dbcs (double byte),         |
|                                     Lowercase,  Mixed case,  Number,         |
|                                     Symbol,  Uppercase, Whole number,        |
|                                     heXadeciamal                             |
|                                                                              |
|  LENGTH('expression')           To determine the number of characters in the |
|                                     result of an evaluated expression.       |
|                                                                              |
|  SUBSTR('string,from <,length <,pad>>)                                       |
|                                 substring                                    |
|                                                                              |
|  SYSDSN('data set name')        Check if dataset exits, returns "OK" or        |
|                                      other value.  See page NCAPXB-1.        |
|                                                                              |
|  INDEX('haystack,needle <,start>')     an argument within a string.          |
                                  Locate
|                                     Operands reversed compared to use of TSO |
|                                     CLIST  &SYSINDEX.   POS() in in REXXSAA, |
|                                     INDEX() is not so do not use INDEX().    |
|                                   e.g.   node1 = INDEX('dsname','.') + 1     |
|                                                                              |
|  POS('needle,haystack <,start>')Locate an argument within a string.          |
|                                     Approximates use of TSO CLIST            |
|                                     &SYSINDEX.                               |
|                                   e.g.   node1 = POS('.','dsname') + 1       |
|                                                                              |
|  LASTPOS('needle,haystack <,start>')   Locate an argument within a string.   |
|                                     Approximates use of TSO CLIST            |
|                                     &SYSINDEX.                               |
|                                   e.g.   node1 = POS('.','dsname') + 1       |
|                                                                              |
|  VERIFY('string1','string2' <,<'opt'> <,start>>)                             |                                           <
|                                 Verify all characters in string1 are in      |
|                                     string2., optional padding character.    |
|                                     No equivalent in TSO CLIST language      |
|                                   e.g.   node1 = POS('.','dsname') + 1       |
|                                                                              |
|  USERID()                       TSO/E userid                                 |
+------------------------------------------------------------------------------+
|              Other considerations converting to REXX from CLIST              |
|  SYSCAPS make up your own function, or   use   ARG from,  or TRANSLATE       |
|  SYSLC   make up your own function                                           |
|  WRITE, WRITENR  use  SAY, SAY and PULL                                      |
|  x=OUTTRAP(var,100)                                                          |
|    Clist --  openfile,  Getfile, closfile                                    |
|    REXX - filerec1 filerec2 filex                                            |
|  SYSCALL  -->  call                                                          |
|   READ,READVAL    put,parse                                                  |
|   write,writenr   say                                                        |
+------------------------------------------------------------------------------+

+------------------------------------------------------------------------------+
|               REXX execute, hierarchy to invoke a REXX execute               |
+------------------------------------------------------------------------------+
| See Using SYSPROC and SYSEXEC for REXX Executes in manual for more           |
| information.  Also see NOLOADDD flag in manual.                              |
|                                                                              |
|     EX x(y) EX                                                               |
|     IS03.x.EXEC(y)                                                           |
|                                                                              |
+-------------------                                                           |
|  /* REXX */ Variable length records in CLIST                                 |
+-------------------                                                           |
|                                                                              |
|    ddname(SYSEXEC)    Fixed length records                                   |
|    LIBR.EXEC                                                                 |
+------------------------------------------------------------------------------+

+------------------------------------------------------------------------------+
| Example -- IS03.LIBR.CLIST(REXX)                                             |
+------------------------------------------------------------------------------+
|  /* REXX -- NEXT TIME WILL RUN REXX FROM  IS03.LIBR.EXEC(REXX) */            |
|  "EXECUTIL SEARCHDD(YES)"                                                      |
|  "ALLOC FILE(SYSEXEC) DATASET(LIBR.EXEC) SHR REUSE"                            |
|  "FREE DS('SYS1.BRODCAST')"                                                    |
+------------------------------------------------------------------------------+

+------------------------------------------------------------------------------+
| Example -- IS03.LIBR.EXEC(REXX)                                              |
+------------------------------------------------------------------------------+
|  /* REXX - EDIT A REXX MEMBER IN "SYSVAR(SYSUID)".LIBR.EXEC */                 |
|  /*   ------- THE FOLLOWING CODE IS IN "SYSVAR(SYSUID)".LIBR.CLIST(REXX)    */ |
|  /*   "EXECUTIL SEARCHDD(YES)"                             */                  |
|  /*   "ALLOC FILE(SYSEXEC) DATASET(LIBR.EXEC) SHR REUSE" */                    |
|  /* ---- NEXT CALL TO REXX PICKS UP THIS CODE IN IS03.LIBR.EXEC(REXX)*/      |
|  ARG membername                                                              |
|  IF membername = '' THEN DO; SAY WHAT MEMBER DO YOU WANT?;PULL membername;EN |
| D;                                                                           |
|  /* THERE APPEARS TO BE A BUG IN REXX CALLING A CLIST WHEN THE */            |
|  /*   CLIST HAS  A SYSOUTTRAP   OR AN LD --- FUTHER INVESTIG. NEEDED*/       |
|  "$EDIT '"SYSVAR(SYSUID)".LIBR.EXEC("membername")' NEW REXX"                       |                                                                          "
|  IF RC ¬= 0 THEN                                                             |
|     SAY "RC="RC "$EDIT '"SYSVAR(SYSUID)".LIBR.EXEC("membername")' NEW"               |
|  EXIT                                                                        |
+------------------------------------------------------------------------------+

REXX Stacks, PUSH, PULL, QUEUE
  [Appendix-V INDEX]
+------------------------------------------------------------------------------+
| REXX -- Data Stack commands and use Data elements can  be  placed  into  the |
| top(PUSH)  or  bottom(QUEUE)  of a queue stack, can only be drawn(PULL) from |
| the top.                                                                     |
+------------------------------------------------------------------------------+
|  PUSH         g56     top, place data into top of stack                      |
|  PULL         g55     from top of stack, will proceed  through  Buffer  ares |
|                         till all elements have been retrieved.               |
|  QUEUE        g57     tail, place data into bottom of stack (bottom of BUF)  |
|  QUEUED()     g97     # lines in queue, also includes buffer areas           |
|                                                                              |
|  'MAKEBUF'    g165    makes a new buffer area (substack)                     |
|  'DROPBUF'    g166    drops buffer created by MAKEBUF (substack)             |
|                       DROPBUF  0    will  empty the original datastack 0 and |
|                         each buffer created by a  MAKEBUFF  --    buffer  1, |
|                         buffer  2,  etc.    This should be used with extreme |
|                         cautions because it will also clear out  stacks  be- |
|                         fore your exec was invoked.                          |
|                                                                              |
|  'QBUF'       g166    #  of  buffers (number of MAKEBUF in effect in current |
|                         stack)                                               |
|  'QELEM'      g167    # elements in a current buffer area (if QBUF=0 so will |
|                         QELEM)                                               |
|                                                                              |
|  NEWSTACK     g170    Create a new data stack                                |
|  DELSTACK     g172    delete stack created by NEWSTACK                       |
|  'QSTACK'     g172    # total number of stacks  in  effect  (1  +  each  new |
|                         stack)                                               |
+------------------------------------------------------------------------------+
| Items  above  with # (QUEUED(),QBUF,QELEM,QSTACK all supply the number in RC |
| (return code) used immediately after.  To prevent a language processor  from |
| searching  the  data  stack, you can issue a PARSE EXTERNAL instead of PULL. |
| PARSE EXTERNAL will get input directly from your terminal.                   |
+------------------------------------------------------------------------------+
| Elements left in the stack will be treated as TSO commands at the end of the |
| REXX exec.   e.g. COMMAND command_name NOT FOUND                             |
|                                                                              |
| In order to clear a stack .....                                              |
+------------------------------------------------------------------------------+


REXX Translate Function
  [Appendix-V INDEX]
+------------------------------------------------------------------------------+
| TRANSLATE function                                                           |
+------------------------------------------------------------------------------+
| TRANSLATE(string,to,from);    This is the same as PLI when all three entries |
| are provided, and the second and third are the same length.                  |
|                                                                              |
| TRANSLATE(string,tableo,tablei,pad);   if both tables are missing the  func- |
| tion  returns capitals.   If the output table is missing or shorter than the |
| input table, the output table is padded with the pad character.  If the out- |
| put table is longer than the input table the extra characters  will  be  ig- |
| nored.  If duplicates appear in the input table only the first occurrence of |
| the character is meaningful.                                                 |
|                                                                              |
|   x = TRANSLATE('abcdef')                         --> ABCDEF                 |
|   x = TRANSLATE('abcdef','cbbF','abcf')           --> cbbdeF                 |
|   x = TRANSLATE('abcdef','12','ec)                --> ab2d1f                 |
|   x = TRANSLATE('abcdef','12','abcd','.'          --> 12..ef                 |
|   x = TRANSLATE('abcdef','oneway','fedcba','.'    --> yaweno                 |
|                                                                              |
| REXX does not provide a specific function to translate upper to lowercase or |
| from  lowercase  to  uppercase; however, you can make your own functions and |
| even name the same as you used in TSO clists.  See the ANIMAL exec  on  page |
| &*XV953.    There are three methods used there to effect such a translation. |
| to translate requires setting                                                |
| /* REXX -- ANIMAL */                                                         |
| lowercase = 'abcdefghijklmnopqrstuvwxyz'                                     |
| UPPERCASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'                                     |
| animal = "Fox"                                                                 |
|        animal1=translate(animal)                                             |
|        animal3=translate(animal,uppercase,lowercase)                         |
|        animalf=syscaps(animal)     /*function defined elsewhere*/            |
|        parse upper var animal animalp                                        |
|        SAY animal animal1 animal3 animalF ANIMALp                            |
|          animal = 'Fox'                                                      |
|        animal1=translate(animal)                                             |
|          lowercase = 'abcdefghijklmnopqrstuvwxyz'                            |
|          UPPERCASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'                            |
|        animal3=translate(animal,uppercase,lowercase)                         |
|        parse upper var animal animalp                                        |
|        SAY animal animal1 animal3 ANIMALP, animalp                           |
|---------                                                                     |
| results:                                                                     |
|        Fox FOX FOX FOX FOX                                                   |
+------------------------------------------------------------------------------+
| To simply translate a variable to uppercase you may use the TRANSLATE  func- |
| tion with only the first operand.                                            |
|        ARG = TRANSLATE(ARG)                                                  |
+------------------------------------------------------------------------------+

+------------------------------------------------------------------------------+
| separating a dsname(member) into its components                              |
|                                                                              |
|   dsn = 'IS03.LIBR.CNTL(XYZ)'                                                |
|   PARSE VAR dsn dsname '(' member                                            |
|   member = STRIP(member,t,')')                                               |
+------------------------------------------------------------------------------+
| Arithmetic  operations in REXX execs are hierarchical, whereas in TSO clists |
| they are on an as encountered basis.                                         |
+------------------------------------------------------------------------------+
| INTERPRET ... g177                                                           |
+------------------------------------------------------------------------------+
| EXECIO    ... g178                                                           |
|                                                                              |
|  "EXECIO * DISKR ddname <start> (FINISH                                       |
|                                                                              |
|                                         (STEM varpool.1                      |
|                                         (STEM varpool.2                      |
|                                         (STEM varpool.3                      |
|                                          etc.                                |
|                                                                              |
|  (FINIS,  closes file after reading it, available to other users             |
|  (STEM,   read list of compound variables                                    |
|  (SKIP,   skip over specified number of lines                                |
|  (LIFO,   uses PUSH to place information on the stack                        |
|  (FIFO,   uses QUEUE to place information on the stack                       |
|                                                                              |
| In order to obtain records beyond a null line, if stack contains may contain |
| null lines.                                                                  |
|                                                                              |
|  n=QUEUED()                                                                  |
|  "EXECIO" n "DISKW outdd (FINIS"                                                 |
|                                                                              |
|  When the stack is exhausted, requests will be made for more input from  the |
| terminal.  This can be prevented using                                       |
|                                                                              |
|  QUEUE ''      to indicate a null line, and end of information               |
|                                                                              |
|          * is all lines until null line encountered or , nn lines.           |
+------------------------------------------------------------------------------+
|                                                                              |
| QUEUE " to ....                                                               |
|                                                                              |
| Return Codes from EXECIO                                                     |
|    0 Normal completion                                                       |
|    1 Data was truncated during DISKW operation                               |
|    2 EOF during DISKR or DISKRU                                              |
|   20 Severe Error                                                            |
+------------------------------------------------------------------------------+


EXECIO -- Copying an Entire Data Set

          "ALLOC DA(my.input) F(datain) SHR REUSE"
          "ALLOC DA(new.input) F(dataout) LIKE(my.input) NEW"
          "NEWSTACK" /* Create a new data stack for input only */
          "EXECIO * DISKR datain (FINIS"
          QUEUE ''   /* Add a null line to indicate the end of the */
                     /*  information                               */
          "EXECIO * DISKW dataout (FINIS"
          "DELSTACK" /* Delete the new data stack */
          "FREE F(datain dataout)"

        n = QUEUED()          /* Assign the number of stack items to "n" */
        "EXECIO" n "DISKW dataout (FINIS"

EXECIO -- Copying an Entire Data Set into Compound Variables

          "ALLOC DA(old.data) F(indd) SHR REUSE"
          "EXECIO * DISKR indd (STEM newvar."
          DO i = 1 to newvar.0
            SAY newvar.i
          END

EXECIO -- Copying from Compound Variables

          "ALLOC DA(new.data) F(outdd) LIKE(old.data) NEW"
          "EXECIO 10 DISKW outdd (STEM NEWVAR."

+------------------------------------------------------------------------------+
| Problems with REXX encountered so far:                                       |
|                                                                              |
|     REXX calling a TSO clist, where the TSO CLIST got a RC=4 within          |
|     terminated the TSO clist by REXX.   Problem solved by the addition       |
|     of  CONTROL NOFLUSH and CONTROL FLUSH around  code within the            |
|     TSO clist.  The TSO clist worked fine by itself and within other         |
|     TSO clists.                                                              |
|                                                                              |
|     The other problem encountered is the old TSO macro clist problem         |
|     -- creating a DATALINE where the content contains an  quote (single or   |
|     double) or an ampersand.                                                 |
|                                                                              |
|     The correct solutions in CLIST is                                        |
|          ISREDIT LINE_AFTER lptr = (LINEDATA)                                |
|                  (*** where LINEDATA is a variable, do not use ampersands on |
|      this one ***)                                                           |
|                                                                              |
|     The correct solutions in REXX  is                                        |
|          "LINE_AFTER" lptr"= (LINEDATA)"                                         |
|                  (*** where LINEDATA is a variable ***)                      |
|                                                                              |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
| This  sequence  is  to pull out the datasetname from a line of code if it is |
| there.                                                                       |
|                                                                              |
| Will it work if there is not comma at end                                    |
|      DISP=SHR,DSN=xxxxxx.xxxxxx                                              |
|                                                                              |
|  IF POS("DSN=",inline)<>0 THEN,                                                |
|     PARSE VAR inline . "DSN=" DSN "," .                                          |
+------------------------------------------------------------------------------+

REXX, insertion of commas into numeric fields

+------------------------------------------------------------------------------+
| REXX does not provide any Picture type editing capability.    The  following |
| coding  demonstrates  how  one can insert commas into the numeric output for |
| readability.                                                                 |
+------------------------------------------------------------------------------+
| /*** 05/20/94 19:16:45 FROM IS03.PC.CMD(SRCHALL) -- LINES 94-101 */          |
|                                                                              |
| line = substr(oldkey,1,46),                                                  |
|       right(insert_commas(totdir),12);                                       |
| call lineout file2,line                                                      |
| line = substr('    ',1,46) '------------';                                   |
| call lineout file2,line                                                      |
| line = substr("Total in all directories",1,46),                                |
|      right(insert_commas(totall),12);                                        |
| call lineout file2,line                                                      |
|                                                                              |
| /*** 05/20/94 19:19:14 FROM IS03.PC.CMD(SRCHALL) -- LINES 171-186 */         |
|                                                                              |
| Insert_commas: Procedure;                                                    |
|       /**** Picture/Edit function for REXX */                                |
|       /**** created by John Kennedy for D.McRitchie 03/16/94*/               |
|       /**** fractions and negative numbers added D.McR */                    |
|    Parse arg Integer"."Fraction;                                               |
|    Group = Length(Integer) - 2;                                              |
|    Edited = Substr(Integer, Max(Group, 1));                                  |
|    Old_group = Group;                                                        |
|    Do while (Old_group > 1);                                                 |
|       Group = Max(1, Old_group - 3);                                         |
|       Group_length = Old_group - Group;                                      |
|       Edited = Substr(Integer, Group, Group_length)","Edited;                  |
|       Old_group = Group;                                                     |
|    End;                                                                      |
|    If Fraction \= "" then Edited = Edited"."Fraction;                            |
|    Return Strip(Edited);                                                     |
+------------------------------------------------------------------------------+

+------------------------------------------------------------------------------+
|+---------------------------------------------------------------------------+ |
||  Imbedded file listings:  Although a specific macro was created  here  to | |
||  effect     imbeds    without    any    conversion    change/loss,    the | |
||  'SCRIPT.r40.MACLIB(IMFILE)' (current $DCF=4.0.0)  macro will do at least | |
||  as well.  The IMFILE macro relies on the of the .PX Script control word. | |
||  Usage would be as follows:                                               | |
||                                                                           | |
||      .dd member dsn 'SYS1.USERPROC(member)'                               | |
||      .imfile member                                                       | |
|+---------------------------------------------------------------------------+ |
+------------------------------------------------------------------------------+
oInteresting point:  In the above the ISREDIT LABEL would  not  work  until  the
word LABEL was capitalized.

In  a  REXX  execute it is much easier to pass quotes around a parameter than to
pass quotes with a token in a clist.

TOKEN is basically a simplified version of PATTERN, which was used  as  a  basis
for  determining  coding  changes  needed  in  converting  the  PATTERN clist in
"IS03.LIBR.CLIST(PATTERN)"      to     the     PATTERN     REXX     execute     in
"IS03.LIBR.EXEC(PATTERN)".        Both forms of PATTERN will be shown below.   The                                                                                    . 
clist will be shown first.

     PATTERN   'IS03.LIBR.CLIST(PATTERN)'         macro clist pattern
     PATTERN   'IS03.LIBR.EXEC(PATTERN)'          REXX exec macro pattern
     PATTERN   'IS03.LIBR.TEXT(PATTERN)'          script   doc.   pattern   (not
shown)
     QHELP     'sys1.tsoclist(QHELP)'             tso  help  info  into  file in
edit
     QHELP@    'sys1.tsoclist(QHELP@)'
     REXX      'IS03.LIBR.CLIST(REXX)'            set up to find within .EXEC
     REXX      'IS03.LIBR.EXEC(REXX)'             find within .EXEC afterwards
     REX#TERM  'IS03.LIBR.EXEC(REX#TERM)'         ex. changes to terminals list
     home      'IS03.libr.clist(home)'            set up  pfkeys  for  home  (no
good)
     token     'IS03.LIBR.CLIST(GDGNEW)'

The above clist is probably working.  If must be invoked in one of the following
forms.
       ===> TSO HOME H
       ===> TSO HOME W

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Some Things to AVOID in MACROS or at least be aware of




Placing NOTELINE after .ZLAST

Placing  a  NOTELINE after .ZLAST can cause interference with later macro use as
illustrated in the following MACRO.  Such practice can interfere  with  the  CUT
macro for instance.   (ETR 8E852,149)
     EDIT---- IS03.LIBR.CLIST(zz) - 01.00 - COLUMNS 001 124
     COMMAND ===>                                 SCROLL ===> CSR
     ****** **************************** TOP OF DATA ***************************
     **
     000001  ADDRESS "ISREDIT";      /*REXX*/
     000002  /* 1. RUN AS IS                                  */
     000003  /* 2. MOVE BOTTOM NOTELINE CREATED AFTER LINE 08 */
     000004  /* 3. CC RANGE,  CC ON LINE 08 AND 09            */
     000005  /* 4. C3               ON LINE 08                */
     000006  /* 5. C999             ON LINE 08 -- FAILS RC=16 */
     000007  /*      FAILS RC=28  W/O   CONTROL ERRORS RETURN */
     000008  /* 6. C2               ON LINE 08 -- FAILS RC=26 */
     000009  /*      FAILS RC=28  W/O   CONTROL ERRORS RETURN */
     000010  /******************************************************************/
     000011  /* 19:45:16  RANGE C IS 000001 TO 000016, CMD=, RC=4    --STEP 1. */
     000012  /* 19:45:30  RANGE C IS 000008 TO 000009, CMD=C, RC=0   --STEP 3. */
     000013  /* 19:45:38  RANGE C IS 000008 TO 000009, CMD=C, RC=0   --STEP 4. */
     000014  /* 19:45:50  RANGE C IS 000000 TO 000000, CMD=C, RC=16  --STEP 5. */
     000015  /* 19:46:59  RANGE C IS 000000 TO 000000, CMD=C, RC=16  --STEP 6. */
     000016  /******************************************************************/
     000017  "MACRO NOPROCESS"
     000018  ADDRESS "ISPEXEC" "CONTROL ERRORS RETURN"
     000019  "PROCESS RANGE C";LASTCC=RC
     000020  IF LASTCC /=0 THEN SAY 'PROCESS RANGE C, LASTCC='LASTCC
     000021  ZEDSMSG = ZERRSM
     000022  ZEDLMSG = ZERRMSG ZERRLM
     000023  ADDRESS "ISPEXEC" "SETMSG MSG(ISRZ000)"
     000024
     000025  "(CMD) = RANGE_CMD"
     000026  "(LABF) = LINENUM .ZFRANGE"
     000027  "(LABL) = LINENUM .ZLRANGE"
     000028 "LINE_BEFORE .ZF = NOTELINE """TIME('N'),
     000029   " RANGE C IS" LABF "TO" LABL", CMD="CMD", RC="LASTCC""""
     000030 "LINE_AFTER .ZL = NOTELINE 'XXXXX'"
     ****** ************************* BOTTOM OF DATA ***************************
     **

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

  [Appendix-V INDEX]
List of Manuals referred to in this chapter (NCAPXV)

This list may serve as a guide to examining and/or ordering manuals; however, please do not order manuals blindly.  Please verify beforehand that the manual numbers are still current.  If you order an out of date manual you could be paying a higher price for obsolete material.  Never include the 1 or 2 digit suffix number when ordering.  Even though a manual is listed you may have absolutely no interest in the manual.  Manuals may be examined in the SYSTECH library but are not to be removed from the library.  The SYSTECH library and it's contents are for the express needs of SYSTECH personnel.

Do NOT order the following manuals by name or number  These was created a long time ago and the manuals have probably changed.  But this may help you find the manuals that you need.

     SC34-4253     EDIT MACROS
     GC28-1274     TSO Terminal User's Guide
     SC28-1876     TSO Extensions CLISTs.
     SC34-4112     ISPF Dialog Management Guide and Reference %OK%
     SC34-4117     ISPF Customization
     SC28-1883     TSO/E Ver 2 -- REXX Reference
     SC28-1882     TSO/E Ver 2 -- REXX User's Guide, for usage information
You can obtain more current information on the IBM BookManager« BookServer Library http://ppdbooks.pok.ibm.com:80/cgi-bin/bookmgr/bookmgr.cmd/library

I have created a list of some of the manuals available there.



  [Appendix-V INDEX]
You are visitor  ctr since count started May 31, 1997.

Comment and Related Information

Please send your comments concerning my pages or materials to:  David using send email comments

Disclaimer and site usage:  Material at The REXX Macros Toolbox is available without warranty of any kind.  Redistribution of source, coding and documentation other than from this site is prohibited.

Copyright © 1995 - 2006, F. David McRitchie, All Rights Reserved