	DIMENSION IDISP(2000),IBOX(4),KMOV(4),ITAL(6),IEQ(10),
	1ICVS(200),IDIF(100),ICVD(8,8),IDL(100),INM(6)
	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/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,85,60/,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,2,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
199	CALL MOVETO(IXL,IYL,.FALSE.,0,5)
	CALL TRSET(IXL,IYL)
278	ICC=ICC+1
	IXCD(ICC)=IXL
	IYCD(ICC)=IYL
200	CALL ATTIC(13,KMOV)
	IF(KMOV(1).EQ.1)GOTO202
	L=KMOV(3)
	M=KMOV(4)
	IDX=L-IXL
	IDY=M-IYL
	IT=NEWSEG(4)
	CALL MOVETO(IXL,IYL,.FALSE.,0,5)
	CALL LINE(IDX,IDY,.TRUE.)
	CALL MSSLP(IT)
	CALL DEPICT(IDISP,1)
	IDIST=INT(SQRT(FLOAT(IDX**2+IDY**2)))
	J=IDIST/DEL
	IF(J.EQ.0)GOTO 206
	N=IDX/J
	K=IDY/J
	DO 205  I=1,J
	ICC=ICC+1
	IXCD(ICC)=IXL+I*N
	IYCD(ICC)=IYL+I*K
205	CONTINUE

	IF(MOD(IDIST,DEL).LT.20)GOTO210
206	ICC=ICC+1
	IXCD(ICC)=L
	IYCD(ICC)=M
210	IXL=L
	IYL=M
	GOTO200
202	CALL TRKILL
	CALL ATTIC(2,KMOV)
	DO 208 J=1,4
	IF(KMOV(2).EQ.IBOX(J))GOTO300
208	CONTINUE
	INOEL(NOS)=ICC-ILC
	ILC=ICC
	NOS=NOS+1
	IXL=KMOV(3)
	IYL=KMOV(4)
	GOTO199
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
	IDF=IDF+1
	IDL(IDF)=I
	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
	M=ICVS(IDL(IEQ(I)))
	IL=IHRR(M)
	IF(ITY.EQ.IL)MIN=IEQ(I)
802	CONTINUE
	IF(MIN.EQ.0)GOTO 502
609	M=ICVS(IDL(MIN))
	IL=IHLR(M)
	CALL MOVETO(200,300,.FALSE.,0,5)
	CALL STRING(ILET(IL-32),3)
	IF(.NOT.DIF)GOTO 999
	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 MOVETO(200,150,.FALSE.,0,5)
	CALL HOLSTR('REGION WORD')
	CALL INDISP(IDTOCT(ITY),12)
999	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,BAD
	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


