Google
 

Trailing-Edge - PDP-10 Archives - BB-R595B-SM_11-9-85 - mcb/nmx/nmxine.bli
There is 1 other file named nmxine.bli in the archive. Click here to see a list.
module NMXINE (					! Database Maintenance
		ident = 'X01110'
		) =
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: MCB Network Management
!
! ABSTRACT:
!
!	NMXINI supplies functions which allow maintenance of the NMX
!	LINE/CIRCUIT/MODULE data bases.
!
! ENVIRONMENT: MCB V3.2
!
! AUTHOR: Scott G. Robinson	CREATION DATE: 12-FEB-81
!
! MODIFIED BY:
!
! 01 - Add additional routines to support interrogation of Entity Data bases
! 02 - Add yet another routine for interrogation of Entity Data Bases
! 03 - Fix routines to call GET_??? correctly
! 04 - Add support for DLX items
! 05 - Add parameter services for DLL.
!      NOTE: Unable to complete because of no access to executor number/name.
! 06 - Fix to not include name length in name in $NPNAM.
! 07 - Create JMPs to routine from special psect to allow easy modification.
! 08 - Change line/circuit references to common link block
! 09 - Use new entity data bases.
!       Alan D. Peckham, 14-Apr-82
! 10 - Rework for NM support.
!      Data bases restructured.
! 11 - Check input id string lengths for all calls.
!--

!
! INCLUDE FILES:
!

library 'XPORTX';

library 'MCBLIB';

library 'NMXPAR';

library 'NMXLIB';

literal
    NMX$ID_lo = min (NMX$ID_owner, NMX$ID_provider),
    NMX$ID_hi = max (NMX$ID_owner, NMX$ID_provider);

!
! TABLE OF CONTENTS:
!

forward routine
    NMX$$CREATE : CALL$,	    ! NMX$CREATE functions
    NMX$$DESTROY : CALL$,	    ! NMX$DESTROY functions
    NMX$$MAP : CALL$,		    ! NMX$MAP functions
    NMX$$MODIFY_ID : CALL$,	    ! NMX$MODIFY id functions
    NMX$$MODIFY_NAME : CALL$,	    ! NMX$MODIFY name functions
    NMX$$OBTAIN : CALL$,	    ! NMX$OBTAIN functions
    NMX$$PARAMETER_NAME : CALL$,    ! NMX$PARAMETER_x
    NMX$$PARAMETER_OWNER : CALL$,   ! NMX$PARAMETER_x_OWNER
    NMX$$PARAMETER_USER : CALL$;    ! NMX$_x_USER

literal JUMP_TO = %o'137';

psect
    global = NMXJMP (nowrite, execute);

global
    $NMCRE : vector [2] initial (JUMP_TO, NMX$$CREATE),
    $NMDES : vector [2] initial (JUMP_TO, NMX$$DESTROY),
    $NMMID : vector [2] initial (JUMP_TO, NMX$$MODIFY_ID),
    $NMMNA : vector [2] initial (JUMP_TO, NMX$$MODIFY_NAME),
    $NMMAP : vector [2] initial (JUMP_TO, NMX$$MAP),
    $NMGID : vector [2] initial (JUMP_TO, NMX$$OBTAIN),
    $NPNAM : vector [2] initial (JUMP_TO, NMX$$PARAMETER_NAME),
    $NPOWN : vector [2] initial (JUMP_TO, NMX$$PARAMETER_OWNER),
    $NPUSR : vector [2] initial (JUMP_TO, NMX$$PARAMETER_USER);

undeclare JUMP_TO;
!
! Externals
!

external
    MCB$GAW_PROCESS_DATA_BASE : vector [2];

macro				    ! Map to NMXPAR's representation
    $true = true %,
    $false = false %;

!
routine NMX$$CREATE (IN_TYPE, IN_PTR, IN_FLAGS, OUT_NMXID) : CALL$ = 	! NMX$CREATE

!++
! FUNCTIONAL DESCRIPTION:
!
!    NMX$$CREATE processes the creation of an NMX database entry for
!    an entity. This routine is called from the following interprocess
!    synchronous calls:
!
!        NMX$CREATE_CIRCUIT  (NMXPIX, NAME_PTR, FLAGS, NMXID);
!        NMX$CREATE_LINE
!        NMX$CREATE_MODULE
!
! FORMAL PARAMETERS:
!
!    .IN_TYPE - the type of entity (CIRCUIT, LINE, or MODULE)
!    .IN_PTR  - a pointer to the name string in I-16 format
!    .IN_FLAGS - the flags associated with this entity
!    .OUT_NMXID - the address of where to return NMX's Internal Id
!
! IMPLICIT INPUTS:
!
!	NMXDB items pointing to database entries
!
! IMPLICIT OUTPUTS:
!
!       NMXDB items created
!
! ROUTINE VALUE:
!
!	$true - operation successful
!       $false - operation failed
!
! SIDE EFFECTS:
!
!	None
!--

    begin

    map
        IN_TYPE : NMX_TYPE_BLOCK;

    macro
	$return (VALUE) =
	    begin
            local STATUS; STATUS = VALUE;
	    MAP$ (.PREVIOUS_MAP);
            .OUT_NMXID = .NMXID;
	    return .STATUS
	    end %;

    local
	ID : vector [byt$allocation (17)],
	ENTBLK : ref NMX_GENERAL_BLOCK,
	NMXID,
	PREVIOUS_MAP;

    bind
        FREE_PTR = byt$ptr (uplit (%char (0))),
        ID_PTR = byt$ptr (ID);

!
! Copy items from calling process space to ours
!
    if ch$rchar (.IN_PTR) gtru 16 then return $false;
    ch$move ((ch$rchar (.IN_PTR) + 1), .IN_PTR, ID_PTR);
    NMXID = ..OUT_NMXID;
    SMAP$ (PREVIOUS_MAP);
!
! See if an entity currently exists for this creation and if so fail
! the creation otherwise create the data base.
!

    if (ENTBLK = $NMX_MAP_ENTITY_ID (.IN_TYPE [N$IENT], ID_PTR)) neqa 0
    then
        $return ($false);

    if (ENTBLK = $NMX_MAP_ENTITY_ID (.IN_TYPE [N$IENT], FREE_PTR)) eqla 0
    then
        $return ($false);

    ENTBLK [GENERAL_SYSTEM_FLAGS] = .IN_FLAGS;
    ch$copy ((ch$rchar (ID_PTR) + 1), ID_PTR, 0, 17, byt$ptr (ENTBLK [GENERAL_NAME]));
    NMXID = .ENTBLK [GENERAL_ID];
!
! Now Exit
!
    $return ($true)
    end;					! of NMX$$CREATE
routine NMX$$DESTROY (IN_TYPE, IN_PTR) : CALL$ = 	! NMX$DESTROY

!++
! FUNCTIONAL DESCRIPTION:
!
!    NMX$$DESTROY invalidates an NMX entity database.
!    This routine is called from the following interprocess
!    synchronous calls:
!
!        NMX$DESTROY_CIRCUIT  (NMXPIX, NAME_PTR);
!        NMX$DESTROY_LINE
!        NMX$DESTROY_MODULE
!
! FORMAL PARAMETERS:
!
!    .IN_TYPE - the type of entity (CIRCUIT, LINE, or MODULE)
!    .IN_PTR  - a pointer to the name string in I-16 format
!
! IMPLICIT INPUTS:
!
!	NMXDB items pointing to database entries
!
! IMPLICIT OUTPUTS:
!
!       NMXDB items created
!
! ROUTINE VALUE:
!
!	$true - operation successful
!       $false - operation failed
!
! SIDE EFFECTS:
!
!	None
!--

    begin

    map
        IN_TYPE : NMX_TYPE_BLOCK;

    macro
	$return (VALUE) =
	    begin
            local STATUS; STATUS = VALUE;
	    MAP$ (.PREVIOUS_MAP);
	    return .STATUS
	    end %;

    local
	ID : vector [byt$allocation (17)],
	ENTBLK : ref NMX_GENERAL_BLOCK,
	PREVIOUS_MAP;

    bind
        ID_PTR = byt$ptr (ID);

!
! Copy items from calling process space to ours
!
    if ch$rchar (.IN_PTR) gtru 16 then return $false;
    ch$move ((ch$rchar (.IN_PTR) + 1), .IN_PTR, ID_PTR);
    SMAP$ (PREVIOUS_MAP);
!
! See if an entity currently exists; if it doesn't return failure else
! invalidate the entity.
!
    if (ENTBLK = $NMX_MAP_ENTITY_ID (.IN_TYPE [N$IENT], ID_PTR)) eqla 0
    then
	$return ($false);

!
! Release the block by zeroing the ID length.
!
    ch$wchar (0, byt$ptr (ENTBLK [GENERAL_NAME]));
!
! Now Exit
!
    $return ($true)
    end;					! of NMX$$DESTROY
routine NMX$$MAP (IN_NMXID, OUT_TYPE, OUT_PTR) : CALL$ = 	! NMX$MAP functions

!++
! FUNCTIONAL DESCRIPTION:
!
!    NMX$$MAP maps the NMXID back to the type and string.
!    This routine is called from the following interprocess
!    synchronous calls:
!
!        NMX$MAP_NMXID (NMXPIX, NMXID, TYPE, NAME_PTR);
!
! FORMAL PARAMETERS:
!
!    .IN_NMXID - NMX's Internal Id
!    .OUT_TYPE - address of where to store the NMX_TYPE fields
!    .OUT_PTR - pointer to where to store the Id string (must be 17 bytes long)
!
!
! IMPLICIT INPUTS:
!
!	NMXDB items pointing to database entries
!
! IMPLICIT OUTPUTS:
!
!       NMXDB items created
!
! ROUTINE VALUE:
!
!	$true - operation successful
!       $false - operation failed
!
! SIDE EFFECTS:
!
!	None
!--

    begin

    macro
	$return (VALUE) =
	    begin
            local STATUS; STATUS = VALUE;
	    MAP$ (.PREVIOUS_MAP);
	    return .STATUS
	    end %;

    map
	OUT_TYPE : ref NMX_TYPE_BLOCK;

    local
	ID : vector [byt$allocation (17)],
	ENTBLK : ref NMX_GENERAL_BLOCK,
	PREVIOUS_MAP;

    bind
       ID_PTR = byt$ptr (ID);

!
! Copy items from calling process space to ours
!
    SMAP$ (PREVIOUS_MAP);
!
! Search appropriate data base for entity
!

    if (ENTBLK = $NMX_MAP_NMXID (.IN_NMXID)) eqla 0
    then
	$return ($false);

!
! Ok, copy the ID string to local storage
!
    ch$move ((.ENTBLK [GENERAL_NAME_LENGTH] + 1), byt$ptr (ENTBLK [GENERAL_NAME]), ID_PTR);
!
! Now Exit and return information
!
    MAP$ (.PREVIOUS_MAP);
    OUT_TYPE [N$IENT] = .IN_NMXID<8, 8, 0>;
    ch$move ((ch$rchar (ID_PTR) + 1), ID_PTR, .OUT_PTR);
    $true
    end;					! of NMX$$MAP
routine NMX$$MODIFY_ID (IN_TYPE, IN_PTR, IN_ID, OUT_NMXID) : CALL$ = 	! NMX$MODIFY id

!++
! FUNCTIONAL DESCRIPTION:
!
!    NMX$$MODIFY_ID modifies an NMX entity data base entry.
!    This routine is called from the following interprocess
!    synchronous calls:
!
!        NMX$MODIFY_CIRCUIT_{OWNER or PROVIDER}  (NMXPIX, NAME_PTR, ID, NMXID);
!        NMX$MODIFY_LINE
!        NMX$MODIFY_MODULE
!
! FORMAL PARAMETERS:
!
!    .IN_TYPE - the type of entity (CIRCUIT, LINE, or MODULE)
!                                  and ID (OWNER or PROVIDER)
!    .IN_PTR  - a pointer to the name string in I-16 format
!    .IN_ID  - the ID to put in NMX's data base
!    .OUT_NMXID - the address of where to return NMX's ID for this entity
!
! IMPLICIT INPUTS:
!
!	NMXDB items pointing to database entries
!
! IMPLICIT OUTPUTS:
!
!       NMXDB items created
!
! ROUTINE VALUE:
!
!	$true - operation successful
!       $false - operation failed
!
! SIDE EFFECTS:
!
!	None
!--

    begin

    map
        IN_TYPE : NMX_TYPE_BLOCK;

    macro
	$return (VALUE) =
	    begin
            local STATUS; STATUS = VALUE;
	    MAP$ (.PREVIOUS_MAP);
            .OUT_NMXID = .NMXID;
	    return .STATUS
	    end %;

    local
	ID : vector [byt$allocation (17)],
	EID,
	ENTBLK : ref block field (NMX_GENERAL_FIELDS, NMX_LINK_FIELDS, NMX_CIRCUIT_FIELDS, NMX_LINE_FIELDS, NMX_MODULE_FIELDS),
	NMXID,
	PREVIOUS_MAP;

    bind
       ID_PTR = byt$ptr (ID);

!
! Copy items from calling process space to ours
!
    if ch$rchar (.IN_PTR) gtru 16 then return $false;
    ch$move ((ch$rchar (.IN_PTR) + 1), .IN_PTR, ID_PTR);
    EID = .IN_ID;
    NMXID = ..OUT_NMXID;
    SMAP$ (PREVIOUS_MAP);
!
! See if an entity currently exists; if it doesn't return failure else
! update the requested item.
!
    if (ENTBLK = $NMX_MAP_ENTITY_ID (.IN_TYPE [N$IENT], ID_PTR)) eqla 0
    then
	$return ($false);

!
! We now have the entity update according to requested item
!

    case .IN_TYPE [N$FFNC] from NMX$ID_lo to NMX$ID_hi of
	set

	[NMX$ID_owner] :
	    begin

	    if (.IN_TYPE [N$IENT] eql NMX$ENT_ckt) or (.IN_TYPE [N$IENT] eql NMX$ENT_lin)
	    then

		if .ENTBLK [LINK_LUN_BLOCK] eql 0 then ENTBLK [LINK_USER_ID] = .EID;

	    ENTBLK [GENERAL_OWNER_ID] = .EID;
	    end;

	[NMX$ID_provider] :
	    ENTBLK [GENERAL_PROVIDER_ID] = .EID;

	[inrange, outrange] :
	    $return ($false);
	tes;

    NMXID = .ENTBLK [GENERAL_ID];
!
! Now Exit
!
    $return ($true)
    end;					! of NMX$$MODIFY_ID
routine NMX$$MODIFY_NAME (IN_TYPE, IN_PTR, IN_NEW, OUT_NMXID) : CALL$ = 	! NMX$MODIFY name

!++
! FUNCTIONAL DESCRIPTION:
!
!    NMX$$MODIFY_NAME modifies the name of an entity without affecting
!    any other items in that data base.
!    This routine is called from the following interprocess
!    synchronous calls:
!
!        NMX$MODIFY_CIRCUIT_NAME  (NMXPIX, NAME_PTR, NEW_PTR, NMXID);
!        NMX$MODIFY_LINE_NAME
!        NMX$MODIFY_MODULE_NAME
!
! FORMAL PARAMETERS:
!
!    .IN_TYPE - the type of entity (CIRCUIT, LINE, or MODULE)
!    .IN_PTR  - a pointer to the name string in I-16 format
!    .IN_NEW  - a pointer to the new name string in I-16 format
!    .OUT_NMXID - address of where to return NMX's Internal Id
!
! IMPLICIT INPUTS:
!
!	NMXDB items pointing to database entries
!
! IMPLICIT OUTPUTS:
!
!       NMXDB items created
!
! ROUTINE VALUE:
!
!	$true - operation successful
!       $false - operation failed
!
! SIDE EFFECTS:
!
!	None
!--

    begin

    map
        IN_TYPE : NMX_TYPE_BLOCK;

    macro
	$return (VALUE) =
	    begin
            local STATUS; STATUS = VALUE;
	    MAP$ (.PREVIOUS_MAP);
            .OUT_NMXID = .NMXID;
	    return .STATUS
	    end %;

    local
	OLD_ID : vector [byt$allocation (17)],
	NEW_ID : vector [byt$allocation (17)],
	ENTBLK : ref NMX_GENERAL_BLOCK,
	NMXID,
	PREVIOUS_MAP;

    bind
       OLD_ID_PTR = byt$ptr (OLD_ID),
       NEW_ID_PTR = byt$ptr (NEW_ID);

!
! Copy items from calling process space to ours
!
    if ch$rchar (.IN_PTR) gtru 16 then return $false;
    ch$move ((ch$rchar (.IN_PTR) + 1), .IN_PTR, OLD_ID_PTR);
    if ch$rchar (.IN_NEW) gtru 16 then return $false;
    ch$move ((ch$rchar (.IN_NEW) + 1), .IN_NEW, NEW_ID_PTR);
    NMXID = ..OUT_NMXID;
    SMAP$ (PREVIOUS_MAP);
!
! See if an entity currently exists; if it doesn't return failure else
! update the name.
!
    if (ENTBLK = $NMX_MAP_ENTITY_ID (.IN_TYPE [N$IENT], OLD_ID_PTR)) eqla 0
    then
	$return ($false);

!
! We now have the entity update the name
!
    ch$copy ((ch$rchar (NEW_ID_PTR) + 1), NEW_ID_PTR, 0, 17, byt$ptr (ENTBLK [GENERAL_NAME]));
    NMXID = .ENTBLK [GENERAL_ID];
!
! Now Exit
!
    $return ($true)
    end;					! of NMX$$MODIFY_NAME
routine NMX$$OBTAIN (IN_TYPE, IN_PTR, OUT_ID, OUT_NMXID) : CALL$ = 	! NMX$OBTAIN functions

!++
! FUNCTIONAL DESCRIPTION:
!
!    NMX$$OBTAIN is called to obtain IDs from the Entity Data bases.
!    This routine is called from the following interprocess
!    synchronous calls:
!
!        NMX$OBTAIN_CIRCUIT_OWNER (NMXPIX, TYPE, NAME_PTR, OWNER_ID, NMXID);
!                   LINE    PROVIDER                       PROVIDER_ID
!                   MODULE
!
! FORMAL PARAMETERS:
!
!    .IN_TYPE - The NMX_TYPE fields
!    .IN_PTR - pointer to the Id string
!    .OUT_ID - points to where the returned OWNER or PROVIDER ID is stored
!    .OUT_NMXID - points to where the returned NMX Internal Id is stored
!
!
! IMPLICIT INPUTS:
!
!	NMXDB items pointing to database entries
!
! IMPLICIT OUTPUTS:
!
!       NMXDB items created
!
! ROUTINE VALUE:
!
!	$true - operation successful
!       $false - operation failed
!
! SIDE EFFECTS:
!
!	None
!--

    begin

    map
        IN_TYPE : NMX_TYPE_BLOCK;

    macro
	$return (VALUE) =
	    begin
            local STATUS; STATUS = VALUE;
	    MAP$ (.PREVIOUS_MAP);
	    return .STATUS
	    end %;

    local
	ID : vector [byt$allocation (17)],
	NMXID,
	ENTITY_ID,
	ENTBLK : ref NMX_GENERAL_BLOCK,
	PREVIOUS_MAP;

    bind
        ID_PTR = byt$ptr (ID);

!
! Copy items from calling process space to ours
!
    if ch$rchar (.IN_PTR) gtru 16 then return $false;
    ch$move ((ch$rchar (.IN_PTR) + 1), .IN_PTR, ID_PTR);
    SMAP$ (PREVIOUS_MAP);
!
! Search appropriate data base for entity
!

    if (ENTBLK = $NMX_MAP_ENTITY_ID (.IN_TYPE [N$IENT], ID_PTR)) eqla 0
    then
	$return ($false);

!
! We now have the entity update according to requested item
!

    case .IN_TYPE [N$FFNC] from NMX$ID_lo to NMX$ID_hi of
	set

	[NMX$ID_owner] :
	    ENTITY_ID = .ENTBLK [GENERAL_OWNER_ID];

	[NMX$ID_provider] :
	    ENTITY_ID = .ENTBLK [GENERAL_PROVIDER_ID];

	[inrange, outrange] :
	    $return ($false);
	tes;

    NMXID = .ENTBLK [GENERAL_ID];
!
! Now Exit and return information
!
    MAP$ (.PREVIOUS_MAP);
    .OUT_ID = .ENTITY_ID;
    .OUT_NMXID = .NMXID;
    $true
    end;					! of NMX$$OBTAIN
routine NMX$$PARAMETER_NAME (IN_TYPE, IN_NMXID, IN_NUM) : CALL$ = 	! NMX$PARAMETER_x

!++
! FUNCTIONAL DESCRIPTION:
!
!    NMX$$PARAMETER_NAME supplies the entity name for a specified
!    parameter number.  This routine is called from the following
!    interprocess synchronous calls:
!
!        NMX$PARAMETER_CIRCUIT (NMXPIX, NMXID, PRM_NUM);
!                      LINE
!                      MODULE
!
! FORMAL PARAMETERS:
!
!    .IN_TYPE - The NMX_TYPE fields
!    .IN_NMXID - NMX's Internal Id
!    .IN_NUM - The parameter number
!
!
! IMPLICIT INPUTS:
!
!	NMXDB items pointing to database entries
!
! IMPLICIT OUTPUTS:
!
!       NMXDB items created
!
! ROUTINE VALUE:
!
!	$true - operation successful
!       $false - operation failed
!
! SIDE EFFECTS:
!
!	None
!--

    begin

    map
        IN_TYPE : NMX_TYPE_BLOCK;

    macro
	$return (VALUE) =
	    begin
            local STATUS; STATUS = VALUE;
	    MAP$ (.PREVIOUS_MAP);
	    return .STATUS
	    end %;

    local
	ENTBLK : ref NMX_GENERAL_BLOCK,
	PREVIOUS_MAP;

    SMAP$ (PREVIOUS_MAP);
!
! Search appropriate data base for entity
!

    if (ENTBLK = $NMX_MAP_NMXID (.IN_NMXID)) eqla 0
    then
	$return ($false);

!
! Ok, insert the name as the given parameter
!
    PARAMETER_AI (.IN_NUM, .ENTBLK [GENERAL_NAME_LENGTH], byt$ptr (ENTBLK [GENERAL_NAME], 1));
!
! Now Exit and return information
!
    $return ($true)
    end;					! of NMX$$PARAMETER_NAME
routine NMX$$PARAMETER_OWNER (IN_TYPE, IN_NMXID, IN_NUM) : CALL$ = 	! NMX$PARAMETER_x_OWNER

!++
! FUNCTIONAL DESCRIPTION:
!
!    NMX$$PARAMETER_OWNER supplies the entity owner for a specified
!    parameter number.  This routine is called from the following
!    interprocess synchronous calls:
!
!        NMX$PARAMETER_CIRCUIT_OWNER (NMXPIX, NMXID, PRM_NUM);
!
! FORMAL PARAMETERS:
!
!    .IN_TYPE - The NMX_TYPE fields
!    .IN_NMXID - NMX's Internal Id
!    .IN_NUM - The parameter number
!
!
! IMPLICIT INPUTS:
!
!	NMXDB items pointing to database entries
!
! IMPLICIT OUTPUTS:
!
!       NMXDB items created
!
! ROUTINE VALUE:
!
!	$true - operation successful
!       $false - operation failed
!
! SIDE EFFECTS:
!
!	None
!--

    begin

    map
        IN_TYPE : NMX_TYPE_BLOCK;

    macro
	$return (VALUE) =
	    begin
            local STATUS; STATUS = VALUE;
	    MAP$ (.PREVIOUS_MAP);
	    return .STATUS
	    end %;

    bind
	NMXDB = MCB$GAW_PROCESS_DATA_BASE [1] : ref NMXDB_BLOCK;

    local
	ENTBLK : ref NMX_CIRCUIT_BLOCK,
	PREVIOUS_MAP;

    SMAP$ (PREVIOUS_MAP);
!
! Search appropriate data base for entity
!

    if (ENTBLK = $NMX_MAP_NMXID (.IN_NMXID)) eqla 0
    then
	$return ($false);

!
! Ok, insert the owner as the given parameter
!

    if .ENTBLK [GENERAL_OWNER_ID] eql 0 then $return ($true);

    if $true %(owner is Transport)%
    then
	begin
	PARAMETER_CM (.IN_NUM, 3);
        PARAMETER_C_1 (, uplit (0));    ! Node entity
	PARAMETER_DU_2 (, NMXDB [NMX_EXECUTOR_NUMBER]);
	PARAMETER_AI (, .NMXDB [NMX_EXECUTOR_NAME_LENGTH],
	    byt$ptr (NMXDB [NMX_EXECUTOR_NAME], 1));
	end;

!
! Now Exit and return information
!
    $return ($true)
    end;					! of NMX$$PARAMETER_OWNER
routine NMX$$PARAMETER_USER (IN_TYPE, IN_NMXID, IN_NUM) : CALL$ = 	! NMX$PARAMETER_x_USER

!++
! FUNCTIONAL DESCRIPTION:
!
!    NMX$$PARAMETER_USER supplies the entity user for a specified
!    parameter number.  This routine is called from the following
!    interprocess synchronous calls:
!
!        NMX$PARAMETER_CIRCUIT_USER (NMXPIX, NMXID, PRM_NUM);
!
! FORMAL PARAMETERS:
!
!    .IN_TYPE - The NMX_TYPE fields
!    .IN_NMXID - NMX's Internal Id
!    .IN_NUM - The parameter number
!
!
! IMPLICIT INPUTS:
!
!	NMXDB items pointing to database entries
!
! IMPLICIT OUTPUTS:
!
!       NMXDB items created
!
! ROUTINE VALUE:
!
!	$true - operation successful
!       $false - operation failed
!
! SIDE EFFECTS:
!
!	None
!--

    begin

    map
        IN_TYPE : NMX_TYPE_BLOCK;

    literal
        LINK_ON = 0,
        LINK_OFF = 1,
        LINK_SERVICE = 2,
        LINK_CLEARED = 3;

    macro
	$return (VALUE) =
	    begin
            local STATUS; STATUS = VALUE;
	    MAP$ (.PREVIOUS_MAP);
	    return .STATUS
	    end %;

    bind
	NMXDB = MCB$GAW_PROCESS_DATA_BASE [1] : ref NMXDB_BLOCK;

    local
	ENTBLK : ref NMX_CIRCUIT_BLOCK,
	PREVIOUS_MAP;

    SMAP$ (PREVIOUS_MAP);
!
! Search appropriate data base for entity
!

    if (ENTBLK = $NMX_MAP_NMXID (.IN_NMXID)) eqla 0
    then
	$return ($false);

!
! Ok, insert the user as the given parameter
!

    if .ENTBLK [GENERAL_OWNER_ID] eql 0 then $return ($true);

    if .ENTBLK [LINK_STATE] neq LINK_ON then $return ($true);

    if $true %(owner is Transport)%
    then
	begin
	PARAMETER_CM (.IN_NUM, 3);
        PARAMETER_C_1 (, uplit (0));    ! Node entity
	PARAMETER_DU_2 (, NMXDB [NMX_EXECUTOR_NUMBER]);
	PARAMETER_AI (, .NMXDB [NMX_EXECUTOR_NAME_LENGTH],
	    byt$ptr (NMXDB [NMX_EXECUTOR_NAME], 1));
	end;

!
! Now Exit and return information
!
    $return ($true)
    end;					! of NMX$$PARAMETER_USER

end

eludom
! Local Modes:
! Comment Column:36
! Comment Start:!
! Mode:BLISS
! Auto Save Mode:2
! End: