home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume2 / dungeon / part07 / dso7.F < prev    next >
Text File  |  1987-09-01  |  3KB  |  146 lines

  1. C ENCRYP--    ENCRYPT PASSWORD
  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.     SUBROUTINE ENCRYP(INW,OUTW)
  10.     IMPLICIT INTEGER(A-Z)
  11.     CHARACTER INW(6),OUTW(6)
  12.     CHARACTER  KEYW(6),UKEYW(6)
  13.     INTEGER UINW(6)
  14.     DATA KEYW/'E','C','O','R','M','S'/
  15. C
  16.     UINWS=0
  17. C                        !UNBIASED INW SUM.
  18.     UKEYWS=0
  19. C                        !UNBIASED KEYW SUM.
  20.     J=1
  21. C                        !POINTER IN KEYWORD.
  22.     DO 100 I=1,6
  23. C                        !UNBIAS, COMPUTE SUMS.
  24.       UKEYW(I)=char(ichar(KEYW(I))-64)
  25.       IF(INW(J).LE.char(64)) J=1
  26.       UINW(I)=ichar(ichar(INW(J))-64)
  27.       UKEYWS=UKEYWS+ichar(UKEYW(I))
  28.       UINWS=UINWS+UINW(I)
  29.       J=J+1
  30. 100    CONTINUE
  31. C
  32.     USUM=MOD(UINWS,8)+(8*MOD(UKEYWS,8))
  33. C                        !COMPUTE MASK.
  34.     DO 200 I=1,6
  35.       J=and(xor(xor(ichar(UINW(I)),ichar(UKEYW(I))),USUM),31)
  36.       USUM=MOD(USUM+1,32)
  37.       IF(J.GT.26) J=MOD(J,26)
  38.       OUTW(I)=char(MAX0(1,J)+64)
  39. 200    CONTINUE
  40.     RETURN
  41. C
  42.     END
  43. C CPGOTO--    MOVE TO NEXT STATE IN PUZZLE ROOM
  44. C
  45. C DECLARATIONS
  46. C
  47.     SUBROUTINE CPGOTO(ST)
  48.     IMPLICIT INTEGER(A-Z)
  49. C
  50.     COMMON /HYPER/ HFACTR
  51. #include "rooms.h"
  52. #include "rflag.h"
  53. #include "rindex.h"
  54. #include "objects.h"
  55. #include "oflags.h"
  56. #include "flags.h"
  57. C CPGOTO, PAGE 2
  58. C
  59.     RFLAG(CPUZZ)=and(RFLAG(CPUZZ),not(RSEEN))
  60.     DO 100 I=1,OLNT
  61. C                        !RELOCATE OBJECTS.
  62.       IF((OROOM(I).EQ.CPUZZ).AND.
  63. &        (and(OFLAG2(I),(ACTRBT+VILLBT)).EQ.0))
  64. &        CALL NEWSTA(I,0,CPHERE*HFACTR,0,0)
  65.       IF(OROOM(I).EQ.(ST*HFACTR))
  66. &        CALL NEWSTA(I,0,CPUZZ,0,0)
  67. 100    CONTINUE
  68.     CPHERE=ST
  69.     RETURN
  70. C
  71.     END
  72. C CPINFO--    DESCRIBE PUZZLE ROOM
  73. C
  74. C DECLARATIONS
  75. C
  76.     SUBROUTINE CPINFO(RMK,ST)
  77.     IMPLICIT INTEGER(A-Z)
  78.     INTEGER DGMOFT(8)
  79.     CHARACTER  DGM(8),PICT(5),QMK
  80. C
  81.     COMMON /CHAN/ INPCH,OUTCH,DBCH
  82. C
  83. C PUZZLE ROOM
  84. C
  85.     COMMON /PUZZLE/ CPDR(16),CPWL(8),CPVEC(64)
  86. #include "flags.h"
  87. C
  88. C FUNCTIONS AND LOCAL DATA
  89. C
  90. C
  91.     DATA DGMOFT/-9,-8,-7,-1,1,7,8,9/
  92. #ifdef PDP
  93. C
  94. C    PICT, DGM and QMK have been changed from two to
  95. C    one character in length. Puzout prints two copies.
  96. C
  97.     DATA PICT/'S','S','S',' ','M'/
  98.     DATA QMK/'?'/
  99. #else
  100.     DATA PICT/'SS','SS','SS','  ','MM'/
  101.     DATA QMK/'??'/
  102. #endif PDP
  103. C CPINFO, PAGE 2
  104. C
  105.     CALL RSPEAK(RMK)
  106.     DO 100 I=1,8
  107.       J=DGMOFT(I)
  108.       DGM(I)=PICT(CPVEC(ST+J)+4)
  109. C                        !GET PICTURE ELEMENT.
  110.       IF((IABS(J).EQ.1).OR.(IABS(J).EQ.8)) GO TO 100
  111.       K=8
  112.       IF(J.LT.0) K=-8
  113. C                        !GET ORTHO DIR.
  114.       L=J-K
  115.       IF((CPVEC(ST+K).NE.0).AND.(CPVEC(ST+L).NE.0))
  116. &        DGM(I)=QMK
  117. 100    CONTINUE
  118. #ifdef PDP
  119.     call puzout(DGM(1))
  120. #else
  121.      WRITE(OUTCH,10) DGM
  122. #endif
  123. C
  124.     IF(ST.EQ.10) CALL RSPEAK(870)
  125. C                        !AT HOLE?
  126.     IF(ST.EQ.37) CALL RSPEAK(871)
  127. C                        !AT NICHE?
  128.     I=872
  129. C                        !DOOR OPEN?
  130.     IF(CPOUTF) I=873
  131.     IF(ST.EQ.52) CALL RSPEAK(I)
  132. C                        !AT DOOR?
  133.     IF(CPVEC(ST+1).EQ.-2) CALL RSPEAK(874)
  134. C                        !EAST LADDER?
  135.     IF(CPVEC(ST-1).EQ.-3) CALL RSPEAK(875)
  136. C                        !WEST LADDER?
  137.     RETURN
  138. C
  139. #ifndef PDP
  140. 10    FORMAT('       |',A2,1X,A2,1X,A2,'|'/,
  141. &    ' West  |',A2,' .. ',A2,'|  East',/
  142. &    '       |',A2,1X,A2,1X,A2,'|')
  143. #endif PDP
  144. C
  145.     END
  146.