******************************************************************************
*                                                                            *
*	SUBROUTINE PARSE(LINE,OUTLEN,PARM1,PARM2,PARMLEN,ERROR)              *
*                                                                            *
*	PURPOSE:  USED BY BOOST TO EXTRACT PARAMETERS 1 AND 2                *
*	          FROM INPUT COMMAND LINE                                    *
*                                                                            *
****************************************************************************** 

	SUBROUTINE PARSE(LINE,OUTLEN,PARM1,PARM2,PARMLEN,ERROR,EXE_FLAG)

	IMPLICIT INTEGER (A-Z)

	CHARACTER*(*) LINE
	INTEGER*4 OUTLEN
	INTEGER*4 PARM1
	CHARACTER*(*) PARM2
	LOGICAL ERROR
	LOGICAL EXE_FLAG
	LOGICAL ISDIGIT

	PARM1 = 0
	PARMLEN = 0

*********************************************************************
*                                                                   *
*	IMPLEMENTED AS A FINITE STATE AUTOMATON WITH EIGHT STATES   *
*                                                                   *
*********************************************************************

*********************************************************************
*                                                                   *
*	INITIALIZE CURSOR AND TERMINATE INPUT LINE WITH A '$'       *
*                                                                   *
*********************************************************************

	CURSOR=1
	LINE(OUTLEN+1:OUTLEN+1)='$'

**********************
*	STATE 1      *
**********************

   1    CONTINUE

	IF(LINE(CURSOR:CURSOR).EQ.'$') GO TO 100
	IF(LINE(CURSOR:CURSOR).EQ.' ') THEN
		CURSOR = CURSOR +1
		GO TO 1
	ENDIF
	IF(ISDIGIT(LINE(CURSOR:CURSOR),VAL))  THEN
		GO TO 2
	ELSE
		GO TO 100
	ENDIF

***********************
*	STATE 2       *
***********************

  2     CONTINUE

	PARM1=PARM1 +VAL
	IF (PARM1 .LT. 1 .OR. PARM1 .GT. 6) THEN
		GO TO 110
	ELSE
		CURSOR = CURSOR + 1
	ENDIF

	IF(LINE(CURSOR:CURSOR).EQ.',') THEN
		CURSOR = CURSOR +1
		GO TO 4
	ENDIF

	IF(LINE(CURSOR:CURSOR).EQ.'$') GO TO 100
	IF(LINE(CURSOR:CURSOR).EQ.' ') THEN
		CURSOR = CURSOR +1
		GO TO 3
	ELSE
		GO TO 100
	ENDIF

**********************
*	STATE 3      *
**********************

  3	CONTINUE

	IF(LINE(CURSOR:CURSOR).EQ.' ') THEN
		CURSOR = CURSOR+1
		GO TO 3
	ELSE  IF(LINE(CURSOR:CURSOR).EQ.'$') THEN
		 GO TO 100
	ELSE  IF(LINE(CURSOR:CURSOR).EQ.',') THEN
		CURSOR = CURSOR+1
		GO TO 4
	ENDIF


**********************
*	STATE 4      *
**********************

   4	CONTINUE

	IF (LINE(CURSOR:CURSOR) .EQ. '$') GO TO 100

	IF (LINE(CURSOR:CURSOR) .EQ. ' ') THEN
		CURSOR = CURSOR + 1
		GO TO 4
	ELSE 
		GO TO 5
	ENDIF

**********************
*	STATE 5      *
**********************

   5	CONTINUE

	PARMLEN = PARMLEN + 1
	PARM2(1:PARMLEN) = PARM2(1:PARMLEN-1) // LINE(CURSOR:CURSOR)
	CURSOR = CURSOR + 1

	IF (LINE(CURSOR:CURSOR) .EQ. '$') THEN
		EXE_FLAG = .TRUE.
		GO TO 8
	ENDIF

	IF (LINE(CURSOR:CURSOR) .EQ. '.') THEN
		PARMLEN = PARMLEN + 1
		PARM2(1:PARMLEN) = PARM2(1:PARMLEN-1) // LINE(CURSOR:CURSOR)
		CURSOR = CURSOR + 1
		GO TO 6
	ELSE 
		GO TO 5
	ENDIF

**********************
*	STATE 6      *
**********************

   6	CONTINUE

	EXT = CURSOR + 2

	IF (LINE(CURSOR:EXT) .EQ. 'EXE') THEN
		EXE_FLAG = .TRUE.
	ELSE
		EXE_FLAG = .FALSE. 
	ENDIF

	PARMLEN = PARMLEN + 3
	PARM2(1:PARMLEN) = PARM2(1:PARMLEN-3) // LINE(CURSOR:EXT)
	CURSOR = CURSOR + 3

**********************
*	STATE 7      *
**********************

   7	CONTINUE

	IF (LINE(CURSOR:CURSOR) .EQ. '$') GO TO 8

	CURSOR = CURSOR + 1
	GO TO 7

**********************
*	STATE 8      *
**********************

   8    CONTINUE

	ERROR = .FALSE.
	RETURN
*********************************
*	ERROR MESSAGES		*
*********************************

  100	CONTINUE
*
	TYPE *,'SYNTAX ERROR IN ARGUMENTS RECEIVED'
	TYPE *,'NEED ARGUMENTS AS FOLLOWS'
	TYPE *,'<PRIORITY>,<IMAGE NAME>'
 
	ERROR = .TRUE.
	RETURN
*
  110	CONTINUE
*
	TYPE *,'PRIORITY VALUE OUT OF RANGE'
	ERROR = .TRUE.
	RETURN
*
	END	
		 	 	
*************************************************************************
*                                                                       *
*                                                                       *
*	LOGICAL FUNCTION ISDIGIT (SYMBOL,VAL)                           *
*                                                                       *
*	PURPOSE: TO FIND A CHARACTER DIGIT, RETURNS TRUE OR FALSE       *
*	         ALSO RETURNS THE INTEGER VALUE OF THE CHAR DIGIT       *
*                                                                       *
*************************************************************************

	LOGICAL FUNCTION ISDIGIT (SYMBOL,VAL)

	IMPLICIT INTEGER (A-Z)
*
	CHARACTER SYMBOL
*
	ISDIGIT = .FALSE.
*
	IF(SYMBOL.EQ.'0') THEN
		VAL = 0
		ISDIGIT =.TRUE.
	ENDIF

	IF(SYMBOL.EQ.'1') THEN
		VAL = 1
		ISDIGIT =.TRUE.
	ENDIF  

	IF(SYMBOL.EQ.'2') THEN
		VAL = 2
		ISDIGIT =.TRUE.
	ENDIF

	IF(SYMBOL.EQ.'3') THEN
		ISDIGIT =.TRUE.
		VAL =  3
	ENDIF

	IF(SYMBOL.EQ.'4') THEN
		VAL = 4
		ISDIGIT =.TRUE.
	ENDIF

	IF(SYMBOL.EQ.'5') THEN
		VAL = 5
		ISDIGIT =.TRUE.
	ENDIF

	IF(SYMBOL.EQ.'6') THEN
		VAL = 6
		ISDIGIT =.TRUE.
	ENDIF

	IF(SYMBOL.EQ.'7') THEN
		ISDIGIT =.TRUE.
		VAL = 7
	ENDIF

	IF(SYMBOL.EQ.'8') THEN
		VAL = 8
		ISDIGIT =.TRUE.

	ENDIF

	IF(SYMBOL.EQ.'9') THEN
		ISDIGIT =.TRUE.
		VAL = 9
	ENDIF

	END

	
