	DIMENSION IDISP(2000),IBOX(4),KMOV(4),ITAL(6),IEQ(200),
	1ITPE(200),ICVS(200),IDIF(200),ICVD(8,8),IDL(200)
	INTEGER XOR,YOR,HGHT,WDTH,XCNT,YCNT,DEL,DEL2,DEL3
	COMMON/IN/ IXCD(100),IYCD(100)
	COMMON/LT/ILET(90)
	COMMON /SB/ IHL(6)
	COMMON/JN/ IDX,IDY
	COMMON /ST/JBOX
	COMMON/PK/INM(6),ICVA(6,200),IV(6)
	COMMON/OT/IRES(3),NOS,INOEL(10)
	DATA  ICVD/0,1,2,3,4,3,2,1,1,0,1,2,3,4,3,2,2,1,0,1,2,3,
	14,3,3,2,1,0,1,2,3,4,4,3,2,1,0,1,2,3,3,4,3,2,1,0,1,2,2,3,4,
	23,2,1,0,1,1,2,3,4,3,2,1,0/
	DATA XOR,YOR,HGHT,WDTH/512,312,400,300/,JORX,JORY,JHGHT,JWDTH/
	1542,342,43,30/,XCNT,YCNT/672,512/,DEL/30/,DEL2/60/,DEL3/45/
	2,NAME/'GRASS'/
	INTEGER RIGHT,WRONG,TRIES,SECND,BAD
	LOGICAL DIF,SEC
	CALL IFILE(22,NAME)
	READ (22)INM,ITAL,ICVS
	CALL DEFINEFILE(1,5,NEXT,'GRIFIN.DAT',"100,"100)
	READ(1#1) TRIES,RIGHT,WRONG,SECND,BAD
	CALL SENTER
	CALL DEFPIC(IDISP,2000)
	SEC=.FALSE.
	DIF=.FALSE.
	ISTOP=NEWSEG(1)
	CALL MOVETO(200,600,.FALSE.,0,5)
	CALL HOLSTR('STOP')
	CALL MSSLP(ISTOP)
	IRIG=NEWSEG(2)
	CALL MOVETO(200,630,.FALSE.,0,5)
	CALL HOLSTR('RIGHT')
	IWRO=NEWSEG(3)
	CALL MOVETO(200,660,.FALSE.,0,5)
	CALL HOLSTR('WRONG')
	IPRIN=NEWSEG(4)
	CALL MOVETO(200,720,.FALSE.,0,5)
	CALL HOLSTR('DISPLAY')
	CALL MSSLP(IPRIN)
	IBAD=NEWSEG(5)
	CALL MOVETO(200,690,.FALSE.,0,5)
	CALL HOLSTR('MISTAKE')
	
	INX=XOR
	INY=YOR
	DO 59 I=1,4
	IBOX(I)=NEWSEG(I)
	CALL MOVETO(INX,INY,.FALSE.,0,5)
	IX=WDTH*IFIX(SIND(FLOAT(I-1)*90))
	IY=HGHT*IFIX(COSD(FLOAT(I-1)*90))
	CALL LINE(IX,IY,.TRUE.)
	INX=INX+IX
	INY=INY+IY
	CALL MSSLP(IBOX(I))
59	CONTINUE
	CALL BOX(JORX,JORY,JHGHT,JWDTH,3,7,JBOX,.TRUE.)
	CALL SPOTS
	CALL DEPICT(IDISP,1)
	ISEG=NEWSEG(4)
512	CALL TRSET(XCNT,YCNT)
C
C	THIS ACTIVATES  LIGHT BUTTONS.
C
	CALL ATTIC(2,KMOV)
	IF(KMOV(2).EQ.ISTOP)GOTO 501
	IF(KMOV(2).EQ.IPRIN)GOTO 700
	IXL=KMOV(3)
	IYL=KMOV(4)
	ICC=0
	NOS=1
	ILC=0
279	CALL MOVETO(IXL,IYL,.FALSE.,0,5)
	CALL TRSET(IXL,IYL)
	CALL ENABLE(3)
278	ICC=ICC+1
	IXCD(ICC)=IXL
	IYCD(ICC)=IYL
200	CALL TRACK(IX,IY,IAT)
	IDX=IX-IXL
	IDY=IY-IYL
	IDIST=INT(SQRT(FLOAT(IDX**2+IDY**2)))
	IF(IAT.GE.0)GOTO203
	IF(IDIST.LT.DEL)GOTO200
	IF(IDIST.GT.DEL2)GOTO202
	CALL JOIN(IDISP)
	IF(IDIST.LT.DEL3)GOTO207
204	ICC=ICC+1
	IXCD(ICC)=IXL+IDX/2
	IYCD(ICC)=IYL+IDY/2
207	IXL=IX
	IYL=IY
	GOTO278
202	IDX=IDX*DEL2/IDIST
	IDY=IDY*DEL2/IDIST
	CALL JOIN(IDISP)
	IX=IXL+IDX
	IY=IYL+IDY
	CALL TRSET(IX,IY)
	GOTO204
203	CALL JOIN(IDISP)
	IF(IDIST.LT.DEL3)GOTO206
	L=IDIST/30
	M=IDX/L
	N=IDY/L
	DO 205  K=1,L
	ICC=ICC+1
	IXCD(ICC)=IXL+K*M
	IYCD(ICC)=IYL+K*N
205	CONTINUE
206	ICC=ICC+1
	IXCD(ICC)=IX
	IYCD(ICC)=IY
	CALL TRKILL
	CALL ATTIC(2,KMOV)
	DO 208 K=1,4
	IF(KMOV(2).EQ.IBOX(K))GOTO300
208	CONTINUE
	IXL=KMOV(3)
	IYL=KMOV(4)
	INOEL(NOS)=ICC-ILC
	NOS=NOS+1
	ILC=ICC
	GOTO279
300	INOEL(NOS)=ICC-ILC
	IF(NOS.LE.6)GOTO301
	GOTO502
301	ITY=IPNT(DUM)
	CALL CVS
	IF(INM(NOS).EQ.0)GOTO502
	IST=IHL(NOS)
	ITOT=(INM(NOS)-1)*IST+ITAL(NOS)
	IDF=0
	IM=0
	DO 600 I=ITAL(NOS),ITOT,IST
	M=ICVS(I)
	IL=IHLR(M)
	IT=IHRR(M)
	IDF=IDF+1
	ITPE(IDF)=IT
	IDL(IDF)=IL
	IDIF(IDF)=0
	IP1=ISTBP0(IRES(1),3)
	IP2=ISTBP0(ICVS(I+1),3)
	DO 620 J=1,NOS*6
	L1=ILDB(IP1)
	L2=ILDB(IP2)
	IDIF(IDF)=IDIF(IDF)+ICVD(L1+1,L2+1)
620	CONTINUE
	IF(.NOT.DIF)GOTO 600
	CALL MOVETO(900,1000-IM*25,.FALSE.,0,5)
	CALL STRING(ILET(IL-32),3)
	CALL INDISP(IDIF(IDF),4)
	CALL DEPICT(IDISP,1)
	IM=IM+1
600	CONTINUE
	INEQ=1
	IEQ(INEQ)=1
	MIN=1
	IF(IDF.EQ.1)GOTO609
	DO 601 I=2,IDF
	IF(IDIF(I).LT.IDIF(MIN))GOTO800
	IF(IDIF(I).EQ.IDIF(MIN))GOTO 801
	GOTO601
800	INEQ=1
	MIN=I
	IEQ(INEQ)=I
	GOTO601
801	INEQ=INEQ+1
	IEQ(INEQ)=I
601	CONTINUE
602	IF(INEQ.EQ.1)GOTO609
	SEC=.TRUE.
	MIN=0
	DO 802 I=1,INEQ
	IF(ITY.EQ.ITPE(IEQ(I)))MIN=IEQ(I)
802	CONTINUE
	IF(MIN.EQ.0)GOTO 502
609	CALL MOVETO(200,300,.FALSE.,0,5)
	CALL STRING(ILET(IDL(MIN)-32),3)
	IF(.NOT.DIF)GOTO 603
	IP3=ISTBP0(IRES(1),3)
	CALL MOVETO(200,200,.FALSE.,0,5)
	DO 701 I=1,NOS
	DO 702 J=1,6
	M=ILDB(IP3)
	CALL STRING(ILET(M+16),1)
702	CONTINUE
	CALL STRING('  ',2)
701	CONTINUE
	CALL DEPICT(IDISP,1)
603	IF(.NOT.SEC)GOTO 900
	CALL MOVETO(512,900,.FALSE.,0,5)
	CALL HOLSTR('SECONDARY CHECK WAS USED')
	CALL DEPICT(IDISP,1)
	SECND=SECND+1
	SEC=.FALSE.
900	CALL MSSLP(IBAD)
	CALL MSSLP(IRIG)
	CALL MSSLP(IWRO)
	CALL ATTIC(2,KMOV)
	CALL MSILP(IBAD)
	CALL MSILP(IRIG)
	CALL MSILP(IWRO)
	TRIES=TRIES+1
	IF(KMOV(2).EQ.IBAD)BAD=BAD+1
	IF(KMOV(2).EQ.IRIG)RIGHT=RIGHT+1
	IF(KMOV(2).EQ.IWRO)WRONG=WRONG+1
	WRITE(1#1) TRIES,RIGHT,WRONG,SECND
	CALL STRIP(ISEG)
	CALL DEPICT(IDISP,1)
	GOTO512
502	CALL MOVETO(200,300,.FALSE.,0,5)
	CALL HOLSTR('EH?')
	CALL DEPICT(IDISP,1)
	GOTO603
700	DIF=.NOT.DIF
	GOTO 512
501	CALL REDUCE
	CALL TRKILL
	CALL DEPICT(IDISP,1)
	END


