adventure: Initial commit
authorPhilipp Hachtmann <hachti@hachti.de>
Sun, 27 Sep 2015 13:30:53 +0000 (15:30 +0200)
committerPhilipp Hachtmann <hachti@hachti.de>
Sun, 27 Sep 2015 13:30:53 +0000 (15:30 +0200)
This adds the pdp8 backport of adventure including my OS/8 batch files.

Signed-off-by: Philipp Hachtmann <hachti@hachti.de>
32 files changed:
sw/adventure/A5TOA1.RA [new file with mode: 0644]
sw/adventure/ADVENT.DC [new file with mode: 0644]
sw/adventure/ADVENT.FT [new file with mode: 0644]
sw/adventure/ADVENT.LD [new file with mode: 0644]
sw/adventure/ADVENT.TX [new file with mode: 0644]
sw/adventure/AMAIN.RA [new file with mode: 0644]
sw/adventure/BITSET.RA [new file with mode: 0644]
sw/adventure/BUG.FT [new file with mode: 0644]
sw/adventure/CARRY.RA [new file with mode: 0644]
sw/adventure/COMPIL.BI [new file with mode: 0644]
sw/adventure/DROP.RA [new file with mode: 0644]
sw/adventure/DSTROY.RA [new file with mode: 0644]
sw/adventure/DUMPDB.FT [new file with mode: 0644]
sw/adventure/GETIN.FT [new file with mode: 0644]
sw/adventure/GETWRD.RA [new file with mode: 0644]
sw/adventure/INITAD.FT [new file with mode: 0644]
sw/adventure/IO.FT [new file with mode: 0644]
sw/adventure/JUGGLE.RA [new file with mode: 0644]
sw/adventure/LOAD.BI [new file with mode: 0644]
sw/adventure/MOVE.RA [new file with mode: 0644]
sw/adventure/PCT.RA [new file with mode: 0644]
sw/adventure/PSPEAK.RA [new file with mode: 0644]
sw/adventure/PUT.RA [new file with mode: 0644]
sw/adventure/RND.FT [new file with mode: 0644]
sw/adventure/RSPEAK.RA [new file with mode: 0644]
sw/adventure/RSTRGM.FT [new file with mode: 0644]
sw/adventure/SAVEGM.FT [new file with mode: 0644]
sw/adventure/SEED.RA [new file with mode: 0644]
sw/adventure/SPEAK.RA [new file with mode: 0644]
sw/adventure/USR.RA [new file with mode: 0644]
sw/adventure/VOCAB.RA [new file with mode: 0644]
sw/adventure/YES.FT [new file with mode: 0644]

diff --git a/sw/adventure/A5TOA1.RA b/sw/adventure/A5TOA1.RA
new file mode 100644 (file)
index 0000000..547a542
--- /dev/null
@@ -0,0 +1,161 @@
+/      SUBROUTINE A5TOA1(A,B,D)\r
+/(pdp11:)SUBROUTINE A5TOA1(A,B,C,D)\r
+/\r
+/ THIS ROUTINE TAKES THE UP TO 6 CHARACTER "WORD" IN A:B:C\r
+/ AND TYPES IT OUT, FOLLOWED BY THE PUNCTUATION MARK IN D.\r
+/ IT ALSO APPENDS A CRLF TO GET TO A NEW LINE.\r
+/ For OS/8: the word is in A,B with nothing in C.\r
+/\r
+/      IMPLICIT INTEGER (A-Z)\r
+/      COMMON  /ALPHAS/ BLANK\r
+\r
+       EXTERN  SIXOUT\r
+       EXTERN  CGET\r
+       EXTERN  CPUT\r
+       SECT    A5TOA1\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +A5TOA1+\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+6\r
+A,     ORG     .+3\r
+B,     ORG     .+3\r
+D,     ORG     .+3\r
+BLANK, TEXT +      +\r
+ZERO,  F 0\r
+THREE, F 3\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+\r
+FIVE,  F 5\r
+SEVEN, F 7\r
+\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    A\r
+       FLDA%   #BASE,1+\r
+       FSTA    B\r
+       FLDA%   #BASE,1+\r
+       FSTA    D\r
+       STARTF\r
+       FLDA%   A\r
+       FSTA    A\r
+       FLDA%   B\r
+       FSTA    B\r
+       FLDA%   D\r
+       FSTA    D\r
+/      IF (A .NE. BLANK) TYPE 1,A\r
+       FLDA    A\r
+       FSUB    BLANK\r
+       JEQ     #G0001\r
+       JSR     TRIM\r
+       JA      .+4\r
+       JA      A\r
+       JSR     SIXOUT\r
+       JA      .+10\r
+       JA      A\r
+       JA      ZERO\r
+       JA      SEVEN\r
+/      IF (B .NE. BLANK) TYPE 1,B\r
+#G0001,        FLDA    B\r
+       FSUB    BLANK\r
+       JEQ     #G0002\r
+       JSR     TRIM\r
+       JA      .+4\r
+       JA      B\r
+       JSR     SIXOUT\r
+       JA      .+10\r
+       JA      B\r
+       JA      ZERO\r
+       JA      SEVEN\r
+/      IF (C .NE. BLANK) TYPE 1,C\r
+/      TYPE 2,D\r
+#G0002,        JSR     TRIM\r
+       JA      .+4\r
+       JA      D\r
+       JSR     SIXOUT\r
+       JA      #RTN\r
+       JA      D\r
+       JA      ZERO\r
+       JA      FIVE\r
+/      RETURN\r
+/      END\r
+\r
+/1     FORMAT('+',A2,$)\r
+/2     FORMAT('+',A2)\r
+\r
+       SECT    TRIM\r
+       JA      #TST\r
+#TXR,  ORG     .+10\r
+       TEXT    +TRIM  +\r
+#TRET, SETX    #TXR\r
+       SETB    #TBASE\r
+       JA      .+3\r
+#TBASE,        ORG     .+6\r
+PSTR,  ORG     .+3\r
+I,     ORG     .+3\r
+CH,    ORG     .+3\r
+K1,    F 1\r
+K6,    F 6\r
+K32,   F 32\r
+       ORG     #TBASE+30\r
+       FNOP\r
+       JA      #TRET\r
+       FNOP\r
+#TGOBK,        0;0\r
+\r
+#TRTN, BASE    #TBASE\r
+       JA      #TGOBK\r
+#TST,  STARTD\r
+       0210\r
+       FSTA    #TGOBK,0\r
+       0200\r
+       SETX    #TXR\r
+       SETB    #TBASE\r
+       LDX     0,1\r
+       FSTA    #TBASE\r
+       FLDA%   #TBASE,1+\r
+       FSTA    PSTR\r
+       STARTF\r
+\r
+       FLDA    K6\r
+       FSTA    I\r
+#T10,  FLDA    PSTR\r
+       STARTD\r
+       FSTA    #TG001\r
+       FSTA    #TG002\r
+       STARTF\r
+       JSR     CGET\r
+       JA      .+0010\r
+#TG001,        JA      .\r
+       JA      I\r
+       JA      CH\r
+       FLDA    CH\r
+       FSUB    K32\r
+       JNE     #TRTN\r
+       JSR     CPUT\r
+       JA      .+0010\r
+#TG002,        JA      .\r
+       JA      I\r
+       JA      ZERO\r
+       FLDA    I\r
+       FSUB    K1\r
+       FSTA    I\r
+       JGT     #T10\r
+\r
+       JA      #TRTN\r
diff --git a/sw/adventure/ADVENT.DC b/sw/adventure/ADVENT.DC
new file mode 100644 (file)
index 0000000..b22f793
--- /dev/null
@@ -0,0 +1,86 @@
+   This version of adventure is based on the RT-11 version\r
+by Bob Supnik. It is essentially a recoding of the FORTRAN-IV\r
+sources into RALF code. The RALF code has been  optimized\r
+to fit into 32K. Also, many modifications were made to\r
+the code to increase execution speed.\r
+\r
+   Because it is based on the RT-11 version of ADVENTURE,\r
+the following features of the FORTRAN-10 version are not\r
+supported:\r
+\r
+1) MAGIC mode was removed\r
+2) The SUSPEND and HOURS commands were deleted\r
+\r
+\r
+   The program requires a secondary storage device with\r
+at least 250 blocks of free space for working storage.\r
+Included with the sources are batch stream files for\r
+compiling and loading the program.\r
+\r
+COMPILATION:\r
+\r
+.SUBMIT COMPILE\r
+\r
+LOADING:\r
+\r
+.SUBMIT LOAD   (this creates a load map - LOAD.LS)\r
+\r
+EXECUTION:\r
+\r
+.R FRTS\r
+*ADVENT.ld     (the ".LD" is optional)\r
+*$             (altmode or escape)\r
+\r
+       execution proceeds.\r
+\r
+   When the program is first started, it prompts for the\r
+locations of database files:\r
+Location of text database (ATEXT.DA) >\r
+Location of text index    (AINDX.DA) >\r
+Location of saved games   (ASAVE.DA) >\r
+Location of text input   (ADVENT.TX) >\r
+\r
+   The value in parenthesis is the default values for those files.\r
+You can place files on other than the current SYS device by giving\r
+the device name and filename, such as RKB0:ADVENT.TX, etc. See\r
+the section below on the ADVENT.IN file for more information on how\r
+to place the database files.\r
+\r
+   When first started, the program will take approximately\r
+two to three minutes to set up its data base (ATEXT and AINDX).\r
+Initialization and execution can be optimized by placing\r
+the data file (DATA) on a different device from the text\r
+file (ADVENT.TX). Also, it is more efficient to have the\r
+load module (ADVENT.LD) on a different device than the\r
+data file (DATA). For a two-drive DECtape system, for\r
+example, put ADVENT.LD and ADVENT.TX on SYS:, and have the\r
+database files written on DTA1:.\r
+i.e.\r
+.R FRTS\r
+*ADVENT\r
+Location of text database (ATEXT.DA) > DTA1:ATEXT.DA\r
+Location of text index    (AINDX.DA) > DTA1:AINDX.DA\r
+Location of saved games   (ASAVE.DA) > ASAVE.DA\r
+Location of text input   (ADVENT.TX) > ADVENT.TX\r
+\r
+\r
+   The ADVENT.TX file is only used to set up the text database.\r
+Once the ATEXT.DA and AINDX.DA files have been built, you can \r
+delete this file as it is not needed for normal program operation.\r
+The file locataion values given during this startup dialog are\r
+stored in a file called ADVENT.IN, which is a simple text file\r
+with KEYWORD=VALUE lines for the four filenames. You can edit\r
+this later to move the files to other devices, or delete the\r
+ADVENT.IN file to completely restart the dialog.\r
+\r
+   To run the program, only the files ADVENT.LD and\r
+ADVENT.TX need to be copied from the distribution tape.\r
+These are the load module and the text file. The rest\r
+of the files are sources.\r
+\r
+\r
+   The SAVE command in Adventure writes the ASAVE.DA file. If the\r
+file already exists, it is overwritten by subsequent SAVE operations.\r
+A saved game is restored using the RESTORE command.\r
+\r
+Good luck and happy adventuring!\r
diff --git a/sw/adventure/ADVENT.FT b/sw/adventure/ADVENT.FT
new file mode 100644 (file)
index 0000000..cecb72b
--- /dev/null
@@ -0,0 +1,106 @@
+C      ADVENTURES\r
+C\r
+C MODIFIED BY  KENT BLACKETT\r
+C              ENGINEERING SYSTEMS GROUP\r
+C              DIGITAL EQUIPMENT CORP.\r
+C              15-JUL-77\r
+C MODIFIED BY  BOB SUPNIK\r
+C              DISK ENGINEERING\r
+C              21-OCT-77\r
+C MODIFIED BY  BOB SUPNIK\r
+C              DISK ENGINEERING\r
+C              25-AUG-78\r
+C MODIFIED BY  BOB SUPNIK\r
+C              SMALL SYSTEMS\r
+C              12-NOV-78\r
+C ORIGINAL VERSION WAS FOR DECSYSTEM-10\r
+C NEXT VERSION WAS FOR FORTRAN IV-PLUS UNDER\r
+C THE IAS OPERATING SYSTEM ON THE PDP-11/70\r
+C THIS VERSION IS FOR FORTRAN IV (V01C OR LATER)\r
+C UNDER RT-11 ON *ANY* PDP-11\r
+C\r
+C\r
+C  CURRENT LIMITS:\r
+C      750 TRAVEL OPTIONS (TRAVEL, TRVSIZ).\r
+C      300 VOCABULARY WORDS (KTAB, ATAB, TABSIZ).\r
+C      150 LOCATIONS (LTEXT, STEXT, KEY, COND, ABB, ATLOC, LOCSIZ).\r
+C      100 OBJECTS (PLAC, PLACE, FIXD, FIXED, LINK (TWICE), PTEXT, PROP).\r
+C       35 "ACTION" VERBS (ACTSPK, VRBSIZ).\r
+C      205 RANDOM MESSAGES (RTEXT, RTXSIZ).\r
+C       12 DIFFERENT PLAYER CLASSIFICATIONS (CTEXT, CVAL, CLSMAX).\r
+C       20 HINTS, LESS 3 (HINTLC, HINTED, HINTS, HNTSIZ).\r
+C  THERE ARE ALSO LIMITS WHICH CANNOT BE EXCEEDED DUE TO THE STRUCTURE OF\r
+C  THE DATABASE.  (E.G., THE VOCABULARY USES N/1000 TO DETERMINE WORD TYPE,\r
+C  SO THERE CAN'T BE MORE THAN 1000 WORDS.)  THESE UPPER LIMITS ARE:\r
+C      1000 NON-SYNONYMOUS VOCABULARY WORDS\r
+C      300 LOCATIONS\r
+C      100 OBJECTS\r
+C\r
+C      IMPLICIT INTEGER (A-Z)\r
+       LOGICAL LMWARN,CLOSNG,PANIC,HINTED,\r
+     1         CLOSED,GAVEUP,SCORNG,DSEEN,BITSET\r
+C\r
+       COMMON /VERSN/ VMAJ, VMIN, VEDIT\r
+       COMMON /TXTCOM/ RTEXT,LINES,ASCVAR,TXTLOC,DATA\r
+       COMMON /VOCCOM/ KTAB,ATAB,TABSIZ\r
+       COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+       COMMON /PTXCOM/ PTEXT\r
+       COMMON /ABBCOM/ ABB\r
+       COMMON /MISCOM/ LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,\r
+     1 KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,\r
+     2 HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE\r
+       COMMON /MISCOM/\r
+     3 CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,\r
+     4 CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,\r
+     5 PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,\r
+     6 BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM\r
+       COMMON /MISCOM/\r
+     7 PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,\r
+     8 THROW,FIND,INVENT,TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM,\r
+     9 NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,\r
+     1 CLOSNG,PANIC,CLOSED,GAVEUP,SCORNG,ODLOC,STREAM,SPICES\r
+       COMMON /MISC2/ I,RTXSIZ,CLSMAX,LOCSIZ,CTEXT,STEXT,LTEXT,\r
+     1 SECT,TRAVEL,TRVCON,TRVLOC,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,\r
+     2 MAXTRS,HINTED,HNTLOC,KK\r
+C\r
+       INTEGER LINES(12),DATA(52),RECORD\r
+C      The TRAVEL, TRVCON, and TRVLOC arrays are\r
+C      Packed with words 0,1,2 holding the data. Saves lots\r
+C      of wasted space at the expense of some complexity.\r
+       INTEGER TRAVEL(250), TRVCON(250), TRVLOC(250), TRVSIZ\r
+       INTEGER KTAB(300),ATAB(300),TABSIZ\r
+       INTEGER LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150),\r
+     1 ATLOC(150)\r
+       INTEGER PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200),\r
+     1 PTEXT(100),PROP(100),HOLDNG\r
+       INTEGER ACTSPK(35)\r
+       INTEGER RTEXT(205)\r
+       INTEGER CTEXT(12),CVAL(12)\r
+       INTEGER HINTLC(20),HINTS(20,4)\r
+       DIMENSION HINTED(20)\r
+       INTEGER TK(20),DLOC(6),ODLOC(6)\r
+       DIMENSION DSEEN(6)\r
+       INTEGER ASCVAR, TXTLOC, TRVS, CLSSES, OLDLOC\r
+       INTEGER HNTSIZ, HNTMAX, TALLY, TALLY2, CHLOC, CHLOC2, DFLAG\r
+       INTEGER DALTLC,GRATE,CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE\r
+       INTEGER FISSUR,TABLET,CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE\r
+       INTEGER WATER,OIL,PLANT,PLANT2,AXE,MIRROR,DRAGON,CHASM\r
+       INTEGER BEAR,MESSAG,VEND,BATTER,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD\r
+       INTEGER PYRAM,PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY\r
+       INTEGER LOCK,THROW,FIND,INVENT,TURNS,KNFLOC,DETAIL,ABBNUM\r
+       INTEGER NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2\r
+       INTEGER TROLL,TROLL2,STREAM,SPICES\r
+       INTEGER RTXSIZ,CLSMAX,LOCSIZ,SECT,TABNDX,OBJ\r
+       INTEGER VERB,HNTLOC,KK\r
+C\r
+C\r
+       INTEGER VMAJ, VMIN, VEDIT\r
+       DATA VMAJ/2/,VMIN/0/,VEDIT/'A'/\r
+\r
+       CALL SETIDL\r
+       CALL INIT\r
+CDEBUG WRITE(4,1)\r
+CDEBUG1        FORMAT(' INIT DONE')\r
+       CALL AMAIN\r
+       CALL EXIT\r
+       END\r
diff --git a/sw/adventure/ADVENT.LD b/sw/adventure/ADVENT.LD
new file mode 100644 (file)
index 0000000..2f03316
Binary files /dev/null and b/sw/adventure/ADVENT.LD differ
diff --git a/sw/adventure/ADVENT.TX b/sw/adventure/ADVENT.TX
new file mode 100644 (file)
index 0000000..cff3432
--- /dev/null
@@ -0,0 +1,1777 @@
+1\r
+1,Y]OU ARE STANDING AT THE END OF A ROAD BEFORE A SMALL BRICK BUILDING.\r
+1,A]ROUND YOU IS A FOREST.  [A] SMALL STREAM FLOWS OUT OF THE BUILDING AND\r
+1,]DOWN A GULLY.\r
+2,Y]OU HAVE WALKED UP A HILL, STILL IN THE FOREST.  [T]HE ROAD SLOPES BACK\r
+2,]DOWN THE OTHER SIDE OF THE HILL. [T]HERE IS A BUILDING IN THE DISTANCE.\r
+3,Y]OU ARE INSIDE A BUILDING, A WELL HOUSE FOR A LARGE SPRING.\r
+4,Y]OU ARE IN A VALLEY IN THE FOREST BESIDE A STREAM TUMBLING ALONG A\r
+4,]ROCKY BED.\r
+5,Y]OU ARE IN OPEN FOREST, WITH A DEEP VALLEY TO ONE SIDE.\r
+6,Y]OU ARE IN OPEN FOREST NEAR BOTH A VALLEY AND A ROAD.\r
+7,A]T YOUR FEET ALL THE WATER OF THE STREAM SPLASHES INTO A 2-INCH SLIT\r
+7,]IN THE ROCK.  [D]OWNSTREAM THE STREAMBED IS BARE ROCK.\r
+8,Y]OU ARE IN A 20-FOOT DEPRESSION FLOORED WITH BARE DIRT.  [S]ET INTO THE\r
+8,]DIRT IS A STRONG STEEL GRATE MOUNTED IN CONCRETE.  [A] DRY STREAMBED\r
+8,]LEADS INTO THE DEPRESSION.\r
+9,Y]OU ARE IN A SMALL CHAMBER BENEATH A 3X3 STEEL GRATE TO THE SURFACE.\r
+9,A] LOW CRAWL OVER COBBLES LEADS INWARD TO THE WEST.\r
+10,Y]OU ARE CRAWLING OVER COBBLES IN A LOW PASSAGE.  [T]HERE IS A DIM LIGHT\r
+10,]AT THE EAST END OF THE PASSAGE.\r
+11,Y]OU ARE IN A DEBRIS ROOM FILLED WITH STUFF WASHED IN FROM THE SURFACE.\r
+11,A] LOW WIDE PASSAGE WITH COBBLES BECOMES PLUGGED WITH MUD AND DEBRIS\r
+11,]HERE, BUT AN AWKWARD CANYON LEADS UPWARD AND WEST. [A] NOTE ON THE WALL\r
+11,]SAYS "[MAGIC WORD XYZZY".\r
+12,Y]OU ARE IN AN AWKWARD SLOPING EAST/WEST CANYON.\r
+13,Y]OU ARE IN A SPLENDID CHAMBER THIRTY FEET HIGH.  [T]HE WALLS ARE FROZEN\r
+13,]RIVERS OF ORANGE STONE.  [A]N AWKWARD CANYON AND A GOOD PASSAGE EXIT\r
+13,]FROM EAST AND WEST SIDES OF THE CHAMBER.\r
+14,A]T YOUR FEET IS A SMALL PIT BREATHING TRACES OF WHITE MIST.  [A]N EAST\r
+14,]PASSAGE ENDS HERE EXCEPT FOR A SMALL CRACK LEADING ON.\r
+15,Y]OU ARE AT ONE END OF A VAST HALL STRETCHING FORWARD OUT OF SIGHT TO\r
+15,]THE WEST.  [T]HERE ARE OPENINGS TO EITHER SIDE.  [N]EARBY, A WIDE STONE\r
+15,]STAIRCASE LEADS DOWNWARD. [T]HE HALL IS FILLED WITH WISPS OF WHITE MIST\r
+15,]SWAYING TO AND FRO ALMOST AS IF ALIVE.  [A] COLD WIND BLOWS UP THE\r
+15,]STAIRCASE.  [T]HERE IS A PASSAGE AT THE TOP OF A DOME BEHIND YOU.\r
+16,T]HE CRACK IS FAR TOO SMALL FOR YOU TO FOLLOW.\r
+17,Y]OU ARE ON THE EAST BANK OF A FISSURE SLICING CLEAR ACROSS THE HALL.\r
+17,T]HE MIST IS QUITE THICK HERE, AND THE FISSURE IS TOO WIDE TO JUMP.\r
+18,T]HIS IS A LOW ROOM WITH A CRUDE NOTE ON THE WALL.  [T]HE NOTE SAYS,\r
+18,"Y]OU WON'T GET IT UP THE STEPS".\r
+19,Y]OU ARE IN THE [H]ALL OF THE [M]OUNTAIN [K]ING, WITH PASSAGES OFF IN \r
+19,]ALL DIRECTIONS.\r
+20,Y]OU ARE AT THE BOTTOM OF THE PIT WITH A BROKEN NECK.\r
+21,Y]OU DIDN'T MAKE IT.\r
+22,T]HE DOME IS UNCLIMBABLE.\r
+23,Y]OU ARE AT THE WEST END OF THE [T]WOPIT [R]OOM.  [T]HERE IS A LARGE \r
+23,]HOLE IN THE WALL ABOVE THE PIT AT THIS END OF THE ROOM.\r
+24,Y]OU ARE AT THE BOTTOM OF THE EASTERN PIT IN THE [T]WOPIT [R]OOM. \r
+24,T]HERE IS A SMALL POOL OF OIL IN ONE CORNER OF THE PIT.\r
+25,Y]OU ARE AT THE BOTTOM OF THE WESTERN PIT IN THE [T]WOPIT [R]OOM.\r
+25,T]HERE IS A LARGE HOLE IN THE WALL ABOUT 25 FEET ABOVE YOU.\r
+26,Y]OU CLAMBER UP THE PLANT AND SCURRY THROUGH THE HOLE AT THE TOP.\r
+27,Y]OU ARE ON THE WEST SIDE OF THE FISSURE IN THE [H]ALL OF [M]ISTS.\r
+28,Y]OU ARE IN A LOW NORTH/SOUTH PASSAGE AT A HOLE IN THE FLOOR.  [T]HE\r
+28,]HOLE GOES DOWN TO AN EAST/WEST PASSAGE.\r
+29,Y]OU ARE IN THE SOUTH SIDE CHAMBER.\r
+30,Y]OU ARE IN THE WEST SIDE CHAMBER OF THE HALL OF THE [M]OUNTAIN [K]ING.\r
+30,A] PASSAGE CONTINUES WEST AND UP HERE.\r
+31,>$<\r
+32,Y]OU CAN'T GET BY THE SNAKE.\r
+33,Y]OU ARE IN A LARGE ROOM, WITH A PASSAGE TO THE SOUTH, A PASSAGE TO THE\r
+33,]WEST, AND A WALL OF BROKEN ROCK TO THE EAST.  [T]HERE IS A LARGE "[Y2]"\r
+33,]ON A ROCK IN THE ROOM'S CENTER.\r
+34,Y]OU ARE IN A JUMBLE OF ROCK, WITH CRACKS EVERYWHERE.\r
+35,Y]OU'RE AT A LOW WINDOW OVERLOOKING A HUGE PIT, WHICH EXTENDS UP OUT OF\r
+35,]SIGHT.  [A] FLOOR IS INDISTINCTLY VISIBLE OVER 50 FEET BELOW. [T]RACES\r
+35,]OF WHITE MIST COVER THE FLOOR OF THE PIT,BECOMING THICKER TO THE RIGHT.\r
+35,M]ARKS IN THE DUST AROUND THE WINDOW WOULD SEEM TO INDICATE THAT\r
+35,]SOMEONE HAS BEEN HERE RECENTLY. [D]IRECTLY ACROSS THE PIT FROM YOU AND\r
+35,]25 FEET AWAY THERE IS A SIMILAR WINDOW LOOKING INTO A LIGHTED ROOM.\r
+35,A ]SHADOWY FIGURE CAN BE SEEN THERE PEERING BACK AT YOU.\r
+36,Y]OU ARE IN A DIRTY BROKEN PASSAGE.  [T]O THE EAST IS A CRAWL. [T]O THE\r
+36,]WEST IS A LARGE PASSAGE.  [A]BOVE YOU IS A HOLE TO ANOTHER PASSAGE.\r
+37,Y]OU ARE ON THE BRINK OF A SMALL CLEAN CLIMBABLE PIT.  [A] CRAWL LEADS\r
+37,]WEST.\r
+38,Y]OU ARE IN THE BOTTOM OF A SMALL PIT WITH A LITTLE STREAM, WHICH\r
+38,]ENTERS AND EXITS THROUGH TINY SLITS.\r
+39,Y]OU ARE IN A LARGE ROOM FULL OF DUSTY ROCKS.  [T]HERE IS A BIG HOLE IN\r
+39,]THE FLOOR.  [T]HERE ARE CRACKS EVERYWHERE, AND A PASSAGE LEADING EAST.\r
+40,Y]OU HAVE CRAWLED THROUGH A VERY LOW WIDE PASSAGE PARALLEL TO AND NORTH\r
+40,]OF THE [H]ALL OF [M]ISTS.\r
+41,Y]OU ARE AT THE WEST END OF THE [H]ALL OF [M]ISTS. [A] LOW WIDE CRAWL \r
+41,]CONTINUES WEST AND ANOTHER GOES NORTH. [T]O THE SOUTH IS A LITTLE \r
+41,]PASSAGE 6 FEET OFF THE FLOOR.\r
+42,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+43,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+44,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+45,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+46,D]EAD END!\r
+47,D]EAD END!\r
+48,D]EAD END!\r
+49,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+50,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+51,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+52,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+53,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+54,D]EAD END!\r
+55,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+56,D]EAD END!\r
+57,Y]OU ARE ON THE BRINK OF A THIRTY FOOT PIT WITH A MASSIVE ORANGE COLUMN\r
+57,]DOWN ONE WALL.  [Y]OU COULD CLIMB DOWN HERE BUT YOU COULD NOT GET BACK\r
+57,]UP.  [T]HE MAZE CONTINUES AT THIS LEVEL.\r
+58,D]EAD END!\r
+59,Y]OU HAVE CRAWLED THROUGH A VERY LOW WIDE PASSAGE PARALLEL TO AND NORTH\r
+59,]OF THE [H]ALL OF [M]ISTS.\r
+60,Y]OU ARE AT THE EAST END OF A VERY LONG HALL APPARENTLY WITHOUT SIDE\r
+60,]CHAMBERS.  [T]O THE EAST A LOW WIDE CRAWL SLANTS UP.  [T]O THE NORTH A\r
+60,]ROUND TWO FOOT HOLE SLANTS DOWN.\r
+61,Y]OU ARE AT THE WEST END OF A VERY LONG FEATURELESS HALL.  [T]HE HALL\r
+61,]JOINS UP WITH A NARROW NORTH/SOUTH PASSAGE.\r
+62,Y]OU ARE AT A CROSSOVER OF A HIGH NORTH/SOUTH PASSAGE AND A LOW\r
+62,]EAST/WEST ONE.\r
+63,D]EAD END!\r
+64,Y]OU ARE AT A COMPLEX JUNCTION.  [A] LOW HANDS AND KNEES PASSAGE FROM\r
+64,]THE NORTH JOINS A HIGHER CRAWL FROM THE EAST TO MAKE A WALKING\r
+64,]PASSAGE GOING WEST.  [T]HERE IS ALSO A LARGE ROOM ABOVE.  [T]HE AIR\r
+64,]IS DAMP HERE.\r
+65,Y]OU ARE IN [B]EDQUILT, A LONG EAST/WEST PASSAGE WITH HOLES EVERYWHERE.\r
+65,T]O EXPLORE AT RANDOM SELECT NORTH, SOUTH, UP, OR DOWN.\r
+66,Y]OU ARE IN A ROOM WHOSE WALLS RESEMBLE [S]WISS CHEESE. [O]BVIOUS\r
+66,]PASSAGES GO WEST, EAST, NORTHEAST, AND NORTHWEST.  [P]ART OF THE ROOM\r
+66,]IS OCCUPIED BY A LARGE BEDROCK BLOCK.\r
+67,Y]OU ARE AT THE EAST END OF THE [T]WOPIT [R]OOM.  [T]HE FLOOR HERE IS\r
+67,]LITTERED WITH THIN ROCK SLABS, WHICH MAKE IT EASY TO DESCEND THE PITS.\r
+67,]THERE IS A PATH HERE BYPASSING THE PITS TO CONNECT PASSAGES FROM EAST\r
+67,]AND WEST.  [T]HERE ARE HOLES ALL OVER, BUT THE ONLY BIG ONE IS ON THE\r
+67,]WALL DIRECTLY OVER THE WEST PIT WHERE YOU CAN'T GET TO IT.\r
+68,Y]OU ARE IN A LARGE LOW CIRCULAR CHAMBER WHOSE FLOOR IS AN IMMENSE SLAB\r
+68,]FALLEN FROM THE CEILING ([S]LAB [R]OOM).  [E]AST AND WEST THERE ONCE \r
+68,]WERE LARGE PASSAGES, BUT THEY ARE NOW FILLED WITH BOULDERS. [L]OW SMALL\r
+68,]PASSAGES GO NORTH AND SOUTH, AND THE SOUTH ONE QUICKLY BENDS WEST\r
+68,]AROUND THE BOULDERS.\r
+69,Y]OU ARE IN A SECRET NORTH/SOUTH CANYON ABOVE A LARGE ROOM.\r
+70,Y]OU ARE IN A SECRET NORTH/SOUTH CANYON ABOVE A SIZABLE PASSAGE.\r
+71,Y]OU ARE IN A SECRET CANYON AT A JUNCTION OF THREE CANYONS, BEARING\r
+71,]NORTH, SOUTH, AND SOUTHEAST.  [T]HE NORTH ONE IS AS TALL AS THE OTHER \r
+71,]TWO COMBINED.\r
+72,Y]OU ARE IN A LARGE LOW ROOM.  [C]RAWLS LEAD NORTH, SOUTHEAST, AND\r
+72,]AND SOUTHWEST.\r
+73,D]EAD END CRAWL.\r
+74,Y]OU ARE IN A SECRET CANYON WHICH HERE RUNS EAST/WEST.  [I]T CROSSES \r
+74,]OVER A VERY TIGHT CANYON 15 FEET BELOW.  [I]F YOU GO DOWN YOU MAY NOT \r
+74,]BE ABLE TO GET BACK UP.\r
+75,Y]OU ARE AT A WIDE PLACE IN A VERY TIGHT NORTH/SOUTH CANYON.\r
+76,T]HE CANYON HERE BECOMES TOO TIGHT TO GO FURTHER SOUTH.\r
+77,Y]OU ARE IN A TALL EAST/WEST CANYON.  [A] LOW TIGHT CRAWL GOES 3 FEET \r
+77,]NORTH AND SEEMS TO OPEN UP.\r
+78,T]HE CANYON RUNS INTO A MASS OF BOULDERS -- DEAD END.\r
+79,T]HE STREAM FLOWS OUT THROUGH A PAIR OF 1 FOOT DIAMETER SEWER PIPES.\r
+79,I]T WOULD BE ADVISABLE TO USE THE EXIT.\r
+80,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+81,D]EAD END!\r
+82,D]EAD END!\r
+83,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+84,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+85,D]EAD END!\r
+86,D]EAD END!\r
+87,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE.\r
+88,Y]OU ARE IN A LONG, NARROW CORRIDOR STRETCHING OUT OF SIGHT TO THE\r
+88,]WEST.  AT THE EASTERN END IS A HOLE THROUGH WHICH YOU CAN SEE A\r
+88,]PROFUSION OF LEAVES.\r
+89,T]HERE IS NOTHING HERE TO CLIMB.  [U]SE "UP" OR "OUT" TO LEAVE THE PIT.\r
+90,Y]OU HAVE CLIMBED UP THE PLANT AND OUT OF THE PIT.\r
+91,Y]OU ARE AT THE TOP OF A STEEP INCLINE ABOVE A LARGE ROOM.  [Y]OU COULD\r
+91,]CLIMB DOWN HERE, BUT YOU WOULD NOT BE ABLE TO CLIMB UP.  [T]HERE IS A\r
+91,]PASSAGE LEADING BACK TO THE NORTH.\r
+92,Y]OU ARE IN THE GIANT ROOM.  [T]HE CEILING HERE IS TOO HIGH UP FOR YOUR\r
+92,]LAMP TO SHOW IT. [C]AVERNOUS PASSAGES LEAD EAST, NORTH, AND SOUTH.\r
+92,]ON THE WALL IS SCRAWLED THE INSCRIPTION, "[FEE FIE FOE FOO]" (SIC).\r
+93,T]HE PASSAGE HERE IS BLOCKED BY A RECENT CAVE-IN.\r
+94,Y]OU ARE AT ONE END OF AN IMMENSE NORTH/SOUTH PASSAGE.\r
+95,Y]OU ARE IN A MAGNIFICENT CAVERN WITH A RUSHING STREAM, WHICH CASCADES\r
+95,]OVER A SPARKLING WATERFALL INTO A ROARING WHIRLPOOL WHICH DISAPPEARS\r
+95,]THROUGH A HOLE IN THE FLOOR.  [P]ASSAGES EXIT TO THE SOUTH AND WEST.\r
+96,Y]OU ARE IN THE [S]OFT [R]OOM.  [T]HE WALLS ARE COVERED WITH HEAVY\r
+96,]CURTAINS,THE FLOOR WITH A THICK PILE CARPET.[M]OSS COVERS THE CEILING.\r
+97,T]HIS IS THE [O]RIENTAL ROOM. [A]NCIENT ORIENTAL CAVE DRAWINGS COVER THE\r
+97,]WALLS.  [A] GENTLY SLOPING PASSAGE LEADS UPWARD TO THE NORTH, ANOTHER\r
+97,]PASSAGE LEADS SOUTHEAST, AND A HANDS AND KNEES CRAWL LEADS WEST.\r
+98,Y]OU ARE FOLLOWING A WIDE PATH AROUND THE OUTER EDGE OF A LARGE CAVERN.\r
+98,F]AR BELOW, THROUGH A HEAVY WHITE MIST, STRANGE SPLASHING NOISES CAN BE\r
+98,]HEARD.  [T]HE MIST RISES UP THROUGH A FISSURE IN THE CEILING.  [T]HE\r
+98,]PATH EXITS TO THE SOUTH AND WEST.\r
+99,Y]OU ARE IN AN ALCOVE.  [A] SMALL NORTHWEST PATH SEEMS TO WIDEN AFTER \r
+99,]SHORT DISTANCE. [A]N EXTREMELY TIGHT TUNNEL LEADS EAST.  [I]T LOOKS LIKE\r
+99,]A VERY TIGHT SQUEEZE.  [A]N EERIE LIGHT CAN BE SEEN AT THE OTHER END.\r
+100,Y]OU'RE IN A SMALL CHAMBER LIT BY AN EERIE GREEN LIGHT.  [A]N EXTREMELY\r
+100,]NARROW TUNNEL EXITS TO THE WEST.  [A] DARK CORRIDOR LEADS NORTHEAST.\r
+101,Y]OU'RE IN THE [D]ARK [R]OOM.  [A] CORRIDOR LEADING SOUTH IS THE ONLY\r
+101,]EXIT.\r
+102,Y]OU ARE IN AN ARCHED HALL.[A] CORAL PASSAGE ONCE CONTINUED UP AND EAST\r
+102,]FROM HERE, BUT IS NOW BLOCKED BY DEBRIS.[T]HE AIR SMELLS OF SEA WATER.\r
+103,Y]OU'RE IN A LARGE ROOM CARVED OUT OF SEDIMENTARY ROCK. [T]HE FLOOR AND\r
+103,]WALLS ARE LITTERED WITH BITS OF SHELLS IMBEDDED IN THE STONE.  [A]\r
+103,]SHALLOW PASSAGE PROCEEDS DOWNWARD, AND A SOMEWHAT STEEPER ONE LEADS\r
+103,]UP.  [A] LOW HANDS AND KNEES PASSAGE ENTERS FROM THE SOUTH.\r
+104,Y]OU ARE IN A LONG SLOPING CORRIDOR WITH RAGGED SHARP WALLS.\r
+105,Y]OU ARE IN A CUL-DE-SAC ABOUT EIGHT FEET ACROSS.\r
+106,Y]OU ARE IN AN ANTEROOM LEADING TO A LARGE PASSAGE TO THE EAST.  [S]MALL\r
+106,]PASSAGES GO WEST AND UP. [T]HE REMNANTS OF RECENT DIGGING ARE EVIDENT.\r
+106,A] SIGN IN MIDAIR HERE SAYS "[C]AVE UNDER CONSTRUCTION BEYOND THIS\r
+106,]POINT. [P]ROCEED AT OWN RISK.  ([W]ITT [C]ONSTRUCTION [C]OMPANY)"\r
+107,Y]OU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL DIFFERENT.\r
+108,Y]OU ARE AT [W]ITT'S [E]ND.  [P]ASSAGES LEAD OFF IN [ALL] DIRECTIONS.\r
+109,Y]OU ARE IN A NORTH/SOUTH CANYON ABOUT 25 FEET ACROSS.  [T]HE FLOOR IS\r
+109,]COVERED BY WHITE MIST SEEPING IN FROM THE NORTH.  [T]HE WALLS EXTEND\r
+109,]UPWARD FOR WELL OVER 100 FEET.  [S]USPENDED FROM SOME UNSEEN POINT FAR\r
+109,]ABOVE YOU, AN ENORMOUS TWO-SIDED MIRROR IS HANGING PARALLEL TO AND\r
+109,]MIDWAY BETWEEN THE CANYON WALLS.  ([T]HE MIRROR IS OBVIOUSLY PROVIDED\r
+109,]FOR THE USE OF THE DWARVES, WHO AS YOU KNOW, ARE EXTREMELY VAIN.)  [A]\r
+109,]SMALL WINDOW CAN BE SEEN IN EITHER WALL, SOME FIFTY FEET UP.\r
+110,Y]OU'RE AT A LOW WINDOW OVERLOOKING A HUGE PIT, WHICH EXTENDS UP OUT OF\r
+110,]SIGHT. [A] FLOOR IS INDISTINCTLY VISIBLE OVER 50 FEET BELOW.  [T]RACES\r
+110,]OF WHITE MIST COVER THE FLOOR OF THE PIT,BECOMING THICKER TO THE LEFT.\r
+110,M]ARKS IN THE DUST AROUND THE WINDOW WOULD SEEM TO INDICATE THAT\r
+110,]SOMEONE HAS BEEN HERE RECENTLY. [D]IRECTLY ACROSS THE PIT FROM YOU AND\r
+110,25 ]FEET AWAY THERE IS A SIMILAR WINDOW LOOKING INTO A LIGHTED ROOM.\r
+110,A] SHADOWY FIGURE CAN BE SEEN THERE PEERING BACK AT YOU.\r
+111,A] LARGE STALACTITE EXTENDS FROM THE ROOF AND ALMOST REACHES THE FLOOR\r
+111,]BELOW.  [Y]OU COULD CLIMB DOWN IT, AND JUMP FROM IT TO THE FLOOR, BUT\r
+111,]HAVING DONE SO YOU WOULD BE UNABLE TO REACH IT TO CLIMB BACK UP.\r
+112,Y]OU ARE IN A LITTLE MAZE OF TWISTING PASSAGES, ALL DIFFERENT.\r
+113,Y]OU ARE AT THE EDGE OF A LARGE UNDERGROUND RESERVOIR.  [A]N OPAQUE\r
+113,]CLOUD OF WHITE MIST FILLS THE ROOM AND RISES RAPIDLY UPWARD.  [T]HE\r
+113,]LAKE IS FED BY A STREAM, WHICH TUMBLES OUT OF A HOLE IN THE WALL ABOUT\r
+113,10 ]FEET OVERHEAD AND SPLASHES NOISILY INTO THE WATER SOMEWHERE WITHIN\r
+113,]THE MIST.  [T]HE ONLY PASSAGE GOES BACK TOWARD THE SOUTH.\r
+114,D]EAD END!\r
+115,Y]OU ARE AT THE NORTHEAST END OF AN IMMENSE ROOM, EVEN LARGER THAN THE\r
+115,]GIANT ROOM.  [I]T APPEARS TO BE A REPOSITORY FOR THE "[ADVENTURE]"\r
+115,]PROGRAM.  [M]ASSIVE TORCHES FAR OVERHEAD BATHE THE ROOM WITH SMOKY\r
+115,]YELLOW LIGHT. [S]CATTERED ABOUT YOU CAN BE SEEN A PILE OF BOTTLES (ALL\r
+115,]OF THEM EMPTY), A NURSERY OF YOUNG BEANSTALKS MURMURING QUIETLY, A BED\r
+115,]OF OYSTERS, A BUNDLE OF BLACK RODS WITH RUSTY STARS ON THEIR ENDS, AND\r
+115,]A COLLECTION OF BRASS LANTERNS. [O]FF TO ONE SIDE A GREAT MANY DWARVES\r
+115,]ARE SLEEPING ON THE FLOOR, SNORING LOUDLY.  A SIGN NEARBY READS: "[D]O\r
+115,]NOT DISTURB THE DWARVES!"  [A]N IMMENSE MIRROR IS HANGING AGAINST ONE\r
+115,]WALL, AND STRETCHES TO THE OTHER END OF THE ROOM, WHERE VARIOUS OTHER\r
+115,]SUNDRY OBJECTS CAN BE GLIMPSED DIMLY IN THE DISTANCE.\r
+116,Y]OU ARE AT THE SOUTHWEST END OF THE REPOSITORY. [T]O ONE SIDE IS A PIT\r
+116,]FULL OF FIERCE GREEN SNAKES.  [O]N THE OTHER SIDE IS A ROW OF SMALL\r
+116,]WICKER CAGES, EACH OF WHICH CONTAINS A LITTLE SULKING BIRD.  [I]N ONE\r
+116,]CORNER IS A BUNDLE OF BLACK RODS WITH RUSTY MARKS ON THEIR ENDS.  [A]\r
+116,]LARGE NUMBER OF VELVET PILLOWS ARE SCATTERED ABOUT ON THE FLOOR.  [A]\r
+116,]VAST MIRROR STRETCHES OFF TO THE NORTHEAST.  [A]T YOUR FEET IS A LARGE\r
+116,]STEEL GRATE, NEXT TO WHICH IS A SIGN WHICH READS, "[T]REASURE VAULT.\r
+116,]KEYS IN [M]AIN [O]FFICE."\r
+117,Y]OU ARE ON ONE SIDE OF A LARGE, DEEP CHASM.  [A] HEAVY WHITE MIST\r
+117,]RISING UP FROM BELOW OBSCURES ALL VIEW OF THE FAR SIDE.  [A] SW PATH\r
+117,]LEADS AWAY FROM THE CHASM INTO A WINDING CORRIDOR.\r
+118,Y]OU ARE IN A LONG WINDING CORRIDOR SLOPING OUT OF SIGHT IN BOTH\r
+118,]DIRECTIONS.\r
+119,Y]OU ARE IN A SECRET CANYON WHICH EXITS TO THE NORTH AND EAST.\r
+120,Y]OU ARE IN A SECRET CANYON WHICH EXITS TO THE NORTH AND EAST.\r
+121,Y]OU ARE IN A SECRET CANYON WHICH EXITS TO THE NORTH AND EAST.\r
+122,Y]OU ARE ON THE FAR SIDE OF THE CHASM.  [A] NORTHEAST PATH LEADS AWAY \r
+122,]FROM THE CHASM ON THIS SIDE.\r
+123,Y]OU'RE IN A LONG EAST/WEST CORRIDOR.  [A] FAINT RUMBLING NOISE CAN BE\r
+123,]HEARD IN THE DISTANCE.\r
+124,T]HE PATH FORKS HERE. [T]HE LEFT FORK LEADS NORTHEAST.[A] DULL RUMBLING\r
+124,]SEEMS TO GET LOUDER IN THAT DIRECTION.[T]HE RIGHT FORK LEADS SOUTHEAST\r
+124,]DOWN A GENTLE SLOPE.  [T]HE MAIN CORRIDOR ENTERS FROM THE WEST.\r
+125,T]HE WALLS ARE QUITE WARM HERE.  [F]ROM THE NORTH CAN BE HEARD A STEADY\r
+125,]ROAR, SO LOUD THAT THE ENTIRE CAVE SEEMS TO BE TREMBLING.  [A]NOTHER\r
+125,]PASSAGE LEADS SOUTH, AND A LOW CRAWL GOES EAST.\r
+126,Y]OU ARE ON THE EDGE OF A BREATH-TAKING VIEW.  [F]AR BELOW YOU IS AN\r
+126,]ACTIVE VOLCANO, FROM WHICH GREAT GOUTS OF MOLTEN LAVA COME SURGING\r
+126,]OUT, CASCADING BACK DOWN INTO THE DEPTHS. [T]HE GLOWING ROCK FILLS THE\r
+126,]FARTHEST REACHES OF THE CAVERN WITH A BLOOD-RED GLARE, GIVING EVERY-\r
+126,]THING AN EERIE, MACABRE APPEARANCE. [T]HE AIR IS FILLED WITH FLICKERING\r
+126,]SPARKS OF ASH AND A HEAVY SMELL OF BRIMSTONE.  [T]HE WALLS ARE HOT TO\r
+126,]THE TOUCH, AND THE THUNDERING OF THE VOLCANO DROWNS OUT ALL OTHER\r
+126,]SOUNDS.  [E]MBEDDED IN THE JAGGED ROOF FAR OVERHEAD ARE MYRIAD TWISTED\r
+126,]FORMATIONS COMPOSED OF PURE WHITE ALABASTER, WHICH SCATTER THE MURKY\r
+126,]LIGHT INTO SINISTER APPARITIONS UPON THE WALLS.[T]O ONE SIDE IS A DEEP\r
+126,]GORGE, FILLED WITH A BIZARRE CHAOS OF TORTURED ROCK WHICH SEEMS TO\r
+126,]HAVE BEEN CRAFTED BY THE DEVIL HIMSELF.  [A]N IMMENSE RIVER OF FIRE\r
+126,]CRASHES OUT FROM THE DEPTHS OF THE VOLCANO, BURNS ITS WAY THROUGH THE\r
+126,]GORGE, AND PLUMMETS INTO A BOTTOMLESS PIT FAR OFF TO YOUR LEFT.  [T]O\r
+126,]THE RIGHT, AN IMMENSE GEYSER OF BLISTERING STEAM ERUPTS CONTINUOUSLY\r
+126,]FROM A BARREN ISLAND IN THE CENTER OF A SULFUROUS LAKE, WHICH BUBBLES\r
+126,]OMINOUSLY. [T]HE FAR RIGHT WALL IS AFLAME WITH AN INCANDESCENCE OF ITS\r
+126,]OWN, WHICH LENDS AN ADDITIONAL INFERNAL SPLENDOR TO THE ALREADY\r
+126,]HELLISH SCENE.  [A] DARK, FOREBODING PASSAGE EXITS TO THE SOUTH.\r
+127,Y]OU ARE IN A SMALL CHAMBER FILLED WITH LARGE BOULDERS. [T]HE WALLS ARE\r
+127,]VERY WARM, CAUSING THE AIR IN THE ROOM TO BE ALMOST STIFLING FROM THE\r
+127,]HEAT. [T]HE ONLY EXIT IS A CRAWL HEADING WEST, THROUGH WHICH IS COMING\r
+127,]A LOW RUMBLING.\r
+128,Y]OU ARE WALKING ALONG A GENTLY SLOPING NORTH/SOUTH PASSAGE LINED WITH\r
+128,]ODDLY SHAPED LIMESTONE FORMATIONS.\r
+129,Y]OU ARE STANDING AT THE ENTRANCE TO A LARGE, BARREN ROOM.  [A] SIGN\r
+129,]POSTED ABOVE THE ENTRANCE READS:  "[C]AUTION!  [B]EAR IN ROOM!"\r
+130,Y]OU ARE INSIDE A BARREN ROOM.  [T]HE CENTER OF THE ROOM IS COMPLETELY\r
+130,]EMPTY EXCEPT FOR SOME DUST.  [M]ARKS IN THE DUST LEAD AWAY TOWARD THE\r
+130,]FAR END OF THE ROOM.  [T]HE ONLY EXIT IS THE WAY YOU CAME IN.\r
+131,Y]OU ARE IN A MAZE OF TWISTING LITTLE PASSAGES, ALL DIFFERENT.\r
+132,Y]OU ARE IN A LITTLE MAZE OF TWISTY PASSAGES, ALL DIFFERENT.\r
+133,Y]OU ARE IN A TWISTING MAZE OF LITTLE PASSAGES, ALL DIFFERENT.\r
+134,Y]OU ARE IN A TWISTING LITTLE MAZE OF PASSAGES, ALL DIFFERENT.\r
+135,Y]OU ARE IN A TWISTY LITTLE MAZE OF PASSAGES, ALL DIFFERENT.\r
+136,Y]OU ARE IN A TWISTY MAZE OF LITTLE PASSAGES, ALL DIFFERENT.\r
+137,Y]OU ARE IN A LITTLE TWISTY MAZE OF PASSAGES, ALL DIFFERENT.\r
+138,Y]OU ARE IN A MAZE OF LITTLE TWISTING PASSAGES, ALL DIFFERENT.\r
+139,Y]OU ARE IN A MAZE OF LITTLE TWISTY PASSAGES, ALL DIFFERENT.\r
+140,D]EAD END!\r
+-1,END\r
+2\r
+1,Y]OU'RE AT END OF ROAD AGAIN.\r
+2,Y]OU'RE AT HILL IN ROAD.\r
+3,Y]OU'RE INSIDE BUILDING.\r
+4,Y]OU'RE IN VALLEY.\r
+5,Y]OU'RE IN FOREST.\r
+6,Y]OU'RE IN FOREST.\r
+7,Y]OU'RE AT SLIT IN STREAMBED.\r
+8,Y]OU'RE OUTSIDE GRATE.\r
+9,Y]OU'RE BELOW THE GRATE.\r
+10,Y]OU'RE IN [C]OBBLE [C]RAWL.\r
+11,Y]OU'RE IN [D]EBRIS [R]OOM.\r
+13,Y]OU'RE IN [B]IRD [C]HAMBER.\r
+14,Y]OU'RE AT TOP OF [S]MALL [P]IT.\r
+15,Y]OU'RE IN [H]ALL OF [M]ISTS.\r
+17,Y]OU'RE ON EAST BANK OF [F]ISSURE.\r
+18,Y]OU'RE IN [N]UGGET OF [G]OLD [R]OOM.\r
+19,Y]OU'RE IN [H]ALL OF [M]T [K]ING.\r
+23,Y]OU'RE AT WEST END OF [T]WOPIT [R]OOM.\r
+24,Y]OU'RE IN [E]AST [P]IT.\r
+25,Y]OU'RE IN [W]EST [P]IT.\r
+33,Y]OU'RE AT "[Y2]".\r
+35,Y]OU'RE AT WINDOW ON [P]IT.\r
+36,Y]OU'RE IN [D]IRTY [P]ASSAGE.\r
+39,Y]OU'RE IN [D]USTY [R]OCK [R]OOM.\r
+41,Y]OU'RE AT WEST END OF [H]ALL OF [M]ISTS.\r
+57,Y]OU'RE AT BRINK OF [P]IT.\r
+60,Y]OU'RE AT EAST END OF [L]ONG [H]ALL.\r
+61,Y]OU'RE AT WEST END OF [L]ONG [H]ALL.\r
+64,Y]OU'RE AT [C]OMPLEX [J]UNCTION.\r
+66,Y]OU'RE IN [S]WISS [C]HEESE ROOM.\r
+67,Y]OU'RE AT EAST END OF [T]WOPIT [R]OOM.\r
+68,Y]OU'RE IN [S]LAB [R]OOM.\r
+71,Y]OU'RE AT [JUNCTION OF [THREE [SECRET [CANYONS.\r
+74,Y]OU'RE IN [S]ECRET EAST/WEST [C]ANYON ABOVE TIGHT CANYON.\r
+88,Y]OU'RE IN [N]ARROW [C]ORRIDOR.\r
+91,Y]OU'RE AT STEEP INCLINE ABOVE [L]ARGE [R]OOM.\r
+92,Y]OU'RE IN [G]IANT [R]OOM.\r
+95,Y]OU'RE IN [C]AVERN WITH [W]ATERFALL.\r
+96,Y]OU'RE IN [S]OFT [R]OOM.\r
+97,Y]OU'RE IN [O]RIENTAL [R]OOM.\r
+98,Y]OU'RE IN [M]ISTY [C]AVERN.\r
+99,Y]OU'RE IN [A]LCOVE.\r
+100,Y]OU'RE IN [P]LOVER [R]OOM.\r
+101,Y]OU'RE IN [D]ARK [R]OOM.\r
+102,Y]OU'RE IN [A]RCHED [H]ALL.\r
+103,Y]OU'RE IN [S]HELL [R]OOM.\r
+106,Y]OU'RE IN [A]NTEROOM.\r
+108,Y]OU'RE AT [W]ITT'S [E]ND.\r
+109,Y]OU'RE IN [M]IRROR [C]ANYON.\r
+110,Y]OU'RE AT WINDOW ON [P]IT.\r
+111,Y]OU'RE AT TOP OF [S]TALACTITE.\r
+113,Y]OU'RE AT [R]ESERVOIR.\r
+115,Y]OU'RE AT NORTHEAST END.\r
+116,Y]OU'RE AT SOUTHWEST END.\r
+117,Y]OU'RE ON SOUTHWEST SIDE OF [C]HASM.\r
+118,Y]OU'RE IN [S]LOPING [C]ORRIDOR.\r
+122,Y]OU'RE ON NORTHEAST SIDE OF [C]HASM.\r
+123,Y]OU'RE IN [C]ORRIDOR.\r
+124,Y]OU'RE AT [F]ORK IN [P]ATH.\r
+125,Y]OU'RE AT [J]UNCTION WITH [W]ARM [W]ALLS.\r
+126,Y]OU'RE AT [B]REATH-TAKING [V]IEW.\r
+127,Y]OU'RE IN [C]HAMBER OF [B]OULDERS.\r
+128,Y]OU'RE IN [L]IMESTONE [P]ASSAGE.\r
+129,Y]OU'RE IN FRONT OF [B]ARREN [R]OOM.\r
+130,Y]OU'RE IN [B]ARREN [R]OOM.\r
+-1\r
+3\r
+1,0,2,2,44,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+1,0,3,3,12,19,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+1,0,4,5,13,14,46,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+1,0,5,6,45,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+1,0,8,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+2,0,1,2,12,7,43,45,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+2,0,5,6,45,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+3,0,1,3,11,32,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+3,0,11,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+3,0,33,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+3,0,79,5,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+4,0,1,4,12,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+4,0,5,6,43,44,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+4,0,7,5,46,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+4,0,8,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+5,0,4,9,43,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+5,50,005,6,7,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+5,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+5,0,5,44,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+6,0,1,2,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+6,0,4,9,43,44,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+6,0,5,6,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+7,0,1,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+7,0,4,4,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+7,0,5,6,43,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+7,0,8,5,15,16,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+7,0,595,60,14,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+8,0,5,6,43,44,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+8,0,1,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+8,0,7,4,13,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+8,303,009,3,19,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+8,0,593,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+9,303,008,11,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+9,0,593,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+9,0,10,17,18,19,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+9,0,14,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+9,0,11,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+10,0,9,11,20,21,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+10,0,11,19,22,44,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+10,0,14,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+11,303,008,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+11,0,9,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+11,0,10,17,18,23,24,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+11,0,12,25,19,29,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+11,0,3,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+11,0,14,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+12,303,008,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+12,0,9,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+12,0,11,30,43,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+12,0,13,19,29,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+12,0,14,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+13,303,008,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+13,0,9,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+13,0,11,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+13,0,12,25,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+13,0,14,23,31,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+14,303,008,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+14,0,9,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+14,0,11,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+14,0,13,23,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+14,150,020,30,31,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+14,0,15,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+14,0,16,33,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+15,0,18,36,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+15,0,17,7,38,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+15,0,19,10,30,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+15,150,022,29,31,34,35,23,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+15,0,14,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+15,0,34,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+16,0,14,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+17,0,15,38,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+17,312,596,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+17,412,021,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+17,412,597,41,42,44,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+17,0,27,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+18,0,15,38,11,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+19,0,15,10,29,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+19,311,028,45,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+19,311,029,46,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+19,311,030,44,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+19,0,32,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+19,35,074,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+19,211,032,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+19,0,74,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+20,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+21,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+22,0,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+23,0,67,43,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+23,0,68,44,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+23,0,25,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+23,0,648,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+24,0,67,29,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+25,0,23,29,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+25,724,031,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+25,0,26,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+26,0,88,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+27,312,596,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+27,412,021,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+27,412,597,41,42,43,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+27,0,17,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+27,0,40,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+27,0,41,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+28,0,19,38,11,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+28,0,33,45,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+28,0,36,30,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+29,0,19,38,11,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+30,0,19,38,11,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+30,0,62,44,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+31,524,089,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+31,0,90,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+32,0,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+33,0,3,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+33,0,28,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+33,0,34,43,53,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+33,0,35,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+33,159,302,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+33,0,100,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+34,0,33,30,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+34,0,15,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+35,0,33,43,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+35,0,20,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+36,0,37,43,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+36,0,28,29,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+36,0,39,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+36,0,65,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+37,0,36,44,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+37,0,38,30,31,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+38,0,37,56,29,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+38,0,595,60,14,30,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+39,0,36,43,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+39,0,64,30,52,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+39,0,65,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+40,0,41,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+41,0,42,46,29,23,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+41,0,27,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+41,0,59,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+41,0,60,44,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+42,0,41,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+42,0,42,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+42,0,43,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+42,0,45,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+42,0,80,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+43,0,42,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+43,0,44,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+43,0,45,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+44,0,43,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+44,0,48,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+44,0,50,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+44,0,82,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+45,0,42,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+45,0,43,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+45,0,46,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+45,0,47,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+45,0,87,29,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+46,0,45,44,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+47,0,45,43,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+48,0,44,29,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+49,0,50,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+49,0,51,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+50,0,44,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+50,0,49,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+50,0,51,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+50,0,52,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+51,0,49,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+51,0,50,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+51,0,52,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+51,0,53,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+52,0,50,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+52,0,51,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+52,0,52,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+52,0,53,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+52,0,55,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+52,0,86,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+53,0,51,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+53,0,52,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+53,0,54,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+54,0,53,44,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+55,0,52,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+55,0,55,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+55,0,56,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+55,0,57,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+56,0,55,29,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+57,0,13,30,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+57,0,55,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+57,0,58,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+57,0,83,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+57,0,84,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+58,0,57,43,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+59,0,27,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+60,0,41,43,29,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+60,0,61,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+60,0,62,45,30,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+61,0,60,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+61,0,62,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+61,100,107,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+62,0,60,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+62,0,63,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+62,0,30,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+62,0,61,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+63,0,62,46,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+64,0,39,29,56,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+64,0,65,44,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+64,0,103,45,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+64,0,106,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,0,64,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,0,66,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,80,556,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,0,68,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,80,556,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,50,070,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,0,39,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,60,556,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,75,072,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,0,71,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,80,556,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+65,0,106,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+66,0,65,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+66,0,67,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+66,80,556,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+66,0,77,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+66,0,96,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+66,50,556,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+66,0,97,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+67,0,66,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+67,0,23,44,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+67,0,24,30,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+68,0,23,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+68,0,69,29,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+68,0,65,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+69,0,68,30,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+69,331,120,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+69,0,119,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+69,0,109,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+69,0,113,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+70,0,71,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+70,0,65,30,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+70,0,111,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+71,0,65,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+71,0,70,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+71,0,110,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+72,0,65,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+72,0,118,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+72,0,73,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+72,0,97,48,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+73,0,72,46,17,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+74,0,19,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+74,331,120,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+74,0,121,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+74,0,75,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+75,0,76,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+75,0,77,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+76,0,75,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+77,0,75,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+77,0,78,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+77,0,66,45,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+78,0,77,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+79,0,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+80,0,42,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+80,0,80,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+80,0,80,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+80,0,81,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+81,0,80,44,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+82,0,44,46,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+83,0,57,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+83,0,84,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+83,0,85,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+84,0,57,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+84,0,83,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+84,0,114,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+85,0,83,43,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+86,0,52,29,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+87,0,45,29,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+88,0,25,30,56,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+88,0,20,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+88,0,92,44,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+89,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+90,0,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+91,0,95,45,73,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+91,0,72,30,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+92,0,88,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+92,0,93,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+92,0,94,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+93,0,92,46,27,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+94,0,92,46,27,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+94,309,095,45,3,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+94,0,611,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+95,0,94,46,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+95,0,92,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+95,0,91,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+96,0,66,44,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+97,0,66,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+97,0,72,44,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+97,0,98,29,45,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+98,0,97,46,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+98,0,99,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+99,0,98,50,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+99,0,301,43,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+99,0,100,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+100,0,301,44,23,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+100,0,99,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+100,159,302,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+100,0,33,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+100,0,101,47,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+101,0,100,46,71,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+102,0,103,30,74,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+103,0,102,29,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+103,0,104,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+103,114,618,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+103,115,619,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+103,0,64,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+104,0,103,29,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+104,0,105,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+105,0,104,29,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+105,0,103,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+106,0,64,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+106,0,65,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+106,0,108,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+107,0,131,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+107,0,132,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+107,0,133,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+107,0,134,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+107,0,135,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+107,0,136,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+107,0,137,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+107,0,138,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+107,0,139,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+107,0,61,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+108,95,556,45,46,47,48,49,50,29,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+108,10,106,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+108,0,626,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+109,0,69,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+109,0,113,45,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+110,0,71,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+110,0,20,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+111,0,70,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+111,40,050,30,39,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+111,50,053,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+111,0,45,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+112,0,131,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+112,0,132,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+112,0,133,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+112,0,134,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+112,0,135,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+112,0,136,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+112,0,137,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+112,0,138,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+112,0,139,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+112,0,140,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+113,0,109,46,11,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+114,0,84,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+115,0,116,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+116,0,115,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+116,0,593,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+117,0,118,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+117,233,660,41,42,69,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+117,332,661,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+117,0,303,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+117,332,021,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+117,0,596,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+118,0,72,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+118,0,117,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+119,0,69,45,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+119,0,653,43,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+120,0,69,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+120,0,74,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+121,0,74,43,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+121,0,653,45,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+122,0,123,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+122,233,660,41,42,69,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+122,0,303,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+122,0,596,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+122,0,124,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+122,0,126,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+122,0,129,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+123,0,122,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+123,0,124,43,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+123,0,126,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+123,0,129,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+124,0,123,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+124,0,125,47,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+124,0,128,48,37,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+124,0,126,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+124,0,129,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+125,0,124,46,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+125,0,126,45,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+125,0,127,43,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+126,0,125,46,23,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+126,0,124,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+126,0,610,30,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+127,0,125,44,11,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+127,0,124,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+127,0,126,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+128,0,124,45,29,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+128,0,129,46,30,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+128,0,126,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+129,0,128,44,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+129,0,124,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+129,0,130,43,19,40,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+129,0,126,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+130,0,129,44,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+130,0,124,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+130,0,126,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+131,0,107,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+131,0,132,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+131,0,133,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+131,0,134,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+131,0,135,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+131,0,136,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+131,0,137,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+131,0,138,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+131,0,139,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+131,0,112,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+132,0,107,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+132,0,131,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+132,0,133,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+132,0,134,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+132,0,135,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+132,0,136,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+132,0,137,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+132,0,138,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+132,0,139,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+132,0,112,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+133,0,107,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+133,0,131,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+133,0,132,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+133,0,134,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+133,0,135,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+133,0,136,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+133,0,137,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+133,0,138,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+133,0,139,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+133,0,112,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+134,0,107,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+134,0,131,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+134,0,132,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+134,0,133,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+134,0,135,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+134,0,136,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+134,0,137,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+134,0,138,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+134,0,139,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+134,0,112,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+135,0,107,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+135,0,131,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+135,0,132,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+135,0,133,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+135,0,134,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+135,0,136,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+135,0,137,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+135,0,138,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+135,0,139,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+135,0,112,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+136,0,107,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+136,0,131,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+136,0,132,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+136,0,133,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+136,0,134,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+136,0,135,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+136,0,137,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+136,0,138,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+136,0,139,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+136,0,112,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+137,0,107,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+137,0,131,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+137,0,132,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+137,0,133,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+137,0,134,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+137,0,135,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+137,0,136,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+137,0,138,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+137,0,139,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+137,0,112,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+138,0,107,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+138,0,131,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+138,0,132,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+138,0,133,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+138,0,134,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+138,0,135,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+138,0,136,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+138,0,137,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+138,0,139,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+138,0,112,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+139,0,107,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+139,0,131,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+139,0,132,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+139,0,133,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+139,0,134,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+139,0,135,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+139,0,136,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+139,0,137,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+139,0,138,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+139,0,112,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+140,0,112,45,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
+-1\r
+4\r
+2,ROAD\r
+2,HILL\r
+3,ENTER\r
+4,UPSTR\r
+5,DNSTR\r
+6,FORES\r
+7,FORWA\r
+7,CONTI\r
+7,ONWAR\r
+8,BACK\r
+8,RETUR\r
+8,RETRE\r
+9,VALLE\r
+10,STAIR\r
+11,OUT\r
+11,OUTSI\r
+11,EXIT\r
+11,LEAVE\r
+12,BUILD\r
+12,HOUSE\r
+13,GULLY\r
+14,STREA\r
+15,ROCK\r
+16,BED\r
+17,CRAWL\r
+18,COBBL\r
+19,INWAR\r
+19,INSID\r
+19,IN\r
+20,SURFA\r
+21,NULL\r
+21,NOWHE\r
+22,DARK\r
+23,PASSA\r
+23,TUNNE\r
+24,LOW\r
+25,CANYO\r
+26,AWKWA\r
+27,GIANT\r
+28,VIEW\r
+29,UPWAR\r
+29,UP\r
+29,U\r
+29,ABOVE\r
+29,ASCEN\r
+30,D\r
+30,DOWN\r
+30,DESCE\r
+31,PIT\r
+32,OUTDO\r
+33,CRACK\r
+34,STEPS\r
+35,DOME\r
+36,LEFT\r
+37,RIGHT\r
+38,HALL\r
+39,JUMP\r
+40,BARRE\r
+41,OVER\r
+42,ACROS\r
+43,EAST\r
+43,E\r
+44,WEST\r
+44,W\r
+45,NORTH\r
+45,N\r
+46,SOUTH\r
+46,S\r
+47,NE\r
+48,SE\r
+49,SW\r
+50,NW\r
+51,DEBRI\r
+52,HOLE\r
+53,WALL\r
+54,BROKE\r
+55,Y2\r
+56,CLIMB\r
+57,LOOK\r
+57,EXAMI\r
+57,TOUCH\r
+57,DESCR\r
+58,FLOOR\r
+59,ROOM\r
+60,SLIT\r
+61,SLAB\r
+62,XYZZY\r
+63,DEPRE\r
+64,ENTRA\r
+65,PLUGH\r
+66,SECRE\r
+67,CAVE\r
+69,CROSS\r
+70,BEDQU\r
+71,PLOVE\r
+72,ORIEN\r
+73,CAVER\r
+74,SHELL\r
+75,RESER\r
+76,MAIN\r
+76,OFFIC\r
+77,FORK\r
+1001,KEYS\r
+1001,KEY\r
+1002,LAMP\r
+1002,HEADL\r
+1002,LANTE\r
+1003,GRATE\r
+1004,CAGE\r
+1005,ROD\r
+1006,ROD     (MUST BE NEXT OBJECT AFTER "REAL" ROD)\r
+1007,STEPS\r
+1008,BIRD\r
+1009,DOOR\r
+1010,PILLO\r
+1010,VELVE\r
+1011,SNAKE\r
+1012,FISSU\r
+1013,TABLE\r
+1014,CLAM\r
+1015,OYSTE\r
+1016,MAGAZ\r
+1016,ISSUE\r
+1016,SPELU\r
+1016,"SPEL\r
+1017,DWARF\r
+1018,KNIFE\r
+1018,KNIVE\r
+1019,FOOD\r
+1019,RATIO\r
+1020,BOTTL\r
+1020,JAR\r
+1021,WATER\r
+1021,H2O\r
+1022,OIL\r
+1023,MIRRO\r
+1024,PLANT\r
+1024,BEANS\r
+1025,PLANT,(MUST BE NEXT OBJECT AFTER "REAL" PLANT)\r
+1026,STALA\r
+1027,SHADO\r
+1027,FIGUR\r
+1028,AXE\r
+1029,DRAWI\r
+1030,PIRAT\r
+1031,DRAGO\r
+1032,CHASM\r
+1033,TROLL\r
+1034,TROLL,(MUST BE NEXT OBJECT AFTER "REAL" TROLL)\r
+1035,BEAR\r
+1036,MESSA\r
+1037,VOLCA\r
+1037,GEYSE,(SAME AS VOLCANO)\r
+1038,MACHI\r
+1038,VENDI\r
+1039,BATTE\r
+1040,CARPE\r
+1040,MOSS\r
+1050,GOLD\r
+1050,NUGGE\r
+1051,DIAMO\r
+1052,SILVE\r
+1052,BARS\r
+1053,JEWEL\r
+1054,COINS\r
+1055,CHEST\r
+1055,BOX\r
+1055,TREAS\r
+1056,EGGS\r
+1056,EGG\r
+1056,NEST\r
+1057,TRIDE\r
+1058,VASE\r
+1058,MING\r
+1058,SHARD\r
+1058,POTTE\r
+1059,EMERA\r
+1060,PLATI\r
+1060,PYRAM\r
+1061,PEARL\r
+1062,RUG\r
+1062,PERSI\r
+1063,SPICE\r
+1064,CHAIN\r
+2001,CARRY\r
+2001,TAKE\r
+2001,KEEP\r
+2001,CATCH\r
+2001,STEAL\r
+2001,CAPTU\r
+2001,GET\r
+2001,TOTE\r
+2002,DROP\r
+2002,RELEA\r
+2002,FREE\r
+2002,DISCA\r
+2002,DUMP\r
+2003,SAY\r
+2003,CHANT\r
+2003,SING\r
+2003,UTTER\r
+2003,MUMBL\r
+2004,UNLOC\r
+2004,OPEN\r
+2005,NOTHI\r
+2006,LOCK\r
+2006,CLOSE\r
+2007,LIGHT\r
+2007,ON\r
+2008,EXTIN\r
+2008,OFF\r
+2009,WAVE\r
+2009,SHAKE\r
+2009,SWING\r
+2010,CALM\r
+2010,PLACA\r
+2010,TAME\r
+2011,WALK\r
+2011,RUN\r
+2011,TRAVE\r
+2011,GO\r
+2011,PROCE\r
+2011,CONTI\r
+2011,EXPLO\r
+2011,GOTO\r
+2011,FOLLO\r
+2011,TURN\r
+2012,ATTAC\r
+2012,KILL\r
+2012,FIGHT\r
+2012,HIT\r
+2012,STRIK\r
+2013,POUR\r
+2014,EAT\r
+2014,DEVOU\r
+2015,DRINK\r
+2016,RUB\r
+2017,THROW\r
+2017,TOSS\r
+2018,QUIT\r
+2019,FIND\r
+2019,WHERE\r
+2020,INVEN\r
+2021,FEED\r
+2022,FILL\r
+2023,BLAST\r
+2023,DETON\r
+2023,IGNIT\r
+2023,BLOWU\r
+2024,SCORE\r
+2025,FEE\r
+2025,FIE\r
+2025,FOE\r
+2025,FOO\r
+2025,FUM\r
+2026,BRIEF\r
+2027,READ\r
+2027,PERUS\r
+2028,BREAK\r
+2028,SHATT\r
+2028,SMASH\r
+2029,WAKE\r
+2029,DISTU\r
+2030,SUSPE\r
+2030,PAUSE\r
+2030,SAVE\r
+2031,HOURS\r
+2032,RESTO\r
+2032,RESUM\r
+3001,FEE\r
+3002,FIE\r
+3003,FOE\r
+3004,FOO\r
+3005,FUM\r
+3050,SESAM\r
+3050,OPENS\r
+3050,ABRA\r
+3050,ABRAC\r
+3050,SHAZA\r
+3050,HOCUS\r
+3050,POCUS\r
+3051,HELP\r
+3051,?\r
+3064,TREE\r
+3064,TREES\r
+3066,DIG\r
+3066,EXCAV\r
+3068,LOST\r
+3069,MIST\r
+3079,SHIT,VARIOUS BAD WORDS.\r
+3079,DAMN\r
+3079,FUCK\r
+3139,STOP\r
+3142,INFO\r
+3147,SWIM\r
+-1\r
+5\r
+1,S]ET OF [K]EYS\r
+000,T]HERE ARE SOME KEYS ON THE GROUND HERE.\r
+2,B]RASS [L]ANTERN\r
+000,T]HERE IS A SHINY BRASS LAMP NEARBY.\r
+100,T]HERE IS A LAMP SHINING NEARBY.\r
+3,*GRATE\r
+000,T]HE GRATE IS LOCKED.\r
+100,T]HE GRATE IS OPEN.\r
+4,W]ICKER [C]AGE\r
+000,T]HERE IS A SMALL WICKER CAGE DISCARDED NEARBY.\r
+5,B]LACK [R]OD\r
+000,A] THREE FOOT BLACK ROD WITH A RUSTY STAR ON AN END LIES NEARBY.\r
+6,B]LACK [R]OD\r
+000,A] THREE FOOT BLACK ROD WITH A RUSTY MARK ON AN END LIES NEARBY.\r
+7,*STEPS\r
+000,R]OUGH STONE STEPS LEAD DOWN THE PIT.\r
+100,R]OUGH STONE STEPS LEAD UP THE DOME.\r
+8,L]ITTLE BIRD IN CAGE\r
+000,A] CHEERFUL LITTLE BIRD IS SITTING HERE SINGING.\r
+100,T]HERE IS A LITTLE BIRD IN THE CAGE.\r
+9,*RUSTY DOOR\r
+000,T]HE WAY NORTH IS BARRED BY A MASSIVE, RUSTY, IRON DOOR.\r
+100,T]HE WAY NORTH LEADS THROUGH A MASSIVE, RUSTY, IRON DOOR.\r
+10,V]ELVET [P]ILLOW\r
+000,A] SMALL VELVET PILLOW LIES ON THE FLOOR.\r
+11,*SNAKE\r
+000,A] HUGE GREEN FIERCE SNAKE BARS THE WAY!\r
+100,>$<  (CHASED AWAY)\r
+12,*FISSURE\r
+000,>$<\r
+100,A] CRYSTAL BRIDGE NOW SPANS THE FISSURE.\r
+200,T]HE CRYSTAL BRIDGE HAS VANISHED!\r
+13,*STONE TABLET\r
+000,A] MASSIVE STONE TABLET IMBEDDED IN THE WALL READS:\r
+000,"C]ONGRATULATIONS ON BRINGING LIGHT INTO THE [D]ARK [R]OOM!"\r
+14,G]IANT CLAM  >[GRUNT!<\r
+000,T]HERE IS AN ENORMOUS CLAM HERE WITH ITS SHELL TIGHTLY CLOSED.\r
+15,G]IANT OYSTER  >[GROAN!<\r
+000,T]HERE IS AN ENORMOUS OYSTER HERE WITH ITS SHELL TIGHTLY CLOSED.\r
+100,I]NTERESTING.  [T]HERE SEEMS TO BE SOMETHING WRITTEN ON THE UNDERSIDE OF\r
+100,]THE OYSTER.\r
+16,"S]PELUNKER [T]ODAY"\r
+000,T]HERE ARE A FEW RECENT ISSUES OF "[S]PELUNKER [T]ODAY" MAGAZINE HERE.\r
+19,T]ASTY FOOD\r
+000,T]HERE IS FOOD HERE.\r
+20,S]MALL BOTTLE\r
+000,T]HERE IS A BOTTLE OF WATER HERE.\r
+100,T]HERE IS AN EMPTY BOTTLE HERE.\r
+200,T]HERE IS A BOTTLE OF OIL HERE.\r
+21,W]ATER IN THE BOTTLE\r
+22,O]IL IN THE BOTTLE\r
+23,*MIRROR\r
+000,>$<\r
+24,*PLANT\r
+000,T]HERE IS A TINY LITTLE PLANT IN THE PIT, MURMURING "[W]ATER, WATER,..."\r
+100,T]HE PLANT SPURTS INTO FURIOUS GROWTH FOR A FEW SECONDS.\r
+200,T]HERE IS A 12-FOOT-TALL BEANSTALK STRETCHING UP OUT OF THE PIT,\r
+200,]BELLOWING "[W]ATER!! [W]ATER!!"\r
+300,T]HE PLANT GROWS EXPLOSIVELY, ALMOST FILLING THE BOTTOM OF THE PIT.\r
+400,T]HERE IS A GIGANTIC BEANSTALK STRETCHING ALL THE WAY UP TO THE HOLE.\r
+500,Y]OU'VE OVER-WATERED THE PLANT!  [I]T'S SHRIVELING UP!  [I]T'S, IT'S...\r
+25,*PHONY PLANT (SEEN IN TWOPIT ROOM ONLY WHEN TALL ENOUGH)\r
+000,>$<\r
+100,T]HE TOP OF A 12-FOOT-TALL BEANSTALK IS POKING OUT OF THE WEST PIT.\r
+200,T]HERE IS A HUGE BEANSTALK GROWING OUT OF THE WEST PIT UP TO THE HOLE.\r
+26,*STALACTITE\r
+000,>$<\r
+27,*SHADOWY FIGURE\r
+000,T]HE SHADOWY FIGURE SEEMS TO BE TRYING TO ATTRACT YOUR ATTENTION.\r
+28,D]WARF'S AXE\r
+000,T]HERE IS A LITTLE AXE HERE.\r
+100,T]HERE IS A LITTLE AXE LYING BESIDE THE BEAR.\r
+29,*CAVE DRAWINGS\r
+000,>$<\r
+30,*PIRATE\r
+000,>$<\r
+31,*DRAGON\r
+000,A] HUGE GREEN FIERCE DRAGON BARS THE WAY!\r
+100,C]ONGRATULATIONS!  [Y]OU HAVE JUST VANQUISHED A DRAGON WITH YOUR BARE\r
+100,]HANDS!  ([U]NBELIEVABLE, ISN'T IT?)\r
+200,T]HE BODY OF A HUGE GREEN DEAD DRAGON IS LYING OFF TO ONE SIDE.\r
+32,*CHASM\r
+000,A] RICKETY WOODEN BRIDGE EXTENDS ACROSS THE CHASM, VANISHING INTO THE\r
+000,]MIST.  [A] SIGN POSTED ON THE BRIDGE READS, "[S]TOP! [P]AY TROLL!"\r
+100,T]HE WRECKAGE OF A BRIDGE (AND A DEAD BEAR) CAN BE SEEN AT THE BOTTOM\r
+100,]OF THE CHASM.\r
+33,*TROLL\r
+000,A] BURLY TROLL STANDS BY THE BRIDGE AND INSISTS YOU THROW HIM A\r
+000,]TREASURE BEFORE YOU MAY CROSS.\r
+100,T]HE TROLL STEPS OUT FROM BENEATH THE BRIDGE AND BLOCKS YOUR WAY.\r
+200,>$<  (CHASED AWAY)\r
+34,*PHONY TROLL\r
+000,T]HE TROLL IS NOWHERE TO BE SEEN.\r
+35,>$<  (BEAR USES RTEXT 141)\r
+000,T]HERE IS A FEROCIOUS CAVE BEAR EYING YOU FROM THE FAR END OF THE ROOM!\r
+100,T]HERE IS A GENTLE CAVE BEAR SITTING PLACIDLY IN ONE CORNER.\r
+200,T]HERE IS A CONTENTED-LOOKING BEAR WANDERING ABOUT NEARBY.\r
+300,>$<  (DEAD)\r
+36,*MESSAGE IN SECOND MAZE\r
+000,T]HERE IS A MESSAGE SCRAWLED IN THE DUST IN A FLOWERY SCRIPT, READING:\r
+000,"[T]HIS IS NOT THE MAZE WHERE THE PIRATE LEAVES HIS TREASURE CHEST."\r
+37,*VOLCANO AND/OR GEYSER\r
+000,>$<\r
+38,*VENDING MACHINE\r
+000,T]HERE IS A MASSIVE VENDING MACHINE HERE. [T]HE INSTRUCTIONS ON IT READ:\r
+000,"[D]ROP COINS HERE TO RECEIVE FRESH BATTERIES."\r
+39,B]ATTERIES\r
+000,T]HERE ARE FRESH BATTERIES HERE.\r
+100,]SOME WORN-OUT BATTERIES HAVE BEEN DISCARDED NEARBY.\r
+40,*CARPET AND/OR MOSS\r
+000,>$<\r
+50,L]ARGE GOLD NUGGET\r
+000,T]HERE IS A LARGE SPARKLING NUGGET OF GOLD HERE!\r
+51,S]EVERAL DIAMONDS\r
+000,T]HERE ARE DIAMONDS HERE!\r
+52,B]ARS OF SILVER\r
+000,T]HERE ARE BARS OF SILVER HERE!\r
+53,P]RECIOUS JEWELRY\r
+000,T]HERE IS PRECIOUS JEWELRY HERE!\r
+54,R]ARE COINS\r
+000,T]HERE ARE MANY COINS HERE!\r
+55,T]REASURE CHEST\r
+000,T]HE PIRATE'S TREASURE CHEST IS HERE!\r
+56,G]OLDEN EGGS\r
+000,T]HERE IS A LARGE NEST HERE, FULL OF GOLDEN EGGS!\r
+100,T]HE NEST OF GOLDEN EGGS HAS VANISHED!\r
+200,D]ONE!\r
+57,J]EWELED TRIDENT\r
+000,T]HERE IS A JEWEL-ENCRUSTED TRIDENT HERE!\r
+58,M]ING VASE\r
+000,T]HERE IS A DELICATE, PRECIOUS, [M]ING VASE HERE!\r
+100,T]HE VASE IS NOW RESTING, DELICATELY, ON A VELVET PILLOW.\r
+200,T]HE FLOOR IS LITTERED WITH WORTHLESS SHARDS OF POTTERY.\r
+300,T]HE MING VASE DROPS WITH A DELICATE CRASH.\r
+59,E]GG-SIZED EMERALD\r
+000,T]HERE IS AN EMERALD HERE THE SIZE OF A PLOVER'S EGG!\r
+60,P]LATINUM PYRAMID\r
+000,T]HERE IS A PLATINUM PYRAMID HERE, 8 INCHES ON A SIDE!\r
+61,G]LISTENING PEARL\r
+000,O]FF TO ONE SIDE LIES A GLISTENING PEARL!\r
+62,P]ERSIAN RUG\r
+000,T]HERE IS A PERSIAN RUG SPREAD OUT ON THE FLOOR!\r
+100,T]HE DRAGON IS SPRAWLED OUT ON A PERSIAN RUG!!\r
+63,R]ARE SPICES\r
+000,T]HERE ARE RARE SPICES HERE!\r
+64,G]OLDEN CHAIN\r
+000,T]HERE IS A GOLDEN CHAIN LYING IN A HEAP ON THE FLOOR!\r
+100,T]HE BEAR IS LOCKED TO THE WALL WITH A GOLDEN CHAIN!\r
+200,T]HERE IS A GOLDEN CHAIN LOCKED TO THE WALL!\r
+-1\r
+6\r
+1,S]OMEWHERE NEARBY IS [C]OLOSSAL [C]AVE, WHERE OTHERS HAVE FOUND FORTUNES\r
+1,]IN TREASURE AND GOLD,THOUGH IT IS RUMORED THAT SOME WHO ENTER ARE NEVER\r
+1,]SEEN AGAIN. [M]AGIC IS SAID TO WORK IN THE CAVE.  [I] WILL BE YOUR EYES\r
+1,]AND HANDS.  [D]IRECT ME WITH COMMANDS OF 1 OR 2 WORDS.  [I] SHOULD WARN\r
+1,]YOU THAT [I] LOOK AT ONLY THE FIRST FOUR LETTERS OF EACH WORD,SO YOU'LL\r
+1,]HAVE TO ENTER "NORTHEAST" AS "NE" TO DISTINGUISH IT FROM "NORTH".\r
+1,(S]HOULD YOU GET STUCK, TYPE "HELP" FOR SOME GENERAL HINTS.  [F]OR\r
+1,]INFORMATION ON HOW TO END YOUR ADVENTURE, ETC., TYPE "[INFO".)\r
+1,      - - -\r
+1,T]HIS PROGRAM WAS ORIGINALLY DEVELOPED BY [W]ILLIE [C]ROWTHER. [M]OST OF\r
+1,]THE FEATURES OF THE CURRENT PROGRAM WERE ADDED BY [D]ON [W]OODS.\r
+1,T]HIS VERSION, FOR THE [PDP]-8, WAS DONE BY [D]ICK [M]URPHY. IT IS\r
+1,]BASED ON A VERSION FOR [RT]-11 DONE BY [B]OB [S]UPNIK.\r
+2,A] LITTLE DWARF WITH A BIG KNIFE BLOCKS YOUR WAY.\r
+3,A] LITTLE DWARF JUST WALKED AROUND A CORNER, SAW YOU, THREW A LITTLE\r
+3,]AXE AT YOU WHICH MISSED, CURSED, AND RAN AWAY.\r
+4,T]HERE IS A THREATENING LITTLE DWARF IN THE ROOM WITH YOU!\r
+5,O]NE SHARP NASTY KNIFE IS THROWN AT YOU!\r
+6,N]ONE OF THEM HIT YOU!\r
+7,O]NE OF THEM GETS YOU!\r
+8,A] HOLLOW VOICE SAYS "[PLUGH".\r
+9,T]HERE IS NO WAY TO GO THAT DIRECTION.\r
+10,I] AM UNSURE HOW YOU ARE FACING. [U]SE COMPASS POINTS OR NEARBY OBJECTS.\r
+11,I] DON'T KNOW "[IN]" FROM "[OUT]" HERE.  [U]SE COMPASS POINTS OR NAME \r
+11,]SOMETHING IN THE GENERAL DIRECTION YOU WANT TO GO.\r
+12,I] DON'T KNOW HOW TO APPLY THAT WORD HERE.\r
+13,I] DON'T UNDERSTAND THAT!\r
+14,I]'M GAME.  [W]OULD YOU CARE TO EXPLAIN HOW?\r
+15,S]ORRY, BUT [I] AM NOT ALLOWED TO GIVE MORE DETAIL.  [I] WILL REPEAT THE\r
+15,]LONG DESCRIPTION OF YOUR LOCATION.\r
+16,I]T IS NOW PITCH DARK. [I]F YOU PROCEED YOU WILL LIKELY FALL INTO A PIT.\r
+17,I]F YOU PREFER, SIMPLY TYPE "[W]" RATHER THAN "[WEST".\r
+18,A]RE YOU TRYING TO CATCH THE BIRD?\r
+19,T]HE BIRD IS FRIGHTENED RIGHT NOW AND YOU CANNOT CATCH IT NO MATTER\r
+19,]WHAT YOU TRY.  [P]ERHAPS YOU MIGHT TRY LATER.\r
+20,A]RE YOU TRYING TO SOMEHOW DEAL WITH THE SNAKE?\r
+21,Y]OU CAN'T KILL THE SNAKE, OR DRIVE IT AWAY, OR AVOID IT, OR ANYTHING\r
+21,L]IKE THAT. [T]HERE IS A WAY TO GET BY, BUT YOU DON'T HAVE THE NECESSARY\r
+21,]RESOURCES RIGHT NOW.\r
+22,D]O YOU REALLY WANT TO QUIT NOW?\r
+23,Y]OU FELL INTO A PIT AND BROKE EVERY BONE IN YOUR BODY!\r
+24,Y]OU ARE ALREADY CARRYING IT!\r
+25,Y]OU CAN'T BE SERIOUS!\r
+26,T]HE BIRD WAS UNAFRAID WHEN YOU ENTERED, BUT AS YOU APPROACH IT BECOMES\r
+26,]DISTURBED AND YOU CANNOT CATCH IT.\r
+27,]YOU CAN CATCH THE BIRD, BUT YOU CANNOT CARRY IT.\r
+28,T]HERE IS NOTHING HERE WITH A LOCK!\r
+29,Y]OU AREN'T CARRYING IT!\r
+30,T]HE LITTLE BIRD ATTACKS THE GREEN SNAKE, AND IN AN ASTOUNDING FLURRY\r
+30,]DRIVES THE SNAKE AWAY.\r
+31,Y]OU HAVE NO KEYS!\r
+32,I]T HAS NO LOCK.\r
+33,I] DON'T KNOW HOW TO LOCK OR UNLOCK SUCH A THING.\r
+34,I]T WAS ALREADY LOCKED.\r
+35,T]HE GRATE IS NOW LOCKED.\r
+36,T]HE GRATE IS NOW UNLOCKED.\r
+37,I]T WAS ALREADY UNLOCKED.\r
+38,Y]OU HAVE NO SOURCE OF LIGHT.\r
+39,Y]OUR LAMP IS NOW ON.\r
+40,Y]OUR LAMP IS NOW OFF.\r
+41,T]HERE IS NO WAY TO GET PAST THE BEAR TO UNLOCK THE CHAIN, WHICH IS\r
+41,]PROBABLY JUST AS WELL.\r
+42,N]OTHING HAPPENS.\r
+43,W]HERE?\r
+44,T]HERE IS NOTHING HERE TO ATTACK.\r
+45,T]HE LITTLE BIRD IS NOW DEAD.  [I]TS BODY DISAPPEARS.\r
+46,A]TTACKING THE SNAKE BOTH DOESN'T WORK AND IS VERY DANGEROUS.\r
+47,Y]OU KILLED A LITTLE DWARF.\r
+48,Y]OU ATTACK A LITTLE DWARF, BUT HE DODGES OUT OF THE WAY.\r
+49,W]ITH WHAT?  [Y]OUR BARE HANDS?\r
+50,G]OOD TRY, BUT THAT IS AN OLD WORN-OUT MAGIC WORD.\r
+51,I] KNOW OF PLACES, ACTIONS, AND THINGS.  [M]OST OF MY VOCABULARY\r
+51,]DESCRIBES PLACES AND IS USED TO MOVE YOU THERE.  [T]O MOVE, TRY WORDS\r
+51,]LIKE ["FOREST", "DNSTREAM", "ENTER", "EAST", "WEST", "NORTH", "SOUTH",\r
+51,"UP", ]OR ["DOWN". I] KNOW ABOUT A FEW SPECIAL OBJECTS, LIKE A BLACK ROD\r
+51,]HIDDEN IN THE CAVE.  [T]HESE OBJECTS CAN BE MANIPULATED USING SOME OF\r
+51,]THE ACTION WORDS THAT [I] KNOW.[U]SUALLY YOU WILL NEED TO GIVE BOTH THE\r
+51,]OBJECT AND ACTION WORDS (IN EITHER ORDER), BUT SOMETIMES [I] CAN INFER\r
+51,]THE OBJECT FROM THE VERB ALONE.  [S]OME OBJECTS ALSO IMPLY VERBS; IN\r
+51,]PARTICULAR,"[INVENTORY]" IMPLIES "[TAKE INVENTORY]", WHICH CAUSES ME TO\r
+51,]GIVE YOU A LIST OF WHAT YOU'RE CARRYING.  [T]HE OBJECTS HAVE SIDE\r
+51,]EFFECTS; FOR INSTANCE, THE ROD SCARES THE BIRD. [U]SUALLY PEOPLE HAVING\r
+51,]TROUBLE MOVING JUST NEED TO TRY A FEW MORE WORDS.  [U]SUALLY PEOPLE\r
+51,]TRYING UNSUCCESSFULLY TO MANIPULATE AN OBJECT ARE ATTEMPTING SOMETHING\r
+51,]BEYOND THEIR (OR MY!) CAPABILITIES AND SHOULD TRY A COMPLETELY\r
+51,]DIFFERENT TACK.  [T]O SPEED THE GAME YOU CAN SOMETIMES MOVE LONG\r
+51,]DISTANCES WITH A SINGLE WORD.  [F]OR EXAMPLE, "[BUILDING]" USUALLY GETS\r
+51,]YOU TO THE BUILDING FROM ANYWHERE ABOVE GROUND EXCEPT WHEN LOST IN THE\r
+51,]FOREST.  [A]LSO, NOTE THAT CAVE PASSAGES TURN A LOT, AND THAT LEAVING A\r
+51,]ROOM TO THE NORTH DOES NOT GUARANTEE ENTERING THE NEXT FROM THE SOUTH.\r
+51,G]OOD LUCK!\r
+52,I]T MISSES!\r
+53,I]T GETS YOU!\r
+54,OK!\r
+55,Y]OU CAN'T UNLOCK THE KEYS.\r
+56,Y]OU HAVE CRAWLED AROUND IN SOME LITTLE HOLES AND WOUND UP BACK IN THE\r
+56,]MAIN PASSAGE.\r
+57,I] DON'T KNOW WHERE THE CAVE IS, BUT HEREABOUTS NO STREAM CAN RUN ON\r
+57,T]HE SURFACE FOR LONG.  [I] WOULD TRY THE STREAM.\r
+58,I] NEED MORE DETAILED INSTRUCTIONS TO DO THAT.\r
+59,I] CAN ONLY TELL YOU WHAT YOU SEE AS YOU MOVE ABOUT AND MANIPULATE\r
+59,]THINGS.  [I] CANNOT TELL YOU WHERE REMOTE THINGS ARE.\r
+60,I] DON'T KNOW THAT WORD.\r
+61,W]HAT?\r
+62,A]RE YOU TRYING TO GET INTO THE CAVE?\r
+63,T]HE GRATE IS VERY SOLID AND HAS A HARDENED STEEL LOCK.  [Y]OU CANNOT\r
+63,]ENTER WITHOUT A KEY, AND THERE ARE NO KEYS NEARBY.  [I] WOULD RECOMMEND\r
+63,]LOOKING ELSEWHERE FOR THE KEYS.\r
+64,T]HE TREES OF THE FOREST ARE LARGE HARDWOOD OAK AND MAPLE, WITH AN\r
+64,]OCCASIONAL GROVE OF PINE OR SPRUCE.  [T]HERE IS QUITE A BIT OF UNDER-\r
+64,]GROWTH, LARGELY BIRCH AND ASH SAPLINGS PLUS NONDESCRIPT BUSHES OF\r
+64,]VARIOUS SORTS.  [T]HIS TIME OF YEAR VISIBILITY IS QUITE RESTRICTED BY\r
+64,]ALL THE LEAVES, BUT TRAVEL IS QUITE EASY IF YOU DETOUR AROUND THE\r
+64,]SPRUCE AND BERRY BUSHES.\r
+65,W]ELCOME TO [A]DVENTURE!!  [W]OULD YOU LIKE INSTRUCTIONS?\r
+66,D]IGGING WITHOUT A SHOVEL IS QUITE IMPRACTICAL.  [E]VEN WITH A SHOVEL\r
+66,]PROGRESS IS UNLIKELY.\r
+67,B]LASTING REQUIRES DYNAMITE.\r
+68,I]'M AS CONFUSED AS YOU ARE.\r
+69,M]IST IS A WHITE VAPOR, USUALLY WATER, SEEN FROM TIME TO TIME IN\r
+69,]CAVERNS.  [I]T CAN BE FOUND ANYWHERE BUT IS FREQUENTLY A SIGN OF A DEEP\r
+69,]PIT LEADING DOWN TO WATER.\r
+70,Y]OUR FEET ARE NOW WET.\r
+71,I] THINK [I] JUST LOST MY APPETITE.\r
+72,T]HANK YOU, IT WAS DELICIOUS!\r
+73,Y]OU HAVE TAKEN A DRINK FROM THE STREAM.  [T]HE WATER TASTES STRONGLY OF\r
+73,]MINERALS, BUT IS NOT UNPLEASANT.  [I]T IS EXTREMELY COLD.\r
+74,T]HE BOTTLE OF WATER IS NOW EMPTY.\r
+75,R]UBBING THE ELECTRIC LAMP IS NOT PARTICULARLY REWARDING.  [A]NYWAY,\r
+75,]NOTHING EXCITING HAPPENS.\r
+76,P]ECULIAR.  [N]OTHING UNEXPECTED HAPPENS.\r
+77,Y]OUR BOTTLE IS EMPTY AND THE GROUND IS WET.\r
+78,Y]OU CAN'T POUR THAT.\r
+79,W]ATCH IT!\r
+80,W]HICH WAY?\r
+81,O]H DEAR, YOU SEEM TO HAVE GOTTEN YOURSELF KILLED.  [I] MIGHT BE ABLE TO\r
+81,]HELP YOU OUT,BUT [I]'VE NEVER REALLY DONE THIS BEFORE. [D]O YOU WANT ME\r
+81,]TO TRY TO REINCARNATE YOU?\r
+82,A]LL RIGHT.  [B]UT DON'T BLAME ME IF SOMETHING GOES WR......\r
+82,                    --- POOF!! ---\r
+82,Y]OU ARE ENGULFED IN A CLOUD OF ORANGE SMOKE.  [C]OUGHING AND GASPING,\r
+82,]YOU EMERGE FROM THE SMOKE AND FIND....\r
+83,Y]OU CLUMSY OAF, YOU'VE DONE IT AGAIN!  [I] DON'T KNOW HOW LONG [I] CAN\r
+83,]KEEP THIS UP.  [D]O YOU WANT ME TO TRY REINCARNATING YOU AGAIN?\r
+84,O]KAY, NOW WHERE DID [I] PUT MY ORANGE SMOKE?....  >P]OOF!<\r
+84,E]VERYTHING DISAPPEARS IN A DENSE CLOUD OF ORANGE SMOKE.\r
+85,N]OW YOU'VE REALLY DONE IT!  [I]'M OUT OF ORANGE SMOKE!  [Y]OU DON'T\r
+85,]EXPECT ME TO DO A DECENT REINCARNATION WITHOUT ANY ORANGE SMOKE,DO YOU?\r
+86,O]KAY, IF YOU'RE SO SMART, DO IT YOURSELF!  [I]'M LEAVING!\r
+90,>>> MESSAGES 81 THRU 90 ARE RESERVED FOR "OBITUARIES". <<<\r
+91,S]ORRY, BUT [I] NO LONGER SEEM TO REMEMBER HOW IT WAS YOU GOT HERE.\r
+92,Y]OU CAN'T CARRY ANYTHING MORE.  [Y]OU'LL HAVE TO DROP SOMETHING FIRST.\r
+93,Y]OU CAN'T GO THROUGH A LOCKED STEEL GRATE!\r
+94,I] BELIEVE WHAT YOU WANT IS RIGHT HERE WITH YOU.\r
+95,Y]OU DON'T FIT THROUGH A TWO-INCH SLIT!\r
+96,I] RESPECTFULLY SUGGEST YOU GO ACROSS THE BRIDGE INSTEAD OF JUMPING.\r
+97,T]HERE IS NO WAY ACROSS THE FISSURE.\r
+98,Y]OU'RE NOT CARRYING ANYTHING.\r
+99,Y]OU ARE CURRENTLY HOLDING THE FOLLOWING:\r
+100,I]T'S NOT HUNGRY (IT'S MERELY PININ' FOR THE FJORDS).  [B]ESIDES, YOU\r
+100,]HAVE NO BIRD SEED.\r
+101,T]HE SNAKE HAS NOW DEVOURED YOUR BIRD.\r
+102,T]HERE'S NOTHING HERE IT WANTS TO EAT (EXCEPT PERHAPS YOU).\r
+103,Y]OU FOOL, DWARVES EAT ONLY COAL!  [N]OW YOU'VE MADE HIM [REALLY] MAD!!\r
+104,Y]OU HAVE NOTHING IN WHICH TO CARRY IT.\r
+105,Y]OUR BOTTLE IS ALREADY FULL.\r
+106,T]HERE IS NOTHING HERE WITH WHICH TO FILL THE BOTTLE.\r
+107,Y]OUR BOTTLE IS NOW FULL OF WATER.\r
+108,Y]OUR BOTTLE IS NOW FULL OF OIL.\r
+109,Y]OU CAN'T FILL THAT.\r
+110,D]ON'T BE RIDICULOUS!\r
+111,T]HE DOOR IS EXTREMELY RUSTY AND REFUSES TO OPEN.\r
+112,T]HE PLANT INDIGNANTLY SHAKES THE OIL OFF ITS LEAVES AND ASKS,"[W]ATER?"\r
+113,T]HE HINGES ARE QUITE THOROUGHLY RUSTED NOW AND WON'T BUDGE.\r
+114,T]HE OIL HAS FREED UP THE HINGES SO THAT THE DOOR WILL NOW MOVE,\r
+114,]ALTHOUGH IT REQUIRES SOME EFFORT.\r
+115,T]HE PLANT HAS EXCEPTIONALLY DEEP ROOTS AND CANNOT BE PULLED FREE.\r
+116,T]HE DWARVES' KNIVES VANISH AS THEY STRIKE THE WALLS OF THE CAVE.\r
+117,S]OMETHING YOU'RE CARRYING WON'T FIT THROUGH THE TUNNEL WITH YOU.\r
+117,Y]OU'D BEST TAKE INVENTORY AND DROP SOMETHING.\r
+118,Y]OU CAN'T FIT THIS FIVE-FOOT CLAM THROUGH THAT LITTLE PASSAGE!\r
+119,Y]OU CAN'T FIT THIS FIVE-FOOT OYSTER THROUGH THAT LITTLE PASSAGE!\r
+120,I] ADVISE YOU TO PUT DOWN THE CLAM BEFORE OPENING IT.  >[S]TRAIN!<\r
+121,I] ADVISE YOU TO PUT DOWN THE OYSTER BEFORE OPENING IT.  >[W]RENCH!<\r
+122,Y]OU DON'T HAVE ANYTHING STRONG ENOUGH TO OPEN THE CLAM.\r
+123,Y]OU DON'T HAVE ANYTHING STRONG ENOUGH TO OPEN THE OYSTER.\r
+124,A] GLISTENING PEARL FALLS OUT OF THE CLAM AND ROLLS AWAY.  [G]OODNESS,\r
+124,]THIS MUST REALLY BE AN OYSTER.  ([I] NEVER WAS VERY GOOD AT IDENTIFYING\r
+124,]BIVALVES.)  [W]HATEVER IT IS, IT HAS NOW SNAPPED SHUT AGAIN.\r
+125,T]HE OYSTER CREAKS OPEN, REVEALING NOTHING BUT OYSTER INSIDE.  [I]T\r
+125,]PROMPTLY SNAPS SHUT AGAIN.\r
+126,Y]OU HAVE CRAWLED AROUND IN SOME LITTLE HOLES AND FOUND YOUR WAY\r
+126,]BLOCKED BY A RECENT CAVE-IN.  [Y]OU ARE NOW BACK IN THE MAIN PASSAGE.\r
+127,T]HERE ARE FAINT RUSTLING NOISES FROM THE DARKNESS BEHIND YOU.\r
+128,O]UT FROM THE SHADOWS BEHIND YOU POUNCES A BEARDED PIRATE! "H]AR, HAR,"\r
+128,H]E CHORTLES, "[I]'LL JUST TAKE ALL THIS BOOTY AND HIDE IT AWAY WITH ME\r
+128,]CHEST DEEP IN THE MAZE!"  [H]E SNATCHES YOUR TREASURE AND VANISHES INTO\r
+128,]THE GLOOM.\r
+129,A] SEPULCHRAL VOICE REVERBERATING THROUGH THE CAVE SAYS, "[C]AVE CLOSING\r
+129,]SOON.  [A]LL ADVENTURERS EXIT IMMEDIATELY THROUGH [M]AIN [O]FFICE."\r
+130,A] MYSTERIOUS RECORDED VOICE GROANS INTO LIFE AND ANNOUNCES:\r
+130,   "T]HIS EXIT IS CLOSED.  [P]LEASE LEAVE VIA [M]AIN [O]FFICE."\r
+131,I]T LOOKS AS THOUGH YOU'RE DEAD.  [W]ELL, SEEING AS HOW IT'S SO CLOSE TO\r
+131,]CLOSING TIME ANYWAY, [I] THINK WE'LL JUST CALL IT A DAY.\r
+132,T]HE SEPULCHRAL VOICE ENTONES, "T]HE CAVE IS NOW CLOSED."  [A]S THE\r
+132,]ECHOES FADE, THERE IS A BLINDING FLASH OF LIGHT (AND A SMALL PUFF OF\r
+132,]ORANGE SMOKE). . . .[A]S YOUR EYES REFOCUS, YOU LOOK AROUND AND FIND...\r
+133,T]HERE IS A LOUD EXPLOSION, AND A TWENTY-FOOT HOLE APPEARS IN THE FAR\r
+133,]WALL, BURYING THE DWARVES IN THE RUBBLE.  [Y]OU MARCH THROUGH THE HOLE\r
+133,]AND FIND YOURSELF IN THE [M]AIN [O]FFICE, WHERE A CHEERING BAND OF\r
+133,]FRIENDLY ELVES CARRY THE CONQUERING ADVENTURER OFF INTO THE SUNSET.\r
+134,T]HERE IS A LOUD EXPLOSION, AND A TWENTY-FOOT HOLE APPEARS IN THE FAR\r
+134,]WALL, BURYING THE SNAKES IN THE RUBBLE.  [A] RIVER OF MOLTEN LAVA POURS\r
+134,]IN THROUGH THE HOLE, DESTROYING EVERYTHING IN ITS PATH, INCLUDING YOU!\r
+135,T]HERE IS A LOUD EXPLOSION, AND YOU ARE SUDDENLY SPLASHED ACROSS THE\r
+135,]WALLS OF THE ROOM.\r
+136,T]HE RESULTING RUCKUS HAS AWAKENED THE DWARVES.  T]HERE ARE NOW SEVERAL\r
+136,]THREATENING LITTLE DWARVES IN THE ROOM WITH YOU!  [M]OST OF THEM THROW\r
+136,]KNIVES AT YOU!  [A]LL OF THEM GET YOU!\r
+137,O]H, LEAVE THE POOR UNHAPPY BIRD ALONE.\r
+138,I] DARESAY WHATEVER YOU WANT IS AROUND HERE SOMEWHERE.\r
+139,I] DON'T KNOW THE WORD "[STOP]".  [U]SE "[QUIT]" IF YOU WANT TO GIVE UP.\r
+140,Y]OU CAN'T GET THERE FROM HERE.\r
+141,Y]OU ARE BEING FOLLOWED BY A VERY LARGE, TAME BEAR.\r
+142,I]F YOU WANT TO END YOUR ADVENTURE EARLY, SAY "[QUIT]".  [T]O SUSPEND \r
+142,]YOUR ADVENTURE SUCH THAT YOU CAN CONTINUE LATER, SAY "[SUSPEND]" (OR\r
+142,"PAUSE" ]OR "[SAVE]").  [T]O SEE WHAT HOURS THE CAVE IS NORMALLY OPEN,\r
+142,]SAY "[HOURS]". [T]O SEE HOW WELL YOU'RE DOING, SAY "[SCORE]".  [T]O GET\r
+142,]FULL CREDIT FOR A TREASURE, YOU MUST HAVE LEFT IT SAFELY IN THE\r
+142,]BUILDING, THOUGH YOU GET PARTIAL CREDIT JUST FOR LOCATING IT.  [Y]OU\r
+142,]LOSE POINTS FOR GETTING KILLED, OR FOR QUITTING, THOUGH THE FORMER\r
+142,]COSTS YOU MORE.  [T]HERE ARE ALSO POINTS BASED ON HOW MUCH (IF ANY) OF\r
+142,]THE CAVE YOU'VE MANAGED TO EXPLORE; IN PARTICULAR, THERE IS A LARGE\r
+142,]BONUS JUST FOR GETTING IN (TO DISTINGUISH THE BEGINNERS FROM THE REST\r
+142,]OF THE PACK), AND THERE ARE OTHER WAYS TO DETERMINE WHETHER YOU'VE BEEN\r
+142,]THROUGH SOME OF THE MORE HARROWING SECTIONS.  [I]F YOU THINK YOU'VE\r
+142,]FOUND ALL THE TREASURES, JUST KEEP EXPLORING FOR A WHILE.  [I]F NOTHING\r
+142,]INTERESTING HAPPENS, YOU HAVEN'T FOUND THEM ALL YET.  [I]F SOMETHING\r
+142,]INTERESTING *DOES* HAPPEN,IT MEANS YOU'RE GETTING A BONUS AND HAVE AN\r
+142,]OPPORTUNITY TO GARNER MANY MORE POINTS IN THE MASTER'S SECTION.\r
+142,I] MAY OCCASIONALLY OFFER HINTS IF YOU SEEM TO BE HAVING TROUBLE.  [I]F\r
+142,I] DO, [I]'LL WARN YOU IN ADVANCE HOW MUCH IT WILL AFFECT YOUR SCORE TO\r
+142,]ACCEPT THE HINTS.  [F]INALLY, TO SAVE PAPER, YOU MAY SPECIFY ["BRIEF"],\r
+142,]WHICH TELLS ME NEVER TO REPEAT THE FULL DESCRIPTION OF A PLACE UNLESS\r
+142,]YOU EXPLICITLY ASK ME TO.\r
+143,D]O YOU INDEED WISH TO QUIT NOW?\r
+144,T]HERE IS NOTHING HERE WITH WHICH TO FILL THE VASE.\r
+145,T]HE SUDDEN CHANGE IN TEMPERATURE HAS DELICATELY SHATTERED THE VASE.\r
+146,I]T IS BEYOND YOUR POWER TO DO THAT.\r
+147,I] DON'T KNOW HOW.\r
+148,I]T IS TOO FAR UP FOR YOU TO REACH.\r
+149,Y]OU KILLED A LITTLE DWARF.  [T]HE BODY VANISHES IN A CLOUD OF GREASY\r
+149,]BLACK SMOKE.\r
+150,T]HE SHELL IS VERY STRONG AND IS IMPERVIOUS TO ATTACK.\r
+151,W]HAT'S THE MATTER, CAN'T YOU READ?  [N]OW YOU'D BEST START OVER.\r
+152,T]HE AXE BOUNCES HARMLESSLY OFF THE DRAGON'S THICK SCALES.\r
+153,T]HE DRAGON LOOKS RATHER NASTY.  [Y]OU'D BEST NOT TRY TO GET BY.\r
+154,T]HE LITTLE BIRD ATTACKS THE GREEN DRAGON, AND IN AN ASTOUNDING FLURRY\r
+154,]GETS BURNT TO A CINDER.  [T]HE ASHES BLOW AWAY.\r
+155,O]N WHAT?\r
+156,O]KAY, FROM NOW ON [I]'LL ONLY DESCRIBE A PLACE IN FULL THE FIRST TIME\r
+156,]YOU COME TO IT.  [T]O GET THE FULL DESCRIPTION, SAY "[LOOK".\r
+157,T]ROLLS ARE CLOSE RELATIVES WITH THE ROCKS AND HAVE SKIN AS TOUGH AS\r
+157,]THAT OF A RHINOCEROS.  [T]HE TROLL FENDS OFF YOUR BLOWS EFFORTLESSLY.\r
+158,T]HE TROLL DEFTLY CATCHES THE AXE, EXAMINES IT CAREFULLY, AND TOSSES IT\r
+158,]BACK, DECLARING, "[G]OOD WORKMANSHIP, BUT IT'S NOT VALUABLE ENOUGH."\r
+159,T]HE TROLL CATCHES YOUR TREASURE AND SCURRIES AWAY OUT OF SIGHT.\r
+160,T]HE TROLL REFUSES TO LET YOU CROSS.\r
+161,T]HERE IS NO LONGER ANY WAY ACROSS THE CHASM.\r
+162,J]UST AS YOU REACH THE OTHER SIDE, THE BRIDGE BUCKLES BENEATH THE\r
+162,]WEIGHT OF THE BEAR, WHICH WAS STILL FOLLOWING YOU AROUND.  [Y]OU\r
+162,]SCRABBLE DESPERATELY FOR SUPPORT, BUT AS THE BRIDGE COLLAPSES YOU\r
+162,]STUMBLE BACK AND FALL INTO THE CHASM.\r
+163,T]HE BEAR LUMBERS TOWARD THE TROLL, WHO LETS OUT A STARTLED SHRIEK AND\r
+163,]SCURRIES AWAY.  [T]HE BEAR SOON GIVES UP THE PURSUIT AND WANDERS BACK.\r
+164,T]HE AXE MISSES AND LANDS NEAR THE BEAR WHERE YOU CAN'T GET AT IT.\r
+165,W]ITH WHAT?  [Y]OUR BARE HANDS?  [A]GAINST *HIS* BEAR HANDS??\r
+166,T]HE BEAR IS CONFUSED; HE ONLY WANTS TO BE YOUR FRIEND.\r
+167,F]OR CRYING OUT LOUD, THE POOR THING IS ALREADY DEAD!\r
+168,T]HE BEAR EAGERLY WOLFS DOWN YOUR FOOD, AFTER WHICH HE SEEMS TO CALM\r
+168,]DOWN CONSIDERABLY AND EVEN BECOMES RATHER FRIENDLY.\r
+169,T]HE BEAR IS STILL CHAINED TO THE WALL.\r
+170,T]HE CHAIN IS STILL LOCKED.\r
+171,T]HE CHAIN IS NOW UNLOCKED.\r
+172,T]HE CHAIN IS NOW LOCKED.\r
+173,T]HERE IS NOTHING HERE TO WHICH THE CHAIN CAN BE LOCKED.\r
+174,T]HERE IS NOTHING HERE TO EAT.\r
+175,D]O YOU WANT THE HINT?\r
+176,D]O YOU NEED HELP GETTING OUT OF THE MAZE?\r
+177,Y]OU CAN MAKE THE PASSAGES LOOK LESS ALIKE BY DROPPING THINGS.\r
+178,A]RE YOU TRYING TO EXPLORE BEYOND THE [P]LOVER [R]OOM?\r
+179,T]HERE IS A WAY TO EXPLORE THAT REGION WITHOUT HAVING TO WORRY ABOUT\r
+179,]FALLING INTO A PIT.  [N]ONE OF THE OBJECTS AVAILABLE IS IMMEDIATELY\r
+179,]USEFUL IN DISCOVERING THE SECRET.\r
+180,D]O YOU NEED HELP GETTING OUT OF HERE?\r
+181,D]ON'T GO WEST.\r
+182,G]LUTTONY IS NOT ONE OF THE TROLL'S VICES.  [A]VARICE, HOWEVER, IS.\r
+183,Y]OUR LAMP IS GETTING DIM.  YOU'D BEST START WRAPPING THIS UP, UNLESS\r
+183,Y]OU CAN FIND SOME FRESH BATTERIES. [I] SEEM TO RECALL THERE'S A VENDING\r
+183,]MACHINE IN THE MAZE.  [B]RING SOME COINS WITH YOU.\r
+184,Y]OUR LAMP HAS RUN OUT OF POWER.\r
+185,T]HERE'S NOT MUCH POINT IN WANDERING AROUND OUT HERE, AND YOU CAN'T\r
+185,]EXPLORE THE CAVE WITHOUT A LAMP.  [S]O LET'S JUST CALL IT A DAY.\r
+186,T]HERE ARE FAINT RUSTLING NOISES FROM THE DARKNESS BEHIND YOU.  [A]S YOU\r
+186,]TURN TOWARD THEM, THE BEAM OF YOUR LAMP FALLS ACROSS A BEARDED PIRATE.\r
+186,H]E IS CARRYING A LARGE CHEST.  "[S]HIVER ME TIMBERS!" HE CRIES, "[I]'VE\r
+186,]BEEN SPOTTED!  [I]'D BEST HIE MESELF OFF TO THE MAZE TO HIDE ME CHEST!"\r
+186,W]ITH THAT, HE VANISHES INTO THE GLOOM.\r
+187,Y]OUR LAMP IS GETTING DIM.  [Y]OU'D BEST GO BACK FOR THOSE BATTERIES.\r
+188,Y]OUR LAMP IS GETTING DIM.  [I]'M TAKING THE LIBERTY OF REPLACING THE\r
+188,]BATTERIES.\r
+189,Y]OUR LAMP IS GETTING DIM, AND YOU'RE OUT OF SPARE BATTERIES.  [Y]OU'D\r
+189,]BEST START WRAPPING THIS UP.\r
+190,I]'M AFRAID THE MAGAZINE IS WRITTEN IN [D]WARVISH.\r
+191,"T]HIS IS NOT THE MAZE WHERE THE PIRATE LEAVES HIS TREASURE CHEST."\r
+192,H]MMM, THIS LOOKS LIKE A CLUE, WHICH MEANS IT'LL COST YOU 10 POINTS TO\r
+192,]READ IT.  [S]HOULD [I] GO AHEAD AND READ IT ANYWAY?\r
+193,I]T SAYS, "[T]HERE IS SOMETHING STRANGE ABOUT THIS PLACE, SUCH THAT ONE\r
+193,]OF THE WORDS [I]'VE ALWAYS KNOWN NOW HAS A NEW EFFECT."\r
+194,I]T SAYS THE SAME THING IT DID BEFORE.\r
+195,I]'M AFRAID [I] DON'T UNDERSTAND.\r
+196,"C]ONGRATULATIONS ON BRINGING LIGHT INTO THE [D]ARK [R]OOM!"\r
+197,Y]OU STRIKE THE MIRROR A RESOUNDING BLOW, WHEREUPON IT SHATTERS INTO A\r
+197,]MYRIAD TINY FRAGMENTS.\r
+198,Y]OU HAVE TAKEN THE VASE AND HURLED IT DELICATELY TO THE GROUND.\r
+199,Y]OU PROD THE NEAREST DWARF, WHO WAKES UP GRUMPILY, TAKES ONE LOOK AT\r
+199,Y]OU, CURSES, AND GRABS FOR HIS AXE.\r
+200,I]S THIS ACCEPTABLE?\r
+201,C]OLOSSAL [C]AVE IS [ALWAYS] OPEN, PROVIDED THIS IS YOUR [PDP-8.\r
+202,T]AKEN.\r
+-1\r
+7\r
+1,3\r
+2,3\r
+3,8,9\r
+4,10\r
+5,11\r
+6,0\r
+7,14,15\r
+8,13\r
+9,94,-1\r
+10,96\r
+11,19,-1\r
+12,17,27\r
+13,101,-1\r
+14,103\r
+15,0\r
+16,106\r
+17,0,-1\r
+18,0\r
+19,3\r
+20,3\r
+21,0\r
+22,0\r
+23,109,-1\r
+24,25,-1\r
+25,23,67\r
+26,111,-1\r
+27,35,110\r
+28,0\r
+29,97,-1\r
+30,0,-1\r
+31,119,121\r
+32,117,122\r
+33,117,122\r
+34,0,0\r
+35,130,-1\r
+36,0,-1\r
+37,126,-1\r
+38,140,-1\r
+39,0\r
+40,96,-1\r
+50,18\r
+51,27\r
+52,28\r
+53,29\r
+54,30\r
+55,0\r
+56,92\r
+57,95\r
+58,97\r
+59,100\r
+60,101\r
+61,0\r
+62,119,121\r
+63,127\r
+64,130,-1\r
+-1\r
+8\r
+1,24\r
+2,29\r
+3,0\r
+4,33\r
+5,0\r
+6,33\r
+7,38\r
+8,38\r
+9,42\r
+10,14\r
+11,43\r
+12,110\r
+13,29\r
+14,110\r
+15,73\r
+16,75\r
+17,29\r
+18,13\r
+19,59\r
+20,59\r
+21,174\r
+22,109\r
+23,67\r
+24,13\r
+25,147\r
+26,155\r
+27,195\r
+28,146\r
+29,110\r
+30,13\r
+31,13\r
+-1\r
+9\r
+0,1,2,3,4,5,6,7,8,9,10\r
+0,100,115,116,126\r
+2,1,3,4,7,38,95,113,24\r
+1,24\r
+3,46,47,48,54,56,58,82,85,86\r
+3,122,123,124,125,126,127,128,129,130\r
+4,8\r
+5,13\r
+6,19\r
+7,42,43,44,45,46,47,48,49,50,51\r
+7,52,53,54,55,56,80,81,82,86,87\r
+8,99,100,101\r
+9,108\r
+-1\r
+10\r
+35,Y]OU ARE OBVIOUSLY A [R]ANK [A]MATEUR.  [B]ETTER LUCK NEXT TIME.\r
+100,Y]OUR SCORE QUALIFIES YOU AS A [N]OVICE [C]LASS [A]DVENTURER.\r
+130,Y]OU HAVE ACHIEVED THE RATING: "[E]XPERIENCED [A]DVENTURER".\r
+200,Y]OU MAY NOW CONSIDER YOURSELF A "[S]EASONED [A]DVENTURER".\r
+250,Y]OU HAVE REACHED "[J]UNIOR [M]ASTER" STATUS.\r
+300,Y]OUR SCORE PUTS YOU IN [M]ASTER [A]DVENTURER CLASS [C.\r
+330,Y]OUR SCORE PUTS YOU IN [M]ASTER [A]DVENTURER CLASS [B.\r
+349,Y]OUR SCORE PUTS YOU IN [M]ASTER [A]DVENTURER CLASS [A.\r
+999,A]LL OF [A]DVENTUREDOM GIVES TRIBUTE TO YOU, [A]DVENTURER [G]RANDMASTER!\r
+-1\r
+11\r
+2,9999,10,0,0\r
+3,9999,5,0,0\r
+4,4,2,62,63\r
+5,5,2,18,19\r
+6,8,2,20,21\r
+7,75,4,176,177\r
+8,25,5,178,179\r
+9,20,3,180,181\r
+-1\r
+12\r
+-1\r
+0\r
diff --git a/sw/adventure/AMAIN.RA b/sw/adventure/AMAIN.RA
new file mode 100644 (file)
index 0000000..3b0d477
--- /dev/null
@@ -0,0 +1,6482 @@
+       EXTERN  SAVEGM\r
+       EXTERN  RSTRGM\r
+       EXTERN  A5TOA1\r
+       SECT    AMAIN\r
+       EXTERN  BITSET\r
+       EXTERN  BUG\r
+       EXTERN  CARRY\r
+       EXTERN  DROP\r
+       EXTERN  DSTROY\r
+       EXTERN  GETIN\r
+       EXTERN  IABS\r
+       EXTERN  JUGGLE\r
+       EXTERN  MAX0\r
+       EXTERN  MIN0\r
+       EXTERN  MOD\r
+       EXTERN  MOVE\r
+       EXTERN  SPEAK\r
+       EXTERN  PSPEAK\r
+       EXTERN  PUT\r
+       EXTERN  RND\r
+       EXTERN  RSPEAK\r
+       EXTERN  SPEAK\r
+       EXTERN  VOCAB\r
+       EXTERN  YES\r
+       EXTERN  #FIX\r
+       EXTERN  #WRITO\r
+       EXTERN  #RENDO\r
+       EXTERN  #RSVO\r
+       EXTERN  #UE\r
+       EXTERN  #EQ\r
+       EXTERN  #NE\r
+       EXTERN  PCT\r
+       EXTERN  GETWRD\r
+       EXTERN  PUTWRD\r
+       EXTERN  SIXOUT\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +AMAIN +\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+6\r
+ZERO,  F 0\r
+ONE,   F 1\r
+TWO,   F 2\r
+THREE, F 3\r
+MINUS1,        F -1\r
+IND,   0;0;0\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+HINT,  ORG     .+3\r
+KENT,  ORG     .+3\r
+KQ,    ORG     .+3\r
+K2,    ORG     .+3\r
+LL,    ORG     .+3\r
+N,     ORG     .+3\r
+PBOTL, ORG     .+3\r
+SPK,   ORG     .+3\r
+WD1,   ORG     .+3\r
+WD1X,  ORG     .+3\r
+WD2,   ORG     .+3\r
+WD2X,  ORG     .+3\r
+YEA,   ORG     .+3\r
+#TMP,  ORG     .+30\r
+\r
+#LIT,  F 4             / Literals. Too many cause ST overflow\r
+       F 5     /3\r
+       F 6     /6\r
+       F 8     /11\r
+       F 9     /14\r
+       F 10    /17\r
+       F 12    /22\r
+       F 15    /25\r
+       F 16    /30\r
+       F 17    /33\r
+       F 20    /36\r
+       F 22    /41\r
+       F 23    /44\r
+       F 24    /47\r
+       F 25    /52\r
+       F 26    /55\r
+       F 27    /60\r
+       F 30    /63\r
+       F 35    /66\r
+       F 37    /71\r
+       F 39    /74\r
+       F 40    /77\r
+       F 45    /102\r
+       F 49    /105\r
+       F 50    /110\r
+       F 54    /113\r
+       F 57    /116\r
+       F 58    /121\r
+       F 62    /124\r
+       F 65    /127\r
+       F 81    /132\r
+       F 29    /135\r
+       F 91    /140\r
+       F 92    /143\r
+       F 95    /146\r
+       F 99    /151\r
+       F 100   /154\r
+       F 105   /157\r
+       F 110   /162\r
+       F 115   /165\r
+       F 116   /170\r
+       F 117   /173\r
+       F 127   /176\r
+       F 128   /201\r
+       F 129   /204\r
+       F 130   /207\r
+       F 131   /212\r
+       F 132   /215\r
+       F 136   /220\r
+       F 140   /223\r
+       F 141   /226\r
+       F 143   /231\r
+       F 145   /234\r
+       F 162   /237\r
+       F 163   /242\r
+       F 165   /245\r
+       F 175   /250\r
+       F 184   /253\r
+       F 185   /256\r
+       F 186   /261\r
+       F 188   /264\r
+       F 192   /267\r
+       F 193   /272\r
+       F 197   /275\r
+       F 199   /300\r
+       F 201   /303\r
+       F 300   /306\r
+       F 500   /311\r
+       F 1000  /314\r
+       F 2500  /317\r
+       F 10000 /322\r
+       F 80    /325\r
+       F 60    /330\r
+       F 154   /333\r
+TENTE, TEXT +ENTE  +\r
+TPOUR, TEXT +POUR  +\r
+TWEST, TEXT +WEST  +\r
+TQUES, TEXT +?@    +\r
+TQDOT, TEXT +".@   +\r
+TYES,  TEXT +YES   +\r
+TYE,   TEXT +YE    +\r
+TY,    TEXT +Y     +\r
+\f      #LBL=.\r
+       COMMON  ABBCOM\r
+ABB,   ORG     .+702\r
+       COMMON  MISCOM\r
+LINUSE,        ORG     .+3\r
+TRVS,  ORG     .+3\r
+CLSSES,        ORG     .+3\r
+OLDLOC,        ORG     .+3\r
+LOC,   ORG     .+3\r
+CVAL,  ORG     .+44\r
+TK,    ORG     .+74\r
+NEWLOC,        ORG     .+3\r
+KEY,   ORG     .+702\r
+PLAC,  ORG     .+454\r
+FIXD,  ORG     .+454\r
+ACTSPK,        ORG     .+151\r
+COND,  ORG     .+702\r
+HINTS, ORG     .+360\r
+HNTMAX,        ORG     .+3\r
+PROP,  ORG     .+454\r
+TALLY, ORG     .+3\r
+TALLY2,        ORG     .+3\r
+HINTLC,        ORG     .+74\r
+CHLOC, ORG     .+3\r
+CHLOC2,        ORG     .+3\r
+DSEEN, ORG     .+22\r
+DFLAG, ORG     .+3\r
+DLOC,  ORG     .+22\r
+DALTLC,        ORG     .+3\r
+KEYS,  ORG     .+3\r
+LAMP,  ORG     .+3\r
+GRATE, ORG     .+3\r
+CAGE,  ORG     .+3\r
+ROD,   ORG     .+3\r
+ROD2,  ORG     .+3\r
+STEPS, ORG     .+3\r
+BIRD,  ORG     .+3\r
+DOOR,  ORG     .+3\r
+PILLOW,        ORG     .+3\r
+SNAKE, ORG     .+3\r
+FISSUR,        ORG     .+3\r
+TABLET,        ORG     .+3\r
+CLAM,  ORG     .+3\r
+OYSTER,        ORG     .+3\r
+MAGZIN,        ORG     .+3\r
+DWARF, ORG     .+3\r
+KNIFE, ORG     .+3\r
+FOOD,  ORG     .+3\r
+BOTTLE,        ORG     .+3\r
+WATER, ORG     .+3\r
+OIL,   ORG     .+3\r
+PLANT, ORG     .+3\r
+PLANT2,        ORG     .+3\r
+AXE,   ORG     .+3\r
+MIRROR,        ORG     .+3\r
+DRAGON,        ORG     .+3\r
+CHASM, ORG     .+3\r
+TROLL, ORG     .+3\r
+TROLL2,        ORG     .+3\r
+BEAR,  ORG     .+3\r
+MESSAG,        ORG     .+3\r
+VEND,  ORG     .+3\r
+BATTER,        ORG     .+3\r
+NUGGET,        ORG     .+3\r
+COINS, ORG     .+3\r
+CHEST, ORG     .+3\r
+EGGS,  ORG     .+3\r
+TRIDNT,        ORG     .+3\r
+VASE,  ORG     .+3\r
+EMRALD,        ORG     .+3\r
+PYRAM, ORG     .+3\r
+PEARL, ORG     .+3\r
+RUG,   ORG     .+3\r
+CHAIN, ORG     .+3\r
+BACK,  ORG     .+3\r
+LOOK,  ORG     .+3\r
+CAVE,  ORG     .+3\r
+NULL,  ORG     .+3\r
+ENTRNC,        ORG     .+3\r
+DPRSSN,        ORG     .+3\r
+SAY,   ORG     .+3\r
+LOCK,  ORG     .+3\r
+THROW, ORG     .+3\r
+FIND,  ORG     .+3\r
+INVENT,        ORG     .+3\r
+TURNS, ORG     .+3\r
+LMWARN,        ORG     .+3\r
+KNFLOC,        ORG     .+3\r
+DETAIL,        ORG     .+3\r
+ABBNUM,        ORG     .+3\r
+NUMDIE,        ORG     .+3\r
+MAXDIE,        ORG     .+3\r
+DKILL, ORG     .+3\r
+FOOBAR,        ORG     .+3\r
+BONUS, ORG     .+3\r
+CLOCK1,        ORG     .+3\r
+CLOCK2,        ORG     .+3\r
+CLOSNG,        ORG     .+3\r
+PANIC, ORG     .+3\r
+CLOSED,        ORG     .+3\r
+GAVEUP,        ORG     .+3\r
+SCORNG,        ORG     .+3\r
+ODLOC, ORG     .+22\r
+STREAM,        ORG     .+3\r
+SPICES,        ORG     .+3\r
+\r
+       COMMON  MISC2\r
+I,     ORG     .+3\r
+       ORG     .+3     /RTXSIZ\r
+       ORG     .+3     /CLSMAX\r
+       ORG     .+3     /LOCSIZ\r
+CTEXT, ORG     .+44\r
+STEXT, ORG     .+702\r
+LTEXT, ORG     .+702\r
+       ORG     .+3     /SECT\r
+TRAVEL, ORG    .+1356\r
+TRVCON, ORG    .+1356\r
+TRVLOC, ORG    .+1356\r
+TRVSIZ,        ORG     .+3\r
+       ORG     .+3     /TABNDX\r
+OBJ,   ORG     .+3\r
+J,     ORG     .+3\r
+K,     ORG     .+3\r
+VERB,  ORG     .+3\r
+HNTSIZ,        ORG     .+3\r
+MAXTRS,        ORG     .+3\r
+HINTED,        ORG     .+74\r
+       ORG     .+3     /HNTLOC\r
+KK,    ORG     .+3\r
+       COMMON  PLACOM\r
+ATLOC, ORG     .+702\r
+LINK,  ORG     .+1130\r
+PLACE, ORG     .+454\r
+FIXED, ORG     .+454\r
+HOLDNG,        ORG     .+3\r
+       COMMON  PTXCOM\r
+PTEXT, ORG     .+454\r
+       COMMON  TXTCOM\r
+RTEXT, ORG     .+1147\r
+       ORG     .+44    /LINES\r
+       ORG     .+3     /ASCVAR\r
+       ORG     .+3     /TXTLOC\r
+       ORG     .+234   /DATA\r
+       COMMON  MISC3\r
+ATTACK,        ORG     .+3\r
+DTOTAL,        ORG     .+3\r
+OLDLC2,        ORG     .+3\r
+LIMIT, ORG     .+3\r
+MXSCOR,        ORG     .+3\r
+SCORE, ORG     .+3\r
+STICK, ORG     .+3\r
+WZDARK,        ORG     .+3\r
+\f      ORG     #LBL\r
+#25000,\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       STARTF\r
+       JA      #STRT    /#G0001\r
+/\r
+/ Statement functions - called with JSA to save space\r
+/\r
+/      TOTING(OBJ)=PLACE(OBJ).EQ.-1\r
+TOTING,        0;0\r
+       ATX     3\r
+       FLDA    PLACE-3,3\r
+       FADD    ONE\r
+       JSA     #EQ\r
+       JA      TOTING\r
+\r
+/      AT(OBJ)=PLACE(OBJ).EQ.LOC.OR.FIXED(OBJ).EQ.LOC\r
+AT,    0;0\r
+       ATX     3\r
+       FLDA    PLACE-3,3\r
+       FSUB    LOC\r
+       JEQ     ISAT\r
+       FLDA    FIXED-3,3\r
+       FSUB    LOC\r
+ISAT,  JSA     #EQ\r
+       JA      AT\r
+\r
+/      FORCED(LOC)=COND(LOC).EQ.2\r
+FORCED,        0;0\r
+       ATX     3\r
+       FLDA    COND-3,3\r
+       FSUB    TWO\r
+       JSA     #EQ\r
+       JA      FORCED\r
+\r
+/      HERE(OBJ) = PLACE(OBJ).EQ.LOC .OR. TOTING(OBJ)\r
+HERE,  0;0\r
+       JSA     TOTING\r
+       JNE     ISHERE\r
+       FLDA    LOC\r
+       FSUB    PLACE-3,3\r
+       JEQ     ISHERE\r
+       FCLA\r
+       JA      HERE\r
+ISHERE,        FLDA    ONE\r
+       JA      HERE\r
+\r
+/ DARK(DUMMY)=MOD(COND(LOC),2).EQ.0.AND.(PROP(LAMP).EQ.0.OR.\r
+/ 1    .NOT.HERE(LAMP))\r
+\r
+DARK,  0;0\r
+/ .OR. .NOT. HERE(LAMP)\r
+       FLDA    LAMP\r
+       JSA     HERE\r
+       JEQ     NOTHR\r
+/ .OR. PROP(LAMP) EQ 0\r
+       FLDA    PROP-3,3\r
+       JNE     NOTDRK\r
+/ MOD(COND(LOC),2) .EQ. 0\r
+NOTHR, FLDA    LOC             / Either prop or not here\r
+       ATX     4\r
+       FLDA    COND-3,4        / COND(LOC)\r
+       FDIV    TWO             / Divided by two\r
+       JSA     #FIX\r
+       FMUL    TWO\r
+       FSTA    #TMP+14\r
+       FLDA    COND-3,4        / Get back COND(LOC)\r
+       FSUB    #TMP+14         / Now have mod\r
+       JNE     NOTDRK          / If not zero, not dark\r
+       FLDA    ONE\r
+       JA      DARK\r
+NOTDRK,        FCLA\r
+       JA      DARK\r
+\r
+/      LIQ2(PBOTL)=(1-PBOTL)*WATER+(PBOTL/2)*(WATER+OIL)\r
+LIQ2,  0;0\r
+       FLDA    ONE\r
+       FSUB    PBOTL           / 1 - PBOTL\r
+       FMUL    WATER           / (1-PBOTL)*WATER\r
+       FSTA    #TMP+14         / Store first term\r
+       FLDA    PBOTL\r
+       FDIV    TWO             / PBOTL/2\r
+       JSA     #FIX\r
+       FSTA    #TMP+6\r
+       FLDA    WATER\r
+       FADD    OIL             / WATER+OIL\r
+       FMUL    #TMP+6          / (PBOTL/2)*(WATER+OIL)\r
+       FADD    #TMP+14\r
+       JA      LIQ2            / Done\r
+\r
+/      LIQ(DUMMY)=LIQ2(MAX0(PROP(BOTTLE),-1-PROP(BOTTLE)))\r
+LIQ,   0;0\r
+/PROP(BOTTLE)\r
+       FLDA    BOTTLE\r
+       ATX     5\r
+       FLDA    PROP-3,5        / PROP(BOTTLE)\r
+       FSTA    PBOTL   \r
+       FLDA    MINUS1\r
+       FSUB    PBOTL           /-1-PROP(BOTTLE)\r
+       FSTA    #TMP+11\r
+       FLDA    PBOTL           / Find larger\r
+       FSUB    #TMP+11\r
+       JGT     .+4             / already larger, now PBOTL\r
+       FLDA    #TMP+11\r
+       FSTA    PBOTL           / This is PBOTL\r
+       JSA     LIQ2            / Call LIQ2 with this\r
+       JA      LIQ             / And return\r
+\r
+/      LIQLOC(LOC)=LIQ2((MOD(COND(LOC)/2*2,8)-5)*MOD(COND(LOC)/4,2)+1)\r
+LIQLOC,        0;0\r
+       FLDA    LOC             / Always called with LOC as arg\r
+       ATX     2\r
+       FLDA    COND-3,2        / COND(LOC)\r
+       FSTA    #TMP+11         / Save that\r
+       FDIV    TWO\r
+       JSA     #FIX            / COND(LOC)/2\r
+       FMUL    TWO             / COND(LOC)/2*2\r
+       FSTA    #TMP+17\r
+       FDIV    #LIT+11         / Modulo 8\r
+       JSA     #FIX\r
+       FMUL    #LIT+11\r
+       FSTA    #TMP+22\r
+       FLDA    #TMP+17\r
+       FSUB    #TMP+22         / MOD(...)\r
+       FSUB    #LIT+3          / -5.\r
+       FSTA    #TMP+25         / First Term\r
+       FLDA    #TMP+11         / COND(LOC)\r
+       FDIV    #LIT            / COND(LOC)/4\r
+       JSA     #FIX\r
+       FSTA    #TMP+17\r
+       FDIV    TWO             / Mod 2\r
+       JSA     #FIX\r
+       FMUL    TWO\r
+       FSTA    #TMP+22\r
+       FLDA    #TMP+17\r
+       FSUB    #TMP+22\r
+       FMUL    #TMP+25         / Multiply\r
+       FADD    ONE             / +1\r
+       FSTA    PBOTL           / Finally got the term\r
+       JSA     LIQ2            / Send to LIQ2\r
+       JA      LIQLOC\r
+/\r
+/ Read the property field - object passed in FAC\r
+/\r
+RDPROP,        0;0\r
+       ATX     7\r
+       FLDA    PROP-3,7\r
+       JA      RDPROP\r
+/\r
+/ Print a string\r
+/\r
+SPRINT,        0;0\r
+       LDX     0,1\r
+       STARTD\r
+       FLDA    SPRINT\r
+       FSTA    IND             /Indirect pointer\r
+       FLDA%   IND,1\r
+       FSTA    PTR\r
+       FLDA%   IND,1+\r
+       FSTA    CNT\r
+       FLDA    D4              /Add four to skip arguments\r
+       FADDM   SPRINT\r
+       STARTD\r
+       JSR     SIXOUT\r
+       JA      SPRINT\r
+PTR,   0;0\r
+       JA      ZERO\r
+CNT,   0;0\r
+D4,    0;4\r
+\f/\r
+/ Main routine entry point\r
+/\r
+#STRT, \r
+/1      I=RND(1)\r
+#1,    JSR     RND\r
+       JA      .+4\r
+       JA      ONE\r
+       FSTA    I\r
+/      HINTED(3)=YES(65,1,0)\r
+       JSR     YES\r
+       JA      .+10\r
+       JA      #LIT+127\r
+       JA      ONE\r
+       JA      ZERO\r
+       FSTA    HINTED+6                /HINTED(3)\r
+/      NEWLOC=1\r
+       FLDA    ONE\r
+       FSTA    NEWLOC\r
+/      LOC = NEWLOC\r
+       FSTA    LOC\r
+/      LIMIT=330\r
+       DECIMAL\r
+               LDX     330,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    LIMIT\r
+/      IF(HINTED(3))LIMIT=1000\r
+       FLDA    HINTED+6                /HINTED(3)\r
+       JEQ     #2\r
+       FLDA    #LIT+314\r
+       FSTA    LIMIT\r
+/2      IF(NEWLOC.GE.9.OR.NEWLOC.EQ.0.OR..NOT.CLOSNG)GOTO 71\r
+#2,    FLDA    NEWLOC\r
+       FSUB    #LIT+14\r
+       JGE     #71\r
+       FLDA    NEWLOC\r
+       JEQ     #71\r
+       FLDA    CLOSNG\r
+       JEQ     #71\r
+/      CALL RSPEAK(130)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+207\r
+/      NEWLOC=LOC\r
+       FLDA    LOC\r
+       FSTA    NEWLOC\r
+/      IF(.NOT.PANIC)CLOCK2=15\r
+       FLDA    PANIC\r
+       JNE     .+5\r
+       FLDA    #LIT+25\r
+       FSTA    CLOCK2\r
+/      PANIC=.TRUE.\r
+       FLDA    ONE\r
+       FSTA    PANIC\r
+/C\r
+/C SEE IF A DWARF HAS SEEN HIM AND HAS COME FROM WHERE HE WANTS TO GO. IF SO,\r
+/C THE DWARF'S BLOCKING HIS WAY. IF COMING FROM PLACE FORBIDDEN TO PIRATE\r
+/C (DWARVES ROOTED IN PLACE) LET HIM GET OUT (AND ATTACKED).\r
+/C\r
+/71     IF(NEWLOC.EQ.LOC.OR.FORCED(LOC).OR.BITSET(LOC,3))GOTO 74\r
+#71,   FLDA    NEWLOC\r
+       FSUB    LOC\r
+       JEQ     #74\r
+       FLDA    LOC\r
+       JSA     FORCED\r
+       JNE     #74\r
+       JSR     BITSET\r
+       JA      .+6\r
+       JA      LOC\r
+       JA      THREE\r
+       JNE     #74\r
+/      DO 73 I=1,5\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/      IF(ODLOC(I).NE.NEWLOC.OR..NOT.DSEEN(I))GOTO 73\r
+#G0047,        FLDA    I\r
+       ATX     7\r
+       FLDA    ODLOC-3,7\r
+       FSUB    NEWLOC\r
+       JNE     #73\r
+       FLDA    DSEEN-3,7\r
+       JEQ     #73\r
+/      NEWLOC=LOC\r
+       FLDA    LOC\r
+       FSTA    NEWLOC\r
+/      CALL RSPEAK(2)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      TWO\r
+/      GOTO 74\r
+       JA      #74\r
+/73     CONTINUE\r
+#73,   FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+3\r
+       JLE     #G0047\r
+\r
+#74,   FLDA    NEWLOC\r
+       FSTA    LOC\r
+/C\r
+/C DWARF STUFF. SEE EARLIER COMMENTS FOR DESCRIPTION OF VARIABLES. REMEMBER\r
+/C SIXTH DWARF IS PIRATE AND IS THUS VERY DIFFERENT EXCEPT FOR MOTION RULES.\r
+/C\r
+/C FIRST OFF, DON'T LET THE DWARVES FOLLOW HIM INTO A PIT OR A WALL. ACTIVATE\r
+/C THE WHOLE MESS THE FIRST TIME HE GETS AS FAR AS THE HALL OF MISTS (LOC 15).\r
+/C IF NEWLOC IS FORBIDDEN TO PIRATE (IN PARTICULAR, IF IT'S BEYOND THE TROLL\r
+/C BRIDGE), BYPASS DWARF STUFF. THAT WAY PIRATE CAN'T STEAL RETURN TOLL, AND\r
+/C DWARVES CAN'T MEET THE BEAR. ALSO MEANS DWARVES WON'T FOLLOW HIM INTO DEAD\r
+/C END IN MAZE, BUT C'EST LA VIE. THEY'LL WAIT FOR HIM OUTSIDE THE DEAD END.\r
+/C\r
+/      IF(LOC.EQ.0.OR.FORCED(LOC).OR.BITSET(NEWLOC,3))GOTO 2000\r
+/      FLDA    LOC\r
+       JEQ     #2000\r
+/      FLDA    LOC\r
+       JSA     FORCED\r
+       JNE     #2000\r
+       JSR     BITSET\r
+       JA      .+6\r
+       JA      NEWLOC\r
+       JA      THREE\r
+       JNE     #2000\r
+/      IF(DFLAG.NE.0)GOTO 6000\r
+       FLDA    DFLAG\r
+       JNE     #6000\r
+/      IF(LOC.GE.15)DFLAG=1\r
+       FLDA    LOC\r
+       FSUB    #LIT+25\r
+       JLT     #2000\r
+       FLDA    ONE\r
+       FSTA    DFLAG\r
+/      GOTO 2000\r
+       JA      #2000\r
+\r
+/C\r
+/C WHEN WE ENCOUNTER THE FIRST DWARF, WE KILL 0, 1, OR 2 OF THE 5 DWARVES. IF\r
+/C ANY OF THE SURVIVORS IS AT LOC, REPLACE HIM WITH THE ALTERNATE.\r
+/C\r
+/6000   IF(DFLAG.NE.1)GOTO 6010\r
+#6000, FLDA    DFLAG\r
+       FSUB    ONE\r
+       JNE     #6010\r
+/      IF(LOC.LT.15.OR.PCT(95))GOTO 2000\r
+       FLDA    LOC\r
+       FSUB    #LIT+25\r
+       JLT     #2000\r
+       JSR     PCT\r
+       JA      .+4\r
+       JA      #LIT+146\r
+       JNE     #2000\r
+/      DFLAG=2\r
+       FLDA    TWO\r
+       FSTA    DFLAG\r
+/      DO 6001 I=1,2\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/      J=1+RND(5)\r
+#G0051,        JSR     RND\r
+       JA      .+4\r
+       JA      #LIT+3\r
+       FADD    ONE\r
+       FSTA    J\r
+\r
+/6001   IF(PCT(50))DLOC(J)=0\r
+#6001, JSR     PCT\r
+       JA      .+4\r
+       JA      #LIT+110\r
+       JEQ     .+10\r
+       FLDA    J\r
+       ATX     7\r
+       FCLA\r
+       FSTA    DLOC-3,7\r
+       FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    TWO\r
+       JLE     #G0051\r
+/      DO 6002 I=1,5\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/      IF(DLOC(I).EQ.LOC)DLOC(I)=DALTLC\r
+#G0053,        FLDA    I\r
+       ATX     7\r
+       FLDA    DLOC-3,7\r
+       FSUB    LOC\r
+       JNE     #6002\r
+       FLDA    DALTLC\r
+       FSTA    DLOC-3,7\r
+/6002   ODLOC(I)=DLOC(I)\r
+#6002, FLDA    I\r
+       ATX     7\r
+       FLDA    DLOC-3,7\r
+       FSTA    ODLOC-3,7\r
+       FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+3\r
+       JLE     #G0053\r
+/      CALL RSPEAK(3)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      THREE\r
+/      CALL DROP(AXE,LOC)\r
+       JSR     DROP\r
+/      GOTO 2000\r
+       JA      #2000\r
+       JA      AXE\r
+       JA      LOC\r
+\r
+/C\r
+/C THINGS ARE IN FULL SWING. MOVE EACH DWARF AT RANDOM, EXCEPT IF HE'S SEEN US\r
+/C HE STICKS WITH US. DWARVES NEVER GO TO LOCS <15. IF WANDERING AT RANDOM,\r
+/C THEY DON'T BACK UP UNLESS THERE'S NO ALTERNATIVE. IF THEY DON'T HAVE TO\r
+/C MOVE, THEY ATTACK. AND, OF COURSE, DEAD DWARVES DON'T DO MUCH OF ANYTHING.\r
+/C\r
+/6010   DTOTAL=0\r
+#6010, FCLA\r
+       FSTA    DTOTAL\r
+/      ATTACK=0\r
+       FSTA    ATTACK\r
+/      STICK=0\r
+       FSTA    STICK\r
+/      DO 6030 I=1,6\r
+       FLDA    ONE\r
+       FSTA    I\r
+/       IF (DLOC(I).EQ.0)GOTO 6030\r
+#G0055,        FLDA    I\r
+       ATX     7\r
+       FLDA    DLOC-3,7\r
+       JEQ     #6030\r
+/      J=1\r
+       FLDA    ONE\r
+       FSTA    J\r
+/      KK=DLOC(I)\r
+       FLDA    DLOC-3,7\r
+       FSTA    KK\r
+/      KK=KEY(KK)\r
+       ATX     7\r
+       FLDA    KEY-3,7\r
+       FSTA    KK\r
+/      IF(KK.EQ.0)GOTO 6016\r
+       JEQ     #6016\r
+\r
+/6012   NEWLOC=TRVLOC(KK)\r
+#6012, JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRVLOC\r
+       JA      KK\r
+       JA      ZERO\r
+       FSTA    NEWLOC\r
+/      IF(NEWLOC.GT.300.OR.NEWLOC.LT.15.OR.NEWLOC.EQ.ODLOC(I)\r
+/      1       .OR.(J.GT.1.AND.NEWLOC.EQ.TK(J-1)).OR.J.GE.20\r
+/      2       .OR.NEWLOC.EQ.DLOC(I).OR.FORCED(NEWLOC)\r
+/      3       .OR.(I.EQ.6.AND.BITSET(NEWLOC,3))\r
+/      4       .OR.TRVCON(KK).EQ.100)GOTO 6014\r
+       FSUB    #LIT+306\r
+       JGT     #6014\r
+       FLDA    NEWLOC\r
+       FSUB    #LIT+25\r
+       JLT     #6014\r
+       FLDA    I\r
+       ATX     7\r
+       FLDA    NEWLOC\r
+       FSUB    ODLOC-3,7\r
+       JEQ     #6014\r
+       FLDA    J\r
+       FSUB    ONE\r
+       JLE     .+11\r
+       ATX     6\r
+       FLDA    NEWLOC\r
+       FSUB    TK-3,6\r
+       JEQ     #6014\r
+       FLDA    J\r
+       FSUB    #LIT+36\r
+       JGE     #6014\r
+       FLDA    I\r
+       ATX     7\r
+       FLDA    NEWLOC\r
+       FSUB    DLOC-3,7\r
+       JEQ     #6014\r
+       FLDA    NEWLOC\r
+       JSA     FORCED\r
+       JNE     #6014\r
+       FLDA    I\r
+       FSUB    #LIT+6\r
+       JNE     .+14\r
+       JSR     BITSET\r
+       JA      .+6\r
+       JA      NEWLOC\r
+       JA      THREE\r
+       JNE     #6014\r
+       JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRVCON\r
+       JA      KK\r
+       JA      ZERO\r
+       FSUB    #LIT+154\r
+       JEQ     #6014\r
+/      TK(J)=NEWLOC\r
+       FLDA    J\r
+       ATX     7\r
+       FLDA    NEWLOC\r
+       FSTA    TK-3,7\r
+/      J=J+1\r
+       FLDA    ONE\r
+       FADDM   J\r
+\r
+/6014   KK=KK+1\r
+#6014, FLDA    KK\r
+       FADD    ONE\r
+       FSTA    KK\r
+/      IF(TRAVEL(KK-1).GE.0)GOTO 6012\r
+       FSUB    ONE\r
+       FSTA    #TMP\r
+       JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRAVEL\r
+       JA      #TMP\r
+       JA      ZERO\r
+       JGE     #6012\r
+/6016   TK(J)=ODLOC(I)\r
+#6016, FLDA    J\r
+       ATX     6\r
+       FLDA    I\r
+       ATX     7\r
+       FLDA    ODLOC-3,7\r
+       FSTA    TK-3,6\r
+/      IF(J.GE.2)J=J-1\r
+       FLDA    J\r
+       FSUB    TWO\r
+       JLT     .+5\r
+       FLDA    MINUS1\r
+       FADDM   J\r
+/      J=1+RND(J)\r
+       JSR     RND\r
+       JA      .+4\r
+       JA      J\r
+       FADD    ONE\r
+       FSTA    J\r
+/      ODLOC(I)=DLOC(I)\r
+       FLDA    DLOC-3,7\r
+       FSTA    ODLOC-3,7\r
+/      DLOC(I)=TK(J)\r
+       FLDA    J\r
+       ATX     6\r
+       FLDA    TK-3,6\r
+       FSTA    DLOC-3,7\r
+/      DSEEN(I)=(DSEEN(I).AND.LOC.GE.15)\r
+/      1       .OR.(DLOC(I).EQ.LOC.OR.ODLOC(I).EQ.LOC)\r
+       FLDA    LOC\r
+       FSUB    #LIT+25\r
+       JLT     .+6\r
+       FLDA    DSEEN-3,7\r
+       JNE     .+21\r
+       FLDA    DLOC-3,7\r
+       FSUB    LOC\r
+       JEQ     .+13\r
+       FLDA    ODLOC-3,7\r
+       FSUB    LOC\r
+       JEQ     .+5\r
+       FCLA\r
+       JA      .+3\r
+       FLDA    ONE\r
+       FSTA    DSEEN-3,7\r
+/      IF(.NOT.DSEEN(I))GOTO 6030\r
+       JEQ     #6030\r
+/      DLOC(I)=LOC\r
+       FLDA    LOC\r
+       FSTA    DLOC-3,7\r
+/      IF(I.NE.6)GOTO 6027\r
+       FLDA    I\r
+       FSUB    #LIT+6\r
+       JNE     #6027\r
+/C\r
+/C THE PIRATE'S SPOTTED HIM. HE LEAVES HIM ALONE ONCE WE'VE FOUND CHEST.\r
+/C K COUNTS IF A TREASURE IS HERE. IF NOT, AND TALLY=TALLY2 PLUS ONE FOR\r
+/C AN UNSEEN CHEST, LET THE PIRATE BE SPOTTED.\r
+/C\r
+/      IF(LOC.EQ.CHLOC.OR.PROP(CHEST).GE.0)GOTO 6030\r
+\r
+       FLDA    LOC\r
+       FSUB    CHLOC\r
+       JEQ     #6030\r
+       FLDA    CHEST\r
+       JSA     RDPROP\r
+       JGE     #6030\r
+/      K=0\r
+       FCLA\r
+       FSTA    K\r
+/      DO 6020 J=50,MAXTRS\r
+       FLDA    #LIT+110\r
+       FSTA    J\r
+/C\r
+/C PIRATE WON'T TAKE PYRAMID FROM PLOVER ROOM OR DARK ROOM (TOO EASY!).\r
+/C\r
+/      IF(J.EQ.PYRAM.AND.(LOC.EQ.PLAC(PYRAM)\r
+/      1       .OR.LOC.EQ.PLAC(EMRALD)))GOTO 6020\r
+#G0057,        FLDA    J\r
+       FSUB    PYRAM\r
+       JNE     .+24\r
+       FLDA    PYRAM\r
+       ATX     7\r
+       FLDA    LOC\r
+       FSUB    PLAC-3,7\r
+       JEQ     #6020\r
+       FLDA    EMRALD\r
+       ATX     6\r
+       FLDA    LOC\r
+       FSUB    PLAC-3,6\r
+       JEQ     #6020\r
+/      IF(TOTING(J))GOTO 6022\r
+       FLDA    J\r
+       JSA     TOTING\r
+       JNE     #6022\r
+\r
+/6020   IF(HERE(J))K=1\r
+#6020, FLDA    J\r
+       JSA     HERE\r
+       JEQ     .+5\r
+       FLDA    ONE\r
+       FSTA    K\r
+       FLDA    J\r
+       FADD    ONE\r
+       FSTA    J\r
+       FSUB    MAXTRS\r
+       JLE     #G0057\r
+/      IF(TALLY.EQ.TALLY2+1.AND.K.EQ.0.AND.PLACE(CHEST).EQ.0\r
+/      1       .AND.HERE(LAMP).AND.PROP(LAMP).EQ.1)GOTO 6025\r
+       FLDA    TALLY2\r
+       FADD    ONE\r
+       FSUB    TALLY\r
+       JNE     #M4\r
+       FLDA    K\r
+       JNE     #M4\r
+       FLDA    CHEST\r
+       ATX     7\r
+       FLDA    PLACE-3,7\r
+       JNE     #M4\r
+       FLDA    LAMP\r
+       JSA     HERE\r
+       JEQ     #M4\r
+       FLDA    PROP-3,3\r
+       FSUB    ONE\r
+       JEQ     #6025\r
+/      IF(ODLOC(6).NE.DLOC(6).AND.PCT(20))CALL RSPEAK(127)\r
+#M4,   FLDA    ODLOC+17        /ODLOC(6)\r
+       FSUB    DLOC+17         /DLOC(6)\r
+       JEQ     #6030\r
+       JSR     PCT\r
+       JA      .+4\r
+       JA      #LIT+36\r
+       JEQ     #6030\r
+       JSR     RSPEAK\r
+/      GOTO 6030\r
+       JA      #6030\r
+       JA      #LIT+176\r
+/C\r
+/6022   CALL RSPEAK(128)\r
+#6022, JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+201\r
+/C\r
+/C DON'T STEAL CHEST BACK FROM TROLL!\r
+/C\r
+/      IF(PLACE(MESSAG).EQ.0)CALL MOVE(CHEST,CHLOC)\r
+       FLDA    MESSAG\r
+       ATX     7\r
+       FLDA    PLACE-3,7\r
+       JNE     .+12\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      CHEST\r
+       JA      CHLOC\r
+/      CALL MOVE(MESSAG,CHLOC2)\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      MESSAG\r
+       JA      CHLOC2\r
+/      DO 6023 J=50,MAXTRS\r
+       FLDA    #LIT+110\r
+       FSTA    J\r
+\r
+/      IF(J.EQ.PYRAM.AND.(LOC.EQ.PLAC(PYRAM)\r
+/      1       .OR.LOC.EQ.PLAC(EMRALD)))GOTO 6023\r
+#G0063,        FLDA    J\r
+       FSUB    PYRAM\r
+       JNE     .+24\r
+       FLDA    PYRAM\r
+       ATX     7\r
+       FLDA    LOC\r
+       FSUB    PLAC-3,7\r
+       JEQ     #6023\r
+       FLDA    EMRALD\r
+       ATX     6\r
+       FLDA    LOC\r
+       FSUB    PLAC-3,6\r
+       JEQ     #6023\r
+/      IF(AT(J).AND.FIXED(J).EQ.0)CALL CARRY(J,LOC)\r
+       FLDA    J\r
+       JSA     AT\r
+       JEQ     .+16\r
+/      FLDA    J\r
+/      ATX     3\r
+       FLDA    FIXED-3,3\r
+       JNE     .+12\r
+       JSR     CARRY\r
+       JA      .+6\r
+       JA      J\r
+       JA      LOC\r
+/      IF(TOTING(J))CALL DROP(J,CHLOC)\r
+       FLDA    J\r
+       JSA     TOTING\r
+       JEQ     #6023\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      J\r
+       JA      CHLOC\r
+/6023   CONTINUE\r
+#6023, FLDA    J\r
+       FADD    ONE\r
+       FSTA    J\r
+       FSUB    MAXTRS\r
+       JLE     #G0063\r
+\r
+/6024   DLOC(6)=CHLOC\r
+#6024, FLDA    #LIT+6\r
+       ATX     7\r
+       FLDA    CHLOC\r
+       FSTA    DLOC-3,7\r
+/      ODLOC(6)=CHLOC\r
+       FSTA    ODLOC-3,7\r
+/      DSEEN(6)=.FALSE.\r
+       FCLA\r
+       FSTA    DSEEN-3,7\r
+/      GOTO 6030\r
+       JA      #6030\r
+\r
+/C\r
+/6025   CALL RSPEAK(186)\r
+\r
+#6025, JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+261\r
+/      CALL MOVE(CHEST,CHLOC)\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      CHEST\r
+       JA      CHLOC\r
+/      CALL MOVE(MESSAG,CHLOC2)\r
+       JSR     MOVE\r
+/      GOTO 6024\r
+       JA      #6024\r
+       JA      MESSAG\r
+       JA      CHLOC2\r
+\r
+/C\r
+/C THIS THREATENING LITTLE DWARF IS IN THE ROOM WITH HIM!\r
+/C\r
+/6027   DTOTAL=DTOTAL+1\r
+#6027, FLDA    ONE\r
+       FADDM   DTOTAL\r
+/      IF(ODLOC(I).NE.DLOC(I))GOTO 6030\r
+       FLDA    I\r
+       ATX     7\r
+       FLDA    ODLOC-3,7\r
+       FSUB    DLOC-3,7\r
+       JNE     #6030\r
+/      ATTACK=ATTACK+1\r
+       FLDA    ONE\r
+       FADDM   ATTACK\r
+/      IF(KNFLOC.GE.0)KNFLOC=LOC\r
+       FLDA    KNFLOC\r
+       JLT     .+6\r
+       FLDA    LOC\r
+       FSTA    KNFLOC\r
+/      IF(RND(1000).LT.95*(DFLAG-2))STICK=STICK+1\r
+       JSR     RND\r
+       JA      .+4\r
+       JA      #LIT+314\r
+       FSTA    #TMP\r
+       FLDA    DFLAG\r
+       FSUB    TWO\r
+       FMUL    #LIT+146\r
+       FSUB    #TMP\r
+       JLT     #6030\r
+       FLDA    ONE\r
+       FADDM   STICK\r
+/6030   CONTINUE\r
+#6030, FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+6\r
+       JLE     #G0055\r
+/C\r
+/C NOW WE KNOW WHAT'S HAPPENING. LET'S TELL THE POOR SUCKER ABOUT IT.\r
+/C\r
+/      IF(DTOTAL.EQ.0)GOTO 2000\r
+       FLDA    DTOTAL\r
+       JEQ     #2000\r
+/      IF(DTOTAL.EQ.1)GOTO 75\r
+       FSUB    ONE\r
+       JEQ     #75\r
+/      TYPE 67,DTOTAL\r
+/67     FORMAT(' There are ',I1,' threatening little dwarves in the'\r
+/      1       ,' room with you.')\r
+\r
+       JSR     SPRINT\r
+       JA      #67A\r
+       JA      TWO\r
+\r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #67\r
+       FLDA    DTOTAL\r
+       TRAP3   #RSVO\r
+       TRAP3   #RENDO\r
+\r
+       JSA     SPRINT\r
+\r      JA      #67B\r
+       JA      ONE\r
+/       GOTO 77\r
+       JA      #77\r
+\r
+/75     CALL RSPEAK(4)\r
+#75,   JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT\r
+\r
+/77     IF(ATTACK.EQ.0)GOTO 2000\r
+#77,   FLDA    ATTACK\r
+       JEQ     #2000\r
+/      IF(DFLAG.EQ.2)DFLAG=3\r
+       FLDA    DFLAG\r
+       FSUB    TWO\r
+       JNE     .+5\r
+       FLDA    THREE\r
+       FSTA    DFLAG\r
+/      IF(ATTACK.EQ.1)GOTO 79\r
+       FLDA    ATTACK\r
+       FSUB    ONE\r
+       JEQ     #79\r
+/      TYPE 78,ATTACK\r
+/78     FORMAT(' ',I1,' of them throw knives at you!')\r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #78\r
+       FLDA    ATTACK\r
+       TRAP3   #RSVO\r
+       TRAP3   #RENDO\r
+       JSA     SPRINT\r
+       JA      #78B\r
+       JA      ONE\r
+/      K=6\r
+       FLDA    #LIT+6\r
+       FSTA    K\r
+\r
+/82     IF(STICK.GT.1)GOTO 83\r
+#82,   FLDA    STICK\r
+       FSUB    ONE\r
+       JGT     #83\r
+/      CALL RSPEAK(K+STICK)\r
+       FLDA    K\r
+       FADD    STICK\r
+       FSTA    #TMP\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #TMP\r
+/      IF(STICK.EQ.0)GOTO 2000\r
+       FLDA    STICK\r
+       JEQ     #2000\r
+/      GOTO 84\r
+       JA      #84\r
+\r
+/83     TYPE 68,STICK\r
+#83,   TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #68\r
+       FLDA    STICK\r
+       TRAP3   #RSVO\r
+       TRAP3   #RENDO\r
+\r
+/68     FORMAT(' ',I1,' of them get you!')\r
+       JSA     SPRINT\r
+       JA      #68B\r
+       JA      ONE\r
+/84     OLDLC2=LOC\r
+#84,   FLDA    LOC\r
+       FSTA    OLDLC2\r
+/      GOTO 99\r
+       JA      #99\r
+\r
+/C\r
+/79     CALL RSPEAK(5)\r
+#79,   JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+3\r
+/      K=52\r
+       DECIMAL\r
+               LDX     52,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    K\r
+/      GOTO 82\r
+       JA      #82\r
+\r
+/C DESCRIBE THE CURRENT LOCATION AND (MAYBE) GET NEXT COMMAND.\r
+/C\r
+/C PRINT TEXT FOR CURRENT LOC.\r
+/C\r
+/2000   IF(LOC.EQ.0)GOTO 99\r
+#2000, FLDA    LOC\r
+       JEQ     #99\r
+/      KK=STEXT(LOC)\r
+       FLDA    LOC\r
+       ATX     7\r
+       FLDA    STEXT-3,7\r
+       FSTA    KK\r
+/      KENT=0\r
+       FCLA\r
+       FSTA    KENT\r
+/      IF (ABBNUM.NE.0) KENT=MOD(ABB(LOC),ABBNUM)\r
+       FLDA    ABBNUM\r
+       JEQ     NOMOD\r
+/      FLDA    LOC\r
+/      ATX     7\r
+       FLDA    ABB-3,7\r
+       FSTA    #TMP\r
+       JSR     MOD\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      ABBNUM\r
+       FSTA    KENT\r
+/      IF (KENT.EQ.0.OR.KK.EQ.0) KK=LTEXT(LOC)\r
+NOMOD, FLDA    KENT\r
+       JEQ     .+6\r
+       FLDA    KK\r
+       JNE     .+11\r
+       FLDA    LOC\r
+       ATX     7\r
+       FLDA    LTEXT-3,7\r
+       FSTA    KK\r
+/      IF(FORCED(LOC).OR..NOT.DARK(0))GOTO 2001\r
+       FLDA    LOC\r
+       JSA     FORCED\r
+       JNE     #2001\r
+       JSA     DARK\r
+       JEQ     #2001\r
+/      IF(WZDARK.AND.PCT(35))GOTO 90\r
+       FLDA    WZDARK\r
+       JEQ     .+12\r
+       JSR     PCT\r
+       JA      .+4\r
+       JA      #LIT+66\r
+       JNE     #90\r
+/      KK=RTEXT(16)\r
+       FLDA    RTEXT+55\r
+       FSTA    KK\r
+\r
+/2001   IF(TOTING(BEAR))CALL RSPEAK(141)\r
+#2001, FLDA    BEAR\r
+       JSA     TOTING\r
+       JEQ     .+10\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+226\r
+/      CALL SPEAK(KK)\r
+       JSR     SPEAK\r
+       JA      .+4\r
+       JA      KK\r
+/      K=1\r
+       FLDA    ONE\r
+       FSTA    K\r
+/      IF(FORCED(LOC))GOTO 8\r
+       FLDA    LOC\r
+       JSA     FORCED\r
+       JNE     #8\r
+/      IF(LOC.EQ.33.AND.PCT(25).AND..NOT.CLOSNG)CALL RSPEAK(8)\r
+       DECIMAL\r
+               LDX     33,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    LOC\r
+       JNE     .+24\r
+       JSR     PCT\r
+       JA      .+4\r
+       JA      #LIT+52\r
+       JEQ     .+14\r
+       FLDA    CLOSNG\r
+       JNE     .+10\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+11\r
+/C\r
+/C PRINT OUT DESCRIPTIONS OF OBJECTS AT THIS LOCATION. IF NOT CLOSING AND\r
+/C PROPERTY VALUE IS NEGATIVE, TALLY OFF ANOTHER TREASURE. RUG IS SPECIAL\r
+/C CASE; ONCE SEEN, ITS PROP IS 1 (DRAGON ON IT) TILL DRAGON IS KILLED.\r
+/C SIMILARLY FOR CHAIN; PROP IS INITIALLY 1 (LOCKED TO BEAR). THESE HACKS\r
+/C ARE BECAUSE PROP=0 IS NEEDED TO GET FULL SCORE.\r
+/C\r
+/      IF(DARK(0))GOTO 2012\r
+       JSA     DARK\r
+       JNE     #2012\r
+/      ABB(LOC)=ABB(LOC)+1\r
+       FLDA    LOC\r
+       ATX     4\r
+       FLDA    ONE\r
+       FADDM   ABB-3,7\r
+/      I=ATLOC(LOC)\r
+       FLDA    ATLOC-3,7\r
+       FSTA    I\r
+\r
+/2004   IF(I.EQ.0)GOTO 2012\r
+#2004, FLDA    I\r
+       JEQ     #2012\r
+/      OBJ=I\r
+       FSTA    OBJ\r
+/      IF(OBJ.GT.100)OBJ=OBJ-100\r
+       FSUB    #LIT+154\r
+       JLE     .+4\r
+/      FLDA    OBJ\r
+/      FSUB    #LIT+154\r
+       FSTA    OBJ\r
+/      IF(OBJ.EQ.STEPS.AND.TOTING(NUGGET))GOTO 2008\r
+       FLDA    OBJ\r
+       FSUB    STEPS\r
+       JNE     .+10\r
+       FLDA    NUGGET\r
+       JSA     TOTING\r
+       JNE     #2008\r
+/      IF(PROP(OBJ).GE.0)GOTO 2006\r
+       FLDA    OBJ\r
+       JSA     RDPROP\r
+       JGE     #2006\r
+/      IF(CLOSED)GOTO 2008\r
+       FLDA    CLOSED\r
+       JNE     #2008\r
+/      PROP(OBJ)=0\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      IF(OBJ.EQ.RUG.OR.OBJ.EQ.CHAIN)PROP(OBJ)=1\r
+       FLDA    OBJ\r
+       FSUB    RUG\r
+       JEQ     .+10\r
+       FLDA    OBJ\r
+       FSUB    CHAIN\r
+       JNE     .+5\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+/      TALLY=TALLY-1\r
+       FLDA    TALLY\r
+       FADD    MINUS1\r
+       FSTA    TALLY\r
+/C IF REMAINING TREASURES TOO ELUSIVE, ZAP HIS LAMP.\r
+/      IF(TALLY.EQ.TALLY2.AND.TALLY.NE.0)LIMIT=MIN0(35,LIMIT)\r
+       JEQ     #2006\r
+       FSUB    TALLY2\r
+       JNE     #2006\r
+       JSR     MIN0\r
+       JA      .+6\r
+       JA      #LIT+66\r
+       JA      LIMIT\r
+       FSTA    LIMIT\r
+/2006   KK=PROP(OBJ)\r
+#2006, FLDA    OBJ\r
+       JSA     RDPROP\r
+       FSTA    KK\r
+/      IF(OBJ.EQ.STEPS.AND.LOC.EQ.FIXED(STEPS))KK=1\r
+       FLDA    OBJ\r
+       FSUB    STEPS\r
+       JNE     .+16\r
+       FLDA    STEPS\r
+       ATX     7\r
+       FLDA    LOC\r
+       FSUB    FIXED-3,7\r
+       JNE     .+5\r
+       FLDA    ONE\r
+       FSTA    KK\r
+/      CALL PSPEAK(OBJ,KK)\r
+       JSR     PSPEAK\r
+       JA      .+6\r
+       JA      OBJ\r
+       JA      KK\r
+\r
+/2008   I=LINK(I)\r
+#2008, FLDA    I\r
+       ATX     7\r
+       FLDA    LINK-3,7\r
+       FSTA    I\r
+/      GOTO 2004\r
+       JA      #2004\r
+\r
+/2009   K=54\r
+#2009, FLDA    #LIT+113\r
+       FSTA    K\r
+/2010   SPK=K\r
+#2010, FLDA    K\r
+       FSTA    SPK\r
+\r
+/2011   CALL RSPEAK(SPK)\r
+#2011, JSR     RSPEAK\r
+       JA      .+4\r
+       JA      SPK\r
+\r
+/2012   VERB=0\r
+#2012, FCLA\r
+       FSTA    VERB\r
+/      OBJ=0\r
+       FSTA    OBJ\r
+\r
+/C\r
+/C CHECK IF THIS LOC IS ELIGIBLE FOR ANY HINTS. IF BEEN HERE LONG ENOUGH,\r
+/C BRANCH TO HELP SECTION (ON LATER PAGE). HINTS ALL COME BACK HERE EVENTUALLY\r
+/C TO FINISH THE LOOP. IGNORE "HINTS" < 4 (SPECIAL STUFF, SEE DATABASE NOTES).\r
+/C\r
+/2600   DO 2602 HINT=4,HNTMAX\r
+#2600, FLDA    #LIT\r
+       FSTA    HINT\r
+\r
+/      IF(HINTED(HINT))GOTO 2602\r
+#G0102,        FLDA    HINT\r
+       ATX     7\r
+       FLDA    HINTED-3,7\r
+       JNE     #2602\r
+/      IF(.NOT.BITSET(LOC,HINT))HINTLC(HINT)=-1\r
+       JSR     BITSET\r
+       JA      .+6\r
+       JA      LOC\r
+       JA      HINT\r
+       JNE     .+5\r
+       FLDA    MINUS1\r
+       FSTA    HINTLC-3,7\r
+/      HINTLC(HINT)=HINTLC(HINT)+1\r
+       FLDA    ONE\r
+       FADDM   HINTLC-3,7\r
+/      IF(HINTLC(HINT).GE.HINTS(HINT,1))GOTO 40000\r
+       FLDA    #LIT+36         / 20\r
+       FADD    HINT            / HINT,1\r
+       ATX     6\r
+       FLDA    HINTLC-3,7\r
+       FSUB    HINTS-77,6\r
+       JGE     #40000\r
+\r
+/2602   CONTINUE\r
+#2602, FLDA    HINT\r
+       FADD    ONE\r
+       FSTA    HINT\r
+       FSUB    HNTMAX\r
+       JLE     #G0102\r
+/C\r
+/C KICK THE RANDOM NUMBER GENERATOR JUST TO ADD VARIETY TO THE CHASE. ALSO,\r
+/C IF CLOSING TIME, CHECK FOR ANY OBJECTS BEING TOTED WITH PROP < 0 AND SET\r
+/C THE PROP TO -1-PROP. THIS WAY OBJECTS WON'T BE DESCRIBED UNTIL THEY'VE\r
+/C BEEN PICKED UP AND PUT DOWN SEPARATE FROM THEIR RESPECTIVE PILES. DON'T\r
+/C TICK CLOCK1 UNLESS WELL INTO CAVE (AND NOT AT Y2).\r
+/C\r
+/      IF(.NOT.CLOSED)GOTO 2605\r
+       FLDA    CLOSED\r
+       JEQ     #2605\r
+/      IF(PROP(OYSTER).LT.0.AND.TOTING(OYSTER))\r
+/      1       CALL PSPEAK(OYSTER,1)\r
+\r
+       FLDA    OYSTER\r
+       JSA     TOTING\r
+       JEQ     .+16\r
+       FLDA    PROP-3,3\r
+       JGE     .+12\r
+       JSR     PSPEAK\r
+       JA      .+6\r
+       JA      OYSTER\r
+       JA      ONE\r
+/      DO 2604 I=1,100\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/2604   IF(TOTING(I).AND.PROP(I).LT.0)PROP(I)=-1-PROP(I)\r
+#2604, FLDA    I\r
+       JSA     TOTING\r
+       JEQ     .+13\r
+       FLDA    PROP-3,3\r
+       JGE     .+7\r
+       FLDA    MINUS1\r
+       FSUB    PROP-3,3\r
+       FSTA    PROP-3,3\r
+       FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+154\r
+       JLE     #2604\r
+\r
+/2605   WZDARK=DARK(0)\r
+#2605, JSA     DARK\r
+       FSTA    WZDARK\r
+/      IF(KNFLOC.GT.0.AND.KNFLOC.NE.LOC)KNFLOC=0\r
+       FLDA    KNFLOC\r
+       JLE     .+11\r
+       FSUB    LOC\r
+       JEQ     .+5\r
+       FCLA\r
+       FSTA    KNFLOC\r
+/      I=RND(1)\r
+       JSR     RND\r
+       JA      .+4\r
+       JA      ONE\r
+/      CALL GETIN(WD1,WD1X,WD2,WD2X)\r
+       JSR     GETIN\r
+       JA      .+12\r
+       JA      WD1\r
+       JA      WD1X\r
+       JA      WD2\r
+       JA      WD2X\r
+\r
+/C\r
+/C EVERY INPUT, CHECK "FOOBAR" FLAG. IF ZERO, NOTHING'S GOING ON. IF POS,\r
+/C MAKE NEG. IF NEG, HE SKIPPED A WORD, SO MAKE IT ZERO.\r
+/C\r
+/2608   FOOBAR=MIN0(0,-FOOBAR)\r
+#2608, FLDA    FOOBAR\r
+       FNEG\r
+       FSTA    #TMP\r
+       JSR     MIN0\r
+       JA      .+6\r
+       JA      ZERO\r
+       JA      #TMP\r
+       FSTA    FOOBAR\r
+/      TURNS=TURNS+1\r
+       FLDA    ONE\r
+       FADDM   TURNS\r
+/C      IF(VERB.EQ.SAY.AND.WD2.NE.0)VERB=0\r
+/C      IF(VERB.EQ.SAY)GOTO 4090\r
+/      IF(TALLY.EQ.0.AND.LOC.GE.15.AND.LOC.NE.33)CLOCK1=CLOCK1-1\r
+       FLDA    TALLY\r
+       JNE     .+23\r
+       FLDA    LOC\r
+       FSUB    #LIT+25\r
+       JLT     .+16\r
+       DECIMAL\r
+               LDX     33,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    LOC\r
+       JEQ     .+7\r
+       FLDA    CLOCK1\r
+       FSUB    ONE\r
+       FSTA    CLOCK1\r
+/      IF(CLOCK1.EQ.0)GOTO 10000\r
+       FLDA    CLOCK1\r
+       JEQ     #10000\r
+/      IF(CLOCK1.LT.0)CLOCK2=CLOCK2-1\r
+       JGE     .+7\r
+       FLDA    CLOCK2\r
+       FSUB    ONE\r
+       FSTA    CLOCK2\r
+/      IF(CLOCK2.EQ.0)GOTO 11000\r
+       FLDA    CLOCK2\r
+       JEQ     #11000\r
+/      IF(PROP(LAMP).EQ.1)LIMIT=LIMIT-1\r
+       FLDA    LAMP\r
+       JSA     RDPROP\r
+       FSUB    ONE\r
+       JNE     .+5\r
+       FLDA    MINUS1\r
+       FADDM   LIMIT\r
+/      IF(LIMIT.LE.30.AND.HERE(BATTER).AND.PROP(BATTER).EQ.0\r
+/      1       .AND.HERE(LAMP))GOTO 12000\r
+       FLDA    LIMIT\r
+       FSUB    #LIT+63\r
+       JGT     .+22\r
+       FLDA    BATTER\r
+       JSA     HERE\r
+       JEQ     .+14\r
+       FLDA    PROP-3,3\r
+       JNE     .+10\r
+       FLDA    LAMP\r
+       JSA     HERE\r
+       JNE     #12000\r
+/      IF(LIMIT.EQ.0)GOTO 12400\r
+       FLDA    LIMIT\r
+       JEQ     #12400\r
+/      IF(LIMIT.LT.0.AND.LOC.LE.8)GOTO 12600\r
+/      FLDA    LIMIT\r
+       JGE     .+7\r
+       FLDA    LOC\r
+       FSUB    #LIT+11\r
+       JLE     #12600\r
+/      IF(LIMIT.LE.30)GOTO 12200\r
+       FLDA    LIMIT\r
+       FSUB    #LIT+63\r
+       JLE     #12200\r
+\r
+/19999  K=43\r
+       DECIMAL\r
+#19999,                LDX     43,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    K\r
+/      IF(LIQLOC(LOC).EQ.WATER)K=70\r
+       JSA     LIQLOC\r
+       FSUB    WATER\r
+       JNE     .+7\r
+       DECIMAL\r
+               LDX     70,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    K\r
+/C\r
+/C DO PRELIMINARY ANALYSIS OF SENTENCE TO FIND CERTAIN SPECIAL\r
+/C CASES, VIZ,\r
+/C\r
+/C ENTER <WATER,STREAM>\r
+/C ENTER <LOCATION>\r
+/C <WATER,OIL> <PLANT,DOOR>\r
+/C\r
+/      CALL VOCAB(WD1,WD1A,-1,I)\r
+       JSR     VOCAB\r
+       JA      .+6\r
+       JA      WD1\r
+       JA      MINUS1\r
+       FSTA    I\r
+/      CALL VOCAB(WD2,WD2A,-1,J)\r
+       JSR     VOCAB\r
+       JA      .+6\r
+       JA      WD2\r
+       JA      MINUS1\r
+       FSTA    J\r
+/      IF(WD1.NE.'ENTE') GO TO 2609\r
+       FLDA    WD1\r
+       FSUB    TENTE\r
+       JNE     #2609\r
+/      IF(J .EQ. (WATER+1000)\r
+/      1       .OR. J .EQ. STREAM) GO TO 2010\r
+       FLDA    WATER\r
+       FADD    #LIT+314\r
+       FSUB    J\r
+       JEQ     #2010\r
+       FLDA    J\r
+       FSUB    STREAM\r
+       JEQ     #2010\r
+/      IF(WD2 .NE. 0) GO TO 2800\r
+       FLDA    WD2\r
+       JNE     #2800\r
+\r
+/2609   IF((I .NE. (WATER+1000) .AND. I .NE. (OIL+1000))\r
+/      1       .OR. (J .NE. (PLANT+1000) .AND. J .NE. (DOOR+1000)))\r
+/      2       GO TO 2610\r
+#2609, FLDA    WATER\r
+       FADD    #LIT+314\r
+       FSUB    I\r
+       JEQ     .+11\r
+       FLDA    OIL\r
+       FADD    #LIT+314\r
+       FSUB    I\r
+       JNE     #2610\r
+       FLDA    PLANT\r
+       FADD    #LIT+314\r
+       FSUB    J\r
+       JEQ     .+11\r
+       FLDA    DOOR\r
+       FADD    #LIT+314\r
+       FSUB    J\r
+       JNE     #2610\r
+/      WD2="POUR"\r
+       FLDA    TPOUR\r
+       FSTA    WD2\r
+\r
+/2610   IF(WD1 .EQ. 'WEST' .AND. PCT(10))\r
+/      1       CALL RSPEAK(17)\r
+\r
+#2610, FLDA    WD1\r
+       FSUB    TWEST\r
+       JNE     #2630\r
+       JSR     PCT\r
+       JA      .+4\r
+       JA      #LIT+17\r
+       JEQ     #2630\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+33\r
+/2630   CALL VOCAB(WD1,-1,I)\r
+#2630, JSR     VOCAB\r
+       JA      .+6\r
+       JA      WD1\r
+       JA      MINUS1\r
+       FSTA    I\r
+/      IF(I.EQ.-1)GOTO 3000\r
+       FADD    ONE\r
+       JEQ     #3000\r
+/      K=MOD(I,1000)\r
+       JSR     MOD\r
+       JA      .+6\r
+       JA      I\r
+       JA      #LIT+314\r
+       FSTA    K\r
+/      KQ=I/1000+1\r
+       FLDA    I\r
+       FDIV    #LIT+314\r
+       JSA     #FIX\r
+       FADD    ONE\r
+       FSTA    KQ\r
+/      GOTO (8,5000,4000,2010)KQ\r
+       FLDA    KQ\r
+       ATX     1\r
+       STARTD\r
+       FLDA    .+2,1\r
+       STARTF\r
+       JAC\r
+       JA      #8\r
+       JA      #5000\r
+       JA      #4000\r
+       JA      #2010\r
+/      CALL BUG(22)\r
+       JSR     BUG\r
+       JA      .+4\r
+       JA      #LIT+41\r
+\r
+/C\r
+/C GET SECOND WORD FOR ANALYSIS.\r
+/C\r
+/2800   WD1=WD2\r
+/      WD1A=WD2A\r
+\r
+#2800, FLDA    WD2\r
+       FSTA    WD1\r
+/      WD1X=WD2X\r
+       FLDA    WD2X\r
+       FSTA    WD1X\r
+/      WD2=0\r
+       FCLA\r
+       FSTA    WD2\r
+/      GOTO 2610\r
+       JA      #2610\r
+\r
+/C\r
+/C GEE, I DON'T UNDERSTAND.\r
+/C\r
+/3000   SPK=60\r
+#3000, FLDA    #LIT+330\r
+       FSTA    SPK\r
+/      IF(PCT(20))SPK=61\r
+       JSR     PCT\r
+       JA      .+4\r
+       JA      #LIT+36\r
+       JEQ     .+6\r
+       DECIMAL\r
+               LDX     61,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(PCT(20))SPK=13\r
+       JSR     PCT\r
+       JA      .+4\r
+       JA      #LIT+36\r
+       JEQ     .+6\r
+       DECIMAL\r
+               LDX     13,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      CALL RSPEAK(SPK)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      SPK\r
+/      GOTO 2600\r
+       JA      #2600\r
+\r
+/C\r
+/C ANALYSE A VERB. REMEMBER WHAT IT WAS, GO BACK FOR OBJECT IF SECOND WORD\r
+/C UNLESS VERB IS "SAY", WHICH SNARFS ARBITRARY SECOND WORD.\r
+/C\r
+/4000   VERB=K\r
+#4000, FLDA    K\r
+       FSTA    VERB\r
+/      SPK=ACTSPK(VERB)\r
+       ATX     7\r
+       FLDA    ACTSPK-3,7\r
+       FSTA    SPK\r
+/      IF(WD2.NE.0.AND.VERB.NE.SAY)GOTO 2800\r
+       FLDA    WD2\r
+       JEQ     .+10\r
+       FLDA    VERB\r
+       FSUB    SAY\r
+       JNE     #2800\r
+/      IF(VERB.EQ.SAY)OBJ=WD2\r
+       FLDA    VERB\r
+       FSUB    SAY\r
+       JNE     .+5\r
+       FLDA    WD2\r
+       FSTA    OBJ\r
+/      IF(OBJ.NE.0)GOTO 4090\r
+       FLDA    OBJ\r
+       FSUB    ZERO\r
+       JNE     #4090\r
+\r
+/C\r
+/C ANALYSE AN INTRANSITIVE VERB (IE, NO OBJECT GIVEN YET).\r
+/C\r
+/4080   GOTO(8010,8000,8000,8040,2009,8040,9070,9080,8000,8000,\r
+/      1    2011,9120,9130,8140,9150,8000,8000,8180,8000,8200,\r
+/      2    8000,9220,9230,8240,8250,8260,8270,8000,8000,8300,\r
+/      3    8310,8320)VERB\r
+/C           TAKE DROP  SAY OPEN NOTH LOCK   ON  OFF WAVE CALM\r
+/C           WALK KILL POUR  EAT DRNK  RUB TOSS QUIT FIND INVN\r
+/C           FEED FILL BLST SCOR  FOO  BRF READ BREK WAKE SUSP\r
+/C           HOUR RESU\r
+#4080, FLDA    VERB\r
+       ATX     1\r
+       STARTD\r
+       FLDA    .+2,1\r
+       STARTF\r
+       JAC\r
+       JA      #8010\r
+       JA      #8000\r
+       JA      #8000\r
+       JA      #8040\r
+       JA      #2009\r
+       JA      #8040\r
+       JA      #9070\r
+       JA      #9080\r
+       JA      #8000\r
+       JA      #8000\r
+       JA      #2011\r
+       JA      #9120\r
+       JA      #9130\r
+       JA      #8140\r
+       JA      #9150\r
+       JA      #8000\r
+       JA      #8000\r
+       JA      #8180\r
+       JA      #8000\r
+       JA      #8200\r
+       JA      #8000\r
+       JA      #9220\r
+       JA      #9230\r
+       JA      #8240\r
+       JA      #8250\r
+       JA      #8260\r
+       JA      #8270\r
+       JA      #8000\r
+       JA      #8000\r
+       JA      #8300\r
+       JA      #8310\r
+       JA      #8320\r
+/      CALL BUG(23)\r
+       JSR     BUG\r
+       JA      .+4\r
+       JA      #LIT+44\r
+\r
+/C\r
+/C ANALYSE A TRANSITIVE VERB.\r
+/C\r
+/4090    GOTO(9010,9020,9030,9040,2009,9040,9070,9080,9090,2011,\r
+/      1    2011,9120,9130,9140,9150,9160,9170,2011,9190,9190,\r
+/      2    9210,9220,9230,2011,2011,2011,9270,9280,9290,2011,\r
+/      3    2011,2011)VERB\r
+/C           TAKE DROP  SAY OPEN NOTH LOCK   ON  OFF WAVE CALM\r
+/C           WALK KILL POUR  EAT DRNK  RUB TOSS QUIT FIND INVN\r
+/C           FEED FILL BLST SCOR  FOO  BRF READ BREK WAKE SUSP\r
+/C           HOUR RESU\r
+#4090, FLDA    VERB\r
+       ATX     1\r
+       STARTD\r
+       FLDA    .+2,1\r
+       STARTF\r
+       JAC\r
+       JA      #9010\r
+       JA      #9020\r
+       JA      #9030\r
+       JA      #9040\r
+       JA      #2009\r
+       JA      #9040\r
+       JA      #9070\r
+       JA      #9080\r
+       JA      #9090\r
+       JA      #2011\r
+       JA      #2011\r
+       JA      #9120\r
+       JA      #9130\r
+       JA      #9140\r
+       JA      #9150\r
+       JA      #9160\r
+       JA      #9170\r
+       JA      #2011\r
+       JA      #9190\r
+       JA      #9190\r
+       JA      #9210\r
+       JA      #9220\r
+       JA      #9230\r
+       JA      #2011\r
+       JA      #2011\r
+       JA      #2011\r
+       JA      #9270\r
+       JA      #9280\r
+       JA      #9290\r
+       JA      #2011\r
+       JA      #2011\r
+       JA      #2011\r
+       JA      #2011\r
+/      CALL BUG(24)\r
+       JSR     BUG\r
+       JA      .+4\r
+       JA      #LIT+47\r
+\r
+/C\r
+/C ANALYSE AN OBJECT WORD. SEE IF THE THING IS HERE, WHETHER WE'VE GOT A VERB\r
+/C YET, AND SO ON. OBJECT MUST BE HERE UNLESS VERB IS "FIND" OR "INVENT(ORY)"\r
+/C (AND NO NEW VERB YET TO BE ANALYSED). WATER AND OIL ARE ALSO FUNNY, SINCE\r
+/C THEY ARE NEVER ACTUALLY DROPPED AT ANY LOCATION, BUT MIGHT BE HERE INSIDE\r
+/C THE BOTTLE OR AS A FEATURE OF THE LOCATION.\r
+/C\r
+/5000   OBJ=K\r
+#5000, FLDA    K\r
+       FSTA    OBJ\r
+/      IF(FIXED(K).NE.LOC.AND..NOT.HERE(K))GOTO 5100\r
+       FLDA    K\r
+       ATX     7\r
+       FLDA    FIXED-3,7\r
+       FSUB    LOC\r
+       JEQ     #5010\r
+       FLDA    K\r
+       JSA     HERE\r
+       JEQ     #5100\r
+\r
+/5010   IF(WD2.NE.0)GOTO 2800\r
+#5010, FLDA    WD2\r
+       JNE     #2800\r
+/      IF(VERB.NE.0)GOTO 4090\r
+       FLDA    VERB\r
+       JNE     #4090\r
+/      TYPE 5015\r
+/5015   FORMAT(' What do you want to do with the ',$)\r
+       JSA     SPRINT\r
+       JA      #5015\r
+       JA      TWO\r
+\r
+/      CALL A5TOA1(WD1,WD1A,WD1X,'?')\r
+       JSR     A5TOA1\r
+       JA      .+10\r
+       JA      WD1\r
+       JA      WD1X\r
+       JA      TQUES\r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #LINEF+2\r
+       TRAP3   #RENDO\r
+/      GOTO 2600\r
+#LINEF,        JA      #2600\r
+       TEXT    +(' ')+\r
+\r
+/C\r
+/5100   IF(K.NE.GRATE)GOTO 5110\r
+#5100, FLDA    K\r
+       FSUB    GRATE\r
+       JNE     #5110\r
+/      IF(LOC.EQ.1.OR.LOC.EQ.4.OR.LOC.EQ.7)K=DPRSSN\r
+       FLDA    LOC\r
+       FSUB    ONE\r
+       JEQ     .+10\r
+       FSUB    THREE\r
+       JEQ     .+5\r
+       FSUB    THREE\r
+       JNE     .+6\r
+       FLDA    DPRSSN\r
+       FSTA    K\r
+/      IF(LOC.GT.9.AND.LOC.LT.15)K=ENTRNC\r
+       FLDA    LOC\r
+       FSUB    #LIT+14\r
+       JLE     .+13\r
+       FLDA    LOC\r
+       FSUB    #LIT+25\r
+       JGE     .+6\r
+       FLDA    ENTRNC\r
+       FSTA    K\r
+/      IF(K.NE.GRATE)GOTO 8\r
+       FLDA    K\r
+       FSUB    GRATE\r
+       JNE     #8\r
+\r
+/5110   IF(K.NE.DWARF)GOTO 5120\r
+#5110, FLDA    K\r
+       FSUB    DWARF\r
+       JNE     #5120\r
+/      DO 5112 I=1,5\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/      IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2)GOTO 5010\r
+#G0122,        FLDA    I\r
+       ATX     7\r
+       FLDA    DLOC-3,7\r
+       FSUB    LOC\r
+       JNE     #5112\r
+       FLDA    DFLAG\r
+       FSUB    TWO\r
+       JGE     #5010\r
+/5112   CONTINUE\r
+#5112, FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+3\r
+       JLE     #G0122\r
+\r
+/5120   IF((LIQ(0).EQ.K.AND.HERE(BOTTLE)).OR.K.EQ.LIQLOC(LOC))GOTO 5010\r
+#5120, JSA     LIQ\r
+       FSUB    K\r
+       JNE     .+10\r
+       FLDA    BOTTLE\r
+       JSA     HERE\r
+       JNE     #5010\r
+       JSA     LIQLOC\r
+       FSUB    K\r
+       JEQ     #5010\r
+/      IF(OBJ.NE.PLANT.OR..NOT.AT(PLANT2).OR.PROP(PLANT2).EQ.0)GOTO 5130\r
+       FLDA    OBJ\r
+       FSUB    PLANT\r
+       JNE     #5130\r
+       FLDA    PLANT2\r
+       JSA     AT\r
+       JEQ     #5130\r
+/      FLDA    PLANT2\r
+/      ATX     3\r
+       FLDA    PROP-3,3\r
+       JEQ     #5130\r
+/      OBJ=PLANT2\r
+       FLDA    PLANT2\r
+       FSTA    OBJ\r
+/      GOTO 5010\r
+       JA      #5010\r
+\r
+/5130   IF(OBJ.NE.KNIFE.OR.KNFLOC.NE.LOC)GOTO 5140\r
+#5130, FLDA    OBJ\r
+       FSUB    KNIFE\r
+       JNE     #5140\r
+       FLDA    KNFLOC\r
+       FSUB    LOC\r
+       JNE     #5140\r
+/      KNFLOC=-1\r
+       FLDA    MINUS1\r
+       FSTA    KNFLOC\r
+/      SPK=116\r
+       FLDA    #LIT+170\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/5140   IF(OBJ.NE.ROD.OR..NOT.HERE(ROD2))GOTO 5190\r
+#5140, FLDA    OBJ\r
+       FSUB    ROD\r
+       JNE     #5190\r
+       FLDA    ROD2\r
+       JSA     HERE\r
+       JEQ     #5190\r
+/      OBJ=ROD2\r
+       FLDA    ROD2\r
+       FSTA    OBJ\r
+/      GOTO 5010\r
+       JA      #5010\r
+\r
+/5190   IF((VERB.EQ.FIND.OR.VERB.EQ.INVENT).AND.WD2.EQ.0)GOTO 5010\r
+#5190, FLDA    VERB\r
+       FSUB    INVENT\r
+       JEQ     .+10\r
+       FLDA    VERB\r
+       FSUB    FIND\r
+       JNE     .+5\r
+       FLDA    WD2\r
+       JEQ     #5010\r
+/      TYPE 5199\r
+       JSA     SPRINT\r
+       JA      #5199\r
+       JA      TWO\r
+\r
+/5199   FORMAT(' I don''t see any ',$)\r
+\r
+/      CALL A5TOA1(WD1,WD1A,WD1X,'.')\r
+/      GOTO 2012\r
+       JSR     A5TOA1\r
+       JA      #2012\r
+       JA      WD1\r
+       JA      WD1X\r
+       JA      TQDOT\r
+\r
+/C FIGURE OUT THE NEW LOCATION\r
+/C\r
+/C GIVEN THE CURRENT LOCATION IN "LOC", AND A MOTION VERB NUMBER IN "K", PUT\r
+/C THE NEW LOCATION IN "NEWLOC". THE CURRENT LOC IS SAVED IN "OLDLOC" IN CASE\r
+/C HE WANTS TO RETREAT. THE CURRENT OLDLOC IS SAVED IN OLDLC2, IN CASE HE\r
+/C DIES. (IF HE DOES, NEWLOC WILL BE LIMBO, AND OLDLOC WILL BE WHAT KILLED\r
+/C HIM, SO WE NEED OLDLC2, WHICH IS THE LAST PLACE HE WAS SAFE.)\r
+/C\r
+/8      KK=KEY(LOC)\r
+#8,    FLDA    LOC\r
+       ATX     7\r
+       FLDA    KEY-3,7\r
+       FSTA    KK\r
+/      NEWLOC=LOC\r
+       FLDA    LOC\r
+       FSTA    NEWLOC\r
+/      IF(KK.EQ.0)CALL BUG(26)\r
+       FLDA    KK\r
+       JNE     .+10\r
+       JSR     BUG\r
+       JA      .+4\r
+       JA      #LIT+55\r
+/      IF(K.EQ.NULL)GOTO 2\r
+       FLDA    K\r
+       FSUB    NULL\r
+       JEQ     #2\r
+/      IF(K.EQ.BACK)GOTO 20\r
+       FLDA    K\r
+       FSUB    BACK\r
+       JEQ     #20\r
+/      IF(K.EQ.LOOK)GOTO 30\r
+       FLDA    K\r
+       FSUB    LOOK\r
+       JEQ     #30\r
+/      IF(K.EQ.CAVE)GOTO 40\r
+       FLDA    K\r
+       FSUB    CAVE\r
+       JEQ     #40\r
+/      OLDLC2=OLDLOC\r
+       FLDA    OLDLOC\r
+       FSTA    OLDLC2\r
+/      OLDLOC=LOC\r
+       FLDA    LOC\r
+       FSTA    OLDLOC\r
+/C\r
+/9      LL=IABS(TRAVEL(KK))\r
+#9,    JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRAVEL\r
+       JA      KK\r
+       JA      ZERO\r
+       FSTA    #TMP\r
+       JSR     IABS\r
+       JA      .+4\r
+       JA      #TMP\r
+       FSTA    LL\r
+/      IF(LL.EQ.1 .OR. LL.EQ.K)GOTO 10\r
+       FSUB    ONE\r
+       JEQ     #10\r
+       FLDA    LL\r
+       FSUB    K\r
+       JEQ     #10\r
+/      IF(TRAVEL(KK).LT.0)GOTO 50\r
+       JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRAVEL\r
+       JA      KK\r
+       JA      ZERO\r
+       JLT     #50\r
+/      KK=KK+1\r
+       FLDA    ONE\r
+       FADDM   KK\r
+/      GOTO 9\r
+       JA      #9\r
+\r
+/C\r
+/10     NEWLOC=TRVCON(KK)\r
+#10,   JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRVCON\r
+       JA      KK\r
+       JA      ZERO\r
+       FSTA    NEWLOC\r
+/      K=MOD(NEWLOC,100)\r
+       JSR     MOD\r
+       JA      .+6\r
+       JA      NEWLOC\r
+       JA      #LIT+154\r
+       FSTA    K\r
+/      IF(NEWLOC.LE.300)GOTO 13\r
+       FLDA    NEWLOC\r
+       FSUB    #LIT+306\r
+       JLE     #13\r
+/      IF(PROP(K).NE.NEWLOC/100-3)GOTO 16\r
+       FLDA    K\r
+       ATX     7\r
+       FLDA    NEWLOC\r
+       FDIV    #LIT+154\r
+       JSA     #FIX\r
+       FSUB    THREE\r
+       FSUB    PROP-3,7\r
+       JNE     #16\r
+/C\r
+/C TRY NEXT ENTRY IN TRAVEL TABLE\r
+/C\r
+/12     IF(TRAVEL(KK).LT.0)CALL BUG(25)\r
+#12,   JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRAVEL\r
+       JA      KK\r
+       JA      ZERO\r
+       JGE     .+10\r
+       JSR     BUG\r
+       JA      .+4\r
+       JA      #LIT+52\r
+/      KK=KK+1\r
+       FLDA    KK\r
+       FSTA    #TMP\r
+       FADD    ONE\r
+       FSTA    KK\r
+\r
+/C MAKE SURE HE DOESN'T GO THROUGH SAME TEST AGAIN\r
+/C\r
+/      IF(TRVCON(KK-1).EQ.TRVCON(KK) .AND. TRVLOC(KK-1).EQ.TRVLOC(KK))\r
+/      1       GOTO 12\r
+       JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRVCON\r
+       JA      #TMP\r
+       JA      ZERO\r
+       FSTA    #TMP+3\r
+       JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRVCON\r
+       JA      KK\r
+       JA      ZERO\r
+       FSUB    #TMP+3\r
+       JNE     #10\r
+\r
+       JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRVLOC\r
+       JA      #TMP\r
+       JA      ZERO\r
+       FSTA    #TMP+3\r
+\r
+       JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRVLOC\r
+       JA      #TMP\r
+       FSUB    #TMP+3\r
+       JEQ     #12\r
+/      GO TO 10\r
+       JA      #10\r
+/C\r
+/13     IF(NEWLOC.LE.100)GOTO 14\r
+#13,   FLDA    NEWLOC\r
+       FSUB    #LIT+154\r
+       JLE     #14\r
+/      IF(TOTING(K).OR.(NEWLOC.GT.200.AND.AT(K)))GOTO 16\r
+       FLDA    K\r
+       JSA     TOTING\r
+       JNE     #16\r
+       DECIMAL\r
+               LDX     200,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    NEWLOC\r
+       JGT     #12\r
+       FLDA    K\r
+       JSA     AT\r
+       JNE     #16\r
+/      GOTO 12\r
+       JA      #12\r
+\r
+/C\r
+/14     IF(NEWLOC.NE.0.AND..NOT.PCT(NEWLOC))GOTO 12\r
+#14,   FLDA    NEWLOC\r
+       JEQ     #16\r
+       JSR     PCT\r
+       JA      .+4\r
+       JA      NEWLOC\r
+       JEQ     #12\r
+\r
+/16     NEWLOC=TRVLOC(KK)\r
+#16,   JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRVLOC\r
+       JA      KK\r
+       JA      ZERO\r
+       FSTA    NEWLOC\r
+/      IF(NEWLOC.LE.300)GOTO 2\r
+       FSUB    #LIT+306\r
+       JLE     #2\r
+/      IF(NEWLOC.LE.500)GOTO 30000\r
+       FLDA    NEWLOC\r
+       FSUB    #LIT+311\r
+       JLE     #30000\r
+/      CALL RSPEAK(NEWLOC-500)\r
+/      FLDA    NEWLOC\r
+/      FSUB    #LIT+311\r
+       FSTA    #TMP\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #TMP\r
+/      NEWLOC=LOC\r
+       FLDA    LOC\r
+       FSTA    NEWLOC\r
+/      GOTO 2\r
+       JA      #2\r
+\r
+/C\r
+/C SPECIAL MOTIONS COME HERE. LABELLING CONVENTION: STATEMENT NUMBERS NNNXX\r
+/C (XX=00-99) ARE USED FOR SPECIAL CASE NUMBER NNN (NNN=301-500).\r
+/C\r
+/30000  NEWLOC=NEWLOC-300\r
+#30000,        FLDA    NEWLOC\r
+       FSUB    #LIT+306\r
+       FSTA    NEWLOC\r
+/      GOTO (30100,30200,30300)NEWLOC\r
+/      FLDA    NEWLOC\r
+       ATX     1\r
+       STARTD\r
+       FLDA    .+2,1\r
+       STARTF\r
+       JAC\r
+       JA      #30100\r
+       JA      #30200\r
+       JA      #30300\r
+/      CALL BUG(20)\r
+       JSR     BUG\r
+       JA      .+4\r
+       JA      #LIT+36\r
+\r
+/C\r
+/C TRAVEL 301. PLOVER-ALCOVE PASSAGE. CAN CARRY ONLY EMERALD. NOTE: TRAVEL\r
+/C TABLE MUST INCLUDE "USELESS" ENTRIES GOING THROUGH PASSAGE, WHICH CAN NEVER\r
+/C BE USED FOR ACTUAL MOTION, BUT CAN BE SPOTTED BY "GO BACK".\r
+/C\r
+/30100  NEWLOC=99+100-LOC\r
+#30100,        FLDA    #LIT+300        /199\r
+       FSUB    LOC\r
+       FSTA    NEWLOC\r
+/      IF(HOLDNG.EQ.0.OR.(HOLDNG.EQ.1.AND.TOTING(EMRALD)))GOTO 2\r
+       FLDA    HOLDNG\r
+       JEQ     #2\r
+       FSUB    ONE\r
+       JNE     #M27\r
+       FLDA    EMRALD\r
+       JSA     TOTING\r
+       JNE     #2\r
+/      NEWLOC=LOC\r
+#M27,  FLDA    LOC\r
+       FSTA    NEWLOC\r
+/      CALL RSPEAK(117)\r
+/      GOTO 2\r
+       JSR     RSPEAK\r
+       JA      #2\r
+       JA      #LIT+173\r
+\r
+/C\r
+/C TRAVEL 302. PLOVER TRANSPORT. DROP THE EMERALD (ONLY USE SPECIAL TRAVEL IF\r
+/C TOTING IT), SO HE'S FORCED TO USE THE PLOVER-PASSAGE TO GET IT OUT. HAVING\r
+/C DROPPED IT, GO BACK AND PRETEND HE WASN'T CARRYING IT AFTER ALL.\r
+/C\r
+/30200  CALL DROP(EMRALD,LOC)\r
+/GOTO 12\r
+#30200,        JSR     DROP\r
+       JA      #12\r
+       JA      EMRALD\r
+       JA      LOC\r
+\r
+/C\r
+/C TRAVEL 303. TROLL BRIDGE. MUST BE DONE ONLY AS SPECIAL MOTION SO THAT\r
+/C DWARVES WON'T WANDER ACROSS AND ENCOUNTER THE BEAR. (THEY WON'T FOLLOW THE\r
+/C PLAYER THERE BECAUSE THAT REGION IS FORBIDDEN TO THE PIRATE.) IF\r
+/C PROP(TROLL)=1, HE'S CROSSED SINCE PAYING, SO STEP OUT AND BLOCK HIM.\r
+/C (STANDARD TRAVEL ENTRIES CHECK FOR PROP(TROLL)=0.) SPECIAL STUFF FOR BEAR.\r
+/C\r
+/30300  IF(PROP(TROLL).NE.1)GOTO 30310\r
+#30300,        FLDA    TROLL\r
+       JSA     RDPROP\r
+       FSUB    ONE\r
+       JNE     #30310\r
+/      CALL PSPEAK(TROLL,1)\r
+       JSR     PSPEAK\r
+       JA      .+6\r
+       JA      TROLL\r
+       JA      ONE\r
+/      PROP(TROLL)=0\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      CALL MOVE(TROLL2,0)\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      TROLL2\r
+       JA      ZERO\r
+/      CALL MOVE(TROLL2+100,0)\r
+       FLDA    TROLL2\r
+       FADD    #LIT+154\r
+       FSTA    #TMP\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      ZERO\r
+/      CALL MOVE(TROLL,PLAC(TROLL))\r
+       FLDA    TROLL\r
+       ATX     7\r
+       FLDA    PLAC-3,7\r
+       FSTA    #TMP\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      TROLL\r
+       JA      #TMP\r
+/      CALL MOVE(TROLL+100,FIXD(TROLL))\r
+       FLDA    TROLL\r
+       ATX     7\r
+       FADD    #LIT+154\r
+       FSTA    #TMP\r
+       FLDA    FIXD-3,7\r
+       FSTA    #TMP+3\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      #TMP+3\r
+/      CALL JUGGLE(CHASM)\r
+       FLDA    CHASM\r
+       JSA     JUGGLE\r
+/      NEWLOC=LOC\r
+       FLDA    LOC\r
+       FSTA    NEWLOC\r
+/      GOTO 2\r
+       JA      #2\r
+\r
+/C\r
+/30310  NEWLOC=PLAC(TROLL)+FIXD(TROLL)-LOC\r
+#30310,        FLDA    TROLL\r
+       ATX     7\r
+       FLDA    PLAC-3,7\r
+       FADD    FIXD-3,7\r
+       FSUB    LOC\r
+       FSTA    NEWLOC\r
+/      IF(PROP(TROLL).EQ.0)PROP(TROLL)=1\r
+       FLDA    PROP-3,7\r
+       JNE     .+5\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+/      IF(.NOT.TOTING(BEAR))GOTO 2\r
+       FLDA    BEAR\r
+       JSA     TOTING\r
+       JEQ     #2\r
+/      CALL RSPEAK(162)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+237\r
+/      PROP(CHASM)=1\r
+       FLDA    CHASM\r
+       ATX     7\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+/       PROP(TROLL)=2\r
+       FLDA    TROLL\r
+       ATX     7\r
+       FLDA    TWO\r
+       FSTA    PROP-3,7\r
+/      CALL DROP(BEAR,NEWLOC)\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      BEAR\r
+       JA      NEWLOC\r
+/      FIXED(BEAR)=-1\r
+       FLDA    BEAR\r
+       ATX     7\r
+       FLDA    MINUS1\r
+       FSTA    FIXED-3,7\r
+/      PROP(BEAR)=3\r
+       FLDA    THREE\r
+       FSTA    PROP-3,7\r
+/      IF(PROP(SPICES).LT.0)TALLY2=TALLY2+1\r
+       FLDA    SPICES\r
+       JSA     RDPROP\r
+       JGE     .+7\r
+       FLDA    TALLY2\r
+       FADD    ONE\r
+       FSTA    TALLY2\r
+/      OLDLC2=NEWLOC\r
+       FLDA    NEWLOC\r
+       FSTA    OLDLC2\r
+/      GOTO 99\r
+       JA      #99\r
+\r
+/C\r
+/C END OF SPECIALS.\r
+/C\r
+/C HANDLE "GO BACK". LOOK FOR VERB WHICH GOES FROM LOC TO OLDLOC, OR TO OLDLC2\r
+/C IF OLDLOC HAS FORCED-MOTION. K2 SAVES ENTRY -> FORCED LOC -> PREVIOUS LOC.\r
+/C\r
+/20     K=OLDLOC\r
+#20,   FLDA    OLDLOC\r
+       FSTA    K\r
+/      IF(FORCED(K))K=OLDLC2\r
+/      FLDA    K\r
+       JSA     FORCED\r
+       JEQ     .+6\r
+       FLDA    OLDLC2\r
+       FSTA    K\r
+/      OLDLC2=OLDLOC\r
+       FLDA    OLDLOC\r
+       FSTA    OLDLC2\r
+/      OLDLOC=LOC\r
+       FLDA    LOC\r
+       FSTA    OLDLOC\r
+/      K2=0\r
+       FCLA\r
+       FSTA    K2\r
+/      IF(K.NE.LOC)GOTO 21\r
+       FLDA    K\r
+       FSUB    LOC\r
+       JNE     #21\r
+/      CALL RSPEAK(91)\r
+/      GOTO 2\r
+       JSR     RSPEAK\r
+       JA      #2\r
+       JA      #LIT+140\r
+\r
+/C\r
+/21     LL=TRVLOC(KK)\r
+#21,   JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRVLOC\r
+       JA      KK\r
+       JA      ZERO\r
+       FSTA    LL\r
+/      IF(LL.EQ.K)GOTO 25\r
+       FSUB    K\r
+       JEQ     #25\r
+/      IF(LL.GT.300)GOTO 22\r
+       FLDA    LL\r
+       FSUB    #LIT+306\r
+       JGT     #22\r
+/      J=KEY(LL)\r
+       FLDA    LL\r
+       ATX     7\r
+       FLDA    KEY-3,7\r
+       FSTA    J\r
+/      IF(FORCED(LL).AND.TRVLOC(KK).EQ.K)K2=KK\r
+       FLDA    LL\r
+       JSA     FORCED\r
+       JEQ     #22\r
+       JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRVLOC\r
+       JA      KK\r
+       JA      ZERO\r
+       FSUB    K\r
+       JNE     #22\r
+       FLDA    KK\r
+       FSTA    K2\r
+/22     IF(TRAVEL(KK).LT.0)GOTO 23\r
+#22,   JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRAVEL\r
+       JA      KK\r
+       JA      ZERO\r
+       JLT     #23\r
+/      KK=KK+1\r
+       FLDA    ONE\r
+       FADDM   KK\r
+/      GOTO 21\r
+       JA      #21\r
+\r
+/C\r
+/23     KK=K2\r
+#23,   FLDA    K2\r
+       FSTA    KK\r
+/      IF(KK.NE.0)GOTO 25\r
+       JNE     #25\r
+/      CALL RSPEAK(140)\r
+/      GOTO 2\r
+       JSR     RSPEAK\r
+       JA      #2\r
+       JA      #LIT+223\r
+\r
+/C\r
+/25     K=IABS(TRAVEL(KK))\r
+#25,   JSR     GETWRD\r
+       JA      .+10\r
+       JA      TRAVEL\r
+       JA      KK\r
+       JA      ZERO\r
+       FSTA    #TMP\r
+       JSR     IABS\r
+       JA      .+4\r
+       JA      #TMP\r
+       FSTA    K\r
+/      KK=KEY(LOC)\r
+       FLDA    LOC\r
+       ATX     7\r
+       FLDA    KEY-3,7\r
+       FSTA    KK\r
+/      GOTO 9\r
+       JA      #9\r
+\r
+/C\r
+/C LOOK. CAN'T GIVE MORE DETAIL. PRETEND IT WASN'T DARK (THOUGH IT MAY "NOW"\r
+/C BE DARK) SO HE WON'T FALL INTO A PIT WHILE STARING INTO THE GLOOM.\r
+/C\r
+/30     IF(DETAIL.LT.3)CALL RSPEAK(15)\r
+#30,   FLDA    DETAIL\r
+       FSUB    THREE\r
+       JGE     .+10\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+25\r
+/      DETAIL=DETAIL+1\r
+       FLDA    ONE\r
+       FADDM   DETAIL\r
+/      WZDARK=.FALSE.\r
+       FCLA\r
+       FSTA    WZDARK\r
+/      ABB(LOC)=0\r
+       FLDA    LOC\r
+       ATX     7\r
+       FCLA\r
+       FSTA    ABB-3,7\r
+/      GOTO 2\r
+       JA      #2\r
+\r
+/C\r
+/C CAVE. DIFFERENT MESSAGES DEPENDING ON WHETHER ABOVE GROUND.\r
+/C\r
+/40     IF(LOC.LT.8)CALL RSPEAK(57)\r
+#40,   FLDA    LOC\r
+       FSUB    #LIT+11\r
+       JGE     .+10\r
+       JSR     RSPEAK\r
+       JA      #2\r
+       JA      #LIT+116\r
+/      IF(LOC.GE.8)CALL RSPEAK(58)\r
+/      GOTO 2\r
+       JSR     RSPEAK\r
+       JA      #2\r
+       JA      #LIT+121\r
+\r
+/C\r
+/C NON-APPLICABLE MOTION. VARIOUS MESSAGES DEPENDING ON WORD GIVEN.\r
+/C\r
+/50     SPK=12\r
+#50,   FLDA    #LIT+22\r
+       FSTA    SPK\r
+/      IF(K.GE.43.AND.K.LE.50)SPK=9\r
+       DECIMAL\r
+               LDX     43,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    K\r
+       JGT     .+7\r
+       FLDA    K\r
+       FSUB    #LIT+110\r
+       JLE     #M31\r
+/      IF(K.EQ.29.OR.K.EQ.30)SPK=9\r
+       FLDA    #LIT+135\r
+       FSUB    K\r
+       JEQ     #M31\r
+       FADD    ONE\r
+       JNE     .+6\r
+#M31,  FLDA    #LIT+14\r
+       FSTA    SPK\r
+       JA      #M32\r
+/      IF(K.EQ.7.OR.K.EQ.36.OR.K.EQ.37)SPK=10\r
+       LDX     7,0\r
+       XTA     0\r
+       FSUB    K\r
+       JEQ     #M34\r
+       DECIMAL\r
+               LDX     36,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    K\r
+       JEQ     #M34\r
+       FADD    ONE\r
+       JNE     #M35\r
+#M34,  FLDA    #LIT+17\r
+       FSTA    SPK\r
+       JA      #M32\r
+/      IF(K.EQ.11.OR.K.EQ.19)SPK=11\r
+#M35,  DECIMAL\r
+               LDX     11,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    K\r
+       JEQ     #M36\r
+       DECIMAL\r
+               LDX     19,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    K\r
+       JNE     #M32\r
+#M36,  DECIMAL\r
+               LDX     11,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(VERB.EQ.FIND.OR.VERB.EQ.INVENT)SPK=59\r
+#M32,  FLDA    VERB\r
+       FSUB    INVENT\r
+       JEQ     #M37\r
+       FLDA    VERB\r
+       FSUB    FIND\r
+       JNE     #M38\r
+#M37,  DECIMAL\r
+               LDX     59,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(K.EQ.62.OR.K.EQ.65)SPK=42\r
+#M38,  FLDA    K\r
+       FSUB    #LIT+124\r
+       JEQ     #M39\r
+       FSUB    THREE\r
+       JNE     #M40\r
+#M39,  DECIMAL\r
+               LDX     42,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(K.EQ.17)SPK=80\r
+#M40,  FLDA    K\r
+       FSUB    #LIT+33\r
+       JNE     #M33\r
+       FLDA    #LIT+325\r
+       FSTA    SPK\r
+/      CALL RSPEAK(SPK)\r
+/      GOTO 2\r
+#M33,  JSR     RSPEAK\r
+       JA      #2\r
+       JA      SPK\r
+\r
+/C "YOU'RE DEAD, JIM."\r
+/C\r
+/C IF THE CURRENT LOC IS ZERO, IT MEANS THE CLOWN GOT HIMSELF KILLED. WE'LL\r
+/C ALLOW THIS MAXDIE TIMES. MAXDIE IS AUTOMATICALLY SET BASED ON THE NUMBER OF\r
+/C SNIDE MESSAGES AVAILABLE. EACH DEATH RESULTS IN A MESSAGE (81, 83, ETC.)\r
+/C WHICH OFFERS REINCARNATION; IF ACCEPTED, THIS RESULTS IN MESSAGE 82, 84,\r
+/C ETC. THE LAST TIME, IF HE WANTS ANOTHER CHANCE, HE GETS A SNIDE REMARK AS\r
+/C WE EXIT. WHEN REINCARNATED, ALL OBJECTS BEING CARRIED GET DROPPED AT OLDLC2\r
+/C (PRESUMABLY THE LAST PLACE PRIOR TO BEING KILLED) WITHOUT CHANGE OF PROPS.\r
+/C THE LOOP RUNS BACKWARDS TO ASSURE THAT THE BIRD IS DROPPED BEFORE THE CAGE.\r
+/C (THIS KLUGE COULD BE CHANGED ONCE WE'RE SURE ALL REFERENCES TO BIRD AND CAGE\r
+/C ARE DONE BY KEYWORDS.) THE LAMP IS A SPECIAL CASE (IT WOULDN'T DO TO LEAVE\r
+/C IT IN THE CAVE). IT IS TURNED OFF AND LEFT OUTSIDE THE BUILDING (ONLY IF HE\r
+/C WAS CARRYING IT, OF COURSE). HE HIMSELF IS LEFT INSIDE THE BUILDING (AND\r
+/C HEAVEN HELP HIM IF HE TRIES TO XYZZY BACK INTO THE CAVE WITHOUT THE LAMP!).\r
+/C OLDLOC IS ZAPPED SO HE CAN'T JUST "RETREAT".\r
+/C\r
+/C THE EASIEST WAY TO GET KILLED IS TO FALL INTO A PIT IN PITCH DARKNESS.\r
+/C\r
+/90     CALL RSPEAK(23)\r
+#90,   JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+44\r
+/      OLDLC2=LOC\r
+       FLDA    LOC\r
+       FSTA    OLDLC2\r
+/C\r
+/C OKAY, HE'S DEAD. LET'S GET ON WITH IT.\r
+/C\r
+/99     IF(CLOSNG)GOTO 95\r
+#99,   FLDA    CLOSNG\r
+       JNE     #95\r
+/      YEA=YES(81+NUMDIE*2,82+NUMDIE*2,54)\r
+       FLDA    NUMDIE\r
+       FADD    NUMDIE\r
+       FADD    #LIT+132\r
+       FSTA    #TMP\r
+       FADD    ONE\r
+       FSTA    #TMP+3\r
+       JSR     YES\r
+       JA      .+10\r
+       JA      #TMP\r
+       JA      #TMP+3\r
+       JA      #LIT+113\r
+       FSTA    YEA\r
+/      NUMDIE=NUMDIE+1\r
+       FLDA    NUMDIE\r
+       FADD    ONE\r
+       FSTA    NUMDIE\r
+/      IF(NUMDIE.EQ.MAXDIE.OR..NOT.YEA)GOTO 20000\r
+       FSUB    MAXDIE\r
+       JEQ     #20000\r
+       FLDA    YEA\r
+       JEQ     #20000\r
+/      PLACE(WATER)=0\r
+       FLDA    WATER\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PLACE-3,7\r
+/      PLACE(OIL)=0\r
+       FLDA    OIL\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PLACE-3,7\r
+/      IF(TOTING(LAMP))PROP(LAMP)=0\r
+       FLDA    LAMP\r
+       JSA     TOTING\r
+       JEQ     .+5\r
+       FCLA\r
+       FSTA    PROP-3,3\r
+/      DO 98 J=1,100\r
+       FLDA    ONE\r
+       FSTA    J\r
+\r
+/      I=101-J\r
+#G0150,        DECIMAL\r
+               LDX     101,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    J\r
+       FSTA    I\r
+/      IF(.NOT.TOTING(I))GOTO 98\r
+       JSA     TOTING\r
+       JEQ     #98\r
+/      K=OLDLC2\r
+       FLDA    OLDLC2\r
+       FSTA    K\r
+/      IF(I.EQ.LAMP)K=1\r
+       FLDA    I\r
+       FSUB    LAMP\r
+       JNE     .+5\r
+       FLDA    ONE\r
+       FSTA    K\r
+/      CALL DROP(I,K)\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      I\r
+       JA      K\r
+\r
+/98     CONTINUE\r
+#98,   FLDA    J\r
+       FADD    ONE\r
+       FSTA    J\r
+       FSUB    #LIT+154\r
+       JLE     #G0150\r
+/      LOC=3\r
+       FLDA    THREE\r
+/      OLDLOC=LOC\r
+       FSTA    LOC\r
+       FSTA    OLDLOC\r
+/      GOTO 2000\r
+       JA      #2000\r
+\r
+/C\r
+/C HE DIED DURING CLOSING TIME. NO RESURRECTION. TALLY UP A DEATH AND EXIT.\r
+/C\r
+/95     CALL RSPEAK(131)\r
+#95,   JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+212\r
+/      NUMDIE=NUMDIE+1\r
+       FLDA    ONE\r
+       FADDM   NUMDIE\r
+/      GOTO 20000\r
+       JA      #20000\r
+\r
+/C ROUTINES FOR PERFORMING THE VARIOUS ACTION VERBS\r
+/C\r
+/C STATEMENT NUMBERS IN THIS SECTION ARE 8000 FOR INTRANSITIVE VERBS, 9000 FOR\r
+/C TRANSITIVE, PLUS TEN TIMES THE VERB NUMBER. MANY INTRANSITIVE VERBS USE THE\r
+/C TRANSITIVE CODE, AND SOME VERBS USE CODE FOR OTHER VERBS, AS NOTED BELOW.\r
+/C\r
+/C RANDOM INTRANSITIVE VERBS COME HERE. CLEAR OBJ JUST IN CASE (SEE "ATTACK").\r
+/C\r
+/8000   TYPE 8002\r
+#8000, JSA     SPRINT\r
+       JA      #8002\r
+       JA      TWO\r
+\r
+/8002   FORMAT(' I don''t understand "',$)\r
+/      CALL A5TOA1(WD1,WD1A,WD1X,'".')\r
+       JSR     A5TOA1\r
+       JA      .+10\r
+       JA      WD1\r
+       JA      WD1X\r
+       JA      TQDOT\r
+/      OBJ=0\r
+       FCLA\r
+       FSTA    OBJ\r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #LINEF+2\r
+       TRAP3   #RENDO\r
+/      GOTO 2600\r
+       JA      #2600\r
+\r
+/C\r
+/C CARRY, NO OBJECT GIVEN YET. OK IF ONLY ONE OBJECT PRESENT.\r
+/C\r
+/8010   IF(ATLOC(LOC).EQ.0.OR.LINK(ATLOC(LOC)).NE.0)GOTO 8000\r
+#8010, FLDA    LOC\r
+       ATX     7\r
+       FLDA    ATLOC-3,7\r
+       JEQ     #8000\r
+       ATX     6\r
+       FLDA    LINK-3,6\r
+       JNE     #8000\r
+/      DO 8012 I=1,5\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/      IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2)GOTO 8000\r
+#G0152,        FLDA    I\r
+       ATX     7\r
+       FLDA    DLOC-3,7\r
+       FSUB    LOC\r
+       JNE     #8012\r
+       FLDA    DFLAG\r
+       FSUB    TWO\r
+       JGE     #8000\r
+\r
+/8012   CONTINUE\r
+#8012, FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+3\r
+       JLE     #G0152\r
+/      OBJ=ATLOC(LOC)\r
+       FLDA    LOC\r
+       ATX     7\r
+       FLDA    ATLOC-3,7\r
+       FSTA    OBJ\r
+\r
+/C\r
+/C CARRY AN OBJECT. SPECIAL CASES FOR BIRD AND CAGE (IF BIRD IN CAGE, CAN'T\r
+/C TAKE ONE WITHOUT THE OTHER. LIQUIDS ALSO SPECIAL, SINCE THEY DEPEND ON\r
+/C STATUS OF BOTTLE. ALSO VARIOUS SIDE EFFECTS, ETC.\r
+/C\r
+/9010   IF(TOTING(OBJ))GOTO 2011\r
+#9010, FLDA    OBJ\r
+       JSA     TOTING\r
+       JNE     #2011\r
+/      SPK=25\r
+       FLDA    #LIT+52\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.PLANT.AND.PROP(PLANT).LE.0)SPK=115\r
+       FLDA    OBJ\r
+       FSUB    PLANT\r
+       JNE     .+12\r
+       FLDA    PLANT\r
+       JSA     RDPROP\r
+       JGT     .+4\r
+       FLDA    #LIT+165\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.BEAR.AND.PROP(BEAR).EQ.1)SPK=169\r
+       FLDA    OBJ\r
+       FSUB    BEAR\r
+       JNE     .+15\r
+       FLDA    BEAR\r
+       JSA     RDPROP\r
+       FSUB    ONE\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     169,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.CHAIN.AND.PROP(BEAR).NE.0)SPK=170\r
+       FLDA    OBJ\r
+       FSUB    CHAIN\r
+       JNE     .+14\r
+       FLDA    BEAR\r
+       JSA     RDPROP\r
+       JEQ     .+6\r
+       DECIMAL\r
+               LDX     170,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(FIXED(OBJ).NE.0)GOTO 2011\r
+       FLDA    OBJ\r
+       ATX     7\r
+       FLDA    FIXED-3,7\r
+       JNE     #2011\r
+/      IF(OBJ.NE.WATER.AND.OBJ.NE.OIL)GOTO 9017\r
+       FLDA    OBJ\r
+       FSUB    WATER\r
+       JEQ     .+10\r
+       FLDA    OBJ\r
+       FSUB    OIL\r
+       JNE     #9017\r
+/      IF(HERE(BOTTLE).AND.LIQ(0).EQ.OBJ)GOTO 9018\r
+       FLDA    BOTTLE\r
+       JSA     HERE\r
+       JEQ     .+10\r
+       JSA     LIQ\r
+       FSUB    OBJ\r
+       JEQ     #9018\r
+/      OBJ=BOTTLE\r
+       FLDA    BOTTLE\r
+       FSTA    OBJ\r
+/      IF(TOTING(BOTTLE).AND.PROP(BOTTLE).EQ.1)GOTO 9220\r
+       FLDA    BOTTLE\r
+       JSA     TOTING\r
+       JEQ     .+7\r
+       FLDA    PROP-3,3\r
+       FSUB    ONE\r
+       JEQ     #9220\r
+\r
+/      IF(PROP(BOTTLE).NE.1)SPK=105\r
+       FLDA    PROP-3,3\r
+       FSUB    ONE\r
+       JEQ     .+4\r
+       FLDA    #LIT+157\r
+       FSTA    SPK\r
+/      IF(.NOT.TOTING(BOTTLE))SPK=104\r
+       FLDA    BOTTLE\r
+       JSA     TOTING\r
+       JNE     #2011\r
+       DECIMAL\r
+               LDX     104,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/9018   OBJ=BOTTLE\r
+#9018, FLDA    BOTTLE\r
+       FSTA    OBJ\r
+\r
+/9017   IF(HOLDNG.LT.7)GOTO 9016\r
+#9017, LDX     7,0\r
+       XTA     0\r
+       FSUB    HOLDNG\r
+       JGE     #9016\r
+/      CALL RSPEAK(92)\r
+       JSR     RSPEAK\r
+       JA      #2012\r
+       JA      #LIT+143\r
+/      GOTO 2012\r
+\r
+/9016   IF(OBJ.NE.BIRD)GOTO 9014\r
+#9016, FLDA    OBJ\r
+       FSUB    BIRD\r
+       JNE     #9014\r
+/      IF(PROP(BIRD).NE.0)GOTO 9014\r
+       FLDA    BIRD\r
+       JSA     RDPROP\r
+       JNE     #9014\r
+/      IF(.NOT.TOTING(ROD))GOTO 9013\r
+       FLDA    ROD\r
+       JSA     TOTING\r
+       JEQ     #9013\r
+/      CALL RSPEAK(26)\r
+       JSR     RSPEAK\r
+       JA      #2012\r
+       JA      #LIT+55\r
+/      GOTO 2012\r
+\r
+/9013   IF(TOTING(CAGE))GOTO 9015\r
+#9013, FLDA    CAGE\r
+       JSA     TOTING\r
+       JNE     #9015\r
+/      CALL RSPEAK(27)\r
+       JSR     RSPEAK\r
+       JA      #2012\r
+       JA      #LIT+60\r
+/      GOTO 2012\r
+\r
+/9015   PROP(BIRD)=1\r
+#9015, FLDA    BIRD\r
+       ATX     7\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+\r
+/9014   IF((OBJ.EQ.BIRD.OR.OBJ.EQ.CAGE).AND.PROP(BIRD).NE.0)\r
+/      1       CALL CARRY(BIRD+CAGE-OBJ,LOC)\r
+#9014, FLDA    OBJ\r
+       FSUB    BIRD\r
+       JEQ     .+10\r
+       FLDA    OBJ\r
+       FSUB    CAGE\r
+       JNE     .+27\r
+       FLDA    BIRD\r
+       JSA     RDPROP\r
+       JEQ     .+21\r
+       FLDA    BIRD\r
+       FADD    CAGE\r
+       FSUB    OBJ\r
+       FSTA    #TMP\r
+       JSR     CARRY\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      LOC\r
+/      CALL CARRY(OBJ,LOC)\r
+       JSR     CARRY\r
+       JA      .+6\r
+       JA      OBJ\r
+       JA      LOC\r
+/      K=LIQ(0)\r
+       JSA     LIQ\r
+       FSTA    K\r
+/      IF(OBJ.EQ.BOTTLE.AND.K.NE.0)PLACE(K)=-1\r
+       FLDA    OBJ\r
+       FSUB    BOTTLE\r
+       JNE     #2009A\r
+       FLDA    K\r
+       JEQ     #2009A\r
+       ATX     7\r
+       FLDA    MINUS1\r
+       FSTA    PLACE-3,7\r
+/      GOTO 2009\r
+#2009A,        DECIMAL\r
+               LDX     202,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    K       /RHM - "Taken" message\r
+       JA      #2010\r
+\r
+/C\r
+/C DISCARD OBJECT. "THROW" ALSO COMES HERE FOR MOST OBJECTS. SPECIAL CASES FOR\r
+/C BIRD (MIGHT ATTACK SNAKE OR DRAGON) AND CAGE (MIGHT CONTAIN BIRD) AND VASE.\r
+/C DROP COINS AT VENDING MACHINE FOR EXTRA BATTERIES.\r
+/C\r
+/9020   IF(TOTING(ROD2).AND.OBJ.EQ.ROD.AND..NOT.TOTING(ROD))OBJ=ROD2\r
+#9020, FLDA    ROD2\r
+       JSA     TOTING\r
+       JEQ     .+22\r
+       FLDA    OBJ\r
+       FSUB    ROD\r
+       JNE     .+14\r
+       FLDA    ROD\r
+       JSA     TOTING\r
+       JNE     .+6\r
+       FLDA    ROD2\r
+       FSTA    OBJ\r
+/      IF(.NOT.TOTING(OBJ))GOTO 2011\r
+       FLDA    OBJ\r
+       JSA     TOTING\r
+       JEQ     #2011\r
+/      IF(OBJ.NE.BIRD.OR..NOT.HERE(SNAKE))GOTO 9024\r
+       FLDA    OBJ\r
+       FSUB    BIRD\r
+       JNE     #9024\r
+       FLDA    SNAKE\r
+       JSA     HERE\r
+       JEQ     #9024\r
+/      CALL RSPEAK(30)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+63\r
+/      IF(CLOSED)GOTO 19000\r
+       FLDA    CLOSED\r
+       JNE     #19000\r
+/      CALL DSTROY(SNAKE)\r
+       FLDA    SNAKE\r
+       JSA     DSTROY\r
+/C\r
+/C SET PROP FOR USE BY TRAVEL OPTIONS\r
+/C\r
+/      PROP(SNAKE)=1\r
+       FLDA    SNAKE\r
+       ATX     7\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+\r
+/9021   K=LIQ(0)\r
+#9021, JSA     LIQ\r
+       FSTA    K\r
+/      IF(K.EQ.OBJ)OBJ=BOTTLE\r
+       FSUB    OBJ\r
+       JNE     .+6\r
+       FLDA    BOTTLE\r
+       FSTA    OBJ\r
+/      IF(OBJ.EQ.BOTTLE.AND.K.NE.0)PLACE(K)=0\r
+       FLDA    OBJ\r
+       FSUB    BOTTLE\r
+       JNE     .+12\r
+       FLDA    K\r
+       JEQ     .+6\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PLACE-3,7\r
+/      IF(OBJ.EQ.CAGE.AND.PROP(BIRD).NE.0)CALL DROP(BIRD,LOC)\r
+       FLDA    OBJ\r
+       FSUB    CAGE\r
+       JNE     .+20\r
+       FLDA    BIRD\r
+       JSA     RDPROP\r
+       JEQ     .+12\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      BIRD\r
+       JA      LOC\r
+/      IF(OBJ.EQ.BIRD)PROP(BIRD)=0\r
+       FLDA    OBJ\r
+       FSUB    BIRD\r
+       JNE     .+10\r
+       FLDA    BIRD\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      CALL DROP(OBJ,LOC)\r
+       JSR     DROP\r
+/      GO TO 2012\r
+       JA      #2012\r
+/\r
+       JA      OBJ\r
+       JA      LOC\r
+\r
+/C\r
+/9024   IF(OBJ.NE.COINS.OR..NOT.HERE(VEND))GOTO 9025\r
+#9024, FLDA    OBJ\r
+       FSUB    COINS\r
+       JNE     #9025\r
+       FLDA    VEND\r
+       JSA     HERE\r
+       JEQ     #9025\r
+/      CALL DSTROY(COINS)\r
+       FLDA    COINS\r
+       JSA     DSTROY\r
+/      CALL DROP(BATTER,LOC)\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      BATTER\r
+       JA      LOC\r
+/      CALL PSPEAK(BATTER,0)\r
+       JSR     PSPEAK\r
+       JA      .+6\r
+       JA      BATTER\r
+       JA      ZERO\r
+/      GOTO 2012\r
+       JA      #2012\r
+\r
+\f/C\r
+/9025   IF(OBJ.NE.BIRD.OR..NOT.AT(DRAGON).OR.PROP(DRAGON).NE.0)GOTO 9026\r
+#9025, FLDA    OBJ\r
+       FSUB    BIRD\r
+       JNE     #9026\r
+       FLDA    DRAGON\r
+       JSA     AT\r
+       JEQ     #9026\r
+/      FLDA    DRAGON\r
+/      ATX     3\r
+       FLDA    PROP-3,3\r
+       JNE     #9026\r
+/      CALL RSPEAK(154)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+333\r
+/      CALL DSTROY(BIRD)\r
+       FLDA    BIRD\r
+       JSA     DSTROY\r
+/      PROP(BIRD)=0\r
+       FLDA    BIRD\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      IF(PLACE(SNAKE).EQ.PLAC(SNAKE))TALLY2=TALLY2+1\r
+       FLDA    SNAKE\r
+       ATX     7\r
+       FLDA    PLACE-3,7\r
+       FSUB    PLAC-3,7\r
+       JNE     #2012\r
+       FLDA    TALLY2\r
+       FADD    ONE\r
+       FSTA    TALLY2\r
+/      GOTO 2012\r
+       JA      #2012\r
+\r
+/C\r
+/9026   IF(OBJ.NE.BEAR.OR..NOT.AT(TROLL))GOTO 9027\r
+#9026, FLDA    OBJ\r
+       FSUB    BEAR\r
+       JNE     #9027\r
+       FLDA    TROLL\r
+       JSA     AT\r
+       JEQ     #9027\r
+/      CALL RSPEAK(163)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+242\r
+/      CALL MOVE(TROLL,0)\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      TROLL\r
+       JA      ZERO\r
+/      CALL MOVE(TROLL+100,0)\r
+       FLDA    TROLL\r
+       FADD    #LIT+154\r
+       FSTA    #TMP\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      ZERO\r
+/      CALL MOVE(TROLL2,PLAC(TROLL))\r
+       FLDA    TROLL\r
+       ATX     7\r
+       FLDA    PLAC-3,7\r
+       FSTA    #TMP\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      TROLL2\r
+       JA      #TMP\r
+/      CALL MOVE(TROLL2+100,FIXD(TROLL))\r
+       FLDA    TROLL2\r
+       FADD    #LIT+154\r
+       FSTA    #TMP\r
+/      FLDA    TROLL\r
+/      ATX     7\r
+       FLDA    FIXD-3,7\r
+       FSTA    #TMP+3\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      #TMP+3\r
+/      CALL JUGGLE(CHASM)\r
+       FLDA    CHASM\r
+       JSA     JUGGLE\r
+/      PROP(TROLL)=2\r
+/      FLDA    TROLL\r
+/      ATX     7\r
+       FLDA    TWO\r
+       FSTA    PROP-3,7\r
+/      GOTO 9021\r
+       JA      #9021\r
+\r
+/C\r
+/9027   IF(OBJ.EQ.VASE.AND.LOC.NE.PLAC(PILLOW))GOTO 9028\r
+#9027, FLDA    OBJ\r
+       FSUB    VASE\r
+       JNE     .+13\r
+       FLDA    PILLOW\r
+       ATX     7\r
+       FLDA    LOC\r
+       FSUB    PLAC-3,7\r
+       JNE     #9028\r
+/      CALL RSPEAK(54)\r
+       JSR     RSPEAK\r
+       JA      #9021\r
+       JA      #LIT+113\r
+/      GOTO 9021\r
+\r
+/C\r
+/9028   PROP(VASE)=2\r
+#9028, FLDA    VASE\r
+       ATX     7\r
+       FLDA    TWO\r
+       FSTA    PROP-3,7\r
+/      IF(AT(PILLOW))PROP(VASE)=0\r
+       FLDA    PILLOW\r
+       JSA     AT\r
+       JEQ     .+10\r
+       FLDA    VASE\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      CALL PSPEAK(VASE,PROP(VASE)+1)\r
+       FLDA    VASE\r
+       JSA     RDPROP\r
+       FADD    ONE\r
+       FSTA    #TMP\r
+       JSR     PSPEAK\r
+       JA      .+6\r
+       JA      VASE\r
+       JA      #TMP\r
+/      IF(PROP(VASE).NE.0)FIXED(VASE)=-1\r
+       FLDA    VASE\r
+       ATX     7\r
+       FLDA    PROP-3,7\r
+       JEQ     #9021\r
+       FLDA    MINUS1\r
+       FSTA    FIXED-3,7\r
+/      GOTO 9021\r
+       JA      #9021\r
+\r
+/C\r
+/C SAY. ECHO WD2 (OR WD1 IF NO WD2 (SAY WHAT?, ETC.).) MAGIC WORDS OVERRIDE.\r
+/C\r
+/9030   IF(WD2.EQ.0)GOTO 9031\r
+#9030, FLDA    WD2\r
+       JEQ     #9031\r
+/      WD1=WD2 WD1A=WD2A\r
+       FLDA    WD2\r
+       FSTA    WD1\r
+/      WD1X=WD2X\r
+       FLDA    WD2X\r
+       FSTA    WD1X\r
+\r
+/9031   CALL VOCAB(WD1,WD1A,-1,I)\r
+#9031, JSR     VOCAB\r
+       JA      .+6\r
+       JA      WD1\r
+       JA      MINUS1\r
+       FSTA    I\r
+/      IF(I.EQ.62.OR.I.EQ.65.OR.I.EQ.71.OR.I.EQ.2025)GOTO 9035\r
+       FSUB    #LIT+124\r
+       JEQ     #9035\r
+       FSUB    THREE\r
+       JEQ     #9035\r
+       FSUB    #LIT+3\r
+       JEQ     #9035\r
+       DECIMAL\r
+               LDX     2025,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    I\r
+       JEQ     #9035\r
+/      TYPE 9032\r
+       JSA     SPRINT\r
+       JA      #9032\r
+       JA      TWO\r
+/9032   FORMAT(' Okay, "',$)\r
+/      CALL A5TOA1(WD1,WD1A,WD1X,'".')\r
+       JSR     A5TOA1\r
+       JA      #2012\r
+       JA      WD1\r
+       JA      WD1X\r
+       JA      TQDOT\r
+/      GOTO 2012\r
+\r
+/C\r
+/9035   WD2=0\r
+#9035, FCLA\r
+       FSTA    WD2\r
+/      OBJ=0\r
+       FSTA    OBJ\r
+/      GOTO 2630\r
+       JA      #2630\r
+\r
+/C\r
+/C LOCK, UNLOCK, NO OBJECT GIVEN. ASSUME VARIOUS THINGS IF PRESENT.\r
+/C\r
+/8040   SPK=28\r
+#8040, DECIMAL\r
+               LDX     28,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(HERE(CLAM))OBJ=CLAM\r
+       FLDA    CLAM\r
+       JSA     HERE\r
+       JEQ     .+6\r
+       FLDA    CLAM\r
+       FSTA    OBJ\r
+/      IF(HERE(OYSTER))OBJ=OYSTER\r
+       FLDA    OYSTER\r
+       JSA     HERE\r
+       JEQ     .+6\r
+       FLDA    OYSTER\r
+       FSTA    OBJ\r
+/      IF(AT(DOOR))OBJ=DOOR\r
+       FLDA    DOOR\r
+       JSA     AT\r
+       JEQ     .+6\r
+       FLDA    DOOR\r
+       FSTA    OBJ\r
+/      IF(AT(GRATE))OBJ=GRATE\r
+       FLDA    GRATE\r
+       JSA     AT\r
+       JEQ     .+6\r
+       FLDA    GRATE\r
+       FSTA    OBJ\r
+/      IF(OBJ.NE.0.AND.HERE(CHAIN))GOTO 8000\r
+       FLDA    OBJ\r
+       JEQ     .+10\r
+       FLDA    CHAIN\r
+       JSA     HERE\r
+       JNE     #8000\r
+/      IF(HERE(CHAIN))OBJ=CHAIN\r
+       FLDA    CHAIN\r
+       JSA     HERE\r
+       JEQ     .+6\r
+       FLDA    CHAIN\r
+       FSTA    OBJ\r
+/      IF(OBJ.EQ.0)GOTO 2011\r
+       FLDA    OBJ\r
+       JEQ     #2011\r
+\r
+/C\r
+/C LOCK, UNLOCK OBJECT. SPECIAL STUFF FOR OPENING CLAM/OYSTER AND FOR CHAIN.\r
+/C\r
+/9040   IF(OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER)GOTO 9046\r
+#9040, FLDA    OBJ\r
+       FSUB    CLAM\r
+       JEQ     #9046\r
+       FLDA    OBJ\r
+       FSUB    OYSTER\r
+       JEQ     #9046\r
+/      IF(OBJ.EQ.DOOR)SPK=111\r
+       FLDA    OBJ\r
+       FSUB    DOOR\r
+       JNE     #9040A\r
+       DECIMAL\r
+               LDX     111,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.DOOR.AND.PROP(DOOR).EQ.1)SPK=54\r
+#9040A,        FLDA    OBJ\r
+       FSUB    DOOR\r
+       JNE     .+13\r
+       FLDA    DOOR\r
+       JSA     RDPROP\r
+       FSUB    ONE\r
+       JEQ     .+4\r
+       FLDA    #LIT+113\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.CAGE)SPK=32\r
+       FLDA    OBJ\r
+       FSUB    CAGE\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     32,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.KEYS)SPK=55\r
+       FLDA    OBJ\r
+       FSUB    KEYS\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     55,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.GRATE.OR.OBJ.EQ.CHAIN)SPK=31\r
+       FLDA    OBJ\r
+       FSUB    GRATE\r
+       JEQ     .+10\r
+       FLDA    OBJ\r
+       FSUB    CHAIN\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     31,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(SPK.NE.31.OR..NOT.HERE(KEYS))GOTO 2011\r
+       DECIMAL\r
+               LDX     31,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    SPK\r
+       JNE     #2011\r
+       FLDA    KEYS\r
+       JSA     HERE\r
+       JEQ     #2011\r
+/      IF(OBJ.EQ.CHAIN)GOTO 9048\r
+       FLDA    OBJ\r
+       FSUB    CHAIN\r
+       JEQ     #9048\r
+/      IF(.NOT.CLOSNG)GOTO 9043\r
+       FLDA    CLOSNG\r
+       JEQ     #9043\r
+/      K=130\r
+       FLDA    #LIT+207\r
+       FSTA    K\r
+/      IF(.NOT.PANIC)CLOCK2=15\r
+       FLDA    PANIC\r
+       JNE     .+5\r
+       FLDA    #LIT+25\r
+       FSTA    CLOCK2\r
+/      PANIC=.TRUE.\r
+       FLDA    ONE\r
+       FSTA    PANIC\r
+/      GOTO 2010\r
+       JA      #2010\r
+\r
+/C\r
+/9043   K=34+PROP(GRATE)\r
+#9043, FLDA    GRATE\r
+       ATX     7\r
+       DECIMAL\r
+               LDX     34,0\r
+       OCTAL\r
+       XTA     0\r
+       FADD    PROP-3,7\r
+       FSTA    K\r
+/      IF(VERB.EQ.LOCK)PROP(GRATE)=0\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+       FLDA    VERB\r
+       FSUB    LOCK\r
+       JNE     .+4\r
+/      FCLA                    / already zero\r
+       FSTA    PROP-3,7\r
+/      K=K+2*PROP(GRATE)\r
+       FLDA    TWO\r
+       FMUL    PROP-3,7\r
+       FADD    K\r
+       FSTA    K\r
+/      GOTO 2010\r
+       JA      #2010\r
+\r
+/C\r
+/C CLAM/OYSTER.\r
+/C\r
+/9046   K=0\r
+#9046, FCLA\r
+       FSTA    K\r
+/      IF(OBJ.EQ.OYSTER)K=1\r
+       FLDA    OBJ\r
+       FSUB    OYSTER\r
+       JNE     .+5\r
+       FLDA    ONE\r
+       FSTA    K\r
+/      SPK=124+K\r
+       DECIMAL\r
+               LDX     124,0\r
+       OCTAL\r
+       XTA     0\r
+       FADD    K\r
+       FSTA    SPK\r
+/      IF(TOTING(OBJ))SPK=120+K\r
+       FLDA    OBJ\r
+       JSA     TOTING\r
+       JEQ     #9046A\r
+       DECIMAL\r
+               LDX     120,0\r
+       OCTAL\r
+       XTA     0\r
+       FADD    K\r
+       FSTA    SPK\r
+/      IF(.NOT.TOTING(TRIDNT))SPK=122+K\r
+#9046A,        FLDA    TRIDNT\r
+       JSA     TOTING\r
+       JNE     .+10\r
+       DECIMAL\r
+               LDX     122,0\r
+       OCTAL\r
+       XTA     0\r
+       FADD    K\r
+       FSTA    SPK\r
+/      IF(VERB.EQ.LOCK)SPK=61\r
+       FLDA    VERB\r
+       FSUB    LOCK\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     61,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(SPK.NE.124)GOTO 2011\r
+       DECIMAL\r
+               LDX     124,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    SPK\r
+       JNE     #2011\r
+/      CALL DSTROY(CLAM)\r
+       FLDA    CLAM\r
+       JSA     DSTROY\r
+/      CALL DROP(OYSTER,LOC)\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      OYSTER\r
+       JA      LOC\r
+/      CALL DROP(PEARL,105)\r
+       JSR     DROP\r
+       JA      #2011\r
+       JA      PEARL\r
+       JA      #LIT+157\r
+/      GOTO 2011\r
+\r
+/C\r
+/C CHAIN.\r
+/C\r
+/9048   IF(VERB.EQ.LOCK)GOTO 9049\r
+#9048, FLDA    VERB\r
+       FSUB    LOCK\r
+       JEQ     #9049\r
+/      SPK=171\r
+       DECIMAL\r
+               LDX     171,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(PROP(BEAR).EQ.0)SPK=41\r
+       FLDA    BEAR\r
+       JSA     RDPROP\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     41,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(PROP(CHAIN).EQ.0)SPK=37\r
+       FLDA    CHAIN\r
+       JSA     RDPROP\r
+       JNE     .+4\r
+       FLDA    #LIT+71\r
+       FSTA    SPK\r
+/      IF(SPK.NE.171)GOTO 2011\r
+       DECIMAL\r
+               LDX     171,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    SPK\r
+       JNE     #2011\r
+/      PROP(CHAIN)=0\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      FIXED(CHAIN)=0\r
+       FSTA    FIXED-3,7\r
+/      IF(PROP(BEAR).NE.3)PROP(BEAR)=2\r
+       FLDA    BEAR\r
+       JSA     RDPROP\r
+       FSUB    THREE\r
+       JEQ     .+5\r
+       FLDA    TWO\r
+       FSTA    PROP-3,7\r
+/      FIXED(BEAR)=2-PROP(BEAR)\r
+       FLDA    TWO\r
+       FSUB    PROP-3,7\r
+       FSTA    FIXED-3,7\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/9049   SPK=172\r
+#9049, DECIMAL\r
+               LDX     172,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(PROP(CHAIN).NE.0)SPK=34\r
+       FLDA    CHAIN\r
+       JSA     RDPROP\r
+       JEQ     .+6\r
+       DECIMAL\r
+               LDX     34,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(LOC.NE.PLAC(CHAIN))SPK=173\r
+       FLDA    LOC\r
+       FSUB    PLAC-3,7\r
+       JEQ     .+6\r
+       DECIMAL\r
+               LDX     173,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(SPK.NE.172)GOTO 2011\r
+       DECIMAL\r
+               LDX     172,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    SPK\r
+       JNE     #2011\r
+/      PROP(CHAIN)=2\r
+       FLDA    TWO\r
+       FSTA    PROP-3,7\r
+/      IF(TOTING(CHAIN))CALL DROP(CHAIN,LOC)\r
+       FLDA    CHAIN\r
+       JSA     TOTING\r
+       JEQ     .+12\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      CHAIN\r
+       JA      LOC\r
+/      FIXED(CHAIN)=-1\r
+       FLDA    MINUS1\r
+       FSTA    FIXED-3,7\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C LIGHT LAMP\r
+/C\r
+/9070   IF(.NOT.HERE(LAMP))GOTO 2011\r
+#9070, FLDA    LAMP\r
+       JSA     HERE\r
+       JEQ     #2011\r
+/      SPK=184\r
+       FLDA    #LIT+253\r
+       FSTA    SPK\r
+/      IF(LIMIT.LT.0)GOTO 2011\r
+       FLDA    LIMIT\r
+       JLT     #2011\r
+/      PROP(LAMP)=1\r
+       FLDA    LAMP\r
+       ATX     7\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+/      CALL RSPEAK(39)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+74\r
+/      IF(WZDARK)GOTO 2000\r
+       FLDA    WZDARK\r
+       JNE     #2000\r
+/      GOTO 2012\r
+       JA      #2012\r
+\r
+/C\r
+/C LAMP OFF\r
+/C\r
+/9080   IF(.NOT.HERE(LAMP))GOTO 2011\r
+#9080, FLDA    LAMP\r
+       ATX     7\r
+       JSA     HERE\r
+       JEQ     #2011\r
+/      PROP(LAMP)=0\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      CALL RSPEAK(40)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+77\r
+/      IF(DARK(0))CALL RSPEAK(16)\r
+       JSA     DARK\r
+       JEQ     #2012\r
+       JSR     RSPEAK\r
+       JA      #2012\r
+       JA      #LIT+30\r
+/      GOTO 2012\r
+\r
+/C\r
+/C WAVE. NO EFFECT UNLESS WAVING ROD AT FISSURE.\r
+/C\r
+/9090   IF((.NOT.TOTING(OBJ)).AND.(OBJ.NE.ROD.OR..NOT.TOTING(ROD2)))\r
+/      1        SPK=29\r
+#9090, FLDA    OBJ\r
+       JSA     TOTING\r
+       JNE     .+20\r
+       FLDA    OBJ\r
+       FSUB    ROD\r
+       JNE     .+12\r
+       FLDA    ROD2\r
+       JSA     TOTING\r
+       JNE     .+4\r
+       FLDA    #LIT+135\r
+       FSTA    SPK\r
+/      IF(OBJ.NE.ROD.OR..NOT.AT(FISSUR).OR..NOT.TOTING(OBJ)\r
+/      1       .OR.CLOSNG)GOTO 2011\r
+       FLDA    OBJ\r
+       FSUB    ROD\r
+       JNE     #2011\r
+       FLDA    FISSUR\r
+       JSA     AT\r
+       JEQ     #2011\r
+       FLDA    OBJ\r
+       JSA     TOTING\r
+       JEQ     #2011\r
+       FLDA    CLOSNG\r
+       JNE     #2011\r
+/      PROP(FISSUR)=1-PROP(FISSUR)\r
+       FLDA    FISSUR\r
+       ATX     7\r
+       FLDA    ONE\r
+       FSUB    PROP-3,7\r
+       FSTA    PROP-3,7\r
+/      CALL PSPEAK(FISSUR,2-PROP(FISSUR))\r
+       FLDA    FISSUR\r
+       ATX     7\r
+       FLDA    TWO\r
+       FSUB    PROP-3,7\r
+       FSTA    #TMP\r
+       JSR     PSPEAK\r
+       JA      #2012\r
+       JA      FISSUR\r
+       JA      #TMP\r
+/      GOTO 2012\r
+\r
+/C\r
+/C ATTACK. ASSUME TARGET IF UNAMBIGUOUS. "THROW" ALSO LINKS HERE. ATTACKABLE\r
+/C OBJECTS FALL INTO TWO CATEGORIES: ENEMIES (SNAKE, DWARF, ETC.) AND OTHERS\r
+/C (BIRD, CLAM). AMBIGUOUS IF TWO ENEMIES, OR IF NO ENEMIES BUT TWO OTHERS.\r
+/C\r
+/9120   DO 9121 I=1,5\r
+#9120, FLDA    ONE\r
+       FSTA    I\r
+\r
+#H0102,        FLDA    I\r
+       ATX     7\r
+/      IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2)GOTO 9122\r
+       FLDA    DLOC-3,7\r
+       FSUB    LOC\r
+       JNE     #9121\r
+       FLDA    DFLAG\r
+       FSUB    TWO\r
+       JGE     #9122\r
+\r
+/9121   CONTINUE\r
+#9121, FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+3\r
+       JLE     #H0102\r
+/      I=0\r
+       FCLA\r
+       FSTA    I\r
+\r
+/9122   IF(OBJ.NE.0)GOTO 9124\r
+#9122, FLDA    OBJ\r
+       JNE     #9124\r
+/      IF(I.NE.0)OBJ=DWARF\r
+       FLDA    I\r
+       JEQ     .+6\r
+       FLDA    DWARF\r
+       FSTA    OBJ\r
+/      IF(HERE(SNAKE))OBJ=OBJ*100+SNAKE\r
+       FLDA    SNAKE\r
+       JSA     HERE\r
+       JEQ     .+11\r
+       FLDA    OBJ\r
+       FMUL    #LIT+154\r
+       FADD    SNAKE\r
+       FSTA    OBJ\r
+/      IF(AT(DRAGON).AND.PROP(DRAGON).EQ.0)OBJ=OBJ*100+DRAGON\r
+       FLDA    DRAGON\r
+       JSA     AT\r
+       JEQ     .+15\r
+/      FLDA    DRAGON\r
+/      ATX     3\r
+       FLDA    PROP-3,3\r
+       JNE     .+11\r
+       FLDA    OBJ\r
+       FMUL    #LIT+154\r
+       FADD    DRAGON\r
+       FSTA    OBJ\r
+/      IF(AT(TROLL))OBJ=OBJ*100+TROLL\r
+       FLDA    TROLL\r
+       JSA     AT\r
+       JEQ     .+11\r
+       FLDA    OBJ\r
+       FMUL    #LIT+154\r
+       FADD    TROLL\r
+       FSTA    OBJ\r
+/      IF(HERE(BEAR).AND.PROP(BEAR).EQ.0)OBJ=OBJ*100+BEAR\r
+       FLDA    BEAR\r
+       JSA     HERE\r
+       JEQ     .+15\r
+       FLDA    PROP-3,3\r
+       JNE     .+11\r
+       FLDA    OBJ\r
+       FMUL    #LIT+154\r
+       FADD    BEAR\r
+       FSTA    OBJ\r
+/      IF(OBJ.GT.100)GOTO 8000\r
+       FLDA    OBJ\r
+       FSUB    #LIT+154\r
+       JGT     #8000\r
+/      IF(OBJ.NE.0)GOTO 9124\r
+       FLDA    OBJ\r
+       JNE     #9124\r
+/C\r
+/C CAN'T ATTACK BIRD BY THROWING AXE.\r
+/C\r
+/      IF(HERE(BIRD).AND.VERB.NE.THROW)OBJ=BIRD\r
+       FLDA    BEAR\r
+       JSA     HERE\r
+       JEQ     .+14\r
+       FLDA    VERB\r
+       FSUB    THROW\r
+       JNE     .+6\r
+       FLDA    BIRD\r
+       FSTA    OBJ\r
+/C\r
+/C CLAM AND OYSTER BOTH TREATED AS CLAM FOR INTRANSITIVE CASE; NO HARM DONE.\r
+/C\r
+/      IF(HERE(CLAM).OR.HERE(OYSTER))OBJ=100*OBJ+CLAM\r
+       FLDA    CLAM\r
+       JSA     HERE\r
+       JNE     .+10\r
+       FLDA    OYSTER\r
+       JSA     HERE\r
+       JEQ     .+11\r
+       FLDA    #LIT+154\r
+       FMUL    OBJ\r
+       FADD    CLAM\r
+       FSTA    OBJ\r
+/      IF(OBJ.GT.100)GOTO 8000\r
+       FLDA    OBJ\r
+       FSUB    #LIT+154\r
+       JGT     #8000\r
+\r
+/9124   IF(OBJ.NE.BIRD)GOTO 9125\r
+#9124, FLDA    OBJ\r
+       FSUB    BIRD\r
+       JNE     #9125\r
+/      SPK=137\r
+       DECIMAL\r
+               LDX     137,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(CLOSED)GOTO 2011\r
+       FLDA    CLOSED\r
+       JNE     #2011\r
+/      CALL DSTROY(BIRD)\r
+       FLDA    BIRD\r
+       JSA     DSTROY\r
+/      PROP(BIRD)=0\r
+       FLDA    BIRD\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      IF(PLACE(SNAKE).EQ.PLAC(SNAKE))TALLY2=TALLY2+1\r
+       FLDA    SNAKE\r
+       ATX     7\r
+       FLDA    PLACE-3,7\r
+       FSUB    PLAC-3,7\r
+       JNE     .+7\r
+       FLDA    TALLY2\r
+       FADD    ONE\r
+       FSTA    TALLY2\r
+/      SPK=45\r
+       FLDA    #LIT+102\r
+       FSTA    SPK\r
+\r
+/9125   IF(OBJ.EQ.0)SPK=44\r
+#9125, FLDA    OBJ\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     44,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER)SPK=150\r
+       FLDA    OBJ\r
+       FSUB    CLAM\r
+       JEQ     .+10\r
+       FLDA    OBJ\r
+       FSUB    OYSTER\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     150,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.SNAKE)SPK=46\r
+       FLDA    OBJ\r
+       FSUB    SNAKE\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     46,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.DWARF)SPK=49\r
+       FLDA    OBJ\r
+       FSUB    DWARF\r
+       JNE     .+4\r
+       FLDA    #LIT+105\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.DWARF.AND.CLOSED)GOTO 19000\r
+       FLDA    OBJ\r
+       FSUB    DWARF\r
+       JNE     .+6\r
+       FLDA    CLOSED\r
+       JNE     #19000\r
+/      IF(OBJ.EQ.DRAGON)SPK=167\r
+       FLDA    OBJ\r
+       FSUB    DRAGON\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     167,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.TROLL)SPK=157\r
+       FLDA    OBJ\r
+       FSUB    TROLL\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     157,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.BEAR)SPK=165+(PROP(BEAR)+1)/2\r
+       FLDA    OBJ\r
+       FSUB    BEAR\r
+       JNE     .+14\r
+       FLDA    BEAR\r
+       JSA     RDPROP\r
+       FADD    ONE\r
+       FDIV    TWO\r
+       JSA     #FIX\r
+       FADD    #LIT+245\r
+       FSTA    SPK\r
+/      IF(OBJ.NE.DRAGON.OR.PROP(DRAGON).NE.0)GOTO 2011\r
+       FLDA    OBJ\r
+       FSUB    DRAGON\r
+       JNE     #2011\r
+       FLDA    DRAGON\r
+       JSA     RDPROP\r
+       JNE     #2011\r
+/C\r
+/C FUN STUFF FOR DRAGON. IF HE INSISTS ON ATTACKING IT, WIN! SET PROP TO DEAD,\r
+/C MOVE DRAGON TO CENTRAL LOC (STILL FIXED), MOVE RUG THERE (NOT FIXED), AND\r
+/C MOVE HIM THERE, TOO. THEN DO A NULL MOTION TO GET NEW DESCRIPTION.\r
+/C\r
+/      CALL RSPEAK(49)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+105\r
+/      VERB=0\r
+       FCLA\r
+       FSTA    VERB\r
+/      OBJ=0\r
+       FSTA    OBJ\r
+/      CALL GETIN(WD1,WD1A,WD1X,WD2,WD2A,WD2X)\r
+       JSR     GETIN\r
+       JA      .+12\r
+       JA      WD1\r
+       JA      WD1X\r
+       JA      WD2\r
+       JA      WD2X\r
+/      IF(WD1.NE.'YE'.AND.WD1.NE.'Y')GOTO 2608\r
+       FLDA    WD1\r
+       FSUB    TYES\r
+       JEQ     OKKILL\r
+       FLDA    WD1\r
+       FSUB    TYE\r
+       JEQ     OKKILL\r
+       FLDA    WD1\r
+       FSUB    TY\r
+       JNE     #2608\r
+/      CALL PSPEAK(DRAGON,1)\r
+OKKILL,        JSR     PSPEAK\r
+       JA      .+6\r
+       JA      DRAGON\r
+       JA      ONE\r
+/      PROP(DRAGON)=2\r
+       FLDA    DRAGON\r
+       ATX     7\r
+       FLDA    TWO\r
+       FSTA    PROP-3,7\r
+/      PROP(RUG)=0\r
+       FLDA    RUG\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      K=(PLAC(DRAGON)+FIXD(DRAGON))/2\r
+       FLDA    DRAGON\r
+       ATX     7\r
+       FLDA    PLAC-3,7\r
+       FADD    FIXD-3,7\r
+       FDIV    TWO\r
+       JSA     #FIX\r
+       FSTA    K\r
+/      CALL MOVE(DRAGON+100,-1)\r
+       FLDA    DRAGON\r
+       FADD    #LIT+154\r
+       FSTA    #TMP\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      MINUS1\r
+/      CALL MOVE(RUG+100,0)\r
+       FLDA    RUG\r
+       FADD    #LIT+154\r
+       FSTA    #TMP\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      ZERO\r
+/      CALL MOVE(DRAGON,K)\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      DRAGON\r
+       JA      K\r
+/      CALL MOVE(RUG,K)\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      RUG\r
+       JA      K\r
+/      DO 9126 OBJ=1,100\r
+       FLDA    ONE\r
+       FSTA    OBJ\r
+\r
+/      IF(PLACE(OBJ).EQ.PLAC(DRAGON).OR.PLACE(OBJ).EQ.FIXD(DRAGON))\r
+/      1       CALL MOVE(OBJ,K)\r
+#H0122,        FLDA    OBJ\r
+       ATX     7\r
+       FLDA    DRAGON\r
+       ATX     6\r
+       FLDA    PLACE-3,7\r
+       FSUB    PLAC-3,6\r
+       JEQ     .+10\r
+       FLDA    PLACE-3,7\r
+       FSUB    FIXD-3,6\r
+       JNE     #9126\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      OBJ\r
+       JA      K\r
+/9126   CONTINUE\r
+#9126, FLDA    OBJ\r
+       FADD    ONE\r
+       FSTA    OBJ\r
+       FSUB    #LIT+154\r
+       JLE     #H0122\r
+/      LOC=K\r
+       FLDA    K\r
+       FSTA    LOC\r
+/      K=NULL\r
+       FLDA    NULL\r
+       FSTA    K\r
+/      GOTO 8\r
+       JA      #8\r
+\r
+/C\r
+/C POUR. IF NO OBJECT, OR OBJECT IS BOTTLE, ASSUME CONTENTS OF BOTTLE.\r
+/C SPECIAL TESTS FOR POURING WATER OR OIL ON PLANT OR RUSTY DOOR.\r
+/C\r
+/9130   IF(OBJ.EQ.BOTTLE.OR.OBJ.EQ.0)OBJ=LIQ(0)\r
+#9130, FLDA    OBJ\r
+       FSUB    BOTTLE\r
+       JEQ     .+6\r
+       FLDA    OBJ\r
+       JNE     .+6\r
+       JSA     LIQ\r
+       FSTA    OBJ\r
+/      IF(OBJ.EQ.0)GOTO 8000\r
+       FLDA    OBJ\r
+       JEQ     #8000\r
+/      IF(.NOT.TOTING(OBJ))GOTO 2011\r
+       FLDA    OBJ\r
+       JSA     TOTING\r
+       JEQ     #2011\r
+/      SPK=78\r
+       DECIMAL\r
+               LDX     78,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.NE.OIL.AND.OBJ.NE.WATER)GOTO 2011\r
+       FLDA    OBJ\r
+       FSUB    OIL\r
+       JEQ     .+10\r
+       FLDA    OBJ\r
+       FSUB    WATER\r
+       JNE     #2011\r
+/      PROP(BOTTLE)=1\r
+       FLDA    BOTTLE\r
+       ATX     7\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+/      PLACE(OBJ)=0\r
+       FLDA    OBJ\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PLACE-3,7\r
+/      SPK=77\r
+       DECIMAL\r
+               LDX     77,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(.NOT.(AT(PLANT).OR.AT(DOOR)))GOTO 2011\r
+       FLDA    PLANT\r
+       JSA     AT\r
+       JNE     .+10\r
+       FLDA    DOOR\r
+       JSA     AT\r
+       JEQ     #2011\r
+/C\r
+/      IF(AT(DOOR))GOTO 9132\r
+       FLDA    DOOR\r
+       JSA     AT\r
+       JNE     #9132\r
+/      SPK=112\r
+       DECIMAL\r
+               LDX     112,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.NE.WATER)GOTO 2011\r
+       FLDA    OBJ\r
+       FSUB    WATER\r
+       JNE     #2011\r
+/      CALL PSPEAK(PLANT,PROP(PLANT)+1)\r
+       FLDA    PLANT\r
+       JSA     RDPROP\r
+       FADD    ONE\r
+       FSTA    #TMP\r
+       JSR     PSPEAK\r
+       JA      .+6\r
+       JA      PLANT\r
+       JA      #TMP\r
+/      PROP(PLANT)=MOD(PROP(PLANT)+2,6)\r
+       FLDA    PLANT\r
+       JSA     RDPROP\r
+       FADD    TWO\r
+       FSTA    #TMP\r
+       JSR     MOD\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      #LIT+6\r
+       FSTA    PROP-3,7\r
+/      PROP(PLANT2)=PROP(PLANT)/2\r
+       FLDA    PLANT2\r
+       ATX     7\r
+       FLDA    PLANT\r
+       JSA     RDPROP\r
+       FDIV    TWO\r
+       JSA     #FIX\r
+       FSTA    PROP-3,6\r
+/      K=NULL\r
+       FLDA    NULL\r
+       FSTA    K\r
+/      GOTO 8\r
+       JA      #8\r
+\r
+/C\r
+/9132   PROP(DOOR)=0\r
+#9132, FLDA    DOOR\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      IF(OBJ.EQ.OIL)PROP(DOOR)=1\r
+       FLDA    OBJ\r
+       FSUB    OIL\r
+       JNE     .+10\r
+       FLDA    DOOR\r
+       ATX     7\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+/      SPK=113+PROP(DOOR)\r
+       FLDA    DOOR\r
+       ATX     7\r
+       DECIMAL\r
+               LDX     113,0\r
+       OCTAL\r
+       XTA     0\r
+       FADD    PROP-3,7\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C EAT. INTRANSITIVE: ASSUME FOOD IF PRESENT, ELSE ASK WHAT. TRANSITIVE: FOOD\r
+/C OK, SOME THINGS LOSE APPETITE, REST ARE RIDICULOUS.\r
+/C\r
+/8140   IF(.NOT.HERE(FOOD))GOTO 8000\r
+#8140, FLDA    FOOD\r
+       JSA     HERE\r
+       JEQ     #8000\r
+\r
+/8142   CALL DSTROY(FOOD)\r
+#8142, FLDA    FOOD\r
+       JSA     DSTROY\r
+/      SPK=72\r
+       DECIMAL\r
+               LDX     72,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+/C\r
+/9140   IF(OBJ.EQ.FOOD)GOTO 8142\r
+#9140, FLDA    OBJ\r
+       FSUB    FOOD\r
+       JEQ     #8142\r
+/      IF(OBJ.EQ.BIRD.OR.OBJ.EQ.SNAKE.OR.OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER\r
+/      1       .OR.OBJ.EQ.DWARF.OR.OBJ.EQ.DRAGON.OR.OBJ.EQ.TROLL\r
+/      2       .OR.OBJ.EQ.BEAR)SPK=71\r
+       FLDA    OBJ\r
+       FSUB    BIRD\r
+       JEQ     #M78\r
+       FLDA    OBJ\r
+       FSUB    SNAKE\r
+       JEQ     #M78\r
+       FLDA    OBJ\r
+       FSUB    CLAM\r
+       JEQ     #M78\r
+       FLDA    OBJ\r
+       FSUB    OYSTER\r
+       JEQ     #M78\r
+       FLDA    OBJ\r
+       FSUB    DWARF\r
+       JEQ     #M78\r
+       FLDA    OBJ\r
+       FSUB    DRAGON\r
+       JEQ     #M78\r
+       FLDA    OBJ\r
+       FSUB    TROLL\r
+       JEQ     #M78\r
+       FLDA    OBJ\r
+       FSUB    BEAR\r
+       JNE     #2011\r
+#M78,  DECIMAL\r
+               LDX     71,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C DRINK. IF NO OBJECT, ASSUME WATER AND LOOK FOR IT HERE. IF WATER IS IN\r
+/C THE BOTTLE, DRINK THAT, ELSE MUST BE AT A WATER LOC, SO DRINK STREAM.\r
+/C\r
+/9150   IF(OBJ.EQ.0.AND.LIQLOC(LOC).NE.WATER.AND.(LIQ(0).NE.WATER\r
+/      1       .OR..NOT.HERE(BOTTLE)))GOTO 8000\r
+#9150, FLDA    OBJ\r
+       JNE     #M79\r
+       JSA     LIQLOC\r
+       FSUB    WATER\r
+       JEQ     #M79\r
+       JSA     LIQ\r
+       FSUB    WATER\r
+       JNE     #8000\r
+       FLDA    BOTTLE\r
+       JSA     HERE\r
+       JEQ     #8000\r
+/      IF(OBJ.NE.0.AND.OBJ.NE.WATER)SPK=110\r
+#M79,  FLDA    OBJ\r
+       JEQ     .+10\r
+/      FLDA    OBJ\r
+       FSUB    WATER\r
+       JEQ     .+4\r
+       FLDA    #LIT+162\r
+       FSTA    SPK\r
+/      IF(SPK.EQ.110.OR.LIQ(0).NE.WATER.OR..NOT.HERE(BOTTLE))GOTO 2011\r
+       FLDA    SPK\r
+       FSUB    #LIT+162\r
+       JEQ     #2011\r
+       JSA     LIQ\r
+       FSUB    WATER\r
+       JNE     #2011\r
+       FLDA    BOTTLE\r
+       JSA     HERE\r
+       JEQ     #2011\r
+/      PROP(BOTTLE)=1\r
+       FLDA    ONE\r
+       FSTA    PROP-3,3\r
+/      PLACE(WATER)=0\r
+       FLDA    WATER\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PLACE-3,7\r
+/      SPK=74\r
+       DECIMAL\r
+               LDX     74,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C RUB. YIELDS VARIOUS SNIDE REMARKS.\r
+/C\r
+/9160   IF(OBJ.NE.LAMP)SPK=76\r
+#9160, FLDA    OBJ\r
+       FSUB    LAMP\r
+       JEQ     #2011\r
+       DECIMAL\r
+               LDX     76,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C THROW. SAME AS DISCARD UNLESS AXE. THEN SAME AS ATTACK EXCEPT IGNORE BIRD,\r
+/C AND IF DWARF IS PRESENT THEN ONE MIGHT BE KILLED. (ONLY WAY TO DO SO!)\r
+/C AXE ALSO SPECIAL FOR DRAGON, BEAR, AND TROLL. TREASURES SPECIAL FOR TROLL.\r
+/C\r
+/9170   IF(TOTING(ROD2).AND.OBJ.EQ.ROD.AND..NOT.TOTING(ROD))OBJ=ROD2\r
+#9170, FLDA    ROD2\r
+       JSA     TOTING\r
+       JEQ     #M81\r
+       FLDA    OBJ\r
+       FSUB    ROD\r
+       JNE     #M81\r
+       FLDA    ROD\r
+       JSA     TOTING\r
+       JNE     #M81\r
+       FLDA    ROD2\r
+       FSTA    OBJ\r
+/      IF(.NOT.TOTING(OBJ))GOTO 2011\r
+#M81,  FLDA    OBJ\r
+       JSA     TOTING\r
+       JEQ     #2011\r
+/      IF(OBJ.GE.50.AND.OBJ.LE.MAXTRS.AND.AT(TROLL))GOTO 9178\r
+       FLDA    OBJ\r
+       FSUB    #LIT+110\r
+       JLT     #M82\r
+       FLDA    OBJ\r
+       FSUB    MAXTRS\r
+       JGT     #M82\r
+       FLDA    TROLL\r
+       JSA     AT\r
+       JNE     #9178\r
+/      IF(OBJ.EQ.FOOD.AND.HERE(BEAR))GOTO 9177\r
+#M82,  FLDA    OBJ\r
+       FSUB    FOOD\r
+       JNE     #M83\r
+       FLDA    BEAR\r
+       JSA     HERE\r
+       JNE     #9177\r
+/      IF(OBJ.NE.AXE)GOTO 9020\r
+#M83,  FLDA    OBJ\r
+       FSUB    AXE\r
+       JNE     #9020\r
+/      DO 9171 I=1,5\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/C\r
+/C NEEDN'T CHECK DFLAG IF AXE IS HERE.\r
+/C\r
+/      IF(DLOC(I).EQ.LOC)GOTO 9172\r
+#H0132,        FLDA    I\r
+       ATX     7\r
+       FLDA    DLOC-3,7\r
+       FSUB    LOC\r
+       JEQ     #9172\r
+\r
+/9171   CONTINUE\r
+#9171, FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+3\r
+       JLE     #H0132\r
+/      SPK=152\r
+       DECIMAL\r
+               LDX     152,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(AT(DRAGON).AND.PROP(DRAGON).EQ.0)GOTO 9175\r
+       FLDA    DRAGON\r
+       JSA     AT\r
+       JEQ     #M84\r
+/      FLDA    DRAGON\r
+/      ATX     3\r
+       FLDA    PROP-3,3\r
+       JEQ     #9175\r
+/      SPK=158\r
+#M84,  DECIMAL\r
+               LDX     158,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(AT(TROLL))GOTO 9175\r
+       FLDA    TROLL\r
+       JSA     AT\r
+       JNE     #9175\r
+/      IF(HERE(BEAR).AND.PROP(BEAR).EQ.0)GOTO 9176\r
+       FLDA    BEAR\r
+       JSA     HERE\r
+       JEQ     #M85\r
+       FLDA    PROP-3,3\r
+       JEQ     #9176\r
+/      OBJ=0\r
+#M85,  FCLA\r
+       FSTA    OBJ\r
+/      GOTO 9120\r
+       JA      #9120\r
+\r
+/C\r
+/9172   SPK=48\r
+#9172, DECIMAL\r
+               LDX     48,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(RND(3).EQ.0)GOTO 9175\r
+       JSR     RND\r
+       JA      .+4\r
+       JA      THREE\r
+       JEQ     #9175\r
+/      DSEEN(I)=.FALSE.\r
+       FLDA    I\r
+       ATX     7\r
+       FCLA\r
+       FSTA    DSEEN-3,7\r
+/      DLOC(I)=0\r
+       FSTA    DLOC-3,7\r
+/      SPK=47\r
+       DECIMAL\r
+               LDX     47,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      DKILL=DKILL+1\r
+       FLDA    ONE\r
+       FADDM   DKILL\r
+/      IF(DKILL.EQ.1)SPK=149\r
+       FSUB    ONE\r
+       JNE     #9175\r
+       DECIMAL\r
+               LDX     149,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/9175   CALL RSPEAK(SPK)\r
+#9175, JSR     RSPEAK\r
+       JA      .+4\r
+       JA      SPK\r
+/      CALL DROP(AXE,LOC)\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      AXE\r
+       JA      LOC\r
+/      K=NULL\r
+       FLDA    NULL\r
+       FSTA    K\r
+/      GOTO 8\r
+       JA      #8\r
+\r
+/C\r
+/C THIS'LL TEACH HIM TO THROW THE AXE AT THE BEAR!\r
+/C\r
+/9176   SPK=164\r
+#9176, DECIMAL\r
+               LDX     164,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      CALL DROP(AXE,LOC)\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      AXE\r
+       JA      LOC\r
+/      FIXED(AXE)=-1\r
+       FLDA    AXE\r
+       ATX     7\r
+       FLDA    MINUS1\r
+       FSTA    FIXED-3,7\r
+/      PROP(AXE)=1\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+/      CALL JUGGLE(BEAR)\r
+       FLDA    BEAR\r
+       JSA     JUGGLE\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C BUT THROWING FOOD IS ANOTHER STORY.\r
+/C\r
+/9177   OBJ=BEAR\r
+#9177, FLDA    BEAR\r
+       FSTA    OBJ\r
+/      GOTO 9210\r
+       JA      #9210\r
+\r
+/C\r
+/C SNARF A TREASURE FOR THE TROLL.\r
+/C\r
+/9178   SPK=159\r
+#9178, DECIMAL\r
+               LDX     159,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      CALL DROP(OBJ,0)\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      OBJ\r
+       JA      ZERO\r
+/      CALL MOVE(TROLL,0)\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      TROLL\r
+       JA      ZERO\r
+/      CALL MOVE(TROLL+100,0)\r
+       FLDA    TROLL\r
+       FADD    #LIT+154\r
+       FSTA    #TMP\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      ZERO\r
+/      CALL DROP(TROLL2,PLAC(TROLL))\r
+       FLDA    TROLL\r
+       ATX     7\r
+       FLDA    PLAC-3,7\r
+       FSTA    #TMP\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      TROLL2\r
+       JA      #TMP\r
+/      CALL DROP(TROLL2+100,FIXD(TROLL))\r
+       FLDA    TROLL2\r
+       FADD    #LIT+154\r
+       FSTA    #TMP\r
+/      FLDA    TROLL\r
+/      ATX     7\r
+       FLDA    FIXD-3,7\r
+       FSTA    #TMP+3\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      #TMP+3\r
+/      CALL JUGGLE(CHASM)\r
+       FLDA    CHASM\r
+       JSA     JUGGLE\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C QUIT. INTRANSITIVE ONLY. VERIFY INTENT AND EXIT IF THAT'S WHAT HE WANTS.\r
+/C\r
+/8180   GAVEUP=YES(22,54,54)\r
+#8180, JSR     YES\r
+       JA      .+10\r
+       JA      #LIT+41\r
+       JA      #LIT+113\r
+       JA      #LIT+113\r
+       FSTA    GAVEUP\r
+\r
+/8185   IF(GAVEUP)GOTO 20000\r
+#8185, FLDA    GAVEUP\r
+       JNE     #20000\r
+/      GOTO 2012\r
+       JA      #2012\r
+/C\r
+/C FIND. MIGHT BE CARRYING IT, OR IT MIGHT BE HERE. ELSE GIVE CAVEAT.\r
+/C\r
+/9190   IF(AT(OBJ).OR.(LIQ(0).EQ.OBJ.AND.AT(BOTTLE))\r
+/      1       .OR.K.EQ.LIQLOC(LOC))SPK=94\r
+#9190, FLDA    OBJ\r
+       JSA     AT\r
+       JNE     #M86\r
+       JSA     LIQ\r
+       FSUB    OBJ\r
+       JNE     #M87\r
+       FLDA    BOTTLE\r
+       JSA     AT\r
+       JNE     #M86\r
+#M87,  JSA     LIQLOC\r
+       FSUB    K\r
+       JNE     .+6\r
+#M86,  DECIMAL\r
+               LDX     94,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      DO 9192 I=1,5\r
+       FLDA    ONE\r
+       FSTA    I\r
+/9192   IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2.AND.OBJ.EQ.DWARF)SPK=94\r
+#9192, FLDA    I\r
+       ATX     7\r
+       FLDA    DLOC-3,7\r
+       FSUB    LOC\r
+       JNE     #M88\r
+       FLDA    DFLAG\r
+       FSUB    TWO\r
+       JLT     #M88\r
+       FLDA    OBJ\r
+       FSUB    DWARF\r
+       JNE     #M88\r
+       DECIMAL\r
+               LDX     94,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+#M88,  FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+3\r
+       JLE     #9192\r
+/      IF(CLOSED)SPK=138\r
+       FLDA    CLOSED\r
+       JEQ     .+6\r
+       DECIMAL\r
+               LDX     138,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(TOTING(OBJ))SPK=24\r
+       FLDA    OBJ\r
+       JSA     TOTING\r
+       JEQ     #2011\r
+       FLDA    #LIT+47\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C INVENTORY. IF OBJECT, TREAT SAME AS FIND. ELSE REPORT ON CURRENT BURDEN.\r
+/C\r
+/8200   SPK=98\r
+#8200, DECIMAL\r
+               LDX     98,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      DO 8201 I=1,100\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/      IF(I.EQ.BEAR.OR..NOT.TOTING(I))GOTO 8201\r
+#H0143,        FLDA    I\r
+       FSUB    BEAR\r
+       JEQ     #8201\r
+       FLDA    I\r
+       JSA     TOTING\r
+       JEQ     #8201\r
+/      IF(SPK.EQ.98)CALL RSPEAK(99)\r
+       DECIMAL\r
+               LDX     98,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    SPK\r
+       JNE     .+10\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+151\r
+/      CALL PSPEAK(I,-1)\r
+       JSR     PSPEAK\r
+       JA      .+6\r
+       JA      I\r
+       JA      MINUS1\r
+/      SPK=0\r
+       FCLA\r
+       FSTA    SPK\r
+\r
+/8201   CONTINUE\r
+#8201, FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+154\r
+       JLE     #H0143\r
+/      IF(TOTING(BEAR))SPK=141\r
+       FLDA    BEAR\r
+       JSA     TOTING\r
+       JEQ     #2011\r
+       FLDA    #LIT+226\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C FEED. IF BIRD, NO SEED. SNAKE, DRAGON, TROLL: QUIP. IF DWARF, MAKE HIM\r
+/C MAD. BEAR, SPECIAL.\r
+/C\r
+/9210   IF(OBJ.NE.BIRD)GOTO 9212\r
+#9210, FLDA    OBJ\r
+       FSUB    BIRD\r
+       JNE     #9212\r
+/      SPK=100\r
+       FLDA    #LIT+154\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/9212   IF(OBJ.NE.SNAKE.AND.OBJ.NE.DRAGON.AND.OBJ.NE.TROLL)GOTO 9213\r
+#9212, FLDA    OBJ\r
+       FSUB    SNAKE\r
+       JEQ     #M89\r
+       FLDA    OBJ\r
+       FSUB    DRAGON\r
+       JEQ     #M89\r
+       FLDA    OBJ\r
+       FSUB    TROLL\r
+       JNE     #9213\r
+/      SPK=102\r
+#M89,  DECIMAL\r
+               LDX     102,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.DRAGON.AND.PROP(DRAGON).NE.0)SPK=110\r
+       FLDA    OBJ\r
+       FSUB    DRAGON\r
+       JNE     #M90\r
+       FLDA    DRAGON\r
+       JSA     RDPROP\r
+       JEQ     .+4\r
+       FLDA    #LIT+162\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.TROLL)SPK=182\r
+#M90,  FLDA    OBJ\r
+       FSUB    TROLL\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     182,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.NE.SNAKE.OR.CLOSED.OR..NOT.HERE(BIRD))GOTO 2011\r
+       FLDA    OBJ\r
+       FSUB    SNAKE\r
+       JNE     #2011\r
+       FLDA    CLOSED\r
+       JNE     #2011\r
+       FLDA    BIRD\r
+       JSA     HERE\r
+       JEQ     #2011\r
+/      SPK=101\r
+       DECIMAL\r
+               LDX     101,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      CALL DSTROY(BIRD)\r
+       FLDA    BIRD\r
+       JSA     DSTROY\r
+/      PROP(BIRD)=0\r
+       FLDA    BIRD\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      TALLY2=TALLY2+1\r
+       FLDA    TALLY2\r
+       FADD    ONE\r
+       FSTA    TALLY2\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/9213   IF(OBJ.NE.DWARF)GOTO 9214\r
+#9213, FLDA    OBJ\r
+       FSUB    DWARF\r
+       JNE     #9214\r
+/      IF(.NOT.HERE(FOOD))GOTO 2011\r
+       FLDA    FOOD\r
+       JSA     HERE\r
+       JEQ     #2011\r
+/      SPK=103\r
+       DECIMAL\r
+               LDX     103,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      DFLAG=DFLAG+1\r
+       FLDA    ONE\r
+       FADDM   DFLAG\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/9214   IF(OBJ.NE.BEAR)GOTO 9215\r
+#9214, FLDA    OBJ\r
+       FSUB    BEAR\r
+       JNE     #9215\r
+/      IF(PROP(BEAR).EQ.0)SPK=102\r
+       FLDA    BEAR\r
+       JSA     RDPROP\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     102,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(PROP(BEAR).EQ.3)SPK=110\r
+       FLDA    PROP-3,7\r
+       FSUB    THREE\r
+       JNE     .+4\r
+       FLDA    #LIT+162\r
+       FSTA    SPK\r
+/      IF(.NOT.HERE(FOOD))GOTO 2011\r
+       FLDA    FOOD\r
+       JSA     HERE\r
+       JEQ     #2011\r
+/      CALL DSTROY(FOOD)\r
+       FLDA    FOOD\r
+       JSA     DSTROY\r
+/      PROP(BEAR)=1\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+/      FIXED(AXE)=0\r
+       FLDA    AXE\r
+       ATX     7\r
+       FCLA\r
+       FSTA    FIXED-3,7\r
+/      PROP(AXE)=0\r
+       FSTA    PROP-3,7\r
+/      SPK=168\r
+       DECIMAL\r
+               LDX     168,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/9215   SPK=14\r
+#9215, DECIMAL\r
+               LDX     14,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C FILL. BOTTLE MUST BE EMPTY, AND SOME LIQUID AVAILABLE. (VASE IS NASTY.)\r
+/C\r
+/9220   IF(OBJ.EQ.VASE)GOTO 9222\r
+#9220, FLDA    OBJ\r
+       FSUB    VASE\r
+       JEQ     #9222\r
+/      IF(OBJ.NE.0.AND.OBJ.NE.BOTTLE)GOTO 2011\r
+       FLDA    OBJ\r
+       JEQ     #M91\r
+       FLDA    OBJ\r
+       FSUB    BOTTLE\r
+       JNE     #2011\r
+/      IF(OBJ.EQ.0.AND..NOT.HERE(BOTTLE))GOTO 8000\r
+#M91,  FLDA    OBJ\r
+       JNE     #M92\r
+       FLDA    BOTTLE\r
+       JSA     HERE\r
+       JEQ     #8000\r
+/      SPK=107\r
+#M92,  DECIMAL\r
+               LDX     107,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(LIQLOC(LOC).EQ.0)SPK=106\r
+       JSA     LIQLOC\r
+       JNE     #M92A\r
+       DECIMAL\r
+               LDX     106,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(LIQ(0).NE.0)SPK=105\r
+#M92A, JSA     LIQ\r
+       JEQ     .+4\r
+       FLDA    #LIT+157\r
+       FSTA    SPK\r
+/      IF(SPK.NE.107)GOTO 2011\r
+       DECIMAL\r
+               LDX     107,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    SPK\r
+       JNE     #2011\r
+/       PROP(BOTTLE)=MOD(COND(LOC),4)/2*2\r
+       FLDA    BOTTLE\r
+       ATX     7\r
+       FLDA    LOC\r
+       ATX     6\r
+       FLDA    COND-3,6\r
+       FSTA    #TMP\r
+       JSR     MOD\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      #LIT\r
+       FDIV    TWO\r
+       JSA     #FIX\r
+       FMUL    TWO\r
+       FSTA    PROP-3,7\r
+/      K=LIQ(0)\r
+       JSA     LIQ\r
+       FSTA    K\r
+/      IF(TOTING(BOTTLE))PLACE(K)=-1\r
+       FLDA    BOTTLE\r
+       JSA     TOTING\r
+       JEQ     .+10\r
+       FLDA    K\r
+       ATX     7\r
+       FLDA    MINUS1\r
+       FSTA    PLACE-3,7\r
+/      IF(K.EQ.OIL)SPK=108\r
+       FLDA    K\r
+       FSUB    OIL\r
+       JNE     #2011\r
+       DECIMAL\r
+               LDX     108,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/9222   SPK=29\r
+#9222, FLDA    #LIT+135\r
+       FSTA    SPK\r
+/      IF(LIQLOC(LOC).EQ.0)SPK=144\r
+       JSA     LIQLOC\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     144,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(LIQLOC(LOC).EQ.0.OR..NOT.TOTING(VASE))GOTO 2011\r
+       JSA     LIQLOC\r
+       JEQ     #2011\r
+       FLDA    VASE\r
+       JSA     TOTING\r
+       JEQ     #2011\r
+/      CALL RSPEAK(145)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+234\r
+/      PROP(VASE)=2\r
+       FLDA    VASE\r
+       ATX     7\r
+       FLDA    TWO\r
+       FSTA    PROP-3,7\r
+/      FIXED(VASE)=-1\r
+       FLDA    MINUS1\r
+       FSTA    FIXED-3,7\r
+/      GOTO 9024\r
+       JA      #9024\r
+\r
+/C\r
+/C BLAST. NO EFFECT UNLESS YOU'VE GOT DYNAMITE, WHICH IS A NEAT TRICK!\r
+/C\r
+/9230   IF(PROP(ROD2).LT.0.OR..NOT.CLOSED)GOTO 2011\r
+#9230, FLDA    ROD2\r
+       JSA     RDPROP\r
+       JLT     #2011\r
+       FLDA    CLOSED\r
+       JEQ     #2011\r
+/      BONUS=133\r
+       DECIMAL\r
+               LDX     133,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    BONUS\r
+/      IF(LOC.EQ.115)BONUS=134\r
+       FLDA    LOC\r
+       FSUB    #LIT+165\r
+       JNE     .+7\r
+       DECIMAL\r
+               LDX     134,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    BONUS\r
+/      IF(HERE(ROD2))BONUS=135\r
+       FLDA    ROD2\r
+       JSA     HERE\r
+       JEQ     .+7\r
+       DECIMAL\r
+               LDX     135,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    BONUS\r
+/      CALL RSPEAK(BONUS)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      BONUS\r
+/      GOTO 20000\r
+       JA      #20000\r
+\r
+/C\r
+/C SCORE. GO TO SCORING SECTION, WHICH WILL RETURN TO 8241 IF SCORNG IS TRUE.\r
+/C\r
+/8240   SCORNG=.TRUE.\r
+#8240, FLDA    ONE\r
+       FSTA    SCORNG\r
+/      GOTO 20000\r
+       JA      #20000\r
+\r
+/C\r
+/8241   SCORNG=.FALSE.\r
+#8241, FCLA\r
+       FSTA    SCORNG\r
+/      TYPE 8243,SCORE,MXSCOR\r
+       JSA     SPRINT\r
+       JA      #8243\r
+       JA      TWO\r
+       \r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #8243A\r
+       FLDA    SCORE\r
+       TRAP3   #RSVO\r
+       TRAP3   #RENDO\r
+\r
+       JSA     SPRINT\r
+       JA      #8243B\r
+       JA      THREE\r
+\r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #8243A\r
+       FLDA    MXSCOR\r
+       TRAP3   #RSVO\r
+       TRAP3   #RENDO\r
+\r
+       JSA     SPRINT\r
+       JA      #8243C\r
+       JA      ONE\r
+\r
+/8243   FORMAT(' If you were to quit now, you would score',I4\r
+/      1       ,' out of a possible',I4,'.')\r
+/      GAVEUP=YES(143,54,54)\r
+       JSR     YES\r
+       JA      .+10\r
+       JA      #LIT+231\r
+       JA      #LIT+113\r
+       JA      #LIT+113\r
+       FSTA    GAVEUP\r
+/      GOTO 8185\r
+       JA      #8185\r
+\r
+/C\r
+/C FEE FIE FOE FOO (AND FUM). ADVANCE TO NEXT STATE IF GIVEN IN PROPER ORDER.\r
+/C LOOK UP WD1 IN SECTION 3 OF VOCAB TO DETERMINE WHICH WORD WE'VE GOT. LAST\r
+/C WORD ZIPS THE EGGS BACK TO THE GIANT ROOM (UNLESS ALREADY THERE).\r
+/C\r
+/8250   CALL VOCAB(WD1,WD1A,3,K)\r
+#8250, JSR     VOCAB\r
+       JA      .+6\r
+       JA      WD1\r
+       JA      THREE\r
+       FSTA    K\r
+/      SPK=42\r
+       DECIMAL\r
+               LDX     42,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(FOOBAR.EQ.1-K)GOTO 8252\r
+       FLDA    ONE\r
+       FSUB    K\r
+       FSUB    FOOBAR\r
+       JEQ     #8252\r
+/      IF(FOOBAR.NE.0)SPK=151\r
+       FLDA    FOOBAR\r
+       JEQ     #2011\r
+       DECIMAL\r
+               LDX     151,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/8252   FOOBAR=K\r
+#8252, FLDA    K\r
+       FSTA    FOOBAR\r
+/      IF(K.NE.4)GOTO 2009\r
+       FSUB    #LIT\r
+       JNE     #2009\r
+/      FOOBAR=0\r
+       FCLA\r
+       FSTA    FOOBAR\r
+/      IF(PLACE(EGGS).EQ.PLAC(EGGS)\r
+/      1       .OR.(TOTING(EGGS).AND.LOC.EQ.PLAC(EGGS)))GOTO 2011\r
+       FLDA    EGGS\r
+       ATX     7\r
+       FLDA    PLACE-3,7\r
+       FSUB    PLAC-3,7\r
+       JEQ     #2011\r
+       FLDA    EGGS\r
+       JSA     TOTING\r
+       JEQ     #M93\r
+       FLDA    LOC\r
+       FSUB    PLAC-3,7\r
+       JEQ     #2011\r
+/C\r
+/C BRING BACK TROLL IF WE STEAL THE EGGS BACK FROM HIM BEFORE CROSSING.\r
+/C\r
+/      IF(PLACE(EGGS).EQ.0.AND.PLACE(TROLL).EQ.0.AND.PROP(TROLL).EQ.0)\r
+/      1       PROP(TROLL)=1\r
+#M93,  FLDA    PLACE-3,7\r
+       JNE     #M94\r
+       FLDA    TROLL\r
+       ATX     6\r
+       FLDA    PLACE-3,6\r
+       JNE     #M94\r
+       FLDA    PROP-3,6\r
+       JNE     #M94\r
+       FLDA    ONE\r
+       FSTA    PROP-3,6\r
+/      K=2\r
+#M94,  FLDA    TWO\r
+       FSTA    K\r
+/      IF(HERE(EGGS))K=1\r
+       FLDA    EGGS\r
+       JSA     HERE\r
+       JEQ     .+5\r
+       FLDA    ONE\r
+       FSTA    K\r
+/      IF(LOC.EQ.PLAC(EGGS))K=0\r
+       FLDA    LOC\r
+       FSUB    PLAC-3,7\r
+       JNE     .+5\r
+       FCLA\r
+       FSTA    K\r
+/      CALL MOVE(EGGS,PLAC(EGGS))\r
+       FLDA    PLAC-3,7\r
+       FSTA    #TMP\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      EGGS\r
+       JA      #TMP\r
+/      CALL PSPEAK(EGGS,K)\r
+       JSR     PSPEAK\r
+       JA      .+6\r
+       JA      EGGS\r
+       JA      K\r
+/      GOTO 2012\r
+       JA      #2012\r
+\r
+/C\r
+/C BRIEF. INTRANSITIVE ONLY. SUPPRESS LONG DESCRIPTIONS AFTER FIRST TIME.\r
+/C\r
+/8260   SPK=156\r
+#8260, DECIMAL\r
+               LDX     156,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      ABBNUM=10000\r
+       FLDA    #LIT+322\r
+       FSTA    ABBNUM\r
+/      DETAIL=3\r
+       FLDA    THREE\r
+       FSTA    DETAIL\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C READ. MAGAZINES IN DWARVISH, MESSAGE WE'VE SEEN, AND . . . OYSTER?\r
+/C\r
+/8270   IF(HERE(MAGZIN))OBJ=MAGZIN\r
+#8270, FLDA    MAGZIN\r
+       JSA     HERE\r
+       JEQ     .+6\r
+       FLDA    MAGZIN\r
+       FSTA    OBJ\r
+/      IF(HERE(TABLET))OBJ=OBJ*100+TABLET\r
+       FLDA    TABLET\r
+       JSA     HERE\r
+       JEQ     .+11\r
+       FLDA    OBJ\r
+       FMUL    #LIT+154\r
+       FADD    TABLET\r
+       FSTA    OBJ\r
+/      IF(HERE(MESSAG))OBJ=OBJ*100+MESSAG\r
+       FLDA    MESSAGE\r
+       JSA     HERE\r
+       JEQ     .+11\r
+       FLDA    OBJ\r
+       FMUL    #LIT+154\r
+       FADD    MESSAG\r
+       FSTA    OBJ\r
+/      IF(CLOSED.AND.TOTING(OYSTER))OBJ=OYSTER\r
+       FLDA    OYSTER\r
+       JSA     TOTING\r
+       FMUL    CLOSED\r
+       JEQ     .+6\r
+       FLDA    OYSTER\r
+       FSTA    OBJ\r
+/      IF(OBJ.GT.100.OR.OBJ.EQ.0.OR.DARK(0))GOTO 8000\r
+       FLDA    OBJ\r
+       FSUB    #LIT+154\r
+       JGT     #8000\r
+       FLDA    OBJ\r
+       JEQ     #8000\r
+       JSA     DARK\r
+       JNE     #8000\r
+\r
+/C\r
+/9270   IF(DARK(0))GOTO 5190\r
+#9270, JSA     DARK\r
+       JNE     #5190\r
+/      IF(OBJ.EQ.MAGZIN)SPK=190\r
+       FLDA    OBJ\r
+       FSUB    MAGZIN\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     190,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.TABLET)SPK=196\r
+       FLDA    OBJ\r
+       FSUB    TABLET\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     196,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.MESSAG)SPK=191\r
+       FLDA    OBJ\r
+       FSUB    MESSAG\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     191,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.OYSTER.AND.HINTED(2).AND.TOTING(OYSTER))SPK=194\r
+       FLDA    OBJ\r
+       FSUB    OYSTER\r
+       JNE     #M95\r
+       FLDA    HINTED+3        / HINTED(2)\r
+       JEQ     #M95\r
+       FLDA    OYSTER\r
+       JSA     TOTING\r
+       JEQ     .+6\r
+       DECIMAL\r
+               LDX     194,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.NE.OYSTER.OR.HINTED(2).OR..NOT.TOTING(OYSTER)\r
+/      1       .OR..NOT.CLOSED)GOTO 2011\r
+#M95,  FLDA    OBJ\r
+       FSUB    OYSTER\r
+       JNE     #2011\r
+       FLDA    HINTED+3\r
+       JNE     #2011\r
+       FLDA    OYSTER\r
+       JSA     TOTING\r
+       JEQ     #2011\r
+       FLDA    CLOSED\r
+       JEQ     #2011\r
+/      HINTED(2)=YES(192,193,54)\r
+       JSR     YES\r
+       JA      #2012\r
+       JA      #LIT+267\r
+       JA      #LIT+272\r
+       JA      #LIT+113\r
+       FSTA    HINTED+3                /HINTED(2)\r
+/      GOTO 2012\r
+/      JA      #2012\r
+\r
+/C\r
+/C BREAK. ONLY WORKS FOR MIRROR IN REPOSITORY AND, OF COURSE, THE VASE.\r
+/C\r
+/9280   IF(OBJ.EQ.MIRROR)SPK=148\r
+#9280, FLDA    OBJ\r
+       FSUB    MIRROR\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     148,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(OBJ.EQ.VASE.AND.PROP(VASE).EQ.0)GOTO 9282\r
+       FLDA    OBJ\r
+       FSUB    VASE\r
+       JNE     #M96\r
+       FLDA    VASE\r
+       JSA     RDPROP\r
+       JEQ     #9282\r
+/      IF(OBJ.NE.MIRROR.OR..NOT.CLOSED)GOTO 2011\r
+#M96,  FLDA    OBJ\r
+       FSUB    MIRROR\r
+       JNE     #2011\r
+       FLDA    CLOSED\r
+       JEQ     #2011\r
+/      CALL RSPEAK(197)\r
+       JSR     RSPEAK\r
+/      GOTO 19000\r
+       JA      #19000\r
+       JA      #LIT+275\r
+\r
+/C\r
+/9282   SPK=198\r
+#9282, DECIMAL\r
+               LDX     198,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(TOTING(VASE))CALL DROP(VASE,LOC)\r
+       FLDA    VASE\r
+       JSA     TOTING\r
+       JEQ     .+12\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      VASE\r
+       JA      LOC\r
+/      PROP(VASE)=2\r
+       FLDA    TWO\r
+       FSTA    PROP-3,3\r
+/      FIXED(VASE)=-1\r
+       FLDA    MINUS1\r
+       FSTA    FIXED-3,3\r
+/      GOTO 2011\r
+       JA      #2011\r
+\r
+/C\r
+/C WAKE. ONLY USE IS TO DISTURB THE DWARVES.\r
+/C\r
+/9290   IF(OBJ.NE.DWARF.OR..NOT.CLOSED)GOTO 2011\r
+#9290, FLDA    OBJ\r
+       FSUB    DWARF\r
+       JNE     #2011\r
+       FLDA    CLOSED\r
+       JEQ     #2011\r
+/      CALL RSPEAK(199)\r
+       JSR     RSPEAK\r
+/      GOTO 19000\r
+       JA      #19000\r
+       JA      #LIT+300\r
+\r
+/C\r
+/C SUSPEND. SAVE THE WORLD.\r
+/C\r
+/8300   CALL SAVEGM(.TRUE.,I)\r
+/      GOTO 2012\r
+#8300, JSR     SAVEGM\r
+       JA      #2012\r
+       JA      ONE\r
+       JA      I\r
+\r
+/C\r
+/C HOURS. JUST A JOKE.\r
+/C\r
+/8310   CALL RSPEAK(201)\r
+#8310, JSR     RSPEAK\r
+/      GOTO 2012\r
+       JA      #2012\r
+       JA      #LIT+303\r
+\r
+/C\r
+/C RESUME. RESTORE THE WORLD.\r
+/C\r
+/8320   CALL RSTRGM(.TRUE.,I)\r
+/      GO TO 2012\r
+\r
+#8320, JSR RSTRGM\r
+       JA      #2012\r
+       JA      ONE\r
+       JA      I\r
+\r
+\r
+/C HINTS\r
+/C\r
+/C COME HERE IF HE'S BEEN LONG ENOUGH AT REQUIRED LOC(S) FOR SOME UNUSED HINT.\r
+/C HINT NUMBER IS IN VARIABLE "HINT". BRANCH TO QUICK TEST FOR ADDITIONAL\r
+/C CONDITIONS, THEN COME BACK TO DO NEAT STUFF. GOTO 40010 IF CONDITIONS ARE\r
+/C MET AND WE WANT TO OFFER THE HINT. GOTO 40020 TO CLEAR HINTLC BACK TO ZERO,\r
+/C 40030 TO TAKE NO ACTION YET.\r
+/C\r
+/40000  GOTO (40400,40500,40600,40700,40800,40900)(HINT-3)\r
+/C            CAVE  BIRD  SNAKE MAZE  DARK  WITT\r
+#40000,        FLDA    HINT\r
+       FSUB    THREE\r
+       ATX     1\r
+       STARTD\r
+       FLDA    .+2,1\r
+       STARTF\r
+       JAC\r
+       JA      #40400\r
+       JA      #40500\r
+       JA      #40600\r
+       JA      #40700\r
+       JA      #40800\r
+       JA      #40010\r
+/      CALL BUG(27)\r
+       JSR     BUG\r
+       JA      .+4\r
+       JA      #LIT+60\r
+/C\r
+/40010  HINTLC(HINT)=0\r
+#40010,        FLDA    HINT\r
+       ATX     7\r
+       FCLA\r
+       FSTA    HINTLC-3,7\r
+/      IF(.NOT.YES(HINTS(HINT,3),0,54))GOTO 2602\r
+       FLDA    #LIT+330        / 60 (index 3)\r
+       FADD    HINT            / hint,3\r
+       ATX     7\r
+       FLDA    HINTS-77,7\r
+       FSTA    #TMP\r
+       JSR     YES\r
+       JA      .+10\r
+       JA      #TMP\r
+       JA      ZERO\r
+       JA      #LIT+113\r
+       JEQ     #2602\r
+/      TYPE 40012,HINTS(HINT,2)\r
+       JSA     SPRINT\r
+       JA      #40012\r
+       JA      TWO\r
+\r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #4001A\r
+       FLDA    #LIT+77         / 40\r
+       FADD    HINT            / HINT, 2\r
+       ATX     7\r
+       FLDA    HINTS-77,7\r
+       TRAP3   #RSVO\r
+       TRAP3   #RENDO\r
+\r
+       JSA     SPRINT\r
+       JA      #4001B\r
+       JA      ONE\r
+/40012  FORMAT(' I am prepared to give you a hint, but it will cost you',\r
+/      1       I2,' points.')\r
+\r
+/      HINTED(HINT)=YES(175,HINTS(HINT,4),54)\r
+       FLDA    HINT\r
+       ATX     6\r
+       FADD    #LIT+325        / 80: HINT,4\r
+       ATX     7\r
+       FLDA    HINTS-77,7\r
+       FSTA    #TMP\r
+       JSR     YES\r
+       JA      .+10\r
+       JA      #LIT+250\r
+       JA      #TMP\r
+       JA      #LIT+113\r
+       FSTA    HINTED-3,6\r
+/      IF(HINTED(HINT).AND.LIMIT.GT.30)LIMIT=LIMIT+30*HINTS(HINT,2)\r
+       JEQ     #40020\r
+       FLDA    LIMIT\r
+       FSUB    #LIT+63\r
+       JLE     #40020\r
+       FLDA    #LIT+77         /80\r
+       FADD    HINT            /HINT,2\r
+       ATX     6\r
+       FLDA    #LIT+63\r
+       FMUL    HINTS-77,6\r
+       FADD    LIMIT\r
+       FSTA    LIMIT\r
+/40020  HINTLC(HINT)=0\r
+#40020,        FLDA    HINT\r
+       ATX     7\r
+       FCLA\r
+       FSTA    HINTLC-3,7\r
+/40030  GOTO 2602\r
+#40030,        JA      #2602\r
+\r
+/C\r
+/C NOW FOR THE QUICK TESTS. SEE DATABASE DESCRIPTION FOR ONE-LINE NOTES.\r
+/C\r
+/40400  IF(PROP(GRATE).EQ.0.AND..NOT.HERE(KEYS))GOTO 40010\r
+#40400,        FLDA    GRATE\r
+       JSA     RDPROP\r
+       JNE     #40020\r
+       FLDA    KEYS\r
+       JSA     HERE\r
+       JEQ     #40010\r
+/      GOTO 40020\r
+       JA      #40020\r
+\r
+/40500  IF(HERE(BIRD).AND.TOTING(ROD).AND.OBJ.EQ.BIRD)GOTO 40010\r
+#40500,        FLDA    BIRD\r
+       JSA     HERE\r
+       JEQ     #2602\r
+       FLDA    ROD\r
+       JSA     TOTING\r
+       JEQ     #2602\r
+       FLDA    OBJ\r
+       JEQ     #40010\r
+       FSUB    BIRD\r
+       JEQ     #40010\r
+/      GOTO 40030\r
+       JA      #2602\r
+\r
+/C\r
+/40600  IF(HERE(SNAKE).AND..NOT.HERE(BIRD))GOTO 40010\r
+#40600,        FLDA    SNAKE\r
+       JSA     HERE\r
+       JEQ     #40020\r
+       FLDA    BIRD\r
+       JSA     HERE\r
+       JEQ     #40010\r
+/      GOTO 40020\r
+       JA      #40020\r
+\r
+/C\r
+/40700  IF(ATLOC(LOC).EQ.0.AND.ATLOC(OLDLOC).EQ.0\r
+/      1       .AND.ATLOC(OLDLC2).EQ.0.AND.HOLDNG.GT.1)GOTO 40010\r
+#40700,        FLDA    LOC\r
+       ATX     7\r
+       FLDA    ATLOC-3,7\r
+       JNE     #40020\r
+       FLDA    OLDLOC\r
+       ATX     6\r
+       FLDA    ATLOC-3,6\r
+       JNE     #40020\r
+       FLDA    OLDLC2\r
+       ATX     5\r
+       FLDA    ATLOC-3,5\r
+       JNE     #40020\r
+       FLDA    HOLDNG\r
+       FSUB    ONE\r
+       JGT     #40010\r
+/      GOTO 40020\r
+       JA      #40020\r
+\r
+/C\r
+/40800  IF(PROP(EMRALD).NE.-1.AND.PROP(PYRAM).EQ.-1)GOTO 40010\r
+/      GOTO 40020\r
+#40800,        FLDA    EMRALD\r
+       ATX     7\r
+       FLDA    MINUS1\r
+       FSUB    PROP-3,7\r
+       JEQ     #40020\r
+       FLDA    PYRAM\r
+       ATX     6\r
+       FLDA    MINUS1\r
+       FSUB    PROP-3,6\r
+       JEQ     #40010\r
+/      GOTO 40020\r
+       JA      #40020\r
+/C\r
+/40900 JA      #40010\r
+/#40900        JA      40010\r
+\r
+/C CAVE CLOSING AND SCORING\r
+/C\r
+/C\r
+/C THESE SECTIONS HANDLE THE CLOSING OF THE CAVE. THE CAVE CLOSES "CLOCK1"\r
+/C TURNS AFTER THE LAST TREASURE HAS BEEN LOCATED (INCLUDING THE PIRATE'S\r
+/C CHEST, WHICH MAY OF COURSE NEVER SHOW UP). NOTE THAT THE TREASURES NEED NOT\r
+/C HAVE BEEN TAKEN YET, JUST LOCATED. HENCE CLOCK1 MUST BE LARGE ENOUGH TO GET\r
+/C OUT OF THE CAVE (IT ONLY TICKS WHILE INSIDE THE CAVE). WHEN IT HITS ZERO,\r
+/C WE BRANCH TO 10000 TO START CLOSING THE CAVE, AND THEN SIT BACK AND WAIT FOR\r
+/C HIM TO TRY TO GET OUT. IF HE DOESN'T WITHIN CLOCK2 TURNS, WE CLOSE THE\r
+/C CAVE; IF HE DOES TRY, WE ASSUME HE PANICS, AND GIVE HIM A FEW ADDITIONAL\r
+/C TURNS TO GET FRANTIC BEFORE WE CLOSE. WHEN CLOCK2 HITS ZERO, WE BRANCH TO\r
+/C 11000 TO TRANSPORT HIM INTO THE FINAL PUZZLE. NOTE THAT THE PUZZLE DEPENDS\r
+/C UPON ALL SORTS OF RANDOM THINGS. FOR INSTANCE, THERE MUST BE NO WATER OR\r
+/C OIL, SINCE THERE ARE BEANSTALKS WHICH WE DON'T WANT TO BE ABLE TO WATER,\r
+/C SINCE THE CODE CAN'T HANDLE IT. ALSO, WE CAN HAVE NO KEYS, SINCE THERE IS A\r
+/C GRATE (HAVING MOVED THE FIXED OBJECT!) THERE SEPARATING HIM FROM ALL THE\r
+/C TREASURES. MOST OF THESE PROBLEMS ARISE FROM THE USE OF NEGATIVE PROP\r
+/C NUMBERS TO SUPPRESS THE OBJECT DESCRIPTIONS UNTIL HE'S ACTUALLY MOVED THE\r
+/C OBJECTS.\r
+/C\r
+/C WHEN THE FIRST WARNING COMES, WE LOCK THE GRATE, DESTROY THE BRIDGE, KILL\r
+/C ALL THE DWARVES (AND THE PIRATE), REMOVE THE TROLL AND BEAR (UNLESS DEAD),\r
+/C AND SET "CLOSNG" TO TRUE. LEAVE THE DRAGON; TOO MUCH TROUBLE TO MOVE IT.\r
+/C FROM NOW UNTIL CLOCK2 RUNS OUT, HE CANNOT UNLOCK THE GRATE, MOVE TO ANY\r
+/C LOCATION OUTSIDE THE CAVE (LOC<9), OR CREATE THE BRIDGE. NOR CAN HE BE\r
+/C RESURRECTED IF HE DIES. NOTE THAT THE SNAKE IS ALREADY GONE, SINCE HE GOT\r
+/C TO THE TREASURE ACCESSIBLE ONLY VIA THE HALL OF THE MT. KING. ALSO, HE'S\r
+/C BEEN IN GIANT ROOM (TO GET EGGS), SO WE CAN REFER TO IT. ALSO ALSO, HE'S\r
+/C GOTTEN THE PEARL, SO WE KNOW THE BIVALVE IS AN OYSTER. *AND*, THE DWARVES\r
+/C MUST HAVE BEEN ACTIVATED, SINCE WE'VE FOUND CHEST.\r
+/C\r
+/10000  PROP(GRATE)=0\r
+#10000,        FLDA    GRATE\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      PROP(FISSUR)=0\r
+       FLDA    FISSUR\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      DO 10010 I=1,6\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/      DSEEN(I)=.FALSE.\r
+#H0204,        FLDA    I\r
+       ATX     7\r
+       FCLA\r
+       FSTA    DSEEN-3,7\r
+/10010  DLOC(I)=0\r
+/#10010,       FLDA    I\r
+/      ATX     7\r
+/      FCLA\r
+       FSTA    DLOC-3,7\r
+       FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+6\r
+       JLE     #H0204\r
+/      CALL MOVE(TROLL,0)\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      TROLL\r
+       JA      ZERO\r
+/      CALL MOVE(TROLL+100,0)\r
+       FLDA    TROLL\r
+       ATX     7\r
+       FADD    #LIT+154\r
+       FSTA    #TMP\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      ZERO\r
+/      CALL MOVE(TROLL2,PLAC(TROLL))\r
+/      FLDA    TROLL\r
+/      ATX     7\r
+       FLDA    PLAC-3,7\r
+       FSTA    #TMP\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      TROLL2\r
+       JA      #TMP\r
+/      CALL MOVE(TROLL2+100,FIXD(TROLL))\r
+       FLDA    TROLL2\r
+       FADD    #LIT+154\r
+       FSTA    #TMP\r
+/      FLDA    TROLL\r
+/      ATX     7\r
+       FLDA    FIXD-3,7\r
+       FSTA    #TMP+3\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      #TMP\r
+       JA      #TMP+3\r
+/      CALL JUGGLE(CHASM)\r
+       FLDA    CHASM\r
+       JSA     JUGGLE\r
+/      IF(PROP(BEAR).NE.3)CALL DSTROY(BEAR)\r
+       FLDA    BEAR\r
+       JSA     RDPROP\r
+       FSUB    THREE\r
+       JEQ     .+6\r
+       FLDA    BEAR\r
+       JSA     DSTROY\r
+/      PROP(CHAIN)=0\r
+       FLDA    CHAIN\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      FIXED(CHAIN)=0\r
+/      PROP(AXE)=0\r
+       FLDA    AXE\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      FIXED(AXE)=0\r
+       FSTA    FIXED-3,7\r
+/      CALL RSPEAK(129)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+204\r
+/      CLOCK1=-1\r
+       FLDA    MINUS1\r
+       FSTA    CLOCK1\r
+/      CLOSNG=.TRUE.\r
+       FLDA    ONE\r
+       FSTA    CLOSNG\r
+/      GOTO 19999\r
+       JA      #19999\r
+\r
+/C\r
+/C ONCE HE'S PANICKED, AND CLOCK2 HAS RUN OUT, WE COME HERE TO SET UP THE\r
+/C STORAGE ROOM. THE ROOM HAS TWO LOCS, HARDWIRED AS 115 (NE) AND 116 (SW).\r
+/C AT THE NE END, WE PLACE EMPTY BOTTLES, A NURSERY OF PLANTS, A BED OF\r
+/C OYSTERS, A PILE OF LAMPS, RODS WITH STARS, SLEEPING DWARVES, AND HIM. AND\r
+/C THE SW END WE PLACE GRATE OVER TREASURES, SNAKE PIT, COVEY OF CAGED BIRDS,\r
+/C MORE RODS, AND PILLOWS. A MIRROR STRETCHES ACROSS ONE WALL. MANY OF THE\r
+/C OBJECTS COME FROM KNOWN LOCATIONS AND/OR STATES (E.G. THE SNAKE IS KNOWN TO\r
+/C HAVE BEEN DESTROYED AND NEEDN'T BE CARRIED AWAY FROM ITS OLD "PLACE"),\r
+/C MAKING THE VARIOUS OBJECTS BE HANDLED DIFFERENTLY. WE ALSO DROP ALL OTHER\r
+/C OBJECTS HE MIGHT BE CARRYING (LEST HE HAVE SOME WHICH COULD CAUSE TROUBLE,\r
+/C SUCH AS THE KEYS). WE DESCRIBE THE FLASH OF LIGHT AND TRUNDLE BACK.\r
+/C\r
+/11000  PROP(BOTTLE)=PUT(BOTTLE,115,1)\r
+#11000,        FLDA    BOTTLE\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      BOTTLE\r
+       JA      #LIT+165\r
+       JA      ONE\r
+       FSTA    PROP-3,7\r
+/      PROP(PLANT)=PUT(PLANT,115,0)\r
+       FLDA    PLANT\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      PLANT\r
+       JA      #LIT+165\r
+       JA      ZERO\r
+       FSTA    PROP-3,7\r
+/      PROP(OYSTER)=PUT(OYSTER,115,0)\r
+       FLDA    OYSTER\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      OYSTER\r
+       JA      #LIT+165\r
+       JA      ZERO\r
+       FSTA    PROP-3,7\r
+/      PROP(LAMP)=PUT(LAMP,115,0)\r
+       FLDA    LAMP\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      LAMP\r
+       JA      #LIT+165\r
+       JA      ZERO\r
+       FSTA    PROP-3,7\r
+/      PROP(ROD)=PUT(ROD,115,0)\r
+       FLDA    ROD\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      ROD\r
+       JA      #LIT+165\r
+       JA      ZERO\r
+       FSTA    PROP-3,7\r
+/      PROP(DWARF)=PUT(DWARF,115,0)\r
+       FLDA    DWARF\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      DWARF\r
+       JA      #LIT+165\r
+       JA      ZERO\r
+       FSTA    PROP-3,7\r
+/      LOC=115\r
+/      OLDLOC=115\r
+/      NEWLOC=115\r
+       FLDA    #LIT+165\r
+       FSTA    LOC\r
+       FSTA    OLDLOC\r
+       FSTA    NEWLOC\r
+/C\r
+/C LEAVE THE GRATE WITH NORMAL (NON-NEGATIVE PROPERTY).\r
+/C\r
+/      I=PUT(GRATE,116,0)\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      GRATE\r
+       JA      #LIT+170\r
+       JA      ZERO\r
+       FSTA    I\r
+/      PROP(SNAKE)=PUT(SNAKE,116,1)\r
+       FLDA    SNAKE\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      SNAKE\r
+       JA      #LIT+170\r
+       JA      ONE\r
+       FSTA    PROP-3,7\r
+/      PROP(BIRD)=PUT(BIRD,116,1)\r
+       FLDA    BIRD\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      BIRD\r
+       JA      #LIT+170\r
+       JA      ONE\r
+       FSTA    PROP-3,7\r
+/      PROP(CAGE)=PUT(CAGE,116,0)\r
+       FLDA    CAGE\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      CAGE\r
+       JA      #LIT+170\r
+       JA      ZERO\r
+       FSTA    PROP-3,7\r
+/      PROP(ROD2)=PUT(ROD2,116,0)\r
+       FLDA    ROD2\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      ROD2\r
+       JA      #LIT+170\r
+       JA      ZERO\r
+       FSTA    PROP-3,7\r
+/      PROP(PILLOW)=PUT(PILLOW,116,0)\r
+       FLDA    PILLOW\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      PILLOW\r
+       JA      #LIT+170\r
+       JA      ZERO\r
+       FSTA    PROP-3,7\r
+/C\r
+/      PROP(MIRROR)=PUT(MIRROR,115,0)\r
+       FLDA    MIRROR\r
+       ATX     7\r
+       JSR     PUT\r
+       JA      .+10\r
+       JA      MIRROR\r
+       JA      #LIT+165\r
+       JA      ZERO\r
+       FSTA    PROP-3,7\r
+/      FIXED(MIRROR)=116\r
+       FLDA    #LIT+170\r
+       FSTA    FIXED-3,7\r
+/C\r
+/      DO 11010 I=1,100\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/11010  IF(TOTING(I))CALL DSTROY(I)\r
+#11010,        FLDA    I\r
+       JSA     TOTING\r
+       JEQ     .+6\r
+       FLDA    I\r
+       JSA     DSTROY\r
+       FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #LIT+154\r
+       JLE     #11010\r
+/C\r
+/      CALL RSPEAK(132)\r
+       JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+215\r
+/      CLOSED=.TRUE.\r
+       FLDA    ONE\r
+       FSTA    CLOSED\r
+/      GOTO 2\r
+       JA      #2\r
+\r
+/C\r
+/C ANOTHER WAY WE CAN FORCE AN END TO THINGS IS BY HAVING THE LAMP GIVE OUT.\r
+/C WHEN IT GETS CLOSE, WE COME HERE TO WARN HIM. WE GO TO 12000 IF THE LAMP\r
+/C AND FRESH BATTERIES ARE HERE, IN WHICH CASE WE REPLACE THE BATTERIES AND\r
+/C CONTINUE. 12200 IS FOR OTHER CASES OF LAMP DYING.12400 IS WHEN IT GOES\r
+/C OUT, AND 12600 IS IF HE'S WANDERED OUTSIDE AND THE LAMP IS USED UP, IN WHICH\r
+/C CASE WE FORCE HIM TO GIVE UP.\r
+/C\r
+/12000  CALL RSPEAK(188)\r
+#12000,        JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+264\r
+/      PROP(BATTER)=1\r
+       FLDA    BATTER\r
+       ATX     7\r
+       FLDA    ONE\r
+       FSTA    PROP-3,7\r
+/      IF(TOTING(BATTER))CALL DROP(BATTER,LOC)\r
+       FLDA    BATTER\r
+       JSA     TOTING\r
+       JEQ     .+12\r
+       JSR     DROP\r
+       JA      .+6\r
+       JA      BATTER\r
+       JA      LOC\r
+/      LIMIT=LIMIT+2500\r
+       FLDA    #LIT+317\r
+       FADDM   LIMIT\r
+/      LMWARN=.FALSE.\r
+       FCLA\r
+       FSTA    LMWARN\r
+/      GOTO 19999\r
+       JA      #19999\r
+\r
+/C\r
+/12200  IF(LMWARN.OR..NOT.HERE(LAMP))GOTO 19999\r
+#12200,        FLDA    LAMP\r
+       JSA     HERE\r
+       JEQ     #19999\r
+       FLDA    LMWARN\r
+       JNE     #19999\r
+/      LMWARN=.TRUE.\r
+       FLDA    ONE\r
+       FSTA    LMWARN\r
+/      SPK=187\r
+       DECIMAL\r
+               LDX     187,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(PLACE(BATTER).EQ.0)SPK=183\r
+       FLDA    BATTER\r
+       ATX     7\r
+       FLDA    PLACE-3,7\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     183,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      IF(PROP(BATTER).EQ.1)SPK=189\r
+       FLDA    PROP-3,7\r
+       FSUB    ONE\r
+       JNE     .+6\r
+       DECIMAL\r
+               LDX     189,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    SPK\r
+/      CALL RSPEAK(SPK)\r
+#H0214,        JSR     RSPEAK\r
+       JA      #19999\r
+       JA      SPK\r
+/      GOTO 19999\r
+\r
+/C\r
+/12400  LIMIT=-1\r
+#12400,        FLDA    MINUS1\r
+       FSTA    LIMIT\r
+/      PROP(LAMP)=0\r
+       FLDA    LAMP\r
+       ATX     7\r
+       FCLA\r
+       FSTA    PROP-3,7\r
+/      IF(HERE(LAMP))CALL RSPEAK(184)\r
+       FLDA    LAMP\r
+       JSA     HERE\r
+/      GOTO 19999\r
+       JEQ     #19999\r
+       JSR     RSPEAK\r
+       JA      #19999\r
+       JA      #LIT+253\r
+\r
+/C\r
+/12600  CALL RSPEAK(185)\r
+#12600,        JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+256\r
+/      GAVEUP=.TRUE.\r
+       FLDA    ONE\r
+       FSTA    GAVEUP\r
+/      GOTO 20000\r
+       JA      #20000\r
+\r
+/C\r
+/C\r
+/C OH DEAR, HE'S DISTURBED THE DWARVES.\r
+/C\r
+/19000  CALL RSPEAK(136)\r
+#19000,        JSR     RSPEAK\r
+       JA      .+4\r
+       JA      #LIT+220\r
+\r
+/C\r
+/C EXIT CODE. WILL EVENTUALLY INCLUDE SCORING. FOR NOW, HOWEVER, ...\r
+/C\r
+/C THE PRESENT SCORING ALGORITHM IS AS FOLLOWS:\r
+/C     OBJECTIVE:          POINTS:        PRESENT TOTAL POSSIBLE:\r
+/C  GETTING WELL INTO CAVE   25                    25\r
+/C  EACH TREASURE < CHEST    12                    60\r
+/C  TREASURE CHEST ITSELF    14                    14\r
+/C  EACH TREASURE > CHEST    16                   144\r
+/C  SURVIVING             (MAX-NUM)*10             30\r
+/C  NOT QUITTING              4                     4\r
+/C  REACHING "CLOSNG"        25                    25\r
+/C  "CLOSED": QUIT/KILLED    10\r
+/C            KLUTZED        25\r
+/C            WRONG WAY      30\r
+/C            SUCCESS        45                    45\r
+/C  CAME TO WITT'S END        1                     1\r
+/C  ROUND OUT THE TOTAL       2                     2\r
+/C                                       TOTAL:   350\r
+/20000  SCORE=0\r
+#20000,        FCLA\r
+       FSTA    SCORE\r
+/      MXSCOR=0\r
+       FSTA    MXSCOR\r
+/C\r
+/C FIRST TALLY UP THE TREASURES. MUST BE IN BUILDING AND NOT BROKEN.\r
+/C GIVE THE POOR GUY 2 POINTS JUST FOR FINDING EACH TREASURE.\r
+/C\r
+/      DO 20010 I=50,MAXTRS\r
+       FLDA    #LIT+110\r
+       FSTA    I\r
+\r
+/      IF(PTEXT(I).EQ.0)GOTO 20010\r
+#H0216,        FLDA    I\r
+       ATX     7\r
+       FLDA    PTEXT-3,7\r
+       JEQ     #20010\r
+/      K=12\r
+       FLDA    #LIT+22\r
+       FSTA    K\r
+/      IF(I.EQ.CHEST)K=14\r
+       FLDA    I\r
+       FSUB    CHEST\r
+       JNE     .+7\r
+       DECIMAL\r
+               LDX     14,0\r
+       OCTAL\r
+       XTA     0\r
+       FSTA    K\r
+/      IF(I.GT.CHEST)K=16\r
+       FLDA    I\r
+       FSUB    CHEST\r
+       JLE     .+5\r
+       FLDA    #LIT+30\r
+       FSTA    K\r
+/      IF(PROP(I).GE.0)SCORE=SCORE+2\r
+       FLDA    PROP-3,7\r
+       JLT     .+5\r
+       FLDA    TWO\r
+       FADDM   SCORE\r
+/      IF(PLACE(I).EQ.3.AND.PROP(I).EQ.0)SCORE=SCORE+K-2\r
+       FLDA    PLACE-3,7\r
+       FSUB    THREE\r
+       JNE     #M100\r
+       FLDA    PROP-3,7\r
+       JNE     #M100\r
+       FLDA    SCORE\r
+       FADD    K\r
+       FSUB    TWO\r
+       FSTA    SCORE\r
+/      MXSCOR=MXSCOR+K\r
+#M100, FLDA    K\r
+       FADDM   MXSCOR\r
+\r
+/20010  CONTINUE\r
+#20010,        FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    MAXTRS\r
+       JLE     #H0216\r
+/C\r
+/C NOW LOOK AT HOW HE FINISHED AND HOW FAR HE GOT. MAXDIE AND NUMDIE TELL US\r
+/C HOW WELL HE SURVIVED. GAVEUP SAYS WHETHER HE EXITED VIA QUIT. DFLAG WILL\r
+/C TELL US IF HE EVER GOT SUITABLY DEEP INTO THE CAVE. CLOSNG STILL INDICATES\r
+/C WHETHER HE REACHED THE ENDGAME. AND IF HE GOT AS FAR AS "CAVE CLOSED"\r
+/C (INDICATED BY "CLOSED"), THEN BONUS IS ZERO FOR MUNDANE EXITS OR 133, 134,\r
+/C 135 IF HE BLEW IT (SO TO SPEAK).\r
+/C\r
+/      SCORE=SCORE+(MAXDIE-NUMDIE)*10\r
+       FLDA    MAXDIE\r
+       FSUB    NUMDIE\r
+       FMUL    #LIT+17\r
+       FADDM   SCORE\r
+/      MXSCOR=MXSCOR+MAXDIE*10\r
+       FLDA    MAXDIE\r
+       FMUL    #LIT+17\r
+       FADDM   MXSCOR\r
+/      IF(.NOT.(SCORNG.OR.GAVEUP))SCORE=SCORE+4\r
+       FLDA    SCORNG\r
+       FADD    GAVEUP\r
+       JNE     .+5\r
+       FLDA    #LIT\r
+       FADDM   SCORE\r
+/      MXSCOR=MXSCOR+4\r
+       FLDA    #LIT\r
+       FADDM   MXSCOR\r
+\f\r
+/      IF(DFLAG.NE.0)SCORE=SCORE+25\r
+       FLDA    DFLAG\r
+       JEQ     .+5\r
+       FLDA    #LIT+52\r
+       FADDM   SCORE\r
+/      MXSCOR=MXSCOR+25\r
+       FLDA    #LIT+52\r
+       FADDM   MXSCOR\r
+/      IF(CLOSNG)SCORE=SCORE+25\r
+       FLDA    CLOSNG\r
+       JEQ     .+5\r
+       FLDA    #LIT+52\r
+       FADDM   SCORE\r
+/      MXSCOR=MXSCOR+25\r
+       FLDA    #LIT+52\r
+       FADDM   MXSCOR\r
+/      IF(.NOT.CLOSED)GOTO 20020\r
+       FLDA    CLOSED\r
+       JEQ     #20020\r
+/      IF(BONUS.EQ.0)SCORE=SCORE+10\r
+       FLDA    BONUS\r
+       JNE     .+5\r
+       FLDA    #LIT+17\r
+       FADDM   SCORE\r
+/      IF(BONUS.EQ.135)SCORE=SCORE+25\r
+       DECIMAL\r
+               LDX     135,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    BONUS\r
+       JNE     .+5\r
+       FLDA    #LIT+52\r
+       FADDM   SCORE\r
+/      IF(BONUS.EQ.134)SCORE=SCORE+30\r
+       DECIMAL\r
+               LDX     134,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    BONUS \r
+       JNE     .+5\r
+       FLDA    #LIT+63\r
+       FADDM   SCORE\r
+/      IF(BONUS.EQ.133)SCORE=SCORE+45\r
+       DECIMAL\r
+               LDX     133,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    BONUS\r
+       JNE     #20020\r
+       FLDA    #LIT+102\r
+       FADDM   SCORE\r
+/20020  MXSCOR=MXSCOR+45\r
+#20020,        FLDA    #LIT+102\r
+       FADDM   MXSCOR\r
+/C\r
+/C DID HE COME TO WITT'S END AS HE SHOULD?\r
+/C\r
+/      IF(PLACE(MAGZIN).EQ.108)SCORE=SCORE+1\r
+       FLDA    MAGZIN\r
+       ATX     7\r
+       DECIMAL\r
+               LDX     108,0\r
+       OCTAL\r
+       XTA     0\r
+       FSUB    PLACE-3,7\r
+       JNE     .+5\r
+       FLDA    ONE\r
+       FADDM   SCORE\r
+/      MXSCOR=MXSCOR+1\r
+       FLDA    ONE\r
+       FADDM   MXSCOR\r
+/C\r
+/C ROUND IT OFF.\r
+/C\r
+/      SCORE=SCORE+2\r
+       FLDA    TWO\r
+       FADDM   SCORE\r
+/      MXSCOR=MXSCOR+2\r
+       FADDM   MXSCOR\r
+/C\r
+/C DEDUCT POINTS FOR HINTS. HINTS < 4 ARE SPECIAL; SEE DATABASE DESCRIPTION.\r
+/C\r
+/      DO 20030 I=1,HNTMAX\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/20030  IF(HINTED(I))SCORE=SCORE-HINTS(I,2)\r
+#20030,        FLDA    I\r
+       ATX     7\r
+       FLDA    HINTED-3,7\r
+       JEQ     .+14\r
+       FLDA    #LIT+77         /20\r
+       FADD    I               /I, 2\r
+       ATX     6\r
+       FLDA    SCORE\r
+       FSUB    HINTS-77,6\r
+       FSTA    SCORE\r
+\r
+       FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    HNTMAX\r
+       JLE     #20030\r
+/C\r
+/C RETURN TO SCORE COMMAND IF THAT'S WHERE WE CAME FROM.\r
+/C\r
+/      IF(SCORNG)GOTO 8241\r
+       FLDA    SCORNG\r
+       JNE     #8241\r
+/C\r
+/C THAT SHOULD BE GOOD ENOUGH. LET'S TELL HIM ALL ABOUT IT.\r
+/C\r
+/      TYPE 20100,SCORE,MXSCOR,TURNS\r
+       JSA     SPRINT\r
+       JA      #20100\r
+       JA      TWO\r
+\r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #2010A\r
+       FLDA    SCORE\r
+       TRAP3   #RSVO\r
+       TRAP3   #RENDO\r
+\r
+       JSA     SPRINT\r
+       JA      #2010B\r
+       JA      THREE\r
+\r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #2010A\r
+       FLDA    MXSCOR\r
+       TRAP3   #RSVO\r
+       TRAP3   #RENDO\r
+\r
+       JSA     SPRINT\r
+       JA      #2010C\r
+       JA      THREE\r
+\r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #2010D\r
+\r
+       FLDA    TURNS\r
+       TRAP3   #RSVO\r
+       TRAP3   #RENDO\r
+\r
+       JSA     SPRINT\r
+       JA      #2010E\r
+       JA      ONE\r
+\r
+/20100  FORMAT(/' You scored',I4,' out of a possible',I4,\r
+/      1       ', using',I5,' turns.')\r
+/C\r
+/      DO 20200 I=1,CLSSES\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/      IF(CVAL(I).GE.SCORE)GOTO 20210\r
+#I0064,        FLDA    I\r
+       ATX     7\r
+       FLDA    CVAL-3,7\r
+       FSUB    SCORE\r
+       JGE     #20210\r
+\r
+/20200  CONTINUE\r
+#20200,        FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    CLSSES\r
+       JLE     #I0064\r
+/      TYPE 20202\r
+       JSA     SPRINT\r
+       JA      #20202\r
+       JA      ZERO\r
+       \r
+/20202  FORMAT(' You just went off my scale!!'/)\r
+/      GOTO 25000\r
+       JA      #25000\r
+\r
+/C\r
+/20210  CALL SPEAK(CTEXT(I))\r
+#20210,        FLDA    I\r
+       ATX     7\r
+       FLDA    CTEXT-3,7       /GET CLASS MESSAGE\r
+       FSTA    #TMP+3\r
+       JSR     SPEAK\r
+       JA      .+4\r
+       JA      #TMP+3\r
+/      IF(I.EQ.CLSSES-1)GOTO 20220\r
+       FLDA    CLSSES\r
+       FSUB    ONE\r
+       FSUB    I\r
+       JEQ     #20220\r
+/      K=CVAL(I)+1-SCORE\r
+       FLDA    I\r
+       ATX     7\r
+       FLDA    CVAL-3,7\r
+       FADD    ONE\r
+       FSUB    SCORE\r
+       FSTA    K\r
+/      TYPE 20212,K\r
+       JSA     SPRINT\r
+       JA      #20212\r
+       JA      TWO\r
+\r
+       JSA     SPRINT\r
+       JA      #2021A\r
+       JA      THREE\r
+\r
+       TRAP3   #WRITO\r
+       JA      #LIT\r
+       JA      #2021B\r
+       FLDA    K\r
+       TRAP3   #RSVO\r
+       TRAP3   #RENDO\r
+\r
+       JSA     SPRINT\r
+       JA      #2021C\r
+       JA      THREE\r
+       \r
+/20212  FORMAT(' To achieve the next higher rating, you need',I3,\r
+/      1       ' more point',$)\r
+/      IF(K.EQ.1) TYPE 20213\r
+       FLDA    K\r
+       FSUB    ONE\r
+       JNE     .+12\r
+       JSA     SPRINT\r
+       JA      #20213\r
+       JA      ONE\r
+       JA      #25000\r
+\r
+/      IF(K.NE.1) TYPE 20214\r
+       JSA     SPRINT\r
+       JA      #20214\r
+       JA      ONE\r
+/20213  FORMAT('+.'/)\r
+\r
+/20214  FORMAT('+s.'/)\r
+/      GOTO 25000\r
+       JA      #25000\r
+/C\r
+/20220  TYPE 20222\r
+#20220,        JSA     SPRINT\r
+       JA      #20212\r
+       JA      TWO\r
+\r
+       JSA     SPRINT\r
+       JA      #20222\r
+       JA      ONE\r
+\r
+       JSA     SPRINT\r
+       JA      #20223\r
+       JA      ZERO\r
+/20222  FORMAT(' To achieve the next higher rating ',\r
+/      1       'would be a neat trick!'/' Congratulations!!'/)\r
+/      RETURN\r
+       JA      #GOBAK\r
+/      END\r
+/\r
+/ Fortran Formats:\r
+/\r
+#67A,  TEXT    %T]HERE ARE @%\r
+#67,   TEXT    %('+',I1,$)%\r
+#67B,  TEXT    % T]HREATENING LITTLE DWARVES IN THE ROOM WITH YOU.@%\r
+#68,\r
+#78,   TEXT    %(1X,I1,$)%\r
+#78B,  TEXT    % ]OF THEM THROW KNIVES AT YOU!@%\r
+#68B,  TEXT    % ]OF THEM GET YOU!@%\r
+#5015, TEXT    %W]HAT DO YOU WANT TO DO WITH THE @%\r
+#5199, TEXT    %I] DON'T SEE ANY "@%\r
+#8002, TEXT    %I ]DON'T UNDERSTAND "@%\r
+#9032, TEXT    %O]KAY, "@%\r
+#8243, TEXT    %I]F YOU WERE TO QUIT NOW, YOU WOULD SCORE @%\r
+#2010A,\r
+#2021B,\r
+#8243A,        TEXT    %('+',I3,$)%\r
+#2010B,\r
+#8243B,        TEXT    % ]OUT OF A POSSIBLE @%\r
+#20213,        \r
+#8243C,        TEXT    %.@%\r
+#40012,        TEXT    %I] AM PREPARED TO GIVE YOU A HINT, BUT IT WILL COST YOU @%\r
+#4001A,        TEXT    %('+',I2,$)%\r
+#4001B,        TEXT    % ]POINTS.@%\r
+#20100,        TEXT    %Y]OU SCORED @%\r
+#2010C,        TEXT    % ]USING @%\r
+#2010D,        TEXT    %('+',I5,$)%\r
+#2010E,        TEXT    % ]TURNS.@%\r
+#20202,        TEXT    %Y]OU JUST WENT OFF MY SCALE!!@%\r
+#20212, TEXT   %T]O ACHIEVE THE NEXT HIGHER RATING@%\r
+#2021A, TEXT   %, ]YOU NEED @%\r
+#2021C,        TEXT    % ]MORE POINT@%\r
+#20214,        TEXT    %]S.@%\r
+#20222,        TEXT    %] WOULD BE A NEAT TRICK!@%\r
+#20223,        TEXT    %C]ONGRATULATIONS!!@%\r
+       END\r
diff --git a/sw/adventure/BITSET.RA b/sw/adventure/BITSET.RA
new file mode 100644 (file)
index 0000000..ee1ee8a
--- /dev/null
@@ -0,0 +1,218 @@
+       SECT    BTSET\r
+       ENTRY   ISHFT\r
+       ENTRY   BITSET\r
+       ENTRY   #ANDER\r
+       EXTERN  #RETRN\r
+       EXTERN  #FIX\r
+       SECT8   BITTER\r
+\r
+#ANDER,        TAD     #XR             /Simple masking\r
+       AND     #XR+1\r
+       DCA     #XR\r
+       CIF CDF\r
+       JMP%    #XR+2           / Return\r
+\r
+/FPP code here; using the rest of the SECT8 page.\r
+\r
+SECNAM,        TEXT    +BITSET+        /For traceback\r
+#RET,  SETX    #XR             /Return addr\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+3             /Base 0\r
+N,     ORG     .+3             /Base 1 - value\r
+L,     ORG     .+3\r
+#BSET, TEXT    +BITSET+        /Base 2 - section name\r
+#ISH,  TEXT    +ISHFT +        /Base 3\r
+\r
+/ Now at address 23, past autoindex registers.\r
+#XR,   FNOP                    /XR 0\r
+       ADDR    #RETRN          /XR 1; XR2 return to FRTS address.\r
+       ORG     #XR+10          / Space for our index regs\r
+\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+       #LBL=.\r
+       COMMON  MISCOM\r
+LINUSE,        ORG     .+0003\r
+TRVS,  ORG     .+0003\r
+CLSSES,        ORG     .+0003\r
+OLDLOC,        ORG     .+0003\r
+LOC,   ORG     .+0003\r
+CVAL,  ORG     .+0044\r
+TK,    ORG     .+0074\r
+NEWLOC,        ORG     .+0003\r
+KEY,   ORG     .+0702\r
+PLAC,  ORG     .+0454\r
+FIXD,  ORG     .+0454\r
+ACTSPK,        ORG     .+0151\r
+COND,  ORG     .+0702\r
+HINTS, ORG     .+0360\r
+HNTMAX,        ORG     .+0003\r
+PROP,  ORG     .+0454\r
+TALLY, ORG     .+0003\r
+TALLY2,        ORG     .+0003\r
+HINTLC,        ORG     .+0074\r
+CHLOC, ORG     .+0003\r
+CHLOC2,        ORG     .+0003\r
+DSEEN, ORG     .+0022\r
+DFLAG, ORG     .+0003\r
+DLOC,  ORG     .+0022\r
+DALTLC,        ORG     .+0003\r
+KEYS,  ORG     .+0003\r
+LAMP,  ORG     .+0003\r
+GRATE, ORG     .+0003\r
+CAGE,  ORG     .+0003\r
+ROD,   ORG     .+0003\r
+ROD2,  ORG     .+0003\r
+STEPS, ORG     .+0003\r
+BIRD,  ORG     .+0003\r
+DOOR,  ORG     .+0003\r
+PILLOW,        ORG     .+0003\r
+SNAKE, ORG     .+0003\r
+FISSUR,        ORG     .+0003\r
+TABLET,        ORG     .+0003\r
+CLAM,  ORG     .+0003\r
+OYSTER,        ORG     .+0003\r
+MAGZIN,        ORG     .+0003\r
+DWARF, ORG     .+0003\r
+KNIFE, ORG     .+0003\r
+FOOD,  ORG     .+0003\r
+BOTTLE,        ORG     .+0003\r
+WATER, ORG     .+0003\r
+OIL,   ORG     .+0003\r
+PLANT, ORG     .+0003\r
+PLANT2,        ORG     .+0003\r
+AXE,   ORG     .+0003\r
+MIRROR,        ORG     .+0003\r
+DRAGON,        ORG     .+0003\r
+CHASM, ORG     .+0003\r
+TROLL, ORG     .+0003\r
+TROLL2,        ORG     .+0003\r
+BEAR,  ORG     .+0003\r
+MESSAG,        ORG     .+0003\r
+VEND,  ORG     .+0003\r
+BATTER,        ORG     .+0003\r
+NUGGET,        ORG     .+0003\r
+COINS, ORG     .+0003\r
+CHEST, ORG     .+0003\r
+EGGS,  ORG     .+0003\r
+TRIDNT,        ORG     .+0003\r
+VASE,  ORG     .+0003\r
+EMRALD,        ORG     .+0003\r
+PYRAM, ORG     .+0003\r
+PEARL, ORG     .+0003\r
+RUG,   ORG     .+0003\r
+CHAIN, ORG     .+0003\r
+BACK,  ORG     .+0003\r
+LOOK,  ORG     .+0003\r
+CAVE,  ORG     .+0003\r
+NULL,  ORG     .+0003\r
+ENTRNC,        ORG     .+0003\r
+DPRSSN,        ORG     .+0003\r
+SAY,   ORG     .+0003\r
+LOCK,  ORG     .+0003\r
+THROW, ORG     .+0003\r
+FIND,  ORG     .+0003\r
+INVENT,        ORG     .+0003\r
+TURNS, ORG     .+0003\r
+LMWARN,        ORG     .+0003\r
+KNFLOC,        ORG     .+0003\r
+DETAIL,        ORG     .+0003\r
+ABBNUM,        ORG     .+0003\r
+NUMDIE,        ORG     .+0003\r
+MAXDIE,        ORG     .+0003\r
+DKILL, ORG     .+0003\r
+FOOBAR,        ORG     .+0003\r
+BONUS, ORG     .+0003\r
+CLOCK1,        ORG     .+0003\r
+CLOCK2,        ORG     .+0003\r
+CLOSNG,        ORG     .+0003\r
+PANIC, ORG     .+0003\r
+CLOSED,        ORG     .+0003\r
+GAVEUP,        ORG     .+0003\r
+SCORNG,        ORG     .+0003\r
+ODLOC, ORG     .+0022\r
+STREAM,        ORG     .+0003\r
+SPICES,        ORG     .+0003\r
+       ORG     #LBL\r
+\r
+COUNT, ORG     .+3\r
+ONE,   F 1.0\r
+\r
+\r
+/BITSET(L,N) = (COND(L).AND.ISHFT(1,N)) .NE.0\r
+\r
+BITSET,        FLDA    #BSET           /Section name\r
+       JSA     GETARG          /Common setup\r
+       BASE    #BASE\r
+\r
+       FLDA%   L               /Get array index\r
+       ATX     1\r
+       FLDA    COND-0003,1     /COND(L)\r
+       FSTA    ITEST           / COND(L)\r
+       LDX     1,0             /Put 1 into shift value\r
+       FLDA%   N               /Get N value\r
+       JEQ     #1              /No shift if zero\r
+       FNEG                    /Negate\r
+       ATX     1               /Into register\r
+       XTA     0               /Get the "1" back\r
+       ALN     0\r
+       STARTD\r
+       ALN     1               /Do the shift\r
+       STARTF\r
+       ATX     0               /Put result in place\r
+#1,    XTA     0               /Get result\r
+       JSA     #FIX\r
+       ATX     0               /One mask value\r
+       FLDA    ITEST\r
+       JSA     #FIX\r
+       ATX     1               /The other\r
+       TRAP3   #ANDER          /AND it\r
+       XTA     0               /Restore value\r
+       JEQ     #GOBAK          /Return if zero\r
+       FLDA    ONE             /Else one\r
+       JA      #GOBAK          /Done.\r
+ITEST, ORG     .+3             /Test value\r
+\r
+/\r
+/ ISHFT entry point\r
+/\r
+       BASE    0\r
+ISHFT, FLDA    #ISH            /Section name\r
+       JSA     GETARG          /Common setup\r
+\r
+       BASE    #BASE\r
+       FLDA%   N               /Get shift count\r
+       JEQ     #SKIP           /No need to shift\r
+       FNEG                    /Negative shift count goes left\r
+       ATX     1               /Into XR 1\r
+       FLDA%   L               /Get value to shift\r
+       ALN     0               /Align to right\r
+       STARTD\r
+       ALN     1               /Shift\r
+       STARTF                  /Done\r
+       JSA     #FIX\r
+       JA      #GOBAK          /Done\r
+#SKIP, FLDA%   L               /Get value back\r
+       JA      #GOBAK          /Done\r
+\r
+GETARG,        0;0                     /Common setup routine\r
+       FSTA    SECNAM          /AC has section name\r
+       STARTD\r
+       0210                    /Get caller's return\r
+       FSTA    #GOBAK,0\r
+       0200                    /Get arg list\r
+       SETX    #XR             /Set up index registers\r
+       SETB    #BASE           /Set up base page\r
+       FSTA    #BASE           /Set up arg list\r
+       LDX     0,1             /Zero to XR #1\r
+       FLDA%   #BASE,1+        /Get first arg\r
+       FSTA    L\r
+       FLDA%   #BASE,1+        /Second arg\r
+       FSTA    N\r
+       STARTF\r
+       JA      GETARG          /Return\r
+       END\r
diff --git a/sw/adventure/BUG.FT b/sw/adventure/BUG.FT
new file mode 100644 (file)
index 0000000..0749280
--- /dev/null
@@ -0,0 +1,28 @@
+       SUBROUTINE BUG(NUM)\r
+C\r
+C  THE FOLLOWING CONDITIONS ARE CURRENTLY CONSIDERED FATAL BUGS.  NUMBERS < 20\r
+C  ARE DETECTED WHILE READING THE DATABASE; THE OTHERS OCCUR AT "RUN TIME".\r
+C      0       MESSAGE LINE > 70 CHARACTERS\r
+C      1       NULL LINE IN MESSAGE\r
+C      2       TOO MANY WORDS OF MESSAGES\r
+C      3       TOO MANY TRAVEL OPTIONS\r
+C      4       TOO MANY VOCABULARY WORDS\r
+C      5       REQUIRED VOCABULARY WORD NOT FOUND\r
+C      6       TOO MANY RTEXT OR MTEXT MESSAGES\r
+C      7       TOO MANY HINTS\r
+C      8       LOCATION HAS COND BIT BEING SET TWICE\r
+C      9       INVALID SECTION NUMBER IN DATABASE\r
+C      20      SPECIAL TRAVEL (500>L>300) EXCEEDS GOTO LIST\r
+C      21      RAN OFF END OF VOCABULARY TABLE\r
+C      22      VOCABULARY TYPE (N/1000) NOT BETWEEN 0 AND 3\r
+C      23      INTRANSITIVE ACTION VERB EXCEEDS GOTO LIST\r
+C      24      TRANSITIVE ACTION VERB EXCEEDS GOTO LIST\r
+C      25      CONDITIONAL TRAVEL ENTRY WITH NO ALTERNATIVE\r
+C      26      LOCATION HAS NO TRAVEL ENTRIES\r
+C      27      HINT NUMBER EXCEEDS GOTO LIST\r
+C      28      INVALID MONTH RETURNED BY DATE FUNCTION\r
+C\r
+       WRITE(4,1)NUM\r
+1      FORMAT (' FATAL ERROR ',I3,', CONSULT YOUR LOCAL WIZARD.'/)\r
+       STOP\r
+       END\r
diff --git a/sw/adventure/CARRY.RA b/sw/adventure/CARRY.RA
new file mode 100644 (file)
index 0000000..94f941d
--- /dev/null
@@ -0,0 +1,99 @@
+       SECT    CARRY\r
+/       SUBROUTINE CARRY(OBJECT,WHERE)\r
+/       C\r
+/       C  START TOTING AN OBJECT, REMOVING IT FROM THE LIST OF THINGS AT ITS FORMER\r
+/       C  LOCATION.  INCR HOLDNG UNLESS IT WAS ALREADY BEING TOTED.  IF OBJECT>100\r
+/       C  (MOVING "FIXED" SECOND LOC), DON'T CHANGE PLACE OR HOLDNG.\r
+/       C\r
+/       IMPLICIT INTEGER (A-Z)\r
+/       COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+/       DIMENSION ATLOC(150),LINK(200),PLACE(100),FIXED(100)\r
+/       C\r
+\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +CARRY+\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+6\r
+OBJECT,        ORG     .+3\r
+WHERE, ORG     .+3\r
+HUND,  F 100.0\r
+ONE,   F 1.0\r
+M1,    F -1.0\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+       #LBL=.\r
+       COMMON  PLACOM\r
+ATLOC, ORG     .+0702\r
+LINK,  ORG     .+1130\r
+PLACE, ORG     .+0454\r
+FIXED, ORG     .+0454\r
+HOLDNG,        ORG     .+3\r
+       ORG     #LBL\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    OBJECT\r
+       FLDA%   #BASE,1+\r
+       FSTA    WHERE\r
+       STARTF\r
+       FLDA%   WHERE           /Pre-load indexes\r
+       ATX     6\r
+       FLDA%   OBJECT\r
+       ATX     7               /Fall thru with OBJECT in AC\r
+/       IF(OBJECT.GT.100)GOTO 5\r
+       FSUB    HUND\r
+       JGT     #5\r
+/       IF(PLACE(OBJECT).EQ.-1)RETURN\r
+       FLDA    ONE\r
+       FADD    PLACE-3,7\r
+       JEQ     #RTN\r
+/       PLACE(OBJECT)=-1\r
+       FLDA    M1\r
+       FSTA    PLACE-3,7\r
+/       HOLDNG=HOLDNG+1\r
+       FLDA    ONE\r
+       FADDM   HOLDNG\r
+\r
+/       5       IF(ATLOC(WHERE).NE.OBJECT)GOTO 6\r
+#5,    FLDA    ATLOC-3,6\r
+       FSUB%   OBJECT\r
+       JNE     #6\r
+/       ATLOC(WHERE)=LINK(OBJECT)\r
+       FLDA    LINK-3,7\r
+       FSTA    ATLOC-3,6\r
+/       RETURN\r
+       JA      #RTN\r
+\r
+/       6       TEMP=ATLOC(WHERE)\r
+#6,    FLDA    ATLOC-3,6\r
+/       7       IF(LINK(TEMP).EQ.OBJECT)GOTO 8\r
+#7,    ATX     5\r
+       FLDA    LINK-3,5\r
+       FSUB%   OBJECT\r
+       JEQ     #8\r
+/       TEMP=LINK(TEMP)\r
+       FLDA    LINK-3,5\r
+/       GOTO 7\r
+       JA      #7\r
+\r
+/       8       LINK(TEMP)=LINK(OBJECT)\r
+#8,    FLDA    LINK-3,7\r
+       FSTA    LINK-3,5\r
+/       RETURN\r
+/       END\r
+       JA      #RTN\r
+       END\r
diff --git a/sw/adventure/COMPIL.BI b/sw/adventure/COMPIL.BI
new file mode 100644 (file)
index 0000000..6ee8d57
--- /dev/null
@@ -0,0 +1,28 @@
+$JOB COMPILE ADVENT STUFF\r
+.COMPILE ADVENT/N/Q\r
+.COMPILE A5TOA1.RA\r
+.COMPILE AMAIN.RA\r
+.COMPILE BITSET.RA\r
+.COMPILE BUG/N/Q\r
+.COMPILE CARRY.RA\r
+.COMPILE DROP.RA\r
+.COMPILE DSTROY.RA\r
+.COMPILE GETIN/N/Q\r
+.COMPILE GETWRD.RA\r
+.COMPILE INITAD/N/Q\r
+.COMPILE IO/N/Q\r
+.COMPILE JUGGLE.RA\r
+.COMPILE MOVE.RA\r
+.COMPILE PCT.RA\r
+.COMPILE PSPEAK.RA\r
+.COMPILE PUT.RA\r
+.COMPILE RND/N/Q\r
+.COMPILE RSPEAK.RA\r
+.COMPILE RSTRGM/N/Q\r
+.COMPILE SAVEGM/N/Q\r
+.COMPILE SEED.RA\r
+.COMPILE SPEAK.RA\r
+.COMPILE VOCAB.RA\r
+.COMPILE USR.RA\r
+.COMPILE YES/N/Q\r
+$END\r
diff --git a/sw/adventure/DROP.RA b/sw/adventure/DROP.RA
new file mode 100644 (file)
index 0000000..5600d4d
--- /dev/null
@@ -0,0 +1,89 @@
+       SECT    DROP\r
+/       SUBROUTINE DROP(OBJECT,WHERE)\r
+/       C\r
+/       C PLACE AN OBJECT AT A GIVEN LOC, PREFIXING IT ONTO THE ATLOC LIST.\r
+/       C DECR HOLDNG IF THE OBJECT WAS BEING TOTED.\r
+/       C\r
+/       IMPLICIT INTEGER (A-Z)\r
+/       COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+/       DIMENSION ATLOC(150)\r
+/       DIMENSION LINK(200)\r
+/       DIMENSION PLACE(100)\r
+/       DIMENSION FIXED(100)\r
+\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +DROP  +\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+6\r
+OBJECT,        ORG     .+3\r
+WHERE, ORG     .+3\r
+ONE,   F 1.0\r
+HUND,  F 100.0\r
+M1,    F -1.0\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+       #LBL=.\r
+       COMMON  PLACOM\r
+ATLOC, ORG     .+702\r
+LINK,  ORG     .+1130\r
+PLACE, ORG     .+454\r
+FIXED, ORG     .+454\r
+HOLDNG,        ORG     .+3\r
+       ORG     #LBL\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    OBJECT\r
+       FLDA%   #BASE,1+\r
+       FSTA    WHERE\r
+       STARTF\r
+       FLDA%   WHERE           /Pre-load index regs\r
+       ATX     6\r
+       FLDA%   OBJECT\r
+       ATX     7\r
+/       IF(OBJECT.GT.100)GOTO 1\r
+       FSUB    HUND\r
+       ATX     5               /Save object-100\r
+       JGT     #1\r
+/       IF(PLACE(OBJECT).EQ.-1)HOLDNG=HOLDNG-1\r
+       FLDA    ONE\r
+       FADD    PLACE-3,7\r
+       JNE     #G1\r
+       FLDA    M1\r
+       FADDM   HOLDNG\r
+/       PLACE(OBJECT)=WHERE\r
+#G1,   FLDA%   WHERE\r
+       FSTA    PLACE-3,7\r
+/       GOTO 2\r
+       JA      #2\r
+\r
+/       1      FIXED(OBJECT-100)=WHERE\r
+#1,    FLDA%   WHERE\r
+       FSTA    FIXED-3,5\r
+\r
+/       2      IF(WHERE.LE.0)RETURN\r
+#2,    JLE     #RTN\r
+/       LINK(OBJECT)=ATLOC(WHERE)\r
+#G2,   FLDA    ATLOC-3,6\r
+       FSTA    LINK-3,7\r
+/       ATLOC(WHERE)=OBJECT\r
+       XTA     7\r
+       FSTA    ATLOC-3,6\r
+/       RETURN\r
+/       END\r
+       JA      #RTN\r
+       END\r
diff --git a/sw/adventure/DSTROY.RA b/sw/adventure/DSTROY.RA
new file mode 100644 (file)
index 0000000..a6ace9d
--- /dev/null
@@ -0,0 +1,22 @@
+       SECT    DSTROY\r
+/       SUBROUTINE DSTROY(OBJECT)\r
+/       C\r
+/       C PERMANENTLY ELIMINATE "OBJECT" BY MOVING TO A NON-EXISTENT LOCATION.\r
+/       C\r
+/       \r
+/       IMPLICIT INTEGER (A-Z)\r
+       EXTERN  MOVE\r
+\r
+/DSTROY,\r
+       0;0                     / Subroutine entry point\r
+       FSTA    TEMP\r
+/       CALL MOVE(OBJECT,0)\r
+/       RETURN\r
+/       END\r
+       JSR     MOVE\r
+       JA      DSTROY\r
+       JA      TEMP\r
+       JA      ZERO\r
+TEMP,  ORG     .+3\r
+ZERO,  F 0.0\r
+       END\r
diff --git a/sw/adventure/DUMPDB.FT b/sw/adventure/DUMPDB.FT
new file mode 100644 (file)
index 0000000..d65aaf4
--- /dev/null
@@ -0,0 +1,121 @@
+C  ADVENTURES\r
+       SUBROUTINE DUMPDB\r
+C  ADVENTURES\r
+C\r
+C MODIFIED BY KENT BLACKETT\r
+C             ENGINEERING SYSTEMS GROUP\r
+C             DIGITAL EQUIPMENT CORP.\r
+C             15-JUL-77\r
+C MODIFIED BY  BOB SUPNIK\r
+C              DISK ENGINEERING\r
+C              21-OCT-77\r
+C MODIFIED BY   BOB SUPNIK\r
+C              DISK ENGINEERING\r
+C              25-AUG-78\r
+C MODIFIED BY   BOB SUPNIK\r
+C              SMALL SYSTEMS\r
+C              12-NOV-78\r
+C ORIGINAL VERSION WAS FOR DECSYSTEM-10\r
+C NEXT VERSION WAS FOR FORTRAN IV-PLUS UNDER\r
+C THE IAS OPERATING SYSTEM ON THE PDP-11/70\r
+C THIS VERSION IS FOR FORTRAN IV (V01C OR LATER)\r
+C UNDER RT-11 ON *ANY* PDP-11\r
+C\r
+C\r
+C  CURRENT LIMITS:\r
+C      750 TRAVEL OPTIONS (TRAVEL, TRVSIZ).\r
+C      300 VOCABULARY WORDS (KTAB, ATAB, TABSIZ).\r
+C      150 LOCATIONS (LTEXT, STEXT, KEY, COND, ABB, ATLOC, LOCSIZ).\r
+C      100 OBJECTS (PLAC, PLACE, FIXD, FIXED, LINK (TWICE), PTEXT, PROP).\r
+C       35 "ACTION" VERBS (ACTSPK, VRBSIZ).\r
+C      205 RANDOM MESSAGES (RTEXT, RTXSIZ).\r
+C       12 DIFFERENT PLAYER CLASSIFICATIONS (CTEXT, CVAL, CLSMAX).\r
+C       20 HINTS, LESS 3 (HINTLC, HINTED, HINTS, HNTSIZ).\r
+C  THERE ARE ALSO LIMITS WHICH CANNOT BE EXCEEDED DUE TO THE STRUCTURE OF\r
+C  THE DATABASE.  (E.G., THE VOCABULARY USES N/1000 TO DETERMINE WORD TYPE,\r
+C  SO THERE CAN'T BE MORE THAN 1000 WORDS.)  THESE UPPER LIMITS ARE:\r
+C      1000 NON-SYNONYMOUS VOCABULARY WORDS\r
+C      300 LOCATIONS\r
+C      100 OBJECTS\r
+C\r
+C      IMPLICIT INTEGER (A-Z)\r
+       LOGICAL LMWARN,CLOSNG,PANIC,HINTED,\r
+     1        CLOSED,GAVEUP,SCORNG,DSEEN,BITSET\r
+C\r
+       COMMON /VERSN/ VMAJ, VMIN, VEDIT\r
+       COMMON /TXTCOM/ RTEXT,LINES,ASCVAR,TXTLOC,DATA\r
+       COMMON /VOCCOM/ KTAB,ATAB,TABSIZ\r
+       COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+       COMMON /PTXCOM/ PTEXT\r
+       COMMON /ABBCOM/ ABB\r
+       COMMON /MISCOM/ LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,\r
+     1 KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,\r
+     2 HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE\r
+       COMMON /MISCOM/\r
+     3 CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,\r
+     4 CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,\r
+     5 PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,\r
+     6 BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM\r
+       COMMON /MISCOM/\r
+     7 PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,\r
+     8 THROW,FIND,INVENT,TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM,\r
+     9 NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,\r
+     1 CLOSNG,PANIC,CLOSED,GAVEUP,SCORNG,ODLOC,STREAM,SPICES\r
+       COMMON /MISC2/ I,RTXSIZ,CLSMAX,LOCSIZ,CTEXT,STEXT,LTEXT,\r
+     1 SECT,TRAVEL,TRVCON,TRVLOC,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,\r
+     2 MAXTRS,HINTED,HNTLOC,KK\r
+C\r
+       INTEGER LINES(12),DATA(52),RECORD\r
+C      The TRAVEL, TRVCON, and TRVLOC arrays are\r
+C      Packed with words 0,1,2 holding the data. Saves lots\r
+C      of wasted space at the expense of some complexity.\r
+       INTEGER TRAVEL(250), TRVCON(250), TRVLOC(250), TRVSIZ\r
+       INTEGER KTAB(300),ATAB(300),TABSIZ\r
+       INTEGER LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150),\r
+     1 ATLOC(150)\r
+       INTEGER PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200),\r
+     1 PTEXT(100),PROP(100),HOLDNG\r
+       INTEGER ACTSPK(35)\r
+       INTEGER RTEXT(205)\r
+       INTEGER CTEXT(12),CVAL(12)\r
+       INTEGER HINTLC(20),HINTS(20,4)\r
+       DIMENSION HINTED(20)\r
+       INTEGER TK(20),DLOC(6),ODLOC(6)\r
+       DIMENSION DSEEN(6)\r
+       INTEGER ASCVAR, TXTLOC, TRVS, CLSSES, OLDLOC\r
+       INTEGER HNTSIZ, HNTMAX, TALLY, TALLY2, CHLOC, CHLOC2, DFLAG\r
+       INTEGER DALTLC,GRATE,CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE\r
+       INTEGER FISSUR,TABLET,CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE\r
+       INTEGER WATER,OIL,PLANT,PLANT2,AXE,MIRROR,DRAGON,CHASM\r
+       INTEGER BEAR,MESSAG,VEND,BATTER,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD\r
+       INTEGER PYRAM,PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY\r
+       INTEGER LOCK,THROW,FIND,INVENT,TURNS,KNFLOC,DETAIL,ABBNUM\r
+       INTEGER NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2\r
+       INTEGER TROLL,TROLL2,STREAM,SPICES\r
+       INTEGER RTXSIZ,CLSMAX,LOCSIZ,SECT,TABNDX,OBJ\r
+       INTEGER VERB,HNTLOC,KK\r
+C\r
+C\r
+C\r
+C\r
+       DO 10 I=1,TRVSIZ\r
+       WRITE(4,1)TRVSIZ\r
+1      FORMAT(' TRAVEL ENTRIES: ', I10)\r
+\r
+               I1= GETWRD(TRAVEL, I, 0)\r
+               I2= GETWRD(TRVCON, I, 0)\r
+               I3= GETWRD(TRVLOC, I, 0)\r
+               WRITE(4,11) I, I1, I2, I3\r
+11             FORMAT(' TRAVEL ',I4,' GIVES',1X,I4,1X,I4,1X,I4)\r
+10     CONTINUE\r
+       DO 20 I = 1, TABSIZ\r
+               WRITE(4,21)I, KTAB(I), ATAB(I)\r
+21             FORMAT(' K/a TAB ',I4,' GIVES ', I6, 1X, A6)\r
+20     CONTINUE\r
+       DO 30 I = 1, 100\r
+               I4 = I + 100\r
+               WRITE(4,31)I,PLAC(I),PLACE(I),FIXD(I),FIXED(I),LINK(I),LINK(I4),PTEXT(I),PROP(I)\r
+31             FORMAT(' LOCATION DATA',1X,I6,1X,I6,1X,I6,1X,I6,1X,I6,1X,I6,1X,I6,1X,I6,1X,I6)\r
+30     CONTINUE\r
+       RETURN\r
+       END\r
diff --git a/sw/adventure/GETIN.FT b/sw/adventure/GETIN.FT
new file mode 100644 (file)
index 0000000..012a8f7
--- /dev/null
@@ -0,0 +1,95 @@
+C WAS SUBROUTINE GETIN(WORD1,WORD1A,WORD1X,WORD2,WORD2A,WORD2X)\r
+C OS/8 version returns 4 chars in the first word of each command entity\r
+C\r
+C  GET A COMMAND FROM THE ADVENTURER.  SNARF OUT THE FIRST WORD, PAD IT WITH\r
+C  BLANKS, AND RETURN IT IN WORD1 AND WORD1A. (for OS/8, WORD1)\r
+C  CHARS 5  AND 6 ARE RETURNED IN WORD1X, IN\r
+C  CASE WE NEED TO PRINT OUT THE WHOLE WORD IN AN ERROR MESSAGE.  ANY NUMBER OF\r
+C  BLANKS MAY FOLLOW THE WORD.  IF A SECOND WORD APPEARS, IT IS RETURNED IN\r
+C  WORD2 AND WORD2A (CHARS 5 AND 68 IN WORD2X), ELSE WORD2 IS SET TO ZERO.\r
+C  (for OS/8, WORD2 and WORD2X).\r
+C\r
+C      IMPLICIT INTEGER (A-Z)\r
+C      LOGICAL*1 FRST(20),BLANK,LCA,LCZ,UCA\r
+C      DATA BLANK/' '/,UCA/'A'/,LCA/'a'/,LCZ/'z'/\r
+\r
+       SUBROUTINE GETIN(WORD1,WORD1X,WORD2,WORD2X)\r
+       INTEGER INPUT(20),WORD1,WORD1X\r
+       INTEGER WORD2,WORD2X\r
+\r
+10     WRITE(4,1)\r
+1      FORMAT(' > ',$)\r
+C      READ(4,2)INPUT\r
+C2     FORMAT(20A1)\r
+       CALL RDLINE(INPUT, 20)\r
+       WORD1 = ' '\r
+       WORD1X = ' '\r
+       WORD2 = ' '\r
+       WORD2X = ' '\r
+\r
+       DO 15 I=1,20\r
+C Using INT here to normalize the input values\r
+       J = INT(INPUT(I))\r
+15     INPUT(I) = J\r
+       IX1=0\r
+       IX2=0\r
+       I=0\r
+C\r
+C Find first nonblank\r
+C\r
+20     I=I+1\r
+       IF(I.GT.20)GOTO 10\r
+       IF(INPUT(I).EQ.32)GOTO 20\r
+C\r
+C Move four characters to WORD1\r
+C\r
+       DO 30 IX1 = 1, 4\r
+       CALL CPUT(WORD1, IX1, INPUT(I))\r
+       I=I+1\r
+       IF(I.GT.20)GOTO 100\r
+C\r
+C If blank, go to word 2\r
+C\r
+       IF(INPUT(I) .EQ. 32) GOTO 50\r
+30     CONTINUE\r
+C\r
+C Move two characters to WORD1X\r
+C\r
+       DO 40 IX1 = 1, 20\r
+       IF (IX1 .GT. 2) GOTO 35\r
+       CALL CPUT(WORD1X, IX1, INPUT(I))\r
+35     I=I+1\r
+       IF(I.GT.20)GOTO 100\r
+       IF(INPUT(I).EQ.32)GOTO 50\r
+40     CONTINUE\r
+\r
+C\r
+C Find next nonblank\r
+C\r
+50     I = I + 1\r
+       IF(I.GT.20) GOTO 100\r
+       IF (INPUT(I).EQ. 32)GOTO 50\r
+\r
+C\r
+C Move four to WORD2\r
+C\r
+       DO 60 IX1 = 1,4\r
+       CALL CPUT(WORD2, IX1, INPUT(I))\r
+       I = I + 1\r
+       IF (I.GT.20) GOTO 100\r
+       IF (INPUT(I).EQ. 32) GOTO 100\r
+60     CONTINUE\r
+C\r
+C Move to to WORD2X\r
+C\r
+       DO 70 IX1 = 1,2\r
+       CALL CPUT(WORD2X, IX1, INPUT(I))\r
+       I = I + 1\r
+       IF (I.GT.20) GOTO 100\r
+       IF(INPUT(I).EQ.32) GOTO 100\r
+70     CONTINUE\r
+100    IF (WORD2 .NE. ' ') RETURN\r
+       WORD2 = 0\r
+       WORD2X = 0\r
+       RETURN\r
+       END\r
diff --git a/sw/adventure/GETWRD.RA b/sw/adventure/GETWRD.RA
new file mode 100644 (file)
index 0000000..3556b06
--- /dev/null
@@ -0,0 +1,190 @@
+       SECT    WORDS\r
+/FILE GETWRD\r
+/Version 02.06\r
+\r
+/This module contains two entry points to allow FORTRAN\r
+/programs access to the contents of any of the 3 12-bit words\r
+/in any floating point variable.  The idea is to facilitate\r
+/operations on text strings which are stored as 8-bit ASCII,\r
+/such as input by the routine RDLIN (see write up for RDLIN\r
+/included with that routine.).\r
+\r
+/      ROUTINE GETWRD\r
+\r
+/This routine is a function subroutine (ie: the result is\r
+/returned in the FAC). As such it's name may be used in arithmetic\r
+/statments and the returned data will be used directly.  The\r
+/following example illustrates it's use:\r
+/      .\r
+/      .\r
+/      RESULT=GETWRD(MESSAG,INDX,MASK)\r
+/      .\r
+/      .\r
+\r
+/Here, the desired word (exponent,hi or lo mantissa) will\r
+/be returned and placed into the variable RESULT.  The argument\r
+/MESSAG may be a variable or an array. The actual address in the\r
+/array will be computed by the routine, depending on the value\r
+/of the variable INDX. INDX points to the specific 12-bit word in\r
+/the array you want.  The routine adds this number to the start\r
+/address of the array, and operates on this word with an XTA\r
+/instruction.\r
+\r
+/The following table illustrates this conversion:\r
+\r
+/Value of INDX     Element word           Array element\r
+\r
+/      1               Exponent                1\r
+/      2               Hi mant.                1\r
+/      3               Lo mant.                1\r
+/      4               Exponent                2\r
+/      5               Hi mant.                2\r
+/      etc.              etc.                 etc.\r
+\r
+/The argument MASK allows the masking of the data retrieved\r
+/so parity bits etc. can be removed easily.  The value should be\r
+/the decimal equivalent of the octal number you want the data masked\r
+/by.  If MASK is 0, no masking takes place.\r
+\r
+/      ROUTINE PUTWRD\r
+\r
+/This routine provides the converse function of GETWRD.\r
+/It is called from FORTRAN using a standard subroutine call:\r
+\r
+/      CALL PUTWRD(MESSAG,INDX,WORD)\r
+\r
+/The first 2 arguments are identical to those in the routine GETWRD,\r
+/but the third argument reflects the difference in function of\r
+/these two routines.  WORD is the value in decimal that is to\r
+/be placed into the 12-bit word referenced by the first two\r
+/arguments.  Masking is not provided for.\r
+\r
+       EXTERN  #RETRN\r
+       EXTERN  #ARGER\r
+       ENTRY   GETWRD\r
+       ENTRY   PUTWRD\r
+\r
+\r
+/Little routine to do masking of octal data.\r
+/Although the references to XR 0 and 1 destroy the\r
+/value of the Array element in XR 0-2, this is of no\r
+/consequence because we've already finished using it.\r
+\r
+/The only caveat here is that #XR+2 is not an auto index register\r
+/Calling in #PAGE0 won't help because we could ge loaded onto\r
+/page 0 of some other field.\r
+\r
+       SECT8   #MASK\r
+       TAD     #XR             /Index 0 contains fetched data\r
+       AND     #XR+1           /Index 1 contains the mask.\r
+       DCA     #XR             /Apply mask to data\r
+       CIF CDF                 /Reset data field\r
+       JMP%    #XR+2           /XR5 contains return address\r
+\r
+/FPP code starts here. It is intended that it be contiguous\r
+/with the 8-mode code so the rest of the page is not wasted\r
+\r
+SECNAM, TEXT   +GETWRD+        /Init for traceback\r
+#BASE, ORG     .+3     /Base 0\r
+INDX,  ORG     .+3     /Base 1: Stuff addresses in here\r
+#PTWRD, TEXT +PUTWRD+  /Base 2: One of the section names\r
+#GTWRD, TEXT +GETWRD+  /Base 3: The other section name\r
+\r
+/Relative address on page is 23. This puts XR+2 out of any possible\r
+/danger with respect to auto-index registers.\r
+\r
+#XR,   FNOP            /Base 4: XR0-2\r
+       ADDR #RETRN     /       #XR2=return to FRTS address\r
+       1;2;3           /Base 5: XR3-5\r
+/TENK, F 4096.0        /Base 6\r
+K2048, F 2048.0\r
+XSETX, 27;47;7777      /Base 7: SETX-JA-1\r
+\r
+       ORG     #BASE+30\r
+       FNOP;   JA      #BASE   /Pointer to section name+3\r
+       FNOP;#GOBAK,    0;0     /Pointer to calling base page\r
+\r
+/Routine starts here.  Details of index register usage are\r
+/as follows:\r
+\r
+/      XR 0    Used to fetch/store/hold target word\r
+/      XR 1    Used as arg. fetch index, and to hold mask word\r
+/      XR 2    Contains the FRTS TRAP return address\r
+/      XR 3    =1 to fetch ARRAY arg\r
+/      XR 4    =2 to fetch INDEX arg\r
+/      XR 5    =3 to fetch WORD/MASK arg\r
+\r
+       BASE    #BASE           /Tell assembler wher the base page is\r
+\r
+/Enter here for PUTWRD\r
+\r
+PUTWRD, FLDA   #PTWRD,0        /Get putwrd name\r
+       JSA     GETARG          /Get args set up\r
+\r
+       FLDA%   INDX            /Load the new value for target word\r
+       JLT     TSTNEG          /Negative range check\r
+       FSUB    K2048           /For positive, < 2048\r
+       JGE     PUTERR          /Out of range\r
+       JA      OK              /Else ok\r
+TSTNEG,        FADD    K2048           /Neg more than 2048?\r
+       JLE     PUTERR          /Yes, errror\r
+OK,    FLDA%   INDX\r
+       FLDA%   INDX            /In range\r      ATX     0               /Store it\r
+       JA      #GOBAK          /Return\r
+\r
+PUTERR,        FLDA    SECNAM\r
+       TRAP4   #ARGER\r
+\r
+/Enter here for GETWRD\r
+\r
+GETWRD, FLDA   #GTWRD,0        /Load section name\r
+       JSA     GETARG          /Get things set up\r
+\r
+       XTA     0               /Get the target word\r
+       SETX    #XR             /Reset index registers\r
+       ATX     0               /Store word in XR 0\r
+\r
+       FLDA%   INDX            /Get the mask value\r
+       JEQ     NOMASK          /If 0, skip masking\r
+       ATX     1               /Put the mask value into an index\r
+       TRAP3   #MASK           /Go mask the number\r
+\r
+NOMASK, XTA    0               /Recover the masked number\r
+/      JGE     #GOBAK          /If result is positive, return now\r
+/      FADD    TENK            /Otherwise, un-2's complement first\r
+       JA      #GOBAK          /Return the answer in FAC\r
+\r
+/Both routines come here to get things set up. FAC contains\r
+/section name.\r
+\r
+\r
+GETARG, 0;0\r
+       FSTA    SECNAM          /Name into traceback prologue\r
+       SETX    #XR             /Set address of index registers\r
+\r
+       STARTD                  /Mode for addresses\r
+       0210                    /Load pointer to callers prologue\r
+       FSTA    #GOBAK,0        /Store as return address\r
+       0200                    /Load address of argument list\r
+       SETB    #BASE           /Now tell FPP where the base page is\r
+\r
+       FSTA    #BASE           /Store address of args\r
+\r
+       FLDA%   #BASE,4         /Load pointer to INDX\r
+       FSTA    INDX            /Store this\r
+\r
+       STARTF                  /Mode for numbers\r
+       FLDA%   INDX            /Load the pointer\r
+       ALN     0               /Fix it\r
+       STARTD                  /Address mode\r
+\r
+       FADD%   #BASE,3         /Add address of ARRAY/VARIABLE\r
+       FADD    XSETX           /Create a SETX ARRAY+INDEX-1\r
+       FSTA    ZSETX,0         /Store to execute in line\r
+\r
+       FLDA%   #BASE,5         /Load pointer to MASK/Replacement word\r
+       FSTA    INDX            /Store this\r
+       STARTF                  /Set numeric mode\r
+\r
+ZSETX, SETX    .               /Set index on target word\r
+       JA      GETARG          /Return, everything set\r
diff --git a/sw/adventure/INITAD.FT b/sw/adventure/INITAD.FT
new file mode 100644 (file)
index 0000000..246fa37
--- /dev/null
@@ -0,0 +1,749 @@
+C  ADVENTURES\r
+       SUBROUTINE INIT\r
+C\r
+C MODIFIED BY  KENT BLACKETT\r
+C              ENGINEERING SYSTEMS GROUP\r
+C              DIGITAL EQUIPMENT CORP.\r
+C              15-JUL-77\r
+C MODIFIED BY  BOB SUPNIK\r
+C              DISK ENGINEERING\r
+C              21-OCT-77\r
+C MODIFIED BY  BOB SUPNIK\r
+C              DISK ENGINEERING\r
+C              25-AUG-78\r
+C MODIFIED BY  BOB SUPNIK\r
+C              SMALL SYSTEMS\r
+C              12-NOV-78\r
+C ORIGINAL VERSION WAS FOR DECSYSTEM-10\r
+C NEXT VERSION WAS FOR FORTRAN IV-PLUS UNDER\r
+C THE IAS OPERATING SYSTEM ON THE PDP-11/70\r
+C THIS VERSION IS FOR FORTRAN IV (V01C OR LATER)\r
+C UNDER RT-11 ON *ANY* PDP-11\r
+C\r
+C\r
+C  CURRENT LIMITS:\r
+C      300 VOCABULARY WORDS (KTAB, ATAB, TABSIZ).\r
+C      150 LOCATIONS (LTEXT, STEXT, KEY, COND, ABB, ATLOC, LOCSIZ).\r
+C      100 OBJECTS (PLAC, PLACE, FIXD, FIXED, LINK (TWICE), PTEXT, PROP).\r
+C       35 "ACTION" VERBS (ACTSPK, VRBSIZ).\r
+C      205 RANDOM MESSAGES (RTEXT, RTXSIZ).\r
+C       12 DIFFERENT PLAYER CLASSIFICATIONS (CTEXT, CVAL, CLSMAX).\r
+C       20 HINTS, LESS 3 (HINTLC, HINTED, HINTS, HNTSIZ).\r
+C  THERE ARE ALSO LIMITS WHICH CANNOT BE EXCEEDED DUE TO THE STRUCTURE OF\r
+C  THE DATABASE.  (E.G., THE VOCABULARY USES N/1000 TO DETERMINE WORD TYPE,\r
+C  SO THERE CAN'T BE MORE THAN 1000 WORDS.)  THESE UPPER LIMITS ARE:\r
+C      1000 NON-SYNONYMOUS VOCABULARY WORDS\r
+C      300 LOCATIONS\r
+C      100 OBJECTS\r
+C\r
+C      IMPLICIT INTEGER (A-Z)\r
+       LOGICAL LMWARN,CLOSNG,PANIC,HINTED,\r
+     1         CLOSED,GAVEUP,SCORNG,DSEEN,BITSET\r
+C\r
+       LOGICAL WRITN\r
+       COMMON /VERSN/ VMAJ, VMIN, VEDIT\r
+       COMMON /FILES/ INDXNM, TEXTNM, SAVENM, INPTNM\r
+       COMMON /TXTCOM/ RTEXT,LINES,ASCVAR,TXTLOC,DATA\r
+       COMMON /VOCCOM/ KTAB,ATAB,TABSIZ\r
+       COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+       COMMON /PTXCOM/ PTEXT\r
+       COMMON /ABBCOM/ ABB\r
+       COMMON /MISCOM/ LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,\r
+     1 KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,\r
+     2 HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE\r
+       COMMON /MISCOM/\r
+     3 CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,\r
+     4 CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,\r
+     5 PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,\r
+     6 BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM\r
+       COMMON /MISCOM/\r
+     7 PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,\r
+     8 THROW,FIND,INVENT,TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM,\r
+     9 NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,\r
+     1 CLOSNG,PANIC,CLOSED,GAVEUP,SCORNG,ODLOC,STREAM,SPICES\r
+       COMMON /MISC2/ I,RTXSIZ,CLSMAX,LOCSIZ,CTEXT,STEXT,LTEXT,\r
+     1 SECT,TRAVEL,TRVCON,TRVLOC,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,\r
+     2 MAXTRS,HINTED,HNTLOC,KK\r
+C\r
+       INTEGER LINES(12),DATA(78)\r
+C      The TRAVEL, TRVCON, and TRVLOC arrays are\r
+C      Packed with words 0,1,2 holding the data. Saves lots\r
+C      of wasted space at the expense of some complexity.\r
+       INTEGER TRAVEL(250), TRVCON(250), TRVLOC(250), TRVSIZ\r
+       INTEGER KTAB(300),ATAB(300),TABSIZ\r
+       INTEGER LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150),\r
+     1 ATLOC(150)\r
+       INTEGER PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200),\r
+     1 PTEXT(100),PROP(100),HOLDNG\r
+       INTEGER ACTSPK(35)\r
+       INTEGER RTEXT(205)\r
+       INTEGER CTEXT(12),CVAL(12)\r
+       INTEGER HINTLC(20),HINTS(20,4)\r
+       DIMENSION HINTED(20)\r
+       INTEGER TK(20),DLOC(6),ODLOC(6)\r
+       DIMENSION DSEEN(6)\r
+       INTEGER ASCVAR, TXTLOC, TRVS, CLSSES, OLDLOC\r
+       INTEGER HNTSIZ, HNTMAX, TALLY, TALLY2, CHLOC, CHLOC2, DFLAG\r
+       INTEGER DALTLC,GRATE,CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE\r
+       INTEGER FISSUR,TABLET,CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE\r
+       INTEGER WATER,OIL,PLANT,PLANT2,AXE,MIRROR,DRAGON,CHASM\r
+       INTEGER BEAR,MESSAG,VEND,BATTER,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD\r
+       INTEGER PYRAM,PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY\r
+       INTEGER LOCK,THROW,FIND,INVENT,TURNS,KNFLOC,DETAIL,ABBNUM\r
+       INTEGER NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2\r
+       INTEGER TROLL,TROLL2,STREAM,SPICES\r
+       INTEGER RTXSIZ,CLSMAX,LOCSIZ,SECT,TABNDX,OBJ\r
+       INTEGER VERB,HNTLOC,KK\r
+       INTEGER INDXNM(3),TEXTNM(3),SAVENM(3),INPTNM(3),CODE,NAME(3)\r
+C\r
+C\r
+C      ISHFT(NUMBER,IPOSIT)=NUMBER*(2**IPOSIT)\r
+C      BITSET(L,N)=(COND(L).AND.ISHFT(1,N)).NE.0\r
+\fC  DESCRIPTION OF THE DATABASE FORMAT\r
+C\r
+C\r
+C  THE DATA FILE CONTAINS SEVERAL SECTIONS.  EACH BEGINS WITH A LINE CONTAINING\r
+C  A NUMBER IDENTIFYING THE SECTION, AND ENDS WITH A LINE CONTAINING "-1".\r
+C\r
+C  SECTION 1: LONG FORM DESCRIPTIONS.  EACH LINE CONTAINS A LOCATION NUMBER,\r
+C      A COMMA, AND A LINE OF TEXT.  THE SET OF (NECESSARILY ADJACENT) LINES\r
+C      WHOSE NUMBERS ARE X FORM THE LONG DESCRIPTION OF LOCATION X.\r
+C  SECTION 2: SHORT FORM DESCRIPTIONS.  SAME FORMAT AS LONG FORM.  NOT ALL\r
+C      PLACES HAVE SHORT DESCRIPTIONS.\r
+C  SECTION 3: TRAVEL TABLE.  EACH LINE CONTAINS A LOCATION NUMBER (X), A SECOND\r
+C      LOCATION NUMBER (Y), AND A LIST OF MOTION NUMBERS (SEE SECTION 4).\r
+C      EACH MOTION REPRESENTS A VERB WHICH WILL GO TO Y IF CURRENTLY AT X.\r
+C      Y, IN TURN, IS INTERPRETED AS FOLLOWS.  LET M=Y/1000, N=Y MOD 1000.\r
+C              IF N<=300       IT IS THE LOCATION TO GO TO.\r
+C              IF 300<N<=500   N-300 IS USED IN A COMPUTED GOTO TO\r
+C                                      A SECTION OF SPECIAL CODE.\r
+C              IF N>500        MESSAGE N-500 FROM SECTION 6 IS PRINTED,\r
+C                                      AND HE STAYS WHEREVER HE IS.\r
+C      MEANWHILE, M SPECIFIES THE CONDITIONS ON THE MOTION.\r
+C              IF M=0          IT'S UNCONDITIONAL.\r
+C              IF 0<M<100      IT IS DONE WITH M% PROBABILITY.\r
+C              IF M=100        UNCONDITIONAL, BUT FORBIDDEN TO DWARVES.\r
+C              IF 100<M<=200   HE MUST BE CARRYING OBJECT M-100.\r
+C              IF 200<M<=300   MUST BE CARRYING OR IN SAME ROOM AS M-200.\r
+C              IF 300<M<=400   PROP(M MOD 100) MUST *NOT* BE 0.\r
+C              IF 400<M<=500   PROP(M MOD 100) MUST *NOT* BE 1.\r
+C              IF 500<M<=600   PROP(M MOD 100) MUST *NOT* BE 2, ETC.\r
+C      IF THE CONDITION (IF ANY) IS NOT MET, THEN THE NEXT *DIFFERENT*\r
+C      "DESTINATION" VALUE IS USED (UNLESS IT FAILS TO MEET *ITS* CONDITIONS,\r
+C      IN WHICH CASE THE NEXT IS FOUND, ETC.).  TYPICALLY, THE NEXT DEST WILL\r
+C      BE FOR ONE OF THE SAME VERBS, SO THAT ITS ONLY USE IS AS THE ALTERNATE\r
+C      DESTINATION FOR THOSE VERBS.  FOR INSTANCE:\r
+C              15      110022  29      31      34      35      23      43\r
+C              15      14      29\r
+C      THIS SAYS THAT, FROM LOC 15, ANY OF THE VERBS 29, 31, ETC., WILL TAKE\r
+C      HIM TO 22 IF HE'S CARRYING OBJECT 10, AND OTHERWISE WILL GO TO 14.\r
+C              11      303008  49\r
+C              11      9       50\r
+C      THIS SAYS THAT, FROM 11, 49 TAKES HIM TO 8 UNLESS PROP(3)=0, IN WHICH\r
+C      CASE HE GOES TO 9.  VERB 50 TAKES HIM TO 9 REGARDLESS OF PROP(3).\r
+C\r
+C      IN THIS IMPLEMENTATION, THE SECOND LOCATION NUMBER Y HAS BEEN\r
+C      SPLIT INTO M, CONDITIONS, AND N, LOCATION.\r
+C\r
+C  SECTION 4: VOCABULARY.  EACH LINE CONTAINS A NUMBER (N), A TAB, AND A\r
+C      FIVE-LETTER WORD.  CALL M=N/1000.  IF M=0, THEN THE WORD IS A MOTION\r
+C      VERB FOR USE IN TRAVELLING (SEE SECTION 3).  ELSE, IF M=1, THE WORD IS\r
+C      AN OBJECT.  ELSE, IF M=2, THE WORD IS AN ACTION VERB (SUCH AS "CARRY"\r
+C      OR "ATTACK").  ELSE, IF M=3, THE WORD IS A SPECIAL CASE VERB (SUCH AS\r
+C      "DIG") AND N MOD 1000 IS AN INDEX INTO SECTION 6.  OBJECTS FROM 50 TO\r
+C      (CURRENTLY, ANYWAY) 79 ARE CONSIDERED TREASURES (FOR PIRATE, CLOSEOUT).\r
+C  SECTION 5: OBJECT DESCRIPTIONS.  EACH LINE CONTAINS A NUMBER (N), A TAB,\r
+C      AND A MESSAGE.  IF N IS FROM 1 TO 100, THE MESSAGE IS THE "INVENTORY"\r
+C      MESSAGE FOR OBJECT N.  OTHERWISE, N SHOULD BE 000, 100, 200, ETC., AND\r
+C      THE MESSAGE SHOULD BE THE DESCRIPTION OF THE PRECEDING OBJECT WHEN ITS\r
+C      PROP VALUE IS N/100.  THE N/100 IS USED ONLY TO DISTINGUISH MULTIPLE\r
+C      MESSAGES FROM MULTI-LINE MESSAGES; THE PROP INFO ACTUALLY REQUIRES ALL\r
+C      MESSAGES FOR AN OBJECT TO BE PRESENT AND CONSECUTIVE.  PROPERTIES WHICH\r
+C      PRODUCE NO MESSAGE SHOULD BE GIVEN THE MESSAGE ">$<".\r
+C  SECTION 6: ARBITRARY MESSAGES.  SAME FORMAT AS SECTIONS 1, 2, AND 5, EXCEPT\r
+C      THE NUMBERS BEAR NO RELATION TO ANYTHING (EXCEPT FOR SPECIAL VERBS\r
+C      IN SECTION 4).\r
+C  SECTION 7: OBJECT LOCATIONS.  EACH LINE CONTAINS AN OBJECT NUMBER AND ITS\r
+C      INITIAL LOCATION (ZERO (OR OMITTED) IF NONE).  IF THE OBJECT IS\r
+C      IMMOVABLE, THE LOCATION IS FOLLOWED BY A "-1".  IF IT HAS TWO LOCATIONS\r
+C      (E.G. THE GRATE) THE FIRST LOCATION IS FOLLOWED WITH THE SECOND, AND\r
+C      THE OBJECT IS ASSUMED TO BE IMMOVABLE.\r
+C  SECTION 8: ACTION DEFAULTS.  EACH LINE CONTAINS AN "ACTION-VERB" NUMBER AND\r
+C      THE INDEX (IN SECTION 6) OF THE DEFAULT MESSAGE FOR THE VERB.\r
+C  SECTION 9: LIQUID ASSETS, ETC.  EACH LINE CONTAINS A NUMBER (N) AND UP TO 20\r
+C      LOCATION NUMBERS.  BIT N (WHERE 0 IS THE UNITS BIT) IS SET IN COND(LOC)\r
+C      FOR EACH LOC GIVEN.  THE COND BITS CURRENTLY ASSIGNED ARE:\r
+C              0       LIGHT\r
+C              1       IF BIT 2 IS ON: ON FOR OIL, OFF FOR WATER\r
+C              2       LIQUID ASSET, SEE BIT 1\r
+C              3       PIRATE DOESN'T GO HERE UNLESS FOLLOWING PLAYER\r
+C      OTHER BITS ARE USED TO INDICATE AREAS OF INTEREST TO "HINT" ROUTINES:\r
+C              4       TRYING TO GET INTO CAVE\r
+C              5       TRYING TO CATCH BIRD\r
+C              6       TRYING TO DEAL WITH SNAKE\r
+C              7       LOST IN MAZE\r
+C              8       PONDERING DARK ROOM\r
+C              9       AT WITT'S END\r
+C      COND(LOC) IS SET TO 2, OVERRIDING ALL OTHER BITS, IF LOC HAS FORCED\r
+C      MOTION.\r
+C  SECTION 10: CLASS MESSAGES.  EACH LINE CONTAINS A NUMBER (N), A TAB, AND A\r
+C      MESSAGE DESCRIBING A CLASSIFICATION OF PLAYER.  THE SCORING SECTION\r
+C      SELECTS THE APPROPRIATE MESSAGE, WHERE EACH MESSAGE IS CONSIDERED TO\r
+C      APPLY TO PLAYERS WHOSE SCORES ARE HIGHER THAN THE PREVIOUS N BUT NOT\r
+C      HIGHER THAN THIS N.  NOTE THAT THESE SCORES PROBABLY CHANGE WITH EVERY\r
+C      MODIFICATION (AND PARTICULARLY EXPANSION) OF THE PROGRAM.\r
+C  SECTION 11: HINTS.  EACH LINE CONTAINS A HINT NUMBER (CORRESPONDING TO A\r
+C      COND BIT, SEE SECTION 9), THE NUMBER OF TURNS HE MUST BE AT THE RIGHT\r
+C      LOC(S) BEFORE TRIGGERING THE HINT, THE POINTS DEDUCTED FOR TAKING THE\r
+C      HINT, THE MESSAGE NUMBER (SECTION 6) OF THE QUESTION, AND THE MESSAGE\r
+C      NUMBER OF THE HINT.  THESE VALUES ARE STASHED IN THE "HINTS" ARRAY.\r
+C      HNTMAX IS SET TO THE MAX HINT NUMBER (<= HNTSIZ).  NUMBERS 1-3 ARE\r
+C      UNUSABLE SINCE COND BITS ARE OTHERWISE ASSIGNED, SO 2 IS USED TO\r
+C      REMEMBER IF HE'S READ THE CLUE IN THE REPOSITORY, AND 3 IS USED TO\r
+C      REMEMBER WHETHER HE ASKED FOR INSTRUCTIONS (GETS MORE TURNS, BUT LOSES\r
+C      POINTS).\r
+C  SECTION 12: MAGIC MESSAGES. IDENTICAL TO SECTION 6 EXCEPT PUT IN A SEPARATE\r
+C      SECTION FOR EASIER REFERENCE.  MAGIC MESSAGES ARE USED BY THE STARTUP,\r
+C      MAINTENANCE MODE, AND RELATED ROUTINES.\r
+C  SECTION 0: END OF DATABASE.\r
+\fC  READ THE DATABASE IF WE HAVE NOT YET DONE SO\r
+C\r
+       ISEED=0\r
+C\r
+C FILSIZ Was 900 for RT-11 but we pack 6 records per.\r
+C\r
+       FILSIZ=150\r
+       TABSIZ=300\r
+       LOCSIZ=150\r
+       VRBSIZ=35\r
+       RTXSIZ = 205\r
+       HNTSIZ = 20\r
+       MAGSIZ = 35\r
+       TRVSIZ = 750\r
+       CLSMAX = 12\r
+C      VCNT = 0\r
+CDEBUG WRITE(4,1000)\r
+CDEBUG1000     FORMAT(' INITIALIZING...')\r
+C\r
+C FIRST, TRY TO RESTORE PRE-EXISTING COPY OF DATA BASE\r
+C\r
+       CALL USR(6,'ADVENT.IN',2,ERR)\r
+       IF (ERR .EQ. 0) GOTO 30\r
+20     CALL SIXOUT('L]OCATION OF TEXT DATABASE ([ATEXT.DA]) >',21,2)\r
+       WRITE(4,121)\r
+121    FORMAT('+',$)\r
+       READ(4,21) TEXTNM\r
+21     FORMAT(3A6)\r
+       IF (TEXTNM(1) .NE. ' ') GOTO 22\r
+       TEXTNM(1) = 'ATEXT.'\r
+       TEXTNM(2) = 'DA'\r
+       TEXTNM(3) = ' '\r
+22     CALL SIXOUT('L]OCATION OF TEXT INDEX    ([AINDX.DA]) >',21,2)\r
+       WRITE(4,121)\r
+       READ(4,21) INDXNM\r
+       IF (INDXNM(1) .NE. ' ') GOTO 23\r
+       INDXNM(1) = 'AINDX.'\r
+       INDXNM(2) = 'DA'\r
+       INDXNM(3) = ' '\r
+23     CALL SIXOUT('L]OCATION OF SAVED GAMES   ([ASAVE.DA]) >',21,2)\r
+       WRITE(4,121)\r
+       READ(4,21) SAVENM\r
+       IF (SAVENM(1) .NE. ' ') GOTO 24\r
+       SAVENM(1) = 'ASAVE.'\r
+       SAVENM(2) = 'DA'\r
+       SAVENM(3) = ' '\r
+24     CALL SIXOUT('L]OCATION OF TEXT INPUT   ([ADVENT.TX]) >',21,2)\r
+       WRITE(4,121)\r
+       READ(4,21)INPTNM\r
+       IF (INPTNM(1) .NE. ' ') GOTO 25\r
+       INPTNM(1) = 'ADVENT'\r
+       INPTNM(2) = '.TX'\r
+       INPTNM(3) = ' '\r
+25     CONTINUE\r
+\r
+       CALL USR(6, 'ADVENT.IN',3,ERR)\r
+       IF (ERR .NE. 0) WRITE(4,28)\r
+\r
+28     FORMAT(' CAN''T SAVE SETTINGS IN ADVENT.IN')\r
+       IF (ERR.NE.0) GOTO 40\r
+\r
+       WRITE(6, 29)INDXNM,TEXTNM,SAVENM,INPTNM\r
+29     FORMAT(' ADVENTURE SETUP FILE',/,\r
+     1         'INDX=',3A6,/,'TEXT=',3A6,/,'SAVE=',3A6,/,'INPT=',3A6)\r
+       CALL USR(6, 'ADVENT.IN',4,ERR)\r
+       GOTO 40\r
+\r
+30     INDXNM(1) = 'AINDX.'\r
+       INDXNM(2) = 'DA'\r
+       INDXNM(3) = ' '\r
+       TEXTNM(1) = 'ATEXT.'\r
+       TEXTNM(2) = 'DA'\r
+       TEXTNM(3) = ' '\r
+       SAVENM(1) = 'ASAVE.'\r
+       SAVENM(2) = 'DA'\r
+       SAVENM(3) = ' '\r
+       INPTNM(1) = 'ADVENT'\r
+       INPTNM(2) = '.TX'\r
+       INPTNM(3) = ' '\r
+31     CALL CHKEOF(EOF)\r
+       READ(6, 32) CODE, NAME\r
+       IF (EOF .NE. 0) GOTO 34\r
+32     FORMAT(A4,1X,3A6)\r
+       DO 33 I = 1, 3\r
+       IF (CODE .EQ. 'INDX') INDXNM(I) = NAME(I)\r
+       IF (CODE .EQ. 'TEXT') TEXTNM(I) = NAME(I)\r
+       IF (CODE .EQ. 'SAVE') SAVENM(I) = NAME(I)\r
+       IF (CODE .EQ. 'INPT') INPTNM(I) = NAME(I)\r
+33     CONTINUE\r
+       GO TO 31\r
+\r
+34     CONTINUE\r
+40     CALL RSTRGM(.FALSE.,I)\r
+       IF(I.NE.0) GO TO 10\r
+       CALL USR(8, TEXTNM, 2, ERR)\r
+C\r
+C If that can't be opened for input, gotta rebuild\r
+C\r
+       IF (ERR.NE.0) GOTO 10\r
+C\r
+C Hack to set the DEFINE FILE stuff up\r
+C\r
+       CALL SETIDL\r
+C      CALL USR(6, 'ADVENT.TX', 2, ERR)\r
+C      IF (ERR.EQ.0) GOTO 1235\r
+C      CALL SIXOUT('C]AN''T OPEN [ADVENT.TX] FOR INPUT, QUITTING!',23,0)\r
+C      STOP\r
+\r
+1235   WRITN = .FALSE.\r
+       GO TO 5000\r
+C\r
+C  CLEAR OUT THE VARIOUS TEXT-POINTER ARRAYS.  ALL TEXT IS STORED IN DISK\r
+C  FILE (RANDOM ACCESS ON UNIT 2).  THE TEXT-POINTER ARRAYS CONTAIN RECORD\r
+C  NUMBERS IN THE FILE.  STEXT(N) IS SHORT DESCRIPTION OF LOCATION N.\r
+C  LTEXT(N) IS LONG DESCRIPTION.  PTEXT(N) POINTS TO MESSAGE FOR PROP(N)=0.\r
+C  SUCCESSIVE PROP MESSAGES ARE FOUND BY CHASING POINTERS.  RTEXT CONTAINS\r
+C  SECTION 6'S STUFF.  CTEXT(N) POINTS TO A PLAYER-CLASS MESSAGE.  MTEXT IS FOR\r
+C  SECTION 12.  WE ALSO CLEAR COND.  SEE DESCRIPTION OF SECTION 9 FOR DETAILS.\r
+C\r
+       WRITN = .TRUE.\r
+10     DO 1001 I=1,TABSIZ\r
+       KTAB(I)=0\r
+       ATAB(I)=0\r
+C\r
+C A2TAB not used on the '8\r
+C      A2TAB(I)=0\r
+       IF(I.GT.100) GO TO 1990\r
+       PTEXT(I)=0\r
+       PROP(I)=0\r
+       PLAC(I)=0\r
+       PLACE(I)=0\r
+       FIXD(I)=0\r
+       FIXED(I)=0\r
+       LINK(I)=0\r
+       LINK(I+100)=0\r
+1990   IF(I.LE.RTXSIZ)RTEXT(I)=0\r
+       IF(I.LE.CLSMAX)CTEXT(I)=0\r
+C      IF(I.LE.MAGSIZ)MTEXT(I)=0\r
+       IF(I.LE.VRBSIZ)ACTSPK(I)=0\r
+       IF(I.GT.LOCSIZ)GOTO 1001\r
+       KEY(I)=0\r
+       ABB(I)=0\r
+       ATLOC(I)=0\r
+       STEXT(I)=0\r
+       LTEXT(I)=0\r
+       COND(I)=0\r
+1001   CONTINUE\r
+C\r
+       CALL USR(6, INPTNM, 2, ERR)\r
+       IF(ERR.EQ.0)GOTO 1236\r
+       CALL SIXOUT('C]AN''T OPEN ',6,2)\r
+        CALL SIXOUT(INPTNM, 9, 3)\r
+        CALL SIXOUT(' ]FOR INPUT!',6,1)\r
+       STOP\r
+1236   CALL USR(8, TEXTNM, 3, ERR)\r
+       IF (ERR.EQ.0) GOTO 1237\r
+       CALL SIXOUT('C]AN''T OPEN ',6,2)\r
+       CALL SIXOUT(TEXTNM, 9, 3)\r
+       CALL SIXOUT(' ]FOR OUTPUT',6,1)\r
+       STOP\r
+1237   DEFINE FILE 8(FILSIZ,78,U,RECORD)\r
+       RECORD = 1\r
+       ASCVAR = 1\r
+       LINUSE=1\r
+       TRVS=1\r
+       CLSSES=1\r
+C\r
+C  START NEW DATA SECTION.  ISECT IS THE SECTION NUMBER.\r
+C\r
+1002   READ(6,1003)ISECT\r
+1003   FORMAT(I5)\r
+CDEBUG WRITE(4,930)ISECT\r
+CDEBUG930      FORMAT(' NOW LOADING SECTION',I3)\r
+       OLDLOC=-1\r
+       GOTO(1100,1004,1004,1030,1040,1004,1004,1050,1060,1070,1004,\r
+     1     1080,1004) (ISECT+1)\r
+C            (0)  (1)  (2)  (3)  (4)  (5)  (6)  (7)  (8)  (9)  (10)\r
+C           (11) (12)\r
+       CALL BUG(9)\r
+C\r
+C  SECTIONS 1, 2, 5, 6, 10, 12.  READ MESSAGES AND SET UP POINTERS.\r
+C\r
+1004   READ(6,1005) LOC,LINES\r
+1005   FORMAT(I4,12A6)\r
+C      WRITE(8'ASCVAR) LOC,LINES\r
+       MULT = 13 * MOD(ASCVAR-1,6)+1\r
+       DATA(MULT) = LOC\r
+       DO 1006 I = 1,12\r
+1006   DATA(I+MULT) = LINES(I)\r
+       ASCVAR = ASCVAR + 1\r
+       IF (MOD(ASCVAR,6) .EQ. 0) WRITE(8'RECORD)DATA\r
+1007   LINUSE = ASCVAR-1\r
+       IF(LOC .EQ. -1) GO TO 1002\r
+       IF(LOC .EQ. OLDLOC) GO TO 1020\r
+       IF(ISECT.EQ.12)GOTO 1020\r
+       IF(ISECT.EQ.10)GOTO 1012\r
+       IF(ISECT.EQ.6)GOTO 1011\r
+       IF(ISECT.EQ.5)GOTO 1010\r
+       IF(ISECT.EQ.1)GOTO 1008\r
+C\r
+       IF(LOC.GT.LOCSIZ) CALL BUG(11)\r
+       STEXT(LOC)=LINUSE\r
+       GOTO 1020\r
+C\r
+1008   IF(LOC.GT.LOCSIZ) CALL BUG(11)\r
+       LTEXT(LOC)=LINUSE\r
+       GOTO 1020\r
+C\r
+1010   IF(LOC.GT.0.AND.LOC.LE.100)PTEXT(LOC)=LINUSE\r
+       GOTO 1020\r
+C\r
+1011   IF(LOC .GT. RTXSIZ) CALL BUG(6)\r
+       RTEXT(LOC)=LINUSE\r
+       GOTO 1020\r
+C\r
+1012   IF(CLSSES.GT.CLSMAX) CALL BUG(12)\r
+       CTEXT(CLSSES)=LINUSE\r
+       CVAL(CLSSES)=LOC\r
+       CLSSES=CLSSES+1\r
+C      GOTO 1020\r
+C1013\r
+C      IF(LOC.GT.MAGSIZ)CALL BUG(6)\r
+C      MTEXT(LOC)=LINUSE\r
+C\r
+1020   OLDLOC = LOC\r
+       IF(RECORD .GE. FILSIZ) CALL BUG(2)\r
+       GOTO 1004\r
+C\r
+C  THE STUFF FOR SECTION 3 IS ENCODED HERE.  EACH "FROM-LOCATION" GETS A\r
+C  CONTIGUOUS SECTION OF THE "TRAVEL" ARRAY.  EACH ENTRY IN TRAVEL IS\r
+C  KEYWORD (FROM SECTION 4, MOTION VERBS), AND IS NEGATED IF\r
+C  THIS IS THE LAST ENTRY FOR THIS LOCATION.  KEY(N) IS THE INDEX IN TRAVEL\r
+C  OF THE FIRST OPTION AT LOCATION N.\r
+C\r
+C  SPECIAL CONDITIONS ON TRAVEL ARE ENCODED IN THE CORRESPONDING\r
+C  ENTRIES OF TRVCON.  THE NEW LOCATION IS IN TRVLOC.\r
+C\r
+C\r
+1030   READ(6,1031)LOC,J,NEWLOC,TK\r
+1031   FORMAT(99I6)\r
+       IF(LOC.EQ.-1)GOTO 1002\r
+       IF(KEY(LOC).NE.0)GOTO 1033\r
+       KEY(LOC)=TRVS\r
+       GOTO 1035\r
+C1033  TRAVEL(TRVS-1)=-TRAVEL(TRVS-1)\r
+1033   ITEMP = GETWRD(TRAVEL, TRVS-1, 0)\r
+       ITEMP=-ITEMP\r
+       CALL PUTWRD(TRAVEL, TRVS-1, ITEMP)\r
+1035   DO 1037 L=1,20\r
+       IF(TK(L).EQ.0)GOTO 1039\r
+C      TRAVEL(TRVS)=TK(L)\r
+       CALL PUTWRD(TRAVEL, TRVS, TK(L))\r
+C      TRVLOC(TRVS)=NEWLOC\r
+       CALL PUTWRD(TRVLOC, TRVS, NEWLOC)\r
+C      TRVCON(TRVS)=J\r
+       CALL PUTWRD(TRVCON, TRVS, J)\r
+       TRVS=TRVS+1\r
+       IF(TRVS.EQ.TRVSIZ)CALL BUG(3)\r
+1037   CONTINUE\r
+C1039  TRAVEL(TRVS-1)=-TRAVEL(TRVS-1)\r
+1039   ITEMP = GETWRD(TRAVEL, TRVS-1, 0)\r
+       ITEMP=-ITEMP\r
+       CALL PUTWRD(TRAVEL, TRVS-1, ITEMP)\r
+       GOTO 1030\r
+C\r
+C  HERE WE READ IN THE VOCABULARY.  KTAB(N) IS THE WORD NUMBER, ATAB(N) IS\r
+C  THE CORRESPONDING WORD.  THE -1 AT THE END OF SECTION 4 IS LEFT IN KTAB\r
+C  AS AN END-MARKER.\r
+C  OS/8 note: only reading first four characters as that's what's matched\r
+C  for vocabulary.\r
+C\r
+1040   DO 1042 TABNDX=1,TABSIZ\r
+1043   READ(6,1041)KTAB(TABNDX),ATAB(TABNDX)\r
+1041   FORMAT(I6,A4)\r
+       IF(KTAB(TABNDX).EQ.-1)GOTO 1002\r
+1042   CONTINUE\r
+       CALL BUG(4)\r
+C\r
+C  READ IN THE INITIAL LOCATIONS FOR EACH OBJECT.  ALSO THE IMMOVABILITY INFO.\r
+C  PLAC CONTAINS INITIAL LOCATIONS OF OBJECTS.  FIXD IS -1 FOR IMMOVABLE\r
+C  OBJECTS (INCLUDING THE SNAKE), OR = SECOND LOC FOR TWO-PLACED OBJECTS.\r
+C\r
+1050   READ(6,1031)IOBJ,J,K\r
+       IF(IOBJ.EQ.-1)GOTO 1002\r
+       IF(IOBJ.GT.100) CALL BUG(13)\r
+       PLAC(IOBJ)=J\r
+       FIXD(IOBJ)=K\r
+       GOTO 1050\r
+C\r
+C  READ DEFAULT MESSAGE NUMBERS FOR ACTION VERBS, STORE IN ACTSPK.\r
+C\r
+1060   READ(6,1031)VERB,J\r
+       IF(VERB.EQ.-1)GOTO 1002\r
+       IF(VERB.GT.VRBSIZ) CALL BUG(10)\r
+       ACTSPK(VERB)=J\r
+       VCNT=MAX0(VERB,VCNT)\r
+       GOTO 1060\r
+C\r
+C  READ INFO ABOUT AVAILABLE LIQUIDS AND OTHER CONDITIONS, STORE IN COND.\r
+C\r
+1070   READ(6,1031)K,TK\r
+       IF(K.EQ.-1)GOTO 1002\r
+       DO 1071 I=1,20\r
+       LOC=TK(I)\r
+       IF(LOC.EQ.0)GOTO 1070\r
+       IF (BITSET(LOC,K)) CALL BUG(8)\r
+1071   COND(LOC)=COND(LOC)+ISHFT(1,K)\r
+       GOTO 1070\r
+C\r
+C  READ DATA FOR HINTS.\r
+C\r
+1080   HNTMAX=0\r
+1081   READ(6,1031)K,TK\r
+       IF(K.EQ.-1)GOTO 1002\r
+       IF(K.LT.0.OR.K.GT.HNTSIZ)CALL BUG(7)\r
+       DO 1083 I=1,4\r
+1083   HINTS(K,I)=TK(I)\r
+       HNTMAX=MAX0(HNTMAX,K)\r
+       GOTO 1081\r
+\fC  FINISH CONSTRUCTING INTERNAL DATA FORMAT\r
+C      THEN SAVE THE RESULTS\r
+C\r
+1100   IF (MOD(ASCVAR,6) .NE. 0) WRITE(8'RECORD)DATA\r
+       CALL USR(8,TEXTNM,4,IERR)\r
+       CALL USR(8,TEXTNM,2,IERR)\r
+C\r
+C Restore the "DEFINE FILE" settings\r
+C\r
+       CALL SETIDL\r
+C1100  CALL CLOSE(1)\r
+       CALL SAVEGM(.FALSE.,I)\r
+       CONTINUE\r
+C\r
+C  HAVING READ IN THE DATABASE, CERTAIN THINGS ARE NOW CONSTRUCTED.  PROPS ARE\r
+C  SET TO ZERO.  WE FINISH SETTING UP COND BY CHECKING FOR FORCED-MOTION TRAVEL\r
+C  ENTRIES.  THE PLAC AND FIXD ARRAYS ARE USED TO SET UP ATLOC(N) AS THE FIRST\r
+C  OBJECT AT LOCATION N, AND LINK(IOBJ) AS THE NEXT OBJECT AT THE SAME LOCATION\r
+C  AS IOBJ.  (IOBJ>100 INDICATES THAT FIXED(IOBJ-100)=LOC; LINK(IOBJ) IS STILL THE\r
+C  CORRECT LINK TO USE.)  ABB IS ZEROED; IT CONTROLS WHETHER THE ABBREVIATED\r
+C  DESCRIPTION IS PRINTED.  COUNTS MOD 5 UNLESS "LOOK" IS USED.\r
+C\r
+C\r
+C  IF THE FIRST MOTION VERB IS 1 (ILLEGAL), THEN THIS IS A FORCED\r
+C  MOTION ENTRY.\r
+C\r
+5000   DO 1102 I=1,LOCSIZ\r
+       IF(LTEXT(I).EQ.0.OR.KEY(I).EQ.0)GOTO 1102\r
+       K=KEY(I)\r
+C      IF(IABS(TRAVEL(K)).EQ.1)COND(I)=2\r
+       ITEMP = GETWRD(TRAVEL, K, 0)\r
+       IF (IABS(ITEMP).EQ.1)COND(I)=2\r
+1102   CONTINUE\r
+C\r
+C  SET UP THE ATLOC AND LINK ARRAYS AS DESCRIBED ABOVE.  WE'LL USE THE DROP\r
+C  SUBROUTINE, WHICH PREFACES NEW OBJECTS ON THE LISTS.  SINCE WE WANT THINGS\r
+C  IN THE OTHER ORDER, WE'LL RUN THE LOOP BACKWARDS.  IF THE OBJECT IS IN TWO\r
+C  LOCS, WE DROP IT TWICE.  THIS ALSO SETS UP "PLACE" AND "FIXED" AS COPIES OF\r
+C  "PLAC" AND "FIXD".  ALSO, SINCE TWO-PLACED OBJECTS ARE TYPICALLY BEST\r
+C  DESCRIBED LAST, WE'LL DROP THEM FIRST.\r
+C\r
+       DO 1106 I=1,100\r
+       K=101-I\r
+       IF(FIXD(K).LE.0)GOTO 1106\r
+       CALL DROP(K+100,FIXD(K))\r
+       CALL DROP(K,PLAC(K))\r
+1106   CONTINUE\r
+C\r
+       DO 1107 I=1,100\r
+       K=101-I\r
+       FIXED(K)=FIXD(K)\r
+1107   IF(PLAC(K).NE.0.AND.FIXD(K).LE.0)CALL DROP(K,PLAC(K))\r
+C\r
+C  TREASURES, AS NOTED EARLIER, ARE OBJECTS 50 THROUGH MAXTRS (CURRENTLY 79).\r
+C  THEIR PROPS ARE INITIALLY -1, AND ARE SET TO 0 THE FIRST TIME THEY ARE\r
+C  DESCRIBED.  TALLY KEEPS TRACK OF HOW MANY ARE NOT YET FOUND, SO WE KNOW\r
+C  WHEN TO CLOSE THE CAVE.  TALLY2 COUNTS HOW MANY CAN NEVER BE FOUND (E.G. IF\r
+C  LOST BIRD OR BRIDGE).\r
+C\r
+       MAXTRS=79\r
+       TALLY=0\r
+       TALLY2=0\r
+       DO 1200 I=50,MAXTRS\r
+       IF(PTEXT(I).NE.0)PROP(I)=-1\r
+1200   TALLY=TALLY-PROP(I)\r
+C\r
+C  CLEAR THE HINT STUFF.  HINTLC(I) IS HOW LONG HE'S BEEN AT LOC WITH COND BIT\r
+C  I.  HINTED(I) IS TRUE IFF HINT I HAS BEEN USED.\r
+C\r
+       DO 1300 I=1,HNTMAX\r
+       HINTED(I)=.FALSE.\r
+1300   HINTLC(I)=0\r
+C\r
+CDEBUG WRITE(4,931)TABNDX,TABSIZ,VCNT,VRBSIZ,CLSSES,CLSMAX,\r
+CDEBUG     1   HNTMAX,HNTSIZ,TRVS,TRVSIZ,LINUSE,FILSIZ\r
+CDEBUG931      FORMAT(' USED VS MAX TABLE VALUES:'/\r
+CDEBUG     1   1X,I5,' OF ',I5,' VOCAB ENTRIES'/\r
+CDEBUG     2   1X,I5,' OF ',I5,' VERB ENTRIES'/\r
+CDEBUG     3   1X,I5,' OF ',I5,' CLASS ENTRIES'/\r
+CDEBUG     4   1X,I5,' OF ',I5,' HINT ENTRIES'/\r
+CDEBUG     5   1X,I5,' OF ',I5,' TRAVEL ENTRIES'/\r
+CDEBUG     6   1X,I5,' OF ',I5,' FILE RECORDS'/)\r
+C\r
+C  DEFINE SOME HANDY MNEMONICS.  THESE CORRESPOND TO OBJECT NUMBERS.\r
+C\r
+       KEYS=VOCAB('KEYS',1)\r
+       LAMP=VOCAB('LAMP',1)\r
+       GRATE=VOCAB('GRAT',1)\r
+       CAGE=VOCAB('CAGE',1)\r
+       ROD=VOCAB('ROD ',1)\r
+       ROD2=ROD+1\r
+       STEPS=VOCAB('STEP',1)\r
+       BIRD=VOCAB('BIRD',1)\r
+       DOOR=VOCAB('DOOR',1)\r
+       PILLOW=VOCAB('PILL',1)\r
+       SNAKE=VOCAB('SNAK',1)\r
+       FISSUR=VOCAB('FISS',1)\r
+       TABLET=VOCAB('TABL',1)\r
+       CLAM=VOCAB('CLAM',1)\r
+       OYSTER=VOCAB('OYST',1)\r
+       MAGZIN=VOCAB('MAGA',1)\r
+       DWARF=VOCAB('DWAR',1)\r
+       KNIFE=VOCAB('KNIF',1)\r
+       FOOD=VOCAB('FOOD',1)\r
+       BOTTLE=VOCAB('BOTT',1)\r
+       WATER=VOCAB('WATE',1)\r
+       OIL=VOCAB('OIL ',1)\r
+       PLANT=VOCAB('PLAN',1)\r
+       PLANT2=PLANT+1\r
+       AXE=VOCAB('AXE ',1)\r
+       MIRROR=VOCAB('MIRR',1)\r
+       DRAGON=VOCAB('DRAG',1)\r
+       CHASM=VOCAB('CHAS',1)\r
+       TROLL=VOCAB('TROL',1)\r
+       TROLL2=TROLL+1\r
+       BEAR=VOCAB('BEAR',1)\r
+       MESSAG=VOCAB('MESS',1)\r
+       VEND=VOCAB('VEND',1)\r
+       BATTER=VOCAB('BATT',1)\r
+C\r
+C  OBJECTS FROM 50 THROUGH WHATEVER ARE TREASURES.  HERE ARE A FEW.\r
+C\r
+       NUGGET=VOCAB('GOLD',1)\r
+       COINS=VOCAB('COIN',1)\r
+       CHEST=VOCAB('CHES',1)\r
+       EGGS=VOCAB('EGGS',1)\r
+       TRIDNT=VOCAB('TRID',1)\r
+       VASE=VOCAB('VASE',1)\r
+       EMRALD=VOCAB('EMER',1)\r
+       PYRAM=VOCAB('PYRA',1)\r
+       PEARL=VOCAB('PEAR',1)\r
+       RUG=VOCAB('RUG ',1)\r
+       CHAIN=VOCAB('CHAI',1)\r
+C\r
+C  THESE ARE MOTION-VERB NUMBERS.\r
+C\r
+       BACK=VOCAB('BACK',0)\r
+       LOOK=VOCAB('LOOK',0)\r
+       CAVE=VOCAB('CAVE',0)\r
+       NULL=VOCAB('NULL',0)\r
+       ENTRNC=VOCAB('ENTR',0)\r
+       DPRSSN=VOCAB('DEPR',0)\r
+       STREAM=VOCAB('STRE',0)\r
+C\r
+C  AND SOME ACTION VERBS.\r
+C\r
+       SAY=VOCAB('SAY ',2)\r
+       LOCK=VOCAB('LOCK',2)\r
+       THROW=VOCAB('THRO',2)\r
+       FIND=VOCAB('FIND',2)\r
+       INVENT=VOCAB('INVE',2)\r
+C\r
+C  INITIALISE THE DWARVES.  DLOC IS LOC OF DWARVES, HARD-WIRED IN.  ODLOC IS\r
+C  PRIOR LOC OF EACH DWARF, INITIALLY GARBAGE.  DALTLC IS ALTERNATE INITIAL LOC\r
+C  FOR DWARF, IN CASE ONE OF THEM STARTS OUT ON TOP OF THE ADVENTURER.  (NO 2\r
+C  OF THE 5 INITIAL LOCS ARE ADJACENT.)  DSEEN IS TRUE IF DWARF HAS SEEN HIM.\r
+C  DFLAG CONTROLS THE LEVEL OF ACTIVATION OF ALL THIS:\r
+C      0       NO DWARF STUFF YET (WAIT UNTIL REACHES HALL OF MISTS)\r
+C      1       REACHED HALL OF MISTS, BUT HASN'T MET FIRST DWARF\r
+C      2       MET FIRST DWARF, OTHERS START MOVING, NO KNIVES THROWN YET\r
+C      3       A KNIFE HAS BEEN THROWN (FIRST SET ALWAYS MISSES)\r
+C      3+      DWARVES ARE MAD (INCREASES THEIR ACCURACY)\r
+C  SIXTH DWARF IS SPECIAL (THE PIRATE).  HE ALWAYS STARTS AT HIS CHEST'S\r
+C  EVENTUAL LOCATION INSIDE THE MAZE.  THIS LOC IS SAVED IN CHLOC FOR REF.\r
+C  THE DEAD END IN THE OTHER MAZE HAS ITS LOC STORED IN CHLOC2.\r
+C\r
+       CHLOC=114\r
+       CHLOC2=140\r
+       DO 1700 I=1,6\r
+1700   DSEEN(I)=.FALSE.\r
+       DFLAG=0\r
+       DLOC(1)=19\r
+       DLOC(2)=27\r
+       DLOC(3)=33\r
+       DLOC(4)=44\r
+       DLOC(5)=64\r
+       DLOC(6)=CHLOC\r
+       DALTLC=18\r
+C\r
+C  OTHER RANDOM FLAGS AND COUNTERS, AS FOLLOWS:\r
+C      TURNS   TALLIES HOW MANY COMMANDS HE'S GIVEN (IGNORES YES/NO)\r
+C      LIMIT   LIFETIME OF LAMP (NOT SET HERE)\r
+C      KNFLOC  0 IF NO KNIFE HERE, LOC IF KNIFE HERE, -1 AFTER CAVEAT\r
+C      DETAIL  HOW OFTEN WE'VE SAID "NOT ALLOWED TO GIVE MORE DETAIL"\r
+C      ABBNUM  HOW OFTEN WE SHOULD PRINT NON-ABBREVIATED DESCRIPTIONS\r
+C      MAXDIE  NUMBER OF REINCARNATION MESSAGES AVAILABLE (UP TO 5)\r
+C      NUMDIE  NUMBER OF TIMES KILLED SO FAR\r
+C      HOLDNG  NUMBER OF OBJECTS BEING CARRIED\r
+C      DKILL   NUMBER OF DWARVES KILLED (UNUSED IN SCORING, NEEDED FOR MSG)\r
+C      FOOBAR  CURRENT PROGRESS IN SAYING "FEE FIE FOE FOO".\r
+C      BONUS   USED TO DETERMINE AMOUNT OF BONUS IF HE REACHES CLOSING\r
+C      CLOCK1  NUMBER OF TURNS FROM FINDING LAST TREASURE TILL CLOSING\r
+C      CLOCK2  NUMBER OF TURNS FROM FIRST WARNING TILL BLINDING FLASH\r
+C      LOGICALS WERE EXPLAINED EARLIER\r
+C\r
+       TURNS=0\r
+       LMWARN=.FALSE.\r
+       KNFLOC=0\r
+       DETAIL=0\r
+       ABBNUM=5\r
+       DO 1800 I=0,4\r
+1800   IF(RTEXT(2*I+81).NE.0)MAXDIE=I+1\r
+       NUMDIE=0\r
+       HOLDNG=0\r
+       DKILL=0\r
+       FOOBAR=0\r
+       BONUS=0\r
+       CLOCK1=30\r
+       CLOCK2=50\r
+       CLOSNG=.FALSE.\r
+       PANIC=.FALSE.\r
+       CLOSED=.FALSE.\r
+       GAVEUP=.FALSE.\r
+       SCORNG=.FALSE.\r
+C\r
+C\r
+C\r
+C  FINALLY, SINCE WE'RE CLEARLY SETTING THINGS UP FOR THE FIRST TIME...\r
+C\r
+C      PAUSE   'INIT DONE'\r
+       RETURN\r
+       END\r
diff --git a/sw/adventure/IO.FT b/sw/adventure/IO.FT
new file mode 100644 (file)
index 0000000..5b69641
--- /dev/null
@@ -0,0 +1,27 @@
+       SUBROUTINE IO(RECORD)\r
+C\r
+C\r
+C      This function reads the direct access file and unpacks it.\r
+C      we put 6 13-character records into a single direct access record\r
+C      because OS/8 FORTRAN puts every record into a single block.\r
+C      Packing this saves one-sixth the space.\r
+C\r
+       COMMON /TXTCOM/ RTEXT,LINES,ASCVAR,TXTLOC,DATA\r
+       INTEGER RTEXT(205),LINES(12),DATA(78),RECORD\r
+       INTEGER OLDREC,TXTLOC\r
+C      COMMON /RECMEM/OLDREC\r
+       DATA    OLDREC/-1/\r
+\r
+C      WRITE (1,111) RECORD\r
+       IREC = RECORD/6 + 1\r
+C      WRITE (1,112) OLDREC, IREC\r
+       IF (IREC .NE. OLDREC)READ(8'IREC)DATA\r
+       OLDREC = IREC\r
+       N = 13 * (MOD(RECORD-1,6)) + 1\r
+       TXTLOC = DATA(N)\r
+       DO 10 I = 1, 12\r
+10     LINES(I) = DATA(N+I)\r
+       RETURN\r
+C111   FORMAT(' IO FOR  ', I15)\r
+C112   FORMAT(' IO, OLD=', I15, ' NEW=',I15)\r
+       END\r
diff --git a/sw/adventure/JUGGLE.RA b/sw/adventure/JUGGLE.RA
new file mode 100644 (file)
index 0000000..55b6be9
--- /dev/null
@@ -0,0 +1,49 @@
+       SECT    JUGGLE\r
+/       SUBROUTINE JUGGLE(OBJECT)\r
+/       C\r
+/       C JUGGLE AN OBJECT BY PICKING IT UP AND PUTTING IT DOWN AGAIN, THE PURPOSE\r
+/       C BEING TO GET THE OBJECT TO THE FRONT OF THE CHAIN OF THINGS AT ITS LOC.\r
+/       C\r
+/       IMPLICIT INTEGER (A-Z)\r
+/       COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+/       DIMENSION ATLOC(150),LINK(200),PLACE(100),FIXED(100)\r
+/       \r
+       EXTERN  MOVE\r
+       #LBL=.\r
+       COMMON  PLACOM\r
+ATLOC, ORG     .+0702\r
+LINK,  ORG     .+1130\r
+PLACE, ORG     .+454\r
+FIXED, ORG     .+454\r
+HOLDNG,        ORG     .+3\r
+       ORG     #LBL\r
+\r
+/JUGGLE,\r
+       0;0                     /JSA entry point\r
+       FSTA    OBJECT\r
+       ATX     6\r
+/       I=PLACE(OBJECT)\r
+       FLDA    PLACE-3,6\r
+       FSTA    I\r
+/       J=FIXED(OBJECT)\r
+       FLDA    FIXED-3,6\r
+       FSTA    J\r
+/       CALL MOVE(OBJECT,I)\r
+       JSR     MOVE\r
+       JA      .+6\r
+       JA      OBJECT\r
+       JA      I\r
+/       CALL MOVE(OBJECT+100,J)\r
+/       RETURN\r
+/       END\r
+       FLDA    HUND\r
+       FADDM   OBJECT\r
+       JSR     MOVE\r
+       JA      JUGGLE\r
+       JA      OBJECT\r
+       JA      J\r
+OBJECT, ORG     .+3\r
+I,      ORG     .+3\r
+J,      ORG     .+3\r
+HUND,   F 100.0\r
+       END\r
diff --git a/sw/adventure/LOAD.BI b/sw/adventure/LOAD.BI
new file mode 100644 (file)
index 0000000..918d698
--- /dev/null
@@ -0,0 +1,12 @@
+$JOB LOAD ADVENTURE\r
+.R LOAD\r
+*ADVENT,LOAD.LS<ADVENT/S\r
+*SEED,RND,SPEAK,GETWRD,USR,BITSET,DSTROY,JUGGLE,A5TOA1/O\r
+*INITAD\r
+*AMAIN/O\r
+*SAVEGM\r
+*RSTRGM\r
+*BUG,GETIN,PCT,IO/C\r
+*MOVE,PUT,CARRY,DROP,PSPEAK,RSPEAK,YES,VOCAB\r
+*$\r
+$END\r
diff --git a/sw/adventure/MOVE.RA b/sw/adventure/MOVE.RA
new file mode 100644 (file)
index 0000000..4a5ce68
--- /dev/null
@@ -0,0 +1,88 @@
+       SECT    MOVE\r
+/       SUBROUTINE MOVE(OBJECT,WHERE)\r
+/       C\r
+/       C PLACE ANY OBJECT ANYWHERE BY PICKING IT UP AND DROPPING IT. MAY ALREADY BE\r
+/       C TOTING, IN WHICH CASE THE CARRY IS A NO-OP. MUSTN'T PICK UP OBJECTS WHICH\r
+/       C ARE NOT AT ANY LOC, SINCE CARRY WANTS TO REMOVE OBJECTS FROM ATLOC CHAINS.\r
+/       C\r
+/       IMPLICIT INTEGER (A-Z)\r
+/       COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+/       DIMENSION ATLOC(150),LINK(200),PLACE(100),FIXED(100)\r
+/       C\r
+       EXTERN  CARRY\r
+       EXTERN  DROP\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +MOVE  +\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+6\r
+OBJECT,        ORG     .+3\r
+WHERE, ORG     .+3\r
+HUND,  F 100.0\r
+THREHN,        F 300.0\r
+FROM,  ORG     .+3\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+       #LBL=.\r
+       COMMON  PLACOM\r
+ATLOC, ORG     .+0702\r
+LINK,  ORG     .+1130\r
+PLACE, ORG     .+0454\r
+FIXED, ORG     .+0454\r
+HOLDNG,        ORG     .+3\r
+       ORG     #LBL\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    OBJECT\r
+       FSTA    #G3\r
+       FSTA    #G2\r
+       FLDA%   #BASE,1+\r
+       FSTA    WHERE\r
+       FSTA    #G4\r
+       STARTF\r
+       FLDA%   OBJECT\r
+       ATX     7\r
+/       IF(OBJECT.GT.100)GOTO 1\r
+       FSUB    HUND\r
+       ATX     5\r
+       JGT     #1\r
+/       FROM=PLACE(OBJECT)\r
+       FLDA    PLACE-3,7\r
+       FSTA    FROM\r
+/       GOTO 2\r
+       JA      #2\r
+\r
+/       1      FROM=FIXED(OBJECT-100)\r
+#1,    FLDA    FIXED-3,5\r
+       FSTA    FROM\r
+\r
+/       2      IF(FROM.GT.0.AND.FROM.LE.300)CALL CARRY(OBJECT,FROM)\r
+#2,    JLE     #G1\r
+       FSUB    THREHN\r
+       JGT     #G1\r
+       JSR     CARRY\r
+       JA      .+6\r
+#G2,   JA      .\r
+       JA      FROM\r
+/       CALL DROP(OBJECT,WHERE)\r
+#G1,   JSR     DROP\r
+/       RETURN\r
+/       END\r
+       JA      #RTN\r
+#G3,   JA      .\r
+#G4,   JA      .\r
+       END\r
diff --git a/sw/adventure/PCT.RA b/sw/adventure/PCT.RA
new file mode 100644 (file)
index 0000000..967fd44
--- /dev/null
@@ -0,0 +1,40 @@
+       SECT    PCT\r
+/       PCT(N)=RND(100).LT.N\r
+       EXTERN  RND\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +PCT  +\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+6\r
+N,     ORG     .+3\r
+HUND,  F 100.0\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    N\r
+       STARTF\r
+/       RND(100)\r
+       JSR     RND\r
+       JA      .+0004\r
+       JA      HUND\r
+/       .LT. N\r
+       FSUB%   N\r
+       EXTERN  #LT\r
+       JSA     #LT\r
+       JA      #RTN\r
+       END\r
diff --git a/sw/adventure/PSPEAK.RA b/sw/adventure/PSPEAK.RA
new file mode 100644 (file)
index 0000000..e6fc0a6
--- /dev/null
@@ -0,0 +1,109 @@
+       SECT    PSPEAK\r
+/       SUBROUTINE PSPEAK(MSG,SKIP)\r
+/       C\r
+/       C FIND THE SKIP+1ST MESSAGE FOR OBJECT MSG AND PRINT IT.\r
+/       C MSG SHOULD BE THE INDEX OF\r
+/       C THE OBJECT. (INVEN+N+1 MESSAGE IS PROP=N MESSAGE).\r
+/       C\r
+/       IMPLICIT INTEGER (A-Z)\r
+/       COMMON /TXTCOM/ RTEXT,LINES,ASCVAR\r
+/       COMMON /PTXCOM/ PTEXT\r
+/       DIMENSION RTEXT(205),LINES(36),PTEXT(100)\r
+\r
+       EXTERN  IO\r
+       EXTERN  SPEAK\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +PSPEAK+\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+6\r
+MSG,   ORG     .+3\r
+SKIP,  ORG     .+3\r
+ONE,   F 1.0\r
+#DOTMP,        ORG     .+3\r
+OLDLOC,        ORG .+3\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+I,     ORG     .+0003\r
+M,     ORG     .+0003\r
+       #LBL=.\r
+       COMMON  PTXCOM\r
+PTEXT, ORG     .+0454\r
+       COMMON  TXTCOM\r
+RTEXT, ORG     .+1147\r
+LINES, ORG     .+0044\r
+ASCVAR,        ORG     .+0003\r
+TXTLOC,        ORG     .+0003\r
+DATA,  ORG     .+0352\r
+       ORG     #LBL\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    MSG\r
+       FLDA%   #BASE,1+\r
+       FSTA    SKIP\r
+       STARTF\r
+/       M=PTEXT(MSG)\r
+       FLDA%   MSG\r
+       ATX     7\r
+       FLDA    PTEXT-0003,7\r
+       FSTA    M\r
+/       IF(SKIP.LT.0)GOTO 9\r
+       FLDA%   SKIP\r
+       JLT     #9\r
+/       OLDLOC=MSG\r
+       FLDA%   MSG\r
+       FSTA    OLDLOC\r
+/       DO 3 I=1,SKIP+1\r
+       FLDA    ONE\r
+       FSTA    I\r
+       FLDA%   SKIP\r
+       FADD    ONE\r
+       FSTA    #DOTMP\r
+\r
+#G0001,\r
+/       1      READ(2'M)LOC,LINES\r
+#1,    JSR     IO\r
+       JA      .+0004\r
+       JA      M\r
+/       M = ASCVAR\r
+       FLDA    M\r
+       FADD    ONE\r
+       FSTA    M\r
+/       IF(LOC.EQ.OLDLOC) GO TO 1\r
+       FLDA    TXTLOC\r
+       FSUB    OLDLOC\r
+       JEQ     #1\r
+/       OLDLOC=LOC\r
+       FLDA    TXTLOC\r
+       FSTA    OLDLOC\r
+/       3      CONTINUE\r
+#3,    FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    #DOTMP\r
+       JLE     #G0001\r
+/       M=M-1\r
+       FLDA    M\r
+       FSUB    ONE\r
+       FSTA    M\r
+/       CALL SPEAK(M)\r
+#9,    JSR     SPEAK\r
+/       RETURN\r
+/       END\r
+       JA      #RTN\r
+       JA      M\r
+       END\r
diff --git a/sw/adventure/PUT.RA b/sw/adventure/PUT.RA
new file mode 100644 (file)
index 0000000..143b9bf
--- /dev/null
@@ -0,0 +1,53 @@
+       SECT    PUT\r
+/       INTEGER FUNCTION PUT(OBJECT,WHERE,PVAL)\r
+/       C\r
+/       C PUT IS THE SAME AS MOVE, EXCEPT IT RETURNS A VALUE USED TO SET UP THE\r
+/       C NEGATED PROP VALUES FOR THE REPOSITORY OBJECTS.\r
+/       C\r
+/       IMPLICIT INTEGER (A-Z)\r
+/       C\r
+\r
+       EXTERN  MOVE\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +PUT  +\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+6\r
+PVAL,  ORG     .+3\r
+M1,    F       -1.0\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+       #LBL=.\r
+       ORG     #LBL\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    #G1\r
+       FLDA%   #BASE,1+\r
+       FSTA    #G2\r
+       FLDA%   #BASE,1+\r
+       FSTA    PVAL\r
+       STARTF\r
+/       CALL MOVE(OBJECT,WHERE)\r
+       JSR     MOVE\r
+       JA      .+6\r
+#G1,   JA      .\r
+#G2,   JA      .\r
+/       PUT=(-1)-PVAL\r
+       FLDA    M1\r
+       FSUB%   PVAL\r
+       JA      #RTN\r
+       END\r
diff --git a/sw/adventure/RND.FT b/sw/adventure/RND.FT
new file mode 100644 (file)
index 0000000..749e17f
--- /dev/null
@@ -0,0 +1,19 @@
+       INTEGER FUNCTION RND(LIMIT)\r
+\r
+C\r
+C      GENERATES RANDOM INTEGER IN THE RANGE\r
+C              0 < N < LIMIT\r
+C\r
+C      USES THE RANDOM SEED GENERATED BY THE\r
+C      RALF MODULE "SEED"\r
+C\r
+       COMMON/NUMCOM/NUMBER\r
+       LOGICAL FLAG\r
+       DATA FLAG/.FALSE./,NUMBER/0/\r
+       IF(FLAG)GOTO 10\r
+       FLAG=.TRUE.\r
+       IRND=132*(NUMBER+327)\r
+10     IRND=MOD(IRND*1021,1048576)\r
+       RND=(LIMIT*IRND)/1048576\r
+       RETURN\r
+       END\r
diff --git a/sw/adventure/RSPEAK.RA b/sw/adventure/RSPEAK.RA
new file mode 100644 (file)
index 0000000..1a94df8
--- /dev/null
@@ -0,0 +1,57 @@
+       SECT    RSPEAK\r
+/      SUBROUTINE RSPEAK(I)\r
+/C\r
+/C PRINT THE I-TH "RANDOM" MESSAGE (SECTION 6 OF DATABASE).\r
+/C\r
+/      IMPLICIT INTEGER (A-Z)\r
+/      COMMON /TXTCOM/ RTEXT\r
+/      DIMENSION RTEXT(205)\r
+\r
+       EXTERN  SPEAK\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +RSPEAK+\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+6\r
+I,     ORG     .+3\r
+J,     ORG     .+3\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+       #LBL=.\r
+       COMMON  TXTCOM\r
+RTEXT, ORG     .+1147\r
+LINES, ORG     .+44\r
+ASCVAR,        ORG     .+3\r
+TXTLOC,        ORG     .+3\r
+DATA,  ORG     .+0234\r
+       ORG     #LBL\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    I\r
+       STARTF\r
+/       IF(I.NE.0)CALL SPEAK(RTEXT(I))\r
+       FLDA%   I\r
+       JEQ     #RTN\r
+/       CALL SPEAK(RTEXT(I))\r
+       ATX     7\r
+       FLDA    RTEXT-3,7\r
+       FSTA    J\r
+       JSR     SPEAK\r
+/       RETURN\r
+       JA      #RTN\r
+       JA      J\r
+       END\r
diff --git a/sw/adventure/RSTRGM.FT b/sw/adventure/RSTRGM.FT
new file mode 100644 (file)
index 0000000..831c318
--- /dev/null
@@ -0,0 +1,134 @@
+C  SAVE/RESTORE PROCESSOR\r
+C\r
+C WRITTEN BY   BOB SUPNIK\r
+C              DISK ENGINEERING\r
+C              25-AUG-78\r
+C\r
+C  CURRENT LIMITS:\r
+C      750 TRAVEL OPTIONS (TRAVEL, TRVSIZ).\r
+C      300 VOCABULARY WORDS (KTAB, ATAB, TABSIZ).\r
+C      150 LOCATIONS (LTEXT, STEXT, KEY, COND, ABB, ATLOC, LOCSIZ).\r
+C      100 OBJECTS (PLAC, PLACE, FIXD, FIXED, LINK (TWICE), PTEXT, PROP).\r
+C       35 "ACTION" VERBS (ACTSPK, VRBSIZ).\r
+C      205 RANDOM MESSAGES (RTEXT, RTXSIZ).\r
+C       12 DIFFERENT PLAYER CLASSIFICATIONS (CTEXT, CVAL, CLSMAX).\r
+C       20 HINTS, LESS 3 (HINTLC, HINTED, HINTS, HNTSIZ).\r
+C  THERE ARE ALSO LIMITS WHICH CANNOT BE EXCEEDED DUE TO THE STRUCTURE OF\r
+C  THE DATABASE.  (E.G., THE VOCABULARY USES N/1000 TO DETERMINE WORD TYPE,\r
+C  SO THERE CAN'T BE MORE THAN 1000 WORDS.)  THESE UPPER LIMITS ARE:\r
+C      1000 NON-SYNONYMOUS VOCABULARY WORDS\r
+C      300 LOCATIONS\r
+C      100 OBJECTS\r
+C\r
+       SUBROUTINE RSTRGM(F1,F2)\r
+       LOGICAL F1\r
+       INTEGER F2\r
+C      IMPLICIT INTEGER (A-Z)\r
+       LOGICAL LMWARN,CLOSNG,PANIC,HINTED,\r
+     1         CLOSED,GAVEUP,SCORNG,DSEEN\r
+C\r
+       COMMON /VERSN/ VMAJ, VMIN, VEDIT\r
+       INTEGER VMAJ, VMIN, VEDIT\r
+       COMMON /FILES/ INDXNM, TEXTNM, SAVENM\r
+       INTEGER INDXNM(3), TEXTNM(3), SAVENM(3)\r
+       COMMON /TXTCOM/ RTEXT,LINES,ASCVAR,TXTLOC,DATA\r
+       COMMON /VOCCOM/ KTAB,ATAB,TABSIZ\r
+       COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+       COMMON /PTXCOM/ PTEXT\r
+       COMMON /ABBCOM/ ABB\r
+       COMMON /MISCOM/ LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,\r
+     1 KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,\r
+     2 HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE\r
+       COMMON /MISCOM/\r
+     3 CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,\r
+     4 CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,\r
+     5 PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,\r
+     6 BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM\r
+       COMMON /MISCOM/\r
+     7 PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,\r
+     8 THROW,FIND,INVENT,TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM,\r
+     9 NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,\r
+     1 CLOSNG,PANIC,CLOSED,GAVEUP,SCORNG,ODLOC,STREAM,SPICES\r
+       COMMON /MISC2/ I,RTXSIZ,CLSMAX,LOCSIZ,CTEXT,STEXT,LTEXT,\r
+     1 SECT,TRAVEL,TRVCON,TRVLOC,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,\r
+     2 MAXTRS,HINTED,HNTLOC,KK\r
+       COMMON /MISC3/ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,\r
+     1  STICK,WZDARK\r
+C\r
+       INTEGER LINES(12),DATA(78)\r
+C      The TRAVEL, TRVCON, and TRVLOC arrays are\r
+C      Packed with words 0,1,2 holding the data. Saves lots\r
+C      of wasted space at the expense of some complexity.\r
+       INTEGER TRAVEL(250), TRVCON(250), TRVLOC(250), TRVSIZ\r
+       INTEGER KTAB(300),ATAB(300),TABSIZ\r
+       INTEGER LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150),\r
+     1 ATLOC(150)\r
+       INTEGER PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200),\r
+     1 PTEXT(100),PROP(100),HOLDNG\r
+       INTEGER ACTSPK(35)\r
+       INTEGER RTEXT(205)\r
+       INTEGER CTEXT(12),CVAL(12)\r
+       INTEGER HINTLC(20),HINTS(20,4)\r
+       DIMENSION HINTED(20)\r
+       INTEGER TK(20),DLOC(6),ODLOC(6)\r
+       DIMENSION DSEEN(6)\r
+       INTEGER ASCVAR, TXTLOC, TRVS, CLSSES, OLDLOC\r
+       INTEGER HNTSIZ, HNTMAX, TALLY, TALLY2, CHLOC, CHLOC2, DFLAG\r
+       INTEGER DALTLC,GRATE,CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE\r
+       INTEGER FISSUR,TABLET,CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE\r
+       INTEGER WATER,OIL,PLANT,PLANT2,AXE,MIRROR,DRAGON,CHASM,EMRALD\r
+       INTEGER BEAR,MESSAG,VEND,BATTER,COINS,CHEST,EGGS,TRIDNT,VASE\r
+       INTEGER PYRAM,PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN\r
+       INTEGER LOCK,THROW,FIND,INVENT,TURNS,KNFLOC,DETAIL,ABBNUM,SAY\r
+       INTEGER NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2\r
+       INTEGER TROLL,TROLL2,STREAM,SPICES\r
+       INTEGER RTXSIZ,CLSMAX,LOCSIZ,SECT,TABNDX,OBJ\r
+       INTEGER VERB,HNTLOC,KK\r
+       INTEGER ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,STICK,WZDARK\r
+C\r
+C USR call - FORTRAN unit, filename, operation, error flag\r
+C Operation is 2, open input; 3 open output; 4 close output.\r
+C Calling "CLOSE" on an input file causes it to be deleted!\r
+C\r
+       IF (.NOT. F1) GOTO 10\r
+C\r
+C Attempt to restore saved database\r
+C\r
+       CALL USR(7, SAVENM, 2, IERR)\r
+       IF (IERR.NE.0) GOTO 60\r
+       GOTO 20\r
+C\r
+C Attempt to restore initial database\r
+C\r
+10     CALL USR(7, INDXNM, 2, IERR)\r
+       IF (IERR.EQ.0) GOTO 20\r
+       F2=-1\r
+       RETURN\r
+C\r
+20     READ(7) I1,I2,I3\r
+       IF((I1.NE.VMAJ).OR.(I2.NE.VMIN)) GO TO 50\r
+       READ(7) RTEXT,KTAB,ATAB\r
+       READ(7) ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+       READ(7) PTEXT,ABB,LINUSE,TRVS,CLSSES\r
+       READ(7) OLDLOC,LOC,CVAL,NEWLOC,KEY\r
+       READ(7) PLAC,FIXD,ACTSPK,COND,HINTS\r
+       READ(7) HNTMAX,PROP,TALLY,TALLY2,HINTLC\r
+       READ(7) CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC\r
+       READ(7) TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM\r
+       READ(7) NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS\r
+       READ(7) CLOCK1,CLOCK2,CLOSNG,PANIC,CLOSED\r
+       READ(7) GAVEUP,SCORNG,ODLOC,CTEXT,STEXT,LTEXT\r
+       READ(7) TRAVEL,TRVCON,TRVLOC,MAXTRS,HINTED,HNTLOC\r
+       READ(7) ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,STICK,WZDARK\r
+C\r
+C      CLOSNG = 0\r
+       IF(F1) CALL SIXOUT('R]ESTORED.@',5,0)\r
+       F2=0\r
+       RETURN\r
+50     IF(F1) CALL SIXOUT('F]ILE IS OBSOLETE, [RESTORE] FAILS.',18,0)\r
+       F2=-1\r
+       RETURN\r
+60     CALL SIXOUT('C]AN''T OPEN SAVE FILE, [RESTORE] FAILS.', 22, 0)\r
+       F2=-1\r
+       RETURN\r
+       END\r
diff --git a/sw/adventure/SAVEGM.FT b/sw/adventure/SAVEGM.FT
new file mode 100644 (file)
index 0000000..eae99e3
--- /dev/null
@@ -0,0 +1,135 @@
+C  SAVE/RESTORE PROCESSOR\r
+C\r
+C WRITTEN BY   BOB SUPNIK\r
+C              DISK ENGINEERING\r
+C              25-AUG-78\r
+C\r
+C  CURRENT LIMITS:\r
+C      750 TRAVEL OPTIONS (TRAVEL, TRVSIZ).\r
+C      300 VOCABULARY WORDS (KTAB, ATAB, TABSIZ).\r
+C      150 LOCATIONS (LTEXT, STEXT, KEY, COND, ABB, ATLOC, LOCSIZ).\r
+C      100 OBJECTS (PLAC, PLACE, FIXD, FIXED, LINK (TWICE), PTEXT, PROP).\r
+C       35 "ACTION" VERBS (ACTSPK, VRBSIZ).\r
+C      205 RANDOM MESSAGES (RTEXT, RTXSIZ).\r
+C       12 DIFFERENT PLAYER CLASSIFICATIONS (CTEXT, CVAL, CLSMAX).\r
+C       20 HINTS, LESS 3 (HINTLC, HINTED, HINTS, HNTSIZ).\r
+C  THERE ARE ALSO LIMITS WHICH CANNOT BE EXCEEDED DUE TO THE STRUCTURE OF\r
+C  THE DATABASE.  (E.G., THE VOCABULARY USES N/1000 TO DETERMINE WORD TYPE,\r
+C  SO THERE CAN'T BE MORE THAN 1000 WORDS.)  THESE UPPER LIMITS ARE:\r
+C      1000 NON-SYNONYMOUS VOCABULARY WORDS\r
+C      300 LOCATIONS\r
+C      100 OBJECTS\r
+C\r
+       SUBROUTINE SAVEGM(F1,F2)\r
+       LOGICAL F1\r
+       INTEGER F2\r
+C      IMPLICIT INTEGER (A-Z)\r
+       LOGICAL LMWARN,CLOSNG,PANIC,HINTED,\r
+     1         CLOSED,GAVEUP,SCORNG,DSEEN\r
+C\r
+       COMMON /VERSN/ VMAJ, VMIN, VEDIT\r
+       INTEGER VMAJ, VMIN, VEDIT\r
+       COMMON /FILES/ INDXNM, TEXTNM, SAVENM\r
+       INTEGER INDXNM(3), TEXTNM(3), SAVENM(3)\r
+       COMMON /TXTCOM/ RTEXT,LINES,ASCVAR,TXTLOC,DATA\r
+       COMMON /VOCCOM/ KTAB,ATAB,TABSIZ\r
+       COMMON /PLACOM/ ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+       COMMON /PTXCOM/ PTEXT\r
+       COMMON /ABBCOM/ ABB\r
+       COMMON /MISCOM/ LINUSE,TRVS,CLSSES,OLDLOC,LOC,CVAL,TK,NEWLOC,\r
+     1 KEY,PLAC,FIXD,ACTSPK,COND,HINTS,HNTMAX,PROP,TALLY,TALLY2,\r
+     2 HINTLC,CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC,KEYS,LAMP,GRATE\r
+       COMMON /MISCOM/\r
+     3 CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE,FISSUR,TABLET,\r
+     4 CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE,WATER,OIL,PLANT,\r
+     5 PLANT2,AXE,MIRROR,DRAGON,CHASM,TROLL,TROLL2,BEAR,MESSAG,VEND,\r
+     6 BATTER,NUGGET,COINS,CHEST,EGGS,TRIDNT,VASE,EMRALD,PYRAM\r
+       COMMON /MISCOM/\r
+     7 PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN,SAY,LOCK,\r
+     8 THROW,FIND,INVENT,TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM,\r
+     9 NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2,\r
+     1 CLOSNG,PANIC,CLOSED,GAVEUP,SCORNG,ODLOC,STREAM,SPICES\r
+       COMMON /MISC2/ I,RTXSIZ,CLSMAX,LOCSIZ,CTEXT,STEXT,LTEXT,\r
+     1 SECT,TRAVEL,TRVCON,TRVLOC,TRVSIZ,TABNDX,OBJ,J,K,VERB,HNTSIZ,\r
+     2 MAXTRS,HINTED,HNTLOC,KK\r
+       COMMON/MISC3/ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,\r
+     1  STICK,WZDARK\r
+C\r
+       INTEGER LINES(12),DATA(78)\r
+C      The TRAVEL, TRVCON, and TRVLOC arrays are\r
+C      Packed with words 0,1,2 holding the data. Saves lots\r
+C      of wasted space at the expense of some complexity.\r
+       INTEGER TRAVEL(250), TRVCON(250), TRVLOC(250), TRVSIZ\r
+       INTEGER KTAB(300),ATAB(300),TABSIZ\r
+       INTEGER LTEXT(150),STEXT(150),KEY(150),COND(150),ABB(150),\r
+     1 ATLOC(150)\r
+       INTEGER PLAC(100),PLACE(100),FIXD(100),FIXED(100),LINK(200),\r
+     1 PTEXT(100),PROP(100),HOLDNG\r
+       INTEGER ACTSPK(35)\r
+       INTEGER RTEXT(205)\r
+       INTEGER CTEXT(12),CVAL(12)\r
+       INTEGER HINTLC(20),HINTS(20,4)\r
+       DIMENSION HINTED(20)\r
+       INTEGER TK(20),DLOC(6),ODLOC(6)\r
+       DIMENSION DSEEN(6)\r
+       INTEGER ASCVAR, TXTLOC, TRVS, CLSSES, OLDLOC\r
+       INTEGER HNTSIZ, HNTMAX, TALLY, TALLY2, CHLOC, CHLOC2, DFLAG\r
+       INTEGER DALTLC,GRATE,CAGE,ROD,ROD2,STEPS,BIRD,DOOR,PILLOW,SNAKE\r
+       INTEGER FISSUR,TABLET,CLAM,OYSTER,MAGZIN,DWARF,KNIFE,FOOD,BOTTLE\r
+       INTEGER WATER,OIL,PLANT,PLANT2,AXE,MIRROR,DRAGON,CHASM,EMRALD\r
+       INTEGER BEAR,MESSAG,VEND,BATTER,COINS,CHEST,EGGS,TRIDNT,VASE\r
+       INTEGER PYRAM,PEARL,RUG,CHAIN,BACK,LOOK,CAVE,NULL,ENTRNC,DPRSSN\r
+       INTEGER SAY,LOCK,THROW,FIND,INVENT,TURNS,KNFLOC,DETAIL,ABBNUM\r
+       INTEGER NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS,CLOCK1,CLOCK2\r
+       INTEGER TROLL,TROLL2,STREAM,SPICES\r
+       INTEGER RTXSIZ,CLSMAX,LOCSIZ,SECT,TABNDX,OBJ\r
+       INTEGER VERB,HNTLOC,KK\r
+       INTEGER ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,STICK,WZDARK\r
+C\r
+       IF (F1) GOTO 10\r
+C\r
+C      Normal setup, open AINDX.DA for output\r
+C\r
+       CALL USR(7,INDXNM,3,IERR)\r
+       IF (IERR .EQ. 0) GO TO 20\r
+       CALL SIXOUT('C]AN''T OPEN ',6,2)\r
+       CALL SIXOUT(INDXNM, 9, 3)\r
+       CALL SIXOUT(' ]FOR OUTPUT',6,1)\r
+       F2 = -1\r
+       RETURN\r
+C\r
+C      Saving game\r
+C\r
+10     CALL USR(7,SAVENM,3,IERR)\r
+       IF (IERR.EQ.0) GOTO 20\r
+       CALL SIXOUT('C]AN''T OPEN ',6,2)\r
+       CALL SIXOUT(SAVENM,9,3)\r
+       CALL SIXOUT(' ]FOR OUTPUT',6,1)\r
+       F2 = -1\r
+       RETURN\r
+C\r
+20     WRITE(7) VMAJ,VMIN,VEDIT\r
+       WRITE(7) RTEXT,KTAB,ATAB\r
+       WRITE(7) ATLOC,LINK,PLACE,FIXED,HOLDNG\r
+       WRITE(7) PTEXT,ABB,LINUSE,TRVS,CLSSES\r
+       WRITE(7) OLDLOC,LOC,CVAL,NEWLOC,KEY\r
+       WRITE(7) PLAC,FIXD,ACTSPK,COND,HINTS\r
+       WRITE(7) HNTMAX,PROP,TALLY,TALLY2,HINTLC\r
+       WRITE(7) CHLOC,CHLOC2,DSEEN,DFLAG,DLOC,DALTLC\r
+       WRITE(7) TURNS,LMWARN,KNFLOC,DETAIL,ABBNUM\r
+       WRITE(7) NUMDIE,MAXDIE,DKILL,FOOBAR,BONUS\r
+       WRITE(7) CLOCK1,CLOCK2,CLOSNG,PANIC,CLOSED\r
+       WRITE(7) GAVEUP,SCORNG,ODLOC,CTEXT,STEXT,LTEXT\r
+       WRITE(7) TRAVEL,TRVCON,TRVLOC,MAXTRS,HINTED,HNTLOC\r
+       WRITE(7) ATTACK,DTOTAL,OLDLC2,LIMIT,MXSCOR,SCORE,STICK,WZDARK\r
+C\r
+       IF(F1) CALL SIXOUT('S]AVED.',3, 0)\r
+C\r
+C Close the output file\r
+C\r
+       IF(F1) CALL USR(7,SAVENM, 4, IERR)\r
+       IF(.NOT.F1) CALL USR(7, INDXNM, 4, IERR)\r
+       F2=0\r
+       RETURN\r
+       END\r
+\f\r
diff --git a/sw/adventure/SEED.RA b/sw/adventure/SEED.RA
new file mode 100644 (file)
index 0000000..8810434
--- /dev/null
@@ -0,0 +1,146 @@
+       FIELD1  SETIDL\r
+/IDLE RANDOM NUMBER GENERATOR\r
+       EXTERN  #IDLE\r
+\r
+       JA      #RET\r
+       TEXT    +SETIDL+\r
+SXR,   SETX    XR\r
+       SETB    BP\r
+BP,    F 0.0\r
+XR,    ORG     .+3\r
+EXP,   0\r
+IDLAD, ADDR    #IDLE-1         / Pointer to idle routine in FRTS\r
+POINT,\r
+JOB,   ADDR    DOIT            / Address of routine to run\r
+       ORG     XR+10\r
+K0100, 100\r
+K0003, 3\r
+ROTWRD, 0017\r
+       #LBL=.\r
+       COMMON  NUMCOM\r
+NUMBER,        ORG     .+3\r
+\r
+       COMMON  TXTCOM\r
+RTEXT, ORG     .+1147\r
+LINES, ORG     .+0044\r
+ASCVAR,        ORG     .+0003\r
+TXTLOC,        ORG     .+0003\r
+DATA,  ORG     .+0352\r
+       ORG     #LBL\r
+SEEDPT,        ADDR    NUMBER\r
+       0\r
+DATHAK,        7777\r
+       FLDA    ASCVAR\r
+DATABL,        1763-1          / Address of Direct Access table entry 8 in FRTS\r
+COUNT, 0               / Idle loop count\r
+COUNT2,        7774            / Outer counter\r
+RESET, 7774            / Outer counter value\r
+X4=14                  / Autoindex reg\r
+       ORG     10*3+BP\r
+       FNOP\r
+       JA      SXR\r
+       0\r
+RET,   JA      .\r
+\r
+       BASE    0\r
+#RET,  STARTD\r
+       FLDA    10*3\r
+       FSTA    RET\r
+       SETB    BP\r
+       BASE    BP\r
+       STARTF\r
+       TRAP4   SET8    /GO TO 8 MODE STUFF.\r
+       JA      RET     /DONE. ON IDLE QUEUE.\r
+\r
+SET8,  0\r
+/\r
+/ Horrible hackery. This sets up the FRTS direct access table\r
+/ to allow us to open the ADVENT.DA file without having to\r
+/ rebuild it each time. Open it using USR, and this lets us\r
+/ go use it later. (DEFINE FILE always creates a new one.)\r
+       TAD     DATABL\r
+       DCAZ    X4\r
+SCDF,  CDF     0\r
+       TAD     DATHAK\r
+       DCA%    X4\r
+       TAD     DATHAK+1\r
+       DCA%    X4\r
+       TAD     DATHAK+2\r
+       DCA%    X4\r
+       TAD     CDFIDL\r
+       SZA CLA\r
+       JMP     SFIELD  /ALREADY DONE\r
+       TAD     IDLAD   /FIELD OF IDLE ROUTINE\r
+       JMS     MKCDF\r
+       DCA     CDFIDL\r
+       TAD     IDLAD+1 /ADDRESS OF #IDLE\r
+       DCAZ    X4\r
+CDFIDL,        0               /GETS CDF\r
+       TAD     SKPINS  /SKP INSTRUCTION\r
+       DCAZ%   X4      /STORE AT #IDLE\r
+       TAD     JOB+1   /ADDRESS OF IDLE ROUTINE\r
+       DCAZ%   X4      /STORE AT #IDLE+1\r
+       TAD     JOB\r
+       JMS     MKCDF\r
+       IAC             / CDF -> CIF CDF\r
+       DCAZ%   X4      /STORE AT #IDLE+2\r
+SFIELD,        CIF CDF\r
+       JMP%    SET8\r
+\r
+/\r
+/ Blinky lights\r
+/\r
+SKPINS,\r
+DOIT,  SKP             / Entry point, one-time use constant\r
+       TAD     ROTWRD  /GET WORD TO DISPLAY\r
+STALL, ISZ     COUNT\r
+       JMP     STALL\r
+       ISZ     COUNT2\r
+       JMP     STALL\r
+FLOP,  RAL             /Shift over\r
+       DCA     ROTWRD  /Save it\r
+       TAD     RESET   /Reset outer counter\r
+       DCA     COUNT2\r
+       SNL\r
+       JMP     DONE\r
+       TAD     ROTWRD\r
+FLIP,  RAR             /Rotate back\r
+       DCA     ROTWRD\r
+       TAD     FLOP\r
+       DCA     COUNT   /Save old rotate\r
+       TAD     FLIP    /And flip 'em around\r
+       DCA     FLOP\r
+       TAD     COUNT\r
+       DCA     FLIP\r
+       DCA     COUNT\r
+DONE,  TAD     SEEDPT\r
+       JMS     MKCDF\r
+       DCA     .+1\r
+       0\r
+       TAD     SEEDPT+1\r
+       DCA     EXP\r
+       CLL IAC\r
+       TAD     EXP\r
+       DCA     POINT\r
+       TAD%    POINT\r
+       TAD     K0100\r
+       SPA\r
+       JMP     OVRFLO\r
+       DCA%    POINT\r
+       JMP     DOIT+1\r
+\r
+OVRFLO,        CLA CLL\r
+       DCA%    POINT\r
+       TAD%    EXP\r
+       IAC\r
+       AND     K0003\r
+       DCA%    EXP\r
+       JMP     DOIT+1\r
+/ Change field number into CDF instruction\r
+MKCDF, 0\r
+       CLL RTL\r
+       RAL             /INTO BITS 6-8\r
+       TAD     SCDF    /CDF TO #IDLE\r
+       JMP%    MKCDF\r
+\r
+       END\r
diff --git a/sw/adventure/SPEAK.RA b/sw/adventure/SPEAK.RA
new file mode 100644 (file)
index 0000000..a89e095
--- /dev/null
@@ -0,0 +1,566 @@
+/      SPEAK - Types out messages from the database\r
+/      Also includes TTY output routines that unpack\r
+/      packed sixbit into mixed case ASCII.\r
+/\r
+       FIELD1  ADVTTY\r
+\r
+TTY,   0                       / TTY Output routine, dupe of FRTS\r
+       IOF                     / Protect from race conditions\r
+       SNA                     / Input or output?\r
+       JMP     KBD             / Input - read character\r
+       DCA     HANGPT          / Output - save char\r
+       RDF\r
+       TAD     CDIF00\r
+       DCA     CDFX\r
+       CDF     0\r
+       TAD%    TOCHR           / Output character status in FRTS\r
+       SMA SZA CLA             / If gt 0, char backed up\r
+       JMP     BUSY            / Else must wait\r
+LOOP,  TAD%    TOCHR           / Get the status\r
+       CLL RAL                 /Busy flag in link\r
+       CLA CML RAR             /Complement of busy in sign\r
+       TAD     HANGPT\r
+       SPA                     /If tty not busy, \r
+       TLS                     /Send it\r
+       DCA%    TOCHR           /Store pos or neg, backed up or busy\r
+TTYRET,        ION                     /Interrupts back on\r
+CDFX,  HLT                     /Caller's field\r
+       JMP%    TTY             /Return\r
+\r
+CDIF00,        CIF CDF\r
+\r
+BUSY,  CDF     10              /Busy, must wait. Call Field 0 HANG routine\r
+       CIF     0\r
+       JMS%    HANGPT+1\r
+       0451                    / TTUHNG\r
+       CDF     0\r
+       JMP     LOOP            / Try output again\r
+\r
+KBD,   RDF\r
+       TAD     CDIF00\r
+       DCA     CDFX\r
+       CDF     0\r
+       TAD%    TICHR           / Any input?\r
+       SNA CLA\r
+       JMP     WAIT            / No, wait\r
+GETIN, TAD%    TICHR           / Get character\r
+       DCA     HANGPT          / Save\r
+       DCA%    TICHR           / Clear buffer\r
+       TAD     HANGPT\r
+       JMP     TTYRET          / Return\r
+\r
+WAIT,  CDF     10\r
+       CIF     0\r
+       JMS%    HANGPT+1        /Hang\r
+       465                     /KBUHNG\r
+       CDF     0\r
+       JMP     GETIN   /Get input\r
+TOCHR, 4\r
+TICHR, 5\r
+HANGPT,        ADDR    #HANG\r
+/\r
+/ Terminal line input routine. Used because the FRTS input is quite limited.\r
+/ This one handles scope rubouts and allows lower case input.\r
+/ Inputs: Array        Returned characters, stored one sixbit per array word\r
+/              (The FORTRAN input routine is set up this way to unpack)\r
+/      Size    Number of characters to allow\r
+/      Prompt Prompt string\r
+       FIELD1  RDLIN\r
+/\r
+       ENTRY   RDLINE\r
+RDLINE,        JA      #RLST\r
+#RLXR, ORG     .+10\r
+       TEXT    +RDLINE+\r
+#RLRET,        SETX    #RLXR\r
+       SETB    #RLBAS\r
+       JA      .+3\r
+#RLBAS,        ORG     .+6\r
+BUFPT, ORG     .+3\r
+BUFLEN,        ORG     .+3\r
+\r
+       ORG     #RLBAS+30\r
+       FNOP\r
+       JA      #RLRET\r
+       FNOP\r
+#RGOBK,        0;0\r
+#RLRTN,        BASE    #RLBAS\r
+       JA      #RGOBK\r
+#RLST, STARTD\r
+       0210\r
+       FSTA    #RGOBK,0\r
+       0200\r
+       SETX    #RLXR\r
+       SETB    #RLBAS\r
+       LDX     0,1\r
+       FSTA    #RLBAS\r
+       FLDA%   #RLBAS,1+\r
+       FSTA    BUFPT\r
+       FLDA%   #RLBAS,1+\r
+       FSTA    BUFLEN\r
+       STARTF\r
+/\r
+/      Pass down size to '8' code\r
+/\r
+       SETX    BUFSIZ  \r
+       FLDA%   BUFLEN\r
+       FNEG                    / Make it negative\r
+       ATX     0               / Pass buffer len\r
+       SETX    #RLXR\r
+       TRAP4   GETLIN          / Get input line\r
+       JA      #RLRTN          / And return\r
+/ Input reader\r
+\r
+       FIELD1  GETLN\r
+\r
+GETLIN,        0\r
+       CLA\r
+       DCA     OFFSET          / Start at offset zero\r
+       TAD%    SCOPT\r
+       AND     K200\r
+       DCA     SCOPE\r
+       TAD%    BUFFLD+1        / Get CDF for buffer\r
+       AND     FLDMSK\r
+       CLL RTL\r
+       RAL\r
+       TAD     CDFG\r
+       DCA     BUFCDF\r
+/\r
+/ Go get an input character\r
+/\r
+GETNXT,        JMS%    PTTY+1          / Called with zero to get char\r
+       DCA     INCH            / Save input\r
+/\r
+/ Specials?\r
+/\r
+       TAD     INCH\r
+       TAD     MDEL            / Delete?\r
+       SNA CLA\r
+       JMP     DELETE          / Handle that\r
+       TAD     INCH\r
+       TAD     MCR             / CR?\r
+       SNA CLA\r
+       JMP     ENTER           / End of line, let's go.\r
+       TAD     INCH\r
+       TAD     MSPC            / Less than space?\r
+       SPA CLA\r
+       JMP     BELL            / Nope, ignore\r
+       TAD     OFFSET\r
+       TAD     BUFSIZ          / Room left?\r
+       SMA CLA\r
+       JMP     BELL            / Bell if not\r
+       TAD     INCH\r
+       JMS%    PTTY+1          / Echo it\r
+       TAD     INCH\r
+       TAD     LWRA            / Is it lowercase?\r
+       SPA CLA\r
+       JMP     UPPER           / No, store it\r
+       TAD     INCH\r
+       TAD     LWRZ\r
+       SMA CLA\r
+       JMP     UPPER           / More than lowercase z\r
+       TAD     INCH\r
+       TAD     AMINA           / Adjust to uppercase\r
+       DCA     INCH\r
+UPPER, JMS     STORE           / Store this character\r
+       JMP     GETNXT          / Get more\r
+/ Store a character in the output buffer\r
+/ using the current offset\r
+/\r
+\r
+STORE, 0\r
+       TAD     OFFSET\r
+       TAD     OFFSET\r
+       TAD     OFFSET          / Count FPP words\r
+       TAD%    BUFPTR+1        / Pointer to exponent word\r
+       DCA     BPT\r
+       TAD     K27             / Exponent 27 for integer\r
+       JMS     STO\r
+       JMS     STO             / Zero high word\r
+       TAD     INCH            / Char value\r
+       AND     SIXMSK          / Convert to sixbit\r
+       JMS     STO             / Store in buffer\r
+       CDF     10              / Back to my field\r
+       ISZ     OFFSET          / One more in the buffer\r
+SPC,    240                    / Really shouldn't overflow; harmless AND\r
+       JMP%    STORE           / Return\r
+STO,   0\r
+BUFCDF,        HLT                     / Gets CDF for buffer field\r
+       DCA%    BPT\r
+       ISZ     BPT             / Next word\r
+       JMP%    STO             / Return if no skip\r
+       TAD     BUFCDF\r
+       TAD     BS              / Next field\r
+       DCA     BUFCDF\r
+       JMP%    STO\r
+\r
+BELL,  TAD     BEL             / Warn the user\r
+       JMS%    PTTY+1\r
+       JMP     GETNXT\r
+\r
+DELETE,        TAD     OFFSET          / How far into the buffer are we?\r
+       SNA CLA\r
+       JMP     BELL            / Ignore extra deletes\r
+       TAD     SCOPE\r
+       SNA CLA\r
+       JMP     DUMBDL          / Simple fortran-format delete\r
+       TAD     BS\r
+       JMS%    PTTY+1\r
+       TAD     SPC\r
+       JMS%    PTTY+1\r
+       TAD     BS\r
+       JMS%    PTTY+1\r
+       JMP     FIXOFF          / Fix the offset\r
+DUMBDL,        TAD     K334            / Backslash\r
+       JMS%    PTTY+1\r
+FIXOFF,        CLA CMA\r
+       TAD     OFFSET\r
+       DCA     OFFSET\r
+       JMP     GETNXT\r
+\r
+ENTER, TAD     CR              / Send a RETURN\r
+       JMS%    PTTY+1\r
+CLRLP, TAD     OFFSET          / Is there space available?\r
+       TAD     BUFSIZ\r
+       SMA CLA\r
+       JMP     CLRDN\r
+       TAD     SPC\r
+       DCA     INCH\r
+       JMS     STORE\r
+       JMP     CLRLP\r
+CLRDN, CIF CDF 0\r
+       JMP%    GETLIN\r
+\r
+BUFSIZ,        0\r
+SCOPT, 7726                    / Scope flag in OS/8\r
+K200,  200\r
+MDEL,  -377                    / Delete \r
+MCR,   -215\r
+CR,    215\r
+MSPC,  -240\r
+BEL,   207\r
+LWRA,  -341\r
+LWRZ,  -373\r
+AMINA, -40                     / Add to "a" to make "A"\r
+BPT,\r
+BUFFLD,        ADDR BUFPT+1\r
+SCOPE,\r
+BUFPTR,        ADDR    BUFPT+2\r
+OFFSET,\r
+PTTY,  ADDR    TTY\r
+BS,    10\r
+K334,  334\r
+CDFG,  CDF 0\r
+K27,   27\r
+SIXMSK,        77\r
+FLDMSK,        7\r
+INCH,  0\r
+\r
+/\r
+/ Fortran-callable message printer\r
+/ Put here to avoid wasting the rest of the page.\r
+/ Arguments:\r
+/      BUF             Buffer pointer\r
+/      COUNT           Number of characters to write, zero to look for end\r
+/      CRFLAG          Carriage return flags.\r
+/                      Bit 11 (1) = no lead LF\r
+/                      Bit 10 (2) = no trail CR\r
+/                      Bit 9  (4) = start lowercase\r
+/\r
+       ENTRY   SIXOUT\r
+SIXOUT,        JA      #STRT\r
+#SXR,  ORG     .+10\r
+       TEXT    +SIXOUT+\r
+#SRET, SETX    #SXR\r
+       SETB    #SBASE\r
+       JA      .+3\r
+#SBASE,        ORG     .+6\r
+CNT,   ORG     .+3\r
+SFLAG, ORG     .+3\r
+\r
+       ORG     #SBASE+30\r
+       FNOP\r
+       JA      #SRET\r
+       FNOP\r
+#SGOBK,        0;0\r
+#SRTN, BASE    #SBASE\r
+       JA      #SGOBK\r
+#STRT, STARTD\r
+       0210\r
+       FSTA    #SGOBK,0\r
+       0200\r
+       SETX    #SXR\r
+       SETB    #SBASE\r
+       LDX     0,1\r
+       FSTA    #SBASE\r
+       FLDA%   #SBASE,1+\r
+       FSTA    BUF             / Buffer pointer\r
+       FLDA%   #SBASE,1+       / Count\r
+       FSTA    CNT\r
+       FLDA%   #SBASE,1+       / Carriage control flag\r
+       FSTA    SFLAG\r
+       STARTF\r
+       FLDA%   CNT\r
+       SETX    COUNT\r
+       ATX     0\r
+       FLDA%   SFLAG\r
+       ATX     1\r
+       SETX    #SXR\r
+       TRAP4   SIX8            /Call the 8-mode output routine\r
+       JA      #SRTN\r
+\r
+       FIELD1  SXOUT\r
+       ENTRY   SIX8            / Mixed case output routine\r
+\r
+SIX8,  0\r
+       TAD     CRFLAG          /Suppresss carriage control?\r
+       RAR                     /Low bit suppresses lead LF\r
+       SZL CLA\r
+       JMP     .+4             /No leading LF\r
+       CDF     10              / My field\r
+       TAD     LF              /Linefeed\r
+       JMS%    TTYPTR+1        /Output it\r
+       TAD     CRFLAG\r
+       AND     K4              /Start in lower case?\r
+       SZA CLA\r
+       TAD     K40             /Yes\r
+       TAD     HUN             /Reset conversion factor\r
+       DCA     SHIFT\r
+       TAD     BUF             /Buffer field\r
+       AND     K7              /Just the field bits\r
+       CLL RAL\r
+       RTL                     /Into place\r
+       TAD     CDF0            /Into CDF instruction\r
+       DCA     CDF1\r
+       TAD     CDF1\r
+       DCA     CDF2\r
+       TAD     COUNT           /Get buffer length\r
+       SNA\r
+       JMP     NOTRIM          /Zero means it has a terminating "@"\r
+/\r
+/ Find the end of the string\r
+/\r
+       CLA CMA                 /End is start + len - 1\r
+       TAD     COUNT           /String len in words\r
+       TAD     BUF+1           /End of the string\r
+       DCA     PTR             /Pointer to end\r
+       TAD     COUNT           /Invert count\r
+       CMA IAC\r
+       DCA     COUNT\r
+CDF1,  HLT\r
+FNDEND,        TAD%    PTR\r
+       TAD     K3740           / - '  ' (two spaces)\r
+       SZA CLA                 / Skip if blank\r
+       JMP     NONBLK\r
+       ISZ     COUNT           /Count another\r
+       SKP\r
+       JMP     NONBLK          /If empty, done\r
+       CLA CMA                 / -1\r
+       TAD     PTR\r
+       DCA     PTR             /Back pointer up\r
+       JMP     FNDEND          /Keep looking\r
+\r
+NONBLK,        TAD     COUNT\r
+       SNA CLA                 /Skip if output left\r
+       JMP     DONE            /Nothing if count zero already\r
+NOTRIM,        TAD     BUF+1           /Reset pointer to start\r
+       DCA     PTR\r
+CDF2,  HLT\r
+       TAD%    PTR             /Get word\r
+       DCA     STEMP           /Save\r
+       TAD     STEMP\r
+       RTR\r
+       RTR\r
+       RTR                     /First sixbit\r
+       JMS     OUTONE          /Convert and output it\r
+       TAD     STEMP           /Second sixbit\r
+       JMS     OUTONE\r
+       ISZ     PTR             /Bump pointer\r
+       SKP                     /OK if no skip\r
+       JMP     NEWFLD          /Next field otherwise\r
+INCCNT,        ISZ     COUNT\r
+       JMP     CDF2            /Keep outputting\r
+DONE,  CLA\r
+       TAD     CRFLAG          /Suppress trailing CR?\r
+       RTR                     /2 bit suppresses trailing CR\r
+       SZL CLA                 /If zero, write it.\r
+       JMP     OUT             /Yes, leave now\r
+       CDF     10              /My field\r
+       TAD     CRTN\r
+       JMS%    TTYPTR+1\r
+OUT,   CIF CDF 0\r
+       JMP%    SIX8\r
+\r
+NEWFLD,        TAD     CDF1\r
+       TAD     K10             /Next field\r
+       DCA     CDF1\r
+       TAD     CDF1\r
+       DCA     CDF2\r
+       JMP     INCCNT\r
+\r
+OUTONE,        0\r
+       AND     K77             /Mask\r
+       SNA\r
+       JMP     DONE            / End of string\r
+       TAD     K7743           / minus '['\r
+       SNA\r
+       JMP     SETLWR          /Set to lowercase shift\r
+       TAD     K2              / ok, ']'?\r
+       SNA\r
+       JMP     SETUPR          /Set to uppercase\r
+       TAD     K7773           /Restore\r
+       SPA\r
+       TAD     SHIFT           /For positive, shift it\r
+       TAD     K40             /Else it's not alphabetic\r
+       CDF     10              /My field\r
+       JMS%    TTYPTR+1        /Output it\r
+       JMP%    OUTONE          /Done\r
+\r
+SETLWR,        TAD     K40             /Reset shift\r
+SETUPR,        TAD     HUN             /For upper/lower\r
+       DCA     SHIFT\r
+       JMP%    OUTONE\r
+\r
+TTYPTR,        ADDR TTY\r
+SHIFT, 140             /Shift value\r
+/ COUNT and CRFLAG must stay together\r
+COUNT, 0               /Num words to output. \r
+CRFLAG,        0               /1 - no leading LF, 2 no trailing CR\r
+PTR,   0\r
+CRTN,  15\r
+LF,    12\r
+K3740, 3740                    /minus blank\r
+BUF,   0;0;0                   /Buffer 15-bit address\r
+STEMP, 0\r
+K77,   77                      /sixbit mask\r
+K7,    7\r
+K4,    4\r
+K40,   40\r
+CDF0,  CDF\r
+HUN,   100\r
+K7743, 7743\r
+K7773, 7773\r
+K10,   10                      /Field increment\r
+K2,    2\r
+\r
+       SECT    SPEAK\r
+/C\r
+/      SUBROUTINE SPEAK(N)\r
+/C\r
+/C PRINT THE MESSAGE IN RECORD N OF THE RANDOM ACCESS MESSAGE FILE.\r
+/C\r
+/      IMPLICIT INTEGER (A-Z)\r
+/      COMMON /TXTCOM/ RTEXT,LINES,ASCVAR\r
+/      COMMON /ALPHAS/ BLANK,EOF\r
+/      DIMENSION RTEXT(205),LINES(36)\r
+/C\r
+       EXTERN  IO\r
+       EXTERN  #HANG\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +SPEAK+\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+6\r
+N,     ORG     .+3\r
+#DOTMP,        ORG     .+3\r
+BLANK, TEXT +      +\r
+EOF,   TEXT +>$<   +\r
+ONE,   F 1.0\r
+FOUR,  F 4.0\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+I,     ORG     .+0003\r
+L,     ORG     .+0003\r
+OLDLOC,        ORG     .+0003\r
+       #LBL=.\r
+       COMMON  TXTCOM\r
+RTEXT, ORG     .+1147\r
+LINES, ORG     .+0044\r
+ASCVAR,        ORG     .+0003\r
+TXTLOC,        ORG     .+0003\r
+DATA,  ORG     .+0352\r
+       ORG     #LBL\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    N\r
+       STARTF\r
+/       IF(N.EQ.0)RETURN\r
+       FLDA%   N\r
+       JEQ     #RTN\r
+/       READ(2'N) LOC,LINES\r
+       FLDA    N\r
+       STARTD\r
+       FSTA    #G0002\r
+       STARTF\r
+       JSR     IO\r
+       JA      .+0004\r
+#G0002,        JA      .\r
+/       IF(LINES(1).EQ.EOF)RETURN\r
+       FLDA    ONE\r
+       ATX     7\r
+       FLDA    LINES-0003,7\r
+       FSUB    EOF\r
+       JEQ     #RTN\r
+/1      OLDLOC = LOC\r
+#1,    FLDA    TXTLOC\r
+       FSTA    OLDLOC\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/       DO 3 I=36,1,-1\r
+/      Set COUNT to the number of words (36 or 44 octal)\r
+       SETX    COUNT\r
+       LDX     44,0            /44 words\r
+       LDX     0,1             /With carriage control\r
+       SETX    #XR\r
+/       L=I\r
+/3      CONTINUE\r
+/5      TYPE 2,(LINES(I),I=1,L)\r
+#5,    FLDA    LINEPT\r
+       FSTA    BUF             /Set buffer pointer\r
+       TRAP4   SIX8\r
+\r
+       FLDA%   N\r
+       FADD    ONE\r
+       FSTA%   N\r
+       FLDA    N\r
+/       READ(2'ASCVAR) LOC,LINES\r
+       STARTD\r
+       FSTA    #G0006\r
+       STARTF\r
+       JSR     IO\r
+       JA      .+0004\r
+#G0006,        JA      .\r
+/       IF(LOC .EQ. OLDLOC) GO TO 1\r
+       FLDA    TXTLOC\r
+       FSUB    OLDLOC\r
+       JEQ     #1\r
+       EXTERN  #WRITO\r
+       TRAP3   #WRITO\r
+       JA      FOUR\r
+       JA      #10+2\r
+       EXTERN  #RENDO\r
+       TRAP3   #RENDO\r
+\r
+/10     RETURN\r
+#10,   JA      #RTN\r
+/       (1X)\r
+       5061\r
+       3051\r
+/2      FORMAT(' ',36A2) PDP/8: (' ',12A6)\r
+LINEPT,        ADDR    LINES\r
+       0\r
+       END\r
diff --git a/sw/adventure/USR.RA b/sw/adventure/USR.RA
new file mode 100644 (file)
index 0000000..d31ea66
--- /dev/null
@@ -0,0 +1,717 @@
+/      SUBROUTINE USR (UNIT, NAME, FUNCT, ERROR)\r
+/      VERSION 01.18\r
+\r
+/      WRITTEN BY:\r
+/        ROBERT PHELPS\r
+/        BEHAVIOR LAB\r
+/        DEPT. RAD. BIOL. & BIOPHYSICS\r
+/        UNIVERSITY OF ROCHESTER\r
+/        ROCHESTER, NY  14642\r
+/\r
+/              THIS ROUTINE ALLOWS RUN-TIME DECLARATION OF FILES\r
+/              IN D.E.C. FORTRAN IV FOR THE PDP-8.\r
+/\r
+/      DESCRIPTION OF PARAMETERS:\r
+/\r
+/              UNIT  - LOGICAL UNIT NUMBER\r
+/                      ONLY NUMBERS 5 THRU 9 ARE ALLOWED.\r
+/                      FEWER LOGICAL UNITS MAY BE ALLOWED DEPENDING\r
+/                      ON CORE AVAILABILITY -- SEE PROGRAMMING NOTE\r
+/                      BELOW.\r
+/              NAME  - DEV:FILE.EX\r
+/                      STORED IN FORMAT 3A6 OR EQUIVALENT.\r
+/                      DEVICE ASSUMED TO BE DSK: IF NOT\r
+/                      EXPLICITLY STATED.  THIS PARAMETER MAY\r
+/                      ALSO BE A HOLLERITH LITERAL.\r
+/                      NULL CHARACTERS ('@') AND SPACES\r
+/                      ARE IGNORED IN THIS FIELD.\r
+/              FUNCT - FUNCTION: 2 - OPEN FILE FOR INPUT\r
+/                                3 - OPEN FILE FOR OUTPUT\r
+/                                4 - CLOSE OUTPUT FILE\r
+/                      THE OUTPUT FILE NAME GIVEN FOR A <CLOSE>\r
+/                      MUST AGREE WITH THE CORRESPONDING <OPEN>\r
+/                      FILE NAME FOR THAT UNIT.  CLOSING A FILE\r
+/                      WITH 0 BLOCKS OR AN INPUT (FUNCT=2) FILE WILL\r
+/                      DELETE THAT FILENAME FROM THE DIRECTORY.\r
+/              ERROR - RETURN ERROR CONDITION\r
+/                      0 - NO ERRORS.\r
+/                      1 - ILLEGAL DEVICE\r
+/                      2 - ILLEGAL FILE NAME\r
+/                      3 - ILLEGAL UNIT NUMBER (CORE EXCEEDED!?)\r
+/                      4 - ILLEGAL FUNCTION CODE\r
+/\r
+/      USER ERRORS MAY TERMINATE EXECUTION UNLESS THE /E\r
+/      OPTION WAS SPECIFIED TO FRTS.  THE FOLLOWING USER\r
+/      ERRORS FROM <USR> ARE DEFINED:\r
+/              0002 - THE USER HAS DEFINED A NON-RESIDENT\r
+/                      DEVICE HANDLER EXTERNAL TO <USR>.\r
+/\r
+/      PROGRAMMING NOTE:  EACH UNIT IS ASSIGNED 1000(8) LOCATIONS\r
+/IN THE HIGHEST FIELD FOR BUFFER AND HANDLER (400 FOR ITS BUFFER\r
+/AND 400 FOR ITS HANDLER).  THESE LOCATIONS ARE\r
+/NOT DYNAMICALLY ALLOCATED BUT ARE USED FOR DEVICE BUFFER AND\r
+/HANDLERS ONLY IF THEY ARE NOT USED BY THE\r
+/PROGRAM.  TO USE CORE MOST EFFICIENTLY FOR LARGE\r
+/PROGRAMS, USE THE HIGHEST ORDER UNIT NUMBERS POSSIBLE.  THAT IS,\r
+/USING UNIT 5 ALLOWS 1000(8) FEWER WORDS FOR SOURCE CODE THAN IF\r
+/UNIT 6 WERE THE LOWEST UNIT NUMBER USED.\r
+/\r
+/      RESTRICTIONS:  BECAUSE <FRTS> LOADS NON-RESIDENT HANDLERS FROM\r
+/THE TOP OF CORE DOWN, AND <USR> ALSO USES THAT AREA, THE USER IS NOT\r
+/ALLOWED TO MAKE LOAD TIME\r
+/I/O UNIT DECLARATIONS TO DEVICES WITH NON-RESIDENT\r
+/HANDLERS EXTERNAL TO <USR>.  TO DO SO WLL CAUSE A FATAL\r
+/USER ERROR 2.  IT IS RECOMMENDED, AND GENERALLY\r
+/MORE CONVIENENT TO USE INTERNAL HANDLERS AND\r
+/DECLARE ALL OTHER FILES AT EXECUTION TIME\r
+/WITH CALLS TO THIS SUBROUTINE.\r
+/THE USE OF <FRTS> INTERNAL HANDLERS,\r
+/SYS:, AND DEVICES CO-RESIDENT WITH SYS: ARE LEGAL,\r
+/EVEN IF DEFINED EXTERNAL TO THIS SUBROUTINE.\r
+/\r
+/NOTE: THIS PROGRAM REQUIRES ONE PATCH BE MADE TO\r
+/      <FRTS> BEFORE IT WILL RUN.  IT IS DESCRIBED\r
+/      BELOW:\r
+/\r
+/MAXCOR=121    /THESE ARE LOCATIONS IN THE RESIDENT PART OF\r
+/HGHLOC=123    /<FRTS> AND REQUIRE THE FOLLOWING PATCH BE PLACED\r
+               /IN FRTS SO THEY WILL BE SET PROPERLY.  THE PATCH\r
+               /DELETES CODE WHICH INITIALIZES SYSTEMS WITH AN\r
+               /ANALEX PRINTER, SO IF YOU HAVE AN ANALEX ... WATCH OUT.\r
+\r
+/Note that MAXCOR and HGHLOC are 2 word variables which have been\r
+/created for this routine on page 0 of FRTS. If FRTS\r
+/is changed to use more page 0 locations, the patch\r
+/will have to be changed as well. \r
+\r
+/      FIELD 1; *2475\r
+/12475 7300    CLA CLL                 /Note, CDF CIF 0 is pending\r
+/12476 1311    TAD     12511           /Load address of VAR\r
+/12477 3010    DCA     10010           /Store in auto index\r
+/      1023    TAD     10023           /Load value of MAX field\r
+/      3410    DCA I   10010           /As high order part of MAXCOR\r
+/      3410    DCA I   10010           /Zero low order part\r
+/      1025    TAD     10025           /Load highest avail. field\r
+/      3410    DCA I   10010           /Store high order word\r
+/      1026    TAD     10026           /load high address\r
+/      3410    DCA I   10010           /Store low order word of HGHLOC\r
+/      7000    NOP                     /?\r
+/      5766    JMP I   12566           /Start up FPP\r
+\r
+/12511  120                    /ADDRESS-1 of MAXCOR\r
+\r
+       EXTERN  CGET\r
+       EXTERN  CPUT\r
+       DSRN=4244               /Address of DSRN table in FRTS\r
+\r
+       SECT    USR\r
+       JA      #ST\r
+\r
+/NOTE:  MUCH OF THIS CODE WAS LIFTED FROM A FORTRAN\r
+/      GENERATED ASSEMBLY LISTING.  ACCEPT THIS AS\r
+/      AN APOLOGY FOR THE LACK OF COMMENTS IN SOME SECTIONS.\r
+/\r
+#XR,   ORG     .+10\r
+       TEXT    +USR  +\r
+\r
+#RET,  SETX #XR\r
+       SETB #BASE\r
+       JA .+3\r
+#BASE, ORG     .+6     /BASE 0 AND 1\r
+UNIT,  ORG     .+3     /BASE 2\r
+FUNCT, ORG     .+3     /BASE 3\r
+ERROR, ORG     .+3     /BASE 4\r
+#DSK,  TEXT +DSK@@@+   /DEFAULT DEVICE NAME\r
+I,     F 0.0           /BASE 6\r
+N,     F 0.0           /BASE 7\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+\r
+PERFLG,        F 0.0           /PERIOD FLAG\r
+X,\r
+#TMP,  ORG     .+3\r
+ONE,   F 1.0\r
+TWO,   F 2.0\r
+THREE, F 3.0\r
+FOUR,  F 4.0\r
+SEVEN, F 7.0\r
+MUNIT, 0027;0;0        /Low unit: Set according to CORE avail.\r
+NINE,  F 9.0\r
+TEN,   F 10.0\r
+ATEEN, F 18.0\r
+COLON, F 58.0\r
+PERIOD,        F 46.0\r
+SPACE, F 32.0\r
+MAXCOR,        0; 7; 0         /RHM: Don't require the FRTS patch.\r
+HGHLOC,        0; 7; 2000      /RHM: Hope memory used doesn't get larger.\r
+/ ADVENT in the current implementation uses up thru 71000 at worst.\r
+/ This hopefully allows room for extra 2-page handlers and the TD8E ROM.\r
+#RTN,  BASE    #BASE\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    UNIT\r
+       FLDA%   #BASE,1+\r
+       FSTA    NAME\r
+       FLDA%   #BASE,1+\r
+       FSTA    FUNCT\r
+       FLDA%   #BASE,1+\r
+       FSTA    ERROR\r
+\r
+/      INITIALIZE PROGRAM\r
+\r
+SKIP,                  /JA SKIP2 AFTER FIRST ENTRY\r
+\r
+/              FIND OUT HOW MANY UNITS TO ALLOW\r
+\r
+/Note that the original scheme was rather bizzare, and for\r
+/humerous purposes, I have left it here, commented out.\r
+/This worked OK with the old FPP interpreter, since it zeroed\r
+/the exponent with a STARTF. The FPP does not, and the\r
+/EXPONENT is left indeterminate. This meant that sometimes\r
+/you could use past 72400, and sometimes you couldn't.\r
+/(Note, that S.B.'s version of FRTS has been changed\r
+/so that the FPP interpreter works the same as the FPP.)\r
+\r
+/      FLDA MAXCOR     /Load highest field number\r
+/      FSUB HGHLOC     /Subtract high location\r
+/      FADD D2400      /1 FIELD LESS 5400 LOCS FOR 5 DEVICES\r
+                       /  NOTE:  PG. 7600 RESERVED FOR OS/8\r
+                       /         PG. 7400 USED FOR OS/8 USR CALL\r
+/      JGE SKCONT      /ROOM FOR 5 DEVICES?\r
+/      FADD D15000     /Note, FAC= how many locations short\r
+/      FMUL D1000      /HOW MANY 1000 WORD BLOCKS ARE THERE?\r
+/      STARTF\r
+/      FNORM\r
+/      FMUL E30        /ALTHOUGH WE WERE WORKING WITH AN\r
+/                      /INTEGER ABOVE, THE FPP THOUGHT IT\r
+/                      /HAD A BINARY POINT TO THE RT. OF THE\r
+/                      /SIGN BIT.  THIS INSTRUCTION EFFECTIVELY\r
+/                      /CHANGES THE NUMBER TO A REAL FPP INTEGER.\r
+/      FSTA MUNIT      /MINIMUM UNIT # ALLOWED\r
+/D15000,       1;5000\r
+/D1000,        4;0     /0.001\r
+/E30,  30;2000;0       /1.E30(2)\r
+\r
+/The routine should really be modified to check which handlers\r
+/are already loaded. This wouldn't be all that difficult,\r
+/since the field 1 tables of handler residency are saved on\r
+/SYS block 37, and restored each time USR is called. As long\r
+/as a reset isn't performed, it should be easy to determine\r
+/if a handler is already loaded. Then HGHLOC could be changed\r
+/dynamically, as handlers were loaded. The core usage would then\r
+/also be independent of the unit number used.\r
+\r
+       FLDA    MAXCOR  /Load Max field #\r
+       FADD    D7400   /Offset to highest useable address\r
+       FSUB    HGHLOC  /Compute locations available\r
+       LDX     11,1    /Load shift argument\r
+       ALN     1       /Divide by 1000\r
+       FSTA    MUNIT+1,0 /Store number of units\r
+       STARTF\r
+       FLDA    TEN     /Load MAX units+1\r
+       FSUB    MUNIT   /Subtract number of units\r
+       FSTA    MUNIT   /Store new minimum unit\r
+       FSUB    THREE   /Limit min. to three\r
+       JGE     SKCONT  /Ok if greater than 2\r
+       FLDA    THREE   /Just in case we need to avoid\r
+       FSTA    MUNIT   /field boundary problems\r
+\r
+SKCONT,        STARTD\r
+       SETX MAXCOR+1\r
+       XTA 0           /GET HIGHEST FIELD\r
+       FDIV D10X       /PUT IT INTO BITS 6-8 OF LO ORDER WORD\r
+       SETX LHIFLD\r
+       ATX 0           /LOAD HIGHEST FIELD INTO LHIFLD\r
+       FADD DCDF       /MAKE IT CDF HIFLD\r
+       SETX FD1\r
+       ATX 0           /SET LOCATIONS USING IT\r
+       SETX FD2\r
+       ATX 0\r
+       FADD ONED       /MAKE IT CIF HIFLD\r
+       SETX FI1\r
+       ATX 0\r
+       SETX #XR\r
+\r
+/      CHECK TO MAKE SURE USER DID NOT DECLARE\r
+/      DEVICE WITH HANDLER EXTERNAL TO THESE ROUTINES.\r
+\r
+       FLDA SKIPJA     /SET INSTRUCTION SO THIS CODE\r
+       FSTA SKIP,0     /  EXECUTES ONLY ONCE.\r
+/\r
+       FLDA SXDSRN     /INITIALIZE SETX INSTRUCTION\r
+       FSTA SKCON2\r
+       LDX -11,6       /SET COUNTER (MAX # DSRN ENTRIES)\r
+SKCON2,        SETX DSRN       /STUFFED AND MODIFIED\r
+       XTA 0           /GET NEXT HANDLER ENTRY POINT\r
+       SETX #XR\r
+       FSUB D5200\r
+       JLT SKCON3      /INTERNAL HANDLER, IT'S OK\r
+       FSUB D2400\r
+       JGT SKCON3      /RESIDENT HANDLER (E.G. SYS:), IT'S OK TOO\r
+       LDX 2,0         /***SOME OTHER HANDLER***USER ERROR 2\r
+EXTERN #UE\r
+       TRAP3 #UE       /USER ILLEGALLY DECLARED A FILE!\r
+/\r
+SKCON3,        FLDA  NINED     /INCREMENT TO NEXT DSRN ENTRY\r
+       FADDM SKCON2\r
+       JXN SKCON2,6+\r
+/\r
+SKIP2, STARTF          /***END OF INITILIZATIN CODE***\r
+       LDX 1,7\r
+       FCLA            /INITIALIZE SOME VARIABLES...\r
+       FSTA PERFLG     /NO PERIODS YET\r
+       FSTA    FILE-0003,7\r
+       FSTA    FILE-0003,7+\r
+       FLDA #DSK       /SETUP DEFAULT DEVICE\r
+       FSTA DEV\r
+       FLDA    ONE     /FIRST CHARACTER IS # 1\r
+       FSTA    N\r
+       FLDA%   UNIT    /CHECK FOR LEGAL UNIT #\r
+       FSUB    MUNIT\r
+       JSA     #LT     /  IF (UNIT.LT.MUNIT.OR.UNIT.GT.9) GO TO 900\r
+       FSTA    #TMP+00\r
+       FLDA%   UNIT\r
+       FSUB    NINE\r
+       JSA     #GT\r
+       FADD    #TMP+00\r
+       JNE     #900\r
+       FLDA%   FUNCT   /CHECK FOR LEGAL FUNCTION CODE\r
+       FSUB    TWO\r
+       EXTERN  #LT\r
+       JSA     #LT     /  IF (FUNCT.LT.2.OR.FUNCT.GT.4) GO TO 901\r
+       FSTA    #TMP+00\r
+       FLDA%   FUNCT\r
+       FSUB    FOUR\r
+       EXTERN  #GT\r
+       JSA     #GT\r
+       FADD    #TMP+00\r
+       JNE     #901\r
+/\r
+/      PUT DEV:FILE.EXT INTO CORRECT FORMAT FOR USR CALL\r
+/\r
+       FLDA    ONE     \r
+       FSTA    I       /  DO 100 I=1,18\r
+\r
+#G0002,        JSR     CGET    /  CALL CGET (NAME, I, X)\r
+       JA      .+10\r
+NAME,  JA      .\r
+       JA      I\r
+       JA      X\r
+       FLDA    X       /  IF (X.NE.COLON) GO TO 40\r
+       FSUB    COLON\r
+       JNE     #40\r
+       FLDA I          /COLON MUST BE COLUMN 6 OR BEFORE\r
+       FSUB SEVEN      /7\r
+       JGE #DONE\r
+       FLDA FILE       /COLON DEFINES DEVICE NAME\r
+       FSTA    DEV\r
+       FCLA\r
+       FSTA    FILE\r
+       FLDA    ONE\r
+       FSTA    N\r
+       JA      #100\r
+\r
+#40,   FLDA    X       /  IF (X.NE.PERIOD) GO TO 60\r
+       FSUB    PERIOD\r
+       JNE     #60\r
+       FLDA PERFLG     /ONLY ONE PERIOD ALLOWED\r
+       JNE #DONE\r
+       FLDA    SEVEN   /SET TO DECODE EXTENSION\r
+       FSTA PERFLG\r
+       FSTA    N\r
+       JA      #100\r
+\r
+#60,   FLDA X\r
+       JEQ #100        /SKIP OVER NULL'S\r
+       FSUB SPACE\r
+       JEQ #100        /SKIP OVER SPACES\r
+       JSR     CPUT    /  CALL CPUT (FILE, N, X)\r
+       JA      .+10\r
+       JA      FILE\r
+       JA      N\r
+       JA      X\r
+       FLDA    N       /  N=N+1\r
+       FADD    ONE\r
+       FSTA    N\r
+\r
+#100,  FLDA    I       /  100 CONTINUE\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    ATEEN\r
+       JLE     #G0002\r
+\r
+#DONE, FLDA% FUNCT\r
+       FSUB FOUR\r
+       JNE #101        /FUNCTION = CLOSE ?\r
+       EXTERN #ENDF\r
+       FLDA% UNIT      /YES - END FILE\r
+       TRAP3 #ENDF\r
+\r
+#101,  SETX FUNCTX     /USR XR TO PASS PARAMETERS\r
+       FLDA% FUNCT\r
+       ATX 0\r
+       FLDA% UNIT\r
+       ATX 1\r
+\r
+       TRAP4   #USRSE  /TRAP TO THE USR CALLING ROUTINE\r
+\r
+       XTA 2           /GET ERRNO AND RETURN IT\r
+       FSTA% ERROR\r
+       JA      #RTN\r
+#900,  FLDA    THREE   /ILLEGAL UNIT NUMBER!!!\r
+       FSTA%   ERROR\r
+       JA #RTN\r
+\r
+#901,  FLDA FOUR       /ILLEGAL FUNCTION CODE!!!\r
+       FSTA%   ERROR\r
+       JA      #RTN\r
+/\r
+SKIPJA,        JA SKIP2\r
+DCDF,  0;CDF\r
+ONED,  0;1\r
+D10X,  400;0   /0.1\r
+D10,   0;10\r
+SXDSRN,        SETX DSRN\r
+NINED, 0;11\r
+D5200, 0;5200\r
+D2400, 0;2400\r
+D7400, 0;7400\r
+\r
+SECT8 #USRSE; 0\r
+/\r
+/THIS ROUTINE SETS UP, ON PAGE 7400 OF THE HIGHEST FIELD, A\r
+/ROUTINE WHICH CALLS THE OS/8 USR (USER SERVICE ROUTINE).\r
+/IT IS NECESSARY TO DO THIS BECAUSE THE FORTRAN IV LOADER\r
+/MAY LOAD ANY ROUTINE IN THE RESERVED AREA FOR\r
+/THE OS/8 USR (10000 - 11777).  \r
+/\r
+/      THIS PROGRAM ALSO REQUIRES\r
+/      THAT 'HKEY' BE THE LOCATION IN <FRTS> AS DEFINED\r
+/      BELOW:\r
+\r
+HKEY=2761\r
+DSRN=4244              /Address of DSRN table in FRTS\r
+\r
+/\r
+/IN CASE CLOSE FUNCTION, GET # BLOCKS WRITTEN\r
+/\r
+       TAD UNITX\r
+       CLL RTL         /MULTIPLY BY 9\r
+       RAL\r
+       TAD UNITX\r
+       TAD K6          /OFFSET TO CURRENT BLOCK\r
+       TAD LDSRN       /START OF DSRN TABLE - 11\r
+       DCA TEMQ\r
+       CDF 0\r
+       TAD% TEMQ\r
+       DCA SB\r
+/\r
+/MOVE USR CALLING ROUTINE TO DEFINED LOCATION\r
+/      I.E. PROTECT LOCS 10000-11777\r
+/\r
+       TAD K7400       /Target address\r
+       DCA TEMQ        /Store for indirect reference\r
+       TAD #LUSR+1     /Origin address\r
+       DCA TEMQ2       /Store for indirect reference\r
+       TAD M200        /Number of words to move\r
+       DCA TEMQ3       /Store in a counter\r
+       TAD #LUSR       /Load field word\r
+       AND K7          /Strip it\r
+       CLL RTL         /Into right bits\r
+       RAL\r
+       TAD #CDF\r
+       DCA .+1         /Store the CDF\r
+FUSR,  HLT             /Set field where USR loads\r
+       TAD% TEMQ2      /Load routine location\r
+FD1,   CDF 00          /Set HIGH field\r
+       DCA% TEMQ       /Store location in high field\r
+       ISZ TEMQ        /Bump the pointers\r
+       ISZ TEMQ2\r
+       ISZ TEMQ3       /And the counters\r
+       JMP FUSR        /Loop on it\r
+\r
+/SET FIELDS AND CALL IT\r
+\r
+       RIF             /GET CURRENT FIELD\r
+       TAD #CDF\r
+       DCA .+1\r
+       HLT             /Set this field\r
+FI1,   CIF 00          /Set high field\r
+       TAD FUNCTX      /Load function number\r
+       JMS% K7400      /Call routine\r
+SB,      0             /START BLOCK OF FILE OR LENGTH IF CLOSE\r
+NOBLKS,          0             /LENGTH OF FILE\r
+ENTPT,   0             /HANDLER ENTRY POINT\r
+       DCA ERRUSR      /SAVE ERROR RETURN VALUE\r
+\r
+/SETUP TO MOVE DSRN TABLE APPROPRIATELY\r
+\r
+       TAD UNITX\r
+       CLL RTL         /MULTIPLY BY 9\r
+       RAL\r
+       TAD UNITX\r
+       TAD LDSRN\r
+       DCA TEMQ\r
+#CDF,  CDF 0\r
+       DCA% TEMQ       /DISABLE FILE IN CASE CLOSE FUNCTION\r
+       CLA CLL CMA RTL /-3 => AC\r
+       TAD FUNCTX\r
+       SMA SZA CLA     /CLOSE?\r
+       JMP USRSL5      /YES\r
+\r
+/MOVE HANDLER TO APROPRIATE BUFFER\r
+\r
+       CLA CMA CLL RAL /-2 => AC\r
+       TAD UNITX\r
+       CLL RTR\r
+       RTR             /UNIT 9 => AC=7000; UNIT 8 => AC=6000\r
+       TAD M400\r
+       DCA LHNDR       /LOCATION FOR THIS UNIT'S HANDLER\r
+       TAD K5200\r
+       DCA TEMQ2\r
+       TAD M400\r
+       DCA TEMQ3\r
+USRL4, CDF 0\r
+       TAD% TEMQ2\r
+FD2,   CDF 00\r
+       DCA% LHNDR\r
+       ISZ TEMQ2\r
+       ISZ LHNDR\r
+       ISZ TEMQ3\r
+       JMP USRL4\r
+\r
+/BUILD UP NEW DSRN TABLE FOR THIS UNIT\r
+\r
+       CDF 0\r
+       TAD ENTPT\r
+       DCA% TEMQ       /ENTRY POINT\r
+       ISZ TEMQ\r
+       CLL CML RTL     /2 => AC (FORMS CONTROL BIT)\r
+       TAD LHNDR\r
+       TAD M400\r
+       TAD LHIFLD\r
+       DCA% TEMQ       /HANDLER CODE WORD\r
+       TAD K7774       /*K* KLUDGE TO LET FRTS KNOW WHICH\r
+       AND% TEMQ       /    HANDLER IS IN CORE\r
+       DCA% #HKEY\r
+       ISZ TEMQ\r
+       TAD LHNDR\r
+       TAD LHIFLD\r
+       DCA% TEMQ       /BUFFER ADDRESS & FIELD\r
+       ISZ TEMQ\r
+       TAD LHNDR\r
+       DCA% TEMQ       /CHARACTER POINTER\r
+       ISZ TEMQ\r
+       CMA CLL RTL     /-3 => AC\r
+       DCA% TEMQ       /CHARACTER COUNTER\r
+       ISZ TEMQ\r
+       TAD SB\r
+       DCA% TEMQ       /START BLOCK\r
+       ISZ TEMQ\r
+       DCA% TEMQ       /RELATIVE BLOCK\r
+       ISZ TEMQ\r
+       TAD NOBLKS\r
+       DCA% TEMQ       /LENGTH OF FILE\r
+       ISZ TEMQ\r
+       DCA% TEMQ       /STATUS WORD\r
+\r
+USRSL5,        CDF CIF 0\r
+       JMP% #USRSE\r
+\r
+\r
+K6,    6\r
+K7400, 7400\r
+M200,  -200\r
+M400,  -400\r
+K7,    7\r
+K5200, 5200\r
+\r
+LDSRN, DSRN-11         /START LOCATION OF DSRN TABLE\r
+\r
+LHIFLD,        0\r
+TEMQ,  0\r
+TEMQ2, 0\r
+TEMQ3, 0\r
+LHNDR, 0\r
+FUNCTX,        0               /STUFFED BY RALF CODE\r
+UNITX, 0               /STUFFED BY RALF CODE\r
+ERRUSR,        0               /READ BY RALF CODE\r
+\r
+#LUSR, ADDR #USR\r
+#HKEY, HKEY            /LOCATION OF HKEY IN FRTS\r
+                       /  MUST AGREE WITH VERSION!!\r
+K7774, 7774\r
+/\r
+       ORG .+177&7600\r
+/USR CALLING SUBROUTINE FOR FORTRAN \r
+/\r
+/      THIS ROUTINE IS MOVED TO PAGE 7400 OF THE HIGHEST\r
+/      FIELD BEFORE EXECUTING TO AVOID BEING OVERWRITTEN BY THE USR\r
+/      ROUTINE.  NO FILE SPECIFICATIONS OTHER THAN INTERNAL\r
+/      HANDLERS AND SYSTEM DEVICES MAY BE MADE EXTERNAL TO THESE\r
+/      ROUTINES BECAUSE THE USE OF THIS ROUTINE WILL OVERWRITE\r
+/      THE HANDLERS WHICH ARE STORED IN HIGH CORE.\r
+/\r
+/\r
+#USR, 0\r
+/\r
+/      ENTER WITH FUNCTION CODE IN THE AC\r
+/              2 - LOOKUP (OPEN FOR INPUT)\r
+/              3 - ENTER  (OPEN FOR OUTPUT)\r
+/              4 - CLOSE  (CLOSE OUTPUT FILE)\r
+/\r
+/      DEVICE AND FILE NAMES ARE STUFFED BY THE CALLING\r
+/      PROGRAM BEFORE THIS SUBROUTINE IS CALLED.\r
+/\r
+/      CALLING SEQUENCE:\r
+/              JMS #USR\r
+/                START BLOCK OF FILE (RETURNED FOR CODE 2 & 3)\r
+/                      # BLOCKS SUPPLIED IF CODE 4\r
+/                NUMBER OF BLOCKS IN FILE (RETURNED FOR CODE 2 & 3)\r
+/                ENTRY POINT OF HANDLER AS READ INTO PAGE 5200\r
+/              <RETURN>\r
+/\r
+/      AC ON EXIT CONTAINS ERROR CONDITION:\r
+/              0 - NO ERROR\r
+/              1 - ILLEGAL DEVICE\r
+/              2 - ILLEGAL FILE NAME\r
+/\r
+       DCA FUNCTY      /SAVE FUNCTION CODE\r
+       TAD% #USR       /GET # BLOCKS IN CASE CLOSE FUNCTION\r
+       DCA #BLKS\r
+\r
+       RDF             /SET INSTRUCTION FIELD FOR RETURN\r
+       TAD #CIF\r
+       DCA EXIT4\r
+       CMA             /MAKE IT CDF\r
+       TAD EXIT4\r
+       DCA EXIT\r
+       DCA ERRNO       /INITIALIZE ERROR RETURN VARIABLE\r
+       CMA\r
+       TAD #CIF        /-1 IN AC MAKES IT CDF\r
+       RIF\r
+       DCA .+1\r
+       HLT             /SET DATA FIELD TO CURRENT FIELD\r
+\r
+/      ********SWAP CORE FOR USR CALL\r
+\r
+/Note, that it would be much simpler to read in the field\r
+/one tables, and call USR at 17700. Let USR do the swapping.\r
+/We must only set the correct bits in the JSW.\r
+\r
+       IOF\r
+#CIF,  CIF 0\r
+       JMS% K7607      /CALL SYSTEM HANDLER\r
+         5210          /  WRITE 17400-17777,10000-11777\r
+         7400\r
+           27\r
+       HLT             /DEVICE ERROR\r
+\r
+       CIF 0\r
+       JMS% K7607      /READ IN USR\r
+          610\r
+            0\r
+           13          /From block 13\r
+       HLT\r
+\r
+       CIF 0\r
+       JMS% K7607      /READ IN FIELD ONE TABLES\r
+          210\r
+         7400\r
+           37          /From block 37 (where FRTS put it)\r
+       HLT\r
+\r
+/      ********PERFORM USR FUNCTIONS\r
+\r
+       CIF 10\r
+       JMS% K200       /RESET tables, so it looks like no handlers\r
+           13\r
+            0\r
+\r
+       TAD K5201       /SET PAGE FOR HANDLER (allow 2 page handler)\r
+       DCA ENTRY\r
+       CIF 10\r
+       JMS% K200       /FETCH\r
+            1\r
+DEV,        0          /(STUFFED BY RALF ROUTINE)\r
+DEVNO,      0\r
+ENTRY,   5201\r
+       JMP ERR         /ILLEGAL DEVICE\r
+\r
+       TAD #LFILE      /SET POINTER TO FILE\r
+       TAD KOFSET\r
+       DCA LFILE\r
+       TAD DEVNO       /GET DEVICE NUMBER\r
+       CIF 10\r
+       JMS% K200       /PERFORM FUNCTION\r
+FUNCTY,             0\r
+SB2,\r
+LFILE,      0\r
+#BLKS,      0\r
+       JMP ERR2        /FILE ERROR\r
+\r
+/      ********RESTORE CORE\r
+\r
+EXIT2, CIF 0\r
+       JMS% K7607      /SAVE FIELD ONE TABLES\r
+         4210          /? Is this really necessary?\r
+         7400          /Since they've already been saved?\r
+           37          /by FRTS\r
+       HLT\r
+\r
+       CIF 0           /USROUT function would do this\r
+       JMS% K7607      /Read in the Stuff we saved\r
+         1210\r
+         7400\r
+           27\r
+       HLT\r
+\r
+       ION             /Is this necessary?\r
+EXIT,  HLT\r
+       TAD SB2         /RETURN SB & #BLKS\r
+       DCA% #USR\r
+       ISZ #USR\r
+       TAD SB2\r
+       SZA CLA         /NON-FILE STRUCTURED DEVICE?\r
+       JMP .+3\r
+       CMA             /YES - SET MAX NUMBER OF BLOCKS\r
+       JMP .+3\r
+       TAD #BLKS\r
+       CIA\r
+       DCA% #USR\r
+       ISZ #USR\r
+       TAD ENTRY\r
+       DCA% #USR\r
+       ISZ #USR\r
+       TAD ERRNO\r
+EXIT4, HLT\r
+       JMP% #USR\r
+\r
+\r
+K7607, 7607            /SYSTEM HANDLER ENTRY POINT\r
+K200,  200             /USR ENTRY POINT\r
+K5201, 5201            /PAGE FOR HANDLER (& TWO PAGES AVAILABLE)\r
+\r
+ERR2,  CLA IAC         /ILLEGAL FILE NAME\r
+ERR,   IAC             /ILLEGAL DEVICE NAME\r
+       DCA ERRNO\r
+       JMP EXIT2\r
+ERRNO, 0\r
+\r
+#LFILE,        AND FILE        /LOCATION OF FILE ON PAGE 7400\r
+                       /'AND' NEEDED TO TRICK ABSOLUTE REFERENCE\r
+                       /CHECK IN RALF.\r
+KOFSET,        7200            /OFFSET TO REAL EXECUTION ADDRESS\r
+FILE,  0;0;0;0;0;0;0;0;0\r
+\r
diff --git a/sw/adventure/VOCAB.RA b/sw/adventure/VOCAB.RA
new file mode 100644 (file)
index 0000000..555a462
--- /dev/null
@@ -0,0 +1,152 @@
+       SECT    VOCAB\r
+       EXTERN  SIXOUT\r
+/      SUBROUTINE VOCAB(ID1,ID2,INIT,V)\r
+/      OS/8: SUBROUTINE VOCAB(ID, INIT, V)\r
+/C\r
+/C LOOK UP ID1:ID2 IN THE VOCABULARY (ATAB AND A2TAB)\r
+/C Note: A2TAB not used on the '8\r
+/C AND RETURN ITS "DEFINITION" (KTAB), OR\r
+/C -1 IF NOT FOUND. IF INIT IS POSITIVE, THIS IS AN INIT CALL SETTING\r
+/C UP A KEYWORD VARIABLE, AND NOT FINDING IT CONSTITUTES A BUG. IT ALSO MEANS\r
+/C THAT ONLY KTAB VALUES WHICH TAKEN OVER 1000 EQUAL INIT MAY BE CONSIDERED.\r
+/C (THUS "STEPS", WHICH IS A MOTION VERB AS WELL AS AN OBJECT, MAY BE LOCATED\r
+/C AS AN OBJECT.) AND IT ALSO MEANS THE KTAB VALUE IS TAKEN MOD 1000.\r
+/C\r
+/      IMPLICIT INTEGER (A-Z)\r
+/      COMMON /VOCCOM/ KTAB,ATAB,A2TAB,TABSIZ\r
+/      DIMENSION KTAB(300),ATAB(300),A2TAB(300)\r
+\r
+       EXTERN  BUG\r
+       EXTERN  MOD\r
+       JA      #ST\r
+#XR,   ORG     .+10\r
+       TEXT    +VOCAB+\r
+#RET,  SETX    #XR\r
+       SETB    #BASE\r
+       JA      .+3\r
+#BASE, ORG     .+3\r
+ID,    ORG     .+3\r
+INIT,  ORG     .+3\r
+ONE,   F 1.0\r
+FOUR,  F 4.0\r
+THOUS, F 1000.0\r
+TWO,   F 2.0\r
+SIX,   F 6.0\r
+       ORG     #BASE+30\r
+       FNOP\r
+       JA      #RET\r
+       FNOP\r
+#GOBAK,        0;0\r
+#VAL,  ORG     .+6\r
+ZERO,  F 0.0\r
+I,     ORG     .+3\r
+KTABI, ORG     .+3\r
+K21,   F 21.0\r
+K5,    F 5.0\r
+       #LBL=.\r
+       COMMON  VOCCOM\r
+KTAB,  ORG     .+1604\r
+ATAB,  ORG     .+1604\r
+TABSIZ,        ORG     .+3\r
+       ORG     #LBL\r
+#RTN,  BASE    #BASE\r
+       FLDA    #VAL\r
+       JA      #GOBAK\r
+#ST,   STARTD\r
+       0210\r
+       FSTA    #GOBAK,0\r
+       0200\r
+       SETX    #XR\r
+       SETB    #BASE\r
+       LDX     0,1\r
+       FSTA    #BASE\r
+       FLDA%   #BASE,1+\r
+       FSTA    ID\r
+       FLDA%   #BASE,1+\r
+       FSTA    INIT\r
+       STARTF\r
+       FLDA%   INIT\r
+       FSTA    INIT\r
+       FLDA%   ID\r
+       FSTA    ID\r
+/       DO 1 I=1,TABSIZ\r
+       FLDA    ONE\r
+       FSTA    I\r
+\r
+/       IF(KTAB(I).EQ.-1)GOTO 2\r
+#G0001,        FLDA    I\r
+       ATX     7\r
+       FLDA    KTAB-3,7\r
+       FSTA    KTABI\r
+       FADD    ONE\r
+       JEQ     #2\r
+/       IF(INIT.GE.0.AND.KTAB(I)/1000.NE.INIT)GOTO 1\r
+       FLDA    INIT\r
+       JLT     #M1\r
+       FLDA    KTABI\r
+       FDIV    THOUS\r
+       EXTERN  #FIX\r
+       JSA     #FIX\r
+       FSUB    INIT\r
+       JNE     #1\r
+/       IF(ATAB(I).EQ.ID1 .AND. A2TAB(I).EQ.ID2)GOTO 3\r
+/       OS/8: IF(ATAB(I).EQ.ID)GOTO 3\r
+#M1,   FLDA    ATAB-0003,7\r
+       FSUB    ID\r
+       JEQ     #3\r
+/1      CONTINUE\r
+/ do loop end\r
+#1,    FLDA    I\r
+       FADD    ONE\r
+       FSTA    I\r
+       FSUB    TABSIZ\r
+       JLE     #G0001\r
+/       CALL BUG(21)\r
+       JSR     BUG\r
+       JA      .+0004\r
+       JA      K21\r
+\r
+/2      V=-1\r
+#2,    FLDA    ONE\r
+       FNEG\r
+       FSTA    #VAL\r
+/       IF(INIT.LT.0)RETURN\r
+       FLDA    INIT\r
+       JLT     #RTN\r
+\r
+/       TYPE 100,ID\r
+#G0002,        JSR     SIXOUT\r
+       JA      .+10\r
+       JA      #100\r
+       JA      ZERO\r
+       JA      TWO\r
+\r
+       JSR     SIXOUT\r
+       JA      .+10\r
+       JA      ID\r
+       JA      TWO\r
+       JA      ONE\r
+\r
+/       CALL BUG(5)\r
+       JSR     BUG\r
+       JA      .+0004\r
+       JA      K5\r
+\r
+/3      V=KTAB(I)\r
+#3,    FLDA    KTABI\r
+       FSTA    #VAL\r
+/       IF(INIT.GE.0)V=MOD(V,1000)\r
+       FLDA    INIT\r
+       JLT     #RTN\r
+       JSR     MOD\r
+       JA      .+0006\r
+       JA      #VAL\r
+       JA      THOUS\r
+       FSTA    #VAL\r
+/       RETURN\r
+/       END\r
+       JA      #RTN\r
+/100    FORMAT(' KEYWORD = ',2A2)\r
+/ OS/8: ,A4\r
+#100,   TEXT   'K]EYWORD = @'\r
+       END\r
diff --git a/sw/adventure/YES.FT b/sw/adventure/YES.FT
new file mode 100644 (file)
index 0000000..c53606d
--- /dev/null
@@ -0,0 +1,22 @@
+       LOGICAL FUNCTION YES(X,Y,Z)\r
+C\r
+C  PRINT MESSAGE X, WAIT FOR YES/NO ANSWER.  IF YES, PRINT Y AND LEAVE YEA\r
+C  TRUE; IF NO, PRINT Z AND LEAVE YEA FALSE.  SPK IS EITHER RSPEAK OR MSPEAK.\r
+C\r
+       INTEGER REPLY,X,Y,Z\r
+C\r
+1      IF(X.NE.0)CALL RSPEAK(X)\r
+       CALL GETIN(REPLY,JUNK1,JUNK2,JUNK3)\r
+       IF(REPLY.EQ.'YES'.OR.REPLY.EQ.'YE'.OR.REPLY.EQ.'Y')GOTO 10\r
+       IF(REPLY.EQ.'NO' .OR. REPLY.EQ.'N')GOTO 20\r
+C      WRITE(4,9)\r
+C9     FORMAT(/' PLEASE ANSWER THE QUESTION.')\r
+       CALL SIXOUT('P]LEASE ANSWER THE QUESTION.',15,0)\r
+       GOTO 1\r
+10     YES=. TRUE.\r
+       IF(Y.NE.0)CALL RSPEAK(Y)\r
+       RETURN\r
+20     YES=.FALSE.\r
+       IF(Z.NE.0)CALL RSPEAK(Z)\r
+       RETURN\r
+       END\r