	IMPLICIT INTEGER (A-Z)
	LOGICAL QHERE
#
# 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)
#
	WEIGHT=0
	DO I=1,OLNT {				#OMIT BIG FIXED ITEMS.
	  IF(OSIZE(I).GE.10000) NEXT		#IF FIXED, FORGET IT.
	  IF((QHERE(I,RM).AND.(RM.NE.0)).OR.
		((OADV(I).EQ.AD).AND.(AD.NE.0))) GO TO 50
	  J=I					#SEE IF CONTAINED.
25	  J=OCAN(J)				#GET NEXT LEVEL UP.
	  IF(J.EQ.0) GO TO 100			#END OF LIST?
	  IF(J.NE.CN) GO TO 25
50	  WEIGHT=WEIGHT+OSIZE(I)
	  }
	RETURN
	END

# GHERE--	IS GLOBAL ACTUALLY IN THIS ROOM?
#
# DECLARATIONS
#
	LOGICAL FUNCTION GHERE(OBJ,RM)
	IMPLICIT INTEGER(A-Z)
#
# ROOMS
#
	COMMON /ROOMS/ RLNT,RDESC2,RDESC1(215),REXIT(215),
		RACTIO(215),RVAL(215),RFLAG(215)
	INTEGER RRAND(215)
	EQUIVALENCE (RVAL,RRAND)
#
	COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR,
		RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND
#
	COMMON /RINDEX/ WHOUS,LROOM,CELLA
	COMMON /RINDEX/ MTROL,MAZE1	
	COMMON /RINDEX/ MGRAT,MAZ15	
	COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
	COMMON /RINDEX/ STREA,EGYPT,ECHOR
	COMMON /RINDEX/ TSHAF	
	COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
	COMMON /RINDEX/ CAROU	
	COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
	COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
	COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
	COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
	COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
	COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
	COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
	COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
	COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
	COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
	COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
#
	COMMON /STAR/ MBASE,STRBIT

# GHERE, PAGE 2
#
	GHERE=.TRUE.				#ASSUME WINS.
	GO TO (1000,1000,1000,1000,1000,1000,
		1000,1000,1000,1000,1000,
		2000,3000,4000,5000,5000,5000,6000,
		7000,8000,9000,9100,8000,10000),OBJ-STRBIT
	CALL BUG(60,OBJ)
#
# 1000--	STARS ARE ALWAYS HERE
#
1000	RETURN
#
# 2000--	BIRD
#
2000	GHERE=((RM.GE.FORE1).AND.(RM.LT.CLEAR)).OR.(RM.EQ.MTREE)
	RETURN
#
# 3000--	TREE
#
3000	GHERE=((RM.GE.FORE1).AND.(RM.LT.CLEAR)).AND.(RM.NE.FORE3)
	RETURN
#
# 4000--	NORTH WALL
#
4000	GHERE=(RM.GE.BKVW).AND.(RM.LE.BKBOX)
	RETURN
#
# 5000--	EAST, SOUTH, WEST WALLS
#
5000	GHERE=(RM.GE.BKVW).AND.(RM.LT.BKBOX)
	RETURN
#
# 6000--	GLOBAL WATER
#
6000	GHERE=AND(RFLAG(RM),(RWATER+RFILL)).NE.0
	RETURN
#
# 7000--	GLOBAL GUARDIANS
#
7000	GHERE=((RM.GE.MRC).AND.(RM.LE.MRD)).OR.((RM.GE.MRCE).AND.(RM.LE.MRDW)).OR.(RM.EQ.INMIR)
	RETURN
#
# 8000--	ROSE/CHANNEL
#
8000	GHERE=((RM.GE.MRA).AND.(RM.LE.MRD)).OR.(RM.EQ.INMIR)
	RETURN
#
# 9000--	MIRROR
# 9100		PANEL
#
9100	IF(RM.EQ.FDOOR) RETURN			#PANEL AT FDOOR.
9000	GHERE=((RM.GE.MRA).AND.(RM.LE.MRC)).OR.((RM.GE.MRAE).AND.(RM.LE.MRCW))
	RETURN
#
# 10000--	MASTER
#
10000	GHERE=(RM.EQ.FDOOR).OR.(RM.EQ.NCORR).OR.(RM.EQ.PARAP).OR.(RM.EQ.CELL)
	RETURN
#
	END

# MRHERE--	IS MIRROR HERE?
#
# DECLARATIONS
#
	INTEGER FUNCTION MRHERE(RM)
	IMPLICIT INTEGER(A-Z)
#
# ROOMS
#
	COMMON /RINDEX/ WHOUS,LROOM,CELLA
	COMMON /RINDEX/ MTROL,MAZE1	
	COMMON /RINDEX/ MGRAT,MAZ15	
	COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
	COMMON /RINDEX/ STREA,EGYPT,ECHOR
	COMMON /RINDEX/ TSHAF	
	COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
	COMMON /RINDEX/ CAROU	
	COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
	COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
	COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
	COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
	COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
	COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
	COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
	COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
	COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
	COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
	COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
#
# 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

# MRHERE, PAGE 2
#
	IF((RM.LT.MRAE).OR.(RM.GT.MRDW)) GO TO 100
#
# RM IS AN E-W ROOM, MIRROR MUST BE N-S (MDIR= 0 OR 180)
#
	MRHERE=1			#ASSUME MIRROR 1 HERE.
	IF(MOD(RM-MRAE,2).EQ.(MDIR/180)) MRHERE=2
	RETURN
#
# RM IS NORTH OR SOUTH OF MIRROR.  IF MIRROR IS N-S OR NOT
# WITHIN ONE ROOM OF RM, LOSE.
#
100	MRHERE=0
	IF((IABS(MLOC-RM).NE.1).OR.(MOD(MDIR,180).EQ.0)) RETURN
#
# RM IS WITHIN ONE OF MLOC, AND MDIR IS E-W
#
	MRHERE=1
	IF(((RM.LT.MLOC).AND.(MDIR.LT.180)).OR.((RM.GT.MLOC).AND.(MDIR.GT.180)))
		MRHERE=2
	RETURN
	END

# ENCRYP--	ENCRYPT PASSWORD
#
# DECLARATIONS
#
	SUBROUTINE ENCRYP(INW,OUTW)
	IMPLICIT INTEGER(A-Z)
	LOGICAL INW(6),OUTW(6),KEYW(6)
	INTEGER UINW(6),UKEYW(6)
	DATA KEYW/'E','C','O','R','M','S'/
#
	UINWS=0					#UNBIASED INW SUM.
	UKEYWS=0				#UNBIASED KEYW SUM.
	J=1					#POINTER IN KEYWORD.
	DO I=1,6 {				#UNBIAS, COMPUTE SUMS.
	  UKEYW(I)=(KEYW(I)/o'4000000000')-o'100'	#STRIP ASCII.
	  IF((INW(J)/o'4000000000').LE.o'100') J=1	#RECYCLE ON BAD.
	  UINW(I)=(INW(J)/o'4000000000')-o'100'
	  UKEYWS=UKEYWS+UKEYW(I)
	  UINWS=UINWS+UINW(I)
	  J=J+1
	  }
#
	USUM=MOD(UINWS,8)+(8*MOD(UKEYWS,8))	#COMPUTE MASK.
	DO I=1,6 {
	  J=AND(XOR(XOR(UINW(I),UKEYW(I)),USUM),o'37')
	  USUM=MOD(USUM+1,32)
	  IF(J.GT.26) J=MOD(J,26)
	  OUTW(I)=MAX0(1,J)*o'4000000000'+'@'
	  }
	RETURN
#
	END
	INTEGER FUNCTION RND(X)
	INTEGER X
#
	RND = INT(FLOAT(X) * RAN(FOO))
	END
