Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
SwissAdventure/APML/ioplm-swiss.txt
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1523 lines (1420 sloc)
59.5 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*/ | |
*/ This has been built with COS/IOS 1.15 and 1.16. | |
*/ The only piece that might be a problem is the mod to deck AP, which | |
*/ declares the maximum number of overlays in your system. You may | |
*/ need to change the number to a slightly larger or smaller number. | |
*/ Also note that my change may conflict with your change, if you | |
*/ already change the number of overlays with local code. | |
*/ | |
*/ Ed Barnard, Cray Research Inc. | |
*/ ewb%crayamid.cray.com@uc.msc.umn.edu | |
*/ ewb@crayamid | |
*/ | |
*DK SWISS | |
LIST ON,NXRF | |
LISTOP (SWISS,$KOVL) | |
OVERLAY SWISS | |
** LIST GEN | |
************************************************************************ | |
* * | |
* Name - SWISS * | |
* * | |
* Input - None * | |
* * | |
* Output - None * | |
* * | |
* Function - Root overlay for Swiss Adventure * | |
* * | |
* Method - 1. Call SWSWEL to print instructions. * | |
* 2. Establish initial location. * | |
* 3. While not at last location, call SWSHOW to run the * | |
* show. * | |
* 4. Return (terminate). * | |
* * | |
************************************************************************ | |
REGDEFS (SCORE),,(WHERE,MODE,NEXT,AA,QUIT) | |
EXT %MYID,SW@BEGIN,SW@NE,SW@FINAL,SW@TRAVL,SW@SNIDE | |
EXT SW@CHECK | |
LIST OFF | |
*CALL SWISSCOM | |
LIST * | |
R!SCORE = 0 .Initialize score (checkpoints found) | |
R!QUIT = SW@QUIT | |
CALL SWSWEL | |
R!WHERE = R!%MYID + 1 | |
R!MODE = SW$TRAIN | |
$UNTIL (R!WHERE = SW@FINAL) | |
CALL SWSHOW,(R!WHERE,RO=NEXT,RO=MODE) | |
R!WHERE = R!NEXT | |
$IF (R!WHERE=R!QUIT) | |
* | |
* Our poor adventurer wants to bail out. Let him. | |
* | |
* SIMABORT | |
RETURN | |
$ENDIF | |
$ENDTIL | |
* | |
* We are at the final location. | |
* | |
CALL SWSHOW,(R!WHERE,RO=NEXT,RO=MODE) | |
RETURN | |
END | |
*DK SWSHOW | |
LIST ON,NXRF | |
LISTOP (SWSHOW,$KOVL) | |
OVERLAY SWSHOW | |
************************************************************************ | |
* * | |
* Name - SWSHOW * | |
* * | |
* Input - Current location ordinal * | |
* * | |
* Output - New location ordinal * | |
* Mode of travel to new location * | |
* * | |
* Function - Display location text, get new location * | |
* * | |
* Method - 1. Call SWSLOC to get description * | |
* 2. Display description * | |
* 3. Call SWCHECK to display checkpoint sign, if any * | |
* 4. Call SWSNEX to get new valid location * | |
* 5. Call SWSMOV to display trundle text * | |
* 6. Deallocate old description buffers * | |
* 7. Return: New location, travel mode to get there * | |
* * | |
* Registers- CL - Current location (input) * | |
* NL - New location (output) * | |
* TV - Travel mode (output) * | |
* * | |
* BA - Base address (offset) of the travel table * | |
* SW - L.M. address of current location descriptor (SW@)* | |
* TX - L.M. address of description text * | |
* TV1 - New travel mode (passed to TV) * | |
* NL1 - New location (passed to NL) * | |
* * | |
************************************************************************ | |
REGDEFS (SCORE),(CL,NL,TV),(BA,SW,TX,TV1,NL1,OUTMSG,INMSG,ASK | |
,__________________,LENTAB,TARGET,COUNT,MASK,TLEN,TCHAR) | |
EXT %MYID,SW@BEGIN,SW@NE,SW@FINAL,SW@TRAVL,SW@SNIDE | |
EXT SW@CHECK,SW@EXAM | |
LIST OFF | |
*CALL SWISSCOM | |
LIST * | |
BA = SW@BEGIN | |
CALL SWSLOC,(BA,CL,RO=SW,RO=TX) | |
MSG TX | |
CALL SWCHECK,(CL) | |
R = EXAM, CL=SW@EXAM | |
CALL SWSNEX,(SW,CL,RO=NL1,RO=TV1) | |
RELMEM TX | |
RELMEM SW | |
CALL SWSMOV,(R!TV1) | |
RETREG R!NL1,NL | |
RETREG R!TV1,TV | |
RETURN | |
* Text for final exam | |
BKDUP ECHO BLOCKS=(NAMES,LENS,PLEASE) | |
BLOCK BLOCKS | |
BLOCKS * | |
BLOCK * | |
BKDUP ENDDUP | |
TXDUP ECHO NAME="SW$ARAB",NUM="SW$ENGL" | |
BLOCK NAMES | |
START_NUM 'NAME'Z | |
DONE_NUM * | |
NEWPAGE | |
LEN_NUM EQUALS DONE_NUM-START_NUM | |
BLOCK * | |
MICNAME MICRO 'NAME' | |
MICLEN MICSIZE MICNAME | |
BLOCK LENS | |
LEN_NUM,MICLEN | |
BLOCK * | |
BLOCK PLEASE | |
P1_NUM 'Please name checkpoint no. NUM_: 'Z | |
P2_NUM * | |
NEWPAGE | |
ERRIF P2_NUM-P1_NUM,NE,D'16 | |
BLOCK * | |
TXDUP ENDDUP | |
EXAM * | |
* Administer final exam | |
GMEM ECHO SZ=(D'16,D'128),PT=(R!OUTMSG,R!INMSG) | |
GETMEM SZ,PT | |
$UNTIL (A=0) | |
PAUSE 1 | |
GETMEM SZ,PT | |
$ENDTIL | |
CLEAR START=PT,COUNT=SZ | |
GMEM ENDDUP | |
* Establish table bases (must still add in %B) | |
R!ASK = PLEASE | |
R!LENTAB=LENS | |
R!TARGET=NAMES | |
* Initial values | |
R!SCORE = 0 | |
R!COUNT = 1 | |
R!MASK = 1 | |
* Ask the sixteen questions. Quit when wrong answer reached. | |
$UNTIL (R!COUNT=D'17) | |
CLEAR START=R!OUTMSG,COUNT=D'16 | |
CLEAR START=R!INMSG,COUNT=D'128 | |
COPY %B+R!ASK,R!OUTMSG,D'16 | |
MSGR R!OUTMSG,D'128,R!INMSG | |
R!%W1=%B+R!LENTAB | |
R!TLEN=(R!%W1) .Compare length, parcels | |
R!LENTAB = R!LENTAB + 1 | |
R!%W1=%B+R!LENTAB | |
R!TCHAR = (R!%W1) | |
R!%W1 = %B + R!TARGET .Point to the correct answer | |
COMPARE R!%W1,0,R!INMSG,0,R!TCHAR,EQ=GOOD,LT=BAD,GT=BAD | |
GOOD * | |
ECH ECHO DEST=(SCORE,COUNT,TARGET,ASK,LENTAB),INC=(R!MASK,1,__ | |
,__________________R!TLEN,D'16,1) | |
R!DEST = R!DEST + INC | |
ECH ENDDUP | |
R!MASK = R!MASK < 1 | |
$ENDTIL | |
BAD * | |
RELMEM R!OUTMSG | |
RELMEM R!INMSG | |
EXIT | |
END | |
*DK SWSLOC | |
LIST ON,NXRF | |
LISTOP (SWSLOC,$KOVL) | |
OVERLAY SWSLOC | |
************************************************************************ | |
* * | |
* Name - SWSLOC * | |
* * | |
* Input - SW@ base offset, words * | |
* Entry ordinal (1-relative) * | |
* * | |
* Output - Local Memory pointer to SW@ entry * | |
* Local Memory pointer to text * | |
* * | |
* Function - Read a description entry into Local Memory * | |
* * | |
* Method - 1. ERRIF SW@LE,NE,8 * | |
* 2. Allocate SW@LE parcels Local Memory * | |
* 3. Determine SWSDAT overlay address in Buffer Memory * | |
* 4. Read 8 parcels/2 words to Local Memory buffer. * | |
* MOS address = (ordinal-1)*2 + SW@ base offset + * | |
* SWSDAT address. * | |
* 5. Determine text offset and length * | |
* 6. Allocate [text length*4]-parcel Local Memory buffer * | |
* 7. Read in text * | |
* 8. Return: Pointers to both buffers * | |
* * | |
************************************************************************ | |
REGDEFS (SCORE),(MOSOFF,ORD,LMDESC,LMTXT),___________________ | |
,__________________(AA,MU,ML,BL,BU,AB,TO,TL,D1,T1) | |
EXT %MYID,SW@BEGIN,SW@NE,SW@FINAL,SW@TRAVL,SW@SNIDE | |
EXT SW@CHECK | |
EXT OVLTABLE,O$SWSDAT | |
LIST OFF | |
*CALL SWISSCOM | |
LIST * | |
AA = D'8 | |
GETMEM AA,D1 .Allocate space for SW@ entry | |
$UNTIL (A=0) | |
PAUSE 1 | |
GETMEM AA,D1 | |
$ENDTIL | |
* Determine SWSDAT overlay address in Buffer Memory, by looking it | |
* up in the Kernel-resident Overlay Table | |
AA = O$SWSDAT | |
AA = AA<2 | |
AA = AA + OVLTABLE .OT@ entry address in Kernel | |
GET MU,OT@MUP,AA .MOS upper | |
GET ML,OT@MLO,AA .MOS lower | |
* Now the offset into SWSDAT | |
R!ORD = R!ORD - 1 .Ordinal was 1-relative | |
R!ORD = R!ORD<1 .2 MOS words per entry | |
AA = R!MOSOFF + R!ORD .Offset into overlay | |
BU = MU | |
C = 0 | |
BL = ML + AA .Absolute Buffer Memory address | |
BU = BU+1,C#0 | |
AA = 2 | |
MOSR BU,BL,D1,AA .Read SW@ entry | |
* Find and read in text | |
GET TO,SW@TXO,D1 .Text offset | |
GET TL,SW@TXL,D1 .Text length, words | |
AB = TL<2 .Text length, parcels | |
GETMEM AB,T1 .Allocate text buffer | |
$UNTIL (A=0) | |
PAUSE 1 | |
GETMEM AB,T1 | |
$ENDTIL | |
BU = MU | |
C = 0 | |
BL = TO + ML | |
BU = BU+1,C#0 .Buffer Memory text address | |
MOSR BU,BL,T1,TL .Read in the text | |
RETREG D1,R!LMDESC | |
RETREG T1,R!LMTXT | |
RETURN | |
END | |
*DK SWSMOV | |
LIST ON,NXRF | |
LISTOP (SWSMOV,$KOVL) | |
OVERLAY SWSMOV | |
************************************************************************ | |
* * | |
* Name - SWSMOV * | |
* * | |
* Input - Mode of travel * | |
* * | |
* Output - None * | |
* * | |
* Function - Display text showing travel * | |
* * | |
* Method - 1. Call SWSLOC to get travel description * | |
* 2. Display description * | |
* 3. Deallocate description buffers * | |
* 4. Return * | |
* * | |
************************************************************************ | |
REGDEFS (SCORE),(TM),(MOSOFF,LMDESC,LMTXT) | |
EXT %MYID,SW@BEGIN,SW@NE,SW@FINAL,SW@TRAVL,SW@SNIDE | |
EXT SW@CHECK | |
LIST OFF | |
*CALL SWISSCOM | |
LIST * | |
R!MOSOFF = SW@TRAVL .Table base in overlay | |
CALL SWSLOC,(R!MOSOFF,TM,RO=LMDESC,RO=LMTXT) | |
MSG R!LMTXT | |
RELMEM R!LMDESC | |
RELMEM R!LMTXT | |
RETURN | |
END | |
*DK SWSNEX | |
LIST ON,NXRF | |
LISTOP (SWSNEX,$KOVL) | |
OVERLAY SWSNEX | |
************************************************************************ | |
* * | |
* Name - SWSNEX * | |
* * | |
* Input - Local Memory address of current location descriptor (SW@)* | |
* Current location ordinal * | |
* * | |
* Output - Ordinal of new location * | |
* Mode of travel to get there * | |
* * | |
* Function - Get new valid location * | |
* * | |
* Method - 1. Allocate prompt buffer * | |
* 2. Allocate and clear response buffer * | |
* 3. Prompt and read travel description * | |
* 4. Deallocate Local Memory buffers * | |
* 5. If response found in table, * | |
* return: New location * | |
* Mode of travel to get there * | |
* Return from overlay. * | |
* 6. Call SWSNO to write snide remark * | |
* 7. GOTO SWSNEX to try for a better response * | |
* * | |
************************************************************************ | |
REGDEFS (SCORE),(LMDESC,CL,NORD,TM),(IN,OUT,AA,AB,IT,N1,T1,CT) | |
EXT %MYID,SW@BEGIN,SW@NE,SW@FINAL,SW@TRAVL,SW@SNIDE | |
EXT SW@CHECK,SW@TEST,SW@EXAM | |
LIST OFF | |
*CALL SWISSCOM | |
LIST * | |
BLOCK TEXT | |
MESSAGE 'Where to, boss?'H,0 | |
MESSEND * | |
NEWPAGE | |
MESSL EQUALS MESSEND-MESSAGE | |
BLOCK * | |
CT = 0 .Invalid response count | |
STARTIT * | |
CT = CT + 1 | |
AA = MESSL | |
AB = D'256 | |
GMEM ECHO SZ=(AA,AB),PT=(R!OUT,IN) | |
GETMEM SZ,PT | |
$UNTIL (A=0) | |
PAUSE 1 | |
GETMEM SZ,PT | |
$ENDTIL | |
CLEAR START=PT,COUNT=SZ | |
GMEM ENDDUP | |
COPY %B+MESSAGE,R!OUT,AA | |
* Trap passing the exam as a special case. If our adventurer | |
* made it all the way through and passed the exam, shunt him or | |
* her directly into the victory circle. | |
$IF (CL=SW@EXAM),AND,(R!SCORE=177777) | |
IT = 'W'R .Go west to victory | |
$ELSE | |
MSGR R!OUT,AB,IN | |
IT = (IN)>D'8 .Read in first character | |
$ENDIF | |
RELMEM IN | |
RELMEM R!OUT | |
* Trap a QUIT request | |
AA = 'Q'R | |
$IF (AA=IT) | |
N1 = SW@QUIT | |
T1 = SW$QUIT | |
RETREG N1,R!NORD | |
RETREG T1,TM | |
RETURN | |
$ENDIF | |
* Now see if it's a good response | |
CHK ECHO DIREC="SW%DIR2" | |
AA = 'DIREC'R | |
$IF (AA=IT) | |
GET N1,SW@_DIREC_D,R!LMDESC | |
GET T1,SW@_DIREC_M,R!LMDESC | |
$IF (N1 = 0) .Can't go that way | |
P = NOPE | |
$ENDIF | |
* See if we require a certain score to proceed. | |
$IF (T1=SW$SCORE) | |
AA = SW@TEST | |
AB = CL-AA .Score must contain 2**AB | |
AA = 1 | |
B = AB | |
AA = AA < B .The needed bit | |
AB = R!SCORE & AA .Is it there? | |
P = NOPE, AB=0 .No | |
$ELSEIF (T1=SW$PASS) | |
P = NOPE, R!SCORE#177777 .Did not pass | |
$ENDIF | |
RETREG N1,R!NORD | |
RETREG T1,TM | |
RETURN | |
$ENDIF | |
CHK ENDDUP | |
* Not a valid response | |
NOPE * | |
CALL SWSNO | |
P = STARTIT | |
END | |
*DK SWCHECK | |
LIST ON,NXRF | |
LISTOP (SWCHECK,$KOVL) | |
OVERLAY SWCHECK | |
************************************************************************ | |
* * | |
* Name - SWCHECK * | |
* * | |
* Input - Current location ordinal * | |
* * | |
* Output - Updated score * | |
* * | |
* Function - If we are at a checkpoint, display signpost and * | |
* update score. * | |
* * | |
* Method - For each possible checkpoint (there are D'16 of them), * | |
* Call SWSLOC to get checkpoint descriptor (SW@CHECK) * | |
* Compare SW@ND to current location for a match (we * | |
* have set up the checkpoint descriptor so that the * | |
* travel-North-destination (SW@ND) points to this * | |
* checkpoint's location) * | |
* If we match, * | |
* Display checkpoint text (the signpost) * | |
* Form a 1-bit mask corresponding to the checkpoint * | |
* Merge the mask into SCORE (accomplish this by * | |
* clearing the target bit in SCORE and adding the * | |
* mask to SCORE). With this method, we do not care * | |
* how many times the checkpoint is seen. * | |
* Return * | |
* Endif * | |
* Endloop * | |
* Return * | |
* * | |
* Registers- SCORE - A bit mask, with bit 2**(n-1) corresponding to * | |
* checkpoint n. There are 16 checkpoints, * | |
* numbered 1 - 16. (Input and output) * | |
* * | |
* CL - Current location (input) * | |
* * | |
* BA - Base address (offset) of the checkpoint table * | |
* SW - L.M. address of checkpoint descriptor (SW@) * | |
* TX - L.M. address of description text * | |
* SC - Copy of SCORE at exit for display purposes * | |
* C2 - Copy of CL at exit for display purposes * | |
* CK - Checkpoint number * | |
* ND - SW@ND for this checkpoint (i.e. this * | |
* checkpoint's location) * | |
* MK - Bit mask for this checkpoint (single bit) * | |
* * | |
************************************************************************ | |
REGDEFS (SCORE),(CL),(BA,SW,TX,SC,C2,CK,ND,MK) | |
EXT %MYID,SW@BEGIN,SW@NE,SW@FINAL,SW@TRAVL,SW@SNIDE | |
EXT SW@CHECK | |
LIST OFF | |
*CALL SWISSCOM | |
LIST * | |
BA = SW@CHECK | |
MK = 1 | |
CK = 1 | |
$UNTIL (CK=D'17) | |
CALL SWSLOC,(BA,CK,RO=SW,RO=TX) | |
GET ND,SW@ND,SW | |
$IF (ND=CL) | |
MSG TX | |
RELMEM TX | |
RELMEM SW | |
* Update the score. Mask out the bit in case it's already | |
* there, then add it back in. | |
OR R!SCORE,MK,R!SCORE | |
SC = R!SCORE .For register display purposes | |
C2 = CL .Ditto. Use DIS,A,R431,HT=IOP on CSIM | |
RETURN | |
$ENDIF | |
RELMEM TX | |
RELMEM SW | |
C = 0 | |
CK = CK + 1 | |
C = 0 | |
MK = MK < 1 | |
C = 0 | |
$ENDTIL | |
RETURN | |
END | |
*DK SWSNO | |
LIST ON,NXRF | |
LISTOP (SWSNO,$KOVL) | |
OVERLAY SWSNO | |
************************************************************************ | |
* * | |
* Name - SWSNO * | |
* * | |
* Input - None * | |
* * | |
* Output - None * | |
* * | |
* Function - Display snide remark * | |
* * | |
* Method - 1. Determine random message ordinal * | |
* 2. Call SWSLOC to get remark text * | |
* 3. Display text * | |
* 4. Deallocate description buffers * | |
* 5. Return * | |
* * | |
************************************************************************ | |
REGDEFS (SCORE),,(AA,AB,LMDESC,LMTXT) | |
EXT %MYID,SW@BEGIN,SW@NE,SW@FINAL,SW@TRAVL,SW@SNIDE | |
EXT SW@CHECK | |
LIST OFF | |
*CALL SWISSCOM | |
LIST * | |
RTC : 10 | |
AA = A | |
AA = AA & 7 | |
AA = AA + 1 .Random message ordinal | |
AB = SW@SNIDE | |
CALL SWSLOC,(AB,AA,RO=LMDESC,RO=LMTXT) | |
MSG R!LMTXT | |
RELMEM R!LMTXT | |
RELMEM R!LMDESC | |
RETURN | |
END | |
*DK SWSWEL | |
LIST ON,NXRF | |
LISTOP (SWSWEL,$KOVL) | |
OVERLAY SWSWEL | |
************************************************************************ | |
* * | |
* Name - SWSWEL * | |
* * | |
* Input - None * | |
* * | |
* Output - None * | |
* * | |
* Function - Print welcome message and instructions * | |
* * | |
* Method - 1. Allocate Local Memory space for msgs and response * | |
* 2. Copy messages to Local Memory space * | |
* 3. MSGR welcome message * | |
* 4. If response begins with 'N', MSG second message * | |
* 5. Deallocate message and response buffers * | |
* 6. Return * | |
* * | |
************************************************************************ | |
REGDEFS (SCORE),,(M1,M2,IN,L1,L2,LI,IT) | |
EXT %MYID,SW@BEGIN,SW@NE,SW@FINAL,SW@TRAVL,SW@SNIDE | |
EXT SW@CHECK | |
LIST OFF | |
*CALL SWISSCOM | |
LIST * | |
BLOCK TEXT | |
MSG1 'Welcome to Swiss Adventure.'H,LFCR | |
'Have you been here before (answer YES or NO)?'H,0 | |
MSG2 'Now is your chance to roam certain parts of Europe.'H,LFCR | |
'You might find some treasure and get to quit. Or you'H,LFCR | |
'might not. You can get places by typing direction'H,LFCR | |
'commands (North, South, East, West, Up, Down).'H,LFCR | |
'You are most likely to find what you seek in or under'H,LFCR | |
'castles. Once you find it (or them), you may enter'H,LFCR | |
'the Winners'' Circle. Try to avoid the Scrap Heap.'H,LFCR | |
'If you desperately need to quit, try typing Quit.'H,LFCR | |
'Commands may be abbreviated to one letter.'H,LFCR,LFCR | |
'Off you go now. . .'H,LFCR,0 | |
END2 * | |
NEWPAGE | |
MSG2L EQUALS END2-MSG2 | |
MSG1L EQUALS MSG2-MSG1 | |
BLOCK * | |
L1 = MSG1L | |
L2 = MSG2L | |
LI = D'256 | |
GMEM ECHO SZ=(L1,L2,LI),PT=(M1,M2,IN) | |
GETMEM SZ,PT | |
$UNTIL (A=0) | |
PAUSE 1 | |
GETMEM SZ,PT | |
$ENDTIL | |
CLEAR START=PT,COUNT=SZ | |
GMEM ENDDUP | |
COPY %B+MSG1,M1,L1 | |
COPY %B+MSG2,M2,L2 | |
MSGR M1,LI,IN | |
IT = (IN)>D'8 .Yes or no | |
LI = 'Y'R | |
$IF (LI#IT) | |
MSG M2 | |
$ENDIF | |
RELMEM M1 | |
RELMEM M2 | |
RELMEM IN | |
RETURN | |
END | |
*CDK SWISSCOM | |
************************************************************ | |
* Definitions for Swiss Adventure overlays * | |
************************************************************ | |
* CSIM apparantly adds a linefeed to each line produced by the Kernel. | |
* Make the end-of-line linefeed/carriage return text (O'5015) | |
* a symbolic variable, LFCR, so that it may be flipped between | |
* <space><CR> and <LF><CR>. | |
LFCR EQUALS O'5015 | |
*LFCR EQUALS O'20015 .<space><CR> for csim runs only | |
* Travel modes (SW$xxxx) | |
SW$UNDEF NEXT 0 .Unknown mode of travel | |
SW$PASS NEXT .Needs to have passed final exam | |
SW$SCORE NEXT .Needs good score to proceed | |
SW$QUIT NEXT .Adventurer wants to quit | |
SW$WALK NEXT .Travel on foot | |
SW$TRAIN NEXT .By train | |
SW$ASIDE NEXT .Travel to different IOP | |
SW$BACK NEXT .Return to original IOP | |
SW$MAX EQUALS SW$BACK .Number of codes | |
* Micros for echo parameter lists (SW%xxxx) | |
SW%DIREC MICRO '(N,E,S,WEST,U,D)' | |
SW%DIR2 MICRO '(N,E,S,W,U,D)' | |
SW%MODE MICRO '(NM,EM,SM,WM,UM,DM)' | |
SW%DIR0 MICRO 'N=X,E=X,S=X,WEST=X,U=X,D=X' | |
SW%MODEW MICRO 'NM=SW$WALK,EM=SW$WALK,SM=SW$WALK,WM=SW$WALK,________ | |
,__________________UM=SW$WALK,DM=SW$WALK' | |
* Location descriptor table entry (SW@) | |
SW@QUIT EQUALS 177777 .Adventurer wants to quit | |
SW@ TABLE LH=0,LE=8 | |
SW@TXO FIELD 0,0,16 .Description offset into SWSDAT, | |
.in WORDS | |
SW@TXL FIELD +,0,16 .Description length, WORDS | |
SW@ECH ECHO WHERE="SW%DIR2" | |
SW@_WHERE_D FIELD +,0,12 .Travel destination ordinal | |
SW@_WHERE_M FIELD $,12,4 .Travel mode | |
SW@ECH ENDDUP | |
SW@ ENDTABLE | |
XO EQUALS 0 | |
BITS4 EQUALS D'16 | |
ERRIF SW$MAX,GE,BITS4 | |
MACRO | |
DEST SWISSTXS "SW%DIR0","SW%MODEW" | |
LOCAL TXLEN,ECH,MIC,WDEST,XXN,XXS,XXE,XXW,XXU,XXD | |
MIC MICRO 'DEST' | |
MIC MICRO '"MIC"L' | |
WDEST SET W.DEST | |
WDEST .SW@TXO | |
"MIC" .SW@TXL | |
* VWD 04/NM | |
* VWD 12/N_O | |
* VWD 04/EM | |
* VWD 12/E_O | |
* VWD 04/SM | |
* VWD 12/S_O | |
* VWD 04/WM | |
* VWD 12/WEST_O | |
* VWD 04/UM | |
* VWD 12/U_O | |
* VWD 04/DM | |
* VWD 12/D_O | |
XXN EQUALS N_O*BITS4+NM | |
XXE EQUALS E_O*BITS4+EM | |
XXS EQUALS S_O*BITS4+SM | |
XXW EQUALS WEST_O*BITS4+WM | |
XXU EQUALS U_O*BITS4+UM | |
XXD EQUALS D_O*BITS4+DM | |
XXN,XXE,XXS,XXW,XXU,XXD | |
* | |
* N_O*BITS4+NM | |
* E_O*BITS4+EM | |
* S_O*BITS4+SM | |
* WEST_O*BITS4+WM | |
* U_O*BITS4+UM | |
* D_O*BITS4+DM | |
SWISSTXS ENDM | |
MACRO | |
SWISSETX | |
LOCAL ENDIT,MIC | |
ENDIT BSS 0 | |
NEWPAGE | |
MIC MICRO '"DESTMIC"' | |
MIC MICRO '"DESTMIC"L' | |
"MIC" EQUALS W.ENDIT-W."DESTMIC" | |
NE SET NE+1 | |
"DESTMIC"O EQUALS NE | |
SWISSETX ENDM | |
MACRO | |
DEST SWISSTXT | |
DEST BSS 0 | |
DESTMIC MICRO 'DEST' | |
SWISSTXT ENDM | |
SW$ENGL MICRO '(01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16)' | |
SW$ARAB1 MICRO '(WAAHID,ITHNEYN,THALATHA,ARBA`A,KHAMSA,SITTA,' | |
SW$ARAB2 MICRO 'SAB`A,THAMAANYA,TIS`A,`ASHARA,IHDA`SH,ITHNA`SH,' | |
SW$ARAB3 MICRO 'THALATHTA`SH,ARBA`TA`SH,KHAMSTA`SH,SITTA`SH)' | |
SW$ARAB MICRO '"SW$ARAB1""SW$ARAB2""SW$ARAB3"' | |
CK1 MICRO '(ZERMATT,JUNGFRA,SCHWYZ,NEUCHAT,' | |
CK2 MICRO 'MONTREU,WVIEW,PRISON,TRAP,' | |
CK3 MICRO 'MAZE03,MAZE04,MAZE15,MAZE16,' | |
CK4 MICRO 'VIEW,LEVEL2,EXITSTA,GLOWING)' | |
CKMIC MICRO '"CK1""CK2""CK3""CK4"' | |
*DK SWSDAT | |
LIST ON,NXRF | |
LISTOP (SWSDAT,$KOVL) | |
OVERLAY SWSDAT,TYPE=DATA | |
** LIST GEN | |
************************************************************************ | |
* * | |
* Name - SWSDAT * | |
* * | |
* Input - None * | |
* * | |
* Output - None * | |
* * | |
* Function - Data overlay for Swiss Adventure * | |
* * | |
* Method - Madness * | |
* * | |
************************************************************************ | |
* SW@BEGIN, SW@TRAVL, SW@SNIDE are word offsets showing where the | |
* corresponding 2-word descriptors begin. | |
* | |
* SW@NE and SW@FINAL tell how many locations, and where the last one is | |
ENTRY SW@BEGIN,SW@NE,SW@FINAL,SW@TRAVL,SW@SNIDE | |
ENTRY SW@CHECK,SW@EXAM,SW@TEST | |
*CALL SWISSCOM | |
* LIST MAC,DUP | |
NE SET 0 | |
* The travel table | |
BSS 0 | |
ZURICH SWISSTXT | |
LFCR,'Zurich 'H,LFCR | |
'You are in Zurich, gazing across Zurichsee to the Swiss Alps. 'H,LFCR | |
'Swissair flew you to Zurich a week ago. Your eyes drink their'H,LFCR | |
'fill, then you walk over to the Zurich Bahnhof and await your 'H,LFCR | |
'train.'H,LFCR,LFCR | |
'A gentle voice warns you: Do not play SWISS on IOP-0.'Z | |
SWISSETX | |
PARIS SWISSTXT | |
LFCR,'Paris 'H,LFCR | |
'You are in Paris. Air France flew you here last Saturday. 'H,LFCR | |
'You have survived your week here, and purchased a ticket on 'H,LFCR | |
'the Orient Express as far as Bern, the Capitol of Switzerland.'H,LFCR | |
'Your train awaits you.'Z | |
SWISSETX | |
GENEVA SWISSTXT | |
LFCR,'Geneva 'H,LFCR | |
'You are in Geneva. Swissair brought you here a week ago, and 'H,LFCR | |
'you are ready to venture North to Lausanne or even beyond. 'H,LFCR | |
'Your train awaits you.'Z | |
SWISSETX | |
MILAN SWISSTXT | |
LFCR,'Milan 'H,LFCR | |
'You are in Milano. Alitalia brought you here a week ago. You'H,LFCR | |
'are anxious to take your trip through the Alps to Switzerland 'H,LFCR | |
'and begin your Swiss adventure. Your train awaits you.'Z | |
SWISSETX | |
BASEL SWISSTXT | |
LFCR,'Basel'H,LFCR | |
'You visit the Kunstmuseum to see the superb paintings of'H,LFCR | |
'Holbein, Delacroix, Gauguin, Matisse, Ingres, Courbet, and'H,LFCR | |
'Van Gogh.'H,LFCR | |
SWISSETX | |
LUZERN SWISSTXT | |
LFCR,'Luzern'H,LFCR | |
'You discover the Lion of Luzern is 30 feet high and 42 feet'H,LFCR | |
'long. It was carved into a sandstone cliff in 1821. The Lion'H,LFCR | |
'commemorates the bravery of those Swiss soldiers who defended'H,LFCR | |
'Marie Antoinette during the French Revolution. The cliff is'H,LFCR | |
'also the entrance to the Glacier Museum, which shows that palm'H,LFCR | |
'trees once grew here. If you spend the evening here, listen'H,LFCR | |
'for the beautiful alpenhorn notes rolling off the lake.'H,LFCR | |
SWISSETX | |
NEUCHAT SWISSTXT | |
LFCR,'Neuchatel'H,LFCR | |
'You have found the Suchard chocolate factory. Tours must be'H,LFCR | |
'arranged in advance, so call (038) 21-11-55 as soon as you'H,LFCR | |
'arrive. While you wait, see the collection of mechanical'H,LFCR | |
'dolls and music boxes at the city museum.'H,LFCR | |
SWISSETX | |
MONTREU SWISSTXT | |
LFCR,'Montreux'H,LFCR | |
'You are here to tour the Chillon castle, immortalized by'H,LFCR | |
'Byron. Its dungeon was used as a model for many movies.'H,LFCR | |
'You easily escape the Chillon dungeon--may you do as well in'H,LFCR | |
'Schloss Thun.'H,LFCR | |
SWISSETX | |
JUNGFRA SWISSTXT | |
LFCR,'Jungfraujoch'H,LFCR | |
'You have found the highest railstation in Europe, at 11,333'H,LFCR | |
'feet. The Jungfrau, Eiger, and Monch display their deadly'H,LFCR | |
'beauty.'H,LFCR,LFCR | |
'You must change trains here to continue the loop through'H,LFCR | |
'Murren back to Interlaken.'H,LFCR | |
SWISSETX | |
SCHWYZ SWISSTXT | |
LFCR,'Schwyz'H,LFCR | |
'You have arrived in Schwyz. You travel one mile uphill from 'H,LFCR | |
'the railstation to visit the Staatsarkivmuseum, to see the'H,LFCR | |
'thirteenth-century Oath of Eternal Alliance, the document'H,LFCR | |
'which marks the founding of Switzerland. This village''s name,'H,LFCR | |
'of course, became the country''s name.'H,LFCR | |
SWISSETX | |
ZUG SWISSTXT | |
LFCR,'Zug'H,LFCR | |
'If you have friends who live here, you can get keys to the old'H,LFCR | |
'city watchtowers. The watchtowers provide an interesting view'H,LFCR | |
'of both history and the city. Try the rotel (a mild fish from'H,LFCR | |
'Zug Lake) and kirsch made from local cherries.'H,LFCR | |
SWISSETX | |
LOTSCHB SWISSTXT | |
LFCR,'Inside the Lotschberg Tunnel'H,LFCR | |
'You are travelling through the 9-mile Lotschberg Tunnel.'H,LFCR | |
'This trip includes crossing the Bietschtal Bridge, which takes'H,LFCR | |
'the train 255 feet above the ravine it crosses. I hope you'H,LFCR | |
'are sitting on the side of the train that faces the Brig rail-'H,LFCR | |
'station--you will see the beautiful mountain and farm scenery 'H,LFCR | |
'around Kandersteg and Frutigen.'H,LFCR | |
SWISSETX | |
SPIEZ SWISSTXT | |
LFCR,'Spiez'H,LFCR | |
'You have reached tiny Spiez on the Thunersee. Tiny though it 'H,LFCR | |
'is, Spiez is a major crossroads for the Schweizer Bundesbahn 'H,LFCR | |
'(SBB), the world''s best rail system. Bern lies North beyond 'H,LFCR | |
'Thun; you may travel West past Zweizimmen in a series of hair-'H,LFCR | |
'pin bends (by train!) down to Montreux and Lausanne; Frutigen'H,LFCR | |
'lies South on the way to the Lotschberg Tunnel and Brig.'H,LFCR | |
'Interlaken and the Berner Oberland lie East.'H,LFCR,LFCR | |
'I hope you are hungry enough to walk down the hill to Hotel'H,LFCR | |
'Krone and eat the Geschnetzeltes und Rosti. Be sure to walk 'H,LFCR | |
'another 15 minutes and visit the castle overlooking Lake Thun.'H,LFCR | |
'You have but a single option surpassing this view of the lake 'H,LFCR | |
'and reflections of the surrounding mountains: Take the boat 'H,LFCR | |
'between Spiez and Thun.'H,LFCR | |
SWISSETX | |
BRIG SWISSTXT | |
LFCR,'Brig 'H,LFCR | |
'You have reached Brig, in the Swiss Alps. You are along the 'H,LFCR | |
'Orient Express route. The Brig-Visp-Zermatt cog railway 'H,LFCR | |
'begins here.'Z | |
SWISSETX | |
ZERMATT SWISSTXT | |
LFCR,'Zermatt 'H,LFCR | |
'You are in Zermatt, at the base of the Matterhorn. Many 'H,LFCR | |
'famous mountain climbers are buried in the cemetary here.'Z | |
SWISSETX | |
INTERLA SWISSTXT | |
LFCR,'Interlaken 'H,LFCR | |
'You are in Interlaken, on the Thunersee. You see many 'H,LFCR | |
'tourists here on their way to the Eiger, Monch, and Jungfrau.'Z | |
SWISSETX | |
LAUSANN SWISSTXT | |
LFCR,'Lausanne 'H,LFCR | |
'You are in Lausanne, the first home of Cray Switzerland.'Z | |
SWISSETX | |
BERN SWISSTXT | |
LFCR,'Bern 'H,LFCR | |
'You are in Bern, the capitol of Switzerland. Thun and the 'H,LFCR | |
'Thunersee are only twenty minutes away by train.'Z | |
SWISSETX | |
THUN SWISSTXT | |
LFCR,'Thun 'H,LFCR | |
'You have reached the city of Thun. You wander about the city.'H,LFCR | |
'You find a covered stairway. Centuries of use have worn 'H,LFCR | |
'a groove in the stepstones. The stairway proceeds North up 'H,LFCR | |
'the hill.'Z | |
SWISSETX | |
ENTRANC SWISSTXT | |
LFCR,'Entrance 'H,LFCR | |
'You have reached the Thun Castle entrance. Steps lead down 'H,LFCR | |
'to Stadt Thun.'Z | |
SWISSETX | |
COURT SWISSTXT | |
LFCR,'Court yard 'H,LFCR | |
'You are in the castle courtyard. A cast iron cannon sits 'H,LFCR | |
'here. Wooden steps, placed along a stone wall, lead up and 'H,LFCR | |
'inside the castle.'Z | |
SWISSETX | |
GALLERY SWISSTXT | |
LFCR,'Gallery 'H,LFCR | |
'This room is arranged like a museum gallery. Beautiful 'H,LFCR | |
'tapestries adorn the walls, stained glass windows cast colored'H,LFCR | |
'shadows along the wood floor, and you see many medieval cos- 'H,LFCR | |
'tumes. You can tell from this room that the castle is 'H,LFCR | |
'arranged as a box, with a turret at each corner. A fire is 'H,LFCR | |
'laid in the enormous fireplace, but remains unlit.'Z | |
SWISSETX | |
PRISON SWISSTXT | |
LFCR,'Prison cell 'H,LFCR | |
'The East turret, on this level, is used as a small prison 'H,LFCR | |
'cell. The walls and bed show the marks of various long-term 'H,LFCR | |
'residents. Chains attach to a large ring set in the floor.'Z | |
SWISSETX | |
TOYS SWISSTXT | |
LFCR,'Toys 'H,LFCR | |
'This room is devoted to displays of medieval children''s toys,'H,LFCR | |
'along with arms and armour. You can see the thatched castle 'H,LFCR | |
'roof another 50 feet above you. A wooden ladder leads to an 'H,LFCR | |
'attic and interior catwalk 40 feet above you.'Z | |
SWISSETX | |
ATTIC SWISSTXT | |
LFCR,'Attic 'H,LFCR | |
'You are in the attic above the toy gallery. The catwalk leads'H,LFCR | |
'around the whole castle wall, giving access to each 'H,LFCR | |
'observation turret.'Z | |
SWISSETX | |
VIEWECH ECHO D=(N,S,E,W),NAME=(North,South,East,West),____________ | |
,__________________B=(S,N,WEST,E) | |
D_VIEW SWISSTXT | |
LFCR,'NAME View'H,LFCR | |
'This small room tops the NAME turret. Arrow slits provide a'H,LFCR | |
'wide view of the surrounding area.'Z | |
SWISSETX | |
VIEWECH ENDDUP | |
STAIRS SWISSTXT | |
LFCR,'Stairs down 'H,LFCR | |
'You are in the western turret, in a tight circular stairway.'Z | |
SWISSETX | |
ARTIFAC SWISSTXT | |
LFCR,'Artifacts 'H,LFCR | |
'This room displays many items found in the surrounding area, 'H,LFCR | |
'including Roman coins, stone-age axes, and dog bones.'Z | |
SWISSETX | |
KITCHEN SWISSTXT | |
LFCR,'Kitchen 'H,LFCR | |
'You have reached the castle kitchen. The room contains the 'H,LFCR | |
'usual implements. A large piling is set in the floor. It was'H,LFCR | |
'once used for hauling goods up from the water gate on the 'H,LFCR | |
'Thunersee. The gate tunnel is caved in and bricked up. You 'H,LFCR | |
'see a trap door standing open in the South corner.'Z | |
SWISSETX | |
TRAP SWISSTXT | |
LFCR,'Below trap door 'H,LFCR | |
'As you climb through the trap door and down the ladder, you 'H,LFCR | |
'note the ladder ends 9 feet above the stone floor below. Your'H,LFCR | |
'weight upon the ladder releases a ratchet connected to the 'H,LFCR | |
'trap door above. The door shuts and locks.'Z | |
SWISSETX | |
LEVEL1 SWISSTXT | |
LFCR,'Dungeon level 1 'H,LFCR | |
'You are obviously somewhere in the first dungeon level, but 'H,LFCR | |
'you can tell nothing else in the dark. Passages lead off in 'H,LFCR | |
'all directions except up.'Z | |
SWISSETX | |
LEVEL2 SWISSTXT | |
LFCR,'Dungeon level 2 'H,LFCR | |
'No one has ever returned from this deep in the dungeon. It 'H,LFCR | |
'will all be over soon.'Z | |
SWISSETX | |
MAZE01 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of twisty, winding passages, nearly'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE02 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of twisty, windy passages, nearly'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE03 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of twisty, bendy passages, nearly'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE04 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of twisty, bending passages, almost'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE05 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of twisting, winding passages, almost'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE06 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of twisting, windy passages, almost'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE07 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of twisting, bendy passages, nearly'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE08 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of twisting, bending passages, nearly'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE09 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of winding, twisting passages, nearly'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE10 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of winding, twisty passages, almost'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE11 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of winding, bendy passages, almost'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE12 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of winding, bending passages, almost'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE13 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of windy, twisting passages, nearly'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE14 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of windy, twisty passages, nearly'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE15 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of windy, bendy passages, nearly'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
MAZE16 SWISSTXT | |
LFCR,'Glowing Cavern'H,LFCR | |
'The cavern walls are covered with thick 'H, | |
'moss. The moss glows with a deep,'H,LFCR | |
'purple, pulsating light. The moss provi'H, | |
'des enough light to see your'H,LFCR | |
'surroundings. You are in a strange maze'H, | |
' of windy, bending passages, nearly'H,LFCR | |
'all alike.'Z | |
SWISSETX | |
VIEW SWISSTXT | |
LFCR,'Viewing room 'H,LFCR | |
'You are standing on a plate glass window set in the floor. 'H,LFCR | |
'Through the window, you see a mound of gold, jewels, and 'H,LFCR | |
'system dumps. Encircling the stack (actually a heap) of 'H,LFCR | |
'treasure is a 10-foot wide ditch. Even though the ditch is 'H,LFCR | |
'extremely deep, you can see old bones and pocket protectors 'H,LFCR | |
'rotting at the bottom. A sign beside the encircling ditch 'H,LFCR | |
'reads ''Winners Circle.'''Z | |
SWISSETX | |
SIGNS SWISSTXT | |
LFCR,'Signs of the times'H,LFCR | |
'You see several checkpoint signs (sixteen of them) stacked in 'H,LFCR | |
'one corner of the room.'Z | |
SWISSETX | |
EXITSTA SWISSTXT | |
LFCR,'EXIT stacks 'H,LFCR | |
'You see four stacks of EXIT signs here. Two stacks are green 'H,LFCR | |
'signs; the other two are red signs. The red signs are dimly 'H,LFCR | |
'glowing.'Z | |
SWISSETX | |
GLOWING SWISSTXT | |
LFCR,'Glowing room 'H,LFCR | |
'The very air of this room is glowing with a bright red glow.'Z | |
SWISSETX | |
HEAP SWISSTXT | |
LFCR,'Heap 'H,LFCR | |
'You have just been added to the scrap heap. A sign on the 'H,LFCR | |
'wall reads, ''ONLY LOSERS ARE ADDED TO THE HEAP.'' This room 'H,LFCR | |
'contains many pointers, all pointing to some piece of the 'H,LFCR | |
'heap. One pointer is now aimed at your nose. Several other 'H,LFCR | |
'nearby pointers point to a ladder leading up through the 'H,LFCR | |
'ceiling.'Z | |
SWISSETX | |
WARNING SWISSTXT | |
LFCR,'Warning room 'H,LFCR | |
'This is the antechamber to the Hall of Testing. Carved above 'H,LFCR | |
'the Eastern portal, you read: 'H,LFCR | |
'Only a Master Adventurer may traverse the Hall of Testing.'Z | |
SWISSETX | |
QUAL | |
SW@TEST EQUALS /SWSDAT/NE+1 | |
QUAL * | |
TESTDUP ECHO NUM="SW$ENGL",NAME="SW$ARAB" | |
TEST_NUM SWISSTXT | |
LFCR,'Testing Station No. NUM'H,LFCR | |
'A pulsing curtain of light blocks your passage to the East.'H,LFCR | |
'A red sign on the curtain reads:'H,LFCR | |
' You must first find CHECKPOINT NAME_.'Z | |
SWISSETX | |
TESTDUP ENDDUP | |
EXAM SWISSTXT | |
LFCR,'Final examination room'H,LFCR | |
'This is the final examination room. A sign above the North 'H,LFCR | |
'portal reads ''Hall of Testing.'' The East portal reads 'H,LFCR | |
'''Scrap Heap.'' The West portal reads ''Victory Circle.'''H,LFCR,LFCR | |
'Your examination, naturally, will consist of 16 questions.'Z | |
SWISSETX | |
QUAL | |
SW@EXAM EQUALS /SWSDAT/NE | |
QUAL * | |
VICTORY SWISSTXT | |
LFCR,'Victory circle 'H,LFCR | |
'You stand in a large room, surrounded by mounds, stacks, and 'H,LFCR | |
'heaps of treasure. This plethora of wealth is surrounded by a'H,LFCR | |
'deep ditch. You cannot cross the ditch. Perhaps you will die'H,LFCR | |
'with your wealth. 'H,LFCR,LFCR | |
'A shimmering ladder appears from above. Though barely visible'H,LFCR | |
'you might be able to climb it.'Z | |
SWISSETX | |
KERNEL SWISSTXT | |
LFCR,'The Kernel 'H,LFCR | |
'You have now returned to the Kernel. Congratulations!'H,LFCR | |
'(Exit in any direction)'Z | |
SWISSETX | |
* | |
TAG1 BSS 0 | |
QUAL | |
SW@BEGIN EQUALS /SWSDAT/TAG1 | |
QUAL * | |
* The extra paths from Zurich are for testing purposes. | |
*ZURICH SWISSTXS N=LEVEL1,S=BERN,SM=SW$TRAIN,E=HEAP,WEST=LEVEL2,D=EXAM | |
ZURICH SWISSTXS S=BERN,SM=SW$TRAIN,WEST=BASEL,WM=SW$TRAIN | |
PARIS SWISSTXS E=BERN,EM=SW$TRAIN | |
GENEVA SWISSTXS N=LAUSANN,NM=SW$TRAIN | |
MILAN SWISSTXS N=BRIG,NM=SW$TRAIN | |
BASEL SWISSTXS S=BERN,SM=SW$TRAIN,WEST=NEUCHAT,WM=SW$TRAIN | |
LUZERN SWISSTXS N=ZUG,NM=SW$TRAIN,EM=SW$TRAIN,WM=SW$TRAIN,WEST=BERN,_ | |
,__________________E=SCHWYZ | |
NEUCHAT SWISSTXS N=BASEL,NM=SW$TRAIN,EM=SW$TRAIN,E=BERN | |
MONTREU SWISSTXS E=SPIEZ,EM=SW$TRAIN,WM=SW$TRAIN,WEST=LAUSANN | |
JUNGFRA SWISSTXS EM=SW$BACK,WM=SW$BACK,WEST=INTERLA,E=INTERLA | |
SCHWYZ SWISSTXS N=ZUG,NM=SW$TRAIN,WM=SW$TRAIN,WEST=LUZERN | |
ZUG SWISSTXS S=SCHWYZ,SM=SW$TRAIN,WM=SW$TRAIN,WEST=LUZERN | |
LOTSCHB SWISSTXS N=SPIEZ,NM=SW$TRAIN,EM=SW$TRAIN,E=BRIG | |
SPIEZ SWISSTXS N=THUN,NM=SW$TRAIN,EM=SW$TRAIN,WM=SW$TRAIN,__________ | |
,__________________SM=SW$TRAIN,S=LOTSCHB,E=INTERLA,WEST=MONTREU | |
BRIG SWISSTXS S=ZERMATT,SM=SW$ASIDE,WEST=LOTSCHB,WM=SW$TRAIN | |
ZERMATT SWISSTXS N=BRIG,NM=SW$BACK | |
INTERLA SWISSTXS E=JUNGFRA,WEST=SPIEZ,EM=SW$ASIDE,WM=SW$TRAIN | |
LAUSANN SWISSTXS N=BERN,NM=SW$TRAIN,WEST=MONTREU,WM=SW$TRAIN | |
BERN SWISSTXS WEST=LAUSANN,WM=SW$TRAIN,S=THUN,SM=SW$TRAIN,E=LUZERN, | |
,__________________EM=SW$TRAIN,N=BASEL,NM=SW$TRAIN | |
THUN SWISSTXS N=BERN,NM=SW$TRAIN,S=SPIEZ,SM=SW$TRAIN,U=ENTRANC | |
ENTRANC SWISSTXS S=THUN,D=THUN,E=COURT | |
COURT SWISSTXS WEST=ENTRANC,U=GALLERY | |
GALLERY SWISSTXS E=PRISON,N=TOYS,WEST=STAIRS,D=COURT,EM=SW$ASIDE | |
PRISON SWISSTXS WEST=GALLERY,WM=SW$BACK | |
TOYS SWISSTXS WEST=GALLERY,D=GALLERY,U=ATTIC | |
ATTIC SWISSTXS D=TOYS,N=NVIEW,S=SVIEW,E=EVIEW,NM=SW$ASIDE,__________ | |
,__________________SM=SW$ASIDE,EM=SW$ASIDE,WM=SW$ASIDE,WEST=WVIEW | |
NVIEW SWISSTXS S=ATTIC,SM=SW$BACK | |
SVIEW SWISSTXS N=ATTIC,NM=SW$BACK | |
EVIEW SWISSTXS WEST=ATTIC,WM=SW$BACK | |
WVIEW SWISSTXS E=ATTIC,EM=SW$BACK | |
STAIRS SWISSTXS E=GALLERY,D=ARTIFAC | |
ARTIFAC SWISSTXS U=STAIRS,D=KITCHEN | |
KITCHEN SWISSTXS U=ARTIFAC,D=TRAP,S=TRAP | |
TRAP SWISSTXS D=LEVEL1 | |
LEVEL1 SWISSTXS N=MAZE03,S=LEVEL1,E=LEVEL1,WEST=LEVEL1,D=LEVEL2 | |
LEVEL2 SWISSTXS N=LEVEL2,E=SIGNS,WEST=LEVEL2,D=LEVEL2,U=LEVEL1 | |
MAZE01 SWISSTXS N=MAZE07,S=MAZE01,E=MAZE02,WEST=MAZE01,D=MAZE01,U=MAZE06 | |
MAZE02 SWISSTXS N=MAZE02,S=MAZE02,E=MAZE08,WEST=MAZE07,D=MAZE02,U=MAZE01 | |
MAZE03 SWISSTXS N=MAZE08,S=MAZE03,E=MAZE04,WEST=MAZE03,D=MAZE09,U=LEVEL1 | |
MAZE04 SWISSTXS N=MAZE04,S=MAZE04,E=MAZE05,WEST=MAZE04,D=MAZE10,U=MAZE03 | |
MAZE05 SWISSTXS N=MAZE10,S=MAZE05,E=MAZE10,WEST=MAZE04,D=MAZE05,U=MAZE05 | |
MAZE06 SWISSTXS N=MAZE15,S=MAZE11,E=MAZE07,WEST=MAZE06,D=MAZE15,U=MAZE01 | |
MAZE07 SWISSTXS N=MAZE07,S=MAZE02,E=MAZE07,WEST=MAZE06,D=MAZE07,U=MAZE01 | |
MAZE08 SWISSTXS N=MAZE13,S=MAZE08,E=MAZE14,WEST=MAZE02,D=MAZE08,U=MAZE08 | |
MAZE09 SWISSTXS N=MAZE14,S=MAZE09,E=MAZE10,WEST=MAZE09,D=MAZE09,U=MAZE09 | |
MAZE10 SWISSTXS N=MAZE14,S=MAZE10,E=MAZE10,WEST=MAZE09,D=MAZE05,U=MAZE04 | |
MAZE11 SWISSTXS N=MAZE11,S=MAZE06,E=MAZE12,WEST=MAZE11,D=MAZE11,U=MAZE11 | |
MAZE12 SWISSTXS N=MAZE12,S=MAZE12,E=MAZE13,WEST=MAZE11,D=MAZE12,U=MAZE12 | |
MAZE13 SWISSTXS N=MAZE13,S=MAZE08,E=MAZE13,WEST=MAZE12,D=MAZE13,U=MAZE13 | |
MAZE14 SWISSTXS N=MAZE14,S=MAZE09,E=MAZE10,WEST=MAZE08,D=MAZE14,U=MAZE14 | |
MAZE15 SWISSTXS N=MAZE15,S=MAZE15,E=MAZE16,WEST=MAZE15,D=MAZE15,U=MAZE06 | |
MAZE16 SWISSTXS N=VIEW,S=MAZE16,E=MAZE16,WEST=MAZE15,D=MAZE16,U=MAZE16 | |
VIEW SWISSTXS S=MAZE16 | |
SIGNS SWISSTXS E=EXITSTA,WEST=LEVEL2 | |
EXITSTA SWISSTXS E=GLOWING,WEST=SIGNS | |
GLOWING SWISSTXS N=HEAP,E=WARNING,WEST=EXITSTA | |
HEAP SWISSTXS N=HEAP,S=HEAP,E=HEAP,WEST=HEAP,D=HEAP,U=KERNEL | |
WARNING SWISSTXS E=TEST01,WEST=GLOWING | |
TEST01 SWISSTXS E=TEST02,EM=SW$SCORE,WEST=WARNING | |
TEST02 SWISSTXS E=TEST03,EM=SW$SCORE,WEST=TEST01 | |
TEST03 SWISSTXS E=TEST04,EM=SW$SCORE,WEST=TEST02 | |
TEST04 SWISSTXS E=TEST05,EM=SW$SCORE,WEST=TEST03 | |
TEST05 SWISSTXS E=TEST06,EM=SW$SCORE,WEST=TEST04 | |
TEST06 SWISSTXS E=TEST07,EM=SW$SCORE,WEST=TEST05 | |
TEST07 SWISSTXS E=TEST08,EM=SW$SCORE,WEST=TEST06 | |
TEST08 SWISSTXS E=TEST09,EM=SW$SCORE,WEST=TEST07 | |
TEST09 SWISSTXS E=TEST10,EM=SW$SCORE,WEST=TEST08 | |
TEST10 SWISSTXS E=TEST11,EM=SW$SCORE,WEST=TEST09 | |
TEST11 SWISSTXS E=TEST12,EM=SW$SCORE,WEST=TEST10 | |
TEST12 SWISSTXS E=TEST13,EM=SW$SCORE,WEST=TEST11 | |
TEST13 SWISSTXS E=TEST14,EM=SW$SCORE,WEST=TEST12 | |
TEST14 SWISSTXS E=TEST15,EM=SW$SCORE,WEST=TEST13 | |
TEST15 SWISSTXS E=TEST16,EM=SW$SCORE,WEST=TEST14 | |
TEST16 SWISSTXS E=EXAM,EM=SW$SCORE,WEST=TEST15 | |
EXAM SWISSTXS N=TEST16,E=HEAP,WEST=VICTORY,WM=SW$PASS | |
VICTORY SWISSTXS U=KERNEL | |
KERNEL SWISSTXS N=KERNEL,S=KERNEL,E=KERNEL,WEST=KERNEL,D=KERNEL,_____ | |
,__________________U=KERNEL | |
QUAL | |
SW@NE EQUALS /SWSDAT/NE | |
SW@FINAL EQUALS SW@NE | |
QUAL * | |
* Now use the same format for other types of text | |
BSS 0 | |
NE SET 0 | |
PASS SWISSTXT | |
LFCR,'You have passed.'Z | |
SWISSETX | |
ERRIF NE,NE,SW$PASS | |
SCORE SWISSTXT | |
LFCR,'Proceed, O Master Adventurer.'H,0 | |
SWISSETX | |
ERRIF NE,NE,SW$SCORE | |
QUIT SWISSTXT | |
LFCR,'Alert! Alert!'H,LFCR | |
'Adventurer is trying to leave!'H,LFCR,LFCR | |
'You hear a loud shriek. . .'H,LFCR,LFCR,LFCR | |
'A deep voice intones:'H,LFCR | |
'Begone, adventurer. Return again when you dare.'H,LFCR | |
LFCR,'Your surroundings vanish. So do you...',0 | |
SWISSETX | |
ERRIF NE,NE,SW$QUIT | |
WALK SWISSTXT | |
LFCR,'Proceeding . . .'H,0 | |
SWISSETX | |
ERRIF NE,NE,SW$WALK | |
TRAIN SWISSTXT | |
LFCR,'You board the HYPERtrain and soon reach 'H, | |
'your destination.'H,0 | |
SWISSETX | |
ERRIF NE,NE,SW$TRAIN | |
ASIDE SWISSTXT | |
LFCR,'You make a side trip . . .'H,0 | |
SWISSETX | |
ERRIF NE,NE,SW$ASIDE | |
BACK SWISSTXT | |
LFCR,'You head back whence you came . . .'H,0 | |
SWISSETX | |
ERRIF NE,NE,SW$BACK | |
* | |
TAG2 BSS 0 | |
QUAL | |
SW@TRAVL EQUALS /SWSDAT/TAG2 | |
QUAL * | |
PASS SWISSTXS | |
SCORE SWISSTXS | |
QUIT SWISSTXS | |
WALK SWISSTXS | |
TRAIN SWISSTXS | |
ASIDE SWISSTXS | |
BACK SWISSTXS | |
ERRIF NE,NE,SW$MAX | |
NE SET 0 | |
* The snide remark library | |
* | |
BSS 0 | |
SNIDE1 SWISSTXT | |
LFCR,'You may not go that way.'H,0 | |
SWISSETX | |
SNIDE2 SWISSTXT | |
LFCR,'Your attempt to enter forbidden territory is'H,LFCR | |
'quickly repulsed.'H,0 | |
SWISSETX | |
SNIDE3 SWISSTXT | |
LFCR,'No way.'H,0 | |
SWISSETX | |
SNIDE4 SWISSTXT | |
LFCR,'That is a restricted area.'H,0 | |
SWISSETX | |
SNIDE5 SWISSTXT | |
LFCR,'Go somewhere else.'H,0 | |
SWISSETX | |
SNIDE6 SWISSTXT | |
LFCR,'Such a move would put you in the TWILIGHT ZONE.'H,0 | |
SWISSETX | |
SNIDE7 SWISSTXT | |
LFCR,'Foolish move.'H,0 | |
SWISSETX | |
SNIDE8 SWISSTXT | |
LFCR,'You try and try, but cannot force your way through'H,LFCR | |
'the wall.'H,0 | |
SWISSETX | |
* | |
TAG3 BSS 0 | |
QUAL | |
SW@SNIDE EQUALS /SWSDAT/TAG3 | |
QUAL * | |
SNIDE1 SWISSTXS | |
SNIDE2 SWISSTXS | |
SNIDE3 SWISSTXS | |
SNIDE4 SWISSTXS | |
SNIDE5 SWISSTXS | |
SNIDE6 SWISSTXS | |
SNIDE7 SWISSTXS | |
SNIDE8 SWISSTXS | |
ERRIF NE,NE,D'8 | |
BSSZ 0 | |
NE SET 0 | |
SIGNS ECHO NUM="SW$ENGL",NAME="SW$ARAB" | |
NAMMIC MICRO 'NAME ',D'14 | |
CHECK_NUM SWISSTXT | |
'The following sign stands before you:'H,LFCR | |
' ------------ 'H,LFCR | |
' / \ 'H,LFCR | |
' / \ 'H,LFCR | |
' | Checkpoint |'H,LFCR | |
' | |'H,LFCR | |
' | "NAMMIC"|'H,LFCR | |
' \ / 'H,LFCR | |
' \ / 'H,LFCR | |
' ------------ 'H,LFCR | |
' XX 'H,LFCR | |
' XX 'H,LFCR | |
' XX 'H,LFCR | |
' XXXX'Z | |
SWISSETX | |
SIGNS ENDDUP | |
TAG4 BSS 0 | |
QUAL | |
SW@CHECK EQUALS /SWSDAT/TAG4 | |
QUAL * | |
CKDUP ECHO NUM="SW$ENGL",ROOM="CKMIC" | |
CHECK_NUM SWISSTXS N=ROOM,S=ROOM,E=ROOM,WEST=ROOM,U=ROOM,D=ROOM | |
CKDUP ENDDUP | |
ERRIF NE,NE,D'16 | |
* LIST * | |
END | |
*ID TN+101BA,DC=AT | |
*D AT.4707 | |
OVLTBL EQUALS O'720 .Maximum overlay number | |
*ID TN+101BK,DC=K | |
*B K.380 | |
ENTRY OVLTABLE .Allow SWISS access | |
*ID TN+101BC,DC=CALL | |
*B CALL.260 | |
OCOME SWISS,FROM=IOP0+IOP1+IOP2+IOP3 | |
*ID TN+101BO,DC=OVLNUM | |
*I OVLNUM.103 | |
SWISS OVNM (Swiss adventure, root overlay) | |
SWSDAT OVNM (Swiss data) | |
SWCHECK OVNM (Display checkpoint sign) | |
SWSHOW OVNM (Display location text, get new location) | |
SWSLOC OVNM (Read a description entry into Local Memory) | |
SWSMOV OVNM (Display text showing travel) | |
SWSNEX OVNM (Get new valid location) | |
SWSNO OVNM (Display snide remark) | |
SWSWEL OVNM (Print welcome message and instructions) | |
*MOVEDK SWISS:STATS | |
*MOVEDK SWSDAT:SWISS | |
*MOVEDK SWSHOW:SWSDAT | |
*MOVEDK SWSLOC:SWSHOW | |
*MOVEDK SWSMOV:SWSLOC | |
*MOVEDK SWSNEX:SWSMOV | |
*MOVEDK SWSNO:SWSNEX | |
*MOVEDK SWSWEL:SWSNO | |
*MOVEDK SWCHECK:SWISS |