| 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 | |
Xet Storage Details
- Size:
- 10 kB
- Xet hash:
- 34a4420655ae8641e68ec60c70656a52279b52b54c253f364ccceaaf009eb81d
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.