• Abstract for MVS Programming: Authorized Assembler Services Guide
    • Summary of changes
      • Summary of changes for z/OS Version 2 Release 1 (V2R1) as updated February 2015
      • Summary of changes in z/OS Version 2 Release 1 (V2R1), as updated December 2013
      • z/OS Version 2 Release 1 summary of changes
  • Introduction
  • Subtask creation and control
    • Creating a new task (ATTACH or ATTACHX macro)
    • Ensuring that a process completes (STATUS macro)
    • Communicating with a program (EXTRACT, QEDIT)
      • Providing an EXTRACT answer area
  • Program management
    • Residency and addressing mode of programs
      • Placement of modules in storage
      • Addressing mode
    • Specifying where the module is to be loaded (LOAD macro)
    • Synchronous exits (SYNCH or SYNCHX macro)
    • Using checkpoint/restart
    • Using re-entrant modules
    • Using LLACOPY to refresh LLA directories
    • Changing the LNKLST concatenation
      • Changing the current LNKLST set
    • Monitoring dynamic LPA processing
      • Listing contents of dynamic LPA with CSVDLPAU
        • Invoking CSVDLPAU
          • CSVD002W
  • Serialization
    • Choosing a serialization service
    • Providing ENQ resource information on DISPLAY GRS command
    • Locking
      • Categories of locks
      • Types of locks
        • Examples of lock types
      • Locking hierarchy
      • CML lock considerations
      • Obtaining, releasing, and testing locks (SETLOCK)
        • Disabled/enabled state for obtain
        • Disabled/enabled state for release
      • Suspend lock instrumentation data
    • Using the must-complete function (ENQ/DEQ)
      • Characteristics of the must-complete function
      • Programming notes
    • Shared direct access storage devices (shared DASD)
      • Volume/device status
      • Volume handling
      • Macros used with shared DASD (RESERVE, EXTRACT, GETDSAB)
        • Releasing devices
        • Preventing interlocks
        • Timing contention
        • Volume assignment
        • Program libraries
        • Using different serialization techniques for the same volume
        • Finding the UCB address for the RESERVE macro
          • Using the GETDSAB macro to find the UCB address
            • Procedures
          • Using the IEFDDSRV macro to find the UCB address
            • Procedures
          • Using the EXTRACT macro to find the UCB address
            • Procedures
          • Using the DEB and the DCB to find the UCB address
            • Procedures
          • RESDEQ subroutine using IEFDDSRV
    • Serializing parallel tasks (WAIT and POST)
      • Asynchronous cross memory POST
        • When LINKAGE=SYSTEM is not specified
        • When LINKAGE=SYSTEM is specified
      • Synchronous cross memory post
      • Bypassing the POST routine
      • Waiting for event completion (EVENTS)
    • Writing POST exit routines
      • Identifying and deleting exit routines
      • Initializing extended ECBs and ECB extensions
      • POST interface with exit routines
      • Re-entry to POST from a POST exit
    • Branch entry to the POST service routine
    • Branch entry to the WAIT service routine
    • Serializing RB processing
      • Suspending an RB until an event completes (SUSPEND)
        • Scenario 1:
        • Scenario 2:
        • Considerations when suspending an RB
          • General considerations
          • RB=PREVIOUS considerations
          • RB=CURRENT considerations
      • Using the CALLDISP macro
      • Resuming execution of a suspended RB
    • Synchronizing unit of work (tasks or SRBs)
      • Pause elements and pause element tokens
      • Using the services
      • PE ownership and cleanup
    • Global resource serialization latch manager
      • Overview
      • How to use the callable services
    • Planning to use the latch manager callable services
      • Including a latch manager interface definition file (IDF)
      • Loading the linkage assist routines
      • Providing recovery for the latch manager
        • Steps for providing recovery for the latch manager
        • FRR tasks
          • Program mainline example
        • FRR example
    • Guide to the latch manager callable services
      • Creating a latch set (ISGLCRT and ISGLCR64 services)
        • Specifying the number of latches in a latch set
        • Identifying latch sets
      • Specifying a latch's identity or usage
      • Obtaining a latch (ISGLOBT and ISGLOB64 services)
        • Specifying the number of a requested latch
        • Specifying an obtain option
        • Summary of results of calls to Latch_Obtain
      • Releasing a latch (ISGLREL and ISGRE64 services)
        • Specifying a release option
        • Summary of results of calls to Latch_Release
      • Purging one or more latches (ISGLPRG and ISGLPR64 services)
      • Purging one or more latches in a group of latch sets for a group of requestors (ISGLPBA and ISGLPB64 services)
        • Purging groups of latch sets
  • Reporting system characteristics
    • Collecting information about resources and their requestors (ISGQUERY and GQSCAN macros)
      • How GQSCAN returns resource information
        • How area size determines the information GQSCAN returns
        • How scope and token values determine the information GQSCAN returns
      • How global resource serialization determines the scope of an ENQ or RESERVE request
    • Using the SRM reporting interface to measure subsystem activity
    • Obtaining dispatchability data about address spaces (IEAMRMF3 macro)
  • Tracing applications using component trace
    • Planning an application trace
      • Trace activities
      • Executable macros for component tracing
      • Operator commands for component tracing
      • IPCS subcommands for component tracing
      • Exit routines for component tracing
      • Data areas and mapping macros for component tracing
      • Parmlib members for component tracing
      • When to trace
      • Where and what to trace
      • Creating trace buffers
      • Using multiple traces
      • Setting up user-defined options
      • Starting, stopping and changing the trace
      • Using parmlib members
      • Externalizing trace data in a dump
      • Externalizing trace data through the external writer
    • Coding macros for application traces
      • Using the CTRACE macro to define the application to component trace
      • Using CTRACECS to manage trace buffer status
      • Deleting the application from component trace
    • Coding a start/stop exit routine
      • Exit routine environment
      • Exit routine processing
      • Programming considerations
      • Start/stop exit routine communications
      • Entry specifications
      • Return specifications
    • Coding a display trace exit routine
      • Exit routine environment
      • Exit routine processing
      • Programming considerations
      • Exit routine communications
      • Entry specifications
      • Return code specifications
    • Creating trace entries
      • Understanding the fields in a CTE
      • Organizing variable data in CTEs
  • Communication
    • Interprocessor communication
    • Writing and Deleting Messages (WTO, WTOR, and DOM Macros)
      • Routing the Message
      • Altering Message Text
      • Writing a Multiple-Line Message
      • Embedding Label Lines in a Multiple-Line Message
      • Issuing a Message and Loading a Wait State (WTO and LOADWAIT Macros)
      • Using the Wait State Macro (LOADWAIT)
      • Non-restartable and Restartable Wait States
      • Invoking the LOADWAIT Macro
        • Example with All Wait State Information Known at Assembly Time
        • Example with Wait State Information Not Known at Assembly Time
      • Deleting Messages Already Written
      • Writing to the System Log
    • Issuing an internal START or REPLY command (MGCR)
    • Issuing operator commands from a program (MGCRE macro)
    • Issuing a command response message
      • Rules for a command response WTO
      • Old code conversion
      • Where to get the information
        • CIB control block (mapped by IEZCIB)
        • CSCB control block (mapped by IEECHAIN)
        • CMDX control block (mapped by IEZVX101)
        • SSCM control block (mapped by IEFSSCM)
      • Assembler example with CIB control block
      • Assembler example with CMDX control block, multi-line WTO
    • Controlling command flooding (IEECMDS macro)
    • Routing commands in a sysplex (CPF macro)
      • Assigning a prefix
      • Persistence of the prefix
    • What is an extended MCS console?
      • Activating an extended MCS console
        • Specifying console attributes
        • Storing messages directed to an extended MCS console
        • Controlling message traffic directed to an extended MCS console
      • Receiving messages and command responses, and issuing commands
        • Receiving messages and command responses
          • What is the message data block (MDB)
        • Receiving the hardcopy message set
        • Issuing commands
        • What to do if message queuing stops
      • Deactivating extended MCS consoles
        • Switching to another console
      • Removing extended MCS consoles
      • Example of managing an extended MCS console session
  • Listening for system events
    • Establishing a listen request
      • Qualifying events
        • QUAL example
      • nn filtering events
    • Coding the listener user exit routine
      • Non-SRBEXIT routine
      • SRBEXIT routine
    • Passing parameters to a listener user exit routine
    • Ending the listener user exit routine
    • ENF event codes and meanings
    • ENF sample programs
      • SMFLSTEN - Sample ENF listener
        • Issue listen request without qualifier
        • Issue listen request with QUAL=ENF37Q00
        • Sample ENFREQ DELETE request
        • Module declarations
        • SMFLSTAL - Sample ENF listener user exit routine
        • Module declarations
        • SMFLST00 - Sample ENF listener user exit routine
    • Listening for global resource serialization-related system events
      • Monitoring contention changes
        • Listening for RNL change data
        • Listening for other global resource serialization events
  • Using a service request block (SRB)
    • What is an SRB?
    • Why would you use an SRB?
    • Scheduling and managing SRBs
    • Specifying the addressing environment of the SRB routine
      • Using the ENV parameter on IEAMSCHD
      • Using the MODE parameter on SCHEDULE
    • Characteristics and restrictions of SRB routines
      • Implications of running in SRB mode
      • Environment of the SRB routine at entry
    • Scheduling an SRB (IEAMSCHD or SCHEDULE macro)
      • Scheduling an SRB using IEAMSCHD
      • Scheduling an SRB using SCHEDULE
        • Initializing the SRB
    • Purging an SRB (PURGEDQ macro)
      • Identifying the SRB to be purged
      • The resource manager termination routine (RMTR)
      • Scenario of scheduling and purging an SRB
        • Example 1
        • Example 2
    • Serializing SRB processing
      • Suspending an SRB until an event completes (SUSPEND macro)
        • Suspend exit routine
      • Resuming or purging a suspended SRB (RESUME macro)
      • Scenario of suspending and resuming an SRB
      • Recovery responsibilities for a suspended SRB
    • Terminating a preemptable SRB
    • Calling an SRB to run synchronously
    • Transferring control for SRB processing (TCTL macro)
  • Virtual storage management
    • Allocating and freeing virtual storage (GETMAIN, FREEMAIN and STORAGE macros)
      • Comparison of GETMAIN/FREEMAIN macros with the STORAGE macro
      • Specifying branch entry to GETMAIN and FREEMAIN services
      • Obtaining storage in another address space
      • Obtaining and using disabled reference (DREF) storage
    • Using cell pool services (CPOOL macro)
    • Selecting the right subpool for your virtual storage request
      • Program authorization
        • Selecting private or common storage
        • Managing private storage allocation
        • Selecting fetch protected or non-fetch protected storage
        • Selecting the storage key
        • Selecting pageable, DREF, or fixed storage
        • Selecting storage persistence
          • Selecting central storage backing
          • Additional considerations
          • Making the final selection
          • The subpool table
    • Tracking virtual storage allocation (CPOOL BUILD, GETMAIN, and STORAGE OBTAIN macros)
    • Obtaining information about the allocation of virtual storage (VSMLIST)
      • Using the VSMLIST work area
        • Allocated storage information
        • Free space
        • Unallocated storage information
    • Using IARQD — The page status interface routine
      • Decide which entry point you want to use
      • Obtain storage and load register 1
        • IARQDUMP
        • IARQDSPD
        • The delimiter page
      • Use NUCLKUP to find the address of the entry point you want to use
        • Example
        • Input register information
      • Invoke the entry point
  • Accessing the scheduler work area
    • Using the IEFQMREQ and the SWAREQ macros
      • The SWAREQ macro
      • How to invoke SWAREQ
        • SWAREQ summary
        • Example of using SWAREQ
        • Return codes and reason codes from SWAREQ
          • UNAUTH=YES
          • UNAUTH=NO
      • The IEFQMREQ macro
        • How to invoke IEFQMREQ
        • Example of using IEFQMREQ
        • Return codes and reason codes from IEFQMREQ
  • The virtual lookaside facility (VLF)
    • Deciding when to use VLF
    • Planning to use VLF
      • Data objects and classes
        • Private data sets
        • Cross-system sharing
        • When VLF notification is automatic
        • When VLF notification is not automatic
      • Data integrity
      • Recovery
    • Using the VLF macros
      • Defining a class of VLF objects
      • Identifying an end user to VLF
      • Retrieving a VLF object
      • Creating a VLF object
        • Using REPLACE
      • Notifying VLF of a change
      • Removing a VLF end user
      • Purging a VLF class
      • Modifying VLF
  • Data-in-virtual
    • When to use data-in-virtual
      • Factors affecting performance
      • Creating a linear data set
    • Using the services of data-in-virtual
      • Identify
      • Access
      • Map
      • Save, Savelist, and Reset
      • Unmap
      • Unaccess
      • Unidentify
    • The IDENTIFY service
    • The ACCESS service
    • The MAP service
    • The SAVE service
    • The SAVELIST service
    • The RESET service
      • Effect of RETAIN mode on RESET
    • The UNACCESS and UNIDENTIFY services
    • Sharing data in an object
    • DIV macro programming examples
      • Executing an application
      • Processing a data-in-virtual object
  • Sharing application data (name/token callable services)
    • Levels for name/token pairs
      • Determining what your program can do with name/token pairs
    • Checking authorization when retrieving a token
    • Deciding what name/token level you need
      • Primary-level name/token pair
      • System-level name/token pair
    • Owning and deleting name/token pairs
      • Example of using the name/token services
  • Processor storage management
    • Fixing/freeing virtual storage contents
    • Protecting a range of virtual storage pages
    • PGFIX/PGFREE completion considerations
    • Input to page services
      • Virtual subarea list (VSL)
      • Page service list (PSL)
      • Short page service list (SSL)
    • Branch entry to page services
      • Cross memory mode
      • Non-cross memory mode
  • Sharing data in virtual storage (IARVSERV macro)
    • Understanding the concepts of sharing data with IARVSERV
    • Storage you can use with IARVSERV
    • Obtaining storage for the source and target
    • Defining storage for sharing data and access
    • Changing storage access
    • How to share and unshare data
    • Accessing data in a sharing group
    • Example of sharing storage with IARVSERV
    • Use with data-in-virtual (DIV macro)
    • Use with page services (PGSER macro)
    • Diagnosing problems with shared data
    • Converting a central to virtual storage address (IARR2V macro)
  • The nucleus
    • Linking to routines in the DAT-OFF nucleus (DATOFF)
      • Using system provided DAT-OFF routines (DATOFF)
        • INDMVCL0 and INDMVCL64 - Move character long
        • INDMVCLK and INDMVCL64 - Move character long in user key
        • INDXC0 and INDXC64 - Exclusive OR
        • INDCDS and INDCDS64 - Compare double and swap
      • Writing user DAT-OFF routines
      • Placing user DAT-OFF routines in the DAT-OFF nucleus
    • Obtaining information about CSECTs in the DAT-ON nucleus (NUCLKUP)
    • Customizing the nucleus region
      • The NMLDEF macro
      • Removing existing routines from IEANUC0x
  • Providing recovery
    • Understanding general recovery concepts
      • Deciding whether to provide recovery
      • Understanding errors in MVS
      • Understanding recovery routine states
      • Understanding the various routines in a recovery environment
        • Mainline routine
        • Recovery routine
        • Retry routine
        • Resource manager
      • Choosing the appropriate recovery routine
        • Choosing an ESTAE-type recovery routine
        • Choosing an FRR
        • Floating point implications
        • Summary of recovery routine states
      • Understanding recovery routine options
      • Understanding how routines in a recovery environment interact
    • Writing recovery routines
      • Understanding what recovery routines do
        • Saving the return address to the system
        • Checking for the SDWA
        • Establishing addressability to the parameter area
        • Checking important fields in the SDWA
        • Checking the contents of the parameter area
        • Saving serviceability data
        • Recording in the Logrec data set
        • Requesting a dump
        • Correcting or minimizing the error
        • Deciding to retry or percolate
          • Recovery routines that retry
          • What the retry routine does
          • Recovery routines that percolate
      • Understanding the means of communication
        • Setting up, passing, and accessing the parameter area
          • Deciding what to include in the parameter area
          • Passing the parameter area
          • Accessing the parameter area
        • Using the SDWA
          • Updating the SDWA
          • Recording the SDWA in the logrec data set
          • Using the SETRP macro to update the SDWA
          • Symptom data required in the SDWA for dump suppression
          • Important fields in the SDWA
      • Special considerations for ESTAE-type recovery routines
        • RB considerations
        • Linkage stack considerations
          • Recovery routine
          • Retry routine
          • Deactivating an ESTAE-type recovery routine
        • Outstanding I/Os at the time of failure
        • Additional considerations specific to ESTAE-type recovery routines
        • Using ARRs
      • Special considerations for FRRs
    • Understanding the recovery environment
      • Register contents
        • Register contents on entry to a recovery routine
        • Register contents on return from a recovery routine
        • Register contents on entry to a retry routine
          • Retry from an ESTAE-type recovery routine
          • Retry from an FRR
      • Other environmental factors in recovery
        • Environment on entry to an ESTAE-type recovery routine
          • Authorization
          • SDWA storage key
          • Dispatchable unit mode
          • Cross memory mode
          • AMODE
          • ASC mode
          • Interrupt status
          • DU-AL
          • Locks
          • Program mask
          • Condition of the linkage stack
          • AX
          • EAX
          • Restricted environments
        • Environment on entry to a retry routine from an ESTAE-type recovery routine
          • Authorization
          • SDWA storage key
          • Dispatchable unit mode
          • Cross memory mode
          • AMODE
          • ASC mode
          • Interrupt status
          • DU-AL
          • Locks
          • Program mask
          • Condition of the linkage stack
          • AX
          • EAX
        • Summary of environment on entry to an ESTAE-type recovery routine and its retry routine
        • Environment on entry to an FRR
          • Authorization
          • SDWA storage key
          • Dispatchable unit mode
          • Cross memory mode
          • AMODE
          • ASC mode
          • Interrupt status
          • DU-AL
          • Locks
          • Program mask
          • Condition of the linkage stack
          • AX
          • EAX
          • Summary of environment on entry to an FRR
          • Restricted environments
        • Environment on entry to a retry routine from an FRR
          • Authorization
          • SDWA storage key
          • Dispatchable unit mode
          • Cross memory mode
          • AMODE
          • ASC mode
          • Interrupt status
          • DU-AL
          • Locks
          • Program mask
          • Condition of the linkage stack
          • AX
          • EAX
        • Linkage stack at time of retry
    • Understanding recovery through a coded example
    • Understanding advanced recovery topics
      • Providing recovery with minimal processor overhead (FESTAE macro)
      • Invoking RTM
        • Using the CALLRTM macro
          • TYPE=ABTERM
          • TYPE=MEMTERM
          • TYPE=SRBTERM
        • Using the ABEND macro
      • Providing multiple recovery routines
        • Percolation for the same unit of work
        • SRB-to-task percolation
      • Providing recovery for recovery routines
      • Providing recovery for multitasking programs
      • Using resource managers
        • Resource manager execution environment
          • Environment for ROUTINE=(BRANCH,routine)
          • Environment for ROUTINE=(LINK,routine)
          • Environment for ROUTINE=(PC,routine)
        • Installation-written resource managers
        • Adding an installation-written resource manager
          • Dynamically
          • At IPL
        • The resource manager parameter list
        • Register use
        • Processing sequence
    • Using STAE/STAI routines
  • Processing program interruptions (SPIE, ESPIE)
    • Interruption types
  • Dumping virtual storage (SDUMPX, SDUMP, and IEATDUMP macros)
    • SVC dumps
      • Deciding when to request an SVC dump
      • Understanding the type of SVC dump that MVS produces
      • Coding parameters that produce a synchronous dump
      • Designing a program to handle a synchronous dump
      • Coding parameters that produce a scheduled dump
      • Designing a program to handle a scheduled dump
      • Synchronizing your program through an ECB or SRB
      • Designing your program to run asynchronously with dump processing
      • Identifying the data set to contain the dump
      • Defining the contents of the dump
      • Identifying the address spaces or data spaces to be dumped
      • Customizing the contents of the SVC dump
      • Requesting the summary dump
      • Suppressing SVC dumps that duplicate previous SVC dumps
      • Providing symptom information through the SDUMPX macro
      • Requesting dumps on other systems in a sysplex
      • Using dynamic exits to control dumps in a sysplex
      • IEASDUMP.QUERY dynamic exit
        • Installing IEASDUMP.QUERY
        • IEASDUMP.QUERY dynamic exit environment
        • IEASDUMP.QUERY dynamic exit recovery
        • IEASDUMP.QUERY dynamic exit processing
        • Registers at entry to IEASDUMP.QUERY dynamic exit
        • Parameter area at entry to IEASDUMP.QUERY dynamic exit
        • Registers at exit from IEASDUMP.QUERY dynamic exit
        • Disassociating IEASDUMP.QUERY
      • IEASDUMP.GLOBAL and IEASDUMP.LOCAL dynamic exits
        • Installing IEASDUMP.GLOBAL and IEASDUMP.LOCAL
        • IEASDUMP.GLOBAL and IEASDUMP.LOCAL dynamic exit environment
        • IEASDUMP.GLOBAL and IEASDUMP.LOCAL dynamic exit
        • IEASDUMP.GLOBAL and IEASDUMP.LOCAL dynamic exit processing
        • Registers at entry to IEASDUMP.GLOBAL or IEASDUMP.LOCAL dynamic exit
        • Parameter area at entry to IEASDUMP.GLOBAL or IEASDUMP.LOCAL dynamic exit
        • Registers at exit from IEASDUMP.GLOBAL or IEASDUMP.LOCAL dynamic exit
        • Disassociating IEASDUMP.GLOBAL and IEASDUMP.LOCAL
      • IEASDUMP.SERVER dynamic exit
        • Installing IEASDUMP.SERVER
        • IEASDUMP.SERVER dynamic exit environment
        • IEASDUMP.SERVER dynamic exit recovery
        • IEASDUMP.SERVER dynamic exit processing
        • Registers at entry to IEASDUMP.SERVER dynamic exit
        • Parameter area at entry to IEASDUMP.SERVER dynamic exit
        • Registers at exit from IEASDUMP.SERVER dynamic exit
        • Disassociating IEASDUMP.SERVER
    • Transaction dumps
      • Deciding when to request a transaction dump
      • Understanding the type of transaction dump that MVS produces
      • Identifying the data set to contain the dump
      • Defining the contents of the dump
      • Customizing the contents of the transaction dump
      • Requesting the summary dump
      • Suppressing transaction dumps that duplicate previous transaction dumps
      • Providing symptom information through the IEATDUMP macro
      • Requesting dumps of other systems
  • Protecting the system
    • System integrity
      • Documentation on system integrity
      • Installation responsibility
      • Elimination of potential integrity exposures
        • User-supplied addresses for user storage areas
        • User-supplied addresses for protected control blocks
        • Resource identification
        • SVC routines calling SVC routines
        • Control program and user data accessibility
        • Fetch protection provided for the PSA
        • Control program extensions
    • Authorized programs
    • Using APF to restrict access to system functions
      • Guidelines for using APF
      • APF-authorized libraries
      • APF-authorized library list
      • Requesting APF list services (CSVAPF macro)
      • Restricting the use of SVC routines
      • Restricting load module access
      • Assigning APF authorization to a load module
      • Overriding an authorization code - SETCODE statement
      • Authorization results under various conditions
    • Resource Access Control Facility (RACF)
    • System Authorization Facility (SAF)
      • MVS router
        • MVS router exit
      • Interface to the MVS router (RACROUTE)
        • Defining a resource (RACROUTE REQUEST=DEFINE)
        • Identifying a user (RACROUTE REQUEST=VERIFY and REQUEST=VERIFYX)
          • RACROUTE REQUEST=VERIFY
          • RACROUTE REQUEST=VERIFYX
        • Checking resource authorization (RACROUTE REQUEST=AUTH and REQUEST=FASTAUTH)
          • RACROUTE REQUEST=AUTH
          • RACROUTE REQUEST=FASTAUTH
        • Retrieving and encoding data (RACROUTE REQUEST=EXTRACT)
        • Building in-storage profiles (RACROUTE REQUEST=LIST)
        • Checking auditing options (RACROUTE REQUEST=AUDIT)
        • Checking user authority (RACROUTE REQUEST=DIRAUTH)
      • SAF interface to an external security product
        • Requirements for the external security product router
        • Input parameters to the external security product router
        • Return and reason codes from the external security product router
        • Programming considerations
    • Using the command authorization service
      • Command resource names
        • Syntax
        • Examples
    • Changing system status (MODESET)
      • Generating an SVC
      • Generating inline code
  • Exit routines
    • Using asynchronous exit routines
      • Using the SCHEDIRB macro to initialize and schedule an IRB
      • Using the SCHEDIRB macro to schedule an IRB
      • Using the CIRB macro to initialize an IRB
      • Using the SCHEDXIT macro to schedule an IRB
      • System processing to run an asynchronous exit
        • Linkage stack considerations for asynchronous exit routines
    • Establishing a timer disabled interrupt exit
      • DIE characteristics
        • Exit from the DIE routine
        • DIE execution
      • Timer queue element control
        • Obtaining and freeing the TQE
        • Serializing the use of each TQE
        • Clock failure
        • Interval cancellation
    • Using dynamic exits services
      • CSVDYNEX terminology
      • Vector Register protocol for user exits
      • Defining an exit
        • FASTPATH processing
        • Removing the definition of an exit
      • Calling an exit routine or routines
        • Floating point protocol for user exits
        • Ensuring that exit routines exist at the CALL
        • Returning information from multiple exit routines
          • Merging return codes
        • Recovery for the CALL request
          • Recovery for exit routines with FASTPATH processing
      • Associating an exit routine with an exit
        • Ensuring that exit routines exist at the time of the association
        • Deleting an exit routine from an exit
  • User-written SVC routines
    • Writing SVC routines
      • Type 6 SVC routines
      • Non-preemptable SVC routines
      • Programming conventions for SVC routines
    • Inserting SVC routines into the control program
      • Standard SVC routines
        • Example of adding user SVC routines to system libraries
        • Modifying the SVC table at execution time (SVCUPDTE macro)
        • Intercepting an SVC routine
      • Extended SVC routines
    • Subsystem SVC screening
  • Accessing unit control blocks (UCBs)
    • Scanning for UCBs
    • Obtaining UCB addresses
      • UCB Common Segment
      • UCB Common Extension
      • UCB Prefix Extension
      • UCB Prefix Area
      • UCB details
    • Ensuring that UCBs are not deleted
      • Pinning and unpinning UCBs
      • When pinning is required
        • Example: Pinning an unallocated and offline device
        • Example: Passing an UCB address between asynchronously running programs
      • When pinning is not required
        • Example: Allocating a device
    • Requesting notification of I/O configuration changes
      • Using the CONFCHG macro
      • Coding a configuration change user exit routine
        • Exit routine environment
        • Programming considerations
        • Entry specifications
          • Registers at entry
          • Parameter list contents
        • Return specifications
        • Exit recovery
        • Exit routine processing
          • Example
      • Coded example: CONFCHG macro invocation of configuration change user exit
    • Detecting I/O configuration changes
    • Retrieving the current MIH time interval
    • Retrieving information about I/O hardware on an I/O path
      • Length of the CDR area
      • How IOSCDR retrieves the CDR
      • Time that IOSCDR performs I/O
    • Validating I/O paths
    • Obtaining device information for an allocation request
    • Configuring a channel path online or offline
    • Obtaining UCB information (general methods)
      • Obtaining UCB addresses for a specified device number
      • Scanning UCBs
      • Examples: Using the UCB macros
        • Example 1
        • Example 2
      • Determining if the UCB macros (general methods) are available
        • Procedure for pre-MVS/SP Version 4 libraries
        • Procedure for MVS/SP Version 4 and above libraries
    • Obtaining UCB information (limited method)
      • The UCB scan service
      • Invoking the UCB scan service
        • Input to the UCB scan service
        • Limiting the UCB scan
        • Output from the UCB scan service
        • Example: Using the UCB scan service
      • Obtaining the subchannel number for a unit control block (UCB)
    • Accessing above 16-megabyte UCBs
  • Dynamic allocation
    • An allocation overview
      • Choosing the type of allocation for your program
        • Characteristics of job step allocation
        • Characteristics of dynamic allocation
      • When to avoid using dynamic allocation
      • Programming considerations for using the DYNALLOC macro
      • Selecting the type of allocation based on program requirements
    • Dynamic allocation functions
      • Using dynamic allocation functions in either a batch or interactive environment
      • Using dsname or pathname allocation
        • JCL DD statement facilities not supported by dynamic allocation
        • Dynamic allocation facilities without JCL equivalents
        • Checking for conflicts with your existing allocation environment
        • Using an existing allocation to fulfill a dsname allocation request
          • Characteristics required in your request
          • Characteristics prohibited in your request
          • Characteristics required in the existing allocation
          • System selection from multiple matching allocations
          • System creation of new ddname for existing allocation
        • Changing the parameters of an existing allocation
        • Using a new allocation to fulfill a dsname or pathname allocation request
        • Considerations when requesting dsname or pathname allocation
          • Allowing the system to generate a ddname
          • Specifying a password
          • Allocating a data set with a status of MOD
          • Allocating a dummy z/OS UNIX file
          • Determining the status of a z/OS UNIX file
          • Cataloging a data set
          • Requesting a data set that is in use
          • Retrieving information from allocation
          • Retrieving data set organization information from allocation
          • Access methods that are not available with dynamic allocation
          • Requesting an allocated but unavailable data set
          • Allocating a GDG data set
          • Retrieving volume information
          • Exceeding the control limit
      • Deallocating resources
        • Deallocating resources by dsname or pathname
        • Deallocating resources by ddname
        • Deallocating concatenated groups
        • Changing parameters at dynamic unallocation
      • Concatenating resources
        • Requesting the permanently concatenated attribute
      • Deconcatenating resources
      • Obtaining allocation environment information
      • Using dynamic allocation functions in an interactive environment
      • In-use attribute
        • Removing the in-use attribute by dsname or ddname
        • Removing the in-use attribute by task ID
      • Control limit
      • Permanently allocated attribute
      • Convertible attribute
      • Using ddname allocation
    • Installation options for DYNALLOC macro functions
      • Using default values
      • Mounting volumes and bringing devices online
      • Installation input validation routine for dynamic allocation
  • Requesting dynamic allocation functions
    • Building the SVC 99 parameter list
      • Coding a dynamic allocation request
      • Obtaining storage for the parameter list
        • Estimating the amount of storage for your request
        • Characteristics of storage for parameter list
          • Clearing the storage
        • Passing the address of the obtained storage to DYNALLOC
      • Mapping storage for the parameter list
      • Setting up the request block pointer
      • Setting up the request block
        • S99RB fields
          • Length (S99RBLN)
          • Verb code (S99VERB)
          • Flags (S99FLAG1)
          • Error code (S99ERROR)
          • Info code (S99INFO)
          • Text unit pointers' address (S99TXTPP)
          • Request block extension address (S99S99X)
          • Additional flags (S99FLAG2)
          • S99RBEND
        • Relationships among selected fields
      • Setting up the text units
        • Key (S99TUKEY)
          • Number (S99TUNUM)
          • Combination (S99TUENT)
          • Length (S99TULNG)
          • Parm (S99TUPAR)
        • Structure of the text units
          • Using special characters in text units
          • Using trailing blanks in text units
          • Order of text units
          • Independence of text unit key meaning across DYNALLOC functions
      • Setting up the text unit pointer list
        • Establishing addressability to the text unit pointer list
        • Filling in the text unit pointer list
        • Setting the end of list indicator
    • Processing messages and reason codes from dynamic allocation
      • Setting up the request block extension
        • S99RBX fields
          • Request block extension identifier (S99EID)
          • Version (S99EVER)
          • Processing options (S99EOPTS)
          • Message block subpool (S99ESUBP)
          • Storage key (S99EKEY)
          • Severity level (S99EMGSV)
          • Number of message blocks returned (S99ENMSG)
          • CPPL address (S99ECPPL)
          • Not an intended programming interface (S99ERCR)
          • Not an intended programming interface (S99ERCM)
          • Message processing reason code (S99ERCO)
          • Message block freeing reason code (S99ERCF)
          • PUTLINE/WTO macro return code (S99EWRC)
          • Message block chain address (S99EMSGP)
          • Information retrieval error code (S99EERR)
          • Information retrieval information code (S99EINFO)
          • SMS reason code (S99ERSN)
      • Processing messages from dynamic allocation
        • Sending dynamic allocation messages to the end user
        • Using the functions of the IEFDB476 program
          • Extracting messages (EMRETURN)
          • Sending messages (EMPUTLIN or EMWTP)
          • Freeing or retaining message blocks (EMKEEP)
        • Linking to the IEFDB476 program
        • Providing input to IEFDB476 through EMPARMS
          • Function flags (EMFUNCT)
          • Caller identification number (EMIDNUM)
          • Number of message blocks (EMNMSGBK)
          • (EMRSV0x) - Not an intended programming interface
          • Parameter list address (EMS99RBP)
          • Parameter list address (EMDAPLP)
          • Return code (EMRETCOD)
          • CPPL address (EMCPPLP)
          • Message buffer address (EMBUFP)
          • (EMRSV0y) - Not an intended programming interface
          • Parameter address (EMWTPCDP)
          • Not an intended programming interface
        • Using EMABUFFS to receive message information from the system
          • Length of message text (EMABUFLN)
          • Offset (EMABUFOF)
          • Message text (EMABUFTX)
          • Not an intended programming interface
        • Using EMBUFS to receive message information from the system
          • Length of the first message (EMBUFL1)
          • Offset (EMBUF01)
          • First message text (EMBUFT1)
          • Not an intended programming interface
          • Length of second message (EMBUFL2)
          • Offset (EMBUF02)
          • Second message text (EMBUFT2)
        • Interpreting return codes from IEFDB476
    • Interpreting DYNALLOC return codes
      • Interpreting information reason codes from DYNALLOC
      • Interpreting error reason codes from DYNALLOC
    • SVC 99 parameter list verb codes and text units, by function
      • Coding a dsname allocation text unit
      • JCL DD statement parameters and equivalent text units
      • Using system symbols in text units
      • Dsname allocation text units
        • Ddname specification - Key = '0001'
        • Dsname specification - Key = '0002'
        • Member name specification - Key = '0003'
        • Data set status specification - Key = '0004'
        • Data set normal disposition specification - Key = '0005'
        • Data set conditional disposition specification - Key = '0006'
        • Track space type (TRK) specification - Key = '0007'
        • Cylinder space type (CYL) specification - Key = '0008'
        • Block length specification - Key = '0009'
        • Primary space quantity specification - Key = '000A'
        • Secondary space quantity specification - Key = '000B'
        • Directory block specification - Key = '000C'
        • Unused space release (RLSE) specification - Key = '000D'
        • Format of allocated space specification - Key = '000E'
        • Whole cylinder allocation (ROUND) specification - Key = '000F'
        • Volume serial specification - Key = '0010'
        • Private volume specification - Key = '0011'
        • Volume sequence number specification - Key = '0012'
        • Volume count specification - Key = '0013'
        • Volume reference to a dsname specification - Key = '0014'
        • Device description specification - Key = '0015'
        • Device count specification - Key = '0016'
        • Parallel mount specification - Key = '0017'
        • SYSOUT specification - Key = '0018'
        • SYSOUT program name specification - Key = '0019'
        • SYSOUT form number specification - Key = '001A'
        • SYSOUT output limit specification - Key = '001B'
        • Unallocation at CLOSE specification - Key = '001C'
        • SYSOUT copies specification - Key = '001D'
        • Label type specification - Key = '001E'
        • Data set sequence number specification - Key = '001F'
        • Password protection specification - Key = '0020'
        • Input only or output only specification - Key = '0021'
        • Expiration date specification (short form) - Key = '0022'
        • Retention period specification - Key = '0023'
        • Dummy data set specification - Key = '0024'
        • Forms control buffer (FCB) image identification specification - Key = '0025'
        • Form alignment and image verification specification - Key = '0026'
        • QNAME specification - Key = '0027'
        • Terminal specification - Key = '0028'
        • Universal character set (UCS) specification - Key = '0029'
        • Fold mode specification - Key = '002A'
        • Character set image verification specification - Key = '002B'
        • DCB reference to a dsname specification - Key = '002C'
        • DCB reference to a ddname specification - Key = '002D'
        • SYSOUT remote work station specification - Key = '0058'
        • SYSOUT hold queue specification - Key = '0059'
        • Subsystem name request specification - Key = '005F'
        • Subsystem parameter specification - Key = '0060'
        • PROTECT specification - Key = '0061'
        • SYSOUT user ID specification - Key = '0063'
        • Burst specification - Key = '0064'
        • Character arrangement table specification - Key = '0065'
        • Copy groups specification - Key = '0066'
        • Flash forms overlay specification - Key = '0067'
        • Flash forms overlay count specification - Key = '0068'
        • Copy modification module specification - Key = '0069'
        • Copy module table reference specification - Key = '006A'
        • DEFER specification - Key = '006C'
        • EXPIRATION DATE specification (long form) - Key = '006D'
        • Override job affinity - Key = '0070'
        • CTOKEN return specification - Key = '0071'
        • SMSHONOR specification – Key = '0076'
        • Access specification - Key = '8001'
        • OUTPUT statement reference - Key = '8002'
        • CNTL specification - Key = '8003'
        • Storage class specification - Key = '8004'
        • Management class specification - Key = '8005'
        • Data class specification - Key = '8006'
        • Record organization specification - Key = '800B'
        • Key offset specification - Key = '800C'
        • Copy DD specification - Key = '800D'
        • Copy profile specification - Key = '800E'
        • Copy model specification - Key = '800F'
        • Average record specification - Key = '8010'
        • Data set type specification - Key = '8012'
        • Spin data set specification - Key = '8013'
        • Segment spin data set specification - Key = '8014'
        • z/OS UNIX file path specification - Key = '8017'
        • z/OS UNIX file options - Key = '8018'
        • z/OS UNIX file access attributes - Key = '8019'
        • z/OS UNIX file normal disposition specification - Key = '801A'
        • z/OS UNIX file abnormal disposition specification - Key = '801B'
        • Record-level sharing specification - Key = '801C'
        • Organization of a z/OS UNIX file - Key = '801D'
        • VSAM RLS log stream specification - Key = '801F'
        • CCSID specification - Key = '8020'
        • Block size limit specification - Key = '8022'
        • Key label 1 specification - Key = '8023'
        • Key label 2 specification - Key = '8024'
        • Key encode 1 specification - Key = '8025'
        • Key encode 2 specification - Key = '8026'
        • Extended attributes specification - Key = '8028'
        • FREEVOL specification - Key = '8029'
        • SPIN interval for the allocated SYSOUT data set - Key = '802A'
        • SYMLIST on a DD statement - Key = '802B'
        • DSNTYPE version - Key = '802C'
        • Maximum PDSE Generation - Key = '802D'
        • GDGORDER specification – Key = '802E'
      • JCL DD statement DCB subparameters and equivalent text units
      • DCB attribute text units
        • BFALN specification - Key = '002E'
        • BFTEK specification - Key = '002F'
        • BLKSIZE specification - Key = '0030'
        • BUFIN specification - Key = '0031'
        • BUFL specification - Key = '0032'
        • BUFMAX specification - Key = '0033'
        • BUFNO specification - Key = '0034'
        • BUFFOFF specification - Key = '0035'
        • BUFOUT specification - Key = '0036'
        • BUFRQ specification - Key = '0037'
        • BUFSZ specification - Key = '0038'
        • CODE specification - Key = '0039'
        • CPRI specification - Key = '003A'
        • DEN specification - Key = '003B'
        • DSORG specifications - Key = '003C'
        • EROPT specification - Key = '003D'
        • GNCP specification - Key = '003E'
        • INTVL specification - Key = '003F'
        • KEYLEN specification - Key = '0040'
        • LIMCT specification - Key = '0041'
        • LRECL specification - Key = '0042'
        • MODE specification - Key = '0043'
        • NCP specification - Key = '0044'
        • OPTCD specification - Key = '0045'
        • Receiving PCI specification - Key = '0046'
        • Sending PCI specification - Key = '0047'
        • PRTSP specification - Key = '0048'
        • RECFM specification - Key = '0049'
        • First buffer reserve specification - Key = '004A'
        • Secondary buffer reserve specification - Key = '004B'
        • SOWA specification - Key = '004C'
        • STACK specification - Key = '004D'
        • THRESH specification - Key = '004E'
        • TRTCH specification – Key = '004F'
        • Diagnostic trace specification (DIAGNS=TRACE) - Key = '0054'
        • FUNC= specification - Key = '005A'
        • FRID= specification - Key = '005B'
        • Record length specification - Key = '006B'
        • Kilobyte BLKSIZE type specification - Key = '0072'
        • Megabyte BLKSIZE type specification - Key = '0073'
        • Gigabyte BLKSIZE type specification - Key = '0074'
      • Non-JCL dynamic allocation functions
        • Password specification - Key = '0050'
        • Permanently allocated attribute specification - Key = '0052'
        • Convertible attribute specification - Key = '0053'
        • Ddname return specification - Key = '0055'
        • Dsname return specification - Key = '0056'
        • DSORG return specification - Key = '0057'
        • Subsystem request specification - key = '005C'
        • Volume serial return specification - Key = '005D'
        • Subsystem request type specification - Key = '0062'
        • Spool data set browse token specification - Key = '006E'
        • Volume interchange specification - Key = '006F'
        • Subsystem request specification - Key = '0075'
        • Uniquely allocated temporary data set - Key = '0077'
      • Dynamic unallocation text units
        • Ddname specification - Key = '0001'
        • Dsname specification - Key = '0002'
        • Member name specification - Key = '0003'
        • Overriding disposition specification - Key = '0005'
        • Unallocate option specification - Key = '0007'
        • Remove in-use option specification - Key = '0008'
        • Overriding SYSOUT nohold specification - Key = '000A'
        • Overriding SYSOUT class specification - Key = '0018'
        • Overriding SYSOUT remote workstation specification - Key = '0058'
        • Overriding SYSOUT hold queue specification - Key = '0059'
        • Overriding SYSOUT user ID specification - Key = '0063'
        • Overriding spin data set specification - Key = '8013'
        • z/OS UNIX file path specification - Key = '8017'
        • z/OS UNIX overriding file disposition specification - Key = '801A'
      • Dynamic concatenation text units
        • Ddname specification - Key = '0001'
        • Permanently concatenated attribute specification - Key = '0004'
      • Dynamic deconcatenation text unit
        • Ddname specification - Key = '0001'
      • Text units for removing the in-use attribute based on task ID
        • TCB address specification - Key = '0001'
        • Current task option specification - Key = '0002'
      • Ddname allocation text units
        • Ddname specification - Key = '0001'
        • Return DUMMY indication specification - Key = '0002'
      • Dynamic information retrieval text units
        • Ddname specification - Key = '0001'
        • Dsname specification - Key = '0002'
        • Return ddname specification - Key = '0004'
        • Return dsname specification - Key = '0005'
        • Return member name specification - Key = '0006'
        • Return status specification - Key = '0007'
        • Return normal disposition specification - Key = '0008'
        • Return conditional disposition specification - Key = '0009'
        • Return data set organization specification key = '000A'
        • Return limit specification - Key = '000B'
        • Return dynamic allocation attribute specification - Key = '000C'
        • Return last entry specification - Key = '000D'
        • Return data set type specification - Key = '000E'
        • Relative request number specification - Key = '000F'
        • Return first volume serial specification - Key = '0010'
        • Return ddname extended specification - Key = '0011'
        • Return relative position specification - Key = '0012'
        • z/OS UNIX file path specification - Key = '8017'
        • CNTL specification - Key = 'C003'
        • Return storage class specification - Key = 'C004'
        • Return management class specification - Key = 'C005'
        • Return data class specification - Key = 'C006'
        • Return record organization specification - Key = 'C00B'
        • Return key offset specification - Key = 'C00C'
        • Return copy DD specification - Key = 'C00D'
        • Return copy profile specification - Key = 'C00E'
        • Return copy model specification - Key = 'C00F'
        • Return average record specification - Key = 'C010'
        • Return data set type specification - Key = 'C012'
        • Return spin data set specification - Key = 'C013'
        • Return segment spin data set specification - Key = 'C014'
        • Return z/OS UNIX file path specification - Key = 'C017'
        • Return z/OS UNIX file options - Key = 'C018'
        • Return z/OS UNIX file access attributes - Key = 'C019'
        • Return z/OS UNIX file normal disposition specification - Key = 'C01A'
        • Return z/OS UNIX file abnormal disposition specification - Key = 'C01B'
        • Return organization of a z/OS UNIX file - Key = 'C01D'
        • Return spin of interval specification - Key = 'C02A'
        • Return symbol list on a DD statement - Key = 'C02B'
        • Return DSNTYPE version information - Key = 'C02C'
        • Return MAXGENS generation information - Key = 'C02D'
        • Return GDGORDER specification – Key = 'C02E'
    • Example of a Dynamic Allocation Request
  • Dynamic output
    • Creating and naming output descriptors
      • System generated names
      • Job step considerations
      • Output descriptors and text units
        • Table of dynamic output text units and JCL equivalents
        • Relationship between text units and JCL equivalents
          • OUTPUT JCL statement
          • Text units
      • Deleting output descriptors
      • Specifying SYSOUT without an output descriptor
      • Dynamic output programming example
        • Dynamic output programming example (continued)
        • Dynamic output programming example (continued)
        • Dynamic output programming example (concluded)
  • Scheduler JCL facility (SJF)
    • Understanding SJF terms
      • The SJF environment
      • Retrieving output descriptor information (SJFREQ macro with RETRIEVE)
        • Initializing the keyword list
        • Establishing a storage area
        • Information returned from SJF RETRIEVE processing
      • Merging SWBTUs (SJFREQ macro with SWBTU_MERGE)
      • Validating and building text units (SJFREQ macro with VERIFY)
      • SJFREQ VERIFY functions
      • Preparing to use VERIFY for validating and building text units
      • Examples of using SJFREQ VERIFY functions
        • Validate a statement name
        • Validate a keyword operand
        • Validate and build a text unit for a keyword operand and subparameters
        • Validate and build a text unit for a keyword operand with a sublist
        • Requesting last call
      • Freeing the SJF environment (SJFREQ macro with TERMINATE)
    • Understanding the OUTDES statement
      • Operand and keyword operand abbreviations
      • Comments and line continuation
      • Delimiters
      • Rules for parsing data with and without quotation marks
      • OUTDES statement syntax
  • Processing user trace entries in the system trace table
    • Formatting a USRn trace table entry
    • Replacing a USRn TTE formatting routine
      • Parameters passed to the USRn formatter
      • Return codes from the USRn formatter
      • Printing the trace output buffer contents
      • Handling errors during TTE formatting
  • Using system logger services
    • What is system logger?
      • The log stream
        • Coupling facility log stream
        • DASD-only log stream
    • The system logger configuration
      • The system logger component
    • Overview of authorized system logger services
      • Summary of system logger services
      • Coding a system logger complete exit for IXGBRWSE, IXGWRITE, and IXGDELET
        • Information passed to the complete exit
        • Environment
        • Input specifications
          • Registers at entry
          • Return specification
        • Programming considerations
      • Using ENF event code 48 in system logger applications
    • IXGCONN: Connecting to and disconnecting from a log stream
      • Connecting as a resource manager
        • Using ENF event code 48 with a resource manager
      • Using ENF event 48 when a connect request is rejected
      • Coding a resource manager exit for IXGCONN
        • Information passed to the resource manager exit
        • Environment
        • Input specifications
        • Registers at entry
        • Return specification
        • Programming considerations
        • Overriding delete requests
        • When the resource manager exit hangs
    • IXGDELET: Deleting log blocks from a log stream
      • Delete requests and resource manager exit processing
    • Setting up the system logger configuration
      • Writing an ENF event 48 listen exit
    • Logger server address space availability considerations
      • ENF 48 and system logger initialization
      • ENF 48 event code scenarios
      • Considerations for logger resources temporarily unavailable
      • Considerations for logger log stream disconnected
    • When things go wrong: Recovery scenarios for system logger
      • When a resource manager fails
  • System REXX
    • Planning to use system REXX
    • Security
    • Argument and variable processing
    • Input/output files
    • Functions
    • Time limits and canceling a request
    • Error handling
    • Examples
  • z/OS FBA services
    • z/OS Distributed Data Backup (zDDB)
    • z/OS FBA devices
      • Controlling access to z/OS FBA devices
    • z/OS FBA services
      • Querying and allocating FBA devices
      • Reading from and writing to z/OS FBA devices
      • Erasing data on z/OS FBA devices
      • Unallocating z/OS FBA devices
      • Improving performance when using IOSFBA services
      • Providing a recovery or resource manager
  • Using the unit verification service
    • Functions
      • Check groups - Function code 0
      • Check units - Function code 1
      • Return unit name - Function code 2
      • Return unit control block (UCB) addresses - Function code 3
      • Return group ID - Function code 4
      • Indicate unit name is a look-up value - Function code 5
      • Return look-up value - Function code 6
      • Convert device type to look-up value - Function code 7
      • Return attributes - Function code 8
      • Check units with no validity bit - Function code 9
      • Specify subpool for returned storage - Function code 10
      • Return unit names for a device class - Function code 11
      • Callers of IEFEB4UV
      • Callers of IEFGB4UV or IEFAB4UV
        • Input to and output from unit verification service routines
        • Input parameter list
        • Input and output data structures
        • Register 15 if request fails
        • Requesting function code 0 (check groups)
          • Input
          • Output
        • Requesting function code 1 (check units)
          • Input
          • Output
        • Requesting function code 2 (return unit name)
          • Input
          • Output
        • Requesting function code 3 (return UCB addresses)
          • Input
          • Output
        • Requesting function code 4 (return group ID)
          • Input
          • Output
        • Requesting function code 5 (indicate unit name is a look-up value)
          • Input
          • Output
        • Requesting function code 6 (return look-up value)
          • Input
          • Output
        • Requesting function code 7 (convert device type to look-up value)
          • Input
          • Output
        • Requesting function code 8 (return attributes)
          • Input
          • Output
        • Requesting function code 9 (check units with no validity bit)
          • Input
          • Output
        • Requesting function code 10 (specify subpool for returned storage)
          • Input
          • Output
        • Requesting function code 11 (return unit names for a device class)
          • Input
          • Output
        • Requesting multiple functions - Examples
        • Example 1 - Function codes 0 and 1
          • Input
          • Output
        • Example 2 - Function codes 3 and 10
          • Input
          • Output
        • Example 3 - Function codes 1 and 5
          • Input
          • Output