Trailing-Edge
-
PDP-10 Archives
-
TOPS-20_V6.1_DECnetSrc_7-23-85
-
mcb/xpt/xptitf.bli
There is 1 other file named xptitf.bli in the archive. Click here to see a list.
module XPTITF (
IDENT = 'X01270'
) =
begin
!
! COPYRIGHT (c) 1980, 1981, 1982
! DIGITAL EQUIPMENT CORPORATION
! Maynard, Massachusetts
!
! This software is furnished under a license and may be used
! and copied only in accordance with the terms of such license
! and with the inclusion of the above copyright notice. This
! software or any other copies thereof may not be provided or
! otherwise made available to any other person. No title to
! and ownership of the software is hereby transferred.
!
! The information in this software is subject to change
! without notice and should not be construed as a commitment
! by DIGITAL EQUIPMENT CORPORATION.
!
! DIGITAL assumes no responsibility for the use or reliability
! of its software on equipment which is not supplied by
! DIGITAL.
!
!++
! FACILITY: Transport
!
! ABSTRACT:
!
! Transport Interface Routines: takes a CCB and, based on the function/
! modifier codes, routes it to a processing routine. Some of the func-
! tions require no preprocessing; the function handler is called direct-
! ly. Other routines require preprocessing or are handled entirely in
! this module; all Network Management interface routines are contained
! here.
!
! ENVIRONMENT: MCB
!
! AUTHOR: L. Webber , CREATION DATE: 31-Jul-79
!
! MODIFIED BY:
!
! L. Webber, 31-Jul-79 : VERSION 01
!
! 1.01 L. Webber, 1-Nov-79
! Brought module into conformance with design specification
!
! 1.02 L. Webber, 20-Dec-79
! Modifications associated with splitting Transport Line Interface out
!
! 1.03 L. Webber, 29-Jan-80
! Rewrote dispatch code to go through two levels of dispatch tables.
!
! 1.04 L. Webber, 3-Apr-80
! Modified to support node and line sub-data-bases
! Added dispatch table (previously in XPTINI)
! Modified all calls to the XPTDEC and XPTINI routines to be
! extension process calls; added interface routines LINE$DN,
! LINE$UP, OPEN$T, CLOSE$T, INIT$XPT, and CLOSE$XPT to do the calls
!
! 1.05 L. Webber, 15-Apr-80
! Add $XPTDB, the address of the Transport Data Base
!
! 1.06 L. Webber, 23-May-80
! Translate between LIX and Transport line index at the DLL and
! Network Management interfaces
!
! 1.07 L. Webber, 23-Jun-80
! Convert MCB interfaces to MCBLIB macros
!
! 1.08 A. Peckham, 15-Oct-80
! Update to use dispatch TABLE$ macro.
! Use symbolic function modifiers.
!
! 1.09 A. Peckham, 21-Oct-80
! Change CE_ERR returns to SIGNAL_STOP.
!
! 1.10 A. Peckham, 24-Oct-80
! Change some CE_ERRs back from SIGNAL_STOPs.
!
! 1.11 L. Webber, 2-Dec-80
! Switch first two parameters of DISPATCH$ macros to
! match macro definition
!
! 1.12 L. Webber, 11-Dec-80
! Modify to support MCB 3.1
!
! 1.13 L. Webber, 12-Jan-81
! Take out old NM code and modify to call XPTNMI.
!
! 1.14 L. Webber, 20-Jan-81
! Take out $XPTDB and $NLN to make XPT read-only.
!
! 1.15 L. Webber, 6-Feb-81
! Forwarding is moving to XPE; CALL$E routine TERMINATE.
!
! 1.16 L. Webber, 9-Feb-81
! Put back the direct calls; an interface module has been added.
!
! 1.17 L. Webber, 18-Feb-81
! Fix maintenance of INPUTquota.
! Add calls to the BUFCHK debugging routine.
!
! 1.18 L. Webber, 19-Feb-81
! Fix TERMINATE not to be CALL$
!
! 1.19 L. Webber, 27-Feb-81
! Fix ECL_RTN to handle locally looped packets
!
! 1.20 L. Webber, 3-Mar-81
! Add global literals for the data base sizes
!
! 1.21 L. Webber, 9-Mar-81
! Fix bug in handling of admission quota
!
! 1.22 L. Webber, 20-Mar-81
! The return of a HELLO packet should not affect the Update quota.
!
! 1.23 L. Webber, 14-May-81
! Add _ROUTES to call ROUTES in XPE on a SYNCH redispatch.
!
! 1.24 L. Webber, 3-Jun-81
! Modify to support new DLL interface (which also changed some modifier
! codes in the TLI interface).
! Modify all buffer releases to use $MCB_RETURN_CCB_AND_BUFFER.
!
! 1.25 L. Webber, 9-Jun-81
! Fix glitch in DLL_RTN which was always releasing an input CCB, no
! matter whom it belonged to.
!
! 1.26 L. Webber, 25-Jun-81
! Add DLL_RTN processing of "uncounted" message type (used at present
! only for sending "line down" DC's).
!
! 1.27 A. Peckham, 16-Apr-82
! Add NM$XPT to CALL$E to get to XPT_NM which has been moved to XPE.
! Optimize linkages.
!
!--
!
! TABLE OF CONTENTS
!
require 'XPTMAC';
%if %bliss (BLISS16)
%then
linkage XPT_LKG_ADR_DB_CCB =
jsr (register = 1, register = 5, register = 4) :
nopreserve (0, 1, 2, 3, 4, 5);
%else macro XPT_LKG_DB_CCB_ADR = BLISS36C %;
%fi
forward routine
XMEDSP: MCB_DB_CCB_MOD novalue,
RCEDSP: MCB_DB_CCB_MOD novalue,
CTLDSP: MCB_DB_CCB_MOD novalue,
XCPDSP: MCB_DB_CCB_MOD novalue,
RCPDSP: MCB_DB_CCB_MOD novalue,
CCPDSP: MCB_DB_CCB_MOD novalue,
ECL_XMT: MCB_DB_CCB novalue,
ECL_RTN: MCB_DB_CCB novalue,
DLL_RTN: MCB_DB_CCB novalue,
REINIT_CMP: MCB_DB_CCB novalue,
TERM_CMP: MCB_DB_CCB novalue,
UNKNOWN: novalue,
LINE$DN: novalue,
LINE$UP: novalue,
OPEN$T: MCB_DB_CCB novalue,
CLOSE$T: MCB_DB_CCB novalue,
INIT$XPT: MCB_DB_CCB novalue,
NM$XPT: MCB_DB_CCB novalue,
TERM$XPT: MCB_DB_CCB novalue,
_ROUTES: novalue,
CALL$XPE: XPT_LKG_ADR_DB_CCB novalue;
!
! INCLUDE FILES:
!
!
! MACROS:
!
!
! EQUATED SYMBOLS:
!
global literal ! (in bytes)
XPT$SX = XPTDB_length * %upval, ! Main data base length
XPT$SN = NODElength, ! Node data base entry length
XPT$SL = LINElength; ! Line data base entry length
!
! OWN STORAGE:
!
! See $XPTLL below.
!
!
! EXTERNAL REFERENCES:
!
external routine
RCVECL,
TERMINATE: novalue,
OPENT: novalue,
CLOSET: novalue,
LINEUP: novalue,
LINEDN: novalue,
INIT_XPT: novalue,
TERM_XPT: novalue,
RCVBUF: novalue,
COSTCH: novalue,
XPE_NM: novalue,
XPTTIM: novalue;
!++
!
! TRANSPORT DISPATCH VECTOR
!
! NAME: $XPTLL
!
! This vector is the main MCB dispatch vector which dispatches
! received CCBs to the interface routines in this module.
!
!--
external routine $DSPCR : novalue;
global
bind $XPTLL = TABLE$ ($DSPCR, FC_CCP,
(FC_XME, XMEDSP), !Transmit enable
(FC_RCE, RCEDSP), !Receive enable
(FC_CTL, CTLDSP), !Control
(FC_TIM, XPTTIM), !Timeout/process initialization
(FC_XCP, XCPDSP), !Transmit complete
(FC_RCP, RCPDSP), !Receive complete
(FC_CCP, CCPDSP)); !Control complete
!++
!
! PROCESS HEADER
!
! NAME OF PROCESS: XPT
!
!--
$MCB_PROCESS(name=XPT,llc_dispatch=$XPTLL)
global
routine XMEDSP (XPTDB,CCB,MODIFIER): MCB_DB_CCB_MOD novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Routine to dispatch "transmit enable" CCBs
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB CCB to pass to dispatched routine.
! MODIFIER Subfunction code; used to select routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
DISPATCH$(.MODIFIER,
TABLE$ ($DSPCR, FD_XME,
(XM_DAT, ECL_XMT)),
(.XPTDB,.CCB),
MCB_DB_CCB);
BUFCHK();
end; !End of XMEDSP
global
routine RCEDSP (XPTDB,CCB,MODIFIER): MCB_DB_CCB_MOD novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Routine to dispatch "receive enable" CCBs
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB CCB to pass to dispatched routine.
! MODIFIER Subfunction code; used to select routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
DISPATCH$(.MODIFIER,
TABLE$ ($DSPCR, FD_RCE,
(XM_DAT, ECL_RTN)),
(.XPTDB,.CCB),
MCB_DB_CCB);
BUFCHK();
end; !End of RCEDSP
global
routine CTLDSP (XPTDB,CCB,MODIFIER): MCB_DB_CCB_MOD novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Routine to dispatch "control" CCBs
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB CCB to pass to dispatched routine.
! MODIFIER Subfunction code; used to select routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
DISPATCH$(.MODIFIER,
TABLE$ ($DSPCR, FD_CTL,
(NM_INI, INIT$XPT),
(XM_STR, OPEN$T),
(XM_STP, CLOSE$T),
(FM_NM, NM$XPT),
(NM_TRM, TERM$XPT)),
(.XPTDB,.CCB),
MCB_DB_CCB);
BUFCHK();
end; !End of CTLDSP
global
routine XCPDSP (XPTDB,CCB,MODIFIER): MCB_DB_CCB_MOD novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Routine to dispatch "transmit complete" CCBs
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB CCB to pass to dispatched routine.
! MODIFIER Subfunction code; used to select routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
DISPATCH$(.MODIFIER,
TABLE$ ($DSPCR, FD_XCP,
(TM_DAT, DLL_RTN)),
(.XPTDB,.CCB),
MCB_DB_CCB);
BUFCHK();
end; !End of XCPDSP
global
routine RCPDSP (XPTDB,CCB,MODIFIER): MCB_DB_CCB_MOD novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Routine to dispatch "receive complete" CCBs
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB CCB to pass to dispatched routine.
! MODIFIER Subfunction code; used to select routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
DISPATCH$(.MODIFIER,
TABLE$ ($DSPCR, FD_RCP,
(TM_INI, LINE$UP),
(TM_DAT, RCVBUF),
(TM_TRM, LINE$DN)),
.CCB);
BUFCHK();
end; !End of RCPDSP
global
routine CCPDSP (XPTDB,CCB,MODIFIER): MCB_DB_CCB_MOD novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Routine to dispatch "control complete" CCBs
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB CCB to pass to dispatched routine.
! MODIFIER Subfunction code; used to select routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
DISPATCH$(.MODIFIER,
TABLE$ ($DSPCR, FD_CCP,
(TM_STR, REINIT_CMP),
(TM_STP, TERM_CMP)),
(.XPTDB,.CCB),
MCB_DB_CCB);
BUFCHK();
end; !End of CCPDSP
routine ECL_XMT (XPTDB,CCB): MCB_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Handles Transmit requests from a Transport user
!
! FORMAL PARAMETERS
!
! XPTDB - Address of Transport's data base
! CCB - CCB given by the Transport user to be transmitted
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
require 'XPTSYM';
require 'MCBCOM';
local RET;
!
! If Transport isn't active or the admission quota is exhausted,
! reject the packet
!
INPUTquota = .INPUTquota - 1; !Decrement admission quota
if bitoff(.XPTflags,Running) then !Transport not running
TERMINATE(.CCB,CE_NTE)
else if .INPUTquota eql -1 then !Admission quota exhausted
TERMINATE(.CCB,CE_RTE)
!
! Send the message out
!
else begin
RET = RCVECL(.CCB);
!
! Failed - return function CCB now
!
if .RET neq CS_SUC then begin
TERMINATE(.CCB,.RET);
end;
end;
end; !End of ECL_XMT
routine ECL_RTN (XPTDB,CCB): MCB_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Processes a data buffer returned from a Transport user. If the buffer
! belongs to Transport, the routine releases it. Otherwise, it dequeues
! the transport header CCB and returns it, returns the data CCB to
! the Data Link Layer, and updates the ECL quota.
!
! FORMAL PARAMETERS
!
! XPTDB - Address of Transport's data base
! CCB - CCB being returned.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
map CCB: ref block field (C_XPT_fields);
require 'XPTSYM';
!
! Increase the quota of buffers allowed to the ECL
!
ECLquota = .ECLquota + 1;
!
! Return the data buffer to the DLL, or the ECL, or release it
!
if .CCB[C_STK] eql 0 then begin !Transport's buffer:
$MCB_RETURN_CCB_AND_BUFFER(.CCB[C_XPT_ALLOCATION], ! release it
.CCB); ! and return
INPUTquota = .INPUTquota + 1; ! admission
end ! permit
else if .CCB[C_STS] eql 0 then !Normal buffer:
TERMINATE(.CCB,CS_SUC) ! return "success"
else !Otherwise,
TERMINATE(.CCB,CE_DIS); ! return "no path"
end; !End of ECL_RTN
routine DLL_RTN (XPTDB,CCB): MCB_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Processes "transmit complete" returns from the Data Link Layer.
! If there is a routing header, the header CCB is detached and released.
! The buffer is then returned to its owner.
!
! FORMAL PARAMETERS
!
! XPTDB - Address of Transport's data base
! CCB - CCB returned from the DLL
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
map CCB: ref block field(C_XPT_fields);
local LINEb;
require 'XPTSYM';
local RET;
bind LINE = .CCB[C_LIN]; ! Line over which buffer was received
bind TYPE = .CCB[C_XPT_TYPE];
bind SUBTYPE = .CCB[C_XPT_SUBTYPE];
LINEb = $XPT_GET_LINE_DB(LINE); ! Address line data base entry
!
! Data packet - increase the output quota for the input line
! and terminate the packet
!
if TYPE eql FWDcode then begin
LINEquota = .LINEquota + 1;
TERMINATE(.CCB,CS_SUC);
end
!
! Routing message - increase the update quota and get rid of the packet
!
else if TYPE eql UPDATEcode then begin
if SUBTYPE eql UPDATEcode then
UPDATEquota = .UPDATEquota + 1;
if .CCB[C_XPT_ALLOCATION] neq 0
then begin
MAP$(.CCB[C_BIAS]);
$MCB_RETURN_BUFFER(.CCB[C_XPT_ALLOCATION],.CCB[C_ADDR]);
end;
$MCB_RETURN_CCB(.CCB);
end
!
! Other (non-counted) type - just terminate it
!
else TERMINATE(.CCB,CS_SUC);
end; !End of DLL_RTN
routine UNKNOWN (CCB): novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Processes an unknown function; flags the CCB in error and returns it.
!
! FORMAL PARAMETERS
!
! CCB
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
require 'XPTSYM';
require 'MCBCOM';
!
! Log a Invalid Message event
!
%( TBS )%
!
! Get rid of the CCB
!
TERMINATE(.CCB,CS_SUC);
end; !End of UNKNOWN
routine REINIT_CMP (XPTDB,CCB): MCB_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Processes a completed "Reinitialize Line" CCB. Since the
! Reinitialize function is not synchronized with any Transport
! activity (the synchronization is provided by Line Up and Line
! Down signals), the CCB is terminated without processing.
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB Function CCB returned from Transport Line Interface
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
CCBRT$(.CCB);
end; !End of REINIT_CMP
routine TERM_CMP (XPTDB,CCB): MCB_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! This routine processes a completed Terminate Line CCB. For reasons
! similar to those for REINIT_CMP above, the CCB is terminated without
! processing. If Transport is not running and all lines have been
! terminated, the "Terminate Transport" function CCB which was stored
! in Tid by TERM$XPT will be returned to its sender.
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB Terminate CCB, returned from Transport Line Interface
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
local LINEb;
require 'XPTSYM';
require 'MCBCOM';
!
! Get rid of the completed CCB
!
TERMINATE(.CCB,0);
!
! If Transport is terminating and all lines are down, return the
! Terminate Transport function CCB.
!
if .XPTflags eql 0 then
if (decr J from NLN to 1 do begin
LINEb = $XPT_GET_LINE_DB(.J);
if .LINEstate neq HA
then exitloop 0
end)
eql -1 then begin
CCB = .Tid; !Pick up the function CCB
CCB[C_FNC] = FC_CCP; !Flag it "complete"
CCB[C_STS] = CS_SUC; ! and "success"
LLCRS$(.CCB); ! and send it off
end;
end; !End of TERM_CMP
routine LINE$DN (CCB): novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! Calls the LINEDN routine in the Transport extension process.
!
! FORMAL PARAMETERS
!
! CCB Function CCB to be passed to the routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
require 'XPTSYM';
CALL$XPE(LINEDN,.XPTDB,.CCB);
end; !End of LINE$DN
routine LINE$UP (CCB): novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS
!
! CCB Function CCB to be passed to the routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
require 'XPTSYM';
CALL$XPE(LINEUP,.XPTDB,.CCB);
end; !End of LINE$UP
routine OPEN$T (XPTDB,CCB): MCB_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB Function CCB to be passed to the routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
require 'XPTSYM';
CALL$XPE(OPENT,.XPTDB,.CCB);
end; !End of OPEN$T
routine CLOSE$T (XPTDB,CCB): MCB_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB Function CCB to be passed to the routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
require 'XPTSYM';
CALL$XPE(CLOSET,.XPTDB,.CCB);
end; !End of CLOSE$T
routine INIT$XPT (XPTDB,CCB): MCB_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB Function CCB to be passed to the routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
require 'XPTSYM';
CALL$XPE(INIT_XPT,.XPTDB,.CCB);
ROUTESaddr = _ROUTES;
end; !End of INIT$XPT
routine NM$XPT (XPTDB,CCB): MCB_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB Function CCB to be passed to the routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
require 'XPTSYM';
CALL$XPE(XPE_NM,.XPTDB,.CCB);
end; !End of NM$XPT
routine TERM$XPT (XPTDB,CCB): MCB_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS
!
! XPTDB Address of Transport's data base
! CCB Function CCB to be passed to the routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
require 'XPTSYM';
CALL$XPE(TERM_XPT,.XPTDB,.CCB);
end; !End of TERM$XPT
global
routine _ROUTES: novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
! This routine is redispatched on a SYNCH when ROUTES can't do all its work
! in one try. It does a CALL$E to ROUTES.
!
! FORMAL PARAMETERS
!
! NONE.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
require 'XPTSYM';
external routine ROUTES;
CALL$E(ROUTES,PD_XPE);
end; !End of _ROUTES
routine CALL$XPE (ADR,XPTDB,CCB): XPT_LKG_ADR_DB_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS
!
! ADR Address of routine to call in XPE
! XPTDB Address of Transport's data base
! CCB Function CCB to be passed to the routine.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
bind routine XPE_RTN = .ADR;
require 'XPTSYM';
CALL$E(XPE_RTN,(PD_XPE),.CCB);
end; !End of CALL$XPE
end !End of module XPTITF
eludom