DECLARE FUNCTION decr$ (x$) CLS INPUT "Encrypted file >", infile$ INPUT "Produce xrf file (y/n)"; f$ 'INPUT "Was it text only (y/n)"; t$ IF f$ = "y" THEN xrf = 1 outfile$ = infile$ + ".dc" fullfile$ = infile$ + ".src" xref$ = infile$ + ".xrf" infile$ = infile$ + ".gs" TYPE RoomRecord 'picture AS STRING * 4 'Space AS STRING * 1 exits AS STRING * 20 descr AS STRING * 1440 END TYPE OPEN fullfile$ FOR OUTPUT AS #2 DIM v$(0 TO 300), cmd$(100), o$(300), c(100, 2), type$(6) 'GOTO testrooms REM first, get the vocab IF xrf THEN OPEN "xrefv.544" FOR OUTPUT AS #4: CLOSE #4 OPEN infile$ + "5" FOR INPUT AS #1 currentword = 0 WHILE EOF(1) = 0 PRINT #2, currentword; ": "; currentword = currentword + 1 IF xrf THEN OPEN "xrefv." + MID$(STR$(1000 + currentword), 3) FOR OUTPUT AS #4 CLOSE #4 END IF FOR word = 1 TO 4 word$ = "" w$ = INPUT$(20, #1) D$ = decr$(w$) IF LEFT$(D$, 1) = CHR$(9) THEN D$ = " " n = INSTR(D$, " ") IF n = 0 THEN word$ = D$ IF n <> 0 THEN word$ = LEFT$(D$, n - 1) IF word$ <> "" THEN PRINT #2, word$; ", "; IF word = 1 THEN v$(currentword) = word$ NEXT PRINT #2, CHR$(13); WEND cr$ = CHR$(13) cr2$ = cr$ + cr$ cr3$ = cr$ + cr$ + cr$ PRINT #2, " ": PRINT #2, "-----------------------": PRINT #2, " ": CLOSE #1 maxwords = currentword REM Vocab entered, now get object names OPEN infile$ + "4" FOR INPUT AS #1 object = 1 WHILE EOF(1) = 0 IF xrf THEN OPEN "xrefo." + MID$(STR$(1000 + object), 3) FOR OUTPUT AS #4 CLOSE #4 END IF w$ = INPUT$(24, #1) room$ = decr$(LEFT$(w$, 3)) name$ = decr$(MID$(w$, 4)) name$ = LEFT$(name$, INSTR(name$ + " ", " ") - 1) o$(object) = name$ PRINT #2, "Object"; object; ", the "; name$; " starts in room"; room$ object = object + 1 WEND PRINT #2, " ": PRINT #2, "-------------------"; : PRINT #2, " ": CLOSE #1 o$(0) = "object" maxobjects = object - 1 TYPE MsgRecord Message AS STRING * 400 END TYPE DIM TheMsg AS MsgRecord OPEN infile$ + "3" FOR RANDOM AS #1 LEN = LEN(TheMsg) records = LOF(1) / LEN(TheMsg) n = 400 FOR currentrecord = 1 TO records IF xrf THEN OPEN "xrefm." + MID$(STR$(1000 + currentrecord), 3) FOR OUTPUT AS #4 CLOSE #4 END IF GET #1, currentrecord, TheMsg outmsg$ = decr$(TheMsg.Message) 'n = INSTR(outmsg$, "<") outmsg$ = LEFT$(outmsg$, n) PRINT #2, "Message"; currentrecord PRINT #2, outmsg$ NEXT PRINT #2, " ": PRINT #2, "-----------------": PRINT #2, " ": CLOSE #1 maxmsg = records IF xrf THEN FOR flagnum = 1 TO 104 OPEN "xreff." + MID$(STR$(1000 + flagnum), 3) FOR OUTPUT AS #4 CLOSE #4 NEXT END IF REM Vocab, objects, messages done, now do cmds READ opnum WHILE opnum <> 999 opnum = opnum - 500 READ cmd$(opnum), c(opnum, 1), c(opnum, 2) READ opnum WEND type$(2) = "Room #" type$(3) = "Mess #" type$(4) = "Flag #" type$(5) = " " f$(1) = "xrefo." f$(2) = "xrefr." f$(3) = "xrefm." f$(4) = "xreff." indented = 0 OPEN infile$ + "1" FOR INPUT AS #1 startloop: WHILE EOF(1) = 0 INPUT #1, num skipinp: IF num = 501 THEN INPUT #1, w1, w2 w1$ = "*": w2$ = "*" IF w1 <= 300 THEN w1$ = v$(w1) IF w2 <= 300 THEN w2$ = v$(w2) commandnum = commandnum + 1 PRINT cr2$; "COMMAND "; commandnum; w1$; " "; w2$ PRINT #2, " ": PRINT #2, " " PRINT #2, "COMMAND "; commandnum; w1$; " "; w2$ currentcommand$ = w1$ + " " + w2$ IF xrf THEN OPEN "xrefv." + MID$(STR$(1000 + w1), 3) FOR APPEND AS #4 PRINT #4, commandnum; currentcommand$ CLOSE #4 OPEN "xrefv." + MID$(STR$(1000 + w2), 3) FOR APPEND AS #4 PRINT #4, commandnum; currentcommand$ CLOSE #4 END IF GOTO endloop END IF IF num < 500 OR num > 599 THEN PRINT #2, num: GOTO skipcr IF cmd$(num - 500) = "" THEN PRINT "Unknown Opcode "; num INPUT "Opcode Name"; cmd$(num - 500) INPUT "Type of 1, 2"; c(num - 500, 1), c(num - 500, 2) END IF IF num = 542 OR num = 543 THEN indented = 1: IF indented = 0 AND num <> 541 THEN PRINT #2, " "; PRINT cmd$(num - 500); PRINT #2, cmd$(num - 500); IF num = 542 OR num = 543 GOTO skipcr IF num = 540 THEN 'rem SOUND x = 1 WHILE x <> 0 OR y <> 0 INPUT #1, x, y PRINT #2, "("; x; y; ")"; PRINT "("; x; y; ")"; WEND PRINT #2, " " INPUT #1, num GOTO skipcr END IF IF num = 539 THEN 'rem LINK PRINT #2, CHR$(34); : PRINT CHR$(34); FOR x = 1 TO 8 INPUT #1, num PRINT #2, CHR$(num); : PRINT CHR$(num); NEXT PRINT #2, CHR$(34): PRINT CHR$(34) GOTO skipcr END IF indented = 0 t1 = c(num - 500, 1) t2 = c(num - 500, 2) IF t1 > 0 THEN INPUT #1, num IF t1 = 1 THEN PRINT o$(num); : PRINT #2, o$(num); " "; IF t1 > 1 THEN PRINT type$(t1); num; : PRINT #2, type$(t1); num; IF xrf AND t1 <> 5 THEN OPEN f$(t1) + MID$(STR$(1000 + num), 3) FOR APPEND AS #4 PRINT #4, commandnum; currentcommand$ CLOSE #4 END IF IF t2 > 0 THEN INPUT #1, num IF t2 = 1 THEN PRINT o$(num); : PRINT #2, o$(num); " " IF t2 > 1 THEN PRINT type$(t2); num; : PRINT #2, type$(t2); num; IF xrf AND t2 <> 5 THEN OPEN f$(t1) + MID$(STR$(1000 + num), 3) FOR APPEND AS #4 PRINT #4, commandnum; currentcommand$ CLOSE #4 END IF END IF END IF PRINT #2, " " skipcr: endloop: WEND PRINT #2, "--------------------------": CLOSE #1 testrooms: DIM theRoom AS RoomRecord OPEN infile$ + "2" FOR RANDOM AS #1 LEN = LEN(theRoom) records = LOF(1) / LEN(theRoom) FOR currentrecord = 1 TO records IF xrf THEN OPEN "xrefr." + MID$(STR$(1000 + currentword), 3) FOR OUTPUT AS #4 CLOSE #4 END IF GET #1, currentrecord, theRoom pic$ = theRoom.picture exits$ = decr$(theRoom.exits) outroom$ = decr$(theRoom.descr) 'PRINT pic$ 'PRINT exits$ 'PRINT outroom$ n = INSTR(outroom$, "<") PRINT #2, "Room #"; currentrecord PRINT #2, "Picture #"; pic$ PRINT #2, "Exits :"; exits$; "!" PRINT #2, " " 'PRINT #2, outroom$ outroom$ = outroom$ + CHR$(13) opos = 1: npos = INSTR(outroom$, CHR$(13)) WHILE npos >= opos PRINT #2, MID$(outroom$, opos, npos - opos) opos = npos + 1 npos = INSTR(opos, outroom$, CHR$(13)) WEND NEXT maxrooms = records CLOSE ' OPEN f$(t1) + MID$(STR$(1000 + num), 3) FOR APPEND AS #4 IF xrf = 0 THEN END OPEN xref$ FOR OUTPUT AS #2 FOR currentword = 1 TO maxwords PRINT #2, v$(currentword) OPEN "xrefv." + MID$(STR$(1000 + currentword), 3) FOR INPUT AS #1 WHILE EOF(1) = 0 LINE INPUT #1, l$ PRINT #2, l$ WEND CLOSE #1 KILL "xrefv." + MID$(STR$(1000 + currentword), 3) NEXT OPEN "xrefv.544" FOR INPUT AS #1 PRINT #2, "*" WHILE EOF(1) = 0 LINE INPUT #1, l$ PRINT #2, l$ WEND CLOSE #1 KILL "xrefv.544" FOR currentobject = 1 TO maxobjects PRINT #2, "Object"; currentobject; "the "; o$(currentobject) OPEN f$(1) + MID$(STR$(1000 + currentobject), 3) FOR INPUT AS #1 WHILE EOF(1) = 0 LINE INPUT #1, l$ PRINT #2, l$ WEND CLOSE #1 KILL f$(1) + MID$(STR$(1000 + currentobject), 3) NEXT FOR currentmsg = 1 TO maxmsg PRINT #2, "Message"; currentmsg OPEN f$(3) + MID$(STR$(1000 + currentmsg), 3) FOR INPUT AS #1 WHILE EOF(1) = 0 LINE INPUT #1, l$ PRINT #2, l$ WEND CLOSE #1 KILL f$(3) + MID$(STR$(1000 + currentmsg), 3) NEXT FOR currentroom = 1 TO maxrooms PRINT #2, "Room"; currentroom OPEN f$(2) + MID$(STR$(1000 + currentroom), 3) FOR INPUT AS #1 WHILE EOF(1) = 0 LINE INPUT #1, l$ PRINT #2, l$ WEND CLOSE #1 KILL f$(2) + MID$(STR$(1000 + currentroom), 3) NEXT FOR currentflag = 1 TO 104 OPEN f$(4) + MID$(STR$(1000 + currentflag), 3) FOR INPUT AS #1 IF LOF(1) <> 0 THEN PRINT #2, "Flag"; currentflag WHILE EOF(1) = 0 LINE INPUT #1, l$ PRINT #2, l$ WEND END IF CLOSE #1 KILL f$(4) + MID$(STR$(1000 + currentflag), 3) NEXT END REM 1st is #, 2nd is opcode, 3rd& 4th type of argument REM 0 = none 3 = message REM 1 = object 4 = flag REM 2 = room 5 = number DATA 501, "Command ", 0, 0 DATA 502, "NOTAT ",2,0 DATA 503, "AT> ",2,0 DATA 504, "AT< ", 2,0 DATA 505, "AT ", 2, 0 DATA 506, "EXIST ", 1, 2 DATA 507, "GONE ", 1, 2 DATA 508, "PRESENT ",1,0 DATA 509, "NOTEXIST ",1,0 DATA 510, "FLAG= ", 4, 5 DATA 511, "FLAG<> ",4,5 DATA 512, "FLAG> ",4,5 DATA 513, "FLAG< ",4,5 DATA 514, "FFLAG= ",4,4 DATA 515, "FFLAG<> ",4,4 DATA 516, "FFLAG> ",4,4 DATA 517, "FFLAG< ",4,4 DATA 518, "RAND ",5,5 DATA 519, "CLS ",0,0 DATA 520, "DROP ", 0,0 DATA 521, "DUMP ", 0,0 DATA 522, "END ", 0, 0 DATA 523, "INVEN ",0, 0 DATA 524, "LOAD ",0,0 DATA 525, "PRESSKEY ", 0,0 DATA 526, "QUIT ", 0, 0 DATA 527, "SAVE ",0,0 DATA 528, "SHOW ", 0, 0 DATA 529, "FLAGSET ",4, 5 DATA 530, "FLAGADD ",4,5 DATA 531, "FFLAGADD ",4,4 DATA 532, "FLAGDEC ", 4,5 DATA 533, "GOTO ", 2, 0 DATA 534, "OBJ ",1, 2 DATA 535, "PAUSE ", 5,0 DATA 536, "PRINT ", 3, 0 DATA 537, "RANDSET ", 4, 5 DATA 538, "SHOWF ",4,0 DATA 539, "LINK ", 0,0 DATA 540, "SOUND ",0,0 DATA 541, "< ", 0, 0 DATA 542, "Do ", 0, 0 DATA 543, "If ", 0, 0 DATA 544, "* ", 0, 0 DATA 545, "GRAPH ",5,0 DATA 999, "XXXX ", 0, 0 END FUNCTION decr$ (x$) word$ = "" FOR letter = 1 TO LEN(x$) c = ASC(MID$(x$, letter, 1)) IF c <> 32 THEN c = (c + 9) MOD 256 word$ = word$ + CHR$(c) END IF NEXT decr$ = word$ END FUNCTION