I have an exec that I defined in the ISPF ZSTART variable that dynamically adds 
my personal fast path commands to the ispf commands table each time ISPF starts 
- no need to restart for them to be available.


Lionel B. Dyck <><
Github: https://github.com/lbdyck

“Worry more about your character than your reputation. Character is what you 
are, reputation merely what others think you are.”   - - - John Wooden

-----Original Message-----
From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On Behalf Of Tom 
Marchant
Sent: Tuesday, January 23, 2024 7:55 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Custom ISPF command

"Obviously, you still need to restart ISPF to enable the new commands."

It isn't obvious to me. For another example of modifying the command table 
dynamically, see Gilbert Saint-Fluor's FASTPATH command on the CBT tape. I use 
it regularly. Issuing the FASTPATH command within ISPF adds some commands to 
the command table and they are immediately usable.

--
Tom Marchant

On Tue, 23 Jan 2024 14:03:30 +0000, Robert Prins <robert.ah.pr...@gmail.com> 
wrote:

>Here's the free-of-any errorchecking, I've only ever used it myself, 
>small exec to update command tables using the standard ISPF dialog. 
>Obviously, you still need to restart ISPF to enable the new commands. 
>And of course saving them, like I do, in my private EXEC library could be 
>omitted.
>
>Enjoy
>
>/* REXX exec to update my command tables                              */
>/*** trace ?r ***************************************************** \| *
>*               (C) Copyright Robert AH Prins, 2009-2010               *
>***********************************************************************
>*
>*  ------------------------------------------------------------------  *
>* | Date       | By   | Remarks                                      | *
>* |------------+------+----------------------------------------------| *
>* |            |      |                                              | *
>* |------------+------+----------------------------------------------| *
>* | 2010-05-13 | RAHP | Use ISPTABL, not ISPPROF                     | *
>* |------------+------+----------------------------------------------| *
>* | 2009-04-16 | RAHP | Now RAHP- and HERECMDS                       | *
>* |------------+------+----------------------------------------------| *
>* | 2009-04-08 | RAHP | Initial version                              | *
>* |------------+------+----------------------------------------------| 
>*
>************************************************************************
>* UCMDS is a REXX exec to update my site-independent (RAHPCMDS) and    *
>* site-specific (HERECMDS) tables. Because it is not possible to       *
>* update an open ISPF command table, this exec copies it to $$$$CMDS,  *
>* invokes ISPUCM (the command table update program) with a parameter   *
>* of $$$$ and then copies the updated table back to USERCMDS. Note     *
>* that is necessary to restart ISPF to enable any new commands.        *
>*                                                                      *
>* Copies of the new command tables are saved to my exec library.       *
>*                                                                      *
>* Note:                                                                *
>*                                                                      *
>* *"GETVAR" is my routine that retrieves site-dependent information,*    *
>* *such as the names of my datasets allocated to ISPF etc.*              *
>************************************************************************
>* Send questions, suggestions and/or bug reports to:                   *
>*                                                                      *
>* rob...@prino.org / robert.ah.pr...@gmail.com                         *
>*                                                                      *
>* Robert AH Prins                                                      *
>* Ozkiniu gatve 48                                                     *
>* Vilnius 08405                                                        *
>* Lithuania                                                            *
>************************************************************************
>* This program is free software: you can redistribute it and/or        *
>* modify it under the terms of the GNU General Public License as       *
>* published by the Free Software Foundation, either version 3 of       *
>* the License, or (at your option) any later version.                  *
>*                                                                      *
>* This program is distributed in the hope that it will be useful,      *
>* but WITHOUT ANY WARRANTY; without even the implied warranty of       *
>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         *
>* GNU General Public License for more details.                         *
>*                                                                      *
>* You should have received a copy of the GNU General Public License    *
>* along with this program. If not, see <http://www.gnu.org/licenses/>  
>* 
>***********************************************************************
>/
>parse source source
>parse value source with . . moi .
>
>user.  = -1
>user.1 = 'RAHP'
>user.2 = 'HERE'
>
>"ispexec vget (ucmds) shared"
>
>if rc = 0 then
>  do
>    "ispexec verase (ucmds) shared"
>
>    temp = copies('$', length(ucmds))
>
>    "isredit macro"
>    "isredit (MEM) = member"
>
>    select
>      when mem = temp'CMDS' then
>        "isredit c '"temp"CMDS' '"ucmds"CMDS' first"
>
>      /* irrelevant code removed */
>
>      otherwise
>    end
>
>    "isredit end"
>
>    exit
>  end
>
>!tabl = getvar('ispTABL')
>
>drop isptabl
>drop exec
>
>"ispexec lminit dataid("isptabl") ddname(isptabl) enq(shrw)"
>"ispexec lminit dataid("exec")",
>               "dataset('"getvar('execRAHP')"') enq(shrw)"
>
>do u = 1 by 1 while user.u \= -1
>  temp  = copies('$', length(user.u))
>  ucmds = user.u
>
>  "alloc f(i) da('"!tabl"("user.u"cmds)') shr reu"
>  "alloc f(o) da('"!tabl"("temp"cmds)') shr reu"
>
>  "execio * diskr i (finis"
>  "execio" queued() "diskw o (finis"
>
>  "ispexec select pgm(ispucm) parm("temp")"
>
>  "ispexec vput (ucmds) shared"
>  "ispexec edit dataid("isptabl") member("temp"cmds) macro("moi")"
>
>  "execio * diskr o (finis"
>  "execio" queued() "diskw i (finis"
>
>  "free f(i)"
>  "free f(o)"
>
>  "ispexec lmcopy fromid("isptabl")   todataid("exec")",
>                 "frommem("temp"cmds) tomem("user.u"cmds) replace"
>end
>
>"ispexec lmfree dataid("exec")"
>"ispexec lmfree dataid("isptabl")"
>exit
>
>Robert
>--
>Robert AH Prins
>robert(a)prino(d)org
>The hitchhiking grandfather <https://prino.neocities.org/index.html>
>Some REXX code for use on z/OS
><https://prino.neocities.org/zOS/zOS-Tools.html>
>
>On Tue, 23 Jan 2024 at 07:43, Jon Perryman <jperr...@pacbell.net> wrote:
>
>> >Create a site ISPF command table and add your commands to that.
>>
>> An alternative to creating a site ISPF command table is to 
>> dynamically add ISPF commands. Command tables are ISPF tables that 
>> can be updated using TBADD, TBDEL and TBUPD. ISPCMDS is always open 
>> (probably ISRCMDS too). When you start ISPF, you can specify a REXX 
>> to be run that TBADD's your commands and they will remain in effect 
>> while ISPF is running. I never experimented with NEWAPPL commands so 
>> I can't tell you if that command table is automatically closed or remains 
>> open until ISPF is terminated.

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions, send email to 
lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to