C FINDXT- FIND EXIT FROM ROOM
C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
C WRITTEN BY R. M. SUPNIK
LOGICAL FUNCTION FINDXT(DIR,RM)
c mask to 16-bits to get rid of sign extension problems with 32-bit ints
XXXFLG = and(not(XLFLAG), 65535)
XTYPE=and((and(I,XXXFLG)/XFSHFT),XFMASK)+1
GO TO (110,120,130,130),XTYPE
130 XOBJ=and(TRAVEL(XI+2),XRMASK)
XACTIO=TRAVEL(XI+2)/XASHFT
C !DOOR/CEXIT/NEXIT - STRING.
C !ADVANCE TO NEXT ENTRY.
IF(and(I,XDMASK).EQ.DIR) RETURN
IF(and(I,XLFLAG).EQ.0) GO TO 100
INTEGER FUNCTION FWIM(F1,F2,RM,CON,ADV,NOCARE)
IF(((RM.EQ.0).OR.(OROOM(I).NE.RM)) .AND.
& ((ADV.EQ.0).OR.(OADV(I).NE.ADV)) .AND.
& ((CON.EQ.0).OR.(OCAN(I).NE.CON)))
C OBJECT IS ON LIST... IS IT A MATCH?
IF(and(OFLAG1(I),VISIBT).EQ.0) GO TO 1000
IF(and(not(NOCARE),(and(OFLAG1(I),TAKEBT).EQ.0)) .OR.
& ((and(OFLAG1(I),F1).EQ.0).AND.
& (and(OFLAG2(I),F2).EQ.0))) GO TO 500
C !ALREADY GOT SOMETHING?
C DOES OBJECT CONTAIN A MATCH?
500 IF(and(OFLAG2(I),OPENBT).EQ.0) GO TO 1000
IF((OCAN(J).NE.I).OR.(and(OFLAG1(J),VISIBT).EQ.0) .OR.
& ((and(OFLAG1(J),F1).EQ.0).AND.
& (and(OFLAG2(J),F2).EQ.0))) GO TO 700
C YESNO- OBTAIN YES/NO ANSWER
C YES-IS-TRUE=YESNO(QUESTION,YES-STRING,NO-STRING)
LOGICAL FUNCTION YESNO(Q,Y,N)
COMMON /CHAN/ INPCH,OUTCH,DBCH
IF((ANS.EQ.'Y').OR.(ANS.EQ.'y')) GO TO 200
IF((ANS.EQ.'N').OR.(ANS.EQ.'n')) GO TO 300