CPX2313. Remember it? Back in the days of System/38, IBM created the ability to press the System Request key (Shift+Attn on some keyboards), which allowed you to select a menu option or simply press Enter to view the System Request menu.
If you look at the message text for CPX2313, you'll see the list of CL commands that run in response to the selected SysReq menu options. Each command is in a fixed location in the message text (every 11 positions) and is offset by 1. This means that option 2 is the first menu choice stored in the message. Of course, as time passed, IBM added more commands and features, so this number scheme is not strictly valid anymore.
On my system (OS/400 V4R5), the following CL commands are specified in the CPX2313 message (yours may vary, depending on your OS):
ENDRQS (End Request)
DSPJOB (Display Job)
DSPMSG (Display Message)
SNDMSG (Send Message)
SIGNOFF (Sign Off)
DSPMSG (Display Message QSYSOPR)
DSCJOB (Disconnect Job)
DSPWSUSR (Display Workstation User)
ENDRDBRQS (End Relational Database Request)
The entries marked with numbers indicate the SysReq menu option that is used to evoke them. The entries marked with question marks (?) are displayed only when the job is in the proper context to use/display those options. If your session has passed through to another iSeries, then the Disconnect Job option is visible on the menu.
The traditional SysReq menu looks something like this:
Select one of the following:
1. Display sign on for alternative job
2. End previous request
3. Display current job
4. Display messages
5. Send a message
6. Display system operator messages
7. Display work station user
80. Disconnect job
90. Sign off
If we look at the message text of CPX2313, we see the CL commands behind the SysReq menu spaced out every 11 positions. The first-level message text appears as follows:
SIGNOFF DSPMSG DSCJOB DSPWSUSR ENDRDBRQS '
The first four commands relate to the menu options (offset by 1), so 2=End Request, 3=Display Job, 4=Display Message, and 5=Send Message. After that, it gets a little sketchy.
Command Line Access from SysReq
In some shops, it would be great to be able to access the command line from the SysReq menu. A long-running routine can often be a problem, and you may want to do something other than just display job information or terminate the last request.
This is where knowing about CPX2313 comes in handy. You can simply change the message text and have those options behind SysReq run different commands.
For example, on my system, I've changed the DSPJOB command so that it is WRKJOB. This allows me to view the Work with Job menu, which includes a command line, as opposed to the Display Job menu, which does not.
Of course, various security issues come into play, and if your system security relies on users not knowing about certain things, then you need to keep this change quiet.
I know of a few people who have changed the SNDMSG command as well. They've changed it to anything from a user-written CL command that calls the Command Line window API to Command Entry itself. I don't bother with that because WKRJOB gives me what I need.
About 18 years ago, I started selling a tool named SUSPENSE! for the System/38. It allowed you to leave CPX2313 intact and, instead, gave you the ability to type a CL command into the "system request line." This capability became so popular that IBM added a hook to the AS/400 System Entry Point Table (SEPT) that allows any programmer to do a similar function. I've long since stopped selling SUSPENSE!, but the capability is there today with the OS/400 or i5/OS hook or by modifying CPX2313 to do something just as cool and do it a whole lot easier.
Bob Cozzi is a programmer/consultant, writer/author, and software developer of the RPG xTools, a popular add-on subprocedure library for RPG IV. His book The Modern RPG Language has been the most widely used RPG programming book for nearly two decades. He, along with others, speaks at and runs the highly-popular RPG World conference for RPG programmers.