	MON /AINDEX/ PLAYER,AROBOT,AMASTR
#
# VERBS
#
	COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
	COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
	COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
	COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
	COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
	COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
	COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
	COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
	COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
	COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
	COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
	COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
	COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
#
# FLAGS
#
	LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
	LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
	LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
	LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
	LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
	LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
	LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
	LOGICAL FOLLWF,SPELLF,sprf
	COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
		DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
		MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
		EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
		GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
		GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
		MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
		follwf,spellf,sprf(6)
	COMMON /FINDEX/ BTIEF,BINFF
	COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
	COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
	COMMON /FINDEX/ MDIR,MLOC,POLEUF
	COMMON /FINDEX/ QUESNO,NQATT,CORRCT
	COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL

# RMINFO, PAGE 2
#
	RMINFO=.TRUE.				#ASSUME WINS.
	IF(PRSO.LT.XMIN) GO TO 50		#IF DIRECTION,
	FROMDR=PRSO				#SAVE AND
	PRSO=0					#CLEAR.
50	IF(HERE.EQ.AROOM(PLAYER)) GO TO 100	#PLAYER JUST MOVE?
	CALL RSPEAK(2)				#NO, JUST SAY DONE.
	PRSA=WALKIW				#SET UP WALK IN ACTION.
	RETURN
#
100	IF(LIT(HERE)) GO TO 300			#LIT?
	CALL RSPEAK(430)			#WARN OF GRUE.
	RMINFO=.FALSE.
	RETURN
#
300	RA=RACTIO(HERE)				#GET ROOM ACTION.
	I=RDESC2-HERE				#ASSUME SHORT DESC.
	IF(.NOT.FULL .AND. (SUPERF.OR.(((RFLAG(HERE).AND.RSEEN).NE.0)
		.AND. (BRIEFF.OR.PROB(80,80))))) GO TO 400
	I=RDESC1(HERE)				#USE LONG.
	IF((I.NE.0).OR.(RA.EQ.0)) GO TO 400	#IF GOT DESC, SKIP.
	PRSA=LOOKW				#PRETEND LOOK AROUND.
	IF(.NOT.RAPPLI(RA)) GO TO 100		#ROOM HANDLES, NEW DESC?
	PRSA=FOOW				#NOP PARSER.
	GO TO 500
#
400	CALL RSPEAK(I)				#OUTPUT DESCRIPTION.
500	IF(AVEHIC(WINNER).NE.0) CALL RSPSUB(431,ODESC2(AVEHIC(WINNER)))
	CALL PRINCR(FULL,HERE)			#PRINT CONTENTS OF ROOM.
	RFLAG(HERE)=RFLAG(HERE).OR.RSEEN	#INDICATE ROOM SEEN.
	IF(FULL.OR.(RA.EQ.0)) RETURN		#ANYTHING MORE?
	PRSA=WALKIW				#GIVE HIM A SURPISE.
	IF(.NOT.RAPPLI(RA)) GO TO 100		#ROOM HANDLES, NEW DESC?
	PRSA=FOOW
	RETURN
#
	END

# RAPPLI-	ROUTING ROUTINE FOR ROOM APPLICABLES
#
# DECLARATIONS
#
	LOGICAL FUNCTION RAPPLI(RI)
	IMPLICIT INTEGER(A-Z)
	LOGICAL RAPPL1,RAPPL2
	DATA NEWRMS/38/
#
	RAPPLI=.TRUE.				#ASSUME WINS.
	IF(RI.EQ.0) RETURN			#IF ZERO, WIN.
	IF(RI.LT.NEWRMS) RAPPLI=RAPPL1(RI)	#IF OLD, PROCESSOR 1.
	IF(RI.GE.NEWRMS) RAPPLI=RAPPL2(RI)	#IF NEW, PROCESSOR 2.
	RETURN
	END

#
#	decrpt - routine to decrpt the text files
#
	subroutine decrpt(rec,line,len,line2)
	implicit integer(a-z)
	dimension line2(16)
	dimension line(len)
	common /magic/magic

	crypt=XOR(magic,AND(rec,o'777'))*o'1001001001'

	do kj=16,1,-1 {
	  if(line2(kj).ne.0)goto 6
	}

6	do kc=1,kj {
	  line2(kc)=XOR(line2(kc),crypt)
	  }
	decode(len,9,line2)line
9	format(78a1)
	return
	end

# PROTCT-- CHECK FOR USER VIOLATION
#
# THIS ROUTINE SHOULD BE MODIFIED IF YOU WISH TO ADD SYSTEM
# DEPENDANT PROTECTION AGAINST ABUSE.
#
# AT THE MOMENT, PLAY IS PERMITTED UDER ALL CIRCUMSTANCES.
#
	LOGICAL FUNCTION PROTCT(X)
	IMPLICIT INTEGER(A-Z)
#
	PROTCT=.TRUE.
	RETURN
	END

#
# subroutine to encrypt the text file
#
	subroutine encrpt(rec,line,line2)
	implicit integer(a-z)
	dimension line2(16)
	dimension line(78)
	common /magic/ magic

	encode(78,9,line2)line
9	format(78a1)

	LINE2(16)=(LINE2(16)+AND('     ',77777))
	do kl=16,1,-1 {
	  if(line2(kl).eq.'     ')goto 8
	  kj=kl
	  goto 7
8	  line2(kl)=0
	}

7	crypt=XOR(magic,AND(rec,o'777'))*o'1001001001'
	do kc=1,kj {
	 line2(kc)=XOR(line2(kc),crypt)
	 }
	return
	end
# RDLINE-	READ INPUT LINE
#
# DECLARATIONS
#
	SUBROUTINE RDLINE(INBUF,INLNT,WHO)
	IMPLICIT INTEGER(A-Z)
	LOGICAL INBUF(78)
#
# PARSER OUTPUT
#
	LOGICAL PRSWON,CCFLG
	COMMON /SPARE/ CCFLG			#NEED FLAG TO SEE IF WE NEED CC
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
	COMMON /CHAN/ INPCH,OUTCH,DBCH
#
5	GO TO (90,10),WHO+1			#SEE WHO TO PROMPT FOR.
10	IF(.NOT.CCFLG)WRITE(OUTCH,7)
7	FORMAT(' ')
	WRITE(OUTCH,50)				#PROMPT FOR GAME.
50	FORMAT('+>')
#
90	READ(INPCH,100) INBUF			#GET INPUT.
100	FORMAT(78A1)
	CCFLG=.TRUE.				#SAY THAT WE HAVE DONE READ
#
	DO INLNT=78,1,-1 {
	  IF(INBUF(INLNT).NE.' ') GO TO 300	#NOT BLANK?
	  }
	GO TO 5					#TRY AGAIN.
#
300	DO I=1,INLNT {				#CONVERT TO UPPER CASE.
	  IF((INBUF(I).GE.'a').AND.(INBUF(I).LE.'z')) {
		INBUF(I)=INBUF(I)-o'200000000000'
		}
	  }
	PRSCON=1				#RESTART LEX SCAN.
	RETURN
	END

# PARSE-	TOP LEVEL PARSE ROUTINE
#
# DECLARATIONS
#
# THIS ROUTINE DETAILS ON BIT 0 OF PRSFLG
#
	LOGICAL FUNCTION PARSE(INBUF,INLNT,VBFLAG)
	IMPLICIT INTEGER(A-Z)
	LOGICAL INBUF(78)
	LOGICAL LEX,SYNMCH,DFLAG,VBFLAG
	INTEGER OUTBUF(40)
	COMMON /DEBUG/ DBGFLG,PRSFLG
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
	COMMON /LAST/ spv(4)
	COMMON /XSRCH/ XMIN,XMAX,XDOWN,XUP,
		XNORTH,XSOUTH,XENTER,XEXIT
#
#D	DFLAG=AND(PRSFLG,o'1').NE.0
	PARSE=.FALSE.				#ASSUME FAILS.
	PRSA=0					#ZERO OUTPUTS.
	PRSI=0
	PRSO=0
#
	IF(.NOT.LEX(INBUF,INLNT,OUTBUF,OUTLNT,VBFLAG)) GO TO 100
	IF(SPARSE(OUTBUF,OUTLNT,VBFLAG)) 100,200,300	#DO SYN SCAN.
#
# PARSE REQUIRES VALIDATION
#
200	IF(.NOT.VBFLAG) GO TO 350		#ECHO MODE, FORCE FAIL.
	IF(.NOT.SYNMCH(X)) GO TO 100		#DO SYN MATCH.
	IF((PRSO.GT.0).AND.(PRSO.LT.XMIN)) spv(1)=PRSO
#
# SUCCESSFUL PARSE OR SUCCESSFUL VALIDATION
#
300	PARSE=.TRUE.
350	CALL ORPHAN(0,0,0,0,0)			#CLEAR ORPHANS.
#D	IF(DFLAG) TYPE 10,PARSE,PRSA,PRSO,PRSI
#D10	FORMAT(' PARSE RESULTS- ',L7,3I7)
	SPV(2)=PRSA
	SPV(1)=PRSO
	SPV(3)=PRSI
	SPV(4)=.TRUE.
	RETURN
#
# PARSE FAILS, DISALLOW CONTINUATION
#
100	PRSCON=1
#D	IF(DFLAG) TYPE 10,PARSE,PRSA,PRSO,PRSI
	SPV(4)=.FALSE.
	RETURN
#
	END

# ORPHAN- SET UP NEW ORPHANS
#
# DECLARATIONS
#
	SUBROUTINE ORPHAN(O1,O2,O3,O4,O5)
	IMPLICIT INTEGER(A-Z)
	COMMON /ORPHS/ A,B,C,D,E
#
	A=O1					#SET UP NEW ORPHANS.
	B=O2
	C=O3
	D=O4
	E=O5
	RETURN
	END

# LEX-	LEXICAL ANALYZER
#
# DECLARATIONS
#
# THIS ROUTINE DETAILS ON BIT 1 OF PRSFLAG
#
	LOGICAL FUNCTION LEX(INBUF,INLNT,OUTBUF,OP,VBFLAG)
	IMPLICIT INTEGER(A-Z)
	LOGICAL INBUF(78),J
	INTEGER OUTBUF(40)
	LOGICAL DFLAG,VBFLAG
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
	COMMON /DEBUG/ DBGFLG,PRSFLG
#
	DO I=1,40 {				#CLEAR OUTPUT BUF.
	  OUTBUF(I)=0
	  }
#
#D	DFLAG=AND(PRSFLG,o'2').NE.0
	LEX=.FALSE.				#ASSUME LEX FAILS.
	OP=-1					#OUTPUT PTR.
50	OP=OP+2					#ADV OUTPUT PTR.
	CP=0					#CHAR PTR=0.
#
200	IF(PRSCON.GT.INLNT) GO TO 1000		#END OF INPUT?
	J=INBUF(PRSCON)				#NO, GET CHARACTER,
	PRSCON=PRSCON+1				#ADVANCE PTR.
	IF(J.EQ.'.') GO TO 1000			#END OF SENTENCE?
	IF(J.EQ.',') GO TO 2000			#END OF COMMAND?
	IF(J.EQ.' ') GO TO 6000			#SPACE?
	J1=G50(J)				#CONVERT TO R50
	IF(J1.NE.0) GO TO 4000
#
	IF(VBFLAG) CALL RSPEAK(601)		#GREEK TO ME, FAIL.
	RETURN
#
# END OF INPUT, SEE IF PARTIAL WORD AVAILABLE.
#
1000	PRSCON=1				#FORCE PARSE RESTART.
2000	IF((CP.EQ.0).AND.(OP.EQ.1)) RETURN	#ANY RESULTS?
	IF(CP.EQ.0) OP=OP-2			#ANY LAST WORD?
	LEX=.TRUE.
#D	IF(DFLAG) TYPE 10,CP,OP,PRSCON,(OUTBUF(I),I=1,OP+1)
#D10	FORMAT(' LEX RESULTS- ',3I7/1X,10O7)
	RETURN
#
# LEGITIMATE CHARACTERS: LETTER, DIGIT, OR HYPHEN.
#
4000	CONTINUE
#D	IF(DFLAG) TYPE 20,J,J1,CP
#D20	FORMAT(' LEX- CHAR= ',3I7)
	IF(CP.GE.6) GO TO 200			#IGNORE IF TOO MANY CHAR.
	K=OP+(CP/3)				#COMPUTE WORD INDEX.
	GO TO (4100,4200,4300),(MOD(CP,3)+1)	#BRANCH ON CHAR.
4100	J2=J1*780				#CHAR 1... *780
	OUTBUF(K)=OUTBUF(K)+J2+J2		#*1560 (40 ADDED BELOW).
4200	OUTBUF(K)=OUTBUF(K)+(J1*39)		#*39 (1 ADDED BELOW).
4300	OUTBUF(K)=OUTBUF(K)+J1			#*1.
	CP=CP+1
	GO TO 200				#GET NEXT CHAR.
#
# SPACE
#
6000	IF(CP.EQ.0) GO TO 200			#ANY WORD YET?
	GO TO 50				#YES, ADV OP.
#
	END
# SPARSE-	START OF PARSE
#
# DECLARATIONS
#
# THIS ROUTINE DETAILS ON BIT 2 OF PRSFLG
#
	INTEGER FUNCTION SPARSE(LBUF,LLNT,VBFLAG)
	IMPLICIT INTEGER(A-Z)
	INTEGER LBUF(40)
	LOGICAL LIT,QHERE,OTEST,DFLAG,VBFLAG
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# PARSER STATE
#
	COMMON /ORPHS/ OFLAG,OACT,OSLOT,OPREP,ONAME
	COMMON /LAST/ spv(4)
	COMMON /PV/ ACT,O1,O2,P1,P2
	INTEGER OBJVEC(2),PRPVEC(2)
	EQUIVALENCE (OBJVEC(1),O1),(PRPVEC(1),P1)
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
	COMMON /DEBUG/ DBGFLG,PRSFLG
#
# OBJECTS
#
	COMMON /OBJCTS/ OLNT,ODESC1(250),ODESC2(250),ODESCO(250),
		OACTIO(250),OFLAG1(250),OFLAG2(250),OFVAL(250),
		OTVAL(250),OSIZE(250),OCAPAC(250),OROOM(250),
		OADV(250),OCAN(250),OREAD(250)
#
	COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
	COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
	COMMON /OINDEX/	LEAVE,TROLL,AXE
	COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
	COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
	COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
	COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
	COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
	COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
	COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
	COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
	COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
	COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
	COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
	COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
	COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
	COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
	COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
	COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
	COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
	COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
	COMMON /AINDEX/ PLAYER,AROBOT,AMASTR
#
# VERBS
#
	COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
	COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
	COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
	COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
	COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
	COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
	COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
	COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
	COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
	COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
	COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
	COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
	COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW

# SPARSE, PAGE 2
#
# VOCABULARIES
#
	COMMON /BUZVOC/ BVOC(20)
	COMMON /PRPVOC/ PVOC(45)
	COMMON /DIRVOC/ DVOC(75)
	INTEGER AVOC(400)
	COMMON /ADJVOC/ AVOC1(181),AVOC2(111),AVOC3(106),AVOCND
	INTEGER VVOC(900)
	COMMON /VRBVOC/ VVOC1(92),VVOC1A(118),VVOC2(104),VVOC3(136),
		VVOC4(116),VVOC5(134),VVOC6(117),VVOC7(89),VVOCND
	INTEGER OVOC(1050)
	COMMON /OBJVOC/ OVOC1(158),OVOC2(144),OVOC3(149),OVOC4(127),
		OVOC5(108),OVOC6(104),OVOC6A(91),OVOC7(124),OVOCND
#
	EQUIVALENCE (VVOC(1),VVOC1(1))
	EQUIVALENCE (AVOC(1),AVOC1(1))
	EQUIVALENCE (OVOC(1),OVOC1(1))
#
# FUNCTIONS AND DATA
#
	OTEST(R)=(R.GT.0).AND.(R.LT.R50MIN)
	DATA R50MIN/o'3100'/,R50WAL/'WAL'/
#
# BUZZ WORDS--	IGNORED IN SYNTACTIC PROCESSING
#
	DATA BVOC/'AND',0,'BY',0,'IS',0,'A',0,
		'AN',0,'THE',0,'RUN',0,'GO',0,'PRO','CEE',0,0/
#
# PREPOSITIONS--	MAPS PREPOSITIONS TO INDICES
#
	DATA PVOC/'OVE','R',1,'WIT','H',2,'USI','NG',2,'THR','OUG',2,
		'AT',0,3,'TO',0,4,'IN',0,5,'INS','IDE',5,'INT','O',5,
		'DOW','N',6,'UP',0,7,'UND','ER',8,'OF',0,9,'ON',0,10,
		'OFF',0,11/
#
# DIRECTIONS--	MAPS DIRECTIONS TO INDICES
#
	DATA DVOC/'N',0,o'2000','NOR','TH',o'2000','S',0,o'12000',
		'E',0,o'6000','EAS','T',o'6000','W',0,o'16000','WES','T',o'16000',
		'SE',0,o'10000','SW',0,o'14000',
		'NE',0,o'4000','NW',0,o'20000',
		'U',0,o'22000','UP',0,o'22000','D',0,o'24000','DOW','N',o'24000',
		'LAU','NCH',o'26000','LAN','D',o'30000','ENT','ER',o'32000',
		'EXI','T',o'34000','OUT',0,o'34000','LEA','VE',o'34000',
		'TRA','VEL',o'36000','SOU','TH',o'12000',
		'IN',0,o'32000',
		'CRO','SS',o'36000'/

# SPARSE, PAGE 3
#
# ADJECTIVES--	MAPS ADJECTIVES TO OBJECT NUMBERS
#
# EACH ENTRY IS VARIABLE LENGTH AND CONSISTS OF A TWO WORD
# ADJECTIVE IN RADIX-50 FOLLOWED BY ONE OR MORE OBJECT NUMBERS.
# NOTE THAT ADJECTIVES CAN BE DISTINGUISHED FROM OBJECTS AS
# FOLLOWS-- ALL ADJECTIVES ARE .GE. 'A (1600)', WHILE ALL OBJECTS
# ARE .LE. OLNT (255 MAX).
#
	DATA AVOC1/'BRO','WN',1,81,'ELO','NGA',1,'HOT',0,3,'PEP','PER',3,
		'VIT','REO',4,'JAD','E',6,'HUG','E',8,'ENO','RMO',8,122,
		'TRO','PHY',9,'CLE','AR',10,'LAR','GE',12,26,47,95,96,123,
		133,135,146,147,150,176,'NAS','TY',13,'ELV','ISH',14,
		'BRA','SS',15,16,46,156,
		'BRO','KEN',16,22,92,113,155,158,'ORI','ENT',17,
		'BLO','ODY',20,'RUS','TY',21,'BUR','NED',22,
		'DEA','D',22,'OLD',0,25,41,44,45,'LEA','THE',25,
		'PLA','TIN',26,'PEA','RL',27,
		'MOB','Y',31,'CRY','STA',32,126,'GOL','D',33,85,104,157,158,
		'IVO','RY',34,'SAP','PHI',37,'WOO','DEN',38,67,136,137,
		165,173,174,175,'WOO','D',38,67,136,137,165,173,174,175,
		'STE','EL',39,125,
		'DEN','TED',39,'FAN','CY',40,'ANC','IEN',41,44,
		'SMA','LL',5,46,52,53,89,102,103,153,
		'BLA','CK',47,162,'TOU','R',49,
		'VIS','COU',55,'VIC','IOU',62,
		 'GLA','SS',10,126,132,'TRA','P',66/
#
	DATA AVOC2/'FRO','NT',68,'STO','NE',69,150,209,'MAN','GLE',72,
		'RED',0,79,94,140,161,170,171,'YEL','LOW',80,159,
		'BLU','E',82,112,114,141,
		'VAM','PIR',83,'MAG','IC',90,
		'SEA','WOR',90,'TAN',0,91,'SHA','RP',92,
		'WIC','KER',98,'CLO','TH',100,
		'BRA','IDE',101,
		'GAU','DY',108,'SQU','ARE',109,127,'CLA','Y',109,
		'SHI','NY',110,'THI','N',110,
		'GRE','EN',115,143,'PUR','PLE',116,'WHI','TE',117,147,160,
		'MAR','BLE',119,'COK','E',121,
		'ROU','ND',128,'TRI','ANG',129,
 	2 'RAR','E',134,'OBL','ONG',135,'EAT','$ME',138,
		'EAT','ME',138,'ORA','NGE',139,'ECC','H',141/
#
	DATA AVOC3/'ROC','KY',147,'SHE','ER',147,
		'200',0,148,'NEA','T',148,'SHI','MME',151,
		'ZUR','ICH',152,'BIR','DS',153,154,155,
		'ENC','RUS',154,155,'BEA','UTI',156,'CLO','CKW',157,158,
		'MEC','HAN',157,158,'BAR','E',195,'SON','G',198,
		'MAH','OGA',163,'PIN','E',164,'LON','G',166,
		'CEN','TER',166,'SHO','RT',167,'T',0,168,
		'COM','PAS',169,206,'BRO','NZE',172,'CEL','L',174,175,
		'LOC','KED',174,'SUN',0,177,
		'NOR','TH',200,'NOR','THE',200,'SOU','TH',201,
		'SOU','THE',201,'EAS','T',202,'EAS','TER',202,
		'WES','T',203,'WES','TER',203,'DUN','GEO',210/
#
	DATA AVOCND/-1/

# SPARSE, PAGE 4
#
# VERBS--	MAPS VERBS TO SYNTAX SLOTS
#
# EACH ENTRY IS VARIABLE LENGTH AND CONSISTS OF ONE OR MORE
# TWO WORD VERBS IN RADIX-50 FOLLOWED BY A SYNTAX WORD COUNT
# FOLLOWED BY ONE OR MORE SYNTAXES.  NOTE THAT VERBS CAN BE
# DISTINGUISHED FROM WORD COUNTS AS FOLLOWS--
# ALL VERBS ARE .GE. 'A (1600)', WHILE ALL SYNTAX WORD COUNTS
# ARE .LE. 255.
#
# SYNTAX ENTRIES CONSIST OF A FLAG WORD FOLLOWED BY 0, 1, OR 2
# OBJECT DESCRIPTIONS.  THE FLAG WORD HAS THE FOLLOWING FORMAT--
#
# BIT <14>	IF 1, SYNTAX INCLUDES DIRECT OBJECT
# BIT <13>	IF 1, SYNTAX INCLUDES INDIRECT OBJECT
# BIT <12>	IF 1, DIRECT OBJECT IS IMPLICIT (STANDARD FORM)
# BIT <11>	IF 1, DIRECT AND INDIRECT OBJECT MUST BE SWAPPED
#			AFTER SYNTAX PROCESSING
# BIT <10>	IF 1, THIS IS DEFAULT SYNTAX FOR ORPHANERY
# BITS <8:0>	VERB NUMBER FOR VAPPLI
#
# OBJECT DESCRIPTIONS CONSIST OF A FLAG WORD AND TWO FWIM WORDS.
# THE FLAG WORD HAS THE FOLLOWING FORMAT--
#
# BIT <14>	IF 1, SEARCH ADVENTURER FOR OBJECT
# BIT <13>	IF 1, SEARCH ROOM FOR OBJECT
# BIT <12>	IF 1, PARSER WILL TRY TO TAKE OBJECT
# BIT <11>	IF 1, ADVENTURER MUST HAVE OBJECT
# BIT <10>	IF 1, QUALIFYING BITS (NORMALLY -1,-1) ARE SAME
#			AS FWIM BITS
# BIT <9>	IF 1, OBJECT MUST BE REACHABLE
# BITS <8:0>	PREPOSITION NUMBER FOR SYNMCH
#
# THE FWIM WORDS HAVE THE SAME FORMAT AS THE TWO OBJECT FLAG WORDS.
#
# NOTE THAT BITS 12 AND 11 OF OBJECT DESCRIPTIONS ACTUALLY HAVE
# FOUR DISTINCT STATES--
#
#	BIT 12	BIT 11	MDLDESC		INTERPRETATION
#	------	------	-------		---------------
#
#	  0	  0	 --		NO PARSER ACTION
#	  0	  1	 HAVE		ADVENTURER MUST HAVE OBJECT
#	  1	  0	 TRY		TRY TO TAKE, DONT CARE IF FAIL
#	  1	  1	 TAKE		TRY TO TAKE, CARE IF FAIL
#

# SPARSE, PAGE 5
#
	DATA VVOC1/'BRI','EF',1,70,'VER','BOS',1,71,
		'SUP','ERB',1,72,'STA','Y',1,73,'VER','SIO',1,74,
		'SWI','M','BAT','HE','WAD','E',1,75,'GER','ONI',1,76,
		'ULY','SSE','ODY','SSE',1,77,
		 'WEL','L',1,78,'PRA','Y',1,79,'TRE','ASU',1,80,
		'TEM','PLE',1,81,'BLA','ST',1,82,'SCO','RE',1,83,
		'Q',0,'QUI','T',1,84,'HEL','P',1,50,'INF','O',1,51,
		'HIS','TOR','UPD','ATE',1,52,'BAC','K',1,53,
		'SIG','H','MUM','BLE',1,54/
#
	DATA VVOC1A/'CHO','MP','LOS','E','BAR','F',1,55,
		'DUN','GEO',1,56,'FRO','BOZ',1,57,'FOO',0,'BLE','TCH',
		'BAR',0,1,58,'REP','ENT',1,59,'HOU','S','SCH','EDU',1,60,
		'WIN',0,1,61,'YEL','L','SCR','EAM','SHO','UT',1,62,
		'HOP',0,'SKI','P',1,63,'FUC','K','SHI','T','DAM','N',
		'CUR','SE',1,64,'ZOR','K',1,65,'GRA','NIT',1,o'50102',
		'SAV','E',1,149,'RES','TOR',1,150,'TIM','E',1,90,
		 'DIA','GNO',1,94,'EXO','RCI',1,105,'INV','ENT',
		'I',0,1,133,'WAI','T',1,128,
		'INC','ANT',1,95,'ANS','WER',1,96,'ROO','M','RNA','ME',1,97,
		'AGA','IN',1,255/

#
	DATA VVOC2/'DEF','LAT',1,o'50147',
		'DES','CRI','WHA','T','EXA','MIN',1,o'50170',
		'FIL','L',11,o'60206',o'61000',o'200',0,o'61002',o'400',0,
		o'40206',o'61000',o'200',0,
		'FIN','D','SEE','K','WHE','RE','SEE',0,4,o'40177',o'60000',-1,-1,
		'FOL','LOW',2,o'125',o'50125',
		'KIC','K','BIT','E','TAU','NT',1,o'50153','LOW','ER',1,o'50156',
		 'PUS','H','PRE','SS',1,o'50160','RIN','G','PEA','L',1,o'50127',
		'RUB',0,'CAR','ESS','TOU','CH','FON','DLE',1,o'50157',
		'SHA','KE',1,o'50171','SPI','N',1,o'50201',
		'UNT','IE','FRE','E',1,o'50161','WAL','K',9,o'50216',
		o'40126',o'61002',-1,-1,o'40126',o'61005',-1,-1/
#
	DATA VVOC3/'ATT','ACK','FIG','HT','INJ','URE','HIT',0,'HUR','T',
		7,o'60215',o'21000',0,o'200',o'44002',0,o'1000',
		'BOA','RD',4,o'40202',o'21000',0,o'2',
		 'BRU','SH','CLE','AN',5,o'52130',o'70130',o'61002',-1,-1,
		'BUR','N','IGN','ITE','INC','INE',7,o'60211',o'61000',o'20',0,
		o'64002',o'10',0,
		'CLI','MB',12,o'40235',o'20007',0,o'4000',
		o'40236',o'20006',0,o'4000',o'40234',o'20000',0,o'4000',
		'CLO','SE',4,o'40176',o'61000',o'10200',0,
		'DIG',0,4,o'40131',o'44002',o'4',0,
		'DIS','EMB',4,o'40203',o'20000',0,o'2',
		'DRI','NK','IMB','IBE','SWA','LLO',4,o'40210',o'61000',o'400',0,
		'DRO','P','REL','EAS',11,o'42221',o'41000',-1,-1,
		o'60221',o'41000',-1,-1,o'61005',-1,-1,
		'EAT',0,'CON','UME','GOB','BLE','MUN','CH','TAS','TE',
		4,o'40207',o'75000',o'2000',0,
		'EXT','ING','DOU','SE',4,o'40174',o'75000',o'100',0/
#
	DATA VVOC4/'GIV','E','HAN','D','DON','ATE',11,o'72222',o'21004',
		o'40',0,o'64222',o'21000',o'40',0,o'61000',-1,-1,
		'HEL','LO','HI',0,2,o'2227',o'50227',
		'BLO','W',15,o'62146',o'61007',-1,-1,o'61002',o'4',0,
		o'40160',o'61007',-1,-1,o'40165',o'61005',-1,-1,
		'INF','LAT',4,o'70146',o'61002',o'4',0,
		'JUM','P','LEA','P',5,o'133',o'40133',o'61001',-1,-1,
		'KIL','L','MUR','DER','SLA','Y','STA','B','DIS','PAT',
		7,o'60213',o'21000',0,o'200',
		o'44002',0,o'1000',
		'KNO','CK','RAP',0,12,o'42166',o'61003',-1,-1,
		o'40166',o'61012',-1,-1,o'40215',o'23006',o'40',0,
		'LIG','HT',11,o'42173o',o'75000',o'100',0,
			o'60211',o'61000',o'100',0,o'54002',o'10',0,
		'LOC','K',4,o'40134',o'20000',-1,-1/
#
	DATA VVOC5/'LOO','K','L',0,'STA','RE','GAZ','E',
		13,o'167',o'40167',o'60003',-1,-1,
		o'40231',o'61010',-1,-1,o'a40230',o'60005',-1,-1,
		'MEL','T','LIQ','UIF',4,o'70145',o'61002',o'10',0,
		 'MOV','E',4,o'40172',o'20000',-1,-1,
		'PUL','L','TUG',0,8,o'42172',o'21000',-1,-1,
		o'40172',o'21012',-1,-1,
		'MUN','G','HAC','K','FRO','B','DAM','AGE',
		5,o'52212',o'70212',o'44002',-1,-1,
		'OPE','N',11,o'42175',o'61000',o'10200',0,
		o'60175',o'61000',o'10200',0,o'54002',o'4',o'1000',
		'PIC','K',4,o'40204',o'61007',o'20000',o'40',
		'PLU','G','GLU','E','PAT','CH',4,o'70152',o'61002',-1,-1,
		'POK','E','BRE','AK','JAB',0,7,o'60212',o'21000',0,o'200',
		o'44002',0,o'1000',
		 'POU','R','SPI','LL',11,o'42223',o'42000',o'400',0,
		o'60223',o'42000',o'400',0,o'60005',-1,-1,
		'PUM','P',4,o'60232',o'60007',-1,-1/
#
	DATA VVOC6/'PUT',0,'INS','ERT','STU','FF','PLA','CE',
		8,o'72220',o'61005',-1,-1,
		o'40221',o'61006',-1,-1,
		'RAI','SE','LIF','T',5,o'52155',o'40155',o'61007',-1,-1,
		 'REA','D','SKI','M',11,o'42144',o'71000',o'40000',0,
		o'60144',o'71000',o'40000',0,o'61002',-1,-1,
		'STR','IKE',12,o'60215',o'23000',o'40',0,
		o'44002',0,o'1000',o'42215',o'23000',o'40',0,o'50173',
		'SWI','NG','THR','UST',7,o'60214',o'44000',0,o'1000',
		o'21003',0,o'200',
		'TAK','E','GET',0,'HOL','D','CAR','RY','REM','OVE',
		4,o'40204',o'61000',o'20000',o'40',
		'TEL','L','COM','MAN','REQ','UES',4,o'40217',o'20000',0,o'2000',
		'THR','OW','HUR','L','CHU','CK',14,o'60224',o'44000',-1,-1,
			o'21003',o'40',0,o'60224',o'44000',-1,-1,o'21002',o'40',0/
#
	DATA VVOC7/'TIE',0,'FAS','TEN',11,o'70162',o'61004',-1,-1,
		o'60163',o'21000',o'40',0,o'65002',o'4',0,
		'TUR','N','SET',0,22,o'62164',o'61000',o'2',0,
			o'64002',o'4',0,
		o'40173',o'75012',o'100',0,o'40174',o'75013',o'100',0,
		o'60237',o'61000',o'2',0,o'20004',-1,-1,
		'UNL','OCK',7,o'60135',o'21000',-1,-1,
		o'74002',o'4',0,
		'WAK','E','SUR','PRI','ALA','RM','STA','RTL',
		8,o'42150',o'20000',o'40',0,
		o'40150',o'20007',o'40',0,
		'WAV','E','FLA','UNT','BRA','NDI',4,o'40154',o'40000',-1,-1,
		'WIN','D',5,o'50233',o'40233',o'61007',-1,-1/
#
	DATA VVOCND/-1/

# SPARSE, PAGE 6
#
# OBJECTS--	MAPS OBJECTS TO OBJECT INDICES
#
# SAME FORMAT AS AVOC.
#
	DATA OVOC1/'BAG',0,1,25,100,'SAC','K',1,'GAR','LIC',2,
		'CLO','VE',2,'FOO','D',3,'SAN','DWI',3,'LUN','CH',3,
		'DIN','NER',3,
		'GUN','K',4,55,'PIE','CE',4,143,'SLA','G',4,'COA','L',5,
		 'PIL','E',5,38,78,87,88,122,'HEA','P',5,
		 'FIG','URI',6,
		'MAC','HIN',7,'PDP','10',7,'PDP','11',7,'DRY','ER',7,
		'LID',0,7,'DIA','MON',8,'CAS','E',9,123,'BOT','TLE',10,123,
		'CON','TAI',10,'WAT','ER',11,204,'QUA','NTI',11,204,
		'LIQ','UID',11,204,'H2O',0,11,204,
		'ROP','E',12,101,'HEM','P',12,'COI','L',12,110,
		'KNI','FE',13,21,'BLA','DE',13,14,'SWO','RD',14,'ORC','HRI',14,
		'GLA','MDR',14,'LAM','P',15,16,22,'LAN','TER',15,16,22,
		'RUG',0,17,'CAR','PET',17,
		'LEA','VES',18,'LEA','F',18,'TRO','LL',19,
		 'AXE',0,20,'DIN','NER',3/
#
	DATA OVOC2/'KEY','S',23,'KEY',0,23,
		'SET',0,23,'BON','ES',24,'SKE','LET',24,'BOD','Y',24,73,
		'COI','NS',25,'BAR',0,26,165,168,
		 'NEC','KLA',27,'PEA','RLS',27,'MIR','ROR',28,29,207,
		'ICE',0,30,'MAS','S',30,'GLA','CIE',30,'RUB','Y',31,
		'TRI','DEN',32,'FOR','K',32,'COF','FIN',33,'CAS','KET',33,
		'TOR','CH',34,'CAG','E',35,36,124,125,'DUM','BWA',35,36,
		'BAS','KET',35,36,98,113,'BRA','CEL',37,
		'JEW','EL',37,'TIM','BER',38,'BOX',0,39,53,105,'STR','ADI',40,
		'VIO','LIN',40,'ENG','RAV',41,'INS','CRI',41,44,'GHO','ST',42,
		'SPI','RIT',42,'FIE','ND',42,'GRA','IL',43,'PRA','YER',44,47,
		'TRU','NK',45,'CHE','ST',45,'BEL','L',46,
		 'BOO','K',47,49,114,115,116,117,'BIB','LE',47/
#
	DATA OVOC3/'GOO','DBO',47,'CAN','DLE',48,'PAI','R',48,
		'GUI','DEB',49,
		'GUI','DE',49,'PAP','ER',50,122,143,'NEW','SPA',50,
		'ISS','UE',50,'REP','ORT',50,'MAG','AZI',50,'NEW','S',50,
		 'MAT','CHB',51,
		 'MAT','CH',51,'MAT','CHE',51,'ADV','ERT',52,'PAM','PHL',52,
		'LEA','FLE',52,'BOO','KLE',52,'MAI','LBO',53,
		'TUB','E',54,'TOO','THP',54,'PUT','TY',55,'MAT','ERI',55,
		'GLU','E',55,'WRE','NCH',56,'SCR','EWD',57,
		'CYC','LOP',58,'MON','STE',58,'CHA','LIC',59,'CUP',0,59,
		'GOB','LET',59,'PAI','NTI',60,149,'ART',0,60,149,
		'CAN','VAS',60,'PIC','TUR',60,'WOR','K',60,
		'MAS','TER',60,210,'THI','EF',61,'ROB','BER',61,
		'CRI','MIN',61,'BAN','DIT',61,'CRO','OK',61,'GEN','T',61,
		'GEN','TLE',61,'MAN',0,61,'THU','G',61,
		 'BAG','MAN',61,'STI','LLE',62/
#
	DATA OVOC4/'WIN','DOW',63,'BOL','T',64,'NUT',0,64,
		'GRA','TE',65,'GRA','TIN',65,'DOO','R',66,67,68,69,
		164,172,173,174,175,'TRA','PDO',66,
		'TRA','P$D',66,'SWI','TCH',70,76,79,80,81,82,170,
		 'HEA','D',71,120,'COR','PSE',72,73,'BOD','IES',73,
		'DAM',0,74,'GAT','ES',74,76,'GAT','E',74,76,
		'FCD',0,74,'RAI','L',75,'RAI','LIN',75,
		'BUT','TON',76,79,80,81,82,127,128,129,170,176,
		'BUB','BLE',77,'LEA','K',78,'DRI','P',78,
		'HOL','E',78,107,
		'BAT',0,83,'RAI','NBO',84,
		'POT',0,85,'STA','TUE',86,'SCU','LPT',86,'ROC','K',86,
		'BOA','T',87,88,90,'PLA','STI',87,88,
		 'PUM','P',89/
#
	DATA OVOC5/'AIR','PUM',89,'AIR','$PU',89,'LAB','EL',91,112,
		'FIN','EPR',91,'STI','CK',92,'BAR','REL',93,'BUO','Y',94,
		'EME','RAL',95,'SHO','VEL',96,'GUA','NO',97,'CRA','P',97,
		 'SHI','T',97,'HUN','K',97,'BAL','LOO',98,113,
		'REC','EPT',99,'WIR','E',101,110,
		'HOO','K',102,103,'ZOR','KMI',104,148,'COI','N',104,
		'SAF','E',105,'CAR','D',106,'NOT','E',106,
		'SLO','T',107,'CRO','WN',108,'BRI','CK',109,
		'FUS','E',110,'GNO','ME',111,152,
		'STA','MP',118,
		'TOM','B',119,'CRY','PT',119,'GRA','VE',119,'HEA','DS',120,
		 'POL','ES',120,'IMP','LEM',120/
#
	DATA OVOC6/'LOS','ERS',120,'COK','ES',121,
		'LIS','TIN',122,'STA','CK',122,
		'PRI','NTO',122,
		 'SPH','ERE',126,'BAL','L',126,
		'ETC','HIN',130,131,
		'WAL','LS',130,131,193,200,201,202,203,'WAL','L',
		130,131,159,160,161,162,163,164,193,200,201,202,203,
		'FLA','SK',132,'POO','L',133,'SEW','AGE',133,
		'TIN',0,134,'SAF','FRO',134,'SPI','CES',134,'TAB','LE',135,
		'POS','T',136,166,167,'POS','TS',136,'BUC','KET',137,
		'CAK','E',138,139,140,141,'ICI','NG',139,140,141,
		'ROB','OT',142,'ROB','BY',142,
		'C3P','O',142,'R2D','2',142/
#
	DATA OVOC6A/'PAN','EL',159,160,161,162,163,164,208,
		'POL','E',166,167,'TBA','R',168,'T$B','AR',168,
		'ARR','OW',169,'POI','NT',169,'BEA','M',171,
		 'DIA','L',177,'SUN','DIA',177,'1',0,178,
		'ONE',0,178,'2',0,179,'TWO',0,179,'3',0,180,
		'THR','EE',180,'4',0,181,'FOU','R',181,'5',0,182,
		'FIV','E',182,'6',0,183,'SIX',0,183,'7',0,184,
		'SEV','EN',184,'8',0,185,'EIG','HT',185,
		 'IT',0,187,'THA','T',187,'THI','S',187/
#
	DATA OVOC7/'ME',0,188,'MYS','ELF',188,'CRE','TIN',188,
		'ALL',0,189,'EVE','RYT',189,
		'TRE','ASU',190,'VAL','UAB',190,'SAI','LOR',191,'TEE','TH',192,
		'GRU','E',194,'HAN','D',195,'HAN','DS',195,
		 'LUN','GS',196,'AIR',0,196,'AVI','ATO',197,
		'FLY','ER',197,'TRE','E',144,145,199,
		'CLI','FF',146,147,'LED','GE',146,147,'POR','TRA',149,
		'STA','CK',148,'BIL','LS',148,
		'VAU','LT',150,'CUB','E',150,'LET','TER',67,150,
		'CUR','TAI',151,'LIG','HT',151,'NES','T',153,
		'EGG',0,154,155,'BAU','BLE',156,'CAN','ARY',157,158,
		'BIR','D',198,'SON','GBI',198,
		'GUA','RD',205,'GUA','RDI',205,'ROS','E',206,
		'STR','UCT',207,'CHA','NNE',209,
		 'KEE','PER',210/
#
	DATA OVOCND/-1/

# SPARSE, PAGE 7
#
# SET UP FOR PARSING
#
	SPARSE=-1				#ASSUME PARSE FAILS.
	ADJ=0					#CLEAR PARTS HOLDERS.
	ACT=0
	PREP=0
	PPTR=0
	O1=0
	O2=0
	P1=0
	P2=0
#D	DFLAG=AND(PRSFLG,o'4').NE.0
#
	BUZLNT=20
	PRPLNT=48
	DIRLNT=75

# SPARSE, PAGE 8
#
# NOW LOOP OVER INPUT BUFFER OF LEXICAL TOKENS.
#
	DO I=1,LLNT,2 {				#TWO WORDS/TOKEN.
	  LBUF1=LBUF(I)				#GET CURRENT TOKEN.
	  LBUF2=LBUF(I+1)
	  IF(LBUF1.EQ.0) GO TO 1500		#END OF BUFFER?
#
# CHECK FOR BUZZ WORD
#
	  DO 50 J=1,BUZLNT,2
	    IF((LBUF1.EQ.BVOC(J)).AND.(LBUF2.EQ.BVOC(J+1))) {
		NEXT				#IGNORE BUZZ WORDS.
		}
50	  CONTINUE
#
# CHECK FOR ACTION OR DIRECTION
#
	  IF(ACT.NE.0) GO TO 75			#GOT ACTION ALREADY?
	  J=1					#CHECK FOR ACTION.
125	  IF((LBUF1.EQ.VVOC(J)).AND.(LBUF2.EQ.VVOC(J+1))) {
		GO TO 3000
		}
150	  J=J+2					#ADV TO NEXT SYNONYM.
	  IF(.NOT.OTEST(VVOC(J))) GO TO 125	#ANOTHER VERB?
	  J=J+VVOC(J)+1				#NO, ADVANCE OVER SYNTAX.
	  IF(VVOC(J).NE.-1) GO TO 125		#TABLE DONE?
#
75	  IF((ACT.NE.0).AND.((VVOC(ACT).NE.R50WAL).OR.
		(PREP.NE.0))) GO TO 200		#NO ACTION OR WALK?
	  DO J=1,DIRLNT,3 {			#THEN CHK FOR DIR.
	    IF((LBUF1.EQ.DVOC(J)).AND.(LBUF2.EQ.DVOC(J+1))) {
		GO TO 2000
		}
C100	  CONTINUE
	    }
#
# NOT AN ACTION, CHECK FOR PREPOSITION, ADJECTIVE, OR OBJECT.
#
200	  DO J=1,PRPLNT,3 {			#LOOK FOR PREPOSITION.
	    IF((LBUF1.EQ.PVOC(J)).AND.(LBUF2.EQ.PVOC(J+1))) {
		GO TO 4000
		}
C250	  CONTINUE
	    }
#
	  J=1					#LOOK FOR ADJECTIVE.
300	  IF((LBUF1.EQ.AVOC(J)).AND.(LBUF2.EQ.AVOC(J+1))) {
		GO TO 5000
		}
	  J=J+1
325	  J=J+1					#ADVANCE TO NEXT ENTRY.
	  IF(OTEST(AVOC(J))) GO TO 325	#A RADIX 50 CONSTANT?
	  IF(AVOC(J).NE.-1) GO TO 300		#POSSIBLY, END TABLE?
#
	  J=1					#LOOK FOR OBJECT.
450	  IF((LBUF1.EQ.OVOC(J)).AND.(LBUF2.EQ.OVOC(J+1))) {
		GO TO 600
		}
	  J=J+1
500	  J=J+1
	  IF(OTEST(OVOC(J))) GO TO 500
	  IF(OVOC(J).NE.-1) GO TO 450
#
# NOT RECOGNIZABLE
#
	  IF(VBFLAG) CALL RSPEAK(601)
	  RETURN

# SPARSE, PAGE 9
#
# OBJECT PROCESSING (CONTINUATION OF DO LOOP ON PREV PAGE)
#
600	  OBJ=GETOBJ(J,ADJ,0)			#IDENTIFY OBJECT.
#D	  IF(DFLAG) TYPE 60,J,OBJ
#D60	  FORMAT(' SPARSE- OBJ AT ',I6,'  OBJ= ',I6)
	  IF(OBJ.LE.0) GO TO 6000		#IF LE, COULDNT.
	  IF(OBJ.NE.ITOBJ) GO TO 650		#"IT"?
	  OBJ=GETOBJ(0,0,spv(1))		#FIND LAST.
	  IF(OBJ.LE.0) GO TO 6000		#IF LE, COULDNT.
#
650	  IF(PREP.EQ.9) GO TO 8000		#"OF" OBJ?
	  IF(PPTR.EQ.2) GO TO 7000		#TOO MANY OBJS?
	  PPTR=PPTR+1
	  OBJVEC(PPTR)=OBJ			#STUFF INTO VECTOR.
	  PRPVEC(PPTR)=PREP
700	  PREP=0
	  ADJ=0
	  }					#AT LAST.
#
# NOW SOME MISC CLEANUP
#
1500	IF(ACT.EQ.0) ACT=OFLAG.AND.OACT	#IF NO ACT, STEAL ORPHAN.
	IF(ACT.EQ.0) GO TO 9000			#IF STILL NONE, PUNT.
	IF(ADJ.NE.0) GO TO 10000		#IF DANGLING ADJ, PUNT.
#
	IF((OFLAG.NE.0).AND.(OPREP.NE.0).AND.(PREP.EQ.0).AND.
		(O1.NE.0).AND.(O2.EQ.0).AND.(ACT.EQ.OACT)) {
		GO TO 11000
		}
#
	SPARSE=0				#PARSE SUCCEEDS.
	IF(PREP.EQ.0) GO TO 1750		#IF DANGLING PREP,
	IF((PPTR.EQ.0).OR.(PRPVEC(PPTR).NE.0)) {
		GO TO 12000			#AND HAVE 'PICK FROB UP',
		}
	PRPVEC(PPTR)=PREP			#CVT TO 'PICK UP FROB'.
1750	CONTINUE				#WIN.
#D	IF(DFLAG) TYPE 70,ACT,O1,O2,P1,P2
#D70	FORMAT(' SPARSE RESULTS- ',5I7)
	RETURN

# SPARSE, PAGE 10
#
# SPECIAL PARSE PROCESSORS
#
# 2000--	DIRECTION
#
2000	PRSA=WALKW				#VERB IS WALK.
	PRSO=DVOC(J+2)				#GET DIRECTION.
	SPARSE=1				#WIN TOTALLY.
#D	IF(DFLAG) TYPE 10,J
#D10	FORMAT(' SPARSE- DIR AT ',I6)
	RETURN
#
# 3000--	ACTION
#
3000	ACT=J					#SAVE INDEX TO VERB.
	OACT=0					#NO ORPHAN.
#
	IF(vvoc(act+3).ne.255)GO TO 3500		#AGAIN PROCESSOR
	IF(SPV(4))GOTO 3200			#IF PREVIOUS COMMAND WAS BAD
	CALL RSPEAK(622)			#CHOMP
	RETURN
# ELSE
3200	PRSA=SPV(2)
	PRSO=SPV(1)
	PRSI=SPV(3)
#D	IF(DFLAG)TYPE 15,SPV
#D15	FORMAT(' SPARSE- AGAIN: ',4I6)
	SPARSE=1				#DO NOT REVALIDATE THE LINE
	RETURN
#
3500	CONTINUE
#D	IF(DFLAG) TYPE 20,J
#D20	FORMAT(' SPARSE- ACT AT ',I6)
	GO TO 1000				#DONE.
#
