1C FINDXT- FIND EXIT FROM ROOM 2C 3C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 4C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED 5C WRITTEN BY R. M. SUPNIK 6C 7C DECLARATIONS 8C 9 LOGICAL FUNCTION FINDXT(DIR,RM) 10 IMPLICIT INTEGER (A-Z) 11#include "rooms.h" 12#include "exits.h" 13#include "curxt.h" 14#include "xpars.h" 15C 16 FINDXT=.TRUE. 17C !ASSUME WINS. 18 XI=REXIT(RM) 19C !FIND FIRST ENTRY. 20 IF(XI.EQ.0) GO TO 1000 21C !NO EXITS? 22C 23100 I=TRAVEL(XI) 24C !GET ENTRY. 25 XROOM1=and(I,XRMASK) 26c mask to 16-bits to get rid of sign extension problems with 32-bit ints 27 XXXFLG = and(not(XLFLAG), 65535) 28 XTYPE=and((and(I,XXXFLG)/XFSHFT),XFMASK)+1 29 GO TO (110,120,130,130),XTYPE 30C !BRANCH ON ENTRY. 31 CALL BUG(10,XTYPE) 32C 33130 XOBJ=and(TRAVEL(XI+2),XRMASK) 34 XACTIO=TRAVEL(XI+2)/XASHFT 35120 XSTRNG=TRAVEL(XI+1) 36C !DOOR/CEXIT/NEXIT - STRING. 37110 XI=XI+XELNT(XTYPE) 38C !ADVANCE TO NEXT ENTRY. 39 IF(and(I,XDMASK).EQ.DIR) RETURN 40 IF(and(I,XLFLAG).EQ.0) GO TO 100 411000 FINDXT=.FALSE. 42C !YES, LOSE. 43 RETURN 44 END 45C FWIM- FIND WHAT I MEAN 46C 47C DECLARATIONS 48C 49 INTEGER FUNCTION FWIM(F1,F2,RM,CON,ADV,NOCARE) 50 IMPLICIT INTEGER (A-Z) 51 LOGICAL NOCARE 52#include "objects.h" 53#include "oflags.h" 54C 55 FWIM=0 56C !ASSUME NOTHING. 57 DO 1000 I=1,OLNT 58C !LOOP 59 IF(((RM.EQ.0).OR.(OROOM(I).NE.RM)) .AND. 60& ((ADV.EQ.0).OR.(OADV(I).NE.ADV)) .AND. 61& ((CON.EQ.0).OR.(OCAN(I).NE.CON))) 62& GO TO 1000 63C 64C OBJECT IS ON LIST... IS IT A MATCH? 65C 66 IF(and(OFLAG1(I),VISIBT).EQ.0) GO TO 1000 67 IF(and(not(NOCARE),(and(OFLAG1(I),TAKEBT).EQ.0)) .OR. 68& ((and(OFLAG1(I),F1).EQ.0).AND. 69& (and(OFLAG2(I),F2).EQ.0))) GO TO 500 70 IF(FWIM.EQ.0) GO TO 400 71C !ALREADY GOT SOMETHING? 72 FWIM=-FWIM 73C !YES, AMBIGUOUS. 74 RETURN 75C 76400 FWIM=I 77C !NOTE MATCH. 78C 79C DOES OBJECT CONTAIN A MATCH? 80C 81500 IF(and(OFLAG2(I),OPENBT).EQ.0) GO TO 1000 82 DO 700 J=1,OLNT 83C !NO, SEARCH CONTENTS. 84 IF((OCAN(J).NE.I).OR.(and(OFLAG1(J),VISIBT).EQ.0) .OR. 85& ((and(OFLAG1(J),F1).EQ.0).AND. 86& (and(OFLAG2(J),F2).EQ.0))) GO TO 700 87 IF(FWIM.EQ.0) GO TO 600 88 FWIM=-FWIM 89 RETURN 90C 91600 FWIM=J 92700 CONTINUE 931000 CONTINUE 94 RETURN 95 END 96C YESNO- OBTAIN YES/NO ANSWER 97C 98C CALLED BY- 99C 100C YES-IS-TRUE=YESNO(QUESTION,YES-STRING,NO-STRING) 101C 102 LOGICAL FUNCTION YESNO(Q,Y,N) 103 IMPLICIT INTEGER(A-Z) 104 COMMON /CHAN/ INPCH,OUTCH,DBCH 105 CHARACTER ANS 106C 107100 CALL RSPEAK(Q) 108C !ASK 109#ifdef PDP 110 call rdchr(ANS) 111#else 112 READ(INPCH,110) ANS 113#endif PDP 114C !GET ANSWER 115110 FORMAT(A1) 116 IF((ANS.EQ.'Y').OR.(ANS.EQ.'y')) GO TO 200 117 IF((ANS.EQ.'N').OR.(ANS.EQ.'n')) GO TO 300 118 CALL RSPEAK(6) 119C !SCOLD. 120 GO TO 100 121C 122200 YESNO=.TRUE. 123C !YES, 124 CALL RSPEAK(Y) 125C !OUT WITH IT. 126 RETURN 127C 128300 YESNO=.FALSE. 129C !NO, 130 CALL RSPEAK(N) 131C !LIKEWISE. 132 RETURN 133C 134 END 135