C
C
C	ANALYSE DES COMMANDES DE VNET (SEND ET RECEIVE) NIVEAU 6
C	--------------------------------------------------------
C
C V1.0 11/12/84 TD premier jus
C V1.1 07/10/85 TD corrections sur /O
C
C
C
C	DESCRIPTION DE LA SYNTAXE ANALYSEE
C
C	COMMANDE : nom_de_fichier [/O] [/S[K|P]] [/N=nom_de_fichier]
C
C		terminateur de commande : rc, lf ou nul
C		separateur : espace ou slash
C
C	RESULTATS DE L'ANALYSE:
C
C		OK = .TRUE.   : syntaxe correcte
C		     .FALSE.  : erreur de syntaxe
C
C		NFICH(1:LONG_NFICH) : nom de fichier initial
C			et si switch /N= alors nouveau nom de fichier
C
C		pas de switch /O ou /S
C			TEXT = .TRUE. ;  SPOOL = .FALSE.;  KEEP = .TRUE. ;
C		/O
C			TEXT = .FALSE.;  SPOOL = .FALSE.;  KEEP = .TRUE. ;
C		/S ou /SP
C			TEXT = .TRUE. ;  SPOOL = .TRUE. ;  KEEP = .FALSE.;
C		/SK
C			TEXT = .TRUE. ;  SPOOL = .TRUE. ;  KEEP = .TRUE. ;
C
C
C
C
	SUBROUTINE ANALYSE_CDE (BUFFER_INPUT)
C	           -----------
C
	INCLUDE 'PARAMV6.INC/LIST'
C
	BYTE BUFFER_INPUT(LONG_NETV6)
C
C++
	COMMON /ANALYSE/OK,TEXT,SPOOL,KEEP,LONG_NFICH,NFICH
	LOGICAL*1 OK,TEXT,SPOOL,KEEP
	INTEGER LONG_NFICH
	BYTE NFICH(LONG_NETV6)
C--
C
	LOGICAL*1 FIN
	BYTE CAR
	INTEGER I,TYPE_CAR,ETAT
	INTEGER ANALYSE_CAR
C
C
	OK = .TRUE.
	TEXT = .TRUE.
	SPOOL = .FALSE.
	KEEP = .TRUE.
	ETAT = 1
	LONG_NFICH = 1
C
	FIN = .FALSE.
	I = 1
	DO WHILE ((I.LE.LONG_NETV6).AND.(.NOT.FIN))
C
	    CAR = BUFFER_INPUT(I)
	    I = I + 1
	    TYPE_CAR = ANALYSE_CAR (CAR)
C
	    GOTO (1,2,3,4,5,6) ETAT
C
1		CONTINUE
		GOTO (10,20,30,40) TYPE_CAR
C
10		    CONTINUE
C			rc, lf ou nul
		    FIN = .TRUE.
		    GOTO 99
C
20		    CONTINUE
C			espace
		    ETAT = 3
		    GOTO 99
C
30		    CONTINUE
C			slash
		    ETAT = 2
		    GOTO 99
C
40		    CONTINUE
C			autres caracteres
		    NFICH (LONG_NFICH) = CAR
		    LONG_NFICH = LONG_NFICH + 1
		    GOTO 99
C
2		CONTINUE
		GOTO (11,11,11,41) TYPE_CAR
C
11		    CONTINUE
C			rc,lf,nul,slash ou espace
		    OK = .FALSE.
		    FIN = .TRUE.
		    GOTO 99
C
41		    CONTINUE		   
C			autres caracteres
		    IF ((CAR.EQ.'O') .OR. (CAR.EQ.'o')) THEN
			TEXT = .FALSE.
			ETAT = 3
		    ELSE 
			IF ((CAR.EQ.'N') .OR. (CAR.EQ.'n')) THEN
			    ETAT = 4
			ELSE 
			    IF ((CAR.EQ.'S') .OR. (CAR.EQ.'s')) THEN
				SPOOL = .TRUE.
				ETAT = 6
			    ELSE 
				OK = .FALSE.
				FIN = .TRUE.
			    END IF
			END IF
		    END IF
		    GOTO 99
C
C
3		CONTINUE
		GOTO (12,22,32,42) TYPE_CAR
C
12		    CONTINUE
C			rc,lf ou nul
		    FIN = .TRUE.
		    GOTO 99
C
22		    CONTINUE
C			espace
		    GOTO 99
C
32		    CONTINUE
C			slash
		    ETAT = 2
		    GOTO 99
C
42		    CONTINUE
C			autres caracteres
		    FIN = .TRUE.
		    OK = .FALSE.
		    GOTO 99
C
4		CONTINUE
		GOTO (13,13,13,43) TYPE_CAR
C
13		    CONTINUE
C			rc,lf,nul,slash ou espace
		    FIN = .TRUE.
		    OK = .FALSE.
		    GOTO 99
C
43		    CONTINUE
C			autres caracteres
		    IF (CAR.NE.'=') THEN
		    	FIN = .TRUE.
		    	OK = .FALSE.
		    ELSE
		    	ETAT = 5
		    	LONG_NFICH = 1
		    END IF
		    GOTO 99
C
5		CONTINUE
		GOTO (14,24,34,44) TYPE_CAR
C
14		    CONTINUE
C			rc,lf ou nul
		    FIN = .TRUE.
		    GOTO 99
C
24		    CONTINUE
C			espace
		    ETAT = 3
		    GOTO 99
C
34		    CONTINUE
C			slash
		    ETAT = 2
		    GOTO 99
C
44		    CONTINUE
C		        autres caracteres
		    NFICH(LONG_NFICH) = CAR
		    LONG_NFICH = LONG_NFICH + 1
		    GOTO 99
C
6		CONTINUE
		GOTO (15,25,15,45) TYPE_CAR
C
15		    CONTINUE
C			rc,lf,nul,espace ou slash
		    FIN = .TRUE.
		    OK = .FALSE.
		    GOTO 99
C
25		    CONTINUE
C			espace
		    ETAT = 3
		    GOTO 99
C
45		    CONTINUE
		    IF ((CAR.EQ.'P') .OR. (CAR.EQ.'p')) THEN
			KEEP = .FALSE.
		    ELSE
			IF ((CAR.EQ.'K') .OR. (CAR.EQ.'k')) THEN
			    KEEP = .TRUE.
			ELSE
		    	    FIN = .TRUE.
		    	    OK = .FALSE.
			END IF
		    END IF
		    ETAT = 3
		    GOTO 99
C
C
99		CONTINUE
C
	END DO
C
	RETURN
	END
C
C
	INTEGER FUNCTION ANALYSE_CAR (CAR)
C
C
	BYTE CAR
C
C
	IF ((CAR.EQ.13).OR.(CAR.EQ.10).OR.(CAR.EQ.0)) THEN
		ANALYSE_CAR = 1
		RETURN
	END IF
	IF (CAR.EQ.' ') THEN
		ANALYSE_CAR = 2
		RETURN
	END IF
	IF (CAR.EQ.'/') THEN
		ANALYSE_CAR = 3
		RETURN
	END IF
	ANALYSE_CAR = 4
	RETURN
C
	END
