IDENTIFICATION DIVISION.

PROGRAM-ID.		CHECKSYS.
AUTHOR.		BOB RIBOKAS.
INSTALLATION.	TERADYNE, INC.
DATE-WRITTEN.	OCTOBER 27, 1986.
DATE-COMPILED.	TODAY.

********************************************************************************
*                                                                              *
*   CHECK SYSTEM TO SEE IF ANYONE IS RUNNING A GIVEN IMAGE OR PROCESS.         *
*                                                                              *
*   Calling sequence:                                                          *
*                                                                              *
*     CALL "CHECKSYS" USING                                                    *
*      BY REFERENCE WS-MODE-FLAG, WS-IMAGE-OR-PROCESS-NAME, WS-PROCESS-COUNT.  *
*                                                                              *
*   WS-MODE-FLAG shuld be defined as PIC X(1) and should contain an "I" if     *
*   you wish to check for a given image name or a "P" if you wish to check     *
*   for a particular process name. WS-IMAGE-OR-PROCESS-NAME should be defined  *
*   as PIC X(128) and should contain the name of the image or process that you *
*   want to check for. Note that the subroutine will do partial matching on    *
*   the program or process name given. For example, if you call it with "RP"   *
*   in WS-IMAGE-OR-PROCESS-NAME it will count any image names that start with  *
*   "RP", i.e. RP2000, RP2001, RP2010, etc.                                    *
*                                                                              *
*   WS-PROCESS-COUNT should be defined as PIC 9(4), USAGE IS COMP and will     *
*   contain the number of processes that matched the given                     *
*   WS-IMAGE-OR-PROCESS-NAME.                                                  *
*                                                                              *
*   NOTE: Any program that calls this routine will need to either have WORLD   *
*         privileges enabled prior to being run or be INSTALLed with WORLD     *
*         privileges.                                                          *
*                                                                              *
********************************************************************************

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.

SOURCE-COMPUTER. VAX-11.
OBJECT-COMPUTER. VAX-11.

DATA DIVISION.

WORKING-STORAGE SECTION.

01	WS-DOING-SYSTAT-FLAG		PIC S9(9), COMP.

	88 WS-DOING-SYSTAT		VALUE 1.
	88 WS-SYSTAT-DONE		VALUE 0.

01	WS-WILDCARD-PID			PIC S9(9), COMP.

01	WS-ITEM-LIST.

	02 FILLER	PIC S9(4),	COMP,	VALUE 128.
	02 FILLER	PIC S9(4),	COMP,	VALUE EXTERNAL JPI$_IMAGNAME.
	02 FILLER	POINTER,		VALUE REFERENCE WS-IMAGE-NAME.
	02 FILLER	POINTER,		VALUE REFERENCE WS-IMAGE-SIZE.

	02 FILLER	PIC S9(4),	COMP,	VALUE 15.
	02 FILLER	PIC S9(4),	COMP,	VALUE EXTERNAL JPI$_PRCNAM.
	02 FILLER	POINTER,		VALUE REFERENCE WS-PROCESS-NAME.
	02 FILLER	PIC S9(9),	COMP,	VALUE ZERO.

	02 FILLER	PIC S9(4),	COMP,	VALUE 7.
	02 FILLER	PIC S9(4),	COMP,	VALUE EXTERNAL JPI$_TERMINAL.
	02 FILLER	POINTER,		VALUE REFERENCE WS-TERMINAL.
	02 FILLER	PIC S9(9),	COMP,	VALUE ZERO.

	02 FILLER	PIC S9(4),	COMP,	VALUE 12.
	02 FILLER	PIC S9(4),	COMP,	VALUE EXTERNAL JPI$_USERNAME.
	02 FILLER	POINTER,		VALUE REFERENCE WS-USERNAME.
	02 FILLER	PIC S9(9),	COMP,	VALUE ZERO.

	02 FILLER	PIC S9(9),	COMP,	VALUE ZERO.

01	WS-GETJPI-ITEMS.

	02 WS-IMAGE-NAME			PIC X(128).
	02 WS-IMAGE-SIZE			PIC S9(9), COMP.
	02 WS-PROCESS-NAME			PIC X(15).
	02 WS-TERMINAL				PIC X(7).
	02 WS-USERNAME				PIC X(12).

01	STAT					PIC S9(9), COMP.

01	SS-NOPRIV				PIC S9(9), COMP,
						 VALUE EXTERNAL SS$_NOPRIV.

01	SS-NOMOREPROC				PIC S9(9), COMP,
						 VALUE EXTERNAL SS$_NOMOREPROC.

01	WS-TALLY				PIC 9(4), COMP.

01	WS-PTR					PIC 9(4), COMP.

01	WS-PROGRAM-NAME				PIC X(128).

LINKAGE SECTION.

01	LINK-MODE-FLAG				PIC X(1).

	88 LINK-LOOK-FOR-IMAGE			VALUE "I".
	88 LINK-LOOK-FOR-PROCESS		VALUE "P".

01	LINK-PROGRAM-NAME			PIC X(128).

01	LINK-PROGRAM-BEING-RUN-FLAG		PIC S9(4), COMP.

	88 LINK-PROGRAM-BEING-RUN		VALUES 1 THRU 9999.
	88 LINK-PROGRAM-NOT-BEING-RUN		VALUE 0.

PROCEDURE DIVISION
	USING LINK-MODE-FLAG, LINK-PROGRAM-NAME, LINK-PROGRAM-BEING-RUN-FLAG.

0000-MAIN-PROGRAM SECTION.
0001-INIT.

	MOVE ZERO TO WS-TALLY.
	INSPECT LINK-PROGRAM-NAME
	 TALLYING WS-TALLY FOR CHARACTERS BEFORE INITIAL SPACE.

	MOVE -1 TO WS-WILDCARD-PID.

	SET WS-DOING-SYSTAT TO TRUE.
	SET LINK-PROGRAM-NOT-BEING-RUN TO TRUE.

	PERFORM 1000-SYSTAT-LOOP UNTIL WS-SYSTAT-DONE.

	EXIT PROGRAM.

1000-SYSTAT-LOOP SECTION.
1001-INIT.

	CALL "SYS$GETJPIW" USING	BY VALUE 0,
					BY REFERENCE WS-WILDCARD-PID,
					BY VALUE 0,
					BY REFERENCE WS-ITEM-LIST,
					BY VALUE 0,
					BY VALUE 0,
					BY VALUE 0
	 GIVING STAT.

	IF STAT = SS-NOPRIV
		GO TO 1999-EXIT.

	IF STAT = SS-NOMOREPROC
		SET WS-SYSTAT-DONE TO TRUE
		GO TO 1999-EXIT.

	IF LINK-LOOK-FOR-PROCESS
		IF WS-PROCESS-NAME (1 : WS-TALLY)
		 = LINK-PROGRAM-NAME (1 : WS-TALLY)
			ADD 1 TO LINK-PROGRAM-BEING-RUN-FLAG
		END-IF
	ELSE
		PERFORM VARYING WS-PTR FROM 128 BY -1
		 UNTIL WS-PTR = 1 OR WS-IMAGE-NAME (WS-PTR : 1) = "]"
			CONTINUE
		END-PERFORM
		ADD 1 TO WS-PTR
		MOVE SPACES TO WS-PROGRAM-NAME
		UNSTRING WS-IMAGE-NAME DELIMITED BY "."
		 INTO WS-PROGRAM-NAME
		  WITH POINTER WS-PTR
		IF WS-PROGRAM-NAME (1 : WS-TALLY)
		 = LINK-PROGRAM-NAME (1 : WS-TALLY)
			ADD 1 TO LINK-PROGRAM-BEING-RUN-FLAG.

1999-EXIT.

	EXIT.
