|
|
1.1 ! root 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.