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