Trailing-Edge
-
PDP-10 Archives
-
BB-P363B-SM_1985
-
mcb/cex/ini.b16
There are no other files named ini.b16 in the archive.
module INI ( ! DN20 Initialization Process
ident = 'X03210',
language (bliss16)
) =
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: DN20 Initialization
!
! ABSTRACT:
!
! This process sets the load parameters, sends configuration
! information to relavent processes, and starts the necessary
! DECnet lines.
!
! ENVIRONMENT: MCB V3.0
!
! AUTHOR: Alan D. Peckham CREATION DATE: 21-Oct-80
!
! MODIFIED BY:
!
! Alan Peckham: 21-Oct-80
! 04 - Converted to BLISS.
! 05 - Make sure C_PRM5 state is DS_LIX2 when INILIX is called.
! 06 - Update process header for MCB V3.1
! 07 - Use Network Management interface calls for SC and NSP.
! 08 - Start up all lines at once.
! 10 - Line initialization in INILIX stopped with first unassigned line.
! 11 - Do SET LINE ON to PLP lines.
! 12 - Tell NMX what lines there are.
! 13 - Bug fix - we weren't setting the local node name in SC.
! 14 - (Lee Webber: 10-Jun-81)
! Modify to support new DLL/NM interface to TLI:
! o Change "next routine" field in the INI function CCBs from
! C_PRM3 to C_PRM5;
! o Add a routine to grant ownership of a circuit to its LLC
! before setting it ON;
! o Do a "create circuit" before granting a circuit to the owner;
! 16 - Fix or/and bug in NSP_SET_ADDRESS.
! Do not set host number if no host given.
! 17 - do not setup node or host mapping in SC_ADD_NODE if blank
! 18 - Add support for DMR devices in INILIX.
! 19 - Fix INILIX to use new $MCB_GET_DEVICE_NAME for device names.
! 20 - Set proper host node number.
! 21 - (Jerry Weisbach 26-Feb-82) Add support for X.25 Line Entity.
! o Remove routine DLC_SET_LINE_ON
! o Add routines LLC_GRANT_LINE_OWNERSHIP and LLC_SET_LINE_ON.
! o Modify INILIX to pass control start to Line owner.
!--
!
! INCLUDE FILES:
!
library 'MCBLIB';
library 'XPORTX';
library 'NMXLIB';
require 'DLLLIB';
switches list (require);
$SHOW (FIELDS) $SHOW (LITERALS)
require 'INIDAT';
switches list (norequire);
!
! TABLE OF CONTENTS:
!
forward routine
CRASH_ON_NEGATIVE_STATUS : LINKAGE_DB_CCB,
GET_NM_CCB,
INICCP : MCB_DB_CCB_MOD novalue,
INILIX : LINKAGE_DB_CCB,
INITIM : MCB_DB_MOD novalue,
LLC_GRANT_CIRCUIT_OWNERSHIP : LINKAGE_DB_CCB,
LLC_SET_CIRCUIT_ON : LINKAGE_DB_CCB,
LLC_GRANT_LINE_OWNERSHIP : LINKAGE_DB_CCB,
LLC_SET_LINE_ON : LINKAGE_DB_CCB,
NSP_SET_ADDRESS : LINKAGE_DB_CCB,
RETURN_NM_CCB : LINKAGE_CCB novalue,
SC_ADD_NODE : LINKAGE_DB_CCB,
SC_SET_HOST : LINKAGE_DB_CCB,
SC_SET_NODE_ON : LINKAGE_DB_CCB,
XPT_INITIALIZE : LINKAGE_DB_CCB;
!
! MACROS:
!
! None
!
! EQUATED SYMBOLS:
!
$field
N_FIELDS =
set
N_BYTES = [$BYTE],
N_STRING = [$BYTES (15)]
tes;
literal
N_LENGTH = $FIELD_SET_SIZE;
literal
DSR_LENGTH = (5 + 4 + N_LENGTH)^1,
FALSE = 1 eql 0,
TRUE = 1 eql 1;
global literal
%name ('D.LEN') = D_LEN^1;
!
! OWN STORAGE:
!
external routine
$DSPCR : novalue;
$MCB_PROCESS (
NAME = INI, ! Process name
LLC_DISPATCH = TABLE$ ($DSPCR, FC_CCP, ! Dispatch vector:
(FC_CCP, INICCP), ! control complete
(FC_TIM, INITIM))); ! timeout
!
! EXTERNAL REFERENCES:
!
external
MCB$GAW_PROCESS_DATA_BASE : vector [2],
MCB$GW_PROCESS_HANDLE;
bind
DB = MCB$GAW_PROCESS_DATA_BASE [1] : ref block field (D_FIELDS),
DB_BIAS = MCB$GAW_PROCESS_DATA_BASE [0];
routine CRASH_ON_NEGATIVE_STATUS (DB, CCB) : LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_FIELDS);
if .CCB [C_STS] lss 0
then
SIGNAL_STOP (INI$_FAILED, .CCB [C_STS], .CCB);
CCB [C_PRM5] = .CCB [C_PRM4];
CCB [C_PRM4] = 0;
FALSE
end; !of routine CRASH_ON_NEGATIVE_STATUS
routine GET_NM_CCB (CCB_ADR) =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
local
CCB : ref block field (C_FIELDS);
if not $MCB_GET_CCB (CCB) then return FALSE;
if not $MCB_GET_DSR (DSR_LENGTH, CCB [C_ADDR])
then
begin
$MCB_RETURN_CCB (.CCB);
return FALSE
end;
.CCB_ADR = .CCB;
TRUE
end; !of routine GET_NM_CCB
routine INICCP (DB, CCB, MODF) : MCB_DB_CCB_MOD novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_FIELDS);
if .CCB [C_STS] lss 0
then
SIGNAL_STOP (INI$_FAILED, .CCB [C_STS], .CCB);
do 0 until LINKAGE_DB_CCB (.CCB [C_PRM5], .DB, .CCB);
end; !of routine INICCP
routine INILIX (DB, CCB) : LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_FIELDS);
do
begin
CCB [C_LIX] = DB [D_LIX] = .DB [D_LIX] + 1;
if GTPRC$ (.CCB)
then
begin
local
NMX_PIX;
!
! Construct the circuit ID.
!
$MCB_GET_DEVICE_NAME (.CCB[C_LIX], .CCB [C_ADDR]);
!
! Create the circuit at Network Management
!
if not $MCB_GET_PROCESS_HANDLE (%rad50_11'NMX', NMX_PIX)
then
NMX_PIX = 0;
!
! Dispatch the CCB to the owner process
!
if .CCB [C_PRM1] neq 0
then
begin
local
PROCESS;
if not PDVNM$ (.CCB [C_PRM1], PROCESS)
then
SIGNAL_STOP (INI$_NO_CODE);
selectone .PROCESS of
set
[%rad50_11'TLI'] :
begin
if .NMX_PIX neq 0
then
NMX$CREATE_CIRCUIT (.NMX_PIX, .CCB[C_ADDR], 0, NMX_PIX);
CCB [C_PRM5] = LLC_GRANT_CIRCUIT_OWNERSHIP;
CCB [C_PRM4] = .CCB [C_PRM1];
CCB [C_PIX] = .MCB$GW_PROCESS_HANDLE;
CCB [C_FNC] = FC_CCP;
$MCB_SCHEDULE_CCB (.CCB);
end;
[%rad50_11'PLP'] :
begin
if .NMX_PIX neq 0
then
NMX$CREATE_LINE (.NMX_PIX, .CCB[C_ADDR], 0, NMX_PIX);
CCB [C_PRM5] = LLC_GRANT_LINE_OWNERSHIP;
CCB [C_PRM4] = .CCB [C_PRM1];
CCB [C_PIX] = .MCB$GW_PROCESS_HANDLE;
CCB [C_FNC] = FC_CCP;
$MCB_SCHEDULE_CCB (.CCB);
end;
[otherwise] :
RETURN_NM_CCB (.CCB);
tes;
end
else
RETURN_NM_CCB (.CCB)
end
else
begin
RETURN_NM_CCB (.CCB);
return TRUE;
end;
end
while GET_NM_CCB (CCB);
FALSE
end; !of routine INILIX
routine INITIM (DB, MODF) : MCB_DB_MOD novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
if .MODF eql FM_PIN
then
begin
map
DB : ref block field (D_FIELDS);
local
CCB : ref block field (C_FIELDS);
external
$SYSIZ : block [3];
if .$SYSIZ [2, 0, 16, 1] eql -1 and .$SYSIZ [1, 8, 8, 1] eql -1
then
begin
linkage
COPY_LINKAGE = jsr (register = 2, register = 0, register = 1) : nopreserve (0, 1, 2);
routine COPY (FROM_ADR, LNG, TO_ADR) : COPY_LINKAGE NOVALUE =
if ..FROM_ADR neq 0
then
do ch$wchar_a (ch$rchar_a (FROM_ADR), TO_ADR)
while (LNG = .LNG - 1) neq 0;
MAP$ (.$SYSIZ [0, 0, 16, 0] - 1);
COPY (%o'140000', 2, DB [D_ADR]);
COPY (%o'140002', 6, DB [D_NAM]);
COPY (%o'140010', 6, DB [D_HST]);
COPY (%o'140016', 2, DB [D_HAD]);
end;
if not GET_NM_CCB (CCB) then return SIGNAL_STOP (INI$_NO_CCB);
CCB [C_PIX] = .MCB$GW_PROCESS_HANDLE;
CCB [C_FNC] = FC_CCP;
CCB [C_MOD] = 0;
CCB [C_BIAS] = 0;
CCB [C_PRM5] = XPT_INITIALIZE;
CCB [C_PRM4] = 0;
$MCB_SCHEDULE_CCB (.CCB);
end; !of routine INITIM
routine LLC_GRANT_CIRCUIT_OWNERSHIP (DB, CCB): LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
! Constructs a "Grant Circuit Ownership" CCB and sends it to the
! LLC for the circuit.
!
! FORMAL PARAMETERS
!
! DB Address of INI data base.
!
! CCB Function CCB to be used:
!
! CCB[C_LIN] LIX for the circuit.
! CCB[C_ADDR] Address of a block of DSR.
! CCB[C_PRM2] Provider (DLC) PIX for the circuit.
! CCB[C_PRM3] Characteristics word for circuit
! CCB[C_PRM4] Owner (LLC) PIX for the circuit.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_FIELDS);
CCB [$SUB_FIELD (C_PRM1, DLL$B_PROVIDER_LINE_INDEX)] = .CCB[C_LIX];
CCB [$SUB_FIELD (C_PRM1, DLL$B_PROVIDER_PROCESS_INDEX)] = .CCB[C_PRM2];
CCB [C_PRM2] = .CCB[C_ADDR];
CCB [C_PRM3] = 0;
if ch$eql (3, uplit (%ascii 'DTE'), 3, ch$plus (.CCB [C_PRM2], 1))
then
CCB [$SUB_FIELD (C_PRM3, DLL$V_DTE_CIRCUIT)] = 1;
CCB [C_PRM5] = LLC_SET_CIRCUIT_ON;
CCB [C_LIX] = 0;
CCB [C_PIX] = .CCB[C_PRM4];
CCB [C_FNC] = FC_CTL;
CCB [C_MOD] = FM_STR;
$MCB_SCHEDULE_CCB (.CCB);
TRUE
end; !End of LLC_GRANT_CIRCUIT_OWNERSHIP
routine LLC_SET_CIRCUIT_ON (DB, CCB) : LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
! Constructs a "Set Circuit State ON" CCB and sends it to the circuit's
! owner.
!
! FORMAL PARAMETERS:
!
! DB Address of the INI data base.
!
! CCB Function CCB:
!
! CCB[C_LIN] L.O. byte of the EID for the circuit (the
! H.O. byte will be the owner PIX).
! CCB[C_ADDR] Pointer to some DSR.
! CCB[C_PRM1] Provider (DLC) PIX for the circuit.
! CCB[C_PRM4] Owner (LLC) PIX for the circuit.
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_NM_FIELDS);
CCB [C_PIX] = .CCB [C_PRM4];
CCB [C_PRM5] = INILIX;
CCB [C_NM_FUNC] = NMX$FNC_SET;
CCB [C_NM_ENTITY] = NMX$ENT_CKT;
begin
literal
PARAM_NUMBER = 0;
local
PTR;
PTR = .CCB [C_ADDR];
ch$wchar_a (PARAM_NUMBER and %o'377', PTR);
ch$wchar_a (PARAM_NUMBER^-8 and %o'377', PTR);
ch$wchar_a (0, PTR);
CCB [C_CNT] = PTR = ch$diff (.PTR, .CCB [C_ADDR]);
end;
CCB [C_FNC] = FC_CTL;
CCB [C_MOD] = FM_NM;
$MCB_SCHEDULE_CCB (.CCB);
TRUE
end; !of routine LLC_SET_CIRCUIT_ON
routine LLC_GRANT_LINE_OWNERSHIP (DB, CCB): LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
! Constructs a "Grant Line Ownership" CCB and sends it to the
! LLC for the line.
!
! FORMAL PARAMETERS
!
! DB Address of INI data base.
!
! CCB Function CCB to be used:
!
! CCB[C_LIN] LIX for the line.
! CCB[C_ADDR] Address of a block of DSR.
! CCB[C_PRM2] Provider (DLC) PIX for the line.
! CCB[C_PRM3] Characteristics word for line
! CCB[C_PRM4] Owner (LLC) PIX for the line.
!
! IMPLICIT INPUTS
!
! NONE.
!
! ROUTINE VALUE:
! COMPLETION CODES:
!
! NONE.
!
! SIDE EFFECTS:
!
! NONE.
!
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_FIELDS);
CCB [$SUB_FIELD (C_PRM1, DLL$B_PROVIDER_LINE_INDEX)] = .CCB[C_LIX];
CCB [$SUB_FIELD (C_PRM1, DLL$B_PROVIDER_PROCESS_INDEX)] = .CCB[C_PRM2];
CCB [C_PRM2] = .CCB[C_ADDR];
CCB [C_PRM3] = 0;
CCB [C_PRM5] = LLC_SET_LINE_ON;
CCB [C_LIX] = 0;
CCB [C_PIX] = .CCB[C_PRM4];
CCB [C_FNC] = FC_CTL;
CCB [C_MOD] = FM_STR;
$MCB_SCHEDULE_CCB (.CCB);
TRUE
end; !End of LLC_GRANT_LINE_OWNERSHIP
routine LLC_SET_LINE_ON (DB, CCB) : LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
! Constructs a "Set Line State ON" CCB and sends it to the line's
! owner.
!
! FORMAL PARAMETERS:
!
! DB Address of the INI data base.
!
! CCB Function CCB:
!
! CCB[C_LIN] L.O. byte of the EID for the line (the
! H.O. byte will be the owner PIX).
! CCB[C_ADDR] Pointer to some DSR.
! CCB[C_PRM1] Provider (DLC) PIX for the line.
! CCB[C_PRM4] Owner (LLC) PIX for the line.
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_NM_FIELDS);
CCB [C_PIX] = .CCB [C_PRM4];
CCB [C_PRM5] = INILIX;
CCB [C_NM_FUNC] = NMX$FNC_SET;
CCB [C_NM_ENTITY] = NMX$ENT_LIN;
begin
literal
PARAM_NUMBER = 0;
local
PTR;
PTR = .CCB [C_ADDR];
ch$wchar_a (PARAM_NUMBER and %o'377', PTR);
ch$wchar_a (PARAM_NUMBER^-8 and %o'377', PTR);
ch$wchar_a (0, PTR);
CCB [C_CNT] = PTR = ch$diff (.PTR, .CCB [C_ADDR]);
end;
CCB [C_FNC] = FC_CTL;
CCB [C_MOD] = FM_NM;
$MCB_SCHEDULE_CCB (.CCB);
TRUE
end; !of routine LLC_SET_LINE_ON
routine NSP_SET_ADDRESS (DB, CCB) : LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_NM_FIELDS);
if not $MCB_GET_PROCESS_HANDLE (%rad50_11 'NSP', CCB [C_PIX])
then
begin
CCB [C_PRM5] = INILIX;
return FALSE
end;
CCB [C_PRM4] = SC_SET_HOST;
CCB [C_PRM5] = CRASH_ON_NEGATIVE_STATUS;
CCB [C_NM_FUNC] = NMX$FNC_SET;
CCB [C_NM_ENTITY] = NMX$ENT_NOD;
begin
literal
LOCAL_PARAM_NUMBER = 502;
local
PTR;
PTR = .CCB [C_ADDR];
ch$wchar_a (LOCAL_PARAM_NUMBER and %o'377', PTR);
ch$wchar_a (LOCAL_PARAM_NUMBER^-8 and %o'377', PTR);
ch$wchar_a (.DB [$SUB_FIELD (D_ADR, 0, 0, 8, 0)], PTR);
ch$wchar_a (.DB [$SUB_FIELD (D_ADR, 0, 8, 8, 0)], PTR);
ch$wchar_a (0, PTR);
CCB [C_CNT] = PTR = ch$diff (.PTR, .CCB [C_ADDR]);
end;
begin
bind
NMPAR = vector [.CCB [C_ADDR], 5] : vector [4];
local
PTR;
CCB [C_PRM2] = NMPAR;
NMPAR [0] = 0;
NMPAR [1] = 0;
PTR = ch$ptr (NMPAR [2],, 8);
ch$wchar_a (.DB [$SUB_FIELD (D_ADR, 0, 0, 8, 0)], PTR);
ch$wchar_a (.DB [$SUB_FIELD (D_ADR, 0, 8, 8, 0)], PTR);
ch$wchar_a (0, PTR);
end;
CCB [C_FNC] = FC_CTL;
CCB [C_MOD] = FM_NM;
$MCB_SCHEDULE_CCB (.CCB);
TRUE
end; !of routine NSP_SET_ADDRESS
routine RETURN_NM_CCB (CCB) : LINKAGE_CCB novalue =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
map
CCB : ref block field (C_FIELDS);
$MCB_RETURN_DSR (DSR_LENGTH, .CCB [C_ADDR]);
CCBRT$ (.CCB);
end; !of routine RETURN_NM_CCB
routine SC_ADD_NODE (DB, CCB) : LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
local
NODE_ADDR,
NODE_PTR;
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_NM_FIELDS);
if not $MCB_GET_PROCESS_HANDLE (%rad50_11 'SC', CCB [C_PIX])
then
begin
CCB [C_PRM5] = INILIX;
return FALSE
end;
selectone .CCB [C_PRM3] of
set
[0]: begin
CCB [C_PRM3] = .CCB [C_PRM3] + 1;
CCB [C_PRM4] = SC_ADD_NODE;
NODE_ADDR = .DB [D_ADR];
NODE_PTR = byt$ptr (DB [D_NAM]);
end;
[1]: begin
CCB [C_PRM4] = SC_SET_NODE_ON;
NODE_PTR = byt$ptr (DB [D_HST]);
NODE_ADDR = .DB [D_HAD];
end;
tes;
CCB [C_PRM5] = CRASH_ON_NEGATIVE_STATUS;
if .NODE_ADDR eql 0 then return FALSE;
if ch$rchar (.NODE_PTR) eql %c' ' then return FALSE;
CCB [C_NM_FUNC] = NMX$FNC_SET;
CCB [C_NM_ENTITY] = NMX$ENT_NOD;
begin
literal
PARAM_NUMBER = 500;
local
LEN,
PTR;
PTR = .CCB [C_ADDR];
ch$wchar_a (PARAM_NUMBER and %o'377', PTR);
ch$wchar_a (PARAM_NUMBER^-8 and %o'377', PTR);
LEN = ch$find_ch (6, .NODE_PTR, %c' ');
if ch$fail (.LEN) then
LEN = 6
else LEN = ch$diff (.LEN, .NODE_PTR);
ch$wchar_a (.LEN, PTR);
PTR = ch$move (.LEN, .NODE_PTR, .PTR);
CCB [C_CNT] = PTR = ch$diff (.PTR, .CCB [C_ADDR]);
end;
begin
bind
NMPAR = vector [.CCB [C_ADDR], 5] : vector [4];
local
PTR;
CCB [C_PRM2] = NMPAR;
NMPAR [0] = 0;
NMPAR [1] = 0;
PTR = ch$ptr (NMPAR [2],, 8);
ch$wchar_a (.NODE_ADDR<0, 8, 0>, PTR);
ch$wchar_a (.NODE_ADDR<8, 8, 0>, PTR);
ch$wchar_a (0, PTR);
end;
CCB [C_FNC] = FC_CTL;
CCB [C_MOD] = FM_NM;
$MCB_SCHEDULE_CCB (.CCB);
TRUE
end; !of routine SC_ADD_NODE
routine SC_SET_HOST (DB, CCB) : LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_NM_FIELDS);
if not $MCB_GET_PROCESS_HANDLE (%rad50_11 'SC', CCB[C_PIX])
then
begin
CCB [C_PRM5] = INILIX;
return FALSE
end;
CCB [C_PRM3] = 0;
CCB [C_PRM4] = SC_ADD_NODE;
CCB [C_PRM5] = CRASH_ON_NEGATIVE_STATUS;
if .DB [D_HAD] eql 0 then return FALSE;
CCB [C_NM_FUNC] = NMX$FNC_SET;
CCB [C_NM_ENTITY] = NMX$ENT_NOD;
begin
literal
HOST_PARAM_NUMBER = 141;
local
PTR;
PTR = .CCB [C_ADDR];
ch$wchar_a (HOST_PARAM_NUMBER and %o'377', PTR);
ch$wchar_a (HOST_PARAM_NUMBER^-8 and %o'377', PTR);
ch$wchar_a (.DB [$SUB_FIELD (D_HAD, 0, 0, 8, 0)], PTR);
ch$wchar_a (.DB [$SUB_FIELD (D_HAD, 0, 8, 8, 0)], PTR);
ch$wchar_a (0, PTR);
CCB [C_CNT] = PTR = ch$diff (.PTR, .CCB [C_ADDR]);
end;
begin
bind
NMPAR = vector [.CCB [C_ADDR], 5] : vector [4];
local
PTR;
CCB [C_PRM2] = NMPAR;
NMPAR [0] = 0;
NMPAR [1] = 0;
PTR = ch$ptr (NMPAR [2],, 8);
ch$wchar_a (.DB [$SUB_FIELD (D_HAD, 0, 0, 8, 0)], PTR);
ch$wchar_a (.DB [$SUB_FIELD (D_HAD, 0, 8, 8, 0)], PTR);
ch$wchar_a (0, PTR);
end;
CCB [C_FNC] = FC_CTL;
CCB [C_MOD] = FM_NM;
$MCB_SCHEDULE_CCB (.CCB);
TRUE
end; !of routine SC_SET_HOST
routine SC_SET_NODE_ON (DB, CCB) : LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_NM_FIELDS);
if not $MCB_GET_PROCESS_HANDLE (%rad50_11 'SC', CCB [C_PIX])
then
begin
CCB [C_PRM5] = INILIX;
return FALSE
end;
CCB [C_PRM4] = INILIX;
CCB [C_PRM5] = CRASH_ON_NEGATIVE_STATUS;
CCB [C_NM_FUNC] = NMX$FNC_SET;
CCB [C_NM_ENTITY] = NMX$ENT_NOD;
begin
literal
PARAM_NUMBER = 0;
local
PTR;
PTR = .CCB [C_ADDR];
ch$wchar_a (PARAM_NUMBER and %o'377', PTR);
ch$wchar_a (PARAM_NUMBER^-8 and %o'377', PTR);
ch$wchar_a (0, PTR);
CCB [C_CNT] = PTR = ch$diff (.PTR, .CCB [C_ADDR]);
end;
begin
bind
NMPAR = vector [.CCB [C_ADDR], 5] : vector [4];
local
PTR;
CCB [C_PRM2] = NMPAR;
NMPAR [0] = 0;
NMPAR [1] = 0;
PTR = ch$ptr (NMPAR [2],, 8);
ch$wchar_a (.DB [$SUB_FIELD (D_ADR, 0, 0, 8, 0)], PTR);
ch$wchar_a (.DB [$SUB_FIELD (D_ADR, 0, 8, 8, 0)], PTR);
ch$wchar_a (0, PTR);
end;
CCB [C_FNC] = FC_CTL;
CCB [C_MOD] = FM_NM;
$MCB_SCHEDULE_CCB (.CCB);
TRUE
end; !of routine SC_SET_NODE_ON
routine XPT_INITIALIZE (DB, CCB) : LINKAGE_DB_CCB =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
! None
!
! IMPLICIT INPUTS:
! None
!
! IMPLICIT OUTPUTS:
! None
!
! ROUTINE VALUE:
! COMPLETION CODES:
! None
!
! SIDE EFFECTS:
! None
!--
begin
map
DB : ref block field (D_FIELDS),
CCB : ref block field (C_FIELDS);
if not $MCB_GET_PROCESS_HANDLE (%rad50_11 'XPT', CCB [C_PIX])
then
begin
CCB [C_PRM5] = INILIX;
return FALSE
end;
CCB [C_PRM3] = 0;
CCB [C_PRM4] = NSP_SET_ADDRESS;
CCB [C_PRM5] = CRASH_ON_NEGATIVE_STATUS;
CCB [C_PRM1] = .DB [D_ADR];
CCB [C_FNC] = FC_CTL;
CCB [C_MOD] = 0;
$MCB_SCHEDULE_CCB (.CCB);
TRUE
end; !of routine XPT_INITIALIZE
end
eludom