home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume2 / dungeon / part07 / dso3.F < prev    next >
Text File  |  1987-09-01  |  3KB  |  133 lines

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