Programming Assembler
Programming Assembler
Programming: Assembler
IBM
SC27-2858-03
IBM Tivoli NetView for z/OS
Version 6 Release 2 Modification 1
Programming: Assembler
IBM
SC27-2858-03
Note
Before using this information and the product it supports, read the information in “Notices” on page 295.
This edition applies to version 6, release 2, modification 1 of IBM Tivoli NetView for z/OS (product number
5697-NV6 ) and to all subsequent versions, releases, and modifications until otherwise indicated in new editions.
This edition replaces SC27-2858-02.
© Copyright IBM Corporation 1997, 2015.
US Government Users Restricted Rights – Use, duplication or disclosure restricted by GSA ADP Schedule Contract
with IBM Corp.
Contents
Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
iv Programming: Assembler
Format of the Entry in the Directory. . . . . . . . . . . . . . . . . . . . . . . . . . 101
Example of a User Function Directory . . . . . . . . . . . . . . . . . . . . . . . . . 102
Contents v
DSIHREGS: High-Performance Transport Application Registration. . . . . . . . . . . . . . . . . 179
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
DSIHSNDS: Send High-Performance Message Unit . . . . . . . . . . . . . . . . . . . . . . 183
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
DSIID: Store SYSMOD Level in CSECT . . . . . . . . . . . . . . . . . . . . . . . . . . 190
DSIKVS: Keyword/Value Services . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
DSILCS: Obtain/Release Control Blocks . . . . . . . . . . . . . . . . . . . . . . . . . 192
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
DSILOD: Load User-Defined Module . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
DSIMBS: Message Build Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
DSIMDS: Message Definition Services . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Defining Messages on Disk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
User Message Definition Module Examples . . . . . . . . . . . . . . . . . . . . . . . 202
DSIMMDBS: Call DSIMMDB Service . . . . . . . . . . . . . . . . . . . . . . . . . . 202
DSIMQS: Message Queuing Services . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Return Codes in Register 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
DSINOR: Resource Object Data Manager . . . . . . . . . . . . . . . . . . . . . . . . . 208
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
DSIPAS: Parameter Alias Services . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
DSIPOP: Remove Long-Running Command . . . . . . . . . . . . . . . . . . . . . . . . 211
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
DSIPOS: ECB Post Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
DSIPRS: Parsing Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Parsing Services Module Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 216
DSIPSS: Presentation Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
DSIPUSH: Establish Long-Running Command . . . . . . . . . . . . . . . . . . . . . . . 223
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
DSIQOS: Query Operator Services . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
DSIQRS: Query Resource Services . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
MNOTES Issued . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
DSIRDS: Resource Definition Services . . . . . . . . . . . . . . . . . . . . . . . . . . 232
DSIRXEBS: Get an EVALBLOK . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
DSISRCMV: Search for Subvector or Subfield . . . . . . . . . . . . . . . . . . . . . . . . 233
DSISYS: Operating System Indicator. . . . . . . . . . . . . . . . . . . . . . . . . . . 235
DSITECBS: Manage a Dynamic ECB List for DSTs . . . . . . . . . . . . . . . . . . . . . . 235
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
DSIVARS: Variable Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
DSIWAT: ECB Wait Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
DSIWCS: Write Console Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Return Code in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
DSIWLS: Write Log Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
DSIZCSMS: CNM Data Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Minor Return Codes in Register 0 . . . . . . . . . . . . . . . . . . . . . . . . . . 248
CNM Data Services Module Examples . . . . . . . . . . . . . . . . . . . . . . . . . 248
DSIZVSMS: VSAM Data Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Minor Return Codes in Register 0 . . . . . . . . . . . . . . . . . . . . . . . . . . 251
DSI6REGS: LU 6.2 Registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
vi Programming: Assembler
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
DSI6SNDS: Send a Message Unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Return Codes in Register 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Notices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Programming Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Privacy policy considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Contents vii
viii Programming: Assembler
Figures
1. Overview of Control Block Interconnections for User-Written Programming . . . . . . . . . . . . 8
2. Using Macros to Communicate from an OST . . . . . . . . . . . . . . . . . . . . . . 11
3. Example of Title-Line Output . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4. DSIEX02A, DSIEX16, DSIEX16B, and DSIEX17 Interface . . . . . . . . . . . . . . . . . . . 42
5. Automation Internal Function Request . . . . . . . . . . . . . . . . . . . . . . . . 62
6. Example of Control Blocks Used by Command Processors . . . . . . . . . . . . . . . . . . 64
7. Sample Code to Access a Command Buffer . . . . . . . . . . . . . . . . . . . . . . . 65
8. Subtask Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
9. Structure of a Data Services Command Processor . . . . . . . . . . . . . . . . . . . . . 94
10. Example of Program Design for Data Services Requests . . . . . . . . . . . . . . . . . . . 95
11. Example of a Function Package Directory . . . . . . . . . . . . . . . . . . . . . . . 102
12. Buffer Header (BUFHDR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
13. DSIAIFRO Chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
14. Example of an AIFR Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
15. Source Object Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
16. Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
17. Example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
18. Control Blocks Used by ATF Modules . . . . . . . . . . . . . . . . . . . . . . . . 290
Intended audience
This publication is for system programmers who are knowledgeable about
assembler language and familiar with the functions provided by the NetView
program. This publication is also useful for operators.
Publications
This section lists publications in the IBM Tivoli NetView for z/OS library and
related documents. It also describes how to access Tivoli publications online and
how to order Tivoli publications.
Related publications
You can find additional product information on the NetView for z/OS web site at
http://www.ibm.com/software/tivoli/products/netview-zos/.
For information about the NetView Bridge function, see Tivoli NetView for OS/390
Bridge Implementation, SC31-8238-03 (available only in the V1R4 library).
For NetView for z/OS terms and definitions, see the IBM Terminology web site.
The following terms are used in this library:
NetView
For the following products:
v Tivoli NetView for z/OS version 6 release 2 modification 1
v Tivoli NetView for z/OS version 6 release 2
v Tivoli NetView for z/OS version 6 release 1
v Tivoli NetView for z/OS version 5 release 4
v Tivoli NetView for z/OS version 5 release 3
v Tivoli NetView for OS/390® version 1 release 4
v NetView releases that are no longer supported
CNMCMD
For the CNMCMD member and the members that are included in it using
the %INCLUDE statement
CNMSTYLE
For the CNMSTYLE member and the members that are included in it using
the %INCLUDE statement
DSIOPF
For the DSIOPF member and the members that are included in it using the
%INCLUDE statement
PARMLIB
For SYS1.PARMLIB and other data sets in the concatenation sequence
MVS™ For z/OS operating systems
MVS element
For the base control program (BCP) element of the z/OS operating system
VTAM®
For Communications Server - SNA Services
IBM Tivoli Network Manager
For either of these products:
v IBM Tivoli Network Manager
v IBM Tivoli OMNIbus and Network Manager
IBM Tivoli Netcool®/OMNIbus
For either of these products:
Unless otherwise indicated, topics to programs indicate the latest version and
release of the programs. If only a version is indicated, the topic is to all releases
within that version.
Note: If you print PDF documents on other than letter-sized paper, set the option
in the File > Print window that enables Adobe Reader to print letter-sized pages
on your local paper.
Ordering publications
You can order many Tivoli publications online at http://www.ibm.com/e-
business/linkweb/publications/servlet/pbi.wss
Accessibility
Accessibility features help users with a physical disability, such as restricted
mobility or limited vision, to use software products successfully. Standard shortcut
and accelerator keys are used by the product and are documented by the operating
system. Refer to the documentation provided by your operating system for more
information.
For additional information, see the Accessibility appendix in the User's Guide:
NetView.
Downloads
Clients and agents, and several free NetView applications can be downloaded from
the NetView for z/OS support web site:
http://www.ibm.com/software/sysmgmt/products/support/
IBMTivoliNetViewforzOS.html
Support information
If you have a problem with your IBM software, you want to resolve it quickly. IBM
provides the following ways for you to obtain the support you need:
Online
Access the Tivoli Software Support site at http://www.ibm.com/software/
sysmgmt/products/support/index.html?ibmprd=tivman. Access the IBM
Software Support site at http://www.ibm.com/software/support/
probsub.html.
IBM Support Assistant
The IBM Support Assistant is a free local software serviceability workbench
that helps you resolve questions and problems with IBM software
products. The Support Assistant provides quick access to support-related
information and serviceability tools for problem determination. To install
the Support Assistant software, go to http://www.ibm.com/software/
support/isa/.
Troubleshooting information
For more information about resolving problems with the NetView for z/OS
product, see the IBM Tivoli NetView for z/OS Troubleshooting Guide.
Additional support for the NetView for z/OS product is available through
the NetView user group on Yahoo at http://groups.yahoo.com/group/
NetView/. This support is for NetView for z/OS customers only, and
registration is required. This forum is monitored by NetView developers
who answer questions and provide guidance. When a problem with the
code is found, you are asked to open an official problem management
record (PMR) to obtain resolution.
Typeface conventions
This publication uses the following typeface conventions:
Bold
v Lowercase commands and mixed case commands that are otherwise
difficult to distinguish from surrounding text
v Interface controls (check boxes, push buttons, radio buttons, spin
buttons, fields, folders, icons, list boxes, items inside list boxes,
multicolumn lists, containers, menu choices, menu names, tabs, property
sheets), labels (such as Tip:, and Operating system considerations:)
v Keywords and parameters in text
Italic
v Citations (examples: titles of publications, diskettes, and CDs
v Words defined in text (example: a nonswitched line is called a
point-to-point line)
v Emphasis of words and letters (words as words example: “Use the word
that to introduce a restrictive clause.”; letters as letters example: “The
LUN address must start with the letter L.”)
v New terms in text (except in a definition list): a view is a frame in a
workspace that contains data.
v Variables and values you must provide: ... where myname represents...
Monospace
v Examples and code examples
v File names, programming keywords, and other elements that are difficult
to distinguish from surrounding text
v Message text and prompts addressed to the user
v Text that the user must type
v Values for arguments or command options
When using the Windows command line, replace $variable with %variable% for
environment variables and replace each forward slash (/) with a backslash (\) in
directory paths. The names of environment variables are not always the same in
the Windows and UNIX environments. For example, %TEMP% in Windows
environments is equivalent to $TMPDIR in UNIX environments.
Note: If you are using the bash shell on a Windows system, you can use the UNIX
conventions.
Symbols
The following symbols are used in syntax diagrams:
►► Marks the beginning of the command syntax.
► Indicates that the command syntax is continued.
| Marks the beginning and end of a fragment or part of the command
syntax.
►◄ Marks the end of the command syntax.
Parameters
The following types of parameters are used in syntax diagrams:
Required
Required parameters are shown on the main path.
Optional
Optional parameters are shown below the main path.
Default
Default parameters are shown above the main path. In parameter
descriptions, default parameters are underlined.
When you issue a command, spaces are required between the parameters unless a
different separator, such as a comma, is specified in the syntax.
In the following example, the USER command is a keyword, the user_id parameter
is a required variable, and the password parameter is an optional variable.
►► USER user_id ►◄
password
When examples of commands are shown, commas are also used to indicate the
absence of a positional operand. For example, the second comma indicates that an
optional operand is not being used:
COMMAND_NAME opt_variable_1,,opt_variable_3
You do not need to specify the trailing positional commas. Trailing positional and
non-positional commas either are ignored or cause a command to be rejected.
Restrictions for each command state whether trailing commas cause the command
to be rejected.
Abbreviations
Command and keyword abbreviations are listed in synonym tables after each
command description.
Syntax examples
The following examples show the different uses of syntax elements:
v “Required syntax elements”
v “Optional syntax elements”
v “Default keywords and values” on page xx
v “Multiple operands or values” on page xx
v “Syntax that is longer than one line” on page xx
v “Syntax fragments” on page xx
►► REQUIRED_KEYWORD required_variable ►◄
A required choice (two or more items) is shown in a vertical stack on the main
path. The items are shown in alphanumeric order.
►► REQUIRED_OPERAND_OR_VALUE_1 ►◄
REQUIRED_OPERAND_OR_VALUE_2
►► ►◄
OPTIONAL_OPERAND
A required choice (two or more items) is shown in a vertical stack below the main
path. The items are shown in alphanumeric order.
KEYWORD1 OPTION=*
►► COMMAND_NAME ►◄
KEYWORD1 OPTION= *
KEYWORD2 VALUE1
KEYWORD3 VALUE2
►► KEYWORD= ( ▼ value_n ) ►◄
,
▼ REPEATABLE_OPERAND_OR_VALUE_1
REPEATABLE_OPERAND_OR_VALUE_2
REPEATABLE_OPERAND_OR_VALUE_3
► OPERAND8 ►◄
Syntax fragments:
Some syntax diagrams contain syntax fragments, which are used for lengthy,
complex, or repeated sections of syntax. Syntax fragments follow the main
diagram. Each syntax fragment name is mixed case and is shown in the main
diagram and in the heading of the fragment. The following syntax example shows
a syntax diagram with two fragments that are identified as Fragment1 and
Fragment2.
xx Programming: Assembler
►► COMMAND_NAME Fragment1 ►◄
Fragment2
Fragment1
Fragment2
When testing new command processors, use RES=N in the CMDDEF definition
statement to replace the object code without recycling the NetView program. You
can use the ADDCMD and DELCMD commands to dynamically add or delete
command definitions.
To avoid possible conflict between your code and NetView services currently in
use, consider running the code on a separate NetView program in a test
environment, or during a time of day when the NetView program is not used
heavily. To test code, you must restart the NetView program, except for predefined
nonresident command processors. If there is little risk of conflict, you can simply
add code to the NetView production library currently in use.
When the test system is running, perform the test scenarios and verify that the
results and output of your code are correct. If they are correct, put the code into
production and begin using it normally.
2 Programming: Assembler
Chapter 2. Designing Assembler Modules
This section reviews NetView services available for user-coded command
processors, installation exits, and user subtasks. See Chapter 8, “Macros,” on page
155 for more information about the NetView service macros described in this
chapter. See Appendix A, “Assembler Samples,” on page 271 for assembler coding
samples using these macros.
Most NetView service macros can be used only under tasks attached by the
NetView program using facilities such as the START, AUTOTASK, and ATTACH
commands. If you attach a subtask by other means, such as by using the MVS
attach macros or the REXX ADDRESS ATTCHPGM, then the programs running on
the attached task cannot use any NetView service requiring a Service Work Block
(SWB) or a Task Vector Block (TVB). Two NetView service macros that are available
under any subtask in the NetView address space are Control Block Services
(DSICBS) and the Locate Control Block Service (DSILCS). For all NetView service
macros requiring an SWB, the SWBTIB field must contain the address of the
DSITIB control block dedicated to the particular task (TCB) at the time the
NetView program performed the attach. Note that this control block contains a
pointer (TIBTVB) to the TVB that governs operation of the subtask. In all cases
where the NetView program calls assembler customization, a reference to the TVB
or TIB is provided:
v USERTVB for user exits; see “DSIUSE: Installation Exit Parameter List” on page
151 for additional information about user exits.
v CWBTIB for commands; see “DSICWB: Command Work Block” on page 116 for
additional information about commands.
v Register 1 (TVB) for optional tasks.
Task Structure
The NetView task environment consists of a main task (MNT) and six types of
subtasks.
The main task initializes the NetView program. It provides an environment for the
subtasks and oversees their creation and cleanup. The main task also provides
limited installation exits that can be used to modify processing under the main
task.
For more information about the NetView task structure, see the IBM Tivoli NetView
for z/OS Troubleshooting Guide.
Processing Environment
NetView code and user-written code have control in a problem program state. Both
types of code also have control with a user memory protection key. Unless your
system programmers set up special provisions, this is key 8. NetView and all
user-written code given control under the NetView program are authorized. You
have the option of calling privileged system services, entering supervisor state, or
changing the memory protection key. However, return control to the NetView
program in the same program state and memory protection key as when you
entered the user code.
4 Programming: Assembler
Designing Assembler Modules
Except as noted in Chapter 7, “Control Blocks,” on page 103, all NetView control
blocks are accessible with the user key. Unless Chapter 8, “Macros,” on page 155
specifically notes otherwise, call all NetView services in problem program state and
the user key.
When the NetView program calls user-written code, the TVBINXIT bit can be
tested to determine the environment under which the user-written code is
processing. When a NetView task is initially dispatched, the TVBINXIT bit is off. If
the task calls user-written code at this time, the code processes under the mainline
environment.
When the operating system interrupts mainline processing, the NetView program
sets the TVBINXIT bit on in the DSITVB control block of the processing task. Any
user-written code called at this time is processed under the TVBINXIT=ON
environment.
Each task has unique restrictions that limit the types of user-written code it can
process. Table 1 indicates the types of code that can run under each task in the
mainline environment. The figure also indicates the types of code that can run
when the TVBINXIT bit in the TVB is set on. Because you define the commands
and functions that run under an OPT, that subtask is not included in Table 1.
Table 1. Task Environment for User-Written Programming
Main TVBINXIT
Task OST NNT HCT PPT DST Set On
Installation exit routines v v v v v v
Regular command v v v
processors
Immediate command v v v
processors
Data services command v
processors
Coding Requirements
This section describes the general guidelines to consider when writing your code.
Control blocks and macros in this section are described in more detail in Chapter 7,
“Control Blocks,” on page 103, and in Chapter 8, “Macros,” on page 155.
– Do not issue the DSIDKS macro or any other disk services macros.
v Only immediate commands can be called directly. Use the DSIMQS macro to run
regular commands. For more information, see “Calling Commands” on page 15.
Names of Variables
Do not use the following prefixes for any variable or message you name in your
code:
v Any NetView component prefix, for example:
AAU BNT EGV EZL FLB
BNH CNM EKG FKB FLC
BNI DSI EUY FKV FMG
BNJ DUI EXQ FKW FNA
BNK DWO EYV FKX IHS
v Any NetView control block suffix, such as SWB or PDB
Macro Use
When a NetView macro and an operating system macro perform equivalent
services, use the NetView macro. This ensures that the source code for your
program can be transported across NetView operating systems. If you use an
operating system macro, be careful that its function does not conflict with a
function the NetView program might be performing. For example, if the operating
system macro STIMER is issued under the DSITIMMT, NetView timer services are
disrupted.
Register Use
Use the following guidelines when using registers for installation exit routines,
command processors, and subtasks:
0–15 Save all registers at entry to the user code, and restore them before
returning control to the NetView program.
0, 2–12
Do not rely on the contents of these registers for constant values as entry
to the user code. Their contents vary.
0, 1, 14, 15
Do not rely on these registers after issuing a NetView macro. These
registers are used during macro expansion.
13 Ensure that this register contains the address of a standard 72-byte save
area.
14 Use this register to specify the location in the NetView program to return
control to.
15 Set this register with your return code when exiting from your program.
Reentrant Code
Ensure that your code is reentrant to enable the one copy of the program to be
used concurrently by more than one task. For example, a command processor can
be called from two or more tasks simultaneously and run simultaneously under
multiple tasks.
Reentrant code is not required for certain installation exits or for optional tasks.
See Table 3 on page 23 for more information.
6 Programming: Assembler
Designing Assembler Modules
appropriate services, depending on the current mode of your code. In addition, the
NetView program provides macro parameters where necessary that you can use to
specify 24-bit or 31-bit addressing for your special requirements. (New
called-assembler services require 31-bit addressing, as described in Chapter 9,
“Called Service Routines,” on page 267.) The NetView program also provides
appropriate residency for the control blocks your code accesses, such as USE, CWB,
and BUFHDR. For example, if your command processor is loaded with
AMODE=24, the CWB passed to it resides below 16 megabytes (MB). The Message
Queueing Service (DSIMQS) ensures only that the message buffers are below the
16 MB line if a user-optional task is link-edited with RMODE(24) and AMODE(24).
To conserve storage below the 16 MB line and therefore minimize the resources
needed to copy buffers, use 31-bit residency except when limited by your use of
interfaces.
Control Blocks
Your code must include the necessary control block mappings for the module you
are writing and establish addressability to each of the control blocks. For the
specific information you want written to these modules, see one of the following
chapters:
v Chapter 3, “Writing Installation Exit Routines,” on page 23
v Chapter 4, “Writing Command Processors,” on page 59
v Chapter 5, “Writing User Subtasks,” on page 79
For supported control blocks and corresponding fields, see Chapter 7, “Control
Blocks,” on page 103. Fields not described in that section are not part of the
programming interface.
Note: Each TVB addresses an associated task information block (TIB) and the
main vector table (MVT).
v For command processors, include the command work block (CWB). Include
these control blocks because the CWB contains the addresses of an associated
SWB, PDB, and BUFHDR (defined with the TIB DSECT). In addition, data
services command processors (DSCPs) require the data services request block
(DSRB).
v For user subtasks, include the TVB and any other control blocks necessary for
your user-defined task.
Depending on the particular service facilities your program uses, you might need
to include other control blocks.
Figure 1 on page 8 illustrates the interconnections among the control blocks. The
field displacements suggested in this figure are not representative of the field
displacements. The subtasks diagram in this figure shows that for each type of
user-written code, the TVB provides access to the MVT and to the SVL.
BUFHDR
USERMSG SWB
USERTVB
USERPDB TVBTIB
TIB
PDB
TVBMVT
TIBTVB
MVT
Command CWB
Processors
CWBBUF
PDB
CWBPDB
SWB BUFHDR
CWBSWB
TIB PDBBUFA
CWBTIB
SWBTIB PDBCMDA
TIBTVB
SCE
TVB
MVT
TVBTIB
TIB
TVBTIB
MVT
TIBTVB
TVBMVT
MVTSVL
HDRNEXTM
BUFHDR
Use the DSICBS macro to include DSECTs for the appropriate control blocks. For
example, you can code the DSICBS macro in a command processor as follows:
DSICBS DSICWB,DSISWB,DSIMVT,DSIPDB,DSITVB,PRINT=NO
8 Programming: Assembler
Designing Assembler Modules
This instruction includes the CWB, SWB, MVT, PDB, and TVB. This instruction
also specifies, with PRINT=NO, that control block expansions cannot be printed.
Establishing Addressability
Establish addressability to a control block before referencing fields within that
control block. The following example shows how you can establish addressability
to the MVT for a command processor:
USING DSICWB,1
L REG10,CWBTIB
USING DSITIB,REG10
L REG11,TIBTVB
USING DSITVB,REG11
L REG12,TVBMVT
USING DSIMVT,REG12
The preceding example requests that 4088 bytes of storage be obtained. The
address of the storage is placed in the fullword named STORPTR. The second and
third statements test for a good return code in register 15 before you use the
storage. When the storage is obtained, it is cleared to binary zeros. Except when it
causes a new page to be gotten, DSIGET obtains an additional 8 bytes of storage
that are used by the NetView program to detect storage overlay conditions.
After use, free the storage using the same value for the Q option as you used
previously to get the storage. Also, free non-queued storage; specify the same size
that you specified to get the storage (as shown in the example above where
DSIGET and DSIFRE both specify LV=4088). If you do not specify the same size on
DSIGET and DSIFRE, the NetView program assumes that a storage overlay
condition exists and can cause a memory dump.
Note: Specify the TASKA keyword because it can help you avoid addressing the
wrong TVB. TASKA contains the address of the TVB for the subtask where the
code is running. Use the TASKA parameter for both non-queued (Q=NO) and
queued (Q=YES) storage.
In this example, Q=YES indicates that the NetView program tracks the 4096 bytes
of storage in an internal queue. To support this internal queue, Q=YES gets 16
more bytes of storage than requested. (Q=NO gets 8 more bytes of storage than
requested for storage overlay checking.) If you specify BNDRY=PAGE, the extra
bytes are not received, and page alignment is not affected.
Note: The NetView program ignores any storage length indicated by DSIFRE
when you specify Q=YES.
Message Processing
Message processing in the NetView program includes:
v Creating messages
v Displaying messages to operators
v Displaying messages to the console
v Logging messages
10 Programming: Assembler
Designing Assembler Modules
Figure 2 shows how these macros communicate with the operator. The logging and
system console services are invocations of the DSIWLS and DSIWCS macros. For
more information about the DSIWCS macro, see “DSIWCS: Write Console Services”
on page 242. For more information about the DSIWLS macro, see “DSIWLS: Write
Log Services” on page 242.
Terminal for
this Operator Domain Boundary
Station
DSIPSS TYPE=OUTPUT
IMMED
ASYPANEL
DSIPSS
TYPE=XSEND
DSIWCS NetView Operator
System NetView-to-NetView
Operator's Task (NNT)
Console Operator Station
Task (OST)
DSIPSS
TYPE=OUTPUT
IMMED
DSIWLS DSIMQS
Network Log or
Hardcopy Log
for this
Operator Station
Another Subtask
in this Domain
Creating Messages
The message definition service (DSIMDS) macro provides you with a chance to
create a load module of user-defined message skeletons. Each defined message
skeleton can contain up to nine variable-length text inserts.
The message building service (DSIMBS) macro combines message insert text with
the specified message skeleton and returns a completed message buffer, which can
be used for displaying the message.
For more information about message macros, see the following references:
v The introductory section of Chapter 8, “Macros,” on page 155, for conditions that
apply to all NetView macros
v “DSIMBS: Message Build Services” on page 196, for details on using the DSIMBS
macro
v “DSIMDS: Message Definition Services” on page 198, for details on using the
DSIMDS macro
v The sample library on the product tape for examples of creating user-defined
messages with DSIMDS and DSIMBS
Message presentation using the DSIPSS and DSIMQS macros is more complex. The
DSIPSS macro can present information in any of the following three screen modes.
DSIMQS is limited to standard mode and title-line mode.
Standard Mode
NetView messages are sent to the screen with a user-definable prefix
followed by data. The prefix includes fields such as the NetView message
type (HDRMTYPE), and the NetView domain name (HDRDOMID),
indicating the domain that sent the message. If the message is wider than
the screen, it is split between words. The message is continued on the next
line, and is indented by a user-customized amount.
A variation on standard mode output is the immediate message. It appears
at the bottom of the panel as a single 71 character message with neither
prefix nor continuation lines.
To present a message in standard mode, you can use any of these methods:
v Issue DSIPSS TYPE=OUTPUT
v Issue DSIPSS TYPE=IMMED
v Issue DSIMQS to queue a HDRTYPEU message buffer to the OST
v Issue DSIPSS TYPE=FLASH
Refer to sample ADATTIM (CNMS4274) in CNMSAMP for an example of
standard mode output.
Title-line Mode
Title-line presentation services send sequences of messages to the operator
without allowing other messages to be interspersed. The messages are
displayed on the panel in a tabular format, with one or more title lines.
Title-line messages have no prefix and can use the full width of the panel.
Messages longer than panel width are truncated.
Title-line mode messages and system multiline write-to-operator (MLWTO)
messages are treated as a single message by:
v DSIEX02A, DSIEX16, and &WAIT in NetView command list language
v TRAP and WAIT in REXX and high-level language command procedures
v The NetView automation table
v The ASSIGN command
When creating your title-line mode messages, ensure that the first line does
not conflict with any message number supplied by IBM. A message
number format similar to the IBM message number format can be helpful
when you use these facilities with your messages.
Refer to sample AMLWTO (CNMS4273) in CNMSAMP for an example of
title-line output.
Full-Screen Mode
You can present a full panel of information using 3270 data streams.
Full-panel command processors, which run under an OST, are the only
12 Programming: Assembler
Designing Assembler Modules
type of user-written code (except for installation exit DSIEX12) that can use
full-screen mode. This topic is addressed in “Writing a Full-Screen
Command Processor” on page 65.
Refer to sample APSSFULL (CNMS4279) in CNMSAMP for an example of
full-screen output.
Title-Line Output
Title-line output is best suited to message groups that can be presented on
a single panel. Figure 3 shows an example of title-line output.
Logging Messages
The write-to-log service (DSIWLS) macro records information in the network log,
the system log, a hardcopy log, an external log, or a sequential log.
Network Log, the System Log, and Hardcopy Task: DSIWLS logs data to the
network log, the system log, and the hardcopy task. The DEFAULTS and
OVERRIDE commands determine the general logging environment. The current
logging actions are applied to the message buffer passed to the DSIWLS macro. If
the message is passed in an AIFR buffer, the system checks the AIFR setting to
determine which logs contain the messages.
External Logging: DSIWLS provides for the logging of data to the external
logging task (DSIELTSK). You can define the external logging task at installation to
record to the system management facilities (SMF) log or to a user-defined data set.
If you use a user-defined data set, you must code the XITXL exit to actually
perform the logging of the data.
External logging is a data services task (DST). See Chapter 8, “Macros,” on page
155 for information about DSTs. The XITXL exit is described in “XITXL: External
Logging” on page 56.
14 Programming: Assembler
Designing Assembler Modules
Calling Commands
You can call commands directly, or you can schedule them. Calling a command
directly requires the following steps:
v Initialize the command environment (required control blocks must be acquired,
and so on).
v Call the command entry service (DSICES) macro to look up the address of the
command processor in the NetView command table. Then a branch is performed
to the command processor.
To schedule a command, you must use the message queuing service (DSIMQS)
macro. Scheduling a command under a task places a command buffer on one of
the message queues of the task. Other command buffers can be ahead of the buffer
of the scheduled command. When the buffer is processed off the message queue,
the command processor is called.
Obtaining a Service Work Block (SWB): The routine that calls a command
processor provides an SWB. You can preallocate or obtain the SWB with the
DSILCS macro, or the SWB can be one the caller has passed. This control block
must also have its SWBTIB field pointing to the TIB of the task. The SWB address
must be stored in CWBSWB.
Obtaining a Parse Descriptor Block (PDB) and Parsing the Command: The
routine obtains storage for a PDB so the command processor can parse the
command. You can obtain the size of the storage for the PDB by issuing the
DSIPRS macro with the PDBSIZE option in the program. See “Parsing” on page 19
for more information.
Identifying the Command Processor Address: After the command is parsed, you
can find the command in the NetView system command table (SCT). You can look
up the command using DSICES in one of three ways:
The DSICES macro returns the address of the system command table entry. The
macro returns the address in an area passed on the DSICES macro as the
SCTADDR parameter. This address points to an SCT entry, mapped by the system
command entry (SCE), and the address is stored in the PDBCMDA field.
When the DSICES macro returns to the caller, the return code indicates whether
the command is immediate, regular, or both. When TVBINXIT is on, the
PDBIMMED bit must be set on if the DSICES return code indicates that the
command to be called was defined as TYPE=I (immediate) or TYPE=B (both).
You can call regular commands only when TVBINXIT is off and only from task
types OST, NNT, and PPT. You can call immediate commands only when
TVBINXIT is on and only from task types OST and NNT. Unless otherwise noted
in this book, do not call NetView-written TYPE=D commands.
Calling the Command Processor: When calling the command processor, some of
the registers can have the following assignments:
1 Points to the CWB, which next points to the PDB, SWB, TIB, and the
command buffer.
13 Points to a save area. It is probably already set there, because a save area is
required for the service macros.
14 Contains the return point address.
15 Contains the entry point address (found in SCE) of the command
processor.
The command processor entry point address is stored in the SCECADDR field of
the SCE entry pointed to by the PDBCMDA field. SCECADDR contains the
address of the linkage assist routine called DSICMDLD. Branch to DSICMDLD
with a branch and set mode (BSM) or a branch and save and set mode (BASSM).
DSICMDLD resolves any residency requirements for data areas being passed. For
example, if the caller is in AMODE=31, passes data areas (command buffer, CWB,
and so forth) above-the-line, and is calling a command processor which resides
below-the-line, DSICMDLD copies all the needed areas into below-the-line storage
before calling the target command processor.
For example, to pass a command to VTAM while running under an OST, NNT, or
PPT, prepare the input. Call the NetView command processor identified by DSICES
for your VTAM command.
16 Programming: Assembler
Designing Assembler Modules
Buffer Header” on page 103. In BUFHDR, set HDRMTYPE to HDRTYPET. You can
use HDRTYPEB as well, but commands with a HDRMTYPE set to HDRTYPEB are
not logged or echoed.
Use the DSIMQS macro to queue the buffer to the preferred OST or NNT, where
the command is processed as though it had been entered from a terminal.
Choosing Command Priority: You can schedule commands as high priority. This
enables the command to preempt any existing queued messages or other work that
is scheduled at lower priority. Commands scheduled with high priority also
pre-empt command procedures that are already running. If you do not want to
pre-empt work that might already be queued, including command procedures that
are already running, schedule your command at low priority. See “DSIMQS:
Message Queuing Services” on page 202 for more information about priority.
In BUFHDR, HDRMLENG must reflect the length of the command and its
parameters, and the length of the IFRCODE field. Set HDRTDISP to the offset of
the IFRCODE field, which must be X'24', the offset of the HDRMSG field in the
BUFHDR. Set HDRMTYPE to HDRTYPEI.
Use the DSIMQS macro to send the buffer to any subtask that can process a
command. When the buffer is received, the NetView program increases HDRTDISP
by 2 to address the command and its parameters. The NetView program decreases
HDRMLENG by 2, because the IFRCODE is not included in the command text.
For more details about the fields and settings of BUFHDR and IFR, see “BUFHDR:
Buffer Header” on page 103 and “DSIIFR: Internal Function Request” on page 120.
You can forward a command from one domain to another by doing either of the
following steps (providing the route has been previously established using the
START DOMAIN command):
v Building a buffer with the preferred command and issuing the DSIPSS macro
with TYPE=XSEND to transmit the command to the cross-domain task (NNT) in
another NetView program.
v Calling the ROUTE command. (See “Scheduling Commands Using DSIMQS” on
page 16) The ROUTE command routes a command to a specified NetView
domain. For more information, refer to the NetView online help.
The commands you call can return data to the originating domain by issuing
DSIPSS TYPE=OUTPUT for a buffer with HDRMTYPE=HDRTYPEU or
HDRMTYPE=HDRTYPEL.
The maximum length of text that you can send as a cross-domain command is 240
bytes, which corresponds to three 80 character input lines. Use multiple commands
to chain data for applications that require a larger data transfer.
Additional Services
The following sections describe other services provided by the NetView program.
Disk Services
The disk services (DSIDKS) macro retrieves data from partitioned data sets. The
DSIDKS macro is linked to a data set. This macro locates a specific member or file
and reads the records there, as illustrated in the following example:
DSIDKS
. SWB=(REG2),DSBWORD=DISKADDR,TYPE=CONN,NAME=DSIPRF▌1▐
.
.
DSIDKS
. SWB=(REG2),DSBWORD=DISKADDR,TYPE=FIND,NAME=MEMNAME▌2▐
.
.
DSIDKS
. SWB=(REG2),DSBWORD=DISKADDR,TYPE=READ▌3▐
.
.
DSIDKS
. SWB=(REG2),DSBWORD=DISKADDR,TYPE=READ,INCL=YES▌3▐
.
.
DSIDKS
. SWB=(REG2),DSBWORD=DISKADDR,TYPE=DISC,NAME=DSIPRF▌4▐
.
.
DSIPRF
. DC CL8’DSIPRF ’
.
.
MEMNAME DC CL8’MEMNAME ’
18 Programming: Assembler
Designing Assembler Modules
Key Explanation
▌1▐ This statement initializes the disk service control blocks and input buffer,
returning the address of the DSB in DISKADDR. The NAME parameter
specifies the DDNAME (DSIPRF in this example).
▌2▐ This statement finds the member name MEMNAME and reads the first
record using the returned DSBWORD. Because FIND reads the first record
of the file, you can code INCL=YES on a FIND request to indicate that if
the first record is a %INCLUDE statement, it is to be processed. INCL=YES
is required for Data REXX.
▌3▐ These two statements read the next two sequential records. INCL=YES
specifies that %INCLUDE statements are to be processed.
▌4▐ This statement frees the control blocks and the input buffer.
Parsing
You can parse NetView command and message buffers (containing the standard
NetView BUFHDR structure) using the DSIPRS macro. The DSIPRS macro requires
a parse descriptor block (PDB). The returned PDB includes the PDBBUFA pointer
to the command buffer, the parse elements, and the number of parse elements.
Do the following to determine the size of the PDB and parse a buffer:
1. Issue the DSIPRS macro with the PDBSIZE option specified. This returns the
required size of the block.
2. Build the control block header (CBH) and set CBHID to the value defined by
symbol CBHPDB after you obtain the storage (from preallocated storage or
with DSIGET).
3. Set CBHTYPE to 0.
4. Store the PDB length in the CBHLENG field.
5. Call DSIPRS with the supplied PDB to parse the buffer. DSIPRS fills in the PDB
with the delimiter and parse information. The DSIPRS macros are issued in
pairs.
You can use the command entry services (DSICES) macro to determine whether an
operator is authorized to use a given command, and you can use the keyword and
value service (DSIKVS) macro to determine whether an operator is authorized to
use a given keyword or keyword and value combination.
You can use the parameter alias service (DSIPAS) macro to derive the original
keyword and value for a command that is entered with parameter aliases.
Parameter aliases are defined with the CMDDEF PARMSYN statement in
DSIPARM member CNMCMD or its included members.
Note: Refer to the IBM Tivoli NetView for z/OS Security Reference for more
information about command authorization checking.
Named Storage
You can create and retrieve a storage environment across multiple command
processor calls using named storage.
You can use the DSIPUSH macro to create a named storage pointer, as shown in
the following code segment:
.
.
.
L R3,LOCLSTOR BUFFER AREA FOR PUSH LIST
USING SWBLRCPL,R3
XC 0(SWBLRCPU,R3),0(R3)
MVC SWBLRCLN(4),=A(SWBLRCPU) LENGTH OF PUSH LIST
MVC SWBLRCNM(16),MYNAME UNIQUE NAME OF LRC
MVC SWBLRCST(4),DYNASTOR QUEUED STORAGE OBTAINED FOR LRC
MVC SWBLRCRE(8),ZEROS NO RESUME FOR NAMED STORAGE
MVC SWBLRCAB(8),MYABEND ADD ABEND MODULE NAME
MVC SWBLRCLG(8),=C’DSILRCR8’ (FOR EXAMPLE)
* SWBLRCFG (FLAGBITS) IGNORED FOR NAMED STORAGE
L R4,CWBSWB AVAILABLE SWB
. DSIPUSH SWB=(R4),LIST=(R3),ROLL=NO
.
.
Then you can use the DSIFIND macro to retrieve the named storage pointer, as
shown in the following code segment:
.
.
.
L R3,LOCLSTOR BUFFER AREA FOR PUSH LIST
USING SWBLRCPL,R3
XC 0(SWBLRCFI,R3),0(R3)
MVC SWBLRCLN(4),=A(SWBLRCFI) LENGTH OF FIND LIST
MVC SWBLRCNM(16),MYNAME UNIQUE NAME OF LRC
L R4,CWBSWB AVAILABLE SWB
DSIFIND SWB=(R4),LIST=(R3)
LR R3,R1 ADDRESS OF MY NAMED STORAGE
USING
. MYDSECT,R3
.
.
For more details on the coding of these macros, see “DSIPUSH: Establish
Long-Running Command” on page 223 and “DSIFIND: Find Long-Running
Command Storage” on page 170.
20 Programming: Assembler
Designing Assembler Modules
Use the NetView code point translation service to translate the numeric code
points received in alerts into readable text. With this, you can use NetView Bridge
with a problem-management database to open problem records when NetView
alerts are received.
For example, if data formatting is required, you can build a buffer with
HDRMTYPE=HDRTYPEX and a command in the buffer text. In this case, the
command verb identifies a user-defined presentation services command processor
and the parameters are the data to be presented. When the receiver of the
cross-domain message of the OST gets the command buffer, the OST calls the
command processor with the data.
Applications are limited to sending 256 bytes of data. Use multiple commands to
chain data for applications that require a larger data transfer.
The DSIQRS macro simplifies the implementation of resource span checking. Use
DSIQRS to determine whether a resource is in an operator's span of control and
whether an operator is allowed access to a particular resource. For example, if you
want to determine whether a particular operator is authorized to issue commands
for a particular resource, DSIQRS might be specified as follows:
DSIQRS SWB=(REG2),OPID=OPERID,RESOURCE=RESNAME
Applications supply the operator ID and the VTAM resource name to the DSIQRS
macro. DSIQRS issues one of the following return codes:
Code Meaning
0 The NetView operator has access to the resource
64 The NetView operator does not have access to the resource
101 RODM query failure
22 Programming: Assembler
Chapter 3. Writing Installation Exit Routines
This section illustrates how to design, code, and install installation exit routines
that take advantage of NetView exits.
The NetView program provides two types of installation exits for which you can
write routines:
v Global installation exits (DSIEXnn), which apply to all NetView tasks. The global
installation exit routines are loaded when the NetView program starts.
v Data services task (DST) installation exits (XITnn and BNJPALEX), which apply
only to DSTs. The DST installation exit routines are loaded when the associated
DST starts. Each DST can have its own set of installation exit routines.
Each installation exit handles a particular event, such as the reception of data from
the system console. When that event occurs, the NetView program passes control
to the appropriate installation exit routine for processing. After processing, the
installation exit routine returns control and passes a return code to the NetView
program. Optionally, you can concatenate up to ten DST exit routines. If you
concatenate routines, the first DST exit routine returns control to the NetView
program. If the first exit does not indicate USERDROP, the NetView program calls
the next exit in the sequence. This process continues until the last DST exit has
returned control to the NetView program or USERDROP is indicated.
Writing a routine for each installation exit is not necessary. Installation exits written
to process frequently run functions degrade performance. See Table 3 for a list of
installation exits and their sample numbers. These samples are meant to be used as
examples of how to code a NetView installation exit. You can customize them for
your individual needs.
Table 3. Installation Exit Environments. Superscript numbers refer to the corresponding notes at the end of the table.
NetView
Exit Description Applicable Tasks TVBINXIT REENT Samples
DSIEX01 Input from the operator OST with VTAM On Yes
terminal
DSIEX02A Message output this domain or NNT, OST, PPT NNT, On or Off Yes CNMS4271
message output cross-domain OST, CNMCSSIR CNMS4283
DSIEX03 Input before command processing NNT, OST, PPT Off Yes
Table 3. Installation Exit Environments (continued). Superscript numbers refer to the corresponding notes at the end
of the table.
NetView
Exit Description Applicable Tasks TVBINXIT REENT Samples
DSIEX04 Log output for buffers not Main task or any On or Off Yes
processed by DSIEX02A subtask
DSIEX05 Before VTAM command invocation NNT, OST, PPT Off Yes
DSIEX06 Solicited VTAM messages NNT, OST, PPT Off Yes
DSIEX07 Cross-domain command send NNT, OST Off Yes
DSIEX09 Output to the system console Main task or any On or Off Yes
subtask
DSIEX10 Input from the system console DSIWTOMT Off No
DSIEX11 Unsolicited VTAM messages PPT Off No
DSIEX12 Logon validation NNT, OST Off Yes
DSIEX13 OST/NNT message receiver NNT, OST, PPT Off Yes
DSIEX14 Before logoff NNT, OST Off Yes
DSIEX16 Post-NetView automation table exit NNT, OST, PPT On or Off Yes
for messages CNMCSSIR
DSIEX16B Post-NetView automation table exit DST, OST, PPT, NNT On or Off Yes
for MSUs
DSIEX17 Monitors MVS system messages NNT, OST, PPT Off Yes CNMS4297
and delete operator messages CNMCSSIR
(DOMs)
DSIEX18 Network LOG BROWSE installation LOG BROWSE TASK On No CNMS4298
exit (domidBRW)
DSIEX19 Service point application NNT, OST, PPT Off Yes CNMS4307
authorization checking during
RUNCMD processing
DSIEX20 SAW record filtering DST (AAUTSKLP) Off Yes CNMS4308
DSIEX21 DSITCPRF encryption CNMTAMEL, TCP/IP No Yes
OST
XITBN BSAM empty file DST Off No
XITBO BSAM output DST Off No
XITCI CNM data input DST Off No CNMS4284
XITCO CNM interface output DST Off No
XITDI DST initialization DST Off No
XITVI VSAM input DST Off No
XITVN VSAM empty file DST Off No CNMS4270
XITVO VSAM output DST Off No
XITXL External logging DST Off No
24 Programming: Assembler
Writing Installation Exit Routines
Table 3. Installation Exit Environments (continued). Superscript numbers refer to the corresponding notes at the end
of the table.
NetView
Exit Description Applicable Tasks TVBINXIT REENT Samples
Note:
1. Does not apply to the AUTOTASK command and MVS console task.
2. This exit applies to the NetView program operator interface (POI) only. Does not include messages from the
subsystem interface. You can process these messages in DSIEX02A.
3. If used by more than one DST, they must be reentrant.
4. Do not use DST installation exits under the network product support (NPS) task named DSIGDS.
5. Refer to the IBM Tivoli NetView for z/OS Security Reference for more information.
Input
When you enter the installation exit routine, the registers contain the following
information:
Register Contents
1 The address of the installation exit parameter list (USE control block). The
USE contains the following address:
v Service work block (SWB) to be used as a work area or to request
services from the NetView program (USERSWB). If you use the SWB for
your save area or for dynamic variables, you must obtain another SWB
when invoking NetView macros.
v Message buffer USERMSG
v Task vector block (TVB)
13 The address of a standard 72-byte save area used to store the caller's
registers.
14 The return address.
15 The entry address of the installation exit.
0, 2-12 Unspecified.
Do not change any input, particularly the USERMSG buffer in the USE control
block.
In general, the installation exits process data as it is received. That is, no specific
translation to uppercase is performed.
When data is entered on the command facility screen, the NetView program calls
the DSIEX01 exit.
v At entry to the DSIEX01 exit, no translation to uppercase is performed on the
message buffer.
v Upon exit from the DSIEX01 exit, the message buffer is translated to uppercase if
the data does not contain the characters NETVASIS at the beginning of the text
and the OVERRIDE NETVASIS condition is not in effect.
All subsequent installation exits that process this message buffer process the buffer
in uppercase unless it was not translated because of the NETVASIS characters.
Output
Most installation exit routines pass the following return codes to the NetView
program in register 15 to indicate that the messages or MSUs are to be unchanged,
deleted, or replaced. Exceptions to the following return codes are noted with the
specific exits. The registers are restored without change, except for register 15 (and
register zero (0) if USERSWAP is returned).
USERASIS (0)
Use the message or MSU as presented to the installation exit; do not delete
or replace it.
USERDROP (4)
Delete the message or MSU from the terminal and from the network log,
system log, and hardcopy log; stop processing before the message or MSU
appears on the screen.
USERSWAP (8)
Replace the message or MSU with the message or MSU addressed in
register zero (0).
When the NetView program receives a USERDROP return code, no further exit
routines are called. If you have concatenated DST exit routines, a USERDROP
return code prevents the next exit routine from being called.
26 Programming: Assembler
Writing Installation Exit Routines
Only the text portion of the buffer is swapped. Also, ensure that the HDRMLENG
of the new message or MSU is less than or equal to HDRMLENG of the original
message or MSU, unless the message or MSU is formatted as an IFRCODAI.
The DSIEX02A installation exit provides a more flexible interface for replacing
messages including title-line and MLWTO (multiline write-to-operator) type
messages. See “DSIEX02A: Output to the Operator” on page 30.
You can concatenate DST installation exit routines when replacing messages. In this
case, the buffer containing the replacement message or MSU becomes the input for
the subsequent DST installation exit routine.
The NetView automation table cannot automate messages that are written only to
the network log.
Note: The NetView automation table and DSIEX16 are called only once for each
unique message in a NetView domain. Any copies of the message made by the
ASSIGN command or the NetView automation table do not result in a call to the
NetView automation table or DSIEX16 in this NetView domain.
Note: Refer to the IBM Tivoli NetView for z/OS Automation Guide for more
information about message handling by the OST/NNT.
Note: Refer to the IBM Tivoli NetView for z/OS Administration Reference for
information about determining the authorized message receiver. Refer to the IBM
Tivoli NetView for z/OS Automation Guide for more information about message
handling by the PPT.
Control Blocks
The service facilities used in your installation exit routine dictate the control blocks
you must include in your routine. However, the following control blocks are
required:
v The installation exit parameter list (USE)
v The main vector table (MVT)
v The service work block (SWB)
Use macro DSICBS to include these and any additional control blocks your routine
needs. For more information, see “DSICBS: Control Block Services” on page 159
and the control block descriptions in Chapter 7, “Control Blocks,” on page 103.
All regular (TYPE=R) commands, including those from the command facility, the
hardware monitor, or the threshold analysis and remote access feature, are also
passed to DSIEX03.
Example of Use: You can use DSIEX01 to support short cut commands by
translating an operator’s single character entries into extended command strings.
Return Codes: The following list contains return codes for OST input:
USERASIS (0)
The original command is processed and added to the RETRIEVE stack.
USERDROP (4)
The original command is not processed and is not added to the RETRIEVE
stack.
USERSWAP (8)
The command buffer returned by the exit pointed to by register 0 is
processed. The original command is added to the RETRIEVE stack.
NetView automation table processing occurs before DSIEX16 is called, and the
resultant actions are scheduled immediately after this exit.
The single message that was processed by DSIEX02A can become a chain of
messages representing the actions that the NetView automation table produced.
Example of Use: DSIEX02A provides you with an exit that can process the
messages before &WAIT (or WAIT) and the NetView automation table take effect.
You can use this exit to modify the processing options for a message and specify or
substitute new logging, display, command, or routing actions independently of one
another.
Do not use the DSIPSS macro in this installation exit routine. If a message is
required, use the DSIMQS macro to queue the message to the subtask.
Because the NetView program does not check the syntax of messages that are sent
to a terminal, DSIEX02A does not receive a PDB.
30 Programming: Assembler
Writing Installation Exit Routines
NetView automation is called after this exit routine is called; therefore, any
changes made for messages in this installation exit can affect NetView automation.
NetView automation is not called for a message that is deleted by this exit routine.
DSIEX02A provides the following additional features not available in other exits:
v The NetView buffer passed to this exit is an AIFR. You need to reference the IFR
control block rather than the BUFHDR.
v For single-line messages, multiline messages, and title-line messages, this buffer
points to the entire chain of buffers that contain the message.
You can replace all chained buffers by using DSIGET for non-queued subpool zero
storage for new buffers and copying or replacing all the data in the old buffers.
Separate DSIGET invocations can be used for each buffer chained off the
IFRCODAI internal function request buffer. Any original buffers passed to the exit
can be either freed or passed back to the NetView program on the return. You
must free the unused buffers using DSIFRE for nonqueued subpool zero storage.
Initialize all necessary fields in all buffers and copy any reserved or unused header
information from each of the buffers.
Notes:
1. The NetView program frees only those buffers that are returned in the
IFRCODAI format.
2. For information about freeing NetView buffers see “Free NetView Buffers
Service Routine (DSIFREBF)” on page 267.
3. Messages issued by DSIPSS with TYPE=FLASH cannot be processed by user
exit DSIEX02A because the exit is not called for FLASH messages.
The IFRCODAI contains control information and system data that can be accessed
only through the provided NetView automation table and command list interfaces.
Unauthorized modification of these fields can cause processing, logging, or display
loops.
Use the DSIGET macro to obtain new buffers and the DSIFRE macro to release
buffers you have removed. To release all the buffers and the AIFR buffer, use the
DSIFREBF callable service and set USERMSG to zero.
The AIFR that is originally passed to the exit in the USERMSG field becomes the
responsibility of the exit. If the same AIFR is not passed back to the NetView
program in register zero (0), the exit is responsible for freeing the original AIFR.
General Notes® for DSIEX02A: When IFRCODAI buffers have commands, the
DISPLAY, logging, BEEP, and HOLD options are not referenced during the
command run.
DSIEX02A has access to user bit and character fields in the IFRCODAI structure
that enable signaling between DSIEX02A, DSIEX03, DSIEX16, user-written tasks, or
user-written commands. Actions (including HOLD and BEEP) specified in the
IFRCODAI structure supersede the DSIMVT defaults. DSIEX02A cannot determine
the overrides but can mark buffers that are not affected by the overrides. When
DEFAULT BEEP=DISABLE or HOLD=DISABLE, the option is not processed by the
NetView program when specified by DSIEX02A, DSIEX16, or the NetView
automation table, unless the IFRCODAI buffer has the corresponding force flag in
IFRAUTA4 set to on and the action flags in IFRAUTA1 or IFRAUTA2 contain a
nondefault value.
Because the force action bits specify display and logging actions, their presence
implies that no command action processing occurs when the NetView automation
table is searched. On the other hand, buffers that contain commands
(IFRAUCMD=ON) cause the NetView program to ignore the display and logging
action indicators, including the action force flags.
Because logging actions are serviced under the task under which the NetView
automation table is called, buffers marked as forced non-display are not routed to
other tasks by a matching NetView automation table entry.
Before running, all regular commands are passed to DSIEX03. Regular commands
(TYPE=R) entered from the command facility command line are passed to both
DSIEX01 and DSIEX03. DSIEX03 is also called for TYPE=B commands that are not
entered from the command facility command line. Note that a TYPE=B command
32 Programming: Assembler
Writing Installation Exit Routines
can requeue itself and therefore seem to drive both DSIEX01 and DSIEX03.
Commands running under the PPT that are entered as responses to messages
DSI802A and DSI803A are not passed to any installation-defined exit.
Example of Use: You can use DSIEX03 to restrict use of particular regular
commands if your conditions are more complex than those provided for by
command authorization checking.
DSIEX04 is not called for messages logged to the external trace data set
(DSITRACE).
DSIEX04 is not called if DSIEX02A and DSIEX16 are called, because you can
specify logging options in these exits and in the NetView automation table. For
example, in a user-written command, if the macro DSIWLS is issued for a buffer
that has not been automated, DSIEX04 is called. In contrast, the same buffer sent to
the terminal with DSIPSS is also logged, but DSIEX02A, the NetView automation
table, and DSIEX16 are called.
Note: DSIEX16 is generally a better exit to reformat log buffers than exit
DSIEX02A because the NetView table options are already processed and can be
analyzed in DSIEX16. DSIEX16 enables creation of logging buffers that are separate
from the display buffers. DSIEX04 is used only for messages not processed by
DSIEX16 (messages not subject to automation).
Example of Use: You can use DSIEX04 to edit information sent to the network
log, the system log, and the hardcopy log. You can send certain messages to a
specific log or to no log at all.
Because DSIEX04 can run under any subtask that issues macro DSIWLS, be sure
that any service facilities you request are supported by the subtask under which
the routine is running. For example, DST is limited to VSAM or CNM interface
services.
Because the NetView program does not check the syntax of messages that are sent
to a log, DSIEX04 does not receive a PDB. See “DSIPDB: Parse Descriptor Block”
on page 142 for information about how to parse the messages in DSIEX04.
If USERPDB is not 0, a PDB is available for the installation exit. When USERPDB is
0, the installation exit must obtain its own PDB (using DSIGET) if a PDB is
preferred, and release it (using DSIFRE) before returning to the NetView program
from the installation exit.
Example of Use: You can use DSIEX05 to verify that an operator is authorized to
issue a particular command.
34 Programming: Assembler
Writing Installation Exit Routines
Coding Considerations: Code the routine to handle both the OST and PPT
control block structures.
This exit applies only to commands entered directly (not using the MVS prefix)
that are passed through the NetView POI.
Note: Commands passed to DSIEX05 have already been processed under DSIEX03
and, possibly, DSIEX01.
Example of Use: You can use DSIEX06 to change the message number or text of a
VTAM message or to process VTAM messages.
Coding Considerations: Code the routine to handle both the OST and PPT
control block structures.
This exit applies only to messages received through the NetView POI in response
to commands entered directly (not using the MVS prefix).
NetView automation is started after this installation exit routine has been called.
Any changes made for messages in this installation exit can affect NetView
automation. NetView automation is not started for a message that has been deleted
by this installation exit routine.
Note: Messages processed (and not deleted) by DSIEX06 are then processed by
DSIEX02A.
Example of Use: You can use DSIEX07 to monitor cross-domain traffic through
the network.
DSIEX07 does not receive a PDB. The cross-domain NetView program parses the
messages after they are received. Refer to “DSIPDB: Parse Descriptor Block” on
page 142 for more information about parsing the messages in DSIEX07.
Example of Use: You can use DSIEX09 to edit messages sent to the system
console.
Coding Considerations: If TVBINXIT is on, the DSIEX09 exit follows the coding
guidelines given in “Limitations When TVBINXIT Is Active” on page 5.
The DSIEX09 exit is called as a result of DSIWCS macro calls. The output of the
attended operator task OST task is processed in the DSIEX02A exit instead of the
DSIEX09 exit.
Do not use macros DSIWCS or DSIMQS in this installation exit routine. If you
need to send a message to the system console from this exit routine, use system
macros instead.
Because the NetView program does not check the syntax of messages that are sent
to the system console, the DSIEX09 exit does not receive a PDB. Refer to “DSIPDB:
Parse Descriptor Block” on page 142 for more information about parsing messages
in the DSIEX09 exit.
36 Programming: Assembler
Writing Installation Exit Routines
USERSWAP (8)
Send to the system console the message whose address was returned by
the exit in register zero (0).
Example of Use: You can use DSIEX10 to enable the system console operator to
enter command abbreviations and synonyms. These can be expanded in the
installation exit routine.
Coding Considerations: DSIEX10 is called only from task DSIWTOMT, not from a
subtask.
DSIEX10 does not receive a PDB. Refer to “DSIPDB: Parse Descriptor Block” on
page 142 for information about parsing the messages in DSIEX10.
DSIEX10 is not called for commands that an operator enters using an MVS console
OST. DSIEX03 is called instead.
Example of Use: The DSIEX11 exit can issue the DSIMQS macro to send a copy of
the message buffer before processing by the NetView program. If you want to send
unsolicited messages to all operators, the DSIEX11 exit can transform the messages
into MSG ALL commands.
NetView automation is started after this installation exit routine has been called;
therefore, any changes made for messages in this installation exit can affect
NetView automation. NetView automation is not started for a message that has
been deleted by this installation exit routine.
USERDROP (4)
Do not process the message from VTAM.
USERSWAP (8)
Process the message whose address was returned by the exit in register
zero (0).
Example of Use: You can use DSIEX12 to check authorization and environmental
customization. DSIEX12 can also send messages to other operators.
For a takeover operator task, DSIEX12 is called mainly to validate the operator ID
and password. Therefore, consider using the USETOTVB field in DSIEX12 to
determine if this exit was called for a takeover operator task.
Coding Considerations: If you require output to the screen, use only the
following DSIPSS types:
v SCRSIZE
v WINDOW
v ASYPANEL
v CANCEL
v PSSWAIT
v TESTWAIT
Return Codes: If the installation exit routine issues a return code of 0, the logon
proceeds. If specified, your hardcopy log starts and the initial command runs.
This installation exit is called under all OSTs and NNTs, including
unattended-operator tasks.
38 Programming: Assembler
Writing Installation Exit Routines
Example of Use: You can use DSIEX13 with IFRCODUS to initiate a user function
with a buffer. Code DSIEX13 to perform the user function specified by IFRCODUS.
You can send the IFRCODUS message buffer to another task or you can queue it to
the task in which your program (such as a command processor) is running using
the DSIMQS macro. You can also use DSIEX13 to monitor DSI039I messages
received on an OST or NNT.
Coding Considerations: DSIEX13 does not free (using DSIFRE) the IFRCODUS or
HDRTYPEM buffers. For information about freeing NetView buffers, see “Free
NetView Buffers Service Routine (DSIFREBF)” on page 267.
Note: An incorrect return code causes a user abend code 262 (X'106').
The subtask cannot communicate with the operator's terminal. However, you can
issue macro DSIWCS to write to the system console and macro DSIWLS to write
entries to the log.
Example of Use: You can use DSIEX14 to save accounting information or update
tables.
For a takeover operator task, the NetView program calls the DSIEX12 exit. For this
type of task, the DSIEX12 exit is called mainly to validate the operator ID and
password. When the takeover processing completes, the task for the session that is
being taken over is the task used for the session, and the task is cleaned up. For
takeover task processing, the NetView program does not call the DSIEX14 exit.
Return Codes: The NetView program ignores any return code received from this
installation exit routine.
DSIEX16 is called for everything DSIEX02A is called for, except messages that are
deleted by DSIEX02A through USERDROP or zeroing IFRAUTBA. This provides
for the monitoring of message deletion.
It is possible to have more than one distinct message chained together. The
message that was processed by DSIEX02A can become a chain of messages
representing the actions that the NetView automation table produced. Each
element of the chain is a complete buffer structure similar to the one given to
DSIEX02A, and they are chained together using the HDRNEXTM field in the
buffer header (BUFHDR) of each buffer on the chain. Message buffers are followed
by action buffers. The last buffer has a zero in its HDRNEXTM field.
If you establish cross-domain sessions to the same domain and you want these
messages automated on the receiving or OST side, you can set the IFRAUMTB bit
off in this exit on the sending or NNT side. The IFRAUMTB bit is normally set on
by the NNT because all messages sent from an NNT have had an opportunity to
call the NetView automation table on the sending or NNT side. The NetView
program changes this bit to zero when received in a new domain for all cases
except when the originating domain name is equal to the receiving domain.
Use this exit to modify the processing options for a message and specify or
substitute new logging, display, command, or routing actions independently of one
another.
DSIEX16 can reformat messages by removing buffers, changing buffers, and adding
entirely new buffers to the original message. The exit can prevent OVERRIDE
command options from taking effect for messages.
40 Programming: Assembler
Writing Installation Exit Routines
DSIEX16 provides for different editing of the text for each group of destinations
specified by the results of NetView automation table or default message processing
options. This exit can also help monitor the effectiveness of message suppression
and automation.
Do not use DSIPSS in this exit routine. You can issue new messages by chaining
them to the original message structure.
DSIEX16 does not receive a PDB. DSIEX16 uses the IFRCODAI internal function
requestlike DSIEX02A does. However, DSIEX16 is written to run in 31-bit
addressing mode exclusively.
DSIEX16 does not use DSIMQS on any part of the IFRCODAI structures when it is
in the form given to DSIEX16. The routing list buffers whose addresses are in
IFRAURTL are only used during the DSIEX16 interface. To issue DSIMQS for an
IFRCODAI structure, ensure that HDRNEXTM is zero (there is only one
IFRCODAI structure) and that IFRAURTL is zero. Use care in manipulating the
HDRNEXTM fields and IFRAURTL fields to prevent accidental loss of buffers.
Return Codes: DSIEX16 differs from the other installation exits in that it ignores
the return code, but it expects a zero. In the other NetView exits, these return
codes indicate that messages are to be deleted or a new message is to be swapped
for the original one.
In DSIEX16, you can swap or delete messages by direct manipulation of the buffers
that are located by the USERMSG field of the DSIUSE parameter list. The NetView
program uses whatever structure the USERMSG field refers to on return and
performs the actions that are indicated.
Use the DSIGET macro to get new buffers and the DSIFRE macro to release buffers
you have removed. Use the Q=NO option and specify subpool 0 on these DSIGET
and DSIFRE requests. If you release all the buffers, you set the USERMSG field to
zero to indicate that there are no buffers when you return.
DSIUSE
IFRCODAI
Chain
IFRCODAI
IFR
BUFHDR IFRCODAI
HDRNEXTM BUFHDR
* HDRNEXTM 0
* *
IFRAUTBA BFR1 BFR2 IFRAUTBA BFR1 BFR2
*
IFRAUTBL IFRAUTBL
AIFR * Message * Message buffers
Detail * buffers *
Data IFRAUCMB IFRAUCMB Command buffers
Mapping * *
IFRAUVPT Obj1 Obj2 * Routing List
* IFRAURTL
IFRAURTL DSIAIFRO Chain BUFHDR
*
HDRMCEXT
*
IFRAURTB Routing
IFRAURCC List
IFRAURCL (1) Mapping
IFRAURCL (2)
*
*
*
IFRAURCL (IFRAURCC)
Figure 4. DSIEX02A, DSIEX16, DSIEX16B, and DSIEX17 Interface. IFRAURCL(n) is a notation to indicate that there
are as many IFRAURCL entries as the value of IFRAURCC.
Each EXEC action, specified on the NetView automation table statements that
match the message, creates an additional IFR-type IFRCODAI chained using the
HDRNEXTM field. An exception is for multiple EXEC actions that have only a
ROUTE keyword. EXEC actions with only ROUTE keywords combine with
existing IFRCODAI route lists, if the same type (ONE or ALL) of ROUTE-only
buffer exists. Each of the IFR-type IFRCODAIs contains its own set of message
buffers.
42 Programming: Assembler
Writing Installation Exit Routines
For all buffers processed within the NetView program and prefixed with a
BUFHDR, HDRTDISP is set to a value greater than the last buffer header field. The
value can change from one release of the NetView program to another. For
references to specific data in buffers, use HDRTDISP as the starting index instead
of assuming the data has a specific value. The value is based on the currently
defined buffer headers, and is typically a 24, 36, or 46 decimal. Other values occur
when commands are called (for example, when the IFRCODCR is skipped over
calling a command processor).
On entry to DSIEX16, the DISPLAY, BEEP, HOLD, and HCYLOG actions are the
same in each IFR-type IFRCODAI on the chain pointed to by the HDRNEXTM
field of the original AIFR. However, the original AIFR can be different from those
on the chain. SYSLOG and NETLOG actions are indicated in the original (first)
buffer, and the additional EXEC action buffers indicate that logging is suppressed
with overrides not available. This ensures that a message is logged only once,
unless the DSIEX16 exit directs otherwise.
The NetView program uses the USERMSG field on return as the chain of IFR type
IFRCODAIs to be processed. If USERMSG is set to zero by DSIEX16, the
installation exit frees all buffers passed. These buffers are non-queued, subpool
zero storage. These buffers are 31-bit addressable buffers. When USERMSG is
nonzero, it points to the chain of IFRCODAI buffers. The installation exit can
return multiple IFR-type IFRCODAIs without routing lists (with or without
commands), and multiple IFR-type IFRCODAIs with routing lists or commands or
both.
Buffers that have no routing list but contain a command are queued to the task
that is processing the message using DSIMQS. This causes the command to be run
when the task processes the message queue.
Buffers with routing lists are queued to the specified tasks using DSIMQS. The
routing lists are generated exactly as specified by the AUTOMSG definitions and
can include both active and inactive tasks. Any tasks that are inactive do not
receive the buffers.
DSIEX16 can determine the current defaults by checking the bits in the MVTAIDFT
field in the DSIMVT.
Note: When IFRCODAI buffers have commands, the DISPLAY, logging, BEEP, and
HOLD options are not referenced during the command execution.
DSIEX16 has access to user bit and character fields in the IFR-type IFRCODAI that
enable signaling between DSIEX02A, DSIEX03, DSIEX16, DSIEX17, user-written
tasks, or user-written commands. Actions (including HOLD and BEEP) specified in
the IFR-type IFRCODAI supersede the DSIMVT defaults. DSIEX16 cannot
determine the overrides but can mark buffers that are not affected by the
overrides. The NetView program does not process the default options
BEEP=DISABLE or HOLD=DISABLE when specified by DSIEX02A, DSIEX16, or
the NetView automation table, unless the IFRCODAI buffer has the corresponding
force flag on in IFRAUTA4 and the action flags in IFRAUTA1 or IFRAUTA2
contain a nondefault value.
Because the force action bits specify display and logging actions, their presence
implies that no command action processing occurs when the NetView automation
table is searched. Conversely, buffers that contain commands (IFRAUCMD=ON)
cause the NetView program to ignore the display and logging action indicators,
including the action force flags.
Because logging actions are serviced under the task under which the NetView
automation table is called, buffers marked as forced nondisplay are not routed to
other tasks by a matching NetView automation table entry.
You can pass information from your NetView automation table to DSIEX16. For
example, you can direct what DSIEX16 does for a class of messages or MSUs that
the automation table has identified. Use the CMD() part of the IF statement to send
data to the DSIEX16, marked by using a dummy command name. To do this, first
define a dummy command with a name (for example, CMDEX16) in the CMDDEF
definitions in CNMCMD or its included members. You can then code this in an
automation table, even though you do not intend to run it. For example:
EXEC(CMD(’CMDEX16 ’ PARM1 PARM2))
DSIEX16 then looks at the command buffer chained from IFRAUCMB for the
dummy command name, and uses the PARM1 and PARM2 set by the automation
table. If the dummy command name is present, DSIEX16 does what PARM1 and
PARM2 indicate. DSIEX16 dechains and frees the IFRAUCMB buffer with the
dummy command name command buffer before returning to the NetView
program. This prevents the program from actually running the command.
To edit or create log buffers, set the appropriate logging options in a separate copy
of the original IFRCODAI with its own data buffer chain. If you chain the new
IFRCODAI with the appropriate logging flags or OVERRIDE suppressing flags, or
both, to the original IFRCODAI buffer chain, the edited data is logged to the
specified logs. You can set the IFRAUDIS flag off, and set the DISPLAY override
suppressed flags on, to prevent accidental display of the log buffers if the task
specifies override DISPLAY=YES.
44 Programming: Assembler
Writing Installation Exit Routines
Note: DSIEX02A has only one IFR-type IFRCODAI and its HDRNEXTM is zero.
The command and routing buffers created by the NetView automation table first
appear in DSIEX16. See Figure 4 on page 42 for an illustration of the DSIEX16
interface.
Use this exit to modify the filter settings, color, and other presentation attributes,
and to change or substitute the command buffers to be run. You can also use this
exit to help monitor the effectiveness of filtering and automation.
A buffer containing the MSU automated data is present. Other buffers containing
the following can also be present:
v HIER information
v EXEC CMD actions
Return Codes: DSIEX16B handles return codes the same way as DSIEX16. Like
DSIEX16, it ignores the return code, but it expects a zero. Only register 15 can be
used to pass the return code.
The NetView program tracks action messages in order to process DOMs as they
arrive from MVS. The NetView program considers a message to be an action
message if any of the following are true:
v IFRAUWWR (or CPOMLR) is on.
v A descriptor code in the IFRAUWDS field (or the CPOCDESC field, if it exists)
is one of the values specified on the MVSPARM.ActionDescCodes CNMSTYLE
statement.
When the DSIEX17 exit returns control, the NetView program determines whether
these conditions are true. If any are true, the NetView program activates
IFRAUACN to indicate that the message is an action message. If the value of the
ifrauMTB flag is set to off (0), the NetView program also submits the message to
the message automation tables. If the flag is set to on (1), the message is assumed
already to be automated.
The DSIEX17 exit is called by the CNMCSSIR subsystem router task for unsolicited
messages marked for automation in either the MPF table or the Message Revision
table. The DSIEX17 exit is also called under any NetView task having an EMCS
console for messages directed to that console by the system.
Notes:
1. Typically, the MVS system does not generate DOMs for messages that are not
considered action messages. If the DSIEX17 exit changes a non-action message
to an action message, a DOM can never be generated by MVS. Because storage
is needed to track action messages, storage growth can occur if the NetView
program processes an action message for which no DOM is forthcoming. The
DSIEX17 exit is also called for user messages that originated with the
DSIMMDB or CNMPMDB services on any operating system. DSIEX17 runs
under the OST, PPT, NNT, and CNMCSSIR tasks. For messages, this exit is
called before automation or ASSIGN processing.
2. The interface that is used is similar to the DSIEX02A exit, but the DSIEX17 exit
is called with TVBINXIT off and must be written in assembler language.
3. The DSIEX17 exit can set IFRAUDMA on to indicate that the deletion events for
this message can be automated. This is the same as using DOMACTION(A) in
the automation table. The DSIEX17 exit can set IFRAUACT on, if IFRAUDMA
is set on.
When IFRAUDMA is on, the message being deleted drives the automation
table a second time. No user exits are driven by the delete action. The
automation table then has the opportunity to issue a REXX (or other) procedure
to react to the message deletion. The automation table is driven once per copy
of the message being deleted on each task that has a held copy of the message.
4. The DSIEX17 exit can set IFRAUDMN on to indicate that the deletion events
for this message can be ignored. This is the same as using DOMACTION(N) in
the automation table.
This option prevents the CNMCSSIR task from queuing data to remember
messages requiring deletion. It does not prevent messages from being held on
operator screens or from being retained by autotasks.
5. The DSIEX17 exit can test IFRAUDTO to determine whether the MVS DOM
was DOM-by-TOKEN.
6. The DSIEX17 exit does not see the IFRAUDLO bit set, and cannot alter the
setting.
Example of Use: You can use DSIEX17 to process DOMs for action messages that
you convert into other action messages (with a new DOM identification value).
This processing is helpful when you reformat messages such as tape mount
requests.
To avoid storage growth when the NetView program processes an action message
for which no DOM is forthcoming, set the IFRAUDMN bit on to indicate that a
DOM for this message will not be received. For example, suppose DSIEX17 creates
a table of message IDs. The table designates action messages for which no DOM is
generated. Assume that the NetView program receives a message that matches one
in the table, the exit might contain the following code:
OI IFRAUI33,IFRAUDMN INDICATE NO DOM IS EXPECTED
46 Programming: Assembler
Writing Installation Exit Routines
This code tells the main line code that no DOM is issued for this message, which
prevents unnecessary storage growth.
Note: The AIFR that is originally passed to the exit in the USERMSG field
becomes the responsibility of the exit. If the same AIFR is not passed back
to the NetView program in register zero (0), the exit is responsible for
freeing the original AIFR.
When DSIEX18 is given control, register 1 points to the USE control block DSIUSE.
DSIUSE contains USERMSG, which points to a message buffer. This message buffer
contains the following data:
Example of Use: You can use DSIEX18 to suppress certain log records from being
displayed on an operator's terminal.
When a user issues the BLOG command, filtering occurs based first on the BLOG
specification. Records that are not filtered by BLOG are then passed to the
DSIEX18 exit for processing.
Example of Use: You can use DSIEX19 to provide security checking at the service
point command level. You can do this security checking by calling DSICES or
DSIKVS or writing your own command and keyword checking code. To use
DSICES or DSIKVS for security checking, you can define a model CMDDEF
statement specifying DSISPCMD. You can then define command, keyword, and
value authorization checking based on the model CMDDEF statement.
The NetView program provides the CNMS4307 exit as an example. This sample
shows an example of authority checking various commands that are embedded
within a RUNCMD command. The sample uses the DSICES and DSIKVS macros
for authority checking. The command and keyword names are translated by the
sample to alternate names, so that the names are acceptable to the DSICES and
DSIKVS macros.
48 Programming: Assembler
Writing Installation Exit Routines
DSIEX20 exit is called after the SAW record is converted into an ISAW record and
before the NetView SAW filtering processing begins.
When DSIEX20 processing starts, register 1 points to control block DSIUSE. The
USERMSG field of DSIUSE points to the message buffer containing a standard
NetView buffer header, as defined by BUFHDR, followed by the ISAW. The
AAUTISAW control block can be used to parse the ISAW, which begins at the
offset indicated by BUFHDR HDRTDISP field.
The message buffer includes workspace after the ISAW. The workspace can be
passed from one DSIEX20 invocation to the next. This workspace is at least 1000
bytes long. The exact amount of workspace can be calculated by the following
formula:
workspace = HDRBLENG - HDRMLENG - HDRTDISP
See “BUFHDR: Buffer Header” on page 103 and “DSIUSE: Installation Exit
Parameter List” on page 151 for more information.
Example of Use: The ISAW records cannot be changed, but they can be kept or
discarded. The DSIEX20 exit provides the functions for more granular filtering of
SAW records than that provided by the VTAM or NetView program. For more
information about record filtering, refer to the KCLASS and MAPSESS statements
in the IBM Tivoli NetView for z/OS Administration Reference.
You can use DSIEX20 to access session data such as the primary and secondary
session endpoint names, PCID, session type (for example, LU-LU and SSCP-PU),
sense code, reason code, and notification type (for example, session start and bind
pending) to determine whether to keep or discard the SAW record. This data is
described in the AAUTISAW control block.
v Because there is no PDB, the USERPDB pointer is used to address an 8 byte field
that is initialized to zeros. If DSIEX20 changes this 8-byte field, the field is
treated as the KCLASS name by session monitor, overriding MAPSESS
statements.
The return codes only affect the session types and SAW types supported by SAW
filtering. Examples of supported types are session-start and init-pending for
SSCP-LU and LU-LU sessions. Session-end is treated the same as its associated
session-start.
Example of Use: You can use XITBN to place a record in the empty data set.
Code this installation exit only if you want to write a BSAM subtask using the DST
as a base.
Coding Considerations: XITBN can use only the service facilities available to the
DST. The exit cannot issue the macros DSIZVSMS and DSIZCSMS.
A return code other than USERSWAP or USERASIS is treated as if the return code
was USERASIS and message CNM474I is issued.
Example of Use: You can use XITBO to modify the record before it is sent to the
BSAM data set or file.
50 Programming: Assembler
Writing Installation Exit Routines
Coding Considerations: XITBO can use only the service facilities available to the
DST. The exit cannot issue the macros DSIZVSMS and DSIZCSMS.
Avoid coding installation exits for frequently run functions, such as BSAM input or
BSAM output, because they can significantly degrade performance.
Example of Use: You can use XITCI to modify CNM input data for the hardware
monitor.
Coding Considerations: XITCI can use only the service facilities available to the
DST. The exit cannot issue the macros DSIZVSMS and DSIZCSMS.
If you specify USERSWAP (8), the substitute buffer must contain a valid network
services request unit (RU) of the same type as the input RU. Refer to the SNA
library for a description of RU formats.
CP-MSUs and MDS-MUs are not routed through DSICRTR and are only accessible
under the BNJDSERV subtask.
XITCI called under a DST other than DSICRTR can access CNM data routed to
that particular subtask.
Do not use DST installation exits under the network product support (NPS) task
named DSIGDS.
For the various receiving subtasks, Table 5 shows the major vector keys that can be
found in the specific RU.
Table 5. Routing of RUs by Major Vector Key
Major Vector Receiving
Key Description Subtask
X'0000' Alert BNJDSERV
X'0001' Link Event BNJDSERV
X'0002' Resolution BNJDSERV
X'000F' CMIP statistics BNJDSERV
X'0010' Trace AAUTSKLP
X'0025' PD Statistics BNJDSERV
X'006F' Send Message to Operator DSIGDS
X'0080' RTM AAUTSKLP
X'132E' RECFMS envelope BNJDSERV
X'1332' Link configuration data BNJDSERV
X'13FF' Reserved BNJDSERV
X'154D' Routing and targeting instruction BNJDSERV
The focal point transfer request unit (RU) header is part of the CNM router
support. All cross-domain unsolicited alert data is routed to the CNM router, and
the focal point transfer RU header carries management services information
between distributed host and the focal point.
The fields in the focal point transfer RU header are listed in Table 6.
Table 6. Focal Point Transfer RU Header
Offset Name Length Description
0 HDR LEN 2 bytes, binary Length of the total RU (includes RU
header and NMVT)
2 HDR ID 2 bytes Always X'1040'
4 Reserved 11 bytes For the NetView program use only
15 DOMID LEN 1 byte, binary Originator's domain ID length
16 DOMAIN ID 8 bytes, char Originator's domain ID, padded with
blanks
24 Reserved 20 bytes For the NetView program use only
44 Name Variable NMVT data
52 Programming: Assembler
Writing Installation Exit Routines
and the remainder of the data is the actual NMVT. The first 2 bytes of the focal
point transfer RU contain the length of the entire buffer (FPT RU + NMVT). The
next 2 bytes contain the header ID, which is X'1040'. The 16th byte contains the
length of the originating domain ID, and the 17th–24th bytes contain the actual
originating domain ID. When returning a substitute buffer, do not modify the focal
point transfer RU (the first 44 bytes); replace only the NMVT portion of the buffer
with a valid NMVT.
For more information about the format for a specific RU and how to access data
within the RU, refer to the SNA library, NCP and EP Reference Summary and Data
Areas, and information about flows and control blocks in the IBM Tivoli NetView for
z/OS Troubleshooting Guide.
Note: Some alerts displayed by the hardware monitor do not drive the
XITCI installation exit and are therefore still logged as alerts.
If the USEREXLG (252) or USEREVNT (253) return code is returned for an input
record, the input record is not processed as an alert. The hardware monitor alert
recording filter is not passed so the input record is not forwarded to the alert focal
point.
Messages that are blocked as a result of a filter from the rate function might not be
automated. You can use the AUTORATE statement to control this automation.
Refer to the RATE and AUTORATE statements in the IBM Tivoli NetView for z/OS
Administration Reference for more information about these statements.
Example of Use: You can use XITCO to modify the request for CNM data
(forward RU).
Coding Considerations: XITCO can use only the service facilities available to the
DST. The exit cannot issue the DSIZVSMS and DSIZCSMS macros.
Do not use DST installation exits under the network product support (NPS) task
named DSIGDS.
If a substitute buffer is returned in register zero (0), the data is a valid SNA RU.
Refer to the SNA library for a description of RU formats.
Refer to the IBM Tivoli NetView for z/OS Administration Reference for more
information about XITDI during DST initialization. Also, see “Data Services Task
(DST)” on page 86.
Example of Use: You can add XITDI to the DST initialization deck to provide
user initialization values for DST initialization.
Coding Considerations: XITDI can use only the service facilities available to the
DST. The exit cannot issue the macros DSIZVSMS and DSIZCSMS. XITDI cannot
refer to DSRB fields.
54 Programming: Assembler
Writing Installation Exit Routines
USERDROP (4)
Do not process the original DST initialization statement.
USERSWAP (8)
Process the DST initialization statement in the buffer whose address was
returned by the exit in register zero (0).
Example of Use: You can use XITVI to modify the record after it is retrieved from
a VSAM data set or file.
Coding Considerations: XITVI can use only the service facilities available to the
DST. The exit cannot issue the macros, DSIZVSMS and DSIZCSMS.
Avoid coding installation exits for functions that can cause a wait, such as VSAM
input or VSAM output, because the wait can significantly degrade performance.
Example of Use: You can use the XITVN exit to place a record in the empty data
set. The NetView program provides its own XITVN exit for VSAM logs generated
under the DST task. You can code this installation exit to write your own VSAM
subtask using the DST task as a base.
Coding Considerations: XITVN can use only the service facilities available to the
DST, excluding macros DSIZVSMS and DSIZCSMS. Only VSAM key-sequenced
data sets (KSDS) are supported. Do not replace the XITVN exits provided by the
NetView product for the DSILOG and DSITRACE subtasks.
Return Codes: To initialize the VSAM data set or file, return the USERSWAP
return code and have register zero (0) point to a buffer that contains the record to
be used. A return code other than USERSWAP causes the DST to end.
Example of Use: You can use XITVO to modify the record before it is sent to the
VSAM data set or file.
Coding Considerations: XITVO can use only the service facilities available to the
DST. The exit cannot issue the macros DSIZVSMS and DSIZCSMS.
Avoid coding installation exits for frequently run functions, such as VSAM input
or VSAM output, because the functions can significantly degrade performance.
Coding Considerations: XITXL can use only the service facilities available to the
DST. The buffer passed to the installation exit contains the standard header, with
HDRTDISP pointing to control block DSIELB. The data that is to be logged follows
DSIELB.
This message is a not a cause for concern for DSIEXnn exits unless you expect a
particular exit to load that did not load.
56 Programming: Assembler
Writing Installation Exit Routines
Global installation exit routines are automatically loaded when the NetView
program starts. DST installation exit routines are loaded when the DST starts,
provided you have specified them on the DSTINIT statement.
See “Testing Your Program” on page 1 for information about testing your exit
routine before use.
LRC processors run under an OST, NNT, primary POI tasks (PPT), or DST (logoff
routines only). Your operator can call an LRC processor using a command
procedure, or an LRC processor can be called by another LRC processor. The LRC
processors return control to the NetView program after scheduling work but before
processing is complete. The NetView program then processes other work that is
pending. Only long-running commands can act as a NetView component,
suspending for unrelated operator commands, including ROLL, and resuming, in
turn.
LRC processors are often used to retrieve data from another task or from another
domain without enabling the calling function or calling command procedure to
proceed in the midst of this retrieval. During this retrieval, the task of the
processor can continue to receive messages and accept commands.
For specific coding instructions, see “Calling the Command Processor” on page 16.
60 Programming: Assembler
Writing Command Processors
To accommodate error recovery, test the TVBRESET flag set by the RESET
command. You can code your command processor to examine this flag regularly
and to end prematurely if the flag is on.
Keep in mind that an OST, NNT, PPT, or autotask can be receiving work (for
example, DOMs) which you can be unaware of. Failure to process that work can
result in a filling of the task's message queues, and the task can receive message
DSI374A, indicating that the buffers threshold for the message queue has been
reached.
Therefore, if you are coding a command processor for an OST, NNT, PPT, or
autotask and it is going to run for an extended period, the command processor
should be an LRC processor. An LRC processor returns control to the NetView
program after scheduling work, but before processing is complete. The NetView
program then processes other work that might be pending.
Register Contents
0 Undefined when command is first called; storage address for resume
routines for long-running commands.
1 The address of the command work block (CWB). The CWB contains the
following information:
v A user save area (CWBSAVEA) that is the command processor's
72-byte save area.
v The address of the command buffer (CWBBUF) for a command call.
This field is 0 for a RESUME, abend reinstate, or LOGOFF call.
v The address of a service work block (SWB) for calling service
facilities (CWBSWB).
v The address of a parse descriptor block (CWBPDB) if the following
are true:
– CWBBUF does not equal 0
– PARSE=Y was specified (or defaulted to) in the CMDDEF
statement of the command processor
If PARSE=N is specified, the CWBPDB equals 0 (zero).
v A work area (CWBADATD) that is the command processor's 256-byte
temporary storage for keeping variables while remaining reentrant.
Register Contents
2-12 Unspecified.
13 The address of a standard 72-byte save area used to store the caller's
registers.
14 The return address.
15 The entry address of the command processor.
When a command results from the NetView automation table, the TVBAIIFR field
contains the address of the message buffer structure that is automated. If
TVBAIIFR=0, the command did not result from an automated message or MSU.
See Figure 5 for an example of an automation internal function request buffer
structure.
TVB CWBBUF
CWBPDB PDBBUFA
CWBSWB
IFR
TVBAIIFR BUFHDR SWB
HDRMCEXT
IFRCODE
IFRAUIND
IFRAUACT
IFRAUTBL
IFRAUVPT DSIAIFRO
Obj 2
DSIAIFRO
Obj 3
62 Programming: Assembler
Writing Command Processors
15 A return code
0-14 Restored to caller's contents
For an immediate command, the NetView program ignores the return code.
For an LRC processor, the completion code is specified on the DSIPOP macro
invocation. See “DSIPOP: Remove Long-Running Command” on page 211 for more
information about the DSIPOP macro. The register 15 return codes returned upon
command resumption indicate processing options. See “Message STIFLE” on page
72.
Control Blocks
Command processors usually access a command buffer and seven control blocks:
CWB, PDB, SWB, TVB, TIB, MVT, and SVL. In addition, type RD command
processors, running under a DST and type D command processors, require the
DSRB. Further, a command driven with NetView automation can require the
automation internal function request (AIFR). The command buffers CWB, PDB,
SWB, DSRB, and AIFR are specific to the command being run. The TVB and TIB
are global to the task, and the MVT and SVL are global to the NetView program.
Figure 6 on page 64 illustrates an example of the required control blocks and their
relevant pointers. For detailed descriptions of these control blocks, see Chapter 7,
“Control Blocks,” on page 103.
Register 1 HDRMLENG = 24
HDRBLENG = 104
HDRMTYPE = HDRTYPET
HDRDOMID = DOM1
HDRTSTMP = X'1314150C'
HDRTDISP = 36
CWB
CWBPDB
CWBSAVEA PDB
CWBTIB SCE
5 36
2 42
4 45
6 50
3 57
SWB
Displacement of
entry in buffer
Type of delimiter
SWBTIB
Length of each element of command
Figure 6. Example of Control Blocks Used by Command Processors. The NetView control
block header appears at the beginning of the CWB, DSRB, MVT, PDB, SVL, TIB, and TVB.
The v character is shown only as a place holder in the figure, because the character
used to represent the first, third, and fifth PDBTYPE delimiters does not reproduce
properly on all output devices. The delimiter is a blank, normally represented as a
lowercase b with a slash (diagonal line) running through the letter from lower left
to upper right (�).
64 Programming: Assembler
Writing Command Processors
An FSCP can issue the DSIPSS macro to request input and then perform other
work before issuing DSIPSS TYPE=PSSWAIT to receive the input. In addition, an
FSCP has direct access to operator input and can use the DSIWAT macro to
synchronize an operator scenario.
When the processor issues DSIPSS with TYPE=SCRSIZE for a terminal that uses
14-bit or 16-bit addressing and query support (indicated in the logmode definition),
the returned and actual screen size can be larger than the alternate screen size. If
so, when you use the Erase/Write Alternate command to address the parts of the
screen outside the alternate screen size, a terminal program checks the results. To
avoid this problem, do either of the following commands:
v Use a 24 x 80 character screen image data stream and use the Erase/Write
command instead of the Erase/Write Alternate command.
v Use a Write Structured Field command to create a partition-structured field that
controls the buffering in the terminal.
Note: For more information about the 3270 data stream and buffering, refer to the
IBM 3270 library.
Requesting Input
You do not need to send READ instructions to the terminal. A READ MODIFIED
command is set up and run whenever your operator uses an AID key. To receive
the data, specify an input buffer and an input ECB on a DSIPSS TYPE=ASYPANEL
request. When asking for input, check that the operator's keyboard is unlocked (set
bit 6 of WCC to '1'B). Do this with the same DSIPSS invocation that requests the
input or with an earlier one. You can also choose to reset the modified data tags.
After requesting input, do not request input on a further DSIPSS
TYPE=ASYPANEL request until your ECB is posted.
Posting an ECB
Do not free the storage where your input buffer and ECB reside until the ECB is
posted. When necessary, you can force the ECB to be posted early by issuing
DSIPSS TYPE=CANCEL. After you issue DSIPSS TYPE=CANCEL, the operator
cannot use the terminal until another input request is made or until a DSIPSS
TYPE=OUTPUT request restores the command facility panel.
66 Programming: Assembler
Writing Command Processors
When an FSCP sends a full screen of data to the display terminal, the system reads
the 3270 data stream into the buffer area. The FSCP can then write more data to
the screen while the operator is viewing or entering data. However, avoid writing
over or erasing the operator's input areas.
When the data is read, the NetView program posts an ECB. The command
processor processes the input and, optionally, presents more full-screen panels.
While the FSCP has a read outstanding, input to the terminal is treated as input to
the command processor, not to the NetView program.
When the command processor is called, it reads and writes to the terminal using
DSIPSS TYPE=ASYPANEL. The PANEL parameter of DSIPSS points to a 20-byte
parameter list. See “DSIPSS: Presentation Services” on page 216 for details about
this process.
The reshow option permits an operator to retain previously saved screen data. You
can suspend and resume full-screen processing by using the DSIFIND, DSIPOP,
and DSIPUSH macros and by specifying a RESUME routine.
Note: The NetView program treats power-off and power-on procedures and the
attention signal as error conditions. For powering off and powering on, your ECB
is posted for a permanent error and your OST is placed in termination status. The
ECB is not posted until the NetView program is notified that the terminal is
powered off. The signal that results from the Attention key causes the NetView
program to set TVBRESET. Your PSSWAIT also ends.
You do not need to use TYPE=PSSWAIT when you do not want interruptions, such
as messages and their resulting automation, or to process cross-domain commands.
The command processor can wait on its own list of ECBs. Even if you choose not
to wait on other NetView events, include the OST termination ECB in the list. This
ECB is located in the TVBTECB field of control block TVB. TVBTECB enables the
command processor to be aware of any major condition requiring the command
processor to clean up and exit. Use only the ECBLIST parameter with
TYPE=PSSWAIT in DSIPSS.
Issue TYPE=CANCEL because you cannot guarantee that the operator will enter
data on any given panel. If an active ASYPANEL input request is canceled, the
system posts the ECB with a special post code. See information about the ECB post
codes in “Return Codes in Register 15” on page 221. The storage where the
ASYPANEL ECB is located must not be freed until a DSIPSS TYPE=CANCEL is
issued or the NetView program has posted ASYPANEL ECB for successful or
unsuccessful input.
DSIPUSH identifies three routines that provide for command resumption, and
recovery and termination. These routines are the RESUME routine, the abend
reinstate routine, and the LOGOFF routine. DSIFIND locates the storage you
associated with the DSIPUSH input name. DSIPOP indicates that a long-running
command has completed.
68 Programming: Assembler
Writing Command Processors
When one of these routines receives control, CWBBUF is set to 0 and the register 0
contains the storage pointer associated with the long-running command (0 if no
storage). Additionally, one of the following bits are set:
v For a RESUME routine, the TVBRESUM bit is set to on.
v For an abend reinstate routine, the TVBABEND bit is set to on.
v For a LOGOFF routine, the TVBLOGOF bit is set to on.
Notes:
1. The TVBRESUM, TVBABEND, and TVBLOGOF flags are meaningful only
when your input CWBBUF address is 0.
2. HLL command processors cannot be pushed (with DSIPUSH) as ABEND,
LOGOFF, or RESUME routines.
The other registers contain the information described in “Input to the Command
Processor” on page 61.
RESUME Routines
Before invoking any subordinate command processors or command lists, and
before issuing DSIPSS TYPE=PSSWAIT (or TESTWAIT), the LRC processor
schedules a RESUME routine (using DSIPUSH). The RESUME routine suspends
any other active LRC processors and enables the LRC processor to regain control.
The first request at the top of the long-running command chain defines the
controlling RESUME routine. If you use DSIPUSH while another RESUME routine
is in control, the new RESUME routine becomes the controlling routine. All other
RESUME routines are temporarily suspended.
The suspension period depends on the environment from which the long-running
command received control. If the long-running command was called because of an
asynchronous event, such as an operator command or the automation of a
message, then the NetView ROLL command, if issued, can move (rotate) the
long-running command to the bottom of the long-running command chain. This
gives control to the next long-running command. If the long-running command
received control by direct call from another long-running command, the two
commands are regarded as being related by that direct call. This includes direct
commands from NetView command list language, REXX, and high-level language
command procedures. The ROLL command, if issued, acts against both (or all)
such related commands as a group, moving them altogether and preserving their
order. In either case, DSIPOP can remove the topmost RESUME routine, giving
control to the next long-running command.
Note: Neither the ROLL command nor DSIPOP causes an asynchronous interrupt.
A command gives up control only by returning to its caller, except for the action of
immediate commands.
You can also use DSIPOP to remove (by name) a RESUME routine that is not at
the top of the stack of the long-running command chain. This action is regarded as
a cancellation of that long-running command unless your DSIPOP invocation
specifies COMPCDE. If the long-running command that was removed was part of
a larger group, the calling long-running command is given control, as soon as the
current process permits, and is given a cancel indication, as follows:
Note: Refer to IBM Tivoli NetView for z/OS Programming: PL/I and C for more
information about cancelable and noncancelable high-level language command
procedures.
Long-Running Commands
All command procedures are long-running commands. A command procedure's
RESUME routine blocks RESUME routines pushed earlier, exactly like other LRC
processors. A pause or wait state for a command procedure is no exception.
You can use a major DSIPUSH to suspend a command procedure until your LRC
processor runs a DSIPOP. You can use a minor DSIPUSH to enable a calling
command procedure to complete, after which your RESUME routine gains control.
The following list describes completion codes and return codes:
v Completion codes
A long-running command can return a completion code to the long-running
command that called it (in the same group) by specifying a value for the
COMPCDE keyword in the DSIPOP macro. If a long-running command was
called asynchronously, the value specified for COMPCDE is ignored. The
completion code is passed to the calling long-running command in CWBRCODE
upon resumption.
v Return codes
A RESUME routine can return control to its caller many times before it
completes, to provide messages, queued commands, called long-running
commands, and other asynchronous work to process. Upon the initial return
(when commanded, CWBBUF¬=0), the value in register 15 is ignored. After each
resumption, the value in register 15 conveys the long-running command
requirements for STIFLE. For an explanation of STIFLE, see “Message STIFLE”
on page 72. Register 15 = -8 requests stifle; register 15 = +8 requests no stifle.
Meanings for other return codes are reserved. For compatibility with prior
releases, a zero (0) return code is valid after DSIPOP is issued to remove the
long-running command from the stack.
An important part of any RESUME routine function is screen control. Because the
state of the operator's terminal is not known (see “Screen Identifier” on page 74)
on entry, the RESUME routine must ensure that the operator is not locked out by a
panel left over from a previous LRC processor. Ensuring this situation can mean
issuing a message (DSIPSS TYPE=FLASH) to guarantee that the command facility
panel and command line are available to the operator. Ensuring this situation can
also mean displaying a full-screen panel (DSIPSS TYPE=ASYPANEL). The screen
control requirement means that you cannot use the DSILRCR8 routine supplied by
the NetView product as a RESUME routine with the NetView program, as was
70 Programming: Assembler
Writing Command Processors
sometimes appropriate with NCCF. You can use DSILRCR8 as an abend reinstate
or LOGOFF routine if no cleanup besides DSIPOP is needed.
To assist RESUME routines that display panels, the NetView program provides
status information through the TIBSCRID field (see “Screen Identifier” on page 74).
A completed RESUME routine (one that has issued DSIPOP against itself) does not
need to be concerned with screen control because the following RESUME routine
assumes responsibility. Ending messages (associated with NCCF) that are issued
when an LRC processor finishes are not appropriate in the NetView program.
With the NetView program, operators can recover from operator errors and certain
program errors through the use of the attention signal or the RESET (NORMAL)
command. When attention is signaled or the RESET command issues a flag,
TVBRESET is set, and an ECB, TVBRESET, is posted. All commands, and especially
LRC processors, can test TVBRESET regularly. Whenever it is set, the command
ends its processing (using DSIPOP, if appropriate) and returns to the NetView
program.
The following steps illustrate the use of the DSIPUSH and DSIPOP macros:
1. A command list calls a command and, to complete the request, the command
processor requests data from a DST.
2. The command processor issues DSIPUSH specifying a RESUME routine. At
this point, the command processor becomes a long-running command.
3. The command processor uses the DSIMQS macro to queue a buffer with
IFRCODE set to IFRCODCR containing its request for data to the DST.
4. The command processor returns to its caller. The terminal remains in the state
it was in when the command list was running. In this case, the command
facility panel is displayed.
5. This operator's task is idle (the command list is suspended by DSIPUSH);
therefore, the RESUME routine defined earlier by DSIPUSH is immediately
called.
6. The command processor finds that CWBBUF=0 (no command is being passed)
and TVBRESUM is set, but TIBLRCNP is not set. The command processor
returns control to its caller.
7. A message is received and displayed. The command processor is called again
as a RESUME routine.
8. The operator issues a full-screen command, which issues its own DSIPUSH
and waits for input.
9. The operator exits (or rolls away from) this latter command processor.
10. The panel of the second command processor remains in place, and the original
command processor RESUME routine is called. This time TIBLRCNP is set.
The command processor issues a FLASH message: STILL WAITING FOR DATA.
The command facility panel is restored by DSIPSS.
11. An IFRCODCR buffer containing the DST reply is received. After issuing the
DSIFIND macro, the IFRCODCR command processor places data in the LRC
processor's long-running command storage (as defined in the original
DSIPUSH). The IFRCODCR command processor only saves the data because
another long-running command can be in control.
12. The command processor is resumed again. Finding its data request satisfied, it
completes its function and issues DSIPOP against itself, using the COMPCDE
keyword on DSIPOP to indicate the nature of the completion. The command
processor returns a return code of 8 in register 15.
Note: For compatibility with prior releases of the NetView program, a zero (0)
return code is acceptable after DSIPOP is issued to remove the long-running
command from the stack.
13. The NetView program calls the next RESUME routine, the command list
invoking the original command, which then continues.
14. The command list receives the return code (RC in REXX or &RETCODE in
NetView command list language) that was specified for COMPCDE on
DSIPOP.
You can set a RESUME routine to return control to the NetView program without
giving up control of the operator's display. For example, the screen can be
dynamically updated based on information sent by another task in the form of an
IFRCODCR message. (See “DSIIFR: Internal Function Request” on page 120.) To
assist with such a function, the NetView program provides two tools: message
STIFLE and a screen identifier.
Message STIFLE
A RESUME routine can request a message STIFLE when it returns control to the
NetView program, indicating that ordinary line mode messages are not displayed
and the operator‘s screen is not disturbed by the processing of the messages.
Some messages are displayed by the NetView program whether or not STIFLE is
in effect. These messages are said to break the stifle mode. The following messages
can break the stifle mode:
v Action messages with ISTnnnA or DSInnnA identifiers.
v Messages that request a reply (HDRTYPEY, except the ASSIGN=COPY of
HDRTYPEY that does not break STIFLE).
v Any message issued with DSIPSS TYPE=FLASH. The intended use of DSIPSS
TYPE=FLASH is for command echoes and screen control messages.
A stifle request can be honored only while the network log or the hardcopy log
remains active. The NetView program counts messages that are stifled and
displays message DSI593I to remind the operator that it is necessary to consult the
network log or hardcopy log to see these messages. A stifle request is not honored
while the command facility panel is in place. The request is not honored because
the NetView program assumes that the LRC processor gains control of the panel
through the use of DSIPSS TYPE=ASYPANEL before requesting STIFLE.
STIFLE affects only line-mode messages. A full-screen display is not affected. If, for
example, the result of a START DOMAIN command (the logon panel) is delayed
long enough for an LRC processor to gain control, the returning logon panel is
displayed without regard to the STIFLE.
72 Programming: Assembler
Writing Command Processors
ROLL Function
With a roll group, the operator can switch from one component, such as the
hardware monitor, to another component, such as the session monitor, and return
to the place at which the operator last left the component. This procedure is similar
to window processing in other applications.
A roll group is a set of related DSIPUSH macro requests. DSIPUSH begins a new
roll group when it is called from an asynchronous command environment.
Operator commands, commands generated by automation, and commands
scheduled using DSIMQS are asynchronous. A command called directly from
another long-running command is synchronous. The synchronous long-running
command is added to the roll group started by the asynchronous long-running
command and blocks it until a DSIPOP request is issued against the synchronous
long-running command. The current roll group is defined as the roll group that is
first on the long-running command chain.
The ROLL command treats each specified roll group as a unit when manipulating
the chain. The ROLL command moves the topmost roll group to the bottom of the
stack. All elements within the roll group maintain their position within the group.
For additional information about using the ROLL command, refer to the NetView
online help.
You can use multiple DSIPUSH requests with different RESUME routines or
different storage pointers for such procedures as implementing a hierarchical panel
structure. By scrolling forward and then backward, the operator returns to the
same panel that was previously displayed. When a panel ends (that is, the operator
uses PF3, and the program calls DSIPOP), the operator returns to the panel within
the hierarchy, that is, above the current panel.
The following steps describe how a full-screen function uses the ROLL capability:
1. Issue DSIPUSH for a RESUME routine.
2. Provide a line on your panels for NetView command input, using 3270 data
stream orders.
3. When the operator enters data on the command line, the input data stream
contains orders that identify the area of the panel in which the operator typed.
4. Use the DSICES macro to verify the command. When command entry is
detected,verify the command, build a standard NetView buffer with
HDRMTYPE=HDRTYPET, and issue the DSIMQS macro to send the buffer to
the operator's own task, using TVBOPID as the destination of the DSIMQS.
Note: You must translate the command input to uppercase if the language the
operator is using has uppercase and lowercase characters.
5. Return to the NetView program to enable the command to be processed.
6. The NetView program reissues your RESUME routine when the command has
completed processing and when your RESUME routine is the first routine on
the stack or the current roll group.
If the command entered was ROLL, the ROLL command processor
automatically switches your roll group to last.
If the command entered establishes a new roll group, your roll group is pushed
down on the stack and the new group becomes current. When the operator
exits from the new roll group, your roll group is called by NetView calling the
topmost RESUME routine.
7. You can also detect PF6 and PF18 as ROLL. You build the command buffer, but
you must look up the command name for the DSIROLL load module using the
DSICES macro and then issue DSIMQS to queue the buffer.
8. So that the operator can switch directly to your function from a different roll
group without ROLL, you can define a command as a reshow request. It can be
the command name for your function with no operands provided.
When your command processor is entered (with no operands) with reshow
requested, issue DSIPUSH with PROMOTE=YES to move your roll group to the
top of the stack. Proceed by refreshing the screen from the last panel the
operator viewed.
Issuing DSIPUSH with PROMOTE=YES exchanges the storage address in the
DSIPUSH parameter list with the one already associated with the named
request, and returns the old value in register 0. Therefore, you can issue
DSIFIND to determine the current address and specify it on the
PROMOTE=YES request to make sure that the address stays the same. If you
do not specify the address, the 0 value in the parameter list replaces the current
value.
Screen Identifier
Requesting STIFLE does not guarantee that an LRC processor's panel is not
modified, but the NetView program provides a way to determine whether
modifications occurred. After writing the panel to the screen, an LRC processor
saves the value of TIBSCRID. Upon regaining control, a RESUME routine can
compare the present and saved values of TIBSCRID to determine whether–and to
some extent, what type of–screen modifications occurred since it last had control.
When an LRC processor regains control and TIBSCRID is unchanged, the LRC
processor can resume processing as if it had never lost control.
When TIBSCRM (and not TIBSCRSN) is changed, the LRC processor reestablishes
its read by issuing DSIPSS TYPE=ASYPANEL to send a Write and Unlock
command (X'F182') to the terminal and re-specify the ECB, if any, by which the
long-running command waits for input. This procedure makes refreshing the
screen unnecessary.
74 Programming: Assembler
Writing Command Processors
The abend routine assesses the damage caused by an abend and either keeps or
cancels the long-running command. Each command in the stack must be associated
with an abend reinstate routine. With its return codes in register 15, the abend
routine notifies the task whether the command is to be kept or removed from the
queue and freed, as follows:
Code Meaning
0 Keep the long-running command request queued
8 Remove the currently queued long-running command request from the
queue
If the routine keeps a long-running command, the RESUME routine runs the first
time that the task has no other work to perform. All stacked long-running
command routines are maintained in their current order. Abend reinstate routines
cannot issue the DSIPOP or DSIPUSH macros.
When a task recovers from an abend, all abend reinstate routines are called,
starting with the top one in the stack, which is the most recent. When the abend
reinstate routine returns to its task, it specifies whether the associated command is
to remain on the stack or be removed.
LOGOFF Routines
A LOGOFF routine gives the command processor control before the task ends. The
task is not reinstated, and the command processor can perform any final cleanup
processing, such as closing a data set or freeing storage. Each command in the
stack must contain a LOGOFF routine.
A LOGOFF routine is called sequentially for each request on the queue. LOGOFF
routines cannot issue the DSIPOP or DSIPUSH macros.
When the command processor returns to the task, requests are taken off the queue
and freed.
When a task ends, all the LOGOFF routines are called starting with the top, or
most recent, request on the stack. Each request is removed from the queue and
freed.
See “Testing Your Program” on page 1 for information about testing your
command processor before using it.
76 Programming: Assembler
Writing Command Processors
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8 MVT
R9 EQU 9 TVB
R10 EQU 10 TIB
R11 EQU 11 CWB
R12 EQU 12 BASE REG
R13 EQU 13 SAVEAREA
R14 EQU 14
R15 EQU 15
EJECT
***********************************************************************
* *
* SAVE REGISTERS AND ESTABLISH BASE REGISTER *
* *
***********************************************************************
USING *,R15
B PROLOG
DC C’ATMPCMDP &SYSDATE. AT &SYSTIME.’
PROLOG DS 0H
STM R14,R12,12(R13) SAVE REGISTERS
DROP R15
LR R12,R15 SET BASE REGISTER
USING ATMPCMDP,R12
***********************************************************************
* *
* ESTABLISH ADDRESSABILITY TO THE COMMAND WORK BLOCK (CWB) AND SET *
* UP THE SAVE AREA USING CWBSAVEA *
* *
***********************************************************************
LR R11,R1 LOAD CWB ADDR
USING DSICWB,R11 R11 BASE FOR COMMAND WORK BLOCK
LA R1,CWBSAVEA USE CWBSAVEA FOR SAVEAREA
ST R1,8(R13) STORE MY SA INTO CALLERS SA
ST R13,4(R1) STORE CALLERS SA IN MINE
LR R13,R1 R13 HAS MY SAVEAREA ADDRESS
***********************************************************************
* *
* ESTABLISH ADDRESSABILITY TO THE TASK INFORMATION BLOCK (TIB), THE *
* TASK VECTOR BLOCK (TVB), AND THE MAIN VECTOR BLOCK (MVT). *
* *
***********************************************************************
L R10,CWBTIB GET DSITIB ADDRESS
USING DSITIB,R10 ESTABLISH ADDRESSABILITY
L R9,TIBTVB GET DSITVB ADDRESS
USING DSITVB,R9 ESTABLISH ADDRESSABILITY
L R8,TVBMVT GET DSIMVT ADDRESS
USING DSIMVT,R8 ESTABLISH ADDRESSABILITY
*
XC CWBADATD,CWBADATD ZERO AUTODATA AREA
SLR R15,R15 ZERO RETURN CODE REGISTER
***********************************************************************
* MAIN PROCESSING GOES HERE *
***********************************************************************
***********************************************************************
* EXIT *
***********************************************************************
RETURN EQU *
L R13,4(R13) GET CALLERS SAVEAREA ADDRESS
L R14,12(R13) RESTORE REG14
LM R0,R12,20(R13) RESTORE REGS
BR R14 RETURN
SPACE
EJECT
LTORG
EJECT
*
DSICWB DSECT
ORG CWBADATD AUTODATA AREA
DS XL(256-(*-CWBADATD)) AUTODATA LENGTH CHECK
END ATMPCMDP
78 Programming: Assembler
Chapter 5. Writing User Subtasks
This section describes user subtasks and illustrates how to write, process, and
install them.
The DST provides an ideal structure for user-written tasks because the DST can be
defined with VSAM services, CNM services, or neither service. You can implement
user-defined functions within the data services command processors. The DST
provides all the low-level user subtask functions that you must otherwise code if
you wrote a complete optional subtask (OPT). Write an optional subtask only if
access to the subtask event control block (ECB) processing loop is required.
The other method requires that you code an OPT. With this method, NetView
supplies an intertask communication (message queue) ECB and a termination ECB.
You must provide an appropriate ECB processing loop and any additional
function. This requires more coding than the first method, but it offers more
flexibility in the kinds of functions that you can implement.
Termination
As shown in Figure 8, the termination process frees all acquired resources
(for example, storage and NetView control blocks) and returns to the
NetView program.
Enter Subtask
TVBTERM=1 Yes
?
No
Initialization
No
Issue DSIWAT
Macro on the
ECB List
Message Termination
80 Programming: Assembler
Writing User Subtasks
used by this task. You are responsible for the format and contents of the
specified member. The member can be read and processed during the task
initialization.
PRI Specifies the relative task priority (1–9), where 1 is the highest task priority
that you can assign and 9 is the lowest.
INIT Specifies whether the task is to be started during NetView initialization
(INIT=Y) or using the START command only (INIT=N).
For more information about the TASK statement, see the IBM Tivoli NetView for
z/OS Administration Reference.
Register Contents
1 The address of the task vector block (TVB)
13 The address of a standard 72-byte save area used to store the caller's
registers
14 The return address
15 The entry address of the subtask
0, 2–12 Unspecified
The following list shows the control block names that are used in attaching an
OPT:
v Task vector block (TVB)
v Task information block (TIB)
v Main vector table (MVT)
v Service routine vector list (SVL)
The TVB contains the address of the TIB and the MVT, and the task control block
of the operating system. The MVT contains the address of the SVL. See Chapter 7,
“Control Blocks,” on page 103 for detailed descriptions of these control blocks.
After the subtask is initialized, but before it starts processing, you can indicate that
the subtask is ready to begin processing by performing the following steps:
1. Ensure that the subtask is not already on the TVB chain.
2. Enqueue the TVB chain.
3. Set the TVBOPID field of the TVB to a unique subtask identifier.
One method of setting the TVBOPID field is to copy the contents of TVBLUNAM
into TVBOPID. (TVBLUNAM is the value of the TSKID operand in the TASK
definition statement.) Another method is to use a predefined value.
Note: Refer to the IBM Tivoli NetView for z/OS Installation: Getting Started for more
information about the NetView constants module (DSICTMOD).
TVBMEMNM Field
The value of the MEM keyword of the TASK definition statement is used as the
name (1 - 8 characters) of an initialization member or file. You find the value of the
MEM keyword in the TVBMEMNM field of the TVB if initialization input is
required. If the subtask is coded to process this member or file, the following
macros are called to read from the member or file:
v DSIDKS TYPE=CONN,NAME=DSIPARM to connect the subtask to disk services
for the DSIPARM data set.
v DSIDKS TYPE=FIND,NAME=TVBMEMNM to find the member or file and read
the first record.
v DSIDKS TYPE=READ to read a record. The READ is repeated until a
user-defined END statement is read or until an end-of-file return code is
returned.
v DSIDKS TYPE=DISC to disconnect from disk services.
If the subtask does not use the initialization member or filename, you can use
TVBMEMNM for other purposes, depending on the manner in which you specify
the MEM keyword of the TASK statement. For example, you can decide to use this
field as the data definition (DD) name to be opened by the subtask, or you can
specify a default operator to receive messages.
Processing
The following sections discuss processing subtasks using an ECB loop, intertask
communication, and operator communications.
ECB Loop
The processing section of a subtask usually begins by issuing the DSIWAT macroto
wait on an ECB list. The ECB list contains the subtask termination ECB
(TVBTECB), and generally contains the message queue ECB (TVBMECB), used for
intertask communication using the DSIMQS (message queuing service) macro. In
addition to these two ECBs that are provided with the NetView program, the ECB
list can contain user-defined ECBs for additional functions.
82 Programming: Assembler
Writing User Subtasks
Intertask Communication
If your subtask receives messages or commands from other tasks (or exits), include
the normal message ECB (TVBMECB) in your subtask's wait list. Optionally, you
can include the high-priority and low-priority message ECBs (TVBMECBH and
TVBMECBL). If the subtask services the high and low queues, set the bit TVBMM
to B'1' to indicate this. (When TVBMM is B'0', the message queuing service puts all
messages on the normal queue, regardless of how they are sent.) Retest the
high-priority ECB after each item of work on a lower queue, to enable
higher-priority work to pre-empt the queue of lower-priority work.
Each message queue has three parts: a private queue, a public queue, and an ECB.
(Each has two queues for reentrant code.) The elements and their respective
priorities are shown in Table 7:
Table 7. Message Processing Elements
Priority Private Queue Public Queue ECB
High TVBMPRQH TVBMPUBH TVBMECBH
Normal TVBMPRIQ TVBMPUBQ TVBMECB
Low TVBMPRQL TVBMPUBL TVBMECBL
Message Queue Processing: When your subtask receives a message buffer, the
TVBMECB is posted and the message buffer is inserted at the head of the public
message queue pointed to by TVBMPUBQ, a last in, first out (LIFO) queue. When
your subtask detects that the TVBMECB ECB has been posted, the public message
queue can be moved to the private message queue (TVBMPRIQ) for processing.
Because the DSIMQS service handles situations such as mainline interruption (for
example, an exit running asynchronously queues a message buffer to your
subtask), simultaneous processing in multiple subtasks, and parallel processing in
multiprocessor environments, you must use the assembler compare and swap (CS)
instruction to acquire message buffers from the public message queue.
The following segment of assembler code demonstrates how to move the public
message queue to the private message queue. Addressability to the DSITVB control
block is assumed.
MESSAGEQ EQU * BRANCH HERE WHEN TVBMECB POSTED
XC TVBMECB,TVBMECB CLEAR MESSAGE ECB
CHEKQ EQU *
SLR R0,R0 CLEAR SWAP REGISTER
L R3,TVBMPUBQ LOAD COMPARAND REGISTER
CS R3,R0,TVBMPUBQ CS ZERO ON THE PUBLIC QUEUE
BNE CHEKQ RETRY IF TVBMPUBQ CHANGED
LTR R3,R3 IS QUEUE EMPTY
BZ WAIT BR IF EMPTY
USING BUFHDR,R3 MAP BUFHDR ONTO QUEUE HEAD
REVQ EQU * MAKE LIFO QUEUE A FIFO QUEUE
L R1,HDRNEXTM R1 = POINTER TO NEXT BUFFER
The message buffers can be dequeued from the private message queue and
processed. After each buffer is processed, it is freed. Message buffers are obtained
with DSIGET Q=NO and SUBPOOL 0, so they are freed with DSIFRE Q=NO and
SUBPOOL 0. These are the default values.
Note: The DSIZCSMS and DSIZVSMS macros are not valid under an optional task.
Operator Communications
Sending Messages to Operators: You can use DSIPSS TYPE=OUTPUT or
TYPE=IMMED to send messages. Messages sent this way go to the owner who
started the subtask. If the subtask was started during NetView initialization or the
owner has logged off, the message is sent to the PPT for routing and automation.
You can also use the DSIMQS macro to send messages to the authorized receiver
of messages or to the operator that started the subtask. The TIBMSGNM field of
the DSITIB control block contains zeros if the subtask was started during NetView
initialization (that is, if you specified INIT=Y on the TASK definition statement).
84 Programming: Assembler
Writing User Subtasks
Logging Messages: You can use macro DSIWLS to write messages from the
subtask to the network log, CanzLog log, the MVS system log, an external log, or a
NetView sequential log. See “DSIWLS: Write Log Services” on page 242 for more
information. You cannot start hardcopy logging for user-written subtasks.
Note:
1. You cannot call command lists, immediate commands, or regular commands
from an optional task. Only command processors defined as TYPE=D or
TYPE=RD can be called from an optional task.
2. You cannot call DST service macros DSIZVSMS and DSIZCSMS under an
optional task.
Include the TVBTECB field of TVB (termination ECB) in the subtask ECB list for
each OPT you write. When a CLOSE NORMAL command is issued and all
operators have logged off, the main task posts the TVBTECB of the subtask. This
posting indicates that subtask termination is requested.
When the subtask finds the TVBTECB posted, the subtask performs the following
steps:
1. Releases all resources
2. Sets the TVBOPID field to blanks
3. Enqueues the TVB chain
4. Sets the TVBACTV bit to off
5. Sets the TVBTERM bit to on
6. Dequeues the TVB chain
7. Reloads the registers originally passed to the subtask and return to the
operating system
After the subtask releases all resources, NetView macros cannot be issued.
Additional Considerations
Special Requirements for IRB Exits
User-written interruption request block (IRB) exits that call NetView macro services
require the following special processing:
v On entry, if the TVBINXIT is not on, set it on. If the TVBINXIT bit is already set
on, increment TIBMUXIT by 1.
v On exit, if TIBMUXIT is zero (0), clear the TVBINXIT bit. However, if TIBMUXIT
is greater than 0, decrement it by 1.
Displaying Status
The LIST command displays the status of asubtask on an operator's terminal. For
OPTs, in addition to status, a header line and the contents of TVBOPID and
TVBLUNAM are also displayed. Status is determined by the following TVB bit
fields in the following order:
1. TVBLGOFF – Stopping
2. TVBACTV – Active
3. TVBLGON – Starting
4. None of the above – Inactive
Do this as follows:
v If your subtask opens a VTAM ACB, code a TPEND exit for VTAM that is called
when VTAM ends. Your TPEND exit can post TVBTECB to signal subtask
termination to begin.
v If your subtask requires VTAM to be active and does not open an ACB, you can
still be notified. Set the TVBAUTVE bit in the TVB for your subtask. When the
main subtask TPEND is called (for HALT NET, QUICK, for HALT NET,
CANCEL, and for VTAM ABEND), the NetView main subtask posts TVBTECB
for every subtask that has TVBAUTVE set to 1.
v The NetView program also provides another bit, TVBAUTVS, which causes the
NetView main subtask to reattach your subtask when the NetView program
detects that the VTAM program has successfully opened the main subtask's
ACB. Set the TVBAUTVS bit to 1 for this function.
86 Programming: Assembler
Writing User Subtasks
– A VSAM data services macro interface (DSIZVSMS) using PUT and GET to
obtain records from a predefined VSAM data set.
v Various installation exits
Installation of a DST
You can dynamically start a data services task (DST) without defining it in the
CNMSTYLE member by using the START command with the TASK keyword.
If you choose to define the TASK statement in the CNMSTYLE member, the
statement follows the same format as the optional TASK statement, with the
following exceptions:
v The MOD keyword must specify DSIZDST as the subtask processing module.
DSIZDST, provided by the NetView program, provides the necessary
initialization, processing, and termination routines to use the DSCP interfaces.
v The initialization data set member (specified by the MEM keyword) must
contain DSTINIT statements to provide initialization parameters required by
DSIZDST. The statements are described in the following sections under their
respective interfaces.
The other TASK statement keywords have the same meanings as those coded for
an optional task, as follows:
PRI Specifies the relative task priority (1 - 9). One is the highest task priority
that can be assigned, and 9 is the lowest.
INIT Specifies whether the task is to be started during NetView initialization
(INIT=Y) or using the START command only (INIT=N).
Initialization of a DST
The following keywords apply to DST initialization (DSTINIT) processing.
v FUNCT
Specifies the DST services that are required. In all cases, the ability to call DSCPs
is provided. The following list shows the function choices:
OTHER
The DST does not require the CNMI or VSAM interfaces.
BOTH Both of the VSAM and CNMI interfaces are required.
CNMI Only the CNMI interface is required.
VSAM
Only the VSAM interface is required.
v XITDI
Specifies the name of the user-provided initialization exit. The exit is called with
the standard NetView installation exit interface as described in Chapter 3,
Chapter 5. Writing User Subtasks 87
Writing User Subtasks
“Writing Installation Exit Routines,” on page 23, and is called once for every
statement in the specified initialization member (MEM keyword of TASK
statement). When the end of file is reached, USERPDB and USERMSG are both
0. For each statement (except end-of-file condition), the standard installation exit
return codes cause the following actions:
USERASIS (0)
The statement is processed by the NetView DST module (DSIZDST). If it
is not a valid DSTINIT statement, DSIZDST rejects it with an error
message and continues processing.
USERDROP (4)
The statement is not processed by DSIZDST. Use this return code if your
installation exit is going to process the statement (you can define your
own initialization statements).
USERSWAP (8)
The swapped buffer is not processed by DSIZDST. If the swapped buffer
does not contain a valid DSTINIT statement, it is rejected by DSIZDST
and processing continues.
When returning from the last call (for end of file), any nonzero return code
terminates the DST. Termination occurs only if the initialization process has failed.
The initialization exit calls the DSIPUSH service to define a LOGOFF routine. The
LOGOFF routine is called during normal or abnormal end-of-task processing. No
termination exit is provided. The LOGOFF routine frees any resources that the user
has acquired. Storage that has been acquired with the Q=YES option is
automatically freed by the DSIZDST module.
Note: For additional details on DSTINIT statements, refer to the IBM Tivoli
NetView for z/OS Administration Reference.
When a DST calls a DSCP, the input to the DSCP includes the address of a data
services request block (DSRB) in the CWBDSRB field. The function code
(DSRBFNCD) indicates the purpose for which the command was called.
DSRBFNCD is described in “DSIDSRB: Data Services Request Block” on page 118.
88 Programming: Assembler
Writing User Subtasks
DSTINIT Keywords: The following list shows the keywords for the DSTINIT
statement:
UNSOL
Specifies the command verb name of the module that is to serve as the
unsolicited DSCP for this DST. The unsolicited DSCP cannot issue the
DSIZCSMS macro, but can issue the DSIZVSMS macro.
DSRBU
Specifies the number of unsolicited DSRBs that are to be allocated to this
DST. If this DST does not process unsolicited CNM data, set this value to
0. If the unsolicited DSCP issues the DSIZVSMS macro, set this value to
the number of concurrent DSIZVSMS requests that are valid. If the
unsolicited DSCP does not issue the DSIZVSMS macro, set this value to 1.
DSCP Interface: When the unsolicited DSCP receives control, the DSRBFNCD
field contains the DSRBFUNS (unsolicited) function code, DSRBUBUF is 0, and
DSRBCUSB contains the address of a NetView buffer containing the unsolicited
data. The RU starts at the offset specified in HDRTDISP, and the RU length is in
HDRMLENG. If a deliver header is present, it is considered part of the data (for
example, HDRTDISP points to the start of the deliver header). Refer to the z/OS
Communications Server library for more information. Table 8 describes the return
codes on entry to the unsolicited DSCP.
Table 8. Return Codes on Entry to the Unsolicited DSCP
DSRBRCMA DSRBRCMI Meaning
00 00 Successful completion.
00 16 Installation exit rejected the deliver RU. HDRMLENG is
set to 0.
00 20 Data has been truncated. The length of the deliver RU is
greater than the length of the buffer. HDRMLENG is set to
the truncated length.
DSCP Interface: Acquiring CNM data is a two-part process. When the DSCP is
first driven (generally by a command buffer queued by an OST using a DSIMQS
macro), the DSRBFNCD field contains a value of DSRBFNRM. The CWBDSRB field
points to a DSRB that must be passed on the DSIZCSMS macro. You must issue
the DSIZCSMS macro with this DSRB. After you issue the macro, register 15
contains the major return code and register 0 contains the minor return code
(additional completion information). If register 15 is not 0, the macro has failed. If
register 15 is 0, the request has successfully been sent to VTAM. At this time, the
DSCP can exit because the data is returned on a subsequent invocation of the same
DSCP. (This is called a redrive operation.)
When the DSCP is redriven (the second part of the process), the DSRBFNCD code
is DSRBFSOL. Check the DSRB major return code (DSRBRCMA) and the DSRB
minor return code (DSRBRCMI) to determine whether the request completed
successfully.
Table 9 describes major and minor return codes and their meanings.
Table 9. DSIZCSMS Return Codes
DSRBRCMA DSRBRCMI Meaning
00 00 Successful completion.
00 04 Negative response was received. DSRBINPT contains the
address of the negative response.
00 08 Insufficient storage to process the request.
00 16 Installation exit rejected the deliver RU. HDRMLENG is
set to 0.
00 20 Data has been truncated. The length of the deliver RU is
greater than the length of the buffer. HDRMLENG is set to
the truncated length.
00 24 Data is truncated after the installation exit returns with a
return code of USERSWAP. HDRMLENG is set to the
truncated length.
00 28 VTAM rejected the request.
00 32 CNM interface closed because of an unrecoverable error.
00 36 Positive response was received.
90 Programming: Assembler
Writing User Subtasks
If the request completes successfully, the input buffer supplied on the initial
DSIZCSMS invocation (INPUT parameter) contains the received data. The buffer
contains a standard NetView buffer header with HDRTDISP containing the offset
to the start of the data. If the data is preceded by a deliver RU, HDRTDISP
contains the offset to the start of the deliver RU.
After the initial invocation of DSIZCSMS and until the DSCP is redriven, the DSRB
is considered in use and is not available to other DSCPs. Other DSCPs can run
during this time if the DSRBO value is greater than 1 and there is a DSRB that is
not in use by another DSCP. When the DSCP is redriven, the DSRB is the only
control block that does not change from the initial invocation of the DSCP. You can
use the DSRBUSER field to contain or point to any additional environment
information that you want to maintain. See the description of DSRBUSER for more
information.
For information about the DEFINE CLUSTER statement, refer to the z/OS library,
DFSMS component.
DSTINIT Keywords
The following are the keywords for the DSTINIT statement. The primary and
secondary data sets are user-defined and can be switched with each other.
PDDNM
Specifies the DD name of the primary data set to be used by VSAM
services. Allocate this data set before starting the DST.
PPASS
Specifies the VSAM password to be used when the primary data set ACB
is opened.
SDDNM
Specifies the DD name of the secondary data set to be used by VSAM
services. Allocate this data set before starting the DST. The NetView
SWITCH command controls which data set is currently the active data set.
SPASS
Specifies the VSAM password to be used when the secondary data set ACB
is opened.
MACRF
Specifies local resource sharing.
XITVN
Specifies an installation exit to receive control when an empty VSAM data
set has been opened for processing. You can use this to put an initialization
record into the data set.
XITVI Specifies an installation exit to receive control upon input from the VSAM
data set before the input record is passed to the requesting DSCP.
XITVO
Specifies an installation exit to receive control before output of a record to
the VSAM data set.
Note: If DSRBO is greater than 1, the NetView program does not guarantee that
the DSIZVSMS requests for VSAM PUTS are processed in the order they were
submitted. The requests are completed asynchronously.
DSCP Interface
Like the CNMI service (DSIZCSMS), using DSIZVSMS is a two-part process.
When the DSCP is first driven, generally by a command buffer sent by an OST
using a DSIMQS macro, the DSRBFNCD field contains a value of DSRBFNRM. The
CWBDSRB field points to a DSRB that must be passed on the DSIZVSMS macro.
Issue the DSIZVSMS macro with the supplied DSRB. After you issue the macro,
register 15 contains the major return code and register 0 contains the minor return
code, which is additional completion information. If register 15 is not 0, the macro
has failed. If register 15 is 0, the request has successfully been sent to VSAM. At
this time, the DSCP can exit because the success or failure of the VSAM
input/output requested is returned on a subsequent invocation of the same DSCP.
This is called a redrive operation. When the DSCP is redriven, the DSRBFNCD
code is DSRBFVSM. Check the DSRBRCMA (DSRB major return code) and the
DSRBRCMI (DSRB minor return code) to see if the request completed successfully.
Table 10 describes the major and minor return codes for the DSIZVSMS macro.
Table 10. DSIZVSMS Return Codes
DSRBRCMA DSRBRCMI Meaning
00 00 Successful completion.
00 16 Installation exit processing of VSAM input has rejected the
input. HDRMLENG is set to 0.
00 24 Data has been truncated. Installation exit returned data
longer than NetView buffer on RC = USERSWAP.
HDRMLENG is set to the truncated length.
00 28 Return code from installation exit is not valid.
08 VSAM RPL feedback VSAM logical error, indicated in
DSRBRCMI. Refer to the OS/VS VSAM library and the
DFSMS VSAM library.
12 VSAM RPL feedback VSAM physical error, indicated in
DSRBRCMI. Refer to the OS/VS VSAM library and the
DFSMS VSAM library.
92 Programming: Assembler
Writing User Subtasks
For GET requests, the BUFHDR HDRMLENG field indicates the length of
the data read. HDRTDISP contains the offset to the data.
DSRBVKEY
The address of the key in the DSRBVDAD buffer.
DSRBVKLN
The key length.
DSRBVRTP
Indicates the type of request just completed:
1 - DSRVGET (VSAM GET)
2 - DSRVPUT (VSAM PUT)
3 - DSRVPNT (VSAM POINT)
4 - DSRVERS (VSAM ERASE)
5 - DSRVNRQ (VSAM ENDREQ)
After the initial invocation of DSIZVSMS and until the DSCP is redriven, the DSRB
is considered in use and is not available to other DSCPs. Other DSCPs can run
during this time if the DSRBO value is greater than 1 and there is a DSRB that is
not in use by another DSCP. When the DSCP is redriven, the DSRB is the only
control block that does not change from the initial invocation of the DSCP. You can
use the DSRBUSER field to contain or point to any additional environment
information that you wish to maintain. See the description of DSRBUSER for more
information.
1. When a DSCP is redriven, its input control blocks and fields, except for the DSRB, can be completely different from those used in
its previous invocation
DSCP
Initialize
Check DSRB
Function Code
Yes Initial No
Command
?
More
Yes CNMI No
Work
?
DSIMBS
Build Error
1 Message
Issue Issue 3
DSIZCSMS DSIZCSMS
5
End
Figure 10 on page 95 shows that one way you can structure data services requests.
This example starts with an initial operator command. This command calls the
DSCP using DSIMQS with an IFRCODCR buffer. When the DSCP has obtained
VSAM or CNM data to be presented, it can do either of the following steps:
v Send the message data to the terminal (for standard or title-line output).
v Call a presentation services command processor (PSCP) to present the data (for
full-screen output).
94 Programming: Assembler
Writing User Subtasks
Operator
Terminal
Command
entered
from
terminal
DST DST
DSIZCSMS
VTAM
User-Written DSIMQS Data
Regular Command IFRCODCR Services
Processor for Command
Syntax and Processor DSIZVSMS
Data
Parameter Checking Base
Message
DSIMQS
Command
Processor
Saves
Data DSIMQS
IFRCODCR
DSIPSS to
send full
screen of RESUME
data Presents Data
The command processor uses DSIGET to obtain storage. The address of this
storage can be saved in DSRBUSER (provided that the DSRB is considered “in
use”) or DSIPUSH can save it as a named storage pointer. Saving this information
establishes and maintains data from one DSCP call to the next.
If the DSCP does not use the parse buffer PDB, you can improve the performance
by specifying PARSE=N on the CMDDEF statement defining the DSCP. In this
case, the command buffer is not parsed and no PDB is provided to the command
processor.
An operator can have one or more pending DST requests. You can use the LIST
DST command to list active DST requests.
User-Defined Services
You can call command processors defined as TYPE=D or TYPE=RD under the DST
to perform user functions. The processors are called with a standard NetView
command processor interface (register 1 points to a DSICWB control block). If
parsing of the command buffer is not required, specify PARSE=N on the respective
CMDDEF statement for the DSCP. This option improves performance.
96 Programming: Assembler
Chapter 6. Writing User Function Directories
This section explains how to add functions, expand, or replace those REXX
functions that exist in the NetView REXX environment.
You can write an external function or subroutine in assembler and store it in a load
library. This provides faster access to the function or subroutine than if the
function or subroutine is written in REXX. For even faster access to a function or
subroutine, and therefore better performance, you can group frequently used
external functions and subroutines in function packages (grouped or packaged
together). To include an external function or subroutine in a function package, it
must be linked into a load module together with a function package directory. The
name of the resulting load module must be added to the function package table in
the NetView DSIRXPRM module.
To provide new functions or change existing functions, several steps are required.
The steps are described and explained in more detail in the following sections.
Interface to Functions
When your code gets control, the function gets a control block called the
evaluation block (EVALBLOK).The function places the result in the evaluation
block, which is returned to the language processor. The result in the evaluation
block is used in the interpretation of the REXX instruction that contained the
function.
Entry Specifications
When the code for the function gets control, the contents of the registers are as
follows:
Register 0
Address of the environment block (TIB address is in
ENVBLOCK_USERFIELD)
Register 1
Address of the external function parameter list (EFPL)
Registers 2-12
Unpredictable
Register 13
Address of a register save area
Register 14
Return address
Register 15
Entry point address
98 Programming: Assembler
Writing User Function Directories
Argument List
Table 12 shows the format of the parsed argument list that the function receives at
offset +16 (decimal). TSO/E provides the mapping macro IRXARGTB for the
argument list.
Table 12. Format of the Argument List
Offset Number
(Dec) of Bytes Field Name Description
0 4 ARGSTRING_PTR Address of argument 1
4 4 ARGSTRING_LENGTH Length of argument 1
8 4 ARGSTRING_PTR Address of argument 2
12 4 ARGSTRING_LENGTH Length of argument 2
16 4 ARGSTRING_PTR Address of argument 3
20 4 ARGSTRING_LENGTH Length of argument 3
24 8 --- X'FFFFFFFFFFFFFFFF'
In the argument list, each argument consists of the address of the argument and its
length. The argument list is terminated by X'FFFFFFFFFFFFFFFF'.
Evaluation Block
Before the function returns control to the language processor, the address of a
fullword that contains the address of the evaluation block (EVALBLOK) is placed
at offset +20 of the external function parameter list. The function computes the
result and returns the result in the evaluation block.
The evaluation block consists of a header and data, in which you place the result
from your function. Table 13 shows the format of the evaluation block.
TSO/E provides the mapping macro IRXEVALB for the evaluation block.
Table 13. Format of the Evaluation Block
Offset Number of
(Decimal) Bytes Field Name Description
0 4 EVPAD1 A fullword that contains X'00'. This field is
reserved and is not used.
4 4 EVSIZE Specifies the total size of the evaluation block, in
doublewords.
8 4 EVLEN On entry, this field is set to X'80000000', which
indicates no result is currently stored in the
evaluation block. On return, specify the length of
the result, in bytes, that your code is returning.
The result is returned in the EVDATA field at
offset +16.
12 4 EVPAD2 A fullword that contains X'00'. This field is
reserved and is not used.
16 n EVDATA The field in which you place the result from the
function or subroutine. The length of the field
depends on the total size specified for the control
block in the EVSIZE field. The length of the
EVDATA field can be computed using the
formula (EVSIZE*8)-16.
The function computes the result, moves the result into the EVDATA field, and
updates the EVLEN field. If the initial evaluation block is too small to hold the
complete result, you can use the DSIRXEBS macro to obtain a larger evaluation
block. DSIRXEBS creates the new evaluation block and returns the address of the
new block. Your code can then place the result in the new evaluation block. You
must also change the parameter for the address of the EVALBLOK in the
parameter list to point to the new evaluation block. If you used DSIRXEBS to get
the initial evaluation block, DSIRXEBS releases the evaluation block if its address is
provided when obtaining the larger evaluation block.
Functions must return a result. Subroutines are not required to return a result.
Note: Functions not contained in the function package can be link-edited into the
load library as stand-alone functions.
A load module contains a function package directory that you can tailor to
individual users or local groups. The name of the entry point at the beginning of
the directory is the function package directory name. The name of the directory is
specified only on the CSECT. In addition to the name of the entry point, the
function package directories define each entry point for the individual functions
that are part of the function package. The directories consist of two parts:
v A header
v Individual entries for each function included in the function package
Table 14 shows the format of the directory header. Table 15 on page 101 illustrates
the rows of entries in the function package directory.
Table 14. Format of the Function Package Directory Header
Offset Number of
(Decimal) Bytes Description
0 8 An 8-byte character field that defines the directory. This is the
name of the directory. For example, you can specify DSIRXUFP,
which is one of the dummy function package names that is
provided. The name must be in uppercase and left-aligned.
8 4 Specifies the length, in bytes, of the header. This is the offset
from the beginning of the header to the first entry in the
directory. This must be a fullword binary number equivalent to
decimal 24.
12 4 Specifies the number of functions defined in the function
package (the number of rows in the directory). The format is a
fullword binary number.
16 4 Reserved.
20 4 Specifies the length, in bytes, of an entry in the directory
(length of a row). This must be a fullword binary number
equivalent to decimal 32.
At offset +0 in the header, specify the name of the function package directory. Two
dummy function package directory names are provided:
v DSIRXUFP for a user function package
100 Programming: Assembler
Writing User Function Directories
DSIRXUFP CSECT
DC CL8’DSIRXUFP’ String identifying directory
DC FL4’24’ Length of header
DC FL4’4’ Number of rows in directory
DC FL4’0’ Word of zeros
DC FL4’32’ Length of directory entry
* Start of definition of first entry
DC CL8’MYF1 ’ Name used in command list
DC FL4’0’ Address of preloaded code
DC FL4’0’ Reserved field
DC CL8’ABCFUN1 ’ Name of entry point
DC CL8’FUNCTDD1’ DD from which to load entry point
* Start of definition of second entry
DC CL8’MYF2 ’ Name used in command list
DC FL4’0’ Address of preloaded code
DC FL4’0’ Reserved field
DC CL8’ABCFUN2 ’ Name of entry point
DC CL8’FUNCTDD1’ DD from which to load entry point
* Start of definition of third entry
DC CL8’MYS3 ’ Name used in command list
DC AL4(ABCSUB3) Address of preloaded code
DC FL4’0’ Reserved field
DC CL8’ABCFUN3 ’ Name of entry point
DC CL8’FUNCTDD1’ DD from which to load entry point
* Start of definition of fourth entry
DC CL8’MYF4 ’ Name used in command list
DC VL4(ABCFUNC4) Address of preloaded code
DC FL4’0’ Reserved field
DC CL8’ ’ Name of entry point
DC CL8’FUNCTDD1’ DD from which to load entry point
SPACE 2
END DSIRXUFP
In Figure 11, the name of the function package directory is DSIRXUFP, which is
one of the dummy function package directory names provided with NetView. Four
entries are defined in this function package:
v MYF1, an external function
v MYF2, an external function
v MYS3, a subroutine
v MYF4, an external function
NetView control blocks and buffers passed to installation exits and command
processors are intended for read-only use. Do not alter them, except for fields
specifically designed as user fields, such as TVBUFLD, CWBSAVEA, and
CWBADATD.
MVTUFLD, TVBUFLD, and TIBUFLD are user fields. They are 4-byte fields that
the NetView program does not modify or refer to. User fields are for code that is
not NetView code, such as customer code or other applications running on the
NetView program.
One DSIMVT and one MVTUFLD field exist for each NetView program. One
TVBUFLD and one TIBUFLD exist for each NetView subtask and for each optional
task.
Any product that uses task user fields can remove valuable NetView resources.
Some NetView functions can keep you from overriding task user fields. See
“DSIPUSH: Establish Long-Running Command” on page 223 for information about
the DSIPUSH function.
Because only a single set of user fields is provided, use a method to communicate
the application usage of a particular field so that subsequently developed
applications do not interfere with the existing usage of the field. Use one of these
methods or one of your own:
v Any application or product using any field should document its use. If a task
user field (such as TVBUFLD or TIBUFLD) is used, document the name of the
task (such as TVBOPID or TVBLUNAM) for anyone who uses the application or
product.
For example, if a component of a product is coded to run as an optional task,
and the product uses the TIB or TVB user fields of that optional task, include
that information in the product documentation.
v The TVBUFLD and TIBUFLD fields of a non-NetView task are under the control
of the code that “owns” the task. In the previous example, if a customer queries
the value in the TVBUFLD of every TVB on the TVB chain, do not query the
TVBUFLD in the optional task. The product can be using the TVBUFLD of its
task for a purpose that conflicts with the customer’s intended use.
The size of the BUFHDR was increased in a previous release of the NetView
program. The BUFHDR presentation-extension fields shown in Figure 12 were
added.
20 (14)
Reserved Area
An initialized BUFHDR has the fields set as shown in Table 16 on page 105:
When HDRMTYPE=HDRTYP10:
HDRLNMSU TYPE=MSU DATA BUFFER
HDRLNHIR TYPE=MSU HIERARCHY BUFFER
HDRMCEXT 12 An extension that is appended to the BUFHDR when a
buffer is transferred from one subtask to another. Except
for a buffer with HDRMTYPE of HDRTYPEI (an IFR),
which must already have an extension, macro DSIMQS
BFRFLG=NO builds this extension when it creates a buffer
copy for the destination task. If you want to pass the
actual buffer with DSIMQS BFRFLG=YES, you must build
the extension and initialize HDRSENDR.
HDRMLENG 2 The length, in bytes, of the text in the buffer.
HDRMSG 0 Label to indicate the place for text to begin if HDRMCEXT
is present.
HDRMSGLN 0 Label at the end of HDRMCEXT for use in computing the
length, in bytes, of BUFHDR+HDRMCEXT.
HDRMTYPE 1 Indicates the current use of the buffer or the origin of the
command. If the buffer is written using macro DSIPSS, this
character is displayed and logged. For a list of values for
HDRMTYPE, see Table 18 on page 106.
HDRNEXTM 4 Multiline write-to-operator (MLWTO) buffer chain pointer;
points to the next buffer in the chain.
When the HDRTYPEY flag is set and the IFRAUWQE flag is not set, the
NetView program looks for a 3-character reply ID immediately preceding
the message number in the message text. If this reply ID exists, then the
message is a VTAM WTOR. Otherwise, the message is treated as a held
message.
When the first record is requested, macro DSIDKS reads the first block. HDRTDISP
is adjusted to indicate the first logical record. DSIDKS also sets HDRMLENG to
reflect the logical record length. When DSIDKS is issued for the next logical record,
HDRTDISP is adjusted to indicate the next logical record until the block is
exhausted. DSIDKS reads another physical record; the process starts again from the
first logical record in the block.
AIFR
256 Bytes
16 DSIAIFRO
Bytes IFRAUVPT Object 2
DSIAIFRO
Object 3
Where:
LLLL Represents a 2-byte length field
KKKK
Represents a 2-byte type-identification field
D...D Represents either data values, or one or more contained objects
An AIFR extension is an object that can contain objects. In general, the objects it
contains are unordered. Its first contained object is necessarily the next extension
locator, and the next extension locator must be present and must be first.
(m+1-4 = m-3)
67 Code for first part of the AIFR extension
The minimum value of n is 15; that is, the minimum length of the AIFR extension
is 16. There must be at least one contained object, because the first part of the AIFR
extension must be the next extension locator.
The address space identifier is in access list entry token (ALET) format. When this
identifier is set to zero, the extension is in the same address space as the base. (The
ALET is an S/370 architecture item, and is not operating system specific.)
The message control object can contain an MDB global object and a source object.
In turn, the MDB global object can contain a general object and a control program
object. An example of this “nesting” is shown in Figure 14 on page 114:
IFRAUVPT
or DSIAIFRO
AIFNXPTR
Next extension locator object Must be first
DSIMCO (optional)
DSIMSO (optional)
DSIMSOSB
DSIMSOSB (optional)
DSIMSO and DSIMGO
(optional) can be in either
order within DSIMCO
DSIMGO (Optional)
DSIGOJ
DSICPO (Optional)
Table 20 details the self-identifying codes for the message control object and the
objects it can contain.
Table 20. Message Control Object Type/Self-Identifying Code Matrix. All objects have 2-byte
lengths and 2-byte codes; some objects might be absent.
Object Type Map Name in DSIAIFRO Self-Identifying Code
Message Control Object DSIMCO 0006
MDB Global Object DSIMGO 0007
MDB General Object DSIGOJ 0001
MDB Control Program DSICPO 0002
Object
Source Object DSIMSO 0005
1
MDB NLS (none) 0003
2
MDB Message Text Object DSITOJ 0004
Note:
1. MDB NLS is not used.
2. MDB Message text objects are not contained in DSIMCO. The data from the MDB
message text objects is stored in the IFRAUTBA buffer chain.
The following list shows the codes for a subobject (part of the source object
containing a name):
D5 The nickname, in character format 1 – 8 bytes
Note: Characters for these fields can be from the coded graphic character set
01134–00500. Trailing EBCDIC blanks are permitted but are insignificant. This set
consists of capitals A – Z and numerals 0 – 9, without punctuation or special
symbols.
Source
Object Sub-object 1 Sub-object 2 Sub-object n
Header
Figure 15. Source Object Diagram. Source Object has 2-byte length and 2-byte code. Each
Sub-object has 1-byte length, 1-byte code, and data.
The source object name identifies the origin of the message in the MDB. The name
of the source is selected using the following hierarchy from the sub-objects
contained in the source object:
1. The first nickname, if any. If no nickname is found, go to step 2.
2. The first NETID concatenated to a NAU name, with a period (.) between them,
if both exist in sequence. If that combination is not found, go to step 3.
3. The first NAU name, if it exists. If that is not found, go to step 4.
4. Either the character string N/A if none of listed names exist, or null if the
message has no source object vector, or if the vector data has structural damage
(unacceptable length fields, for example).
For the IFR, the value of HDRTDISP is always decimal 36, which includes a
standard 24-byte BUFHDR and a 12-byte HDRMCEXT. The IFRCODE must begin
immediately after the BUFHDR extension (at displacement decimal 36 as indicated
by the HDRTDISP value).
Usage notes:
1. Setting the message action flags in the buffer in DSIEX02A is equivalent to
specifying the options in the NetView automation table. If the message is
selected by the NetView automation table, any options specified by the table
overlay the DSIEX02A values. After DSIEX02A and table processing, the
message is evaluated against criteria specified by DEFAULTS and OVERRIDE
commands to determine display and logging actions. IFRAUACT must be set
to 1 if any ACTIONS are selected by DSIEX02A. When obtaining storage for an
AIFR, separate invocations of DSIGET are used for each buffer chained off the
AIFR. This includes the buffers in the IFRAUTBA chain. For each DSIGET,
specify nonqueued subpool zero storage.
2. In the BUFHDR that precedes the IFR:
a. HDRMTYPE is specified as I (HDRMTYPE=X'C9'; symbol HDRTYPEI).
Each NetView program has one MVT. You can locate the MVT from a subtask
through the TVBMVT, a pointer in the task vector block (DSITVB).
For field name MVTAIDFT, the following defaults are set in DSIMVT and relate to
DSIEX16:
Table 31. DSIMVT Defaults that Relate to DSIEX16
Length or
Mask Start-up Value Description
1 byte
1... .... 1
1 = Messages can be held on the screen.
0 = Messages cannot be held on the screen.
.x.. .... Reserved.
..0. .... 0
0 = Messages other than NetView WTO and WTOR are
not written to the system log.
The SVL contains the addresses of many service routines. The SVL has no user
fields. However, include this control block to use NetView services.
DSITECBR also contains the environment area that is pushed down with the
DSITECBS macro and returned when the ECB is posted.
The following DSITIB fields apply to all NetView tasks. These fields are read-only
unless otherwise specified. Fields that are useful when writing optional subtasks
are noted. Do not modify these fields unless you are writing an optional task.
Table 36. Task Information Block Fields
Field Name Length Description
TIBCBH 4 A standard control block header. The CBHTYPE field
contains the same information as the CBHTYPE field in
the TVB.
TIBACB 4 A pointer to a VTAM ACB for NetView subtasks. This
field can be modified by a user-written optional task.
TIBAPID 9 The VTAM application program name for a NetView
subtask. This field can be modified by a user-written
optional task.
TIBAPWD 9 The VTAM password for NetView subtasks. This field can
be modified by a user-written optional task.
TIBAREA1 62 Pointers to other control blocks such as CWB, SWB, or
PDB for NetView subtasks. This field can be modified by a
user-written optional task.
TIBBITS 1 3270 address mode support flags:
TIB12BIT = 1 means 12-bit addresses are valid.
TIB14BIT = 1 means 14-bit addresses are valid.
TIB16BIT = 1 means 16-bit addresses are valid.
Note: More than one bit can be on at the same time to
indicate the allowed modes.
The TVB contains pointers to the MVT and the TIB. You can obtain the addresses
of other important control blocks from these control blocks. The TIB, an extension
of the TVB, represents an active task. TVBs are chained together through the
TVBNEXT field. MVTTVB points to the beginning of the chain.
The subtask uses the following bit fields. Some of these flag bits are defined by the
subtask; others are defined by the main task.
Table 38. Task Vector Block Subtask Fields
Field Name Length Description
TVBAIIFR 4 Address of AIFR buffer structure when a command is
driven from the NetView automation table, the MS
transport, or the NetView high-performance transport.
Otherwise, the address is zero (0).
TVBHCUSE 4 Can be defined by the subtask. For an HCT, this field
tracks the number of subtasks currently using the
hardcopy subtask.
TVBIND1 1 Indicator byte:
TVBTERM
A value of 1 indicates that the subtask has ended
normally, and the subtask has released all
resources. This bit must be supported by the
subtask. If the bit is set on by the main task
before attaching the subtask, a value of 1
indicates to the subtask that it has been attached
for cleanup. The subtask is to release all resources
and return control to the main task with this bit
still set to 1.
TVBIND2 1 Indicator byte:
TVBVCLOS
This flag bit can be defined by the subtask.
TVBABLOG
A 1 indicates a task is being re-initialized just
after an abend.
TVBIND3 1 Indicator byte:
TVBACTV = 1
The subtask is active. This bit is set by the
subtask. While this bit is on, messages can be sent
to the subtask using macro DSIMQS.
TVBINXIT = 1
An IRB exit routine is running.
TVBLGOFF = 1
The subtask is ending upon request.
TVBLGON = 1
The subtask is starting.
TVBRCVAI
Can be defined by the subtask. For an OST or an
NNT, TVBRCVAI = 1 means a RECEIVE ANY for
cross-domain sessions has been issued.
TVBRESET = 1
Regular commands stop processing immediately.
If your subtask does not run command
processors, you can redefine this flag.
TVBIND4 1 Indicator byte:
TVBRCVRY = 1
Recovery is in progress for this subtask.
An extension of USE is present for DSIEX12 and the DST exit routines involved
with input and output (XITCO, XITCI, XITVN, XITVI, XITVO, and XITXL). For
DSIEX12, the password, hardcopy printer name, and profile name are given. For
the DST exit routines, the address of the DSRB is given.
NetView macros overwrite registers 0, 1, 14, and 15. Before issuing any macro,
except DSICBS, set register 13 to a standard 72-byte save area.
Use only the operands documented in this book. Any undocumented operands
that a macro has are only for internal use by the NetView program and cannot be
used in user-written programs.
If there is an active automation table, the automation table statements are scanned
for appropriate matches with the MSU passed by DSIAUTO. Any actions specified
on matching automation statements are taken.
DSIAUTO issues a return code that indicates the result of the automation table
scan.
DSIAUTO
► , SWB = swb ►◄
( register )
Where:
DATA
Specifies the register containing the address or the symbolic name of the data
item, which must be one of the following forms:
v A multiple-domain support message unit (MDS-MU)
v A control point management services unit (CP-MSU)
v A network management vector transport (NMVT)
This is a required operand.
SWB
Specifies either a register or the symbolic name of a fullword area containing
the address of a service work block (DSISWB).
This is a required operand.
The address for the NMVT must have a 2-byte length field preceding the X'41038D'
header. This length is similar to the 2-byte length field defined as the beginning of
an MDS-MU or CP-MSU. However, the NMVT length field reflects the length
starting at the X'41038D' header to the end of the NMVT. The length in MDS-MUs
or CP-MSUs reflects the length of the MSU starting at the length field. The
difference is that an NMVT length field does not include the length of the length
field itself.
For more information about the formats of architected vectors, refer to the SNA
library.
DSIBAM
, CONTROL = N
►► DSIBAM DOMID = N ►
label Y , CONTROL = N
END Y
HIER = N
Y
MSGID = symbol
Subvector
, DATALIN = Y
► ►◄
, DATALIN = N
Y
Subvector:
SVID = symbol ►
, SVOCCUR = symbol
, XLATE = N
►
, SFID = symbol , XLATE = N
, SFOCCUR = symbol Y
Where:
CONTROL
Specifies whether add the keyword=data token to the control line of the alert
automation message.
N Do not put the keyword=data token on the control line. This is the default.
Y Put the keyword=data token on the control line.
DATALIN
Specifies whether to add the keyword=data token to a data line of the alert
automation message.
N Do not put the keyword=data token on a data line.
Y Put the keyword=data token on a data line. This is the default.
DOMID
Specifies whether to evaluate the domain ID in the major vector. You must
specify DOMID only once.
N Do not build DOMID=data token.
Y Build DOMID=data token.
END
Causes the table to end. You must specify END only once, and it must be the
last occurrence of DSIBAM.
HIER
Specifies whether to evaluate the hierarchy in the major vector. The data
portion of the HIER keyword=data token is formatted as a list of up to five
8-character resource names/resource type pairs (NAME1, TYP1, NAME2,
TYP2, ...). You must specify HIER only once.
N Do not build HIER=data token.
DSIBAMKW
► , LENGTH = ( n ) ►◄
, PREFIX = SV
SF
NO
Where:
DATA
Is the number representing the address of the data to be put into the
keyword=data token.
LENGTH
Is the number representing the fullword area containing the address of the
length of the data to be put into the keyword=data token.
PREFIX
Specifies the characters to prefix DATA on the token.
TYPE
Specifies the data type to be moved:
CHARS
The data is in EBCDIC character format.
HEX
The data is in hexadecimal format.
DSICBS ensures that a control block is included only once, inner control blocks are
included if necessary, and each definition for an inner control block precedes the
definition of the outer control block. DSICBS also controls the format and printing,
or suppression, of DSECTs for the control blocks.
DSICBS
,
, EJECT = YES
►► DSICBS ▼ ►
label cbname , EJECT = NO
YES
, RSECT = TEST
► ►◄
, RSECT = NO
TEST
YES
Where:
cbname
Is the name of a control block, starting with DSI, to be included. Names must
be separated by commas.
DEFER
Defers control block expansions.
ALL
Specifies that all subsequent DSICBSs are not expanded until a DSICBS
DSICES
, CLISTCK = NO
► ►◄
, CLISTCK = NO
YES
Where:
BFR
Is the register, or symbolic name of a fullword area, containing the address of
the buffer that contains the verb to be analyzed. This buffer must have an
initialized BUFHDR.
CLISTCK
Specifies whether to check for a valid command list name if the command has
no CMDDEF statement in CNMCMD or its included members.
NO Specifies that you do not need to check for a command list name if a
CMDDEF statement is not found. This is the default.
YES
Specifies that you need to check for a command list name if a CMDDEF
statement is not found.
MODNAME
Specifies the module name to be located in the system command table. You can
specify the modulename as the field that contains the module name or as the
module name enclosed in single quotation marks.
PDB
Is the register, or symbolic name of a fullword area, containing the address of a
completed parse descriptor block (DSIPDB) to be used as input.
SCTADDR
Is the register containing the address of a user-provided fullword area, or the
symbolic name of that area, where the address of the system command entry
corresponding to the module name or verb is to be returned. The returned
pointer addresses an SCT entry (DSISCE) dummy control section (DSECT).
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB). SWBTIB identifies your task information block
(DSITIB), which identifies your task type.
Note:
1. If MODNAME is specified, the first entry that is found in the SCT
corresponding to the module name is returned. If the module name specified
DSICVTHE
Where:
INPUT
Is the register, or symbolic name of the fullword area, containing the address of
the input string to convert.
LENGTH
Is the register, or symbolic name of the fullword area, containing the address of
the length of the input string to convert.
OUTPUT
Is the register, or symbolic name of the fullword area, containing the address to
which the conversion of the input string is to be moved.
The code point translation service routine is available to the NetView program in
REXX, PL/I, C, and assembly languages. The function performed is the same,
regardless of the language you choose to use.
DSIC2T
► , TXTLENG = ( register ) ►◄
symbolic_name
Where:
CODE
Is the register containing the address of the area that contains the code point to
be translated, or symbolic name of that area.
MXTXTLN
Is the register containing the address of the area that contains the maximum
length of the text that can be returned, or symbolic name of that area. This is
the maximum length of the txtarea field.
SWB
Is the register containing the address of a service work block, or symbolic
name of that area.
TABLE
Is the register containing the address of the area that contains the 8-character
name of the table to be used in the translation, or symbolic name of that area.
The following tables are valid:
SNAALERT
SNA alert description code point
SNACAUSE
SNA probable cause
SNADDATA
SNA detailed data
SNAFCAUS
SNA failure cause
SNAICAUS
SNA install cause
SNAREACT
SNA recommended actions
SNAUCAUS
SNA user cause
TXTAREA
Is the register containing the address of the area that receives the text for the
translated code point, or symbolic name of that area.
TXTLENG
Is the register containing the address of the area that contains the length of the
text returned for the specified code point, or symbolic name of that area.
Note: If the alert text is truncated, it is truncated using the MXTXTLN field
value. Then the TXTLENG field contains the full alert text length.
DSIDATIM places the date and time in an output area. You can use this macro to
obtain the time for the HDRTSTMP field of a message.
DSIDATIM
, FORMAT = EBCDIC
► ►◄
, FORMAT = BINARY
EBCDIC
Where:
AREA
Is the register containing the address of the area into which the date and time
are returned, or symbolic name of that area. This area does not have a buffer
header.
FORMAT
Specifies the format of the output.
BINARY
Returns the date and time in 8 bytes in packed decimal format as follows:
0CyydddFhhmmss0C
Where 0C indicates the century. In the years 1900 through 1999, the value
of this field is 00. In the years 2000 through 2099, the value of this field is
01 yy is the last two digits of the year. ddd is the day. F is a 4–bit sign
character that enables the data to be unpacked and printed. hh is the hour,
mm is the minute, and ss is seconds. The ending X’0C’ indicates the data is
in packed decimal format.
EBCDIC
Returns the date and time in 17 bytes (including the space between date
and time) formatted as follows:
mm/dd/yy hh:mm:ss
Note: When using the BINARY form of DSIDATIM to initialize a HDRTSTMP, use
an 8-byte work area for the AREA, and move the low-order 4 bytes to HDRTSTMP
(X’hhmmss0C’).
DSIDEL
►► DSIDEL EP = modulename ►◄
label EPLOC = ( register )
symbolic_name
Where:
EP Specifies the name of the module to be deleted.
EPLOC
Specifies the address of an 8-byte field that contains the module name to be
deleted. The module name is left-aligned and padded with blanks.
Refer to your operating system macro reference for the system macro return code
description.
CNMPNL1
DSIARPT
DSIASRC
DSICLD
DSILIST
DSIMSG
DSIOPEN
DSIPARM
DSIPRF
DSIVTAM
The NetView program opens these data sets and keeps them open as long as
NetView is operating. You can then use DSIDKS to find and read any member in
any of the data sets concatenated under any of the DDNAMEs in your NetView
startup procedure.
You must have a copy of the DSECT for the data services block (DSIDSB) included
in your program. DSIMVT addressability is also required.
DSIDKS
, INCL = NO
► , NAME = ( register ) ►◄
symbolic_name , INCL = NO
YES
Where:
DSBWORD
Is the register containing the address of a user-provided fullword area on a
fullword boundary, or symbolic name of that fullword area. When the macro
completes processing for TYPE=CONN, this area contains the address of the
DSB. For other disk service requests, this area specifies the DSB address
previously obtained by TYPE=CONN.
INCL
Specifies whether %INCLUDE statements are to be processed. An %INCLUDE
statement is a record type that enables another member or file to be embedded
into the member or file being read at the point that the %INCLUDE statement
is found.
INCL=YES specifies that any %INCLUDE statements found are to be processed
and the members on files specified on the %INCLUDE statements found are to
0 The function is successful. The member or file is found and the first record
is read.
4 The member or file is not found in the source statement library or in the
specified library, or an empty member or file is found.
8 The member or file is found but an I/O error occurred on the first read.
12 The specified definition name or data set has not been opened.
20 The specified control block identifier is not valid; the member or file is not
found.
28 There is a syntax error in the %INCLUDE statement.
36 There is an incorrect member name on the %INCLUDE statement.
40 There is an incorrect embed member, which can cause a deadlock
condition. (This occurs when a member embeds itself.)
44 An unrecoverable system error occurred. An internal NetView service
failed, because of a storage failure.
46 An I/O error is encountered while trying to include a member specified in
an %INCLUDE statement.
100 + xx
An error occurred during CLOSE processing. The NetView program
attempts to recover the data set after a failure during a previous FIND or
READ. Refer to the description of the xx return code under the CLOSE
macro in your operating system macro reference.
200 + xx
An error occurred during OPEN processing. The NetView program
attempts to recover the data set after a failure during a previous FIND or
READ. Refer to the description of the xx return code under the OPEN
macro in your operating system macro reference.
Refer to the IBM Tivoli NetView for z/OS Administration Reference for information
about how to code an %INCLUDE statement.
If two storage pointers are given identical names, DSIFIND retrieves the most
recent storage address with the specified name. You can issue DSIFIND in an
immediate command. See “DSIPUSH: Establish Long-Running Command” on page
223 and “DSIPOP: Remove Long-Running Command” on page 211 for more
information.
DSIFIND
, CORR = NONE
► , LIST = ( register ) ►◄
symbolic_name , CORR = CMD
NONE
Where:
CORR
Defines the correlation option for the DSIFIND request.
When a RESUME routine is specified for DSIPUSH, the RESUME routine is
called with the correlation active at the time of the DSIPUSH regardless of the
CORR option on either the DSIPUSH or the DSIFIND.
The following list shows the options:
CMD
Means that the correlation environment saved by DSIPUSH is retrieved
and becomes the current command correlation environment. The
correlation environment is saved if the CORR=CMD option was specified
on DSIPUSH, and there was no associated RESUME routine specified on
DSIPUSH, or if DSIPUSH specified an associated RESUME routine.
This function enables the DSIPSS output of a command using the DSIFIND
CORR=CMD to be treated as if it was issued by the command that issued
this DSIPUSH. The output in most cases is asynchronous when processed
by a NetView pipeline. Code a CORRWAIT stage in the pipeline.
Where:
SWBLRCLN
Specifies the parameter list length. Set this halfword equal to SWBLRCFI
(decimal 20).
SWBLRCNM
Specifies the name of the storage to be located. The storage address is
returned in register 1. Specify this field exactly as you specified it in the
corresponding DSIPUSH macro. See “DSIPUSH: Establish Long-Running
Command” on page 223 for more information about specifying the name
field.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB). The task information block (DSITIB) address in
SWBTIB must be correctly set.
32 Macro invocation is not valid. Correct assembly errors before trying to run
the program.
36 The specified NAME is not found.
Registers 2–12 can be used for register notation. DSIFRE always generates reentrant
code.
DSIFRE
►► DSIFRE LV = ( n ) ►
label ( register )
, SP = 0
► , A = ( register ) ►
symbolic_name , SP = ( register )
number
, Q = NO
► ►
, Q = YES , TASKA = ( register )
symbolic_name
, MAINTSK = NO
► ►◄
, MAINTSK = YES
Where:
A Is the register, or symbolic name of a fullword area on a fullword boundary,
containing the address of the storage to be freed.
LV Is the number of bytes, or a register that contains the number of bytes, of
storage to be freed. This option is ignored if you specify Q=YES.
MAINTSK
Indicates whether the storage to be freed requires special handling to avoid
storage accounting problems. MAINTSK=YES indicates that the storage is
treated as if it was owned by the NetView main task.
Specify MAINTSK=YES and Q=NO under the following conditions:
v The storage is obtained by one task.
v This storage is to be freed by a different task.
v The storage is not a buffer transferred by DSIMQS.
MAINTSK is ignored when Q=YES.
Note:
1. For all return codes, if a storage overlay memory dump is taken, register 7 at
the time of the memory dump contains the return code. For more information
about the contents of the registers at the time of the memory dump, see the
IBM Tivoli NetView for z/OS Troubleshooting Guide.
2. NetView-detectable DSIFRE Q=YES errors result in NetView user abend
ABENDU084. Most of these errors are a possible indication of a storage overlay.
The user abend and associated memory dump are taken to facilitate problem
determination.
3. If an ABENDSA78 occurs at task termination and this DSIFRE error (return
code 20 in register 15) occurs, a trace with OPT=STOR shows the DSIFRE trace
entries with a return code of 20.
As an additional aid if this abend occurs, the return address of any issuer of
DSIFRE Q=NO that results in a return code of 20 in the trace is stored in the
DSITVB control block for the task under which the DSIFRE was issued. The
saved address is in field TVBFREM (TVB + X'1B4').
4. If you are a programmer developing new code to run under NetView, this
return code indicates that you might have coded a DSIGET/DSIFRE pair
incorrectly, or might have coded one without the other.
For example, if you acquire storage using a system macro such as GETMAIN,
but release the storage with the DSIFRE macro, the issuer of DSIFRE receives a
return code 20. In this case, the return code 20 is not an error, but indicates that
you did not use DSIGET to acquire the storage. DSIFRE uses FREMAIN to free
the storage.
Registers 2–12 can be used for register notation. With DSIGET, you can queue
storage on the TVB chain so that the NetView program can free the storage at
logoff.
DSIGET
►► DSIGET LV = ( n ) ►
label ( register )
► , A = ( register ) ►
symbolic_name , SP = ( register )
number
, Q = NO
► ►
, Q = YES , TASKA = ( register )
symbolic_name
, MAINTSK = NO
► ►◄
, MAINTSK = YES
Where:
A Is the register containing the address of the fullword area on a fullword
boundary into which the address of the obtained storage is returned, or
symbolic name of that fullword area.
BNDRY
Specifies the alignment of obtained storage.
DBLWD
Specifies that obtained storage is to be aligned on a doubleword boundary.
This is the default.
PAGE
Specifies that obtained storage is to be aligned on a page boundary.
CLEAR
Specifies whether the allocated storage is to be initialized to 0.
NO Specifies that storage is not to be initialized.
YES
Specifies that storage is to be initialized. This is the default.
LOC
This operand specifies where to allocate storage.
ANY
Allocates storage anywhere.
BELOW
Allocates storage below 16 MB.
RES
Allocates storage that is consistent with the residency of the caller. This is
the default.
TEST
The caller of DSIGET has set the high-order bit of register 15 to indicate
the type of storage preferred. A 0 in the high-order bit means allocate
storage below 16 MB; a 1 means allocate storage anywhere.
DSIGETDS
► ►
, INDEX = indexvalue , LTYPE = lnetypearea
► ►
, BTYPE = btypearea , DOMID = domidarea
► ►
, TASKID = taskidarea , TOTLINE = totlinearea
► ►
, ORIGNET = orignetarea , ORIGLU = origluarea
► ►◄
, ORIGAPP = origapparea
Where:
BTYPE
Specifies a 1-byte area in which the buffer type (as in HDRMTYPE) is returned.
For an MSU, it is M. If the command processor is driven by automation of an
alert, the second element is the hierarchy list and the buffer type is H.
MSU has a HDRMTYPE of X'10'. When the line type (HDRLNTYP) is B'00', M
is returned. When the line type is B'01' (the hierarchy list), H is returned.
DATALEN
Specifies a 4-byte integer field where the length of the data (message text or
MSU) is returned.
DATAPTR
Specifies the name of the 4-byte pointer field in which the address of the
message text or MDS-MU data is returned. You can specify the name of the
data pointer or a register containing a pointer to the data pointer. Do not free
the storage pointed to by DATAPTR. If you need a copy, copy the data into
your own storage area.
DOMID
Specifies an 8-byte area in which the origin domain ID (as in HDRDOMID) is
returned. For an MDS-MU, this is the current NetView domain ID.
INDEX
Specifies a 4-byte integer field containing the number (index) of the line of the
message to be returned, or of the MDS-MU within a chain of reply MDS-MUs
The service program you call keeps track of the registered applications to provide
routing. The NetView program verifies the command you specify as the command
to be driven when unsolicited data is received.
You can specify whether the current registration is replaced. When you replace
prior registrations, the later registration can replace the task or the command
processor. The logmode for the second registration request must be the same as the
first and cannot be changed by a later registration request. To change the logmode,
deregister the application and reregister it with the new logmode.
DSIHREGS
► ►
, COMMAND = cmdname , LOGMODE = logmode
( register ) ( register )
, PRI = LOW
► ►◄
, PRI = HIGH
LOW
NORMAL
TEST
Where:
APPL
Is an 8-byte character field that specifies the application name that is being
registered or deregistered.
The identifier name can be one of the following values:
v An architecturally defined 4-byte value (padded with blanks to 8 bytes) for
management services (MS) application programs.
v A 1–8 character installation-defined name (padded with blanks). Use the
EBCDIC characters 0–9 and A-Z (capitals only).
The application names and their hexadecimal equivalents, for the NetView
program that reserves application name categories are as follows:
ALERT
X'23F0F3F1'
EP_OPS
X'23F0F1F6'
EP_SPCS
X'23F0F1F4'
LINKSERV
X'23F0F3F5'
MS_CAPS
X'23F0F1F1'
OPS_MGMT
X'23F0F1F7'
R_BRIDGE
X'30F0F5F9'
RMTCMD_O
X'30F0F7F2'
RMTCMD_R
X'30F0F5F5'
RMTCMD_S
X'30F0F7F0'
SPCS X'23F0F1F5'
STATUS
No hexadecimal equivalent
No character equivalent
X'23F0F1F0'
No character equivalent
X'23F0F0F1'
No character equivalent
X'30F0F7F3'
Note: If you use an architected name, you must supply a field name because
hexadecimal data cannot be specified in a literal string. The registration service
routine ignores any trailing blanks.
COMMAND
Is an 8-byte character field that specifies the command name of the command
processor that is driven with any data, received as a message unit, or has a
destination application name equal to the one in the applname operand.
COMMAND is either the command name or a register containing a pointer to
it. This field is required for registration requests but is not valid for
deregistration requests.
LOGMODE
Is an 8-byte character field that specifies the logmode that is used for sending
the application data. This name is a logmode that is defined to the local VTAM
and the receiving LU or control point (CP) with which this application
communicates.
If you specify a LOGMODE that is not defined in the local VTAM logmode
table, VTAM defaults this value to the first LOGMODE defined in the local
logmode table.
Note: Use LOGMODE only on the first registration request for an application.
If another command processor registers for an application that is already
registered, LOGMODE is ignored.
NOTIFY
Is a literal value that specifies whether this registration is to supply an MDS
error message if connectivity to other nodes is lost. NONE is the default.
ALL Specifies that this registration receives all the notifications that ERROR
provides, and in cases when the high-performance transport classifies a
session outage as normal and does not attempt to reestablish
connectivity.
NONE
Specifies that this registration does not receive any error notification.
NONE is the default.
ERROR
Specifies that this registration receives notification if there is a normal
or abnormal loss of connectivity to another node. A normal loss can
occur if you have outstanding transactions with the other node. An
abnormal loss can occur if you have a session outage and connectivity
cannot be reestablished.
Note: If two nodes in two networks have the same LU name, VTAM can
locate either one, depending on the active configuration.
PRI
Supplies the MQS priority for incoming requests. The MQS priority is used
when the MS or high performance transport uses the MQS for processing of
any received unsolicited MDS-MUs. The value is one of the four strings HIGH,
NORMAL, LOW, or TEST, The priority value must be entered as 8-bytes,
including blanks. For example:
’LOW ’
’HIGH ’
’NORMAL ’
’TEST ’
Note: The single quotation marks are shown only to demonstrate the 8-byte
field. Do not include them as part of the priority specification.
The following list shows the priorities:
HIGH
Processing begins after any NORMAL requests currently in progress, but
before queued NORMAL or LOW requests.
LOW
Processing is preempted by HIGH and NORMAL priority requests. This is
the default.
NORMAL
Processing priority preempts a queue of LOW priority requests.
TEST
DSIMQS queues the request at either HIGH or LOW priority, according to
the destination task's command priority. Refer to the OVERRIDE command
in the NetView online help for an explanation of command priorities.
REPLACE
Is a 4-byte character field that specifies whether this registration is to
supersede any previous registration for this application.
YES Specifies that this registration replaces the current registration for this
application. YES is the default. If you specify YES, an application can
change the name of the command driven to process received data and
the task where the command is driven with unsolicited data.
NO Specifies that this registration does not replace the current registration
for this application.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
TYPE
Is a 10-byte character field that specifies the type of request:
REGAPPL
Registers an application to the high-performance transport.
DEREGAPPL
Deregisters an application from the high-performance transport.
You can change the task under which DSIHREGS was called by registering the
application from the preferred task and specifying REPLACE=YES.
The data is sent in the form of an MDS-MU. You can supply the following
information:
v A completely built MDS-MU
v An MDS-MU that is missing one or more of the following values:
– A unit of work correlator (UOWC)
– An origin NETID
– An origin LUNAME
These are added by the service routine.
v A GDS variable that can be contained in an MDS-MU, and can supply sufficient
other fields for the service routine to build an MDS-MU header.
Refer to the SNA library for more information about MDS-MUs and GDS variables.
The DSIHSNDS macro builds the necessary NetView MQS buffer with the
specified data and queues it to the high-performance transport.
DSIHSNDS
, DATATYP = MDSMU
► , DATA = dataarea ►
, DATATYP = MDSMU ( register )
NONMDSMU
► ►
, SUPCORR = dataarea , CORAREA = correlarea
( register ) ( register )
► ►
, SECONDS = timeout , REPCMD = replycmd
constant ( register )
► ►
, ORIGAPP = origappl , DESTNET = destnet
( register ) ( register )
► ►
, DESTLU = destlu , DESTAPP = destappl
( register ) ( register )
► ►
, MUTYPEA = mutype , PRI = priority
( register )
, SYNCH = NO_BUF
► ►◄
, SYNCH = NO_BUF
NO_UNBUF
Where:
CORAREA
Is a 52-byte varying length character field in which a new unit of work
correlator (X'1549') GDS variable is created and returned by the DSIHSNDS
macro. The length subfield (the first 2 bytes) indicates the length of the
correlator. The correlator length is always 52 bytes for this release of the
NetView program.
If you specify CORAREA for an MDS-MU, the NetView program creates the
unit of work correlator in this area and inserts it into the specified MDS-MU
while copying it into the buffer for the high-performance transport. In this
case, NETID and LUNAME are inserted into the origin location (X'81')
subvector at the same time if they are not already present (if there are no X'01'
and X'02' subfields within the subvector). If you omit CORAREA, the
MDS-MU must be complete and ready to be transmitted as supplied.
For NONMDSMU specify either CORAREA or SUPCORR. If you specify
CORAREA, DSIHSNDS creates the unit of work correlator GDS variable in this
area and uses it in building the MDS header. The service routine uses the
supplied value in building the MDS header if you specify SUPCORR. No
validity checking is done for a correlator the caller supplies.
If this is an MDS reply or an MDS error message, do not use CORAREA,
because an MDS reply or error message returns the correlator sent with the
request. The invoking application supplies the original correlator either in the
MDS-MU or with the SUPCORR keyword.
CORAREA is mutually exclusive with the SUPCORR keyword.
You can specify either the name of the area or a register containing a pointer to
the area.
DATA
Is a varying length character field containing the data being sent. For either
MDSMU or NONMDSMU the first 2 bytes contains the entire length of the
data and the next 2 bytes contain the key. The maximum length of the data is
as defined in the SNA architecture for the data object being sent.
For an MDS-MU, all fields within the MDS-MU header must be properly
prepared before invocation (with the possible exception of the correlator and
the origin NETID and LUNAME). If the correlator is not contained in the data,
you must specify correlarea.
You can specify either the name of the data or a register containing a pointer
to the data.
DATATYP
Is an 8-byte character field indicating whether the data item specified with the
DATA keyword is an MDS-MU or a non-MDS-MU.
MDSMU
Indicates that the DATA keyword is an MDS-MU. MDSMU is the
default.
NONMDSMU
Indicates that the DATA keyword is not a complete MDS-MU because
it does not contain an MDS-MU header. The DSIHSNDS macro
envelopes this data in an MDS-MU header before sending it.
DESTAPP
Is an 8-byte character field that specifies the destination high-performance
application name.
The application name can be one of the following values:
v An architecturally defined 4-byte value (padded with blanks to 8 bytes) for
MS application programs.
v A 1–8 character installation-defined name (padded with blanks). Use the
EBCDIC characters 0–9 and A-Z (capitals only).
The DSIHSNDS macro truncates any trailing blanks before putting this value
in the MDS-MU header.
The DSIHSNDS macro truncates any trailing blanks before putting this value
in the MDS-MU header.
You can specify either the origin application name or a register containing a
pointer to the origin application.
This field is required for NONMDSMU.
PRI
Supplies the MQS priority for incoming reply or MDS error message resulting
from any outgoing MDS-MU. It must be the name or address of an 8-byte
(including blanks) character field that contains the preferred priority. Its value,
including blanks, can be:
’LOW ’
’HIGH ’
’NORMAL ’
’TEST ’
REPCMD
Is an 8-byte character field containing the name of the command to be driven
with the reply. You can specify REPCMD only in an application that is sending
REQUEST_WITH_REPLY, with the reply being received asynchronously.
If REPCMD is not specified when a high-performance application sends a
REQUEST_WITH_REPLY, the value defaults to the registered command of the
high-performance application at sending time. If the high-performance
application issues the DSIHREGS macro with the REPLACE(YES) option before
the reply is received, the reply is sent to the original registered command when
it comes in.
You can specify either the reply command processor name or a register
containing a pointer to the reply command processor.
This is an optional field. The default is the registered command for the
invoking application.
SECONDS
Is a 4-byte integer field that specifies the number of seconds to wait for the
reply of an outstanding REQUEST_WITH_REPLY. For a
REQUEST_WITH_REPLY that generates multiple replies, the timeout value
applies only to the last reply.
The NetView program initializes default and maximum timeout values for the
LU 6.2 transport send services. The initial default and maximum timeout
values are 120 and 86400 seconds, respectively. If you specify a value of
X'FFFFFFFF' (-1), the maximum timeout value is used. The maximum value is
initialized to 86000 (24 hours). You can change these values with the
DEFAULTS command.
The following values are valid for SECONDS:
1 ... X Where X is the maximum timeout value
0 Indicates the default timeout value
-1 Indicates the maximum timeout value
If you do not specify the SECONDS keyword when using the DSIHSNDS
macro for a REQUEST_WITH_REPLY, the default timeout value is used.
Otherwise, this field is required for REQUEST_WITH_REPLY.
The parameter specified by SECONDS is either the variable name (timeout)
containing the time interval value, or the value itself.
SUPCORR
Is a varying length character field containing a complete unit of work
correlator (X'1549') GDS variable. The SUPCORR field must contain a 2-byte
length, a 2-byte key, and at least 1 byte of correlator data. Refer to the SNA
library for more information about defining the correlator.
SUPCORR is not valid for an MDS-MU. If you use an existing unit of work or
create a new one, the MDS header contains the unit of work and the MDS-MU
must be ready to be transmitted as supplied. An MNOTE is returned if you
specify this keyword for an MDS-MU.
SUPCORR is optional for NONMDSMU. For NONMDSMU, specify either
SUPCORR or CORAREA. The supplied value is used to build the MDS header
if you specify SUPCORR. No validity checking is done for a correlator
supplied by the caller. If an MDS reply or an MDS error message is sent, you
must specify SUPCORR because an MDS reply or error message returns the
correlator sent with the request. The invoking application supplies the original
correlator either in the MDS-MU or with the SUPCORR keyword.
You can specify the correlator name or a register containing a pointer to the
data.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
SYNCH
Specifies the buffering options available on requests_with_replies:
NO_BUF
Specifies to buffer replies until reply_last is received. This is the
default.
NO_UNBUF
Specifies to send each reply to the application as it is received.
Note:
1. Control is returned to the invoking program after DSIHSNDS successfully
queues the request to the high-performance transport.
2. For MDSMU, all fields within the MDS-MU header must be correct except for
origin NETID and LUNAME. The macro can determine and set these fields. If
the data does not contain the correlator, you must specify CORAREA.
3. For REPLY_ONLY, REPLY_NOTLAST, REPLY_LAST, and ERROR_MESSAGE,
you must specify SUPCORR to return the correlator sent with the request.
4. The high-performance transport implements a timeout value for the application
receiving the data. If the invocation of DSIHSNDS specifies a timeout value
greater than the timeout value set by the transport at the receiving node, the
sending application might time out in less than the specified interval.
5. A request can time out in less than the specified interval if the receiving partner
has implemented a maximum timeout value of less than 24 hours, or the one
specified with the DEFAULTS command.
6. When VTAM is active, you can use DSIHSNDS to send data to another
application in the same domain.
7. If DESTNET is not the NETID determined by VTAM for the LU specified in
DESTLU, the send fails.
8. A high-performance application cannot send data to itself within the same
NetView program.
DSIID
►► DSIID ►◄
label ONLYDC
Where:
ONLYDC
Specifies that only the DC statement is generated. If the ONLYDC keyword is
not specified, the code to branch around the DC statement is generated.
At the beginning of the CSECT, code the DSIID macro as follows to use DISPMOD
to display the information:
B MODENTRY
DC CL8’DSIMOD ’,C’-’
DC CL8’&SYSDATE’
DC CL8’&SYSTIME’
DSIID ONLYDC
MODENTRY DS 0H
The return code shown in register 15 indicates whether the operator who issued
the command has been authorized to issue it with the particular keyword, value,
or both.
DSIKVS
► ►◄
, VALUE = ( register )
symbolic_name
Where:
CMD
Is the register containing the address of an 8-byte field with the command
name left-aligned and padded with blanks, or symbolic name of that field.
KEYWORD
Is the register containing the address of an 8-byte field, or the symbolic name
of an 8-byte field, that contains the keyword, left-aligned and padded with
blanks.
SCTADDR
Is the register, or symbolic name of a fullword area, containing the address of
the SCT entry for the command that is to be checked.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
VALUE
Is the register containing the address of an 8-byte field, or the symbolic name
of an 8-byte field that contains a value, left-aligned and padded with blanks.
Specify VALUE when you want to check the value of a keyword.
not granted because the source ID is blank in the NetView internal security
information. Message BNH277E is issued identifying the command being
checked.
Note: If both KEYWORD and VALUE are specified, the combination is checked.
Return code 20 indicates a failure of the combination.
DSILCS
, LOC = RES
► , CWB = GET ►◄
FREE , LOC = ANY
, SWB = GET BELOW
FREE RES
TEST
, TVB = ( register ) , LU = ( register )
symbolic_name symbolic_name
, OPID = ( register )
symbolic_name
, NEXT = OST
HCT
NNT
OPT
PPT
, AUTHRCV = NO
, AUTHRCV = NO
YES
Where:
AUTHRCV
Specifies that the routine is to search for the first TVB to locate an operator
authorized to receive messages related to successful and unsuccessful logons
and lost station messages. AUTHRCV can be explicitly set to NO (the default)
only when SWB, CWB, or TVB are also specified.
CBADDR
For the GET and TVB options, this is a register containing the address of a
user-provided fullword area on a fullword boundary, or symbolic name of that
area. The specified SWB, CWB, or TVB address is returned to this area.
DSILCS gets global storage (non-queued) for CWB or SWB by issuing a
DSIGET with the Q=NO option.
For the FREE option, CBADDR contains the control block address as either a
register that contains the address, or a symbolic name of the control block.
CWB
Specifies the type of operation to be performed on the CWB.
FREE
Specifies that the caller wishes to release the CWB whose address is found
in the area specified by the CBADDR operand.
GET
Specifies that the caller needs a CWB. The address of the CWB is returned
to the area specified by the CBADDR operand. Before you request NetView
services, initialize the CWBTIB field with the address of your TIB.
LOC
Used with CWB=GET or SWB=GET, determines the residency of the work
block you are requesting.
ANY
Obtains a work block anywhere in storage.
BELOW
Obtains a work block below 16 MB.
RES
Obtains a work block in storage consistent with the residency of the caller.
This is the default.
TEST
The caller of DSILCS sets the high-order bit of register 15 to indicate the
type of storage preferred. A 0 in the high-order bit means allocate storage
below 16 MB, and a 1 means allocate storage anywhere.
LU Used with TVB, is the register containing the address of an 8-byte LU name
field, or symbolic name of that field. This name locates a TVB with a matching
LU name.
NEXT
Used with TVB, specifies the TVB to be located for the next task.
HCT
Specifies that the TVB associated with the next active hardcopy task is to
be located.
NNT
Specifies that the TVB associated with the next active cross-domain task is
to be located.
OPT
Specifies that the TVB associated with the next optional task is to be
located.
OST
Specifies that the TVB associated with the next active operator station task
is to be located.
PPT
Specifies that the TVB associated with the next active primary program
operator interface task is to be located.
OPID
Used with TVB, is the register containing the address of an 8-byte operator
identification field, or symbolic name of that field. This name locates a TVB
with a matching operator identification.
SWB
Specifies the type of operation to be performed on the SWB.
FREE
Specifies that the caller wishes to release the SWB whose address is found
in the area specified by the CBADDR operand.
GET
Specifies that the caller needs an SWB. The address of an SWB is returned
to the area specified by the CBADDR operand. Before you request NetView
services, initialize the SWBTIB field with the address of your TIB.
TVB
Is the register containing the address of the TVB where the routine begins the
search. The routine searches for the TVB specified by LU, OPID, or NEXT, or
by the symbolic name of an area containing the address of this TVB.
TVB must be used with LU, OPID, or NEXT; and TVB must not be used with
SWB, CWB, or AUTHRCV=YES.
The address of the beginning of this TVB chain is found in the MVTTVB. The
TVB address that is found is placed in the area specified by CBADDR after the
routine has completed processing.
Note:
1. When a GET request is made, the NetView program reuses an existing free
CWB or SWB rather than issuing a GETMAIN. Even if the user specifies
LOC=RES from a command processor above the line, if the only free control
blocks are below the line, the NetView program uses those control blocks.
2. The routine searches the address once to the end of the TVB chain. It does not
loop to the beginning of the TVB chain.
For more information about the AUTH statement and unsolicited message routing,
refer to the IBM Tivoli NetView for z/OS Administration Reference.
DSILOD
►► DSILOD EP = modulename ►
label EPLOC = ( register )
symbolic_name
► ►◄
, DCB = ( register )
symbolic_name
Where:
DCB
Is the register, or symbolic name of an area, containing the address of the data
control block (DCB) for a partitioned data set to be searched for the module.
The DCB must reside above 16 MB.
EP Specifies the name of the module to be loaded.
EPLOC
Is the register, or symbolic name of an 8-byte field, containing the modulename
to be loaded. The modulename is left-aligned and padded with blanks.
Note:
1. You must specify EP or EPLOC, but not both.
2. If the module is successfully loaded, register 0 contains the load-point address
of the module. Register 1 contains the authority code in the high-order byte
and the module length in doublewords in the low-order 3 bytes.
3. If the module has not been loaded, register 15 contains the return code
returned by the system load facility. Register 1 contains the abend code and
register 0 contains the reason code for the abend.
4. The module is loaded in virtual storage consistent with the linkage editor
attribute RMODE.
You can supply variable fields to be inserted into NetView messages or unique
messages of your own with up to nine varying positional fields.
DSIMBS
► , BFR = ( register ) ►
symbolic_name
, MSGSIZE = ( register )
symbolic_name
► ►◄
, MSGTBL = ( register )
symbolic_name , OPT = CONCAT
PosFields:
.
▼
, P n = ( text , length )
, padlng , side , fill
Where:
BFR
Is the register, or symbolic name of a fullword area, containing the address of
the buffer in which the edited message is to be returned. BFR must have an
initialized BUFHDR. The DSIMBS macro initializes the HDRMLENG,
HDRDOMID, and HDRTSTMP fields.
MID
Identifies the message to be edited for the user. You can specify the message:
v By the message number (nnn)
v In a register
v In a user area specified by a symbolic name
side
Specifies whether the fill characters are added to the left or right of the
data in the field. You can specify this value as L, for left-fill, or R, for
right-fill. The default is R.
text
Is the address of the variable text or the symbolic name of the area with
the text to be substituted into the edited message.
SWB
Is the register or symbolic name of a fullword area containing the address of a
service work block (DSISWB).
Note:
1. Because the variable field information is contained in pdb1addr, you cannot use
the P1...P9 operands with MSGA.
2. MID and MSGA are mutually exclusive.
3. BFR and MSGSIZE are mutually exclusive.
After you have coded a message definition module, you must assemble it and
link-edit it into a NetView load library. DSIMDS has no return codes.
Three forms of DSIMDS are required to generate a message definition module. The
following three formats describe these forms:
Format 1: Start Message Definition Module Statement
Format 2: Define Individual Messages Statement
Format 3: End Message Definition Statement
The syntax for the start message definition module statement follows:
DSIMDS
Where:
MAXLEN
Defines the maximum message length. MAXLEN is determined by calculating
the length of pppxxxt msgtext (message number, type, a blank, and text).
MAXLEN is a multiple of 71. The valid maximum message size is 213
characters. If you do not specify MAXLEN, the message size defaults to 142
characters.
prefix
Is the required positional parameter that becomes the 3-character prefix for the
messages in the module. The prefix cannot conflict with the NetView message
prefixes:
AAU BNT EGV EZL FLB
BNH CNM EKG FKB FLC
BNI DSI EUY FKV FMG
BNJ DUI EXQ FKW FNA
BNK DWO EYV FKX IHS
SEARCH
Indicates where the messages can be found: in the message definition module,
on disk, or both. SEARCH causes a message definition module to be built. This
indicator becomes part of the message definition table.
B Indicates that some of the messages can be found in the message definition
module, and the others can be found on disk. Code individual message
statements using Format 2 of DSIMDS only for those messages that are not
defined on disk. See “Defining Messages on Disk” on page 201.
D Indicates that the messages can be found only on disk. Do not code
individual message statements using Format 2 of DSIMDS for the
messages. The individual messages are coded on disk. See “Defining
Messages on Disk” on page 201.
T Indicates that the messages can be found only in the message definition
module. T is the default.
TYPE
Specifies the beginning of generation for the message definition module.
DSIMDS
Where:
label
Is an optional label.
message text
Is the text of the message added or changed.
&&n
Is a variable field for text insertion. The positional fields are specified by the
Pn parameter in the DSIMBS macro. You can specify &&1–&&9.
TYPE
Specifies the message type.
A Specifies an action message, one for which appropriate action must be
taken.
I Specifies that the message is for information only. No specific action is
required.
D Specifies that the action requires a choice or alternative.
E Specifies that the message indicates an error has occurred.
W Specifies that the message is a warning.
xxx
Is the message number. It can be any number 000-999. When DSIMBS is issued
to build the message, it creates the message identifier by concatenating your
3-character prefix, the message number, and the type.
When coding your message CSECT, code a message 000 statement to be issued
when an incorrect message number is specified. Message 000 has one insert
(&&1), which contains the incorrect message number. Use wording similar to
the NetView message DSI000I:
MSG000 DSIMDS 000,’MESSAGE &&1 ISSUED BUT DOES NOT EXIST IN
MESSAGE TABLE DSIMDM - CALL IGNORED’, TYPE=I
Replace DSIMDM with the name of your NetView message definition module;
that is, the name specified on the DSIMDS TYPE=START statement. The
DSIMBS service routine substitutes the message number of the incorrect
message in place of &&1.
Note: When coding, be sure that the buffer passed to DSIMBS is large enough
to hold the message with all the inserts substituted. Otherwise, the message is
truncated.
DSIMDS (example 2)
Where:
TYPE
Specifies the end of the message definition module. This is the last statement
specified.
The TYPE=END statement is followed by an assembler END statement.
Messages are coded in members in NetView DSIMSG data sets. The member
names are in the format of DSIpppxx, where:
ppp Is the message prefix that was defined on the DSIMDS start message
definition module statement.
xx Is the first 2 digits of the 3-digit message number. Within this member, you
can define up to 10 messages by incrementing the third digit of the
message 0-9 (xx0–xx9).
DSIMDS (example 3)
►► xxxt message_text ►◄
& n
Where:
message text
Is the text of the message added or changed. To continue a message on a
second line, type an asterisk in column 72. See “User Message Definition
Module Examples” for an example.
&n Is an operand for optional information. The positional fields are specified by
the Pn parameter in the DSIMBS macro. You can specify &1–&9.
t Is the message type:
A Specifies an action message, one for which appropriate action must be
taken.
I Specifies that the message is only for information. No specific action is
required.
xxx
Is the message number. It can be any number 001–999.
Note: Messages issued from code running with TVBINXIT on cannot be read from
disk. You must define these messages in your message definition module with
Format 2 DSIMDS statements.
the AUTHRCV operand). An IFR must have a BUFHDR extension regardless of the
BFRFLG value specified on the DSIMQS. The HDRTDISP in the BUFHDR must be
X'24'.
DSIMQS
► , BFR = ( register ) ►
symbolic_name
, BFRFLG = NO
► , TASKID = ( register ) ►
symbolic_name , BFRFLG = NO
PPT YES
, AUTHRCV = NO
, AUTHRCV = NO
YES
, LIST = ( register )
symbolic_name
Except
, CORR = NONE
► ►◄
, CORR = CMD
NONE
Except
, EXCEPT = ( pointer )
symbolic_name
Where:
AUTHRCV
Specifies that the first operator designated as the receiver of authorized
messages (by the AUTH statement of the profile definition) is to receive the
message. All messages sent to the authorized receiver are routed first to the
PPT to test for automation and message routing (using the ASSIGN command).
If not suppressed by automation or handled by routing, the messages are sent
to the authorized receiver, if one is logged on, or to the system console.
The AUTHRCV option is mutually exclusive from LIST and TASKID.
The AUTHRCV option is used only for messages. If the buffer to be sent is
formatted as an internal function request (DSIIFR) and it is not an automation
IFR containing a message, the DSIMQS macro fails with a return code 4
(incorrect buffer format) in register 15. NO is the default for this operand.
BFR
Is the register, or symbolic name of a fullword area, containing the address of a
buffer. (If DSIGET obtained this buffer, DSIFRE frees it after use. Use the same
option for the Q parameter for both DSIGET and DSIFRE.) BFR requires an
initialized BUFHDR.
BFRFLG
Specifies whether the subtask that sends the buffer has released control and
responsibility for it (BFRFLG=YES). With BFRFLG=YES, the buffer must
include HDRMCEXT with HDRSENDR initialized. BFRFLG=NO indicates that
the buffer is returned to the issuer of DSIMQS. The issuer must dispose of the
buffer.
When using DSIMQS BFRFLG=YES, consider the following items:
v Obtain all storage using DSIGET,Q=NO,SUBPOOL=0.
v Do not use addresses of non-buffered data that are freed by other tasks in
buffers. This practice causes inaccurate storage accounting.
For assembler programs containing addresses of data, specify
MAINTSK=YES on the DSIGET request for the data pointed to by the
buffers. For the buffers, do not specify MAINTSK=YES on DSIGET. Send
only data contained in the buffer using DSIMQS BFRFLG=YES.
DSIGET MAINTSK=YES is intended to keep storage accounting accurate
where normal storage management cannot be used, for example, when
DSIGET is used to obtain storage in one task, free the same storage using
DSIFRE in another task, and not transfer the buffer using DSIMQS.
v Use the Automation Internal Function Request (AIFR) buffer structure,
IFRAUTO in DSIIFR, to send multiple buffers. All buffers in an AIFR must
be separately obtained using DSIGET,Q=NO,SUBPOOL=0. For more
information about DSIIFR, see “DSIIFR: Internal Function Request” on page
120.
v When using DSIMQS BFRFLG=YES, specify STGACCT=YES if at all
possible.
CORR
When CORR=NONE is coded, no correlation is provided for the buffer being
sent. NONE is the default.
When CORR=CMD is coded, the data being sent is treated as a command by
the receiving task. Any output (for example, DSIPSS TYPE=OUTPUT) from
that command is returned to the environment from which the message
queuing service (MQS) is issued. There are two environments:
PRI
Specifies a priority for message processing by the destination task. The value is
one of the four strings HIGH, NORMAL, LOW, OR TEST, or a register or name
of a fullword area containing one of the values defined in DSISWB: MQSHI,
MQSNORM, MQSLO, or MQSTEST. The default value is NORMAL. A message
or command sent at HIGH priority begins processing after any normal
message currently in progress, but before other queued NORMAL messages. A
message or command sent at NORMAL priority similarly pre-empts a queue of
LOW priority messages. When you specify TEST, DSIMQS queues the message
at either high or low priority according to the destination task's command
priority. Refer to the OVERRIDE command in the NetView online help for an
explanation of command priorities.
Any command that is currently running can be interrupted at that point in
processing where control is returned to NetView. For example:
v A running command processor is not interrupted. The newly queued
command (no matter which priority queue) runs when the command
processor returns to the command facility after issuing a DSIPUSH macro (if
the command is a compound command processor) or when the processor
finishes.
v A running command list (REXX or command list language) can be
interrupted under several conditions. For example, an interruption can occur
just after a command list begins processing and is scheduled by the NetView
program but is not yet running. Other examples are when a command list
issues a command or performs an &WAIT or WAIT.
Of the tasks supplied with the NetView product, only destination task types
OST, PPT, and NNT recognize priority. For destination tasks that do not
indicate support for multiple priorities, DSIMQS automatically converts all
messages to NORMAL priority.
STGACCT
Specifies whether the storage specified by BFR was obtained using DSIGET.
STGACCT is only valid when BFRFLG=YES.
YES
Indicates that the storage specified by BFR was obtained using DSIGET.
TEST
Indicates that the origin of the storage specified by BFR is unknown.
Specify STGACCT=TEST when you cannot determine if the buffers were
obtained using DSIGET. TEST is the default.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
TASKID
Is the register containing the address of a user-provided 8-byte area, or
symbolic name of that area, or PPT for the primary POI task. The area contains
the 8-character operator identification (TVBOPID) of the task for which the
message is to be queued.
The TASKID option is mutually exclusive from AUTHRCV and LIST.
0 At least one operator was active and all active operators received the
buffer.
12 The attempt to obtain buffer storage failed and one or more active
operators did not receive the buffer.
23 The message was routed to the first 255 active operators or groups, or
both, in the list.
26 One or more tasks in the list do not support MQS with Receipt buffer. The
buffer has been sent to all tasks in the list capable of receiving it.
Because of this, two command lists queued at the same time to the high- or
normal-priority queues appear to run in reverse order. The first one is initiated,
then before it runs its first instruction, it is preempted, and the second command
runs. To have command lists run in the order queued, always queue them at low
priority.
For more information about the AUTH statement and unsolicited message routing,
refer to the IBM Tivoli NetView for z/OS Administration Reference.
DSINOR
► WAITF ►◄
WAITT
WAITF
, WAITF = N
, WAITF = N
Y
WAITT
, WAITT = ( register )
number
Where:
ACB
Is a RODM access control block following the format of the RODM API.
The access block contains the following fields:
orname
This field specifies the name of the RODM that the caller wants to
access. If this field is blank (X'40'), the current runtime RODM is used.
The current runtime RODM is defined in the DSIQTSKI initialization
member in DSIPARM with the AO parameter on the REP keyword.
The name is left-aligned and must be padded with blanks (X'40') to 8
characters.
signon_token
Specifies the RODM sign-on token to be used within the call.
DSINOR ignores this field and fills it with the signon token received
by DSIQTSK when it initially connects to the RODM being accessed.
Because DSINOR overrides this field, you can ignore it.
user_appl_id
This field specifies the application name of the caller.
DSINOR sets this field to the user application specified with the ID
parameter of the REP keyword (of DSIQTSKI) for the RODM being
accessed by this call.
FUNC
Specifies a varying length function block, following the format of the RODM
API function block, that describes the function requested and all required
parameters. The actual function block format depends on the function being
requested.
RESP
Specifies a response block following the format of the RODM API response
block control structure.
SWB
Specifies a register, or the symbolic name of a fullword area, containing the
address of a caller's NetView service work block (SWB) control block.
TIF
Specifies a transaction information block following the format of the RODM
API transaction information block and contains the following fields.
WAITF
Specifies whether the request waits when a checkpoint is detected. If a
checkpoint is in progress for the specified RODM, the request is placed on a
queue until the checkpoint is complete. Upon checkpoint completion, the
request is processed. The following list shows the recognized values:
N Do not wait for checkpoint completion. This is the default.
Y Wait for checkpoint completion.
WAITT
Is a 2-byte field that specifies the maximum time in seconds for which the call
is suspended, if a checkpoint wait is to be called. The expected value range is
10-3600 seconds (1 hour). If you specify a time greater than 3600, 3600 is used.
If you do not specify this field, the default specified with the T keyword of the
DSIQTSKI initialization member for the DSIQTSK task is used.
Note:
1. DSINOR applies only to those RODMs under the control of the DSIQTSK task.
Refer to the IBM Tivoli NetView for z/OS Automation Guide for an example of
managing your RODMs with DSIQTSK in a NetView automation scenario that
uses RODM.
Refer to the IBM Tivoli NetView for z/OS Administration Reference for a
description of the DSIQTSKI keywords.
2. For an application that uses DSINOR in a command processor, provide a
keyword (which can be authority-checked) for controlling the level of access to
RODM.
3. An application can connect to RODM with an option specifying that RODM
can truncate its responses if the application's response block is smaller than
RODM's response. If this option is used, RODM truncates the response, does
not save the overflow data, and informs the application of the condition. This
information is sent in the return code and reason code in the transaction
information block. DSIQTSK connects using this option, saving DSINOR from
having to deal with overflow cleanup.
4. DSINOR returns two sets of return codes. The caller can use either set. The first
set is in the transaction information block provided by the user upon
invocation. These return codes are RODM return codes and are documented for
each possible function in theIBM Tivoli NetView for z/OS Resource Object Data
Manager and GMFHS Programmer's Guide. This document also contains
information about the function block format, the RODM response block, and a
description of the RODM API transaction information block.
The second set is in register 15 upon return from DSINOR.
DSIPAS
Where:
OUT
Is the register containing the address of a user-provided 8-byte area to which
the NetView equivalent of the input operand is returned if found; or the
symbolic name of that user area.
PDB
Specifies two values. One value is the address of a PDB and the other value is
the entry number of the field in the PDB to be examined.
combo
The value for combo can be specified using any of the following forms:
v pdbname, entname
v pdbname, (entreg)
v pdbname, 'ENTRY'
v (pdbreg), entname
v (pdbreg), (entreg)
v (pdbreg),'ENTRY'
entname
Is the symbolic name of a fullword that contains the entry number,
right-aligned, and padded with binary zero.
entreg
Is the register containing the entry number and padded with binary zero.
ENTRY
Is a constant that specifies the entry number.
pdbname
Is the symbolic name of a fullword that contains the address of the PDB.
pdbreg
Is the register that contains the address of the PDB.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
Note: PDBCMDA must contain the address or pointer to an entry in the SCT.
The element canceled is the one nearest the top of the stack with the name
specified in the parameter list. If a calling command procedure is suspended by
DSIPUSH, use DSIPOP to let the command procedure continue at the next
instruction. The command procedure continues when the RESUME routine or
currently running command returns control to the OST or PPT.
DSIPOP
► , LIST = ( register ) ►◄
symbolic_name COMPCDE
COMPCDE
, COMPCDE = ( register )
symbolic_name
Where:
COMPCDE
Specifies the value of the completion code for the long-running command
being removed. You can specify the value as a register, symbolic name of a
fullword area, or a fullword literal. The value is meaningful only if the
long-running command being removed specified a RESUME routine and only
if the process that created the long-running command element (using
DSIPUSH) was directly called from another long-running command. If you do
not specify COMPCDE, the following list shows the default values:
0 If the long-running command being removed is in control on top of the
stack at the time DSIPOP is called. This is the usual case.
-5 If the long-running command being removed is not at the top of the
stack. NetView command procedures and certain related commands
treat negative 5 (-5) as a CANCEL request.
You can be certain that your long-running command is at the top of the stack
when it is resumed.
Where:
SWBLRCLN
Specifies the parameter list length. Set SWBLRCLN equal to SWBLRCPO
(decimal 20).
SWBLRCNM
Specifies the name of the storage to be dequeued and freed. Specify this
field exactly as you specified it in the corresponding DSIPUSH macro. This
16-byte field is used as is. Instructions for specifying the name field are
under “DSIPUSH: Establish Long-Running Command” on page 223.
SWB
The register, or symbolic name of a fullword area, that contains the address of
a service work block (DSISWB). The TIB address in SWBTIB must be correctly
set.
DSIPOS
►► DSIPOS ecbaddress ►◄
label , compcde
Where:
compcde
Is the value of the completion code to be placed in the ECB (0–16777215) or in
a register (0, 2–12) that contains the value. If you specify a register, code it in
parentheses. If you do not specify a value, 0 is assumed.
ecbaddress
Is the symbolic name of an ECB or register (1–12) that contains the address of
the ECB. If you specify a register, enclose it in parentheses.
Note: These parameters are positional; they must be specified in the indicated
order.
The parse table describes the data contained in the buffer. DSIPRS finds delimiters
in the data and formats the PDB to indicate data segments separated by the
delimiters. You can call DSIPRS again to build the parse table in a user-provided
area.
DSIPRS
DELIM
Where:
BFR
Is the register, or symbolic name of a fullword area, containing the address of
the buffer to be used for input. BFR must have an initialized BUFHDR.
DELIM
Used to specify delimiters instead of NetView default values. NetView default
delimiters are blank, comma, period, and equal sign. Blank is always
considered a delimiter, even if you specify your own delimiters.
FIRST
Indicates whether the first word of the input buffer can be delimited only by a
blank (YES) or by any delimiter (NO). YES is the default.
PDB
Is the register containing the address of a fullword pointing to the area where
the parse table is to be built, or symbolic name of that area. The parse table
must include a user-initialized DSICBH header that contains the control block
identification and length before the data can be parsed. The name of the
constant set to PDBCBH is CBHPDB.
PDBSIZE
Is the register containing the address of a fullword area to which the size of
the parse table is to be returned, or symbolic name of that area.
SUB
Indicates whether all text within single quotation marks is to be parsed as one
element (YES) or not (NO). This option treats everything between single
quotation marks as one element, provided the first quotation mark is preceded
by a delimiter and the last quotation mark is followed by either a blank or
comma. NO is the default.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
Note: You must specify the operands DELIM, FIRST, and SUB, identically, in the
pair of DSIPRS parse commands issued. Otherwise, the second parse can fail or the
storage can be overlaid.
Example 1
RETURN CODE IS ’NONZERO’!
Example 2
RETURN CODE IS ’GOOD’, CONTINUE.
Example 3
RETURN CODE IS (X’00’), CONTINUE.
DSIPSS
► , TYPE = OUTPUT ►
, APPLID = ( register ) FLASH
symbolic_name IMMED
XSEND
SCRSIZE
WINDOW
ASYPANEL
CANCEL
PSSWAIT
TESTWAIT
► ►
, ECBLIST = ( register ) , BFR = ( register )
symbolic_name symbolic_name
► ►◄
, SIZE = ( register ) , PANEL = ( register )
symbolic_name symbolic_name
Where:
APPLID
Is the register containing the address of an 8-byte area that contains the name
(left-aligned and padded with blanks) of the application program to which the
data is to be sent, or symbolic name of that 8-byte area. This name is the same
as the name specified on the START command when a session is started.
Specify APPLID only when you specify TYPE=XSEND.
BFR
Is the register, or symbolic name of a fullword area, containing the address of a
user-provided buffer. This buffer contains the data to be processed. Use BFR
only for TYPE=FLASH, TYPE=OUTPUT, TYPE=IMMED, and TYPE=XSEND.
BFR must have an initialized BUFHDR.
ECBLIST
For TYPE=PSSWAIT, this is the register, or symbolic name of a fullword area,
containing the address of an ECB list. An ECB list is a list of addresses of
user-defined ECBs that is copied and combined with another ECB list. The
NetView program waits for this combined list. When one of the events
associated with this list is posted, control is returned to the next sequential
instruction. The input ECB list is made up of fullword ECB addresses. The last
address in the list must have the first bit set on to specify that this is the last
entry.
PANEL
For TYPE=ASYPANEL, a register containing the address of a parameter list, or
the symbolic name of that list. You can use one the following types of
parameter lists:
v Settable PF keys enabled; the NetView program manages the PF keys on the
panel. Use the DSIASYPN macro to create the parameter list. The macro
comments explain how to code your parameters.
v Settable PF keys not enabled; your code manages hardcoded PF keys. Use
the parameters shown in Table 45 on page 218.
The parameter list for panels without settable PF keys is formatted as shown in
Table 45.
Table 45. PANEL Parameters for the DSIPSS Command
Bytes (Decimal) Bytes (Hex) Description
0 (0)
4 (4) ECB address
8 (8) Output data stream address
12 (C) User input area address
16 (10) Output length | Input area length
20 (14) Data length address
If you request asynchronous full-screen output, the output data stream address
field contains the address of a 3270 data stream, including a 3270 command,
write control character (WCC), and orders to be written to the terminal. Code
the command using remote EBCDIC values. The output length field indicates
the length, in bytes, of the 3270 data stream (32767 bytes maximum). If output
is requested, the ECB address, input area length, user input area address, and
data length address fields are not used.
To read asynchronous full-screen input from a terminal, the ECB address area
contains the address of an ECB to be posted when the asynchronous input is
received. The user input area address contains the address of a user area into
which the full-screen panel data is read. If the length of the data being read is
greater than the user input area, the data is truncated in that area. The input
area field indicates the length of the input data area in bytes (32767 bytes
maximum). The data length address field contains the address of a halfword
field set to the amount of data read when the ECB is posted.
SIZE
For TYPE=SCRSIZE, this is the register, or symbolic name of a fullword area,
containing the address of a user-provided fullword area to contain the size of
the display screen, in row-column format. For example, a 1920-character screen
is defined as X'00180050', because the screen is 24 rows (X'0018') by 80
characters (X'0050').
For TYPE=WINDOW, this is a register containing the address of a 12-byte area,
or symbolic name of that area. The window size is returned in binary to the
area. The window size is the number of lines available for output on the
screen. The size varies depending on screen size and the number of input lines
specified on the INPUT command. The syntax for the area is:
Table 46. SIZE Parameters of the DSIPSS Command
Bytes (Decimal) Bytes (Hex) Description
0 (0)
2 (2) Minimum window size, rows
4 (4) Minimum window size, columns
6 (6) Current® window size, rows
8 (8) Current window size, columns
10 (A) Maximum window size, rows
12 (C) Maximum window size, columns
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
TYPE
Type of presentation services routine to be called:
ASYPANEL
Specifies that the issuing routine assumes control of the screen. Input and
output are formatted as 3270 data stream commands. Notification of input
availability is done asynchronously by the posting of event control blocks
(ECBs).
After a DSIPSS TYPE=ASYPANEL, input to the terminal is treated as input
to the process issuing the ASYPANEL request until a DSIPSS
TYPE=CANCEL or a DSIPSS TYPE=OUTPUT is issued.
For normal operations, presenting a panel to a user and processing
responses to it, specify both output data and input parameters in the
PANEL parameter list. Using separate DSIPSS TYPE(ASYPANEL) macros
for output and input introduces the possibility that operator input data can
be discarded before the input DSIPSS is processed.
Full-screen mode is not supported for unattended operator tasks, including
those associated with a system console.
CANCEL
Cancels pending asynchronous full-screen input. Use this option when
changing the characteristics of the asynchronous full-screen processor, such
as the ECB address or the panel address. TYPE=CANCEL is valid only
from an OST. You can call this option regardless of whether a DSIPSS
TYPE=ASYPANEL is active or the input from TYPE=ASYPANEL has been
posted as complete.
After TYPE=CANCEL is issued, no further input is received from the
terminal until TYPE=OUTPUT, TYPE=IMMED, or TYPE=ASYPANEL is
issued.
Issue DSIPSS TYPE(CANCEL) only when a program is going to free up or
change the storage areas used for output, input, ecb, or parmlist for a
previously issued DSIPSS TYPE(ASYPANEL), usually at the end of a
program. If a full-screen command processor is long running, “ending”
assumes issuing a DSIPOP and a return to the NetView program rather
than postponing the return. Issuing unneeded CANCELs can cause
operator input to be discarded between the CANCEL and the next
TYPE(ASYPANEL) or TYPE(OUTPUT).
FLASH
These messages are not suppressed by &WAIT or WAIT processing or
NetView automation, nor are they logged. These messages are not exposed.
You can log them before calling DSIPSS if you choose. They are displayed
regardless of the STIFLE state.
IMMED
Specifies that the routine is to send a message to the operator work
station's immediate message area. The maximum message length before
truncation occurs is 70 characters. Use this option only in immediate
command processors or the DSIEX01 installation exit routine. When you
specify this operand, no message header information is sent to the display
Note: Use the DSIWAT macro if the above conditions prevent use of
TYPE=PSSWAIT. However, some events related to function of the task can
be ignored during such a wait.
SCRSIZE
Specifies that the routine is to return the screen size in row-column format.
TESTWAIT
Enables a command processor to test whether an event occurred that
interrupts the asynchronous full-screen command processor.
TYPE=TESTWAIT is only of use if issued by a command processor driven
as a resume or abend routine. A logoff routine cannot issue a DSIPSS
macro. TYPE=TESTWAIT is valid only from an OST. Use this option before
issuing a DSIPSS TYPE=ASYPANEL to determine if the asynchronous
full-screen panel input/output (I/O) can be attempted. If you use DSIPSS
The following ECB post codes for PSS TYPE=ASYPANEL are found in the ECB if
you specified one:
0 The function was successful; the requested data is available.
12 The NetView program does not have enough storage available to complete
the request. The output data was sent, but the input data is not available.
36 A temporary error occurred during a full-screen read. Retry the request.
The output data was sent, but the input data is not available.
40 A permanent error occurred during a full-screen read. Do not retry the
request. The output data was sent, but the input data is not available.
52 The requested input was canceled by DSIPSS TYPE=CANCEL. Do not
retry the request immediately. The output data was sent, but the input data
is not available.
Note:
1. The DSIPSS macro no longer supports TYPE=PANEL. If you have an
application that uses the DSIPSS macro with TYPE=PANEL, rewrite the
application using TYPE=ASYPANEL.
2. The DSIPSS macro of any type other than CANCEL issued by code running on
a task that is ending (TVBTERM is on) is rejected with a return code of 40 (I/O
error).
3. FIRST, MIDDLE, LAST, and ONLY (supported in previous NetView releases)
are converted to a form similar to title-line output, with limited formatting
capabilities.
4. You can change applications using the SEG option to use the title-line
processing to improve the appearance of the output.
5. You can convert applications using FIRST, MIDDLE, LAST, or ONLY options to
use title-line, ASYPANEL, or the VIEW command for enhanced panel
management.
6. If your data is formatted as an automation internal function request (AIFR), it
must be in buffers located in subpool 0 which were obtained by DSIGET with
Q=NO specified. DSIPSS frees the AIFR structure. If your data is not formatted
as an AIFR, there is no restriction on the type of storage used, and the storage
is not freed; you must free it.
7. If an AIFR (IFRCODAI) is used, see the bits for IFRAUPHI and IFRAUPLO
(“AIFR–Automation Internal Function Request” on page 121) in the DSIIFR
structure description for a means to control the queueing priority of the
command being sent from the NNT to OST.
These functions are task-level operations, global for the task where they occur, but
invisible from all other tasks. All requests define recovery and termination
procedures. (See note 1 on page 228.)
When a command issues DSIPUSH for a RESUME routine, the following rules
apply:
v If a command called by a command procedure (NetView command list
language, REXX, or high-level language) specifies MAJOR when issuing
DSIPUSH, the command procedure is suspended at that point until the RESUME
routine is removed by DSIPOP.
v If such a command specifies MINOR when invoking DSIPUSH, the RESUME
routine is called following the completion of the command procedure.
A command can schedule a command procedure and obtain a return code by
taking the following steps:
1. Call DSIPUSH for its own RESUME routine.
2. Make a direct call to schedule the command procedure.
3. Upon return from the direct call, exit to enable the command procedure to
complete.
4. When the RESUME routine gains control, check the return code from the
command procedure in CWBRCODE.
DSIPUSH
► , LIST = ( register ) ►
symbolic_name , ECB = ( register )
symbolic_name
Where:
CORR
Defines the correlation option for the DSIPUSH request.
The following list shows the options:
CMD
The current command correlation environment is saved even if no
RESUME routine was specified. The correlation environment can then be
reactivated later using DSIFIND. (When DSIFIND CORR=CMD is used, the
saved correlation environment becomes the current one.)
In applications where a RESUME routine was not used, this function
enables the DSIPSS output of a command using DSIFIND CORR=CMD to
be treated as if it was issued by the command that issued this DSIPUSH.
The output is in most cases asynchronous, when processed by a NetView
pipeline. Ensure that you code a CORRWAIT stage in the pipeline.
NO No correlation is done for the DSIPUSH request.
RESUME
DSIPUSH saves the current command correlation environment only if a
RESUME routine is specified. RESUME is the default when the CORR
keyword is omitted.
ECB
Is either a register containing the address of an ECB or the symbolic name of a
fullword area containing the address of an ECB. Specifying ECB means that
you want the command specified in SWBLRCRE to be called promptly when
the ECB is posted and only when the ECB is posted.
When you specify ECB, the command specified by SWBLRCRE is called an
event routine. The event routine must clear the ECB to prevent looping. If a
storage pointer was specified with the DSIPUSH startup (SWBLRCST value),
this value is passed to the event routine in register zero upon startup.
LIST
Is the register containing the address of a parameter list used by the service
routine, or symbolic name of that list. Do not specify this as register 1; register
1 contains the SWB address within DSIPUSH. Do not put this list in the SWB
that is to be passed to DSIPUSH. DSIPUSH reads, but does not write to, your
parameter list; nevertheless, reentrant code demands that you put the
parameter list in dynamic storage if your code updates any part of it (such as
the storage pointer) at run time.
The parameter list contains the fields shown in Table 47.
Table 47. LIST Parameters for the DSIPUSH Command
Hex Offset Length Field
20 8 SWBLRCAB = ABEND reinstate routine
30 4 SWBLRCFG = Flags
28 8 SWBLRCLG = LOGOFF routine
0 4 SWBLRCLN = Length
4 16 SWBLRCNM = Name
18 8 SWBLRCRE = RESUME routine
14 4 SWBLRCST = Storage address
Where:
SWBLRCAB
Specifies the load module name of the ABEND reinstate routine. This name
must not be 0 for tasks other than DST tasks. This name must be 0 for DST
tasks. The load module named must have a corresponding CMDDEF
statement. If more than one CMDDEF statement is coded for a module
name, the last CMDDEF statement found is used. The ABEND routine
must not be an immediate command. See note 6 on page 228.
SWBLRCFG
Indicates whether the DSIPUSH execution is minor or major. Bit 0 is the
indicator bit; it is defined when a RESUME routine is specified. When bit
0=1, a minor DSIPUSH is performed. When bit 0=0, a major DSIPUSH is
performed. See “RESUME Routines” on page 69 for more information
about major and minor invocations. When no RESUME routine is specified,
this field is ignored.
SWBLRCLG
Specifies the load module name of the LOGOFF routine. This name must
not be 0. The load module named must have a corresponding CMDDEF
statement. If you code more than one CMDDEF statement for a module
name, the last CMDDEF statement found is used. The LOGOFF routine
must not be an immediate command. See note 6 on page 228.
SWBLRCLN
Specifies the parameter list length. Set SWBLRCLN equal to SWBLRCPU
(decimal 52).
SWBLRCNM
Associates a name with your long-running command or storage address.
Use this name on subsequent calls to DSIFIND or DSIPOP. Ensure that the
name is unique within a particular task, and that a duplicate name used
under another task does not interfere. A second use of DSIPUSH for
named storage with the same name under the same task temporarily hides
the first storage pointer. The first storage pointer becomes accessible
through DSIFIND after DSIPOP is issued for the duplicate name.
The name can be any combination of bits, as long as you specify the name
identically for all macro calls with the same name. Names beginning with
DSI are reserved for NetView names. The name field is used as is; it is not
padded or justified.
SWBLRCRE
Specifies the load module name of the RESUME routine. If this field is 0,
no RESUME routine is indicated. The load module named must have a
corresponding CMDDEF statement. If more than one CMDDEF statement
is coded for a module name, the last CMDDEF statement found is used.
The RESUME routine must not be an immediate command. See Note 6 on
page 228.
SWBLRCST
You can use this operand to associate a storage address with the specified
name. However, the NetView program makes no use of the value specified.
It is returned only when DSIFIND is called, specifying the same name.
PROMOTE
When you specify YES or NEWGROUP, a search is made of all currently
stacked long-running commands. If a long-running command with the same
name is found, the entire related group associated with that long-running
command is made the active group. Any parent procedure that has started the
long-running command processor is processed for cancellation.
The NetView program cancels a long-running command by resuming it with a
-5 completion code in CWBRCODE. The decision to cancel is left to the
long-running command processor. Cancelable long-running commands issue a
DSIPOP and return to the NetView program. The NetView program cancels
NetView command lists and high-level language (HLL) procedures in this way
when a -5 completion code is returned to them. Noncancelable procedures
ignore the -5 return code and are not automatically canceled by the NetView
program.
When you specify GROUP, the effect is the same except that the parent
procedure is not canceled. You can use the GROUP option only to complete a
previously running long-running command as shown in the following scenario:
1. A NetView command procedure calls a user command (for example,
COMMANDX). COMMANDX performs the following steps:
v Issues a DSIPUSH to push itself onto the task long-running command
queue
v Sends a request to another task using the DSIMQS macro
v Returns to the NetView program
2. The request running under the second task completes and returns a
response in the form of a command (for example, COMMANDY) to the
originating task.
3. The originating task runs COMMANDY, which does a DSIPUSH
PROMOTE=GROUP for COMMANDX. This makes COMMANDX and
associated long-running commands the active group. COMMANDY then
ends and returns to the NetView program.
4. COMMANDX resumes and completes.
5. Because PROMOTE=GROUP was specified and NEWGROUP or YES was
not specified, the parent of COMMANDX (the original NetView command
procedure) is given control when COMMANDX completes. Any other use
of the GROUP option can produce unpredictable results, including the
following scenarios:
Verify that the first CMDDEF statement for this command in CNMCMD or
its included members is not of the immediate type.
32 The macro call is not valid. Fix assembly errors before trying to run the
program.
Note:
1. DSTs always end after any failure (abend). Thus recovery routines are not
appropriate under DSTs.
2. When a command procedure is canceled for any reason, its return code is -5.
3. WAIT and PAUSE statements in a command procedure called by a
long-running command do not cause premature calling of the RESUME routine.
The RESUME routine is not scheduled until the command procedure completes.
4. HLL command processors cannot be pushed as ABEND, LOGOFF, or RESUME
routines.
5. Do not code a RESUME routine to use DSIPUSH PROMOTE to move itself to
the top of the long-running command stack. This causes the NetView program
to treat the DSIPUSH PROMOTE as a no-operation routine. A RESUME routine
can, however, specify another routine on a DSIPUSH PROMOTE invocation.
6. Command authorization checking is not done on routines specified by
SWBLRCAB, SWBLRCLG, or SWBLRCRE. If command authorization checking
is required, the long-running command procedure issuing the DSIPUSH can be
protected.
7. If register 15 contains return code 20, 24, or 28, register 0 contains a secondary
return code. Under “DSICES: Command Entry Services” on page 160, see
“Return Codes in Register 15” on page 162 for an explanation of the return
code in register 0.
Note: For more information, refer to the RESET command in IBM Tivoli NetView
for z/OS Programming: PL/I and C and the NetView online help.
DSIQOS
► , OPID = ( register ) ►◄
symbolic_name
Where:
OPID
Is the register containing the address of an 8-byte, left-aligned operator
identification field, or symbolic name of that field. Ensure that the contents of
the operator identification field are in uppercase.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
DSIQRS
► , OPID = ( register ) ►
symbolic_name
► , RESOURCE = ( register ) ►
symbolic_name , RESLENG = ( register )
symbolic_name
, VIEW = ( register ) , VIEWLENG = ( register )
symbolic_name symbolic_name
RodmData
, ACCLVL = ALTER
► ►◄
, ACCLVL = ALTER
CONTROL
READ
UPDATE
RodmData:
► , RODMREAS = ( register )
symbolic_name , RODMNAME = ( register )
symbolic_name
Where:
ACCLVL
Specifies the access level being checked for an operator's access to a resource. If
ACCLVL is not specified, the default of ALTER is used. The ACCLVL can have
one of the following values:
ALTER
Multiwrite access. This is the default.
CONTROL
Multiread and single-write access.
READ
Information-only access. This is the access level of commands such as LIST
or DISPLAY.
UPDATE
Change access. This is the access level of commands such as VARY,
MODIFY, REPLY, or generic GMF actions such as activate and deactivate.
The resource specified must be in an active span that was started by the
operator at the specified ACCLVL or higher. For example, to access a resource
at the UPDATE level, you must have a span active that contains that resource,
at least at the UPDATE level.
Note: For more information about defining and starting spans at specific
levels, refer to the IBM Tivoli NetView for z/OS Security Reference.
OPID
A register containing the address of an 8-byte area, or a symbolic name of that
area. The area contains the address of an 8-character NetView operator ID.
RESLENG
A register containing the address of a fullword area, or a symbolic name of
that area. The area contains the length of the name represented by the
RESOURCE keyword. If RESLENG is not specified, the default resource length
is the minimum of 8 or the actual length of the resource name.
RESOURCE
A register containing the address of an area, or a symbolic name of that area.
The area contains the address of the name of a resource to be matched against
the contents of the operator's active spans. If you do not specify RESLENG and
the resource name is less than 8 characters in length, the resource name is
padded with blanks.
RODMNAME
A register containing the address of an 8-byte area, or a symbolic name of that
area. The area contains the address of the 8-character hexadecimal RODM
name.
RODMOBID
A register containing the address of an 8-byte area, or a symbolic name of that
area. The area contains the address of the 8-byte hexadecimal RODM object ID.
RODMREAS
A register containing the address of a fullword area, or a symbolic name of
that area. The area contains the address of the 4-byte RODM reason code.
RODMRET
A register containing the address of a fullword area, or a symbolic name of
that area. The area contains the address of the 4-byte RODM return code.
SWB
A register containing the address of a fullword area, or a symbolic name of
that area. The area contains the address of a service work block (DSISWB).
VIEW
A register containing the address of an area, or a symbolic name of that area.
The area contains the address of the name of a view to be matched against the
contents of the operator's active spans. VIEWLENG is required if VIEW is
specified.
VIEWLENG
A register containing the address of a fullword area, or a symbolic name of
that area. The area contains the length of the name represented by the VIEW
keyword.
MNOTES Issued
v MNOTE 8, REQUIRED KEYWORD SWB MISSING
v MNOTE 8, REQUIRED KEYWORD OPID MISSING
v MNOTE 8, INVALID VALUE FOR ACCLVL. VALUES ARE READ, UPDATE,
CONTROL OR ALTER.
v MNOTE 8, KEYWORD MISSING - ONE OF THE FOLLOWING REQUIRED:
RESOURCE, RODMOBID OR VIEW
v MNOTE 8, BOTH RESOURCE AND RODMOBID CODED, ONLY ONE IS
VALID
v MNOTE 8, RODMNAME NOT VALID WITH RESOURCE
v MNOTE 8, BOTH RESOURCE AND VIEW CODED, ONLY ONE IS ALLOWED
v MNOTE 8, VIEWLENG NOT VALID WITH RESOURCE
If you have any programs that call DSIRDS, rewrite them. If you reassemble any
code that calls the version of DSIRDS that is shipped with this NetView release,
the assembly fails with a return code of 8. This gives you a pointer to the places in
your programs that need to be rewritten.
If you do not reassemble your own applications, any application that calls DSIRDS
will fail with a return code of 28.
You can use the NetView DSIRXEBS macro or the TSO/E IRXRLT macro.
The size of the EVALBLOK data area is passed. The header size is added to the
data size, the appropriate doubleword area is obtained, and the area is initialized.
Parameters are passed in the system work block (DSISWB) that you provide. If you
pass an EVALBLOK address in the EVBPTR, that block is freed before the new
block is obtained. For additional information about DSIRXEBS, see Chapter 6,
“Writing User Function Directories,” on page 97.
DSIRXEBS
► , ENVBPTR = ( register ) ►◄
symbolic_name
Where:
ENVBPTR
Is the register, or symbolic name of a fullword area, containing the address of
the TSO/E environment block address.
EVBPTR
Is the register, or symbolic name of a fullword area, containing the address
where the EVALBLOK address is placed when it is obtained. If this area is not
0 (X'00') initially, it is assumed that it contains an EVALBLOK address to be
freed.
LENGTH
Is the register, or symbolic name of a fullword area, containing the address
where the EVALBLOK data size is obtained. The data size is the number of
bytes of data that are returned by the function.
SWB
Is the register, or symbolic name of a fullword area, containing the address of
an SWB.
DSISRCMV
►► DSISRCMV ►
label
SearchChoice
, SVID = name
, SEQ = Y
PRSVAD:
, PRSVAD = ( register )
name
SVOCCUR:
, SVOCCUR = name
PRSFAD:
, PRSFAD = ( register )
name
SFOCCUR:
, SFOCCUR = name
Where:
MVADDR
Is the register, or symbolic name of a fullword area, containing the address of
the major vector.
PRSFAD
Is the register, or symbolic name of a fullword area, containing the address of
the last subfield found. This is an optional operand. If you code PRSFAD, the
search starts from this address rather than the address of the subvector
(SVADDR).
PRSVAD
Is the register, or symbolic name of a fullword area, containing the address of
the last subvector found. This is an optional operand. If you code PRSVAD, the
search starts from this address rather than the address of the major vector
(MVADDR).
SEQ
Specifies the search type to be performed.
Y Specifies to search sequentially for the next subfield or subvector. If you
specify both MVADDR and PRSVAD, the sequential search starts at the
address specified by PRSVAD. If you specify both SVADDR and PRSFAD,
the sequential search starts at the address specified by PRSFAD.
SFID
Is the symbolic name of a 1-byte hexadecimal field containing the subfield type
for which to search.
SFOCCUR
Is the symbolic name of a 2-byte (halfword) hexadecimal field containing the
subfield occurrence for which to search.
SVADDR
Is the register, or symbolic name of a fullword area, containing the address of
the subvector.
SVID
Is the symbolic name of a 1-byte hexadecimal field containing the subvector
type for which to search.
SVOCCUR
Is the symbolic name of a 2-byte (halfword) hexadecimal field containing the
subvector occurrence for which to search.
Note: Issue the DSISRCMV macro only from the CNMS4284 sample.
DSISYS
►► DSISYS ►◄
label
&DSISYSE
Is a global variable that must be declared. &DSISYST is set at compilation time
by the DSISYS macro to determine if the current operating system is an
ESA-type operating system. Use the AIF assembler statement to test its value.
&DSISYST
Is a global variable that must be declared. &DSISYST is set at compilation time
by the DSISYS macro to reflect the current operating system. Use the AIF
assembler statement to test its value. The following list shows the values:
Table 48. Example of &DSISYSE Response to the DSISYS Command
Operating System &DSISYST &DSISYSE
z/OS MVS/XA MVS/ESA
DSITECBS enables a DST to dynamically manage the ECB and specify the
command processor that is called when the ECB is posted.
DSITECBS
► , ECB = ( register ) ►
symbolic_name , MAXCALL = ( register )
symbolic_name
► ►◄
, ENV = ( register )
symbolic_name
Where:
ECB
Is the register, or symbolic name of the fullword area, containing the address of
the area that contains the ECB address.
ECBPRC
Is the register, or symbolic name of the fullword area, containing the address of
the area that contains the name of the ECB command processor. This
parameter is required if you specify FUNC = ADD.
ENV
Is the register, or symbolic name of the fullword area, containing the address of
the environment area you want to accompany the ECB address and the ECB
processor. The environment address is returned when the ECB is posted.
FUNC
Specifies the function you want to perform. There is no default. Select one of
the functions:
ADD
Adds an ECB to the task's ECB list.
DELETE
Deletes an existing ECB from the list.
MAXCALL
Is the register, or symbolic name of the fullword area, containing the address of
the area that specifies a binary value for the maximum number of times the
ECB processor is called for the indicated ECB before other ECBs can be
serviced.
SWB
Is the register, or symbolic name of the fullword area, containing the address of
a service work block.
You can also use DSIVARS to set and reference local variables of the program that
called the assembler program that uses DSIVARS, if the assembler program was
called from a command procedure written in the NetView command list language,
REXX, PL/I, or C; or from a PL/I or C installation exit.
Note: Although the length limits for task and common global variable names and
values are 250 and 31000 bytes, respectively, the Save/Restore database (managed
by the DSISVRT task) limits are lower. Refer to the GLOBALV SAVE command for
more detailed information. For double-byte character sets (DBCS), the maximum
number of double-byte characters between the shift-out (X'0E') and shift-in (X'0F')
control characters is 15499.
DSIVARS
► , VARNAME = ( register ) ►
, NUMVARS = ( register ) symbolic_name
symbolic_name
Where:
NUMVARS
Specifies the register, or symbolic name of a fullword area, containing the
number of variables to be processed. The parameter NUMVARS is optional.
If you do not specify a value for NUMVARS, the default is 1. Do not use a
value of 0.
REQUEST
Specifies which NetView variable operation to perform. The parameter
REQUEST is required.
GET
Retrieves a copy of the current value of the variable and returns it into the
area specified by VALUE, up to the length specified by VALLEN. Upon
return, VALRETL is set to the actual length of the returned value.
If the variable value is longer than the length specified by VALLEN, the
value is truncated and return code 4 is issued. If the variable has not been
previously set, VALRETL is set to 0.
PUT
Sets the value specified by VALUE and VALLEN of the variable name
specified by VARNAME and VARLEN into the variable pool specified by
VARTYPE.
SWB
Specifies the register, or symbolic name of a fullword area, containing the
address of a service work block (SWB). Set the SWBTIB field to indicate your
task information block (TIB). The SWB parameter is required.
VALLEN
For GET requests, VALLEN specifies the address of an area containing a list of
fullword values that contain the maximum length of values to be returned into
the matching VALUE area or the symbolic name of the list of fullword values.
If the length of the actual variable value is greater than the length specified by
VALLEN, the returned value is truncated and return code 4 is issued.
The actual length of the variable value is set in the VALRETL area. This storage
is in autodata or another addressable storage area because the DSIVARS
service writes a value to it.
For PUT requests, VALLEN specifies the address of an area containing a list of
fullword values that contain the length of the matching VALUE area that is
assigned to the variable or the symbolic name of the list of fullword values.
The maximum value length is 31000. If you specify a value length of 0, the
value of the variable is set to null.
VALRETL
For GET requests, VALRETL specifies the address of an area containing a list
of fullword fields or the symbolic name of the list of fullword fields. The
DSIVARS service sets the fullword fields to the actual length of the value
returned for each variable.
If a variable value is truncated, the VALRETL field for that variable contains
the actual length of the variable value, and the VALLEN field for that variable
contains the truncated length of the variable value.
The parameter VALRETL is required for GET requests and ignored for PUT
requests.
VALUE
For GET requests, VALUE specifies the address of an area containing a list of
fullword addresses of storage locations to which the variable values are
returned as a result of the DSIVARS operation or the symbolic name of the list
of fullword addresses. This storage is in autodata or another addressable
storage area because the DSIVARS service writes a value to it. The parameter
VALUE is required.
For PUT requests, VALUE specifies the address of an area containing a list of
fullword addresses of storage locations that contain the variable values to be
associated with the variable names specified by VARNAME or the symbolic
name of the list of fullword addresses.
VARLEN
Specifies the address of an area containing a list of fullword variable name
lengths for the DSIVARS macro or the symbolic name of the list of fullword
variable name lengths. The parameter VARLEN is required.
A variable name can be from 1 to 250 characters.
VARNAME
Specifies the address of an area containing a list of fullword addresses of
storage locations that contain the variable names for the DSIVARS macro or the
symbolic name of the list of fullword addresses. The parameter VARNAME is
required.
Valid characters for variable names are A–Z, 0–9, @, #, $, ¢, ., !, ?, and _. Do not
use a number or a period as the first character in a variable name.
VARTYPE
Specifies the type of NetView variable to be referenced. The parameter
VARTYPE is required.
CALLER
Specifies the local variable pool of the calling command procedure or
installation exit that is accessed. The command procedure can be written in
REXX, NetView command list language, PL/I, or C.
You can use VARTYPE=CALLER only if the assembler program invoking
the DSIVARS macro was called from a command procedure or installation
exit written in PL/I or C. Specifying a VARTYPE of CALLER from an
assembler installation exit is not supported. Using VARTYPE=CALLER you
can set a variable to be referenced by the command procedure upon return
from an assembler command processor.
CGLOBAL
Specifies that the NetView common global variable pool can be accessed.
TGLOBAL
Specifies that the NetView task global variable pool can be accessed.
Note:
1. In the NetView command list language, variable names are limited to 11
characters, and more restrictions apply to the characters used in the variable. If
the variable name you specify is referenced in the NetView command list
language, the name can be no longer than 11 characters, and can only contain
characters that are acceptable in that language.
2. Variables are indicated in the NetView command list language by an
ampersand (&) at the front of the name. Do not use an ampersand to specify a
VARNAME.
3. For NetView common global variable requests using DSIVARS, the NetView
common global variable pool is locked for the duration of the DSIVARS
processing from other NetView tasks accessing it. This ensures that if multiple
variables are specified on one DSIVARS macro invocation, the common global
values are constant at that time.
4. Specifying a VARTYPE of CALLER from an assembler installation exit is not
supported and can cause unpredictable results. If there is an active command
procedure on the task running the installation exit, a variable can be set in the
running command procedure. The return code in this case is 0.
For more information about using NetView variables in NetView command list
language and REXX command lists, and about using NetView variables in PL/I
and C, refer to IBM Tivoli NetView for z/OS Programming: REXX and the NetView
Command List Language and IBM Tivoli NetView for z/OS Programming: PL/I and C.
DSIWAT
Where:
ECB
Is the register (2–12) containing the address of an aligned fullword to be used
as an event control block (ECB), or symbolic name of that aligned fullword.
ECBLIST
Is the register containing the address of a contiguous list of fullword addresses
of ECBs, or symbolic name of that list. The last entry in the list of ECB
addresses has the high-order bit 0 set to 1 to indicate the end of the list.
Execution resumes when any one of the ECBs is posted, and you can use the
DSIPOS macro to post an ECB.
Note:
1. If your code is going to run on any NetView task other than a user-optional
task:
v Do not call DSIWAT to wait on any event that can take a long time to
complete.
v Do not repeatedly issue DSIWAT for your own ECB. Process the ECB and
reissue the DSIWAT.
2. All NetView tasks must have adequate time to process their own internal work,
primarily represented by an internal ECB list. User code that can run for an
extended period or be redriven repeatedly must periodically return to the
NetView program to enable the task to do this internal work.
This can be done by writing your code as a long-running command processor.
(For more information, see Chapter 4, “Writing Command Processors,” on page
59.) Alternatively, you can call DSIPSS with the TYPE=PSSWAIT attribute, which
waits on your ECBs and the NetView task ECBs and then returns to the
NetView program when a return code of 56 is received. For more information,
see “DSIPSS: Presentation Services” on page 216.
This macro issues the DSIWLS macro to log the write to the console. The route
code that is used is the value specified on the ROUTECDE statement in the
CNMSTYLE member.
DSIWCS
► , BFR = ( register ) ►◄
symbolic_name
Where:
BFR
Is the register, or symbolic name of a fullword area, containing the address of a
buffer with the message. This buffer must have an initialized BUFHDR.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
DSIWLS
► , BFR = Options ►◄
, HCT = Options
, EXTLOG = ' xxx '
( register )
symbolic_name
, SAMREC = Options , SAMLEN = Options , SAMTASK = Options
Options:
( register )
symbolic_name
Where:
BFR
Is the register, or symbolic name of a fullword area, containing the address of a
user-provided input buffer. This buffer contains the record that is to be logged.
This buffer must have an initialized BUFHDR.
EXTLOG
Indicates that the buffer is to be logged externally under the DSIELTSK
subtask.
You can accomplish external logging in one of the following ways:
v Write to a system management facility (SMF) data set. The data to be logged
is a standard SMF record, with an SMF record type greater than or equal to
128. The DST XITXL installation exit is called before writing the record to
SMF.
v Write to a data set other than SMF. This option is not restricted to any
particular operating system. Code and install the DST XITXL installation
exit. This installation exit then performs the actual logging.
register
Is the register that contains the address of a 3-byte area that represents the
last 3 letters in the name of an external logging command processor.
symbolic name
Is the symbolic name of a 3-byte area that represents the last 3 letters in
the name of an external logging command processor.
xxx
Are 3 characters that become the last 3 characters of the command name
used to select the command processor that logs the data. The first
characters of the verb must begin with DSIEL. For example, if
EXTLOG=’ABC’, the CMDDEF statement in CNMCMD is:
CMDDEF.DSIELABC.MOD=DSIELSMF
CMDDEF.DSIELABC.TYPE=D
HCT
Is the register, or symbolic name of a fullword area, containing the hardcopy
task's TVB address.
SAMLEN
Is a keyword that either points to or names a 4-byte length of the record to be
logged. If the value of SAMLEN is greater than 32000, the record to be logged
is truncated and the macro returns a nonzero return code.
The BLKSIZE for a sequential logging task must be at least as large as
SAMLEN plus 42, or the record to be logged is truncated. SAMLEN is required
with SAMREC.
SAMREC
Is a keyword that either points to or names the record that is written to the
NetView sequential log that is controlled by the task indicated by the
SAMTASK keyword. Unlike the BFR keyword, this operand only points to the
data that is to be logged. NetView services put the record into the correct
format for scheduling the record to the sequential log task.
SAMTASK
Is a keyword that either points to or names an 8-byte NetView task name that
is defined to do sequential logging. This task can be verified for sequential
logging capability. The SAMTASK keyword is required with the SAMREC
keyword.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
Note:
1. You must specify either BFR or SAMREC, but not both.
2. You can specify either EXTLOG or HCT with BFR, but not both.
DSIZCSMS embeds the caller's network services request or response unit (RU) in a
forward RU that is passed to the SSCP over the access method's CNMI. The SSCP
then sends the embedded RU to the specified destination.
DSIZCSMS
, RTYPE = REPLY
► ►◄
OPTION TYPE , RTYPE = REPLY SECONDS
RESPONSE
OPTION
, OPTION = NOCNM
NOPRID
SALT
TYPE
, TYPE = CHAIN
RU
NOEMBED
SECONDS
, SECONDS = ( register )
symbolic_name
INPUT:
►
, TARGET = ( register )
symbolic_name
INPUT
, INPUT = ( register )
symbolic_name
Note:
See the description for TYPE for information about conditions that apply to
CHAIN, NOEMBED, and RU.
For information about conditions that apply to OPTION, SALT, REPLY, SECONDS,
and DEST, see their respective descriptions.
Where:
DEST
Is the register, or symbolic name of a fullword user area, containing the
address of the network destination to which the embedded RU is sent. This
network destination is 8 characters long, left-aligned, and padded with blanks
if necessary.
DSRB
Is the register, or symbolic name of a fullword area, containing the address of a
data services request block (DSIDSRB) to be passed to the CNMI service
routine (DSIZCSMM).
INPUT
Is the register, or symbolic name of a fullword storage location, containing the
address of a user input buffer. The input buffer must be large enough to
contain a 24-byte buffer header plus the length of the RU to be sent (if a
forward RU is to be built, add 28 bytes to the size of the input buffer). This
buffer contains a buffer header followed by text. It also holds the deliver RU
that is returned by the access method. To enable command processors or
installation exit routines that operate in 24-bit addressing mode to access the
buffer, it resides below 16 MB. To receive a reply over the CNMI, the buffer
accommodates at least a 32-byte reply (a 24-byte NetView buffer header and an
8-byte positive or negative response).
LENGTH
Is the register, or symbolic name of a fullword storage location, containing the
length in binary of the input buffer.
OPTION
Enables nonstandard forward RUs to be sent by CNMI services.
NOCNM
Indicates that a forward RU is sent that does not contain a CNM header, or
procedure-related ID (PRID). An example is a forward RU containing NS
IPL command types of INIT, TEXT, and FINAL.
NOPRID
Indicates that a forward RU is sent that does not contain a
procedure-related ID (PRID) in the CNM header. An example is a REQMS
that does not require a reply RECFMS because of user protocols.
SALT
Indicates that a forward RU is sent that is associated with a target. This
flag alerts VTAM that a target to the SNA address list translation (SALT) is
required for an NMVT to be transported using a forward RU.
RU Is the register, or symbolic name of a fullword storage location, containing the
address of a user area. The area is an RU that is to be embedded within the
forward RU.
RULENG
Is the register, or symbolic name of a fullword user area, containing the length
in binary of the embedded RU buffer. The RULENG cannot exceed 32743
decimal bytes.
RTYPE
Describes the response required for the request.
REPLY
Indicates that a REPLY RU is required for completion of the request. This is
the default.
RESPONSE
Indicates that a positive response is sufficient to complete the request.
SECONDS
Specifies the number of seconds to wait before canceling the outstanding
request. The number must have a positive value no greater than 86400. If you
do not specify the SECONDS operand or the value is 0, no timeout function is
performed (an indefinite wait is possible). If you specify SECONDS, you
cannot specify any of the following keywords and values:
v TYPE=RU
v TYPE=CHAIN
v OPTION=NOCNM
v OPTION=NOPRID
If you specify SECONDS and RTYPE=REPLY, specify DEST.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB) to be passed to the CNMI service routine
DSIZCSMM.
TARGET
Is the register, or symbolic name of a fullword user area, containing the
address of the network component that is the object of the embedded RU, or
symbolic name of that network component. This network component is 8
characters long, left-aligned, and padded with blanks if necessary.
TYPE
Controls the processing for the RU:
CHAIN
Indicates that the DSRB has received data and remains in use to accept
further RUs associated with the specific request. If you specify
TYPE=CHAIN, the SWB and DSRB operands are required; all other
operands are not valid. This operand is not valid with an unsolicited
DSRB.
NOEMBED
Indicates that a forward RU is not to be built for this request.
RU Indicates that the input RU is not to be embedded in a forward RU.
DSIZCSMS SWB=SWBADDR,DSRB=DSRBADDR,INPUT=RAQDDR, C
LENGTH=FORWDLEN,RU=READYRU,RULENG=READLEN, C
DEST=DESTNAME,RTYPE=REPLY,SECONDS=TIMEOUT
DSIZCSMS SWB=SWBADDR,DSRB=DSRBADDR,INPUT=RAQDDR, C
LENGTH=FORWDLEN,RU=READYRU,RULENG=READLEN, C
DEST=DESTNAME,RTYPE=REPLY.
Note:
1. Specify either OPTION or TYPE keywords, but not both.
2. When RTYPE=REPLY, do not specify OPTION=SALT. Specify only one of the
following keywords and values:
v OPTION=NOCNM
v OPTION=NOPRID
v The keyword SECONDS
3. Specify TARGET if OPTION=SALT.
4. Specify only one of the following keywords and values:
v OPTION=NOCNM
v OPTION=NOPRID
v The keyword SECONDS
5. If TYPE=CHAIN, SWB and DSRB are required.
6. If TYPE does not equal CHAIN, SWB, DSRB, INPUT, RU, and DEST are
optional.
7. Specify either TYPE=CHAIN or the keyword SECONDS, but not both.
8. If you specify TYPE=NOEMBED, do not enter TARGET or DEST.
9. If you specify TYPE=RU, do not enter SECONDS, TARGET, DEST, or
RTYPE=RESPONSE.
10. For major return codes of 8 or 20, register 0 contains the RULENG.
Note: For more information about SNA RUs, refer to the SNA library.
DSIZVSMS
► ►
, KEYLEN = 1
, KEY = ( register )
symbolic_name , KEYLEN = ( register )
symbolic_name
► ►◄
, OPTION = ( Options ) , DATAREA = ( register )
symbolic_name
Options:
Where:
DATAREA
Is the register containing the address of a user work buffer, or symbolic name
of that buffer. The buffer must be large enough to contain the maximum size
record in the file or data set. The buffer is used by VSAM in the processing of
records. This buffer contains an initialized BUFHDR, followed by text.
DSRB
Is the register, or symbolic name of a fullword, containing the address of a
data services request block (DSIDSRB). The DSRB contains request information
such as request parameter list (RPL), ACB, ECB, and fields used by the data
services task VSAM service routine for VSAM I/O.
FUNC
Describes the VSAM request macro to be issued.
KEY
Is the register containing the address of the VSAM key to be used for access to
the requested data, or symbolic name of a fullword that contains the key.
Because DSIZVSMS restores the key to its original location, the key must also
be in NetView-accessible storage.
KEYLEN
Is the register, or symbolic name of a fullword, containing the length in bytes
of the key pointed to by KEY. The default key length is 1.
OPTION
Specifies the type of access to the file through requests defined by the NetView
request parameter list (RPL). Options are arranged in groups. The first time the
RPL is set up, you must specify one, and only one, option from each group.
Later, you can specify one option from one or more groups. Separate multiple
options with commas.
This OPTION operand has no defaults. This operand is not valid when you
specify FUNC=ERASE or FUNC=ENDREQ.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB). The SWB contains a save area, work area, and
task information block (DSITIB) address data. The caller must initialize the
SWBTIB field in the SWB with a valid TIB address.
For more information about specifying FUNC and OPTION, and for an
explanation of RPL feedback codes, refer to the DFSMS library.
running is registered as the task where the command is to run when unsolicited
data is received. The called service program keeps track of the registered
applications and served applications internally to provide routing.
Before accepting the registration request, the NetView program verifies that the
task has the authority to issue the specified command to be driven with data
received.
The registration request can specify whether it replaces a current registration for
the MS application or served application. When the request replaces prior
registration, subsequent registration requests can change the task or command
processor that is to receive unsolicited data or the focal point category of interest.
Concurrent requests from multiple tasks are sequenced at points of potential
conflict. An application can register as both an MS application and an operations
management served application. A registration of one type does not affect the
registration of the other type.
The service routine returns control to the invoking component after it has
processed the registration or deregistration request.
The DSI6REGS macro can be called only from a task within the NetView address
space.
DSI6REGS
, FOCALPT = NO
► ►
COMMAND FPCAT , FOCALPT = NO
YES
, PRI = LOW
► ►◄
, PRI = HIGH
LOW
NORMAL
TEST
COMMAND
, COMMAND = cmdname
( register )
FPCAT
, FPCAT = fpcategory
( register )
Where:
APPL
Is an 8-byte character field that specifies the MS application or served
application name that is being registered or deregistered.
For an MS application, this identifier is the name to be used in the Application
ID (X'03') subfield of the origin or destination location name fields of the
multiple-domain support message unit (MDS-MU) header as described in the
SNA library. It is either one of the architecturally defined fullword values
(padded with blanks to 8 bytes) for management services application
programs, or a 1- to 8-character installation-defined name (padded with
blanks). Installation-defined names use only the EBCDIC characters 0–9 and
A-Z (capital letters only).
For a served application, this identifier is the name to be used in the
application name fields (X'50' and X'60') within routing and targeting
instruction (R&TI) general data stream (GDS) variables within CP-MSUs. The
name within this applname field is either an architected served application
name, made up of hexadecimal and EBCDIC characters, or an
installation-defined name, using only the EBCDIC characters 0 - 9 and A - Z
(capital letters only). In either case, the name is padded with blanks to 8
characters. If you use an architected name, supply a field name because
hexadecimal data in a string literal is not supported. The CNMREGIST service
routine truncates any trailing blanks before placing the name in a registration
table.
The NetView program reserves application names categories for the following
application names:
Reserved Name
Hex Equivalent
ALERT
X'23F0F3F1'
EP_OPS
X'23F0F1F6'
EP_SPCS
X'23F0F1F4'
HMON_DST
X'30F0F8F5'
HMON_OST
X'30F0F8F4'
LINKSERV
X'23F0F3F5'
MDS_ROUT
X'23F0F1F0'
MS_CAPS
X'23F0F1F1'
OPS_MGMT
X'23F0F1F7'
R_BRIDGE
X'30F0F5F9'
RMTCMD_O
X'30F0F7F2'
RMTCMD_R
X'30F0F5F5'
RMTCMD_S
X'30F0F7F0'
SPCS X'23F0F1F5'
STATUS
No hexadecimal equivalent
No character equivalent
X'23F0F0F1'
No character equivalent
X'30F0F7F3'
This is a required operand.
COMMAND
Is an 8–byte character field that specifies the name of the command procedure
that is driven with any data that has a destination name equal to the one in
the applname operand. The only exception is for replies to requests that
specified a command on the CNMSENDMU invocation. The data is received as
a message unit. This is either a command name or a register containing a
pointer to it.
This operand is required for registration requests and not valid for
deregistration requests.
FOCALPT
A fullword character field that specifies whether the MS application is a focal
point application.
NO Specifies that the MS application is not a focal point application. This is the
default.
This operand is required for registration requests and not valid for
deregistration requests.
YES
Specifies that the MS application is a focal point application. A value of
YES is appropriate only for an MS application registration. It is not
acceptable for an operations management served application.
Note:
1. If an MS application registers as a focal point application and later the
same MS application registers again with a focalpt of NO, the
application still receives focal point data from any node that did not
attempt to send while the application was deregistered.
2. When you specify YES, the focal point category name is the application
name specified in applname. If you specify fpcategory as well, it must be
the same.
FPCAT
An 8-byte character field that specifies the focal point category about which the
registrant wants to receive focal point information. Focal point category names
are the applnames of MS applications that are focal point applications
(registered with FOCALPT = YES). They are specified as described under
APPL.
If a focal point for this category exists at the time of registration, the command
processor specified with the cmdname operand is scheduled to run under the
current task. On the initial data queue of the command processor is an
MDS-MU with a control point management services unit (CP-MSU) containing
an MS capabilities (MS_CAPS) major vector with a X'E1' subvector informing
the application of its focal point information. Whether a focal point exists
initially or not, all subsequent changes in the focal point information for the
fpcategory are conveyed to the registering application from the MS_CAPS
application or from EP_OPERATIONS_MGMT function in the same way using
an X'E1' subvector in an MS capabilities major vector.
The NetView program provides focal-point applications for the following focal
point categories:
v ALERT_NETOP (X'23F0F3F1')
v OPERATIONS_MGMT_NETOP (X'23F0F1F7')
v SPCS (X'23F0F1F5.')
This operand is required for registration requests and is not valid for
deregistration requests.
NOTIFY
Is a literal value that specifies whether this registration is to supply an MDS
error message if connectivity to other nodes is lost. NONE is the default.
ALL
Specifies that this registration receives all the notifications that ERROR
provides, and in cases when the high-performance transport classifies a
session outage as normal and does not attempt to reestablish connectivity.
ERROR
Specifies that this registration receives notification if there is a normal or
abnormal loss of connectivity to another node. A normal loss can occur if
you have outstanding transactions with the other node. An abnormal loss
can occur if you have a session outage and connectivity cannot be
reestablished.
NONE
Specifies that this registration does not receive any error notification.
NONE is the default.
PRI
Supplies the MQS priority for incoming requests. The MQS priority is used
when the MS or high performance transport uses the MQS for processing of
any received unsolicited MDS-MUs. The value is one of the four strings HIGH,
NORMAL, LOW, or TEST, The priority value must be entered as 8-bytes,
including blanks. For example:
’LOW ’
’HIGH ’
’NORMAL ’
’TEST ’
Note: The single quotation marks are shown only to demonstrate the 8-byte
field. Do not include them as part of the priority specification.
The following list shows the priorities:
HIGH
Processing begins after any NORMAL requests currently in progress, but
before queued NORMAL or LOW requests.
LOW
Processing is preempted by HIGH and NORMAL priority requests. This is
the default.
NORMAL
Processing priority preempts a queue of LOW priority requests.
TEST
DSIMQS queues the request at either HIGH or LOW priority, according to
the destination task's command priority. Refer to the OVERRIDE command
in the NetView online help for an explanation of command priorities.
REPLACE
Specifies whether this registration supersedes a previous registration.
NO Specifies that this registration cannot replace any current registration for
the same application. If the same MS application or operations
management served application is already registered, the service routine
returns a return code of 2.
This operand is required for registration requests and not valid for
deregistration requests.
YES
Specifies that this registration replaces any current registration for the same
application. This is the default. If you specify YES, an application can:
v Change the name of the command driven to process data received
v Change the name of the task where the command is driven with
unsolicited data
v Change whether the application is to receive focal point information
SWB
Is the symbolic name, or register of a fullword area, containing the address of
the SWB. This is a required operand.
256 Programming: Assembler
DSI6REGS
TYPE
Specifies the type of request:
REGMSAPPL
Register an MS application to the NetView MS transport.
REGOMSERVD
Register a second-level application to operations management. This
makes the application a served application of operations management.
DEREGMSAPPL
Deregister an MS application.
DEREGOMSERVD
Deregister an operations management served application.
Note:
1. When an operations management served application is registering, the only
valid value for fpcategory is OPERATIONS_MGMT_NETOP (X'23F0F1F7'). This
is either a fpcategory field or a register containing a pointer to it.
2. If two nodes in two networks have the same LU name, VTAM can locate either
one, depending on the active configuration.
3. The NetView task where an MS application or an operations management
served application receives an MDS-MU is determined as follows:
v For a multiple-domain support (MDS) reply, the task is the task under which
the requesting MS application or operations management served application
was running.
v For a request MDS-MU:
Invoking this service routine causes the requested data to be given to the NetView
MS transport. The NetView MS transport uses an LU 6.2 conversation, and VTAM
selects the appropriate session for the actual transmission.
The data to be sent is in the form of an MDS-MU. You can supply the following
information for the MDS-MU header:
v A completely built MDS-MU.
v An MDS-MU that is missing one or more of the following values:
– A unit-of-work correlator (UOWC)
– An origin NETID
– An origin LUNAME
These are added by the service routine.
v Data (for example, a CP-MSU) and sufficient other parameters for the service
routine to build an MDS-MU header.
The DSI6SNDS macro builds the necessary NetView message queueing service
(MQS) buffer with the specified data and enqueues it for the NetView MS
transport.
The service routine returns control to the invoking component after it has
successfully queued the request to the NetView MS transport.
DSI6SNDS
, DATATYP = MDSMU
►► DSI6SNDS SWB = swbname ►
label ( register ) , DATATYP = MDSMU
NONMDSMU
► , DATA = dataarea ►
( register )
► ►
SUPCORR CORAREA SECONDS REPCMD ORIGAPP
► ►
DESTNET DESTLU DESTAPP MUTYPE PRI
, SYNCH = NO_BUF
► ►◄
, SYNCH = NO_BUF
NO_UNBUF
SUPCORR
, SUPPCORR = suppliedcorr
( register )
CORAREA
, CORAREA = correlarea
( register )
SECONDS
, SECONDS = timeout
constant
REPCMD
, REPCMD = replycmd
( register )
ORIGAPP
, ORIGAPP = origappl
( register )
DESTNET
, DESTNET = destnet
( register )
DESTLU
, DESTLU = destlu
( register )
DESTAPP
, DESTAPP = destappl
( register )
MUTYPE
, MUTYPE = mutype
PRI
, PRI = priority
( register )
Where:
CORAREA
Is a 52-byte varying length character field in which a new unit of work
correlator (X'1549') GDS variable is created and returned by the DSI6SNDS
macro. The length subfield (the first 2 bytes) indicates the length of the
correlator. The correlator length is always 52 bytes for this release of the
NetView program.
If you specify CORAREA for an MDS-MU, the NetView program creates the
unit of work correlator in this area and inserts it into the specified MDS-MU
while copying it into the buffer for the high-performance transport. In this
case, NETID and LUNAME are inserted into the origin location (X'81')
subvector at the same time if they are not already present (if there are no X'01'
and X'02' subfields within the subvector). If you omit CORAREA, the
MDS-MU must be complete and ready to be transmitted as supplied.
For NONMDSMU specify either CORAREA or SUPCORR. If you specify
CORAREA, DSI6SNDS creates the unit of work correlator GDS variable in this
area and uses it in building the MDS header. The service routine uses the
supplied value in building the MDS header if you specify SUPCORR. No
validity checking is done for a correlator the caller supplies.
If this is an MDS reply or an MDS error message, do not use CORAREA,
because an MDS reply or error message must return the correlator sent with
the request. The invoking application must supply the original correlator either
in the MDS-MU or with the SUPCORR keyword.
CORAREA is mutually exclusive with the SUPCORR keyword.
You can specify either the name of the area or a register containing a pointer to
the area.
DATA
Is a varying length character field containing the data being sent. For either
MDSMU or NONMDSMU, the first two bytes must contain the entire length of
the data and the next two bytes must contain the key. The maximum length of
the data is as defined in the SNA architecture for the data object being sent.
For an MDS-MU, all fields within the MDS-MU header must be properly
prepared before invocation (with the possible exception of the correlator and
the origin NETID and LUNAME). If the correlator is not contained in the data,
specify correlarea.
You can specify either the name of the data or a register containing a pointer
to the data.
DATATYP
Is an 8-byte character field that indicates that the data item specified with the
DATA keyword is an MDS-MU or a non-MDS-MU.
MDSMU
Indicates that the DATA keyword is an MDS-MU. MDSMU is the
default.
NONMDSMU
Indicates that the DATA keyword is not a complete MDS-MU because
it does not contain an MDS-MU header. The DSIHSNDS macro
envelopes this data in an MDS-MU header before sending it.
DESTAPP
Is an 8-byte character field that specifies the destination application name.
The application name can be one of the following values:
v An architecturally defined fullword value (padded with blanks to 8 bytes)
for MS application programs.
v A 1- to 8-character installation-defined name (padded with blanks). Use the
EBCDIC characters 0–9 and A–Z (capitals only).
The DSI6SNDS macro truncates any trailing blanks before putting this value in
the MDS-MU header.
You can specify either the destination application name or a register containing
a pointer to the destination application. The macro automatically translates the
following destination application names to hexadecimal format:
v EP_OPS
v OPS_MGMT
v ALERT
DESTAPP is required for NONMDSMU.
DESTLU
Is an 8-byte character field that specifies the LU or VTAM CP name of the
destination LU or VTAM CP. Specify the 1- to 8-character LU or VTAM CP
name (padded with blanks to 8 characters) using only the EBCDIC characters
0–9 and A–Z (capitals only). If DESTLU is not specified, the default is the CP.
The DSI6SNDS macro truncates any trailing blanks before putting this value in
the MDS-MU header.
This field is required for NONMDSMU.
DESTNET
Is an 8-byte character field that specifies the ID of the network of the
destination LU or VTAM CP name. You must specify the 1- to 8-character
NETID (padded with blanks to 8 characters) using only the EBCDIC characters
0–9 and A–Z (capitals only).
The DSI6SNDS macro truncates any trailing blanks before putting this value in
the MDS-MU header. If you specify 8 blanks as the value, the effect is the same
as not specifying the keyword. The default is the network name determined by
VTAM based on the LU or VTAM CP name of the remote node you specify
with the DESTLU keyword.
You can specify either the destination NETID name or a register containing a
pointer to the destination NETID.
If you do not specify the DESTNET keyword when using DSI6SNDS for
NONMDSMU data types, the value of this field defaults to the NETID
determined by VTAM. Otherwise, this field is required for NONMDSMU data
types.
MUTYPE
Is a 4-byte integer field that specifies the index number that identifies the type
of MDS-MU to build. The type identifies whether the MDS-MU is a request, a
reply, or an error message, and whether additional messages are expected. The
following types are defined as constants:
REQUEST_WITH_REPLY
1
REQUEST_WITHOUT_REPLY
2
REPLY_ONLY
3
REPLY_NOTLAST
4
REPLY_LAST
5
ERROR_MESSAGE
6
The DSI6SNDS macro uses the MUTYPE value to determine the settings for
the MDS message type and first and last message indicator bits in the flags
(X'90') MDS routing information subvector.
This is a required keyword for NONMDSMU.
ORIGAPP
Is an 8-byte character field that specifies the origin high-performance
application name.
The application name can be one of the following values:
v An architecturally defined fullword value (padded with blanks to 8 bytes)
for MS application programs.
v A 1- to 8-character installation-defined name (padded with blanks). You
must use the EBCDIC characters 0–9 and A–Z (capitals only).
The DSI6SNDS macro truncates any trailing blanks before putting this value in
the MDS-MU header.
You can specify either the origin application name or a register containing a
pointer to the origin application.
This field is required for NONMDSMU.
PRI
Supplies the MQS priority for incoming reply or MDS error message resulting
correlator (X'1549') GDS variable. The SUPCORR field must contain a 2-byte
length, a 2-byte key, and at least 1 byte of correlator data. Refer to the SNA
library for more information about defining the correlator.
SUPCORR is not valid for an MDS-MU. If you use an existing unit of work or
create a new one, the MDS header must contain the unit of work and the
MDS-MU must be ready to be transmitted as supplied. An MNOTE is returned
if you specify this keyword for an MDS-MU.
SUPCORR is optional for NONMDSMU. For NONMDSMU, specify either
SUPCORR or CORAREA. The supplied value is used to build the MDS header
if you specify SUPCORR. No validity checking is done for a correlator
supplied by the caller. If an MDS reply or an MDS error message is sent,
specify SUPCORR because an MDS reply or error message must return the
correlator sent with the request. The invoking application must supply the
original correlator either in the MDS-MU or with the SUPCORR keyword.
You can specify the correlator name or a register containing a pointer to the
data.
SWB
Is the register, or symbolic name of a fullword area, containing the address of a
service work block (DSISWB).
Note:
1. For MUs sent within the same NetView program, the send services uses the
NetView LU name as the origin LU.
2. A request can time out in less than the specified interval if the receiving
partner has implemented a maximum time-out value of less than 24 hours, or
the one specified with the DEFAULTS command.
3. The parameter specified by SECONDS is either the variable name (timeout)
containing the time interval value, or the value itself.
4. Control is returned to the invoking program after DSI6SNDS successfully
queues the request to the MS transport.
5. For MDSMU, all fields within the MDS-MU header must be correct except for
origin NETID and LUNAME. The macro can determine and set these fields. If
the data does not contain the correlator, you must specify CORAREA.
6. For REPLY_ONLY, REPLY_NOTLAST, REPLY_LAST, and ERROR_MESSAGE,
you must specify SUPCORR to return the correlator sent with the request.
7. The MS transport implements a timeout value for the application receiving the
data. If the invocation of DSI6SNDS specifies a time-out value greater than the
time-out value set by the transport at the receiving node, the sending
application might time out in less than the specified interval.
8. When VTAM is active, you can use DSI6SNDS to send data to another
application in the same domain.
9. If DESTNET is not the NETID determined by VTAM for the LU specified in
DESTLU, the send fails.
10. An MS application or operations management served application cannot send
data to the same application within the same NetView system.
The called service routines are supported in both 24-bit and 31-bit addressability
mode. Use these routines in 31-bit mode whenever possible. Using 24-bit mode
uses more storage below the 16-megabyte line and increases system usage.
On routine return, register 15 contains a return code. All other registers are
reserved.
In addition, fields defined by the service routine description in the parameter list
can be used for return values.
You can also use this routine to free a chain of buffers that use HDRNEXTM as the
chaining field, provided the chain is terminated with a zero value in the last buffer.
If a buffer on the chain is an AIFR structure, all buffers chained to the AIFR
structure are freed, using all of the defined buffer pointers within the IFRAUTO
mapping.
The DSIFREBS macro is provided for calling DSIFREBF. By using DSIFREBS you
do not have to calculate the offset of DSIFREBF in the SVL.
Where:
plist
Is a standard parameter list in the following format:
Word 1
The address of a fullword containing the TVB address for the task.
Word 2
The address of a fullword containing the address of the buffer chain to be
freed.
savearea
Is a standard 72-byte save area, usually at the start of the code.
Return Code
The following return code is for the DSIFREBF routine:
0 The requested function was performed.
Abend Code
The following abend code is for the DSIFREBF routine:
18 The DSIFREBF service was unable to free one of the chained buffers.
Note:
1. The DSIFREBF service routine requires that the parameter list contain 31-bit
addresses of the parameters. The address to be freed must be a valid 31-bit
address.
2. Buffers being freed must be in subpool zero, and they must be obtained with
the Q=NO option of DSIGET.
3. HDRNEXTM in the buffer to be freed is zero unless a chain of buffers is to be
freed.
4. The linkage registers of this routine are standard.
This service routine runs on the NetView task of the invoking program and returns
control to the caller after it scans the NetView automation table and after it
completes the synchronous portion of message processing.
Where:
plist
Is a standard parameter list in the following form:
Word 1
The address of a fullword containing the TVB address for the task.
Word 2
The address of a fullword containing the address of the MDB to be
processed.
Word 3
The address of a fullword containing the address of the source object. The
source object is optional. If you do not want to specify a source object,
Word 3 contains the address of a value of zero.
Word 4
The address of a fullword containing a 16-byte correlator field. This field
needs to be all binary zeros for a single MDB, or all binary zeros for the
first MDB of a set of related MDBs.
This field needs to be task reentrant, and enable DSIMMDB to write a
16-byte correlator value into it. For related MDBs, save this correlator value
and pass it back to DSIMMDB on each subsequently related MDB. When
an MDB is processed with an end-of-text indication, the correlator is
returned to you with a zero value.
savearea
Is a standard 72-byte save area, usually at the start of the code.
Return Codes
The following return codes are for the DSIMMDB macro:
0 The requested function was performed.
24 Storage was unavailable.
564 An error is detected in the correlation parameter. A diagnostic memory
dump of the MDB is written to the NetView log if the address of the MDB
is not zero. A diagnostic memory dump of the source object is written to
the NetView log if the address of the source object is not zero.
568 The first operand is not a valid MDB. A diagnostic memory dump of the
MDB is written to the NetView log if the address of the MDB is not zero.
Additionally, a diagnostic memory dump of the source object is written to
the NetView log if the address of the source object is not zero.
572 The second operand is not a valid source object. A diagnostic memory
dump of the MDB is written to the NetView log if the address of the MDB
is not zero. Additionally, a diagnostic memory dump of the source object is
written to the NetView log if the address of the source object is not zero.
Note:
1. This service does not free the MDB or source object.
2. Use the MVS control block IEAVM105 as a guide for building your MDB.
3. To chain related MDBs, use the correlator parameter (Word 4) to DSIMMDB in
place of the IEAVG132 map.
4. If IEAVM105 is not available, you can use parts of the DSIAIFRO map to build
your MDB, as follows:
a. Begin your MDB at DSIMGO level.
b. Change the type code for DSIMGO to X'0001' to indicate that this is an
incoming MDB.
c. Include one DSICPO, one DSIGOJ, and as many DSITOJ objects as needed
to contain your text.
5. The first character in your text object is discarded; it cannot be a meaningful
part of your message. The second character is discarded if both of the
following conditions exist:
The character is a plus sign (+)
MDBCAUTH (CPOCAUTH) is set on (set to 1).
6. MDBs created using this service routine are submitted directly to the NetView
program; the operating system is not involved in the processing or routing of
the MDB. Therefore, items that are normally subject to MVS system routing
(such as console name and route code) are ignored; the MDB is delivered only
to the task that calls the service routine.
7. When creating DOM MDBs, be aware that not all forms of DOM can be
transported over OST-NNT sessions. When using those sessions, only create
DOM MDBs that indicate DOM by MSGID.
For detailed information about MDB formats, refer to the description of MDB in
the z/OS library.
Each sample described in this section has two names, such as ATMPCMDP
(CNMS4202). The CNM name is the name under which the file or member is
distributed on the sample library tape. The first name is a more meaningful alias
name to which the CNM file is copied during installation.
This appendix also contains a description of each sample. The last section provides
coded examples of an installation exit routine, a command processor, a
user-written function, and a user-written optional subtask.
Note:
1. Refer to the prologs of the samples for information about how certain samples
are related and about special cases for installation exit routines and other
samples (such as DSIUSR00).
2. The alias name is the control section (CSECT) name.
AWRTLOG (CNMS4272)
This sample uses DSIWLS to write a message to the NetView log. The
NetView service macros used in this sample are DSICBS, DSIDATIM, and
DSIWLS.
AXITVN (CNMS4270)
This sample is an XITVN DST exit. It provides the initial record for an
empty VSAM data set. The NetView service macros used in this sample
are DSICBS and DSIDATIM.
CNMRECV (CNMS4289)
This sample receives data buffers from the receiver buffer's queue. The
NetView service macro used in this sample is DSISYS.
CNMSEND (CNMS4288)
This sample sends a data buffer to a receiver using the NetView
program-to-program interface.
CNMSGENA (CNMS4287)
This sample sends a generic alert to the NetView program using the
NetView program-to-program interface.
CNMSMF3E
This sample IEFACTRT SMF exit sends selected type 30 SMF records (job
step events) to the main NetView address space for automation.
CNMSMF3F
This sample formats selected type 30 SMF records (received from the
CNMSMF3E exit) into a BNH874I multiline message for automation.
DSICTMOD (CNMS0055)
This sample specifies a wide range of constants for the NetView program.
You can specify timeout values for many functions such as hardware
monitor, trace NCP command, view requests, and RUNCMDs. You can
specify retry intervals for functions such as status collector, RTM, and
WTORs. You can specify message queue thresholds, heap sizes, and sense
code filtering. Refer to the sample module for a complete list of constants.
DSIEX02A (CNMS4283)
This sample is used to manipulate messages. The installation exit is
invoked for standard output to the operator's terminal. If DWO403I is the
incoming message, it issues DSIMQS to start the task specified in
DWO403I and swaps the message buffer to indicate that the task has been
started and that the request can be reissued.
NetView service macros used in this sample are DSICBS, DSIDEL, DSIFRE,
DSIGET, DSILCS, DSILOD, DSIMBS, DSIMQS, and DSIPRS.
DSIEX17 (CNMS4297)
This installation exit is invoked upon receipt of MVS messages and delete
operator messages (DOMs) and is called before automation or ASSIGN
processing.
CNMS4297 manipulates message IEF233A and its associated DOM.
IEF233A is a held message displayed upon receipt of an MVS MOUNT
request. When the MOUNT request is honored, a DOM is issued to delete
the held message.
The intent of this sample is to provide a logged message that includes the
MOUNT request, the time that it was received, and the time that it was
honored.
GOJGOSNM
CPOCOJBN
MDBCPROD 16-byte SCP product level CPOCPROD
4-character MVS CP object version level
4-character control program name
8-character FMID of originating system
MDBCERC 128 bits routing codes IFRAUWRT
CPOCERC
MDBCDESC 2-byte descriptor codes IFRAUWDS
CPOCDESC
MDBDESCA System failure IFRAUWDS
CPOCDESC
MDBDESCB Immediate action required IFRAUWDS
CPOCDESC
MDBDESCC Eventual action required IFRAUWDS
CPOCDESC
MDBDESCD System status IFRAUWDS
CPOCDESC
MDBDESCE Immediate command response IFRAUWDS
CPOCDESC
MDBDESCF Job status IFRAUWDS
CPOCDESC
MDBDESCG Application program/processor DOM at end of task IFRAUWDS
CPOCDESC
MDBDESCH Out-of-line IFRAUWDS
CPOCDESC
MDBDESCI Operator's request IFRAUWDS
IFRAUMCS(3)
CPOCDESC
MDBDESCJ Track command response IFRAUWDS
CPOCDESC
MDBDESCK Critical eventual action IFRAUWDS
CPOCDESC
MDBDESCL Delivered but not held IFRAUWDS
CPOCDESC
MDBDESCO
MDBDESCP
MDBCMLVL Message level flags CPOCMLVL
MDBCMLVL(1) WTOR IFRAUWWR
MDBMLR
CPOMLR
MDBCMLVL(2) Immediate action IFRAUWDS(2)
MDBMLIA
CPOMLIA
MDBCMLVL(3) Critical eventual action IFRAUWDS(11)
MDBMLCE
CPOMLCE
MDBCMLVL(4) Eventual action IFRAUWDS(3)
MDBMLE
CPOMLE
MDBCMLVL(5) Informational CPOMLI
MDBMLI
MDBCMLVL(6) Broadcast IFRAUWBD
MDBMLBC
IFRAUMCS(6)
CPOMLBC
MDBCMLVL(7) Reserved None
MDBCMLVL(8)
MDBCMLVL(9)
MDBCMLVL(10)
MDBCMLVL(11)
MDBCMLVL(12)
MDBCMLVL(13)
MDBCMLVL(14)
MDBCMLVL(15)
MDBCMLVL(16)
MDBCATTR 2-byte message attributes CPOCATTR
MDBCATTR(1) Reserved None
MDBCATTR(2) Message is command response IFRAUMCS(3)
MDBCMCSC
CPOCMCSC
MDBCATTR(3) Message issued by authorized program CPOCAUTH
MDBCAUTH
IFRAUPLS
MDBCATTR(4) Message is to be retained by AMRF CPOCRETN
MDBCRETN
IFRAURET
MDBCRRET Retain in AMRF CPOCRRET
IFRAURRT
MDBCRNRT Do no retain in AMRF CPOCRNRT
IFRAUNRT
MDBCASID ASID of issuer; decimal IFRAUASI
IFRAUWAS
CPOCASID
MDBCTCB TCB address of issuer IFRAUTCB
CPOCTCB
MDBCTOKN 4-byte DOM token associated with message; decimal CPOCTOKN
MDBCSYID 1-byte system ID (for DOM); decimal CPOCSYID
MDBDOMFL 1-byte DOM flags CPODOMFL
MDBDOMFL(1) DOM by message ID MSGDOMAT
MDBDMSGI
IFRAUWDT
IFRAUWDA
CPODMSGI
MDBDOMFL(2) DOM by system ID CPODSYSI
MDBDSYSI
MDBDOMFL(3) DOM by ASID IFRAUWDT
MDBDASID
IFRAUWDA
CPODASID
CPODJTCB
MDBDOMFL(5) DOM by token IFRAUWDT
MDBDTOKN
IFRAUWDA
MDBDTOKN
MDBCMISC 1-byte miscellaneous routing information CPOCMISC
MDBCMISC(1) Display UD messages CPOCUD
MDBCUD
MDBCMISC(2) Display only UD messages CPOCFUDO
MDBCFUDO
MDBCMISC(3) Queue by ID only CPOCFIDO
MDBCFIDO
MDBCOJID 8-character originating job ID IFRAUWJU
CPOCOJID
MDBCKEY 8-byte key associated with message CPOCKEY
Character
MDBCCART 8-byte command and response token CPOCCART
HDRTTYPE
MDBTTYPE(1) Control text HDRLNCTL
MDBTCONT HDRTCONT
MDBTTYPE(2) Label text HDRLNLBL
MDBTLABT HDRTLABT
MDBTTYPE(3) Data text HDRLNDAT
MDBTDATT HDRTDATT
MDBTTYPE(4) End text HDRLNEND
MDBTENDT HDRTENDT
MDBTTYPE(5) Prompt text HDRTPROT
MDBTPROT
MDBTTYPE(6) Reserved None
MDBTTYPE(7)
MDBTTYPE(8)
MDBTTYPE(9)
MDBTTYPE(10)
MDBTTYPE(11)
MDBTTYPE(12)
MDBTTYPE(13)
MDBTTYPE(14)
MDBTTYPE(15)
MDBTTYPE(16) Text object presentation field overrides general object presentation HDRTFPAF
MDBTFPAF attribute field
MDBTMTPA 4-byte presentation attributes HDRTMTPA
Where:
BIT
Specifies that the automation table is bit data.
modname
Specifies a 1- to 8-character load module name.
parameterlist
Specifies the parameter list to be passed to modname.
value
Specifies the value that the automation table uses to compare with the value
returned by modname, if any.
The ATF module gets control only if the automation table scans to that statement.
Because performance can be affected negatively, IF-THEN statements that contain
ATF module calls cannot be executed with each scan of the automation table. Place
these IF-THEN statements within BEGIN-END sections to prevent unnecessary
calls.
ATF resembles a function as defined in REXX and, from the automation table
language perspective, ATF is a function that calls functions.
Note: Refer to the IBM Tivoli NetView for z/OS Automation Guide for more
information about the IF-THEN statement and ATF syntax.
Note: A sample ATF module OPERID (CNMS4295) is provided with the NetView
program. You can use it as pattern when coding your own ATFs.
The AIFR being automated can contain either a message or an MSU buffer. See
Figure 18 on page 290 for an example of the parameter list and of control blocks
and their relevant pointers.
For bit string functions, the first byte of the returned value from ATF must contain
the first bit needed for the evaluation. The bit string on the right side of the equal
sign specifies X for any bit positions whose value is irrelevant to the evaluation.
For example, if ATF must determine whether the third and fourth bits of a byte are
B'01', you can code this as:
IF ATF (BIT ’pname ....’) = ’XX01’ THEN ....;
You can also write the pname to shift the bits so that leading Xs are not needed.
This does not affect the NetView program as long as the pname design is
coordinated with the automation entry.
When the NetView program regains control, the registers and their contents are as
follows:
15 A return code:
0 Normal
1-8 ATF-detected error
>8 Unexpected error
0-14 Restored to caller's contents
The ATF module replaces the command string, found in the buffer pointed to by
CWBBUF, with the value to be compared to the right side of the equal sign on the
automation table IF-THEN statement. The maximum size of the returned data is
limited to 256 bytes minus the length of the BUFHDR. The ATF places the actual
length of the returned data in HDRMLENG. If you put zero in HDRMLENG, a
null value is returned.
To extract more data, you can use multiple ATF invocations from one automation
table statement.
Do not return a swapped buffer, because the buffer that the NetView program
provides is the maximum size supported.
ATF return codes 1–8 causes a false ATF comparison. Return codes greater than 8
can also cause a false ATF comparison. Error message CNM588E is issued for
return codes greater than 8. In an operator station task, the error message is sent to
the operator. In a data services task (DST) or optional subtask (OPT), the error
message is sent to the operator that started the DST or OPT, if one exists.
Otherwise, it is sent to the authorized receiver. You see the return code only if it is
greater than 8 (which results in an error message containing the return code).
Note:
1. Do not pass a return code greater than 8 unless you want to indicate a severe
error from the ATF module.
2. Freeing the buffer passed to ATF causes an abend.
Control Blocks
An ATF module has access to the command buffer and these control blocks:
v AIFR
v DSICWB
v DSISWB
v DSITVB
v DSITIB
v DSIMVT
v DSISVL
Register 1
Parameter List
CWB @
CWB
AIFR @
CBH
CWBTIB
CWBSWB
AIFR CWBADATD
BUFHDR
IFRCODE
IFRAUTBL
You can add new ATF modules (using link-editing) and activate them (using the
AUTOTBL command) while the NetView program is running, even if automation
was previously in effect. To change an existing ATF module that is already loaded,
you have four alternatives:
1. Rename the ATF module using link-editing, change the corresponding ATF
name or names in the automation table, and reissue the AUTOTBL command.
2. Stop the NetView program and restart it.
3. Deactivate the ATF module using the AUTOTBL OFF command. Wait for a
CNM593I message to be issued to ensure that all existing ATF modules are
deleted, then reissue the AUTOTBL command to put the modules back into
effect.
4. If it is not practical to shut off automation, issue the AUTOTBL command with
a substitute member. Wait for the current automation process to finish using the
ATF module. Run a command processor to delete one or more modules, and
then reissue the AUTOTBL command with the main member.
Points to Remember
When you write ATF modules, remember the following points:
v Write them in assembler language.
v Do not define them in CNMCMD or its included members.
v They cannot be called as commands.
v They are different from NetView commands. Do not invoke them outside the
automation table. Do not code NetView commands as modules.
v Define it as being a reentrant load module (by the name to be referenced in
automation statements) stored in a NetView load library defined by the NetView
PROC, which is similar to a command processor.
Note: For more information about the HLL service routines, refer to IBM Tivoli
NetView for z/OS Programming: PL/I and C.
Table 51. Assembler and HLL Service Interfaces for the NetView program
Assembler
Macro HLL Service Routine Name Description
DSIAUTO CNMAUTO Invoke automation services
DSIBAM – Build automation message
DSIBAMKW – Build automation message keyword
DSICBS – Control block services
DSICES CNMSCOP Command entry services
DSICVTHE – Convert to hex
DSIC2T CNMC2T Code point translation service reference
DSIDATIM CNMINFC Date and time
DSIDEL – Delete user-defined module
DSIDKS CNMMEM(C|O|R|) Disk services
DSIFIND CNMNAMS Find long-running command storage
DSIFRE CNMPOOL Free storage
DSIFREBF* – Free buffers service
DSIGET CNMPOOL Get storage
DSIGETDS CNMGETD Data queue manipulation service
DSIHREGS CNMHRGS High-performance transport application
registration
DSIHSNDS CNMHSMU Send high-performance message unit
DSIID – Inserts a readable identifier in the code
DSIKVS CNMSCOP Keyword and or value services
DSILCS – Obtain and or release control blocks
DSILOD – Load user-defined module
DSIMBS – Message build services
DSIMDS – Message definition services
DSIMMDB* CNMPMDB Process MDB service
DSIMQS CNMSMSG Message queueing services
DSINOR CNMQAPI Resource Object Data Manager
DSIPAS – Parameter alias services
DSIPOP CNMNAMS Remove long-running command
DSIPOS – ECB post services
Table 51. Assembler and HLL Service Interfaces for the NetView program (continued)
Assembler
Macro HLL Service Routine Name Description
DSIPRS CNMSCAN Parsing services
DSIPSS CNMSMSG Presentation services
DSIPUSH CNMNAMS Establish long-running command
DSIQOS – Query operator services
DSIQRS – Query resource services
DSIRDS – Resource definition services
DSIRXCOM – Access REXX variables (VM only)
DSIRXEBS – Get an EVALBLOK
DSISRCMV – Search for subvector/subfield
DSISYS CNMINFC Operating system indicator
DSITECBS – Manage a dynamic ECB list for DSTs
DSIVARS CNMVARS NetView variable services
DSIWAT – ECB wait services
DSIWCS CNMSMSG Write console services
DSIWLS CNMSMSG Write log services
DSIZCSMS CNMCNMI CNM data services
DSIZVSMS CNMKIO VSAM data services
DSI6REGS CNMRGS Registration API
DSI6SNDS CNMSMU Send a message unit
DUIFSMTE – Defines a status mapping table entry. Refer
to IBM Tivoli NetView for z/OS Resource
Object Data Manager and GMFHS
Programmer's Guide for more information.
Note: * = Assembler service routine.
IBM may not offer the products, services, or features discussed in this document in
other countries. Consult your local IBM representative for information on the
products and services currently available in your area. Any reference to an IBM
product, program, or service is not intended to state or imply that only that IBM
product, program, or service may be used. Any functionally equivalent product,
program, or service that does not infringe any IBM intellectual property right may
be used instead. However, it is the user's responsibility to evaluate and verify the
operation of any non-IBM product, program, or service.
IBM may have patents or pending patent applications covering subject matter
described in this document. The furnishing of this document does not give you
any license to these patents. You can send license inquiries, in writing, to:
For license inquiries regarding double-byte (DBCS) information, contact the IBM
Intellectual Property Department in your country or send inquiries, in writing, to:
The following paragraph does not apply to the United Kingdom or any other
country where such provisions are inconsistent with local law:
Any references in this information to non-IBM Web sites are provided for
convenience only and do not in any manner serve as an endorsement of those Web
IBM may use or distribute any of the information you supply in any way it
believes appropriate without incurring any obligation to you.
Licensees of this program who wish to have information about it for the purpose
of enabling: (i) the exchange of information between independently created
programs and other programs (including this one) and (ii) the mutual use of the
information which has been exchanged, should contact:
IBM Corporation
2Z4A/101
11400 Burnet Road
Austin, TX 78758
U.S.A.
The licensed program described in this document and all licensed material
available for it are provided by IBM under terms of the IBM Customer Agreement,
IBM International Program License Agreement or any equivalent agreement
between us.
COPYRIGHT LICENSE:
Each copy or any portion of these sample programs or any derivative work, must
include a copyright notice as follows:
© (your company name) (year). Portions of this code are derived from IBM Corp.
Sample Programs. © Copyright IBM Corp. _enter the year or years_. All rights
reserved.
Trademarks
IBM, the IBM logo, and ibm.com® are trademarks or registered trademarks of
International Business Machines Corp., registered in many jurisdictions worldwide.
Other product and service names might be trademarks of IBM or other companies.
A current list of IBM trademarks is available on the Web at “Copyright and
trademark information” at http://www.ibm.com/legal/copytrade.shtml .
Adobe and Acrobat and all Adobe-based trademarks are either registered
trademarks or trademarks of Adobe Systems Incorporated in the United States,
other countries, or both.
UNIX is a registered trademark of The Open Group in the United States and other
countries.
Other product and service names might be trademarks of IBM or other companies.
This Software Offering does not use cookies or other technologies to collect
personally identifiable information.
If the configurations deployed for this Software Offering provide you as customer
the ability to collect personally identifiable information from end users via cookies
and other technologies, you should seek your own legal advice about any laws
applicable to such data collection, including any requirements for notice and
consent.
For more information about the use of various technologies, including cookies, for
these purposes, See IBM’s Privacy Policy at http://www.ibm.com/privacy and
IBM’s Online Privacy Statement at http://www.ibm.com/privacy/details the
section entitled “Cookies, Web Beacons and Other Technologies” and the “IBM
Software Products and Software-as-a-Service Privacy Statement” at
http://www.ibm.com/software/info/product-privacy.
Notices 297
298 Programming: Assembler
Index
Special characters assembler (continued)
command samples (continued)
&WAIT condition 12, 28, 40 CNMRECV 275
CNMSEND 275
CNMSGENA 275
Numerics CNMSMF3E 275
3270 data stream 66 CNMSMF3F 275
DSICTMOD 275
DSIEX02A 275
A DSIEX17 275
DSIEX18 276
AAUTISAW control block 49 DSIEX19 276
abend (abnormal end) reinstate routine DSIEX20 276
general 75 DSIEX21 276
long-running command processor 68 DSIUSR00 277
ABEND (abnormal end) reinstate routine OPERID 277
DSIPOP macro 211 macros and HLL service routine 293
DSIPUSH macro 223 parameter sample 276
ACB (access method control block) 89 performance 1
accessibility xv ASSIGN command 12, 28
action message 72 ASYPANEL ECB 66
addressing mode (AMODE) 6 authorized receiver 28, 203
AID key 66 automated operation, testing of 2
AIFR automation table function (ATF)
buffer structure 61 control block access 289
AIFR (automation internal function request) designing 288
control block 121 installing 290
cross-reference table to MDB fields 279 overview 287
extension 112 automation task command processor 75
modification 111 AUTOTASK command 3
objects 112
routing list 137
alert automation 21
alert generation 23 B
alternate screen size 66 Basic Sequential Access Method (BSAM)
argument list 99 empty file 23, 50
assembler output 23, 50
benefits 1 BNJPALEX installation exit 23
called service routine 267 BNJPNL1 data set 167
command samples BNJPNL2 data set 167
AAUTOTB 273 books
ABLDMSG 273 see publications xi
ACALLCMD 273 branch table, ECB processor load module (DSITECBR) control
ADATTIM 273 block 145
AGETDS 273 break STIFLE mode 72
AHREGSTR 273 buffer
AHSNDMU 273 AIFR 61
ALERTMSG 273 building a command buffer 15
ALISTMEM 273 free NetView buffer service routine 267
AMLWTO 273 header (BUFHDR) control block
AMSGMOD 273 description 103
AOPTTSK 274 example 111
APSSFULL 274 fields 104
AREGISTR 274 HDRIND field values 106
ARODMCON 272, 274 HDRMTYPE field values 106
ASENDMU 274 message command extension 109
ASEQLOG 274 presentation attributes 109
ATMPCMDP 76, 274 structure 9, 104
ATMPUXIT 274 buffer, for RUNCMD 154
AUSRFUNC 274 build automation message (DSIBAM) macro 156
AWRTLOG 275 build automation message keyword (DSIBAMKW) macro 158
AXITVN 275
Index 301
DSIGETDS (data queue manipulation service) macro 177 DSIRXFPG system packages 97
DSIHREGS (high-performance transport application DSIRXLFP local packages 97
registration) macro 179 DSIRXPRM sample 97, 276
DSIHSNDS (sending high-performance message unit) DSIRXUFP user packages 97
macro 183 DSISCE (system command entry) control block 143
DSIID (store SYSMOD level, CSECT) macro 190 DSISCT (system command table) control block 144
DSIIFR (internal function request) control block 120 DSISRCMV (searching, subvector/subfield) macro 233
DSIKVS (keyword/value service) macro 190 DSISVL (service routine vector list) control block 144
DSILCS (obtain/release control blocks) macro DSISWB (service work block) control block 144
description and syntax 192 DSISYS (operating system indicator) macro 235
example 9 DSITECBR (branch table of ECB processor load modules)
DSILOD (load user-defined module) macro 195 control block 145
DSILOGDS (Network Log) control block 138 DSITECBS (manage a dynamic ECB list for DSTs) macro
DSILRCR8 routine 71 with DSITECBR control block 145
DSIMBS (message buffer service) macro DSITECBS (managing dynamic ECB list, DSTs) macro
creating messages 11, 201 description and syntax 235
description and syntax 196 DSITIB (task information block) control block 145
DSIMDS (message definition service) macro DSITVB (task vector block) control block 147
creating messages 11 DSIUSE (installation exit parameter list) control block
description and syntax 198 description 151
DSIMMDB (process message data block) routine 268 fields 151
DSIMMDBS process MDB macro 202 input to installation exit routine 25
DSIMQS (message queueing service) macro DSIUSR00 sample 277
description and syntax 202 DSIVARS (variable service) macro 237
example 12 DSIVTAM data set 167
uses DSIWAT (ECB wait service) macro
displaying information 12, 13, 84 description and syntax 240
DSCP design 93 optional subtask processing 79, 82
invoking a user-defined processor 79 DSIWCS (write console service) macro
ROLL function 73 description and syntax 242
scheduling a command 16 example 11
DSIMSG data set 167, 201 DSIWLS (write log service) macro
DSIMVT (main vector table) control block 138 description and syntax 242
DSINOR (resource object data manager) macro 208 example 11
DSIPARM data set 80, 167 uses
DSIPAS (parameter/alias service) macro 210 logging messages 14
DSIPDB (parse descriptor block) control block 142 DSIXRCMD 154
DSIPOP (remove long-running command) macro DSIZCSMS (CNM data service) macro
description and syntax 211 description and syntax 245
uses example 93, 248
long-running command processor 68 uses
RESUME routine 71 CNM data service 86
DSIPOS (ECB post service) macro 213 DSCP interface 90
DSIPRF data set 167 DSIZDST macro 87
DSIPRS (parsing service) macro DSIZVSMS (VSAM data service) macro
description and syntax 214 description and syntax 249
examples 216 example 93
DSIPSS (presentation service) macro uses
description and syntax 216 CNM data service 89
example 12 VSAM service interface 91
uses DSRBO keyword 90, 91
displaying information 12 DSRBU keyword 89
returning a command to an originating domain 61 DST (data service task)
returning command, originating domain 18 concatenated installation exit routine 23, 26
screen formatting 66, 67 description 4
DSIPUSH (establish long-running command) macro installation exit routine 23, 50
description and syntax 223 unique service 22
example 20 writing a user subtask
uses installation 87
long-running command processor 68 writing user subtasks
RESUME routine 71 initialization 54, 87
screen formatting 67 overview 86
the ROLL function 73 processing 88
DSIQOS (query operator validity and status) macro 228 return codes 88
DSIQRS (query resource service) macro 229 DSTINIT statement 87
DSIRDS (resource definition service) macro 232 DUIFSMTE (customize DisplayStatus table) macro 294
DSIRXEBS (get an EVALBLOK) macro 232
Index 303
macros (continued) message (continued)
DSIAUTO (invoke automation service) 155 command extension 109
DSIBAM (build automation message) 156 control object, format 113
DSIBAMKW (build automation message keyword) 158 creating 11
DSIC2T (code-to-text) 163 data block (MDB)
DSICBS (control block service) 159 control block fields 279
DSICES (command entry service) 160 externalized data definitions 111
DSICVTHE, hexadecimal 163 message control object 113
DSIDATIM (date and time) 165 process routine 268
DSIDEL (delete user-defined module) 166 definition service (DSIMDS) macro 198
DSIDKS (disk service) 166 deleting 26
DSIFIND (find long-running command storage) 170 ECB 66
DSIFRE (free storage) 172 example, definition module 202
DSIFREBS (free storage) 174 handling
DSIGET (get storage) 174 OST/NNT 27
DSIGETDS (data queue manipulation service) 177 PPT 28
DSIHREGS (high-performance transport application IFRCODAI buffer 27
registration) 179 inserts 196, 200
DSIHSNDS (sending high-performance message unit) 183 logging 14
DSIID (store sysmod level, csect) 190 processing 10, 27
DSIKVS (keyword/value service) 190 queuing service (DSIMQS) macro 202
DSILCS (obtain/release control blocks) 192 replacing 26
DSILOD (load user-defined module) 195 requesting reply 72
DSIMBS (message build service) 196 STIFLE 72
DSIMDS (message definition service) 198 MLWTO (multiline write-to-operator) message 12
DSIMMDBS (process MDB) 202 MNT (main task) 3
DSIMQS (message queueing service) 202 MOD keyword 80
DSINOR (resource object data manager) 208 multiple-domain support-message unit (MDS-MU) 51
DSIPAS (parameter/alias service) 210 MVS
DSIPOP (remove long-running command) 211 Log Browse exit 47
DSIPOS (ECB post service) 213 message and DOM receive exit 23, 45
DSIPRS (parsing service) 214 RUNCMD exit 48
DSIPSS (presentation service) 216 SAW exit 48
DSIPUSH (establish long-running command) 223 system log 242
DSIQOS (query operator validity and status) 228 MVTAIDFT field defaults 141
DSIQRS (query resource service) 229
DSIRDS (resource definition service) 232
DSIRXEBS (get an EVALBLOK) 232
DSISRCMV (searching, subvector/subfield) 233
N
named storage 20, 223
DSISYS (operating system indicator) 235
NetView
DSITECBS (manage a dynamic ECB list for DSTs) 235
buffer structure 9
DSIVARS (variable service) 237
log (DSILOGDS) control block 138
DSIWAT (ECB wait service) 240
sequential log 242
DSIWCS (write console service) 242
tasks
DSIWLS (write log service) 242
DST (data service task) 4
DSIZCSMS (CNM data service) 245
HCT (hardcopy task) 4
DSIZVSMS (VSAM data service) 249
MNT (main task) 3
DUIFSMTE (display status table entry) 294
NNT (NetView-NetView task) 3
overview of macros 155
OPT (optional task) 4
main vector table (DSIMVT) control block 138
OST (operator station task) 3
manage a dynamic ECB list for DSTs (DSITECBS) macro 235
PPT (primary program operator interface task) 4
management service
TRACE facility 1
DSI6REGS macro 251
network log 242
passing, automation table 21
network service request 245
post-automation table exit 23, 45
NNT (NetView-NetView task) 3
using MS transport 20
NORMAL priority 206
manuals
notation
see publications xi
environment variables xvii
MAXABEND definition statement 139
path names xvii
MDS-MU (multiple-domain support-message unit) 51
typeface xvii
MEM keyword 80
numeric code point translation 21
message
NVCLOSE automation table condition item 139
authorized receiver 28
automation 27, 28
buffer 38
buffer contents 84 O
build service (DSIMBS) macro 196 OAN (origin application name) 189, 264
Index 305
samples (continued) TASK statement 80
CNMSMF3E 275 task vector block (DSITVB) control block
CNMSMF3F 275 description 147
DSICTMOD (CNMS0055) 275 fields 147
DSIEX18 (CNMS4298) 276 use
DSIEX19 (CNMS4307) 276 attaching the OPT subtask 81
DSIEX21 276 intertask communication 147
DSIRXPRM (CNMSJM11) 276 template
DSIUSR00 (CNMS4281) 277 command procedure processor 76
OPERID (CNMS4295) 277 optional task 274
overview 271 terminal input, simulating 16
sequential logging 14 Tivoli
table of assembler 271 training, technical xv
SAW exit 48 user groups xv
scope of command 19 Tivoli Software Information Center xiv
screen identifier 74 TPEND exit, VTAM 86
screen mode TRACE facility 1
full-screen 12 training, Tivoli technical xv
standard 12 translating code points 163
title-line 12 TRAP condition 28
SDDNM keyword 91 TVBINXIT bit
searching, subvector or subfield (DSISRCMV) macro 233 coding restrictions 5
security processing 5
command authorization checking 19 TVBMEMNM field 82
DSICES macro 160 typeface conventions xvii
DSIKVS macro 190
send a message unit (DSI6SNDS) macro 294
sending high-performance message unit (DSIHSNDS)
macro 183
U
unattended operator task 61
sending message unit (DSI6SNDS) macro 258
unbalanced quote 215
sequential logging 14
UNSOL keyword 89
service xv
unsolicited CNM data interface 89
service management connect xv
user fields 103
service routine vector list (DSISVL) control block 144
user groups
service routine, called 267
NetView, on Yahoo xvi
service work block (DSISWB) control block
Tivoli xv
description 144
user memory protection key 4
fields 144
user subtasks, types
how to obtain and release 15
DST (data service task) 79
obtaining, releasing 9
OPT (optional task) 79
SMC xv
user-defined command processor 84
SMF type 39 records 275
user-defined service 96
solicited CNM data interface 90
user-written
source object
function 97
format 114
programming
use 115
coding guidelines 4
SPASS keyword 91
testing 1
STIFLE message 72
subtask 79
STIMER macro 6
USERASIS return code 26, 30, 88
storage service 10
USERDROP return code
store sysmod level in csect (DSIID) 190
deleting message and MSU 26
subtask organization 79
initializing a DST 88
supervisor state 4
installation exit 23
support xv
installation exit output 26
symbolic substitution 140
operator input 30
system command entry (DSISCE) control block 143
USEREVNT return code 53
system command table (DSISCT) control block 144
USEREXLG return code 53
system console
USERHCL return code 34
input from 23, 37
USERHCLR return code 34
message display 14, 36
USERLOG return code 34
output to 23, 24, 36
USERLOGR return code 34
USERMSG buffer 25
USERSWAP return code 26, 30, 88
T
task command considerations 61
task information block (DSITIB) control block 145
task priority, relative 81, 87
W
waiting completion, events 240
work block service 9
write console service (DSIWCS) macro 242
write log service (DSIWLS) macro 242
X
XITBN installation exit 23, 50
XITBO installation exit 23, 50
XITCI installation exit 23, 51
XITCO installation exit 23, 54
XITDI
installation exit 23, 54
keyword 87
XITVI
installation exit 55
keyword 91
XITVN
example 55
installation exit 55
keyword 91
XITVO
installation exit 55
keyword 91
XITXL
installation exit 56
Y
Yahoo user group, NetView xvi
Index 307
308 Programming: Assembler
IBM®
Printed in USA
SC27-2858-03