	SUBROUTINE SPAWN_DCL (DCL_CMD, FLAGS)
C
C	This routine is used to spawn a DCL command.
C
C	Inputs:
C	    DCL_CMD - Character string with the DCL command.
C	    FLAGS   - Specifies the flags longword:
C			Bit 0 = NOWAIT   - If set, don't wait for command.
C			Bit 1 = NOCLISYM - If set, don't copy CLI symbols.
C			Bit 2 = NOLOGNAM - If Set, don't copy logical names.
C		
C
	INCLUDE 'COM.INC/NOLIST'

	CHARACTER*(*) DCL_CMD, MODULE_NAME

	PARAMETER (MODULE_NAME = 'SPAWN_DCL')
	INTEGER STATUS, LIB$SPAWN, FLAGS
C
C	Either spawn with a specific command or spawn a new process.
C
C	return_status - LIB$SPAWN (command, input, output, flags, [...])
C
	IF (DCL_CMD .EQ. '$') THEN
	    IF (.NOT. UNIX_MODE) THEN
		CALL WRITE_USER (SS//'*** Spawning a new DCL process, '//
	1			 'LOGOUT to return to VAXNET. ***'//DS)
	    ENDIF
	    STATUS = LIB$SPAWN(,,,FLAGS)	! Create a new process.
	ELSE
	    STATUS = LIB$SPAWN(DCL_CMD,,,FLAGS)	! Spawn the DCL command.
	ENDIF
	CALL CHECK_STATUS (MODULE_NAME,STATUS)	! Report any errors.
	RETURN
	END

	SUBROUTINE PAUSE_VAXNET
C
C	This subroutine is used to ATTACH to the parent process so VAXNET
C	can be paused.  VAXNET actually goes into a hibernate until ATTACHed.
C
	INCLUDE 'COM.INC/NOLIST'
	INCLUDE '($JPIDEF)/NOLIST'

	CHARACTER*(*) MODULE_NAME

	PARAMETER (MODULE_NAME = 'PAUSE_VAXNET')
	CHARACTER*15 PROCESS_NAME
	LOGICAL*1 ITEMS(28)			! Buffer for JPI items list.

	INTEGER*2 OWNER_LEN, OWNER_CODE
	INTEGER*4 OWNER_ADDR, OWNER_RET, OWNER_PID, OWNER_SIZE
	INTEGER*2 PROCESS_LEN, PROCESS_CODE
	INTEGER*4 PROCESS_ADDR, PROCESS_RET, PROCESS_SIZE

	EQUIVALENCE (OWNER_LEN,ITEMS(1))
	EQUIVALENCE (OWNER_CODE,ITEMS(3))
	EQUIVALENCE (OWNER_ADDR,ITEMS(5))
	EQUIVALENCE (OWNER_RET,ITEMS(9))
	EQUIVALENCE (PROCESS_LEN,ITEMS(13))
	EQUIVALENCE (PROCESS_CODE,ITEMS(15))
	EQUIVALENCE (PROCESS_ADDR,ITEMS(17))
	EQUIVALENCE (PROCESS_RET,ITEMS(21))
	EQUIVALENCE (END_ITEMS,ITEMS(25))
C
C	The item descriptor format is:
C
C	31              16 15               0
C	+-----------------------------------+
C	|    item code    |  buffer length  | 1 - 4
C	!-----------------------------------|
C	|           buffer address          | 5 - 8 
C	|-----------------------------------|
C	|       return length address       | 9 - 12
C	+-----------------------------------+
C			  .
C			  .
C	+-----------------------------------+
C	|    The list is terminated by 0    |
C	+-----------------------------------+
C
	OWNER_LEN = 4			! Length of the longword.
	OWNER_CODE = JPI$_OWNER		! Item code for owner PID.
	OWNER_ADDR = %LOC(OWNER_PID)	! Address to store the PID.
	OWNER_RET = %LOC(OWNER_SIZE)	! Address to store length.

	PROCESS_LEN = LEN(PROCESS_NAME)	! Length of the buffer.
	PROCESS_CODE = JPI$_PRCNAM	! Item code for process name.
	PROCESS_ADDR = %LOC(PROCESS_NAME) ! Address to store process name.
	PROCESS_RET = %LOC(PROCESS_SIZE)  ! Address to store process size.

	END_ITEMS = 0			! Terminate the items list.

	STATUS = SYS$GETJPI(,,,ITEMS,LIOSB,,)
	IF (STATUS) THEN
	   IF (OWNER_PID .NE. 0) THEN
		IF (.NOT. UNIX_MODE) THEN
		    CALL WRITE_USER (SS//'*** VAXNET pausing, type ATTACH "'//
	1		PROCESS_NAME(1:PROCESS_SIZE)//'" to resume. *** '//DS)
		ENDIF
		STATUS = LIB$ATTACH (OWNER_PID)
	    ELSE
		CALL WRITE_USER ('*** You must SPAWN VAXNET in order to '//
	1			'pause it. ***'//SS)
	    ENDIF
	ENDIF
	CALL CHECK_STATUS (MODULE_NAME, STATUS)
	RETURN
	END
