|
The next step is to translate the OLU name. The indicator
for the OLU fields (NAME2) specifies that the real name is provided
and an alias name must be returned. The sample exit routine allocates
up to 999 names. The names consist of a required prefix, ALIAS,
and a 3-digit suffix allocated from an alias-suffix table. The exit
routine initializes and maintains this table in a user storage area.
An alias table can be loaded in the begin function similar to the
network identifier registration table. The sample code below examines
the second entry of the alias input parameters and invokes a subroutine
to allocate an alias name from the table.
Note: For this example,
the CDRSCTI start option must be set to 0 so that the alias LU name
assigned to the terminal can be deleted and reassigned to another
real terminal after the session is terminated. The CDRSCTI start option
can have a value other than 0 for real operations.
***********************************************************************
ALIASS2 EQU *
LA R2,32(R2) ALIAS SECOND LUNAME ADDRESS -
* REAL/ALIAS NAME
*
** PROCESS SECOND LOGICAL UNIT NAME IN ALIAS INPUT PARAMETER LIST:
**
** IF SECOND ENTRY IS THE REAL NAME OF THE TERMINAL, THEN
** ALLOCATE AN ALIAS NAME FROM THE ALIAS NAME POOL, OTHERWISE,
** EXIT TO VTAM WITHOUT ALIAS TRANSLATION.
**
** REASON: 1. THE TERMINAL IS THE OLU AND THE NAME REQUESTED BY VTAM
** IS THE REAL NAME FOR THE OLU AND THE SME ROUTINE ONLY
** PROVIDES ALIAS NAMES.
*
ALIASS2A EQU *
TM 2(R2),X'80' SECOND ENTRY - REAL NAME SUPPLIED
BO ALIASS2C YES, PERFORM ALIAS TRANSLATION
ALIASS2B EQU *
LA R15,8 SOME TRANSLATION PERFORMED - NO ALIAS
* APPLICATION
B RETURN RETURN TO VTAM
ALIASS2C EQU *
*
** IF THE INDICATOR IN THE FIRST BYTE OF THE ALIAS STORAGE ADDRESS IN
** THE USER DATA STORAGE AREA IS X'FF', THEN STORAGE WAS NOT AVAILABLE
** FOR THE TABLE. NO ALIAS PROCESSING CAN BE PERFORMED, THEREFORE EXIT.
**
** OTHERWISE, BRANCH TO SUBROUTINE THAT ALLOCATES AN AVAILABLE ALIAS
** NAME SUFFIX FROM THE ALIAS NAME POOL. IF ALL ENTRIES ARE USED,
** REGISTER 15 (R15) CONTAINS A NON-ZERO RETURN CODE FOR VTAM WHICH
** DOES NOT ALLOW SESSION INITIATION TO CONTINUE. OTHERWISE, THE
** ADDRESS FOR THE ALIAS NAME SUFFIX IS ADDRESSABLE AT DISPLACEMENT
** ONE (1) USING REGISTER 1 (R1). THE SUFFIX IS APPENDED TO THE FIVE
** CHARACTER STRING 'ALIAS' TO FORM THE ALIAS NAME FOR THE TERMINAL.
*
L R4,8(R11) PARAMETER LIST - USER DATA ADDRESS
L R4,0(R4) USER DATA STORAGE ADDRESS
CLI 32(R4),X'FF' EXAMINE IF ALIAS NAME STORAGE OBTAINED
BNE ALIASS2E YES, CONTINUE ALIAS NAME PROCESSING
ALIASS2D EQU *
LA R15,20 NO ALIAS FUNCTION AVAILABLE - FAIL
* SESSION SETUP
B RETURN RETURN TO VTAM - NO ALIAS APPLICATION
ALIASS2E EQU *
L R4,32(R4) ALIAS NAME STORAGE ADDRESS
BAL R14,ALIASS3 BRANCH TO ALIAS NAME ALLOCATION ROUTINE
LTR R15,R15 ALIAS SUFFIX AVAILABLE
BNZ RETURN RETURN TO VTAM - NO ALIAS ENTRY AVAILABLE
ALIASS2F EQU *
MVC 8(5,R3),=C'ALIAS' ALIAS OUTPUT PARAMETER - ALIAS NAME
* PREFIX
MVC 13(3,R3),1(R1) ALIAS OUTPUT PARAMETER - ALIAS NAME
* SUFFIX
MVC 56(8,R3),=CL8'NET2' ALIAS OUTPUT PARAMETER - ALIAS NETID
LA R15,8 SOME TRANSLATION PERFORMED - NO COS, LOGMODE
B RETURN RETURN TO VTAM
***********************************************************************
The
subroutine that processes the alias suffix table initializes the storage,
obtained in the begin function, during the first pass through the
allocation process. During the first pass, no entry is allocated,
as indicated by a X'00' in the first byte. After the entry is allocated,
a X'FF' is moved to the first byte in the alias suffix entry. A binary
counter for the entry number is converted to a 3-byte decimal value,
the suffix, and is saved in the remaining three bytes of the 4-byte
entry. The address of the alias suffix entry is then returned to the
alias function that invoked the subroutine. The suffix is appended
to the prefix string ALIAS to form the
alias name.
The format of the alias suffix table is illustrated
in Figure 1. An example of the subroutine
code that performs the suffix allocation follows Figure 1.
Figure 1. Alias terminal
name pool—3-digit suffix
***********************************************************************
ALIASS3 EQU *
*
** ALIAS NAME SUFFIX ALLOCATION SUBROUTINE
**
** R1 = ADDRESS OF ALIAS NAME SUFFIX ENTRY ALLOCATED
** R4 = ADDRESS OF ALIAS NAME SUFFIX STORAGE - WORKAREA FOR CONVERT
** TO DECIMAL
** R6 = ALIAS SUFFIX ENTRY COUNTER - DECREMENTED
** R7 = ALIAS SUFFIX ENTRY COUNTER - CONSTANT
** R14 = RETURN ADDRESS - MAIN ROUTINE OF ALIAS FUNCTION
** R15 = RETURN CODE
*
LA R1,8(R4) ALIAS SUFFIX ADDRESS - FIRST ENTRY
LA R6,1000 ALIAS SUFFIX ENTRY COUNTER - DECREMENT
LA R7,1000 ALIAS SUFFIX ENTRY COUNTER - CONSTANT
ALIASS3A EQU *
CLI 0(R1),X'00' ALIAS SUFFIX ENTRY ALLOCATED
BNE ALIASS3B YES, INCREMENT ADDRESS TO NEXT ENTRY
MVI 0(R1),X'FF' NO, ALLOCATE ALIAS SUFFIX ENTRY
SR R7,R6 CALCULATE ALIAS SUFFIX ENTRY VALUE - BINARY
CVD R7,0(R4) CONVERT ALIAS SUFFIX ENTRY TO DECIMAL -
* WORKAREA
UNPK 1(3,R1),6(2,R4) UNPACK SUFFIX VALUE INTO PROPER
* SUFFIX ENTRY
OI 3(R1),X'F0' ENSURE DECIMAL VALUE - CHANGE SIGN OF
* LAST CHARACTER
BR R14 RETURN TO INVOKING ROUTINE
ALIASS3B EQU *
LA R1,4(R1) INDEX ALIAS SUFFIX ADDRESS TO NEXT ENTRY
BCT R6,ALIASS3A DECREMENT ALIAS SUFFIX COUNTER -
* CONTINUE IF NONZERO
LA R15,20 ALL ALIAS SUFFIX ENTRIES ALLOCATED -
* ENTRIES EXHAUSTED
BR R14 RETURN TO INVOKING ROUTINE - TERMINATE
* SESSION SETUP
***********************************************************************
|