I believe I printed these files way back in 1986. I did nothing with them until transcribing them in March 2015. Hopefully I didn't make too many errors.
Printouts 1 and 2 are an incomplete set of data files for a version of Adventure. But does it use the F language or is this something else? Printouts 3 thru 6 are the C code for a program, copyright 1985 by Ken Wellsch, that seems to use the data files to run the adventure. It seems clear that the program, using a different set of data files, could run a competely different adventure game.
Besides Ken Wellsch (K.C.W), the only other name mentioned is a "Jim" who added a bug fix in action.d.
This printout claims to be from January 4, 1980 — but since there's several comments from 1984 within it, the printout date must be treated with contempt. Perhaps the computer I was printing from had an incorrect system date when I printed this?
# This ordering is very important, don't change it!
NOLIST
INCLUDE adv_db/nulls.d
INCLUDE adv_db/bits.d
INCLUDE adv_db/place.d
INCLUDE adv_db/objects.d
INCLUDE adv_db/objsyn.d
INCLUDE adv_db/verbs.d
INCLUDE adv_db/text.d
INCLUDE adv_db/vars.d
INCLUDE adv_db/labels.d
INCLUDE adv_db/moves.d
INCLUDE adv_db/action.d
INCLUDE adv_db/define.d
INCLUDE adv_db/init.d
INCLUDE adv_db/repeat.d
SYNON KEYS,KEY,SET
SYNON LAMP,READLAMP,LANTERN
SYNON PILLOW,VELVET
SYNON MAGAZINES,ISSUES,SPELUNKER,"SPELUNKER"
SYNON DWARF,DWARVES
SYNON KNIFE,KNIVES
SYNON FOOD,RATIONS
SYNON BOTTLE,JAR
SYNON WATER,H2O
SYNON PLANT,BEANSTALK
SYNON SHADOW,FIGURE
SYNON VOLCANO,GEYSER,GORGE
SYNON MACHINE,VENDING
SYNON CARPET,MOSS,CURTAINS
SYNON GOLD,NUGGET
SYNON SILVER,BARS
SYNON CHEST,BOX,TREASURE
SYNON EGGS,EGG,NEST
SYNON VASE,MING
SYNON POTTERY,SHARDS
SYNON PYRAMID,PLATINUM
SYNON RUG,PERSIAN
SYNON CAGE,WICKER
SYNON JEWELRY,JEWELS
SYNON CASKET,OPALS
SYNON BRACELET,JADE
SYNON SCULPTURE,CRYSTAL
SYNON RING,MITHRAL
SYNON SPYGLASS,SCRIMSHAW
SYNON BAG,PIECES,EIGHT
SYNON VIAL,PHIAL
SYNON STATUE,MINOTAUR
SYNON YACHT,RUBY,RUBAIYAT
SYNON DJINN,DJANN,GENIE
SYNON TURTLE,TORTOISE,DARWIN
SYNON BEADS,INDIAN,STRING,TURQUOISE
VARIABLE HERE,THERE,ARG1,ARG2,STATUS
VARIABLE LAMPLIFE
VARIABLE I,J,K,L
VARIABLE INVCT
VARIABLE DEATHS,PENALTIES,SCOREX,MAXSCORE,TURNS,ADMIN,MOVES
VARIABLE FOOBAR
VARIABLE DWARFCOUNT,CLOCK,CLOSURE,QUITTING,OK
VARIABLE TIME,HINT.TIME
VARIABLE STRENGTH,MUSHTIME,DRAGTIME,LASTCLOCK
VARIABLE PASSWORD,DWARROWS,SAFEEXIT,ESCAPE,CAMEO.TIME
AT ROAD
MOVE ROAD,HILL
MOVE WEST,HILL
MOVE UP,HILL
MOVE ENTER,BUILDING
MOVE BUILDING,BUILDING
MOVE INWARD,BUILDING
MOVE EAST,BUILDING
MOVE DOWNSTREAM,VALLEY
MOVE GULLY,VALLEY
MOVE STREAM,VALLEY
MOVE SOUTH,VALLEY
MOVE DOWN,VALLEY
MOVE FOREST,FOREST
MOVE NORTH,FOREST
MOVE EAST,FOREST
MOVE DEPRESSION,DEPRESSION
AT HILL
MOVE ROAD,ROAD
MOVE BUILDING,ROAD
MOVE FORWARD,ROAD
MOVE EAST,ROAD
MOVE NORTH,ROAD
MOVE FOREST,FOREST
MOVE NORTH,FOREST
MOVE SOUTH,FOREST
AT BUILDING
MOVE ROAD,ROAD
MOVE OUT,ROAD
MOVE OUTDOORS,ROAD
MOVE WEST,ROAD
IFLT CLOSURE,2 {is the cave open?}
SMOVE XYZZY,DEBRIS,FOOF
SMOVE PLUGH,Y2,FOOF
FIN
*
IFKEY BACK {bug fix K.C.W. Nov. 23, 1984}
LDA I,DEBRIS
IFEQ I,THERE
SAY CANTGOBACK
QUIT
FIN
LDA I,Y2
IFEQ I,THERE
SAY CANTGOBACK
QUIT
FIN
FIN
*
AT BUILDING
ANYOF STREAM,DOWNSTREAM
SAY PIPEFIT
QUIT
AT VALLEY
MOVE UPSTREAM,ROAD
MOVE BUILDING,ROAD
MOVE NORTH,ROAD
MOVE FOREST,FOREST
MOVE EAST,FOREST
MOVE WEST,FOREST
MOVE UP,FOREST
MOVE DEPRESSION,DEPRESSION
ANYOF SOUTH,DOWN,DOWNSTREAM
IFLT CLOSURE,2
GOTO SLIT
ELSE
GOTO FAKE.SLIT
FIN
QUIT
AT FOREST
MOVE VALLEY,VALLEY
MOVE EAST,VALLEY
MOVE DOWN,VALLEY
MOVE WEST,FOREST
MOVE SOUTH,FOREST
AT FOREST
ANYOF FOREST,FORWARD,NORTH
CHANCE 50
GOTO FOREST
ELSE
GOTO FOREST2
FIN
QUIT
AT FOREST2
MOVE ROAD,ROAD
MOVE NORTH,ROAD
MOVE VALLEY,VALLEY
MOVE EAST,VALLEY
MOVE WEST,VALLEY
MOVE DOWN,VALLEY
MOVE FOREST,FOREST
MOVE SOUTH,FOREST
AT SLIT
MOVE BUILDING,ROAD
MOVE UPSTREAM,VALLEY
MOVE NORTH,VALLEY
MOVE FOREST,FOREST
MOVE EAST,FOREST
MOVE WEST,FOREST
MOVE DOWNSTREAM,DEPRESSION
MOVE ROCK,DEPRESSION
MOVE BED,DEPRESSION
MOVE SOUTH,DEPRESSION
AT FAKE.SLIT
MOVE BUILDING,ROAD
MOVE UPSTREAM,VALLEY
MOVE NORTH,VALLEY
MOVE FOREST,FOREST
MOVE EAST,FOREST
MOVE WEST,FOREST
MOVE DOWNSTREAM,DEPRESSION
MOVE ROCK,DEPRESSION
MOVE BED,DEPRESSION
MOVE SOUTH,DEPRESSION
AT SLIT
ANYOF SLIT,STREAM,DOWN,ENTER
SAY DONTFITSLIT
QUIT
AT FAKE.SLIT
ANYOF SLIT,STREAM,DOWN,ENTER
SET CLOSURE,5 {victory!}
BIC STATUS,FASTMODE
BIC STATUS,QUICKIE
SAY TREASUREROOM {describe the booty}
SET QUITTING,0
CALL FINIS {end the game in triumph}
AT DEPRESSION
MOVE FOREST,FOREST
MOVE EAST,FOREST2
MOVE WEST,FOREST
MOVE SOUTH,FOREST2
MOVE BUILDING,ROAD
IFKEY BACK { bug fix. K.C.W }
LDA I,INCAVE
IFEQ I,THERE
AND
IFEQ GRATE,0 { locked }
SAY CANTPASSLOCK
QUIT
FIN
FIN
ANYOF UPSTREAM,GULLY,NORTH,SLIT
IFLT CLOSURE,2
GOTO SLIT
ELSE
GOTO FAKE.SLIT
FIN
QUIT
AT DEPRESSION
ANYOF IN,DOWN,ENTER
IFEQ GRATE,1
GOTO INCAVE
ELSE
SAY CANTPASSLOCK
FIN
QUIT
AT INCAVE
ANYOF UP,OUT,LEAVE,SURFACE
IFEQ GRATE,1
GOTO DEPRESSION
ELSE
SAY CANTPASSLOCK
FIN
QUIT
AT INCAVE
MOVE CRAWL,COBBLES
MOVE COBBLES,COBBLES
MOVE INWARD,COBBLES
MOVE WEST,COBBLES
MOVE PIT,PIT
MOVE DEBRIS,DEBRIS
IFKEY BACK { bug fix. K.C.W }
LDA I,DEPRESSION
IFEQ GRATE,0 { locked }
SAY CANTPASSLOCK
QUIT
FIN
FIN
AT COBBLES
MOVE OUT,INCAVE
MOVE SURFACE,INCAVE
MOVE NULL,INCAVE
MOVE ENTRANCE,INCAVE
MOVE EAST,INCAVE
MOVE INWARD,DEBRIS
MOVE DARK,DEBRIS
MOVE WEST,DEBRIS
MOVE DEBRIS,DEBRIS
MOVE PIT,PIT
AT DEBRIS
MOVE ENTRANCE,INCAVE
MOVE CRAWL,COBBLES
MOVE COBBLES,COBBLES
MOVE PASSAGE,COBBLES
MOVE LOW,COBBLES
MOVE EAST,COBBLES
MOVE CANYON,CANYON
MOVE INWARD,CANYON
MOVE UP,CANYON
MOVE WEST,CANYON
MOVE PIT,PIT
IFEQ GRATE,1
MOVE DEPRESSION,DEPRESSION
ELSE
SMOVE DEPRESSION,INCAVE,CANTPASSLOCK
FIN
*
IFKEY BACK {bug fix K.C.W. Nov. 23, 1984}
LDA I,BUILDING
IFEQ I,THERE
SAY CANTGOBACK
QUIT
FIN
FIN
*
AT DEBRIS
KEYWORD XYZZY
IFGT CLOSURE,1
OR
BIT ADMIN,NOMAGIC
SAY NOTHING
BIS ADMIN,PANICED
QUIT
ELSE
SMOVE XYZZY,BUILDING,FOOF
FIN
QUIT
AT CANYON
MOVE ENTRANCE,INCAVE
MOVE DOWN,DEBRIS
MOVE EAST,DEBRIS
MOVE DEBRIS,DEBRIS
MOVE INWARD,BIRDCHAMBER
MOVE UP,BIRDCHAMBER
MOVE WEST,BIRDCHAMBER
MOVE PIT,PIT
IFEQ GRATE,1
MOVE DEPRESSION,DEPRESSION
ELSE
SMOVE DEPRESSION,INCAVE,CANTPASSLOCK
FIN
AT BIRDCHAMBER
MOVE ENTRANCE,INCAVE
MOVE DEBRIS,DEBRIS
MOVE CANYON,CANYON
MOVE EAST,CANYON
MOVE PASSAGE,PIT
MOVE PIT,PIT
MOVE WEST,PIT
IFEQ GRATE,1
MOVE DEPRESSION,DEPRESSION
ELSE
SMOVE DEPRESSION,INCAVE,CANTPASSLOCK
FIN
AT PIT
MOVE ENTRANCE,INCAVE
MOVE DEBRIS,DEBRIS
MOVE PASSAGE,BIRDCHAMBER
MOVE EAST,BIRDCHAMBER
MOVE DOWN,MISTS
IFEQ GRATE,1
MOVE DEPRESSION,DEPRESSION
ELSE
SMOVE DEPRESSION,INCAVE,CASTPASSLOCK
FIN
AT PIT
ANYOF DOWN,STEPS,PIT
IFHAVE GOLD
SAY BROKENECK
GOTO MISTS
CALL CORONER
ELSE
GOTO MISTS
FIN
QUIT
AT PIT
ANYOF WEST,CRACK
SAY MISTCRACK
QUIT
AT PIT
KEYWORD JUMP
GOTO MISTS
CALL SPLATTER
QUIT
AT MISTS
MOVE LEFT,GOLDROOM
MOVE SOUTH,GOLDROOM
MOVE EAST,SANDSTONE
MOVE FORWARD,EASTOFFISSURE
MOVE HALL,EASTOFFISSURE
MOVE WEST,EASTOFFISSURE
MOVE STAIRS,MTKING
MOVE DOWN,MTKING
MOVE NORTH,MTKING
MOVE Y2,JUMBLE
AT MISTS
ANYOF UP,PIT,STEPS,DOME,PASSAGE,ENTER
IFHAVE GOLD
SAY UNCLIMBABLE
ELSE
GOTO PIT
FIN
QUIT
AT EASTOFFISSURE
MOVE HALL,MISTS
MOVE EAST,MISTS
IFKEY BACK { bug fix. K.C.W }
LDA I,WESTOFFISSURE
IFEQ I,THERE
AND
IFEQ FISSURE,0 { no bridge }
SAY NOWAYACROSS
QUIT
FIN
FIN
AT EASTOFFISSURE
ANYOF FORWARD,OVER,WEST
IFEQ FISSURE,0
SAY NOWAYACROSS
ELSE
GOTO WESTOFFISSURE
FIN
QUIT
AT EASTOFFISSURE
KEYWORD JUMP
IFEQ FISSURE,1
SAY TRYTHEBRIDGE
ELSE
GOTO CAVERN
CALL SPLATTER
FIN
QUIT
AT GOLDROOM
MOVE HALL,MISTS
MOVE OUT,MISTS
MOVE NORTH,MISTS
AT MTKING
MOVE STAIRS,MISTS
MOVE UP,MISTS
MOVE EAST,MISTS
AT MTKING
ANYOF NORTH,LEFT,SOUTH,RIGHT,WEST,FORWARD,SW,SECRET
ANYOF NW,SE,NE,DOWN
IFNEAR SNAKE
SAY SNAKEBLOCKS
QUIT
ELSE
MOVE NORTH,LOWNSPASSAGE
MOVE LEFT,LOWNSPASSAGE
MOVE SOUTH,SOUTHSIDE
MOVE RIGHT,SOUTHSIDE
MOVE WEST,WESTSIDE
MOVE FORWARD,WESTSIDE
MOVE DOWN,VAULT
MOVE NORTHEAST,MORION
MOVE NORTHWEST,CORRID.3
MOVE SOUTHEAST,CORRID.1
MOVE SECRET,SECRETEW.TITE
CHANCE 35 {Assumes "SW" typed here}
MOVE SW,SECRETEW.TITE
ELSE
SAY YOUDIDNTMOVE
FIN
QUIT
AT WEND2PIT
MOVE EAST,EEND2PIT
MOVE CROSS,EEND2PIT
MOVE WEST,SLAB
MOVE SLAB,SLAB
MOVE DOWN,WESTPIT
MOVE PIT,WESTPIT
AT WEND2PIT
KEYWORD HOLE
SAY TOO.FAR.UP
QUIT
AT EASTPIT
MOVE UP,EEND2PIT
MOVE OUT,EEND2PIT
AT WESTPIT
MOVE UP,WEND2PIT
MOVE OUT,WEND2PIT
AT WESTPIT
KEYWORD CLIMB
IFEQ PLANT,0
SAY NOCLIMBUP
ELSE
IFEQ PLANT,2
SAY SHORTPLANT
GOTO WEND2PIT
ELSE
SAY LONGPLANT
GOTO NARROWCORRIDOR
FIN
FIN
QUIT
AT WESTPIT
KEYWORD GET,PLANT
SAY GET..PLANT
QUIT
AT WESTOFFISSURE
MOVE WEST,WENDMISTS
AT WESTOFFISSURE
ANYOF FORWARD,OVER,EAST
IFEQ FISSURE,0
SAY NOWAYACROSS
ELSE
GOTO EASTOFFISSURE
FIN
QUIT
AT WESTOFFISSURE
KEYWORD JUMP
IFEQ FISSURE,1
SAY TRYTHEBRIDGE
ELSE
GOTO CAVERN
CALL SPLATTER
FIN
QUIT
AT WESTOFFISSURE
IFKEY BACK { bug fix. K.C.W. }
LDA I,EASTOFFISSURE
IFEQ I,THERE
AND
IFEQ FISSURE,0 { no bridge }
SAY NOWAYACROSS
QUIT
FIN
FIN
KEYWORD NORTH
SAY MISTCRAWL
GOTO WENDMISTS
QUIT
AT LOWNSPASSAGE
MOVE HALL,MTKING
MOVE OUT,MTKING
MOVE SOUTH,MTKING
MOVE NORTH,Y2
MOVE Y2,Y2
MOVE DOWN,DIRTY
MOVE HOLE,DIRTY
AT SOUTHSIDE
MOVE HALL,MTKING
MOVE OUT,MTKING
MOVE NORTH,MTKING
AT WESTSIDE
MOVE HALL,MTKING
MOVE OUT,MTKING
MOVE EAST,MTKING
MOVE WEST,CROSSOVER
MOVE UP,CROSSOVER
AT Y2
MOVE SOUTH,LOWNSPASSAGE
MOVE EAST,JUMBLE
MOVE JUMBLE,JUMBLE
MOVE WEST,WINDOW
*
IFKEY BACK {bug fix K.C.W. Nov. 23, 1984}
LDA I,BUILDING
IFEQ I,THERE
SAY CANTGOBACK
QUIT
FIN
LDA I,PLOVER
IFEQ I,THERE
SAY CANTGOBACK
QUIT
FIN
FIN
*
AT Y2
ANYOF PLUGH,PLOVER
IFGT CLOSURE,1
OR
BIT ADMIN,NOMAGIC
SAY NOTHING
BIS ADMIN,PANICED
QUIT
ELSE
SMOVE PLUGH,BUILDING,FOOF
SMOVE PLOVER,PLOVER,FOOF
FIN
AT JUMBLE
MOVE DOWN,Y2
MOVE Y2,Y2
MOVE UP,MISTS
AT WINDOW
KEYWORD JUMP
SAY BROKENECK
GOTO MIRRORCNYN
CALL CORONER
AT DIRTY
MOVE EAST,BRINK
MOVE CRAWL,BRINK
MOVE UP,LOWNSPASSAGE
MOVE HOLE,LOWNSPASSAGE
MOVE WEST,DUSTY
MOVE BEDQUILT,BEDQUILT
AT BRINK
MOVE WEST,DIRTY
MOVE CRAWL,DIRTY
MOVE DOWN,STREAMPIT
MOVE PIT,STREAMPIT
MOVE CLIMB,STREAMPIT
AT STREAMPIT
MOVE CLIMB,BRINK
MOVE UP,BRINK
MOVE OUT,BRINK
AT STREAMPIT
ANYOF SLIT,STREAM,DOWN,UPSTREAM,DOWNSTREAM
SAY DONTFITSLIT
QUIT
AT DUSTY
MOVE EAST,DIRTY
MOVE PASSAGE,DIRTY
MOVE DOWN,COMPLEX
MOVE HOLE,COMPLEX
MOVE BEDQUILT,BEDQUILT
AT WENDMISTS
MOVE SOUTH,MAZEA.42
MOVE UP,MAZEA.42
MOVE PASSAGE,MAZEA.42
MOVE CLIMB,MAZEA.42
MOVE EAST,WESTOFFISSURE
MOVE WEST,LONGHALLEAST
MOVE CRAWL,LONGHALLEAST
AT WENDMISTS
KEYWORD NORTH
SAY MISTCRAWL
GOTO WESTOFFISSURE
QUIT
AT MAZEA.42
MOVE UP,WENDMISTS
MOVE NORTH,MAZEA.42
MOVE EAST,MAZEA.43
MOVE SOUTH,MAZEA.45
MOVE WEST,MAZEA.80
AT MAZEA.43
MOVE WEST,MAZEA.42
MOVE SOUTH,MAZEA.44
MOVE EAST,MAZEA.45
AT MAZEA.44
MOVE WEST,MAZEA.43
MOVE DOWN,MAZEA.48
MOVE SOUTH,MAZEA.50
MOVE NORTH,MAZEA.82
AT MAZEA.45
MOVE WEST,MAZEA.42
MOVE NORTH,MAZEA.43
MOVE EAST,MAZEA.46
MOVE SOUTH,MAZEA.47
MOVE UP,MAZEA.87
MOVE DOWN,MAZEA.87
AT MAZEA.46
MOVE WEST,MAZEA.45
MOVE OUT,MAZEA.45
AT MAZEA.47
MOVE EAST,MAZEA.45
MOVE OUT,MAZEA.45
AT MAZEA.48
MOVE UP,MAZEA.44
MOVE OUT,MAZEA.44
AT MAZEA.49
MOVE EAST,MAZEA.50
MOVE WEST,MAZEA.51
AT MAZEA.50
MOVE EAST,MAZEA.44
MOVE WEST,MAZEA.49
MOVE DOWN,MAZEA.51
MOVE SOUTH,MAZEA.52
AT MAZEA.51
MOVE WEST,MAZEA.49
MOVE UP,MAZEA.50
MOVE EAST,MAZEA.52
MOVE SOUTH,MAZEA.53
AT MAZEA.52
MOVE WEST,MAZEA.50
MOVE EAST,MAZEA.51
MOVE SOUTH,MAZEA.52
MOVE UP,MAZEA.53
MOVE NORTH,MAZEA.55
MOVE DOWN,MAZEA.86
AT MAZEA.53
MOVE WEST,MAZEA.51
MOVE NORTH,MAZEA.52
MOVE SOUTH,MAZEA.54
AT MAZEA.54
MOVE WEST,MAZEA.53
MOVE OUT,MAZEA.53
AT MAZEA.55
MOVE WEST,MAZEA.52
MOVE NORTH,MAZEA.55
MOVE DOWN,MAZEA.56
MOVE EAST,MAZEA.57.PIT
AT MAZEA.56
MOVE UP,MAZEA.55
MOVE OUT,MAZEA.55
AT MAZEA.57.PIT
MOVE DOWN,BIRDCHAMBER
MOVE CLIMB,BIRDCHAMBER
MOVE WEST,MAZEA.55
MOVE SOUTH,MAZEA.58
MOVE NORTH,MAZEA.83
MOVE EAST,MAZEA.84
AT MAZEA.58
MOVE EAST,MAZEA.57.PIT
MOVE OUT,MAZEA.57.PIT
AT LONGHALLEAST
MOVE EAST,WENDMISTS
MOVE UP,WENDMISTS
MOVE CRAWL,WENDMISTS
MOVE WEST,LONGHALLWEST
MOVE NORTH,CROSSOVER
MOVE DOWN,CROSSOVER
MOVE HOLE,CROSSOVER
AT LONGHALLWEST
MOVE EAST,LONGHALLEAST
MOVE NORTH,CROSSOVER
MOVE SOUTH,MAZED.107
AT CROSSOVER
MOVE WEST,LONGHALLEAST
MOVE NORTH,DEADEND1
MOVE EAST,WESTSIDE
MOVE SOUTH,LONGHALLWEST
AT DEADEND1
MOVE SOUTH,CROSSOVER
MOVE OUT,CROSSOVER
AT COMPLEX
MOVE UP,DUSTY
MOVE CLIMB,DUSTY
MOVE WEST,BEDQUILT
MOVE BEDQUILT,BEDQUILT
MOVE NORTH,SHELL
MOVE SHELL,SHELL
MOVE EAST,ANTEROOM
AT BEDQUILT
MOVE EAST,COMPLEX
MOVE WEST,SWISS
MOVE SLAB,SLAB
AT BEDQUILT
ANYOF NORTH,SOUTH,UP,DOWN
CHANCE 65
SAY CRAWL..CAVEIN
QUIT
ELSE
MOVE DOWN,ANTEROOM
CHANCE 75
MOVE NORTH,LOW
MOVE UP,DUSTY
MOVE SOUTH,SLAB
ELSE
MOVE NORTH,SECRETJUNCTION
MOVE UP,SECRETNSCPAS
MOVE SOUTH,TALLEWCNYN
FIN
FIN
AT BEDQUILT
KEYWORD NW
CHANCE 50
SAY YOUDIDNTMOVE
ELSE
GOTO ORIENTAL
FIN
QUIT
AT SWISS
MOVE NE,BEDQUILT
MOVE WEST,EEND2PIT
MOVE CANYON,TALLEWCNYN
MOVE EAST,SOFT
MOVE ORIENTAL,ORIENTAL
MOVE SOFT,SOFT
ANYOF NW,SOUTH
CHANCE 65
MOVE NW,ORIENTAL
SAY YOUDIDNTMOVE
ELSE
MOVE SOUTH,TALLEWCNYN
SAY YOUDIDNTMOVE
FIN
QUIT
FIN
AT EEND2PIT
MOVE EAST,SWISS
MOVE WEST,WEND2PIT
MOVE CROSS,WEND2PIT
MOVE DOWN,EASTPIT
MOVE PIT,EASTPIT
AT SLAB
MOVE SOUTH,WEND2PIT
MOVE UP,SECRETNSCYN
MOVE CLIMB,SECRETNSCYN
MOVE NORTH,BEDQUILT
MOVE BEDQUILT,BEDQUILT
AT SECRETNSCYN
MOVE DOWN,SLAB
MOVE SLAB,SLAB
MOVE NORTH,MIRRORCNYN
MOVE MIRROR,MIRRORCNYN
MOVE RESERVOIR,RESERVOIR
MOVE SOUTH,SECRETCYNNE1
AT SECRETNSCPAS
MOVE NORTH,SECRETJUNCTION
MOVE DOWN,BEDQUILT
MOVE PASSAGE,BEDQUILT
MOVE SOUTH,STALACT
AT SECRETJUNCTION
MOVE SE,BEDQUILT
MOVE SOUTH,SECRETNSCPAS
MOVE NORTH,WINDOW2
AT LOW
MOVE BEDQUILT,BEDQUILT
MOVE SW,SLOPING
MOVE NORTH,DEADEND2
MOVE SE,ORIENTAL
MOVE ORIENTAL,ORIENTAL
AT DEADEND2
MOVE SOUTH,LOW
MOVE CRAWL,LOW
MOVE OUT,LOW
AT SECRETEW.TITE
MOVE EAST,MTKING
MOVE DOWN,NSCANYONWIDE
AT SECRETEW.TITE
KEYWORD WEST
IFEQ DRAGON,0 * If it's alive...
GOTO SECRETCYNNE2
ELSE
GOTO SECRETCYNNE1
FIN
QUIT
AT NSCANYONWIDE
MOVE SOUTH,TIGHTERSTILL
MOVE NORTH,TALLEWCNYN
AT TIGHTERSTILL
MOVE NORTH,NSCANYONWIDE
AT TALLEWCNYN
MOVE EAST,NSCANYONWIDE
MOVE WEST,DEADEND3
MOVE NORTH,SWISS
MOVE CRAWL,SWISS
AT DEADEND3
MOVE SOUTH,TALLEWCNYN
AT MAZEA.80
MOVE NORTH,MAZEA.42
MOVE WEST,MAZEA.80
MOVE SOUTH,MAZEA.80
MOVE EAST,MAZEA.81
AT MAZEA.81
MOVE WEST,MAZEA.80
MOVE OUT,MAZEA.80
AT MAZEA.82
MOVE SOUTH.MAZEA.44
MOVE OUT,MAZEA.44
AT MAZEA.83
MOVE SOUTH,MAZEA.57.PIT
MOVE EAST,MAZEA.84
MOVE WEST,MAZEA.85
AT MAZEA.84
MOVE NORTH,MAZEA.57.PIT
MOVE WEST,MAZEA.83
MOVE NW,MAZEA.114
AT MAZEA.85
MOVE EAST,MAZEA.83
MOVE OUT,MAZEA.83
AT MAZEA.86
MOVE UP,MAZEA.52
MOVE OUT,MAZEA.52
AT MAZEA.87
MOVE UP,MAZEA.45
MOVE DOWN,MAZEA.45
AT NARROWCORRIDOR
MOVE DOWN,WESTPIT
MOVE CLIMB,WESTPIT
MOVE EAST,WESTPIT
MOVE WEST,GIANT
MOVE GIANT,GIANT
AT NARROWCORRIDOR
KEYWORD JUMP
GOTO WESTPIT
CALL SPLATTER
AT INCLINE
MOVE NORTH,CAVERN
MOVE CAVERN,CAVERN
MOVE PASSAGE,CAVERN
SMOVE DOWN,LOW,OOF
SMOVE CLIMB,LOW,OOF
AT GIANT
MOVE SOUTH,NARROWCORRIDOR
MOVE CORRIDOR,NARROWCORRIDOR
MOVE EAST,TUNNEL.1
MOVE NORTH,IMMENSENSPASS
AT IMMENSENSPASS
MOVE SOUTH,GIANT
MOVE GIANT,GIANT
MOVE PASSAGE,GIANT
AT IMMENSENSPASS
ANYOF NORTH,ENTER,CAVERN
IFEQ DOOR,0
SAY DOORNEEDSOIL
ELSE
GOTO CAVERN
FIN
QUIT
AT CAVERN
MOVE SOUTH,IMMENSENSPASS
MOVE OUT,IMMENSENSPASS
MOVE GIANT,GIANT
MOVE WEST,INCLINE
MOVE INCLINE,INCLINE
AT CAVERN
ANYOF DOWN,JUMP {jumping into whirlpool}
QUERY WHIRLPOOL?
LDA J,LAMP
SET K,0
ITOBJ I
IFHAVE I
AND
NOT
IFEQ I,J
APPORT I,YLEM
ADD K,1
FIN
EOI
IFHAVE LAMP
SET INVCT,1
IFEQ K,0
SAY FLOW.DOWN
ELSE
SAY FLOW.RIP
FIN
ELSE
SET INVCT,0
IFEQ K,0
SAY FLOW.DARK
ELSE
SAY FLOW.D.RIP
FIN
FIN
GOTO RESERVOIR.N
SAY WHIRL.LAND
ELSE
SAY OK
FIN
QUIT
AT SOFT
MOVE WEST,SWISS
MOVE OUT,SWISS
MOVE SWISS,SWISS
AT ORIENTAL
MOVE SE,SWISS
MOVE WEST,LOW
MOVE CRAWL,LOW
MOVE UP,MISTY
MOVE NORTH,MISTY
MOVE CAVERN,MISTY
AT MISTY
MOVE SOUTH,ORIENTAL
MOVE ORIENTAL,ORIENTAL
MOVE WEST,ALCOVE
AT MISTY
KEYWORD JUMP
GOTO CAVERN
CALL SPLATTER
QUIT
AT ALCOVE
ANYOF LAST,PASSAGE,PLOVER
IFEQ INVCT,0
GOTO PLOVER
ELSE
IFEQ INVCT,1
IFHAVE EMERALD
GOTO PLOVER
ELSE
SAY WONT..FIT
FIN
ELSE
SAY WONT..FIT
FIN
FIN
QUIT
AT ALCOVE
MOVE NW,MISTY
MOVE CAVERN,MISTY
AT PLOVER
AT PLOVER {'cause can get here via "SAY PLOVER" too}
KEYWORD PLOVER
IFEQ STATUS,1
OR
IFKEY SAY
IFHAVE EMERALD
DROP EMERALD
FIN
SAY FOOF
GOTO Y2
SET THERE,0 { bug fix. K.C.W }
QUIT
FIN
AT PLOVER
ANYOF WEST,PASSAGE,ALCOVE
IFEQ INVCT,0
GOTO ALCOVE
ELSE
IFEQ INVCT,1
IFHAVE EMERALD
GOTO ALCOVE
ELSE
SAY WONT..FIT
FIN
ELSE
SAY WONT..FIT
FIN
FIN
QUIT
AT PLOVER
MOVE NE,DARK
MOVE DARK,DARK
AT DARK
MOVE SOUTH,PLOVER
MOVE PLOVER,PLOVER
MOVE OUT,PLOVER
AT ARCHED
MOVE DOWN,SHELL
MOVE SHELL,SHELL
MOVE UP,ARCH.COR.1
MOVE EAST,ARCH.COR.1
AT SHELL
MOVE UP,ARCHED
MOVE HALL,ARCHED
MOVE DOWN,RAGGEDCORRID
MOVE CORRIDOR,RAGGEDCORRID
AT SHELL
ANYOF SOUTH,COMPLEX
IFHAVE CLAM
SAY CLAM.2.BIG
ELSE
IFHAVE OYSTER
SAY OYSTER.2.BIG
ELSE
GOTO COMPLEX
EOF
QUIT
AT RAGGEDCORRID
MOVE UP,SHELL
MOVE SHELL,SHELL
MOVE DOWN,CULDESAC
AT CULDESAC
MOVE UP,RAGGEDCORRID
MOVE OUT,RAGGEDCORRID
MOVE CORRIDOR,RAGGEDCORRID
MOVE SHELL,SHELL
AT ANTEROOM
MOVE UP,COMPLEX
MOVE WEST,BEDQUILT
MOVE EAST,WITTSEND
AT MAZED.107
MOVE SOUTH,MAZED.131
MOVE SW,MAZED.132
MOVE NE,MAZED.133
MOVE SE,MAZED.134
MOVE UP,MAZED.135
MOVE NW,MAZED.136
MOVE EAST,MAZED.137
MOVE WEST,MAZED.138
MOVE NORTH,MAZED.139
MOVE DOWN,LONGHALLWEST
AT WITTSEND
ANYOF NORTH,SOUTH,EAST,UP,DOWN,NE,NW,SE,SW
CHANCE 95
GOTO WITTSEND
ELSE
GOTO ANTEROOM
FIN
QUIT
AT WITTSEND
KEYWORD WEST
GOTO WITTSEND
QUIT
AT MIRRORCNYN
KEYWORD MIRROR
SAY TOO.FAR.UP
QUIT
AT MIRRORCNYN
MOVE SOUTH,SECRETNSCYN
MOVE NORTH,RESERVOIR
MOVE RESERVOIR,RESERVOIR
AT WINDOW2
MOVE WEST,SECRETJUNCTION
AT WINDOW2
KEYWORD JUMP
SAY BROKENECK
GOTO MIRRORCNYN
CALL CORONER
AT STALACT
MOVE NORTH,SECRETNSPAS
AT STALACT
ANYOF DOWN,JUMP,CLIMB
CHANCE 40
GOTO MAZEA.50
ELSE
CHANCE 50
GOTO MAZEA.53
ELSE
GOTO MAZEA.45
EOF
QUIT
AT MAZED.112
MOVE SW,MAZED.131
MOVE NORTH,MAZED.132
MOVE EAST,MAZED.133
MOVE NW,MAZED.134
MOVE SE,MAZED.135
MOVE NE,MAZED.136
MOVE WEST,MAZED.137
MOVE DOWN,MAZED.138
MOVE UP,MAZED.139
MOVE SOUTH,MAZED.140
AT RESERVOIR
MOVE SOUTH,MIRRORCNYN
MOVE OUT,MIRRORCNYN
MOVE MIRROR,MIRRORCNYN
IFKEY BACK { bug fix. K.C.W. }
LDA I,RESERVOIR.N
IFEQ I,THERE
SAY CANT.SWIM
QUIT
FIN
FIN
ANYOF NORTH,CROSS
SAY CANT.SWIM
QUIT
AT RESERVOIR.N
MOVE NORTH,WARM
MOVE PASSAGE,WARM
MOVE WARM,WARM
MOVE BALCONY,BALCONY
IFKEY BACK { bug fix. K.C.W }
LDA I,CAVERN
IFEQ I,THERE
SAY IAMGAME
QUIT
FIN
LDA I,RESERVOIR
IFEQ I,THERE
SAY CANT.SWIM
QUIT
FIN
FIN
ANYOF SOUTH,CROSS
IFNEAR TURTLE
SAY TURTLE.BACK
APPORT TURTLE,LIMBO
GOTO RESERVOIR
ELSE
SAY CANT.SWIM
FIN
QUIT
AT WARM
MOVE SOUTH,RESERVOIR.N
MOVE RESERVOIR,RESERVOIR.N
MOVE NORTHEAST,BALCONY
MOVE BALCONY,BALCONY
AT BALCONY
MOVE WEST,WARM
MOVE OUT,WARM
MOVE WARM,WARM
MOVE RESERVOIR,RESERVOIR.N
KEYWORD JUMP
GOTO YLEM
CALL SPLATTER
AT MAZEA.114
MOVE SE,MAZEA.84
AT SWOFCHASM
MOVE SW,SLOPING
MOVE SLOPING,SLOPING
MOVE CORRIDOR,SLOPING
AT SWOFCHASM
KEYWORD THROW
IFEQ STATUS,1
OR
IFNEAR TROLL2
PROCEED
ELSE
IFKEY AXE
OR
IFKEY SWORD
IFHAVE ARG2
NAME EL.CHEAPO,ARG2
DROP ARG2
ELSE
PROCEED
FIN
ELSE
BIT ARG2,OBJECT
BIT ARG2,VALUED
IFHAVE ARG2
IFKEY EGGS
BIT TROLL,SPECIAL1
SET TROLL,6 {wary}
SAY TROLL
SET TROLL,0
APPORT EGGS,YLEM {destroy eggs}
QUIT
FIN
FIN
NAME BOUGHTHIMOFF,ARG2
SET TROLL,1
APPORT TROLL,LIMBO
APPORT TROLL2,SWOFCHASM
APPORT ARG2,LIMBO
ELSE
PROCEED
FIN
ELSE
PROCEED
FIN
ELSE
PROCEED
FIN
FIN
FIN
QUIT
AT SWOFCHASM
ANYOF CROSS,NE
IFGT CHASM,0
SAY NO.BRIDGE
ELSE
IFEQ TROLL,0
SAY TROLL.SEZ.NO
ELSE
IFEQ TROLL,2
SET TROLL,3
SAY TROLL
SET TROLL,0
APPORT TROLL,SWOFCHASM
APPORT TROLL2,LIMBO
ELSE
IFEQ TROLL,1
SET TROLL,2
FIN
GOTO NEOFCHASM
FIN
FIN
FIN
QUIT
AT SWOFCHASM
KEYWORD JUMP
IFEQ CHASM,0
SAY TRYTHEBRIDGE
ELSE
GOTO YLEM
CALL SPLATTER
FIN
QUIT
AT SLOPING
MOVE DOWN,LOW
MOVE UP,SWOFCHASM
MOVE CHASM,SWOFCHASM
MOVE LOW,LOW
MOVE OUT,LOW
AT SECRETCYNNE1
KEYWORD RUG
IFEQ DRAGON,0
SAY DRAGON.RUG
QUIT
FIN
AT SECRETCYNNE1
MOVE NORTH,SECRETNSCYN
MOVE OUT,SECRETNSCYN
AT SECRETCYNNE1
ANYOF FORWARD,EAST
IFEQ DRAGON,0
SAY PAST.DRAGON
ELSE
GOTO SECRETEW.TITE
FIN
QUIT
AT SECRETCYNNE2
KEYWORD RUG
IFEQ DRAGON,0
SAY DRAGON.RUG
QUIT
FIN
AT SECRETCYNNE2
MOVE EAST,SECRETEW.TITE
MOVE OUT,SECRETEW.TITE
AT SECRETCYNNE2
ANYOF FORWARD,NORTH
IFEQ DRAGON,0
SAY PAST.DRAGON
ELSE
GOTO SECRETNSCYN
FIN
QUIT
AT NEOFCHASM
KEYWORD RELEASE,BEAR
HAVE BEAR
NEAR TROLL
SET TROLL,4
SAY BEAR..TROLL
APPORT TROLL,LIMBO
APPORT TROLL,SWOFCHASM
DROP BEAR
QUIT
AT NEOFCHASM
KEYWORD THROW
IFEQ STATUS,1
OR
IFNEAR TROLL2
PROCEED
ELSE
IFKEY AXE
OR
IFKEY SWORD
IFHAVE ARG2
NAME EL.CHEAPO,ARG2
DROP ARG2
ELSE
PROCEED
FIN
ELSE
BIT ARG2,OBJECT
BIT ARG2,VALUED
IFHAVE ARG2
IFKEY EGGS
BIT TROLL.SPECIAL1
SET TROLL,6 {wary}
SAY TROLL
SET TROLL,0
APPORT EGGS,YLEM {destroy eggs}
QUIT
FIN
FIN
NAME BOUGHTHIMOFF,ARG2
SET TROLL,1
APPORT TROLL,LIMBO
APPORT TROLL2,SWOFCHASM
APPORT ARG2,LIMBO
ELSE
PROCEED
FIN
ELSE
PROCEED
FIN
ELSE
PROCEED
FIN
FIN
FIN
QUIT
AT NEOFCHASM
ANYOF CROSS,SW
IFGT CHASM,0
SAY NO.BRIDGE
ELSE
IFEQ TROLL,0
SAY TROLL.SEZ.NO
ELSE
IFEQ TROLL,2
SET TROLL,3
SAY TROLL
SET TROLL,0
APPORT TROLL,SWOFCHASM
APPORT TROLL2,LIMBO
ELSE
IFEQ TROLL,1
SET TROLL,2
FIN
IFHAVE BEAR
SAY BEAR..BRIDGE
SET CHASM,1
APPORT TROLL2,LIMBO
GOTO YLEM
CALL CORONER
ELSE
IFEQ TROLL,4 {scared him off?}
AND
BIT TROLL,SPECIAL1 {already stole eggs back?}
IFNEAR BEAR
GET BEAR
SET CHASM,1
SAY REVENGE
ELSE
SET CHASM,2
SAY REVENGE.1
FIN
APPORT TROLL2,LIMBO
GOTO YLEM
CALL CORONER
ELSE
GOTO SWOFCHASM
FIN
FIN
FIN
FIN
FIN
QUIT
AT NEOFCHASM
KEYWORD JUMP
IFEQ CHASM,0
SAY TRYTHEBRIDGE
ELSE
GOTO YLEM
CALL SPLATTER
FIN
QUIT
AT NEOFCHASM
MOVE NE,CORRIDOR
MOVE CORRIDOR,CORRIDOR
MOVE FORK,FORK
MOVE VIEW,BREATHTAKER
MVOE BARREN,BARREN
AT CORRIDOR
MOVE CHASM,NEOFCHASM
MOVE WEST,NEOFCHASM
MOVE EAST,FORK
MOVE FORK,FORK
MOVE VIEW,BREATHTAKER
MOVE BARREN,BARREN
AT FORK
MOVE CHASM,NEOFCHASM
MOVE WEST,CORRIDOR
MOVE CORRIDOR,CORRIDOR
MOVE NE,WARMJUNCTN
MOVE LEFT,WARMJUNCTN
MOVE SE,LIMESTONE
MOVE RIGHT,LIMESTONE
MOVE DOWN,LIMESTONE
MOVE VIEW,BREATHTAKER
MOVE BARREN,BARREN
AT WARMJUNCTN
MOVE SOUTH,FORK
MOVE FORK,FORK
MOVE NORTH,BREATHTAKER
MOVE VIEW,BREATHTAKER
MOVE EAST,BOULDERS
MOVE CRAWL,BOULDERS
AT BREATHTAKER
MOVE SOUTH,WARMJUNCTN
MOVE PASSAGE,WARMJUNCTN
MOVE OUT,WARMJUNCTN
MOVE FORK,FORK
IFKEY BACK { bug fix. K.C.W. }
LDA I,FACES
IFEQ I,THERE
AND
IFEQ GORGE,0 { no bridge }
SAY NO.ARCH
QUIT
FIN
FIN
AT BREATHTAKER
ANYOF JUMP,DOWN,CLIMB
GOTO YLEM
CALL SPLATTER * let him plummet to a painful death.
AT BREATHTAKER
ANYOF VALLEY,CROSS,GORGE,NORTH
IFEQ GORGE,0
SAY NO.ARCH
ELSE
IFHAVE BEAR
SAY LEAVE.BEAR
ELSE
IFHAVE RING
NOT
BIT FACES,BEENHERE
SAY FUMES.MISS
FIN
GOTO FACES
ELSE
SAY FUMES.BURN
GOTO YLEM
CALL CORONER
FIN
FIN
FIN
QUIT
AT BOULDERS
MOVE WEST,WARMJUNCTN
MOVE OUT,WARMJUNCTN
MOVE CRAWL,WARMJUNCTN
MOVE FORK,FORK
MOVE VIEW,BREATHTAKER
AT LIMESTONE
MOVE NORTH,FORK
MOVE UP,FORK
MOVE FORK,FORK
MOVE SOUTH,BARREN
MOVE DOWN,BARREN
MOVE BARREN,BARREN
MOVE VIEW,BREATHTAKER
AT BARREN
MOVE WEST,LIMESTONE
MOVE UP,LIMESTONE
MOVE FORK,FORK
MOVE EAST,BEARHERE
MOVE INWARD,BEARHERE
MOVE BARREN,BEARHERE
MOVE ENTER,BEARHERE
MOVE VIEW,BREATHTAKER
AT BEARHERE
KEYWORD GET,AXE
NEAR AXE
IFHAVE AXE
OR
IFEQ AXE,0
PROCEED
ELSE
NAME CANTGETAXE,ARG2
QUIT
FIN
AT BEARHERE
MOVE WEST,BARREN
MOVE OUT,BARREN
MOVE FORK,FORK
MOVE VIEW,BREATHTAKER
AT MAZED.131
MOVE WEST,MAZED.107
MOVE SE,MAZED.132
MOVE NW,MAZED.133
MOVE SW,MAZED.134
MOVE NE,MAZED.135
MOVE UP,MAZED.136
MOVE DOWN,MAZED.137
MOVE NORTH,MAZED.138
MOVE SOUTH,MAZED.139
mOVE EAST,MAZED.112
AT MAZED.132
MOVE NW,MAZED.107
MOVE UP,MAZED.131
MOVE NORTH,MAZED.133
MOVE SOUTH,MAZED.134
MOVE WEST,MAZED.135
MOVE SW,MAZED.136
MOVE NE,MAZED.137
MOVE EAST,MAZED.138
MOVE DOWN,MAZED.139
MOVE SE,MAZED.112
AT MAZED.133
MOVE UP,MAZED.107
MOVE DOWN,MAZED.131
MOVE WEST,MAZED.132
MOVE NE,MAZED.134
MOVE SW,MAZED.135
MOVE EAST,MAZED.136
MOVE NORTH,MAZED.137
MOVE NW,MAZED.138
MOVE SE,MAZED.139
MOVE SOUTH,MAZED.112
AT MAZED.134
MOVE NE,MAZED.107
MOVE NORTH,MAZED.131
MOVE NW,MAZED.132
MOVE SE,MAZED.133
MOVE EAST,MAZED.135
MOVE DOWN,MAZED.136
MOVE SOUTH,MAZED.137
MOVE UP,MAZED.138
MOVE WEST,MAZED.139
MOVE SW,MAZED.112
AT MAZED.135
MOVE NORTH,MAZED.107
MOVE SE,MAZED.131
MOVE DOWN,MAZED.132
MOVE SOUTH,MAZED.133
MOVE EAST,MAZED.134
MOVE WEST,MAZED.136
MOVE SW,MAZED.137
MOVE NE,MAZED.138
MOVE NW,MAZED.139
MOVE UP,MAZED.112
AT MAZED.136
MOVE EAST,MAZED.107
MOVE WEST,MAZED.131
MOVE UP,MAZED.132
MOVE SW,MAZED.133
MOVE DOWN,MAZED.134
MOVE SOUTH,MAZED.135
MOVE NW,MAZED.137
MOVE SE,MAZED.138
MOVE NE,MAZED.139
MOVE NORTH,MAZED.112
AT MAZED.137
MOVE SE,MAZED.107
MOVE NE,MAZED.131
MOVE SOUTH,MAZED.132
MOVE DOWN,MAZED.133
MOVE UP,MAZED.134
MOVE NW,MAZED.135
MOVE NORTH,MAZED.136
MOVE SW,MAZED.138
MOVE EAST,MAZED.139
MOVE WEST,MAZED.112
AT MAZED.138
MOVE DOWN,MAZED.107
MOVE EAST,MAZED.131
MOVE NE,MAZED.132
MOVE UP,MAZED.133
MOVE WEST,MAZED.134
MOVE NORTH,MAZED.135
MOVE SOUTH,MAZED.136
MOVE SE,MAZED.137
MOVE SW,MAZED.139
MOVE NW,MAZED.112
AT MAZED.139
MOVE SW,MAZED.107
MOVE NW,MAZED.131
MOVE EAST,MAZED.132
MOVE WEST,MAZED.133
MOVE NORTH,MAZED.134
MOVE DOWN,MAZED.135
MOVE SE,MAZED.136
MOVE UP,MAZED.137
MOVE SOUTH,MAZED.138
MOVE NE,MAZED.112
AT MAZED.140
MOVE NORTH,MAZED.112
MOVE OUT,MAZED.112
AT MAZED.140
KEYWORD DROP,COINS
HAVE COINS
APPORT COINS,LIMBO
APPORT BATTERIES,HERE
SAY OK
SAY BATTERIES
QUIT
AT LIMBO
MOVE OUT,BUILDING *kludge*
AT SANDSTONE
MOVE WEST,MISTS
MOVE OUT,MISTS
MOVE MISTS,MISTS
AT MORION
MOVE SOUTH,MTKING
MOVE OUT,MTKING
AT VAULT
ANYOF UP,OUT,NORTH
IFEQ SAFE,1
SAY SAFE.BLOCKS
ELSE
GOTO MTKING
FIN
QUIT
AT VAULT
IFKEY BACK { bug fix. K.C.W. }
LDA I,INSAFE
IFEQ I,THERE
AND
IFEQ SAFE,0 { closed }
SAY CANTENTERSAFE
QUIT
FIN
FIN
KEYWORD IN
IFEQ SAFE,1
SET SAFEEXIT,HERE
GOTO INSAFE
ELSE
SAY CANTENTERSAFE
FIN
QUIT
AT INSAFE { inside the safe - strange stuff happens here!}
KEYWORD OUT {it's the only way you can go}
GOTO SAFEEXIT {which was set when you came in}
QUIT
AT INSAFE {special handling for the safe, within the safe!}
KEYWORD SAFE
IFEQ STATUS,1
NAME WHAT.DO,ARG2
ELSE
IFKEY CLOSE
SAY NO.HANDLE
ELSE
IFKEY OPEN
NAME ALREADY.OPEN,ARG2
ELSE
SAY HAH!
FIN
FIN
FIN
QUIT
AT CORRID.1
MOVE SOUTH,MTKING
MOVE NORTH,CORRID.2
AT CORRID.2
MOVE SOUTH,CORRID.1
MOVE WEST,CORRID.1
MOVE NORTH,TOOL
MOVE EAST,TOOL
AT TOOL
MOVE OUT,CORRID.2
MOVE SOUTH,CORRID.2
AT CORRID.3
MOVE SOUTH,MTKING
MOVE NORTH,SPHERICAL
MOVE EAST,CUBICLE
AT CUBICLE
MOVE OUT,CORRID.3
MOVE CORRIDOR,CORRID.3
MOVE SOUTH,CORRID.3
AT SPHERICAL
MOVE OUT,CORRID.3
MOVE NORTH,CORRID.3
MOVE CORRIDOR,CORRID.3
AT TUNNEL.1
MOVE SOUTH,GIANT
MOVE NORTH,GLASSY
AT GLASSY
MOVE SOUTH,TUNNEL.1
AT GLASSY
ANYOF NORTH,LAIR
IFNEAR OGRE
SAY OGRE.BLOCKS
ELSE
GOTO LAIR
FIN
QUIT
AT LAIR
MOVE EAST,BRINK.1
MOVE WEST,GLASSY
AT BRINK.1
MOVE NORTH,LAIR
MOVE WEST,BRINK.2
MOVE EAST,BRINK.3
MOVE NORTH,LAIR
AT BRINK.1
KEYWORD JUMP
CALL PLUNGE
AT BRINK.2
MOVE NORTH,BRINK.1
MOVE SOUTHEAST,ICE
AT BRINK.2
KEYWORD JUMP
CALL PLUNGE
AT ICE
MOVE NORTHWEST,BRINK.2
SMOVE DOWN,SLIDE,OOF
SMOVE EAST,SLIDE,OOF
SMOVE SLIDE,SLIDE,OOF
AT SLIDE
ANYOF SLIDE,UP,NORTH,CLIMB
SAY SLIDE.SLIPPERY
QUIT
AT SLIDE
MOVE SOUTH,ICECAVE.2A
MOVE NORTHWEST,ICECAVE.4
AT ICECAVE.1
MOVE WEST,ICECAVE.2
MOVE NORTH,ICECAVE.1A
AT ICECAVE.1A
MOVE SOUTH,ICECAVE.1
AT ICECAVE.2
MOVE EAST,ICECAVE.1
MOVE WEST,ICECAVE.3
MOVE NORTH,ICECAVE.2A
AT ICECAVE.2A
MOVE NORTH,SLIDE
MOVE SOUTH,ICECAVE.2
AT ICECAVE.3
MOVE EAST,ICECAVE.2
MOVE NORTH,ICECAVE.3A
AT ICECAVE.3A
MOVE SOUTH,ICECAVE.3
AT ICECAVE.4
MOVE EAST,SLIDE
MOVE WEST,ICECAVE.5
AT ICECAVE.5
MOVE NORTHEAST,ICECAVE.4
MOVE SOUTH,ICECAVE.6
AT ICECAVE.6
MOVE NORTH,ICECAVE.5
MOVE SOUTH,ICECAVE.7
MOVE WEST,ICECAVE.9
AT ICECAVE.7
MOVE NORTH,ICECAVE.6
AT ICECAVE.8
MOVE NORTH,ICECAVE.9
AT ICECAVE.9
MOVE EAST,ICECAVE.6
MOVE SOUTH,ICECAVE.8
MOVE NORTH,ICECAVE.10
AT ICECAVE.10
MOVE SOUTH,ICECAVE.9
MOVE NORTHWEST,ICECAVE.11
AT ICECAVE.11
MOVE EAST,ICECAVE.10
MOVE WEST,ICECAVE.12
AT ICECAVE.12
MOVE NORTHEAST,ICECAVE.11
MOVE SOUTH,ICECAVE.12A
MOVE WEST,ICECAVE.15
AT ICECAVE.12A
MOVE NORTH,ICECAVE.12
MOVE SOUTH,ICECAVE.13
AT ICECAVE.13
MOVE NORTH,ICECAVE.12A
AT ICECAVE.14
MOVE NORTH,ICECAVE.15A
AT ICECAVE.15
MOVE EAST,ICECAVE.12
MOVE SOUTH,ICECAVE.15A
MOVE NORTHWEST,ICECAVE.16
AT ICECAVE.15A
MOVE SOUTH,ICECAVE.14
MOVE NORTH,ICECAVE.15
AT ICECAVE.16
MOVE EAST,ICECAVE.15
MOVE WEST,ICECAVE.17
AT ICECAVE.17
MOVE NORTHEAST,ICECAVE.16
MOVE SOUTH,ICECAVE.18
AT ICECAVE.18
MOVE NORTH,ICECAVE.17
MOVE SOUTH,ICECAVE.19
MOVE WEST,ICECAVE.21
MOVE NORTHWEST,ICECAVE.22
AT ICECAVE.19
MOVE NORTH,ICECAVE.18
MOVE WEST,ICECAVE.20
AT ICECAVE.20
MOVE EAST,ICECAVE.19
MOVE NORTH,ICECAVE.21
AT ICECAVE.21
MOVE EAST,ICECAVE.18
MOVE SOUTH,ICECAVE.20
AT ICECAVE.22
MOVE SOUTHEAST,ICECAVE.18
MOVE NORTHWEST,ICECAVE.23
AT ICECAVE.23
MOVE EAST,ICECAVE.22
MOVE WEST,ICECAVE.24
AT ICECAVE.24
MOVE NORTHEAST,ICECAVE.23
MOVE SOUTH,ICECAVE.25
MOVE WEST,ICECAVE.29
AT ICECAVE.25
MOVE NORTH,ICECAVE.24
MOVE SOUTH,ICECAVE.26
MOVE WEST,ICECAVE.28
MOVE NORTHWEST,ICECAVE.28A
AT ICECAVE.26
MOVE NORTH,ICECAVE.25
MOVE NORTHWEST,ICECAVE.27
AT ICECAVE.27
MOVE SOUTHEAST,ICECAVE.26
MOVE NORTH,ICECAVE.28
AT ICECAVE.28
MOVE EAST,ICECAVE.25
MOVE SOUTH,ICECAVE.27
AT ICECAVE.28A
MOVE SOUTHEAST,ICECAVE.25
MOVE NORTH,ICECAVE.29
AT ICECAVE.29
MOVE EAST,ICECAVE.24
MOVE SOUTH,ICECAVE.28A
MOVE NORTHWEST,ICECAVE.30
AT ICECAVE.30
MOVE EAST,ICECAVE.29
SMOVE THURB,ICE,FOOF
AT BRINK.3
MOVE NORTH,BRINK.1
MOVE NORTHEAST,CRACK.1
MOVE CRACK,CRACK.1
AT BRINK.3
KEYWORD JUMP
CALL PLUNGE
AT CRACK.1
MOVE SOUTHWEST,BRINK.3
MOVE SOUTHEAST,CRACK.2
AT CRACK.2
MOVE WEST,CRANK.1
AT CRACK.2
KEYWORD SOUTH
IFNEAR SLIME
SAY SLIMED
CALL CORONER
ELSE
GOTO CRACK.3
FIN
QUIT
AT CRACK.3
MOVE NORTH,CRACK.2
MOVE SOUTH,CRACK.4
MOVE CRAWL,CRACK.4
AT CRACK.4
MOVE NORTH,CRACK.3
MOVE OUT,CRACK.3
MOVE CRAWL,CRACK.3
AT ARCH.COR.1
MOVE WEST,ARCHED
AT ARCH.COR.1
KEYWORD EAST
IFEQ QUICKSAND,0
OR
IFHAVE CLAM
OR
IFHAVE OYSTER
SET QUICKSAND,0
BIT QUICKSAND,SPECIAL1
SAY SCHLURP2
ELSE
SAY SCHLURP
BIS QUICKSAND,SPECIAL1
FIN
GOTO YLEM
CALL CORONER
ELSE
GOTO ARCH.COR.2
SET QUICKSAND,0
FIN
QUIT
AT ARCH.COR.2
MOVE NORTH,ARCH.FORK
AT ARCH.COR.2
KEYWORD WEST
IFEQ QUICKSAND,0
BIT QUICKSAND,SPECIAL1
SAY SCHLURP2
ELSE
SAY SCHLURP
BIS QUICKSAND,SPECIAL1
FIN
GOTO YLEM
CALL CORONER
ELSE
GOTO ARCH.COR.1
SET QUICKSAND,0
FIN
QUIT
AT ARCH.FORK
MOVE SOUTH,ARCH.COR.2
MOVE NORTH,FOURIER
MOVE EAST,JONAH
MOVE JONAH,JONAH
MOVE FOURIER,FOURIER
AT FOURIER
MOVE NORTHWEST,ARCH.FORK
MOVE SOUTHWEST,SHELF
AT SHELF
MOVE WEST,FOURIER
MOVE DOWN,BEACH
MOVE STEPS,BEACh
AT BEACH
ANYOF UP,SHELF,STEPS,WEST
SET DINGHY,1
GOTO SHELF
QUIT
AT BEACH
ANYOF WATER,FILL,DRINK
SAY SALT.H20.BAD
QUIT
AT JONAH
MOVE SOUTH,IN.JONAH
MOVE WEST,ARCH.FORK
AT IN.JONAH
MOVE NORTH,JONAH
MOVE OUT,JONAH
AT FACES
MOVE NORTH,BY.FIGURE
IFKEY BACK { bug fix. K.C.W. }
LDA I,BREATHTAKER
IFEQ I,THERE
AND
IFEQ GORGE,0 { no bridge }
SAY NO.ARCH
QUIT
FIN
FIN
AT FACES
ANYOF CROSS,GORGE,SOUTH
IFEQ GORGE,0
SAY NO.ARCH
ELSE
IFHAVE RING
IFHAVE SCEPTRE
SAY GHOST.BANG
GOTO YLEM
SET GORGE,0
CALL CORONER
ELSE
GOTO BREATHTAKER
FIN
ELSE
SAY FUMES.BURN
GOTO YLEM
CALL CORONER
FIN
FIN
QUIT
AT BY.FIGURE
IFEQ STATUE,1
MOVE NORTHWEST,PLAIN.1
MOVE NORTH,BASQUE.1
MOVE NORTHEAST,BANSHEE.1
FIN
MOVE SOUTH,FACES
AT PLAIN.1
MOVE SOUTH,BY.FIGURE
IFKEY NORTH
SET FOG.0
APPORT FOG,PLAIN.2
GOTO PLAIN.2
QUIT
FIN
AT PLAIN.2
ANYOF NORTH,EAST,SOUTH,WEST
ANYOF NE,NW,SE,SW
ITLIST I {if this turkey left anything here in the fog.}
IFNEAR I
AND
NOT
IFHAVE I
AND
BIT I,PORTABLE {he's going to lose it forever!}
APPORT I,YLEM
FIN
EOI
LDA I,EAST
ADD 1,GLOW
IFEQ I,ARG2
AND
IFEQ STATUS,2
OR
IFEQ I,ARG1
AND
IFNEAR GLOW {by luck? or did he know for sure?}
GOTO PLAIN.3
SET FOG.8 {so it's not obvious}
ELSE
GOTO PLAIN.2 {bad moves - stumble back here!}
FIN
QUIT
AT PLAIN.3
IFKEY DOWN
GOTO NONDESCRIPT
APPORT FOG,PLAIN.1
QUIT
FIN
AT PLAIN.3
ANYOF NORTH,EAST,SOUTH,WEST
ANYOF NE,NW,SE,SW
GOTO PLAIN.2
SET FOG,0 {so it starts changing again}
QUIT
AT NONDESCRIPT
MOVE NORTH,PENTAGRAM
MOVE PENTAGRAM,PENTAGRAM
AT NONDESCRIPT
ANYOF UP,SOUTH
APPORT FOG,PLAIN.2
GOTO PLAIN.3
QUIT
AT PENTAGRAM
KEYWORD FLASK
ANYOF DROP,THROW
HAVE FLASK
IFEQ FLASK,1
DROP FLASK
SAY SET.FLASK.DOWN
SET FLASK,0
QUIT
FIN
AT PENTAGRAM
MOVE WEST,NONDESCRIPT
MOVE OUT,NONDESCRIPT
MOVE NONDESCRIPT,NONDESCRIPT
MOVE NORTH,CHIMNEY
MOVE CRACK,CHIMNEY
MOVE CHIMNEY,CHIMNEY
AT CHIMNEY
MOVE UP,TUBE
MOVE CLIMB,TUBE
MOVE TUBE,TUBE
MOVE SOUTH,PENTAGRAM
MOVE PENTAGRAM,PENTAGRAM
MOVE CRACK,PENTAGRAM
AT TUBE
MOVE DOWN,CHIMNEY
MOVE CHIMNEY,CHIMNEY
MOVE CLIMB,CHIMNEY
MOVE TUBE,TUBE.SLIDE
MOVE SLIDE,TUBE.SLIDE
MOVE SOUTH,TUBE.SLIDE
AT TUBE.SLIDE
SMOVE SOUTH,PLAIN.1,OOF
SMOVE DOWN,PLAIN.1,OOF
SMOVE SLIDE,PLAIN.1,OOF
MOVE NORTH,TUBE
MOVE CHIMNEY,CHIMNEY
MOVE TUBE,CHIMNEY
AT BASQUE.1
MOVE SOUTH,BY.FIGURE
IFKEY NORTH
GOTO BASQUE.2
ADD BASILISK,1
IFEQ BASILISK,1
SAY BAS.GRUMBLE
FIN
QUIT
FIN
AT BASQUE.2
MOVE NORTH,BASQUE.FORK
IFKEY SOUTH
SUB BASILISK,1
IFEQ BASILISK,0
IFHAVE PLATE
SAY PETRIFY.SELF
SET BASILISK,2
ELSE
SAY PETRIFY.ME
CALL CORONER
FIN
FIN
GOTO BASQUE.1
QUIT
FIN
AT BASQUE.FORK
MOVE NORTH,PEELGRUNT
MOVE PEELGRUNT,PEELGRUNT
MOVE SOUTH,BASQUE.2
MOVE DOWn,ON.STEPS
MOVE STEPS,ON.STEPS
AT PEELGRUNT
ANYOF SOUTH,OUT.FORK
IFEQ SAFE,1
SAY SAFE.BLOCKS
ELSE
GOTO BASQUE.FORK
FIN
QUIT
AT PEELGRUNT
IFKEY BACK { bug fix. K.C.W. }
LDA I,INSAFE
IFEQ I,THERE
AND
IFEQ SAFE,0 { closed }
SAY CANTENTERSAFE
QUIT
FIN
FIN
KEYWORD IN
IFEQ SAFE,1
SET SAFEEXIT,HERE
GOTO INSAFE
ELSE
SAY CANTENTERSAFE
FIN
QUIT
AT ON.STEPS
MOVE UP,BASQUE.FORK
MOVE DOWN,STEPS.EXIT
MOVE STEPS,STEPS.EXIT
AT STEPS.EXIT
MOVE UP,ON.STEPS
MOVE DOWN,STORAGE
MOVE NORTH,FAKE.Y2
MOVE STEPS,STORAGE
MOVE EXIT,FAKE.Y2
AT STORAGE
MOVE UP,STEPS.EXIT
MOVE STEPS,STEPS.EXIT
AT FAKE.Y2
MOVE SOUTH,STEPS.EXIT
MOVE WEST,CATACOMBS.1
MOVE EAST,FAKE.JUMBLE
AT FAKE.Y2
ANYOF PLUGH,PLOVER
BIT ADMIN,NOMAGIC
SAY NOTHING
ELSE
SAY FOOF
GOTO PLATFORM
FIN
QUIT
AT FAKE.JUMBLE
MOVE DOWN,FAKE.Y2
MOVE WEST,FAKE.Y2
MOVE UP,CATACOMBS.1
AT AUDIENCE
MOVE EAST,AUDIENCE.E
MOVE WEST,CATACOMBS.11
AT AUDIENCE.E
MOVE WEST.AUDIENCE
AT CATACOMBS.1
MOVE SOUTH,CATACOMBS.2
ANYOF NORTH,NW,WEST,SW,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.1
QUIT
AT CATACOMBS.2
MOVE SW,CATACOMBS.3
ANYOF NORTH,NW,WEST,SOUTH,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.1
QUIT
AT CATACOMBS.3
MOVE NW,CATACOMBS.4
ANYOF NORTH,WEST,SW,SOUTH,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.2
QUIT
AT CATACOMBS.4
MOVE SOUTH,CATACOMBS.5
ANYOF NORTH,NW,WEST,SW,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.3
QUIT
AT CATACOMBS.5
MOVE DOWN,CATACOMBS.6
ANYOF NORTH,NW,WEST,SW,SOUTH,SE,EAST,NE,UP
GOTO CATACOMBS.4
QUIT
AT CATACOMBS.6
MOVE WEST,CATACOMBS.7
ANYOF NORTH,NW,SW,SOUTH,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.5
QUIT
AT CATACOMBS.7
MOVE NW,CATACOMBS.8
ANYOF NORTH,WEST,SW,SOUTH,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.6
QUIT
AT CATACOMBS.8
MOVE NORTH,CATACOMBS.9
ANYOF NW,WEST,SW,SOUTH,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.7
QUIT
AT CATACOMBS.9
MOVE SOUTH,CATACOMBS.10
ANYOF NORTH,NW,WEST,SW,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.8
QUIT
AT CATACOMBS.10
MOVE NORTH,CATACOMBS.11
ANYOF NW,WEST,SW,SOUTH,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.9
QUIT
AT CATACOMBS.11
MOVE SW.CATACOMBS.12
MOVE EAST,AUDIENCE
ANYOF NORTH,NW,WEST,SOUTH,SE,NE,UP,DOWN
GOTO CATACOMBS.10
QUIT
AT CATACOMBS.12
MOVE EAST,CATACOMBS.13
ANYOF NORTH,NW,WEST,SW,SOUTH,SE,NE,UP,DOWN
GOTO CATACOMBS.11
QUIT
AT CATACOMBS.13
MOVE SE,CATACOMBS.14
ANYOF NORTH,NW,WEST,SW,SOUTH,EAST,NE,UP,DOWN
GOTO CATACOMBS.12
QUIT
AT CATACOMBS.14
MOVE NE,CATACOMBS.15
ANYOF NORTH,NW,WEST,SW,SOUTH,SE,EAST,UP,DOWN
GOTO CATACOMBS.13
QUIT
AT CATACOMBS.15
MOVE EAST,CATACOMBS.16
ANYOF NORTH,NW,WEST,SW,SOUTH,SE,NE,UP,DOWN
GOTO CATACOMBS.14
QUIT
AT CATACOMBS.16
MOVE SE,CATACOMBS.17
ANYOF NORTH,NW,WEST,SW,SOUTH,EAST,NE,UP,DOWN
GOTO CATACOMBS.15
QUIT
AT CATACOMBS.17
MOVE DOWN,CATACOMBS.18
ANYOF NORTH,NW,WEST,SW,SOUTH,SE,EAST,NE,UP
GOTO CATACOMBS.16
QUIT
AT CATACOMBS.18
MOVE SOUTH,CATACOMBS.19
ANYOF NORTH,NW,WEST,SW,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.17
QUIT
AT CATACOMBS.19
MOVE NORTH,FAKE.Y2
ANYOF NW,WEST,SW,SOUTH,SE,EAST,NE,UP,DOWN
GOTO CATACOMBS.18
QUIT
AT BANSHEE.1
MOVE NORTHWEST,BY.FIGURE
MOVE NORTH,GOLDEN
MOVE GOLDEN,GOLDEN
AT GOLDEN
MOVE NORTHEAST,ARABESQUE
MOVE NORTHWEST,TRANSLUCENT
MOVE ARABESQUE,ARABESQUE
MOVE TRANSLUCENT,TRANSLUCENT
MOVE SOUTH,BANSHEE.1
AT ARABESQUE
MOVE SOUTH,GOLDEN
MOVE OUT,GOLDEN
MOVE GOLDEN,GOLDEN
AT TRANSLUCENT
ANYOF OUT,EAST,GOLDEN
NOT
BIT GOBLINS,SPECIAL1
BIS GOBLINS,SPECIAL1
APPORT GOBLINS,HERE
SET GOBLINS,-1
FIN
GOTO GOLDEN
QUIT
AT PLATFORM
SMOVE PLUGH,FAKE.Y2,FOOF
SMOVE PLOVER,FAKE.Y2,FOOF
AT PLATFORM
ANYOF DOWN,CLIMB,NORTH,SOUTH,EAST,WEST,NORTHEAST
ANYOF NORTHWEST,SOUTHEAST,SOUTHWEST,JUMP
SAY SIZZLE
GOTO YLEM
CALL CORONER
AT CYLINDRICAL
ANYOF ZORTON,XYZZY,THURB,SNOEZE,SAMOHT,PLUGH,NOSIDE,MELENKURION
ANYOF KNERL,KLAETU,FOO,FOE,FIE,FEE,BLERBI,PHUGGG
IFKEY SAY
SET I,ARG2
ELSE
IFEQ STATUS,1
SET I,ARG1
ELSE
SET I,0
FIN
FIN
LDA J,ZORTON
SUB I,J
IFEQ I,ESCAPE
IFKEY BLERBI
SET CLOSURE,4
SET FOOF
GOTO ROAD
ELSE
SAY OK!
ADD ESCAPE,1
FIN
ELSE
SET ESCAPE,0
SAY NOTHING
FIN
QUIT
VERB SAY,CHANT,SING,UTTER,MUMBLE
VERB SAVE,SUSPEND,PAUSE
VERB RESTORE
VERB UPSTREAM
VERB DOWNSTREAM
VERB FORWARD,CONTINUE,ONWARD
VERB BACK,RETURN,RETREAT
VERB OUT,OUTSIDE,EXIT,LEAVE
VERB ENTRANCE
VERB GULLY
VERB STREAM
VERB ROCK,ROCKS
VERB BED,STREAMBED
VERB CRAWL,CRAWLS
VERB IN,INWARD,INSIDE,ENTER
VERB SURFACE
VERB NULL,NOWHERE
VERB PASSAGE,TUNNEL
VERB VIEW
VERB HOLE
VERB STAIRS
VERB UP,UPWARD,U,ABOVE,ASCEND
VERB DOWN,D,DOWNWARDS,DESCEND
VERB OUTDOORS
VERB CRACK
VERB DOME
VERB LEFT
VERB RIGHT
VERB HALL
VERB JUMP
VERB CROSS,ACROSS,OVER
VERB EAST,E
VERB WEST,W
VERB NORTH,N
VERB SOUTH,S
VERB NE,NORTHEAST
VERB SE,SOUTHEAST
VERB SW,SOUTHWEST
VERB NW,NORTHWEST
VERB SECRET
VERB CLIMB
VERB LOOK,EXAMINE,TOUCH,DESCRIBE
VERB GET,CARRY,TAKE,KEEP,CATCH,STEAL,CAPTURE,TOTE
VERB DROP,RELEASE,FREE,DISCARD,DUMP
VERB OPEN,UNLOCK
VERB CLOSE,LOCK
VERB ON,LIGHT
VERB OFF,EXTINGUISH
VERB WAVE,SHAKE,SWING
VERB PLACATE,CALM,TAME
VERB WALK,RUN,TRAVEL,GO,PROCEED,EXPLORE,GOTO,FOLLOW,TURN
VERB KILL,ATTACK,FIGHT,HIT,STRIKE,SLAY
VERB POUR
VERB EAT,DEVOUR
VERB DRINK
VERB RUB
VERB THROW,TOSS
VERB QUIT,STOP,Q
VERB FIND,WHERE
VERB INVENTORY
VERB FEED
VERB FILL
VERB SCORE
VERB BRIEF
VERB READ,PERUSE
VERB BREAK,SHATTER,SMASH
VERB RIDE
VERB HOURS
VERB FUM
VERB SESAME,OPENSESAME,ABRA,ABRACADABRA,SHAZAM,HOCUS,POCUS,CADABRA
VERB HELP,?
VERB TREE,TREES
VERB DIG,EXCAVATE
VERB LOST
VERB MIST
VERB INFO,INFORMATION
VERB SWIM
VERB LPSD
VERB FAST
VERB FULL
VERB NEWS
VERB CAVE
VERB FIX,REPAIR
VERB WIZARD
VERB ZORTON
VERB XYZZY
VERB THURB
VERB SNOEZE
VERB SAMOHT
VERB PLUGH
VERB PHUGGG
VERB NOSIDE
VERB MELENKURION
VERB KNERL
VERB KLAETU
VERB FOO
VERB FOE
VERB FIE
VERB FEE
VERB BLERBI
INITIAL
SAY BLANK
RANDOM I,100 {kick the random number generator}
ITOBJ I
APPORT I,LIMBO
EOI
INITIAL * Initialize portability of some objects
BIS KEYS,PORTABLE
BIS LAMP,PORTABLE
BIS CASE,PORTABLE
BIS ROD,PORTABLE
BIS DYNAMITE,PORTABLE
BIS BIRD,PORTABLE
BIS PILLOW,PORTABLE
BIS CLAM,PORTABLE
BIS OYSTER,PORTABLE
BIS MAGAZINES,PORTABLE
BIS KNIFE,PORTABLE
BIS FOOD,PORTABLE
BIS BOTTLE,PORTABLE
BIS WATER,PORTABLE
BIS OIL,PORTABLE
BIS AXE,PORTABLE
BIS BEAR,PORTABLE
BIS BATTERIES,PORTABLE
BIS GOLD,PORTABLE
BIS DIAMONDS,PORTABLE
BIS SILVER,PORTABLE
BIS JEWELRY,PORTABLE
BIS COINS,PORTABLE
BIS CHEST,PORTABLE
BIS EGGS,PORTABLE
BIS TRIDENT,PORTABLE
BIS VASE,PORTABLE
BIS POTTERY,PORTABLE
BIS EMERALD,PORTABLE
BIS PYRAMID,PORTABLE
BIS PEARL,PORTABLE
BIS RUG,PORTABLE
BIS SPICES,PORTABLE
BIS CHAIN,PORTABLE
BIS RING,PORTABLE
BIS SPYGLASS,PORTABLE
BIS BAG,PORTABLE
BIS HELMET,PORTABLE
BIS TEETH,PORTABLE
BIS VIAL,PORTABLE
BIS MUSHROOM,PORTABLE
BIS SCULPTURE,PORTABLE
BIS BRACELET,PORTABLE
BIS CASKET,PORTABLE
BIS SWORD,PORTABLE
BIS CROWN,PORTABLE
BIS SCEPTRE,PORTABLE
BIS YACHT,PORTABLE
BIS FLASK,PORTABLE
BIS PLATE,PORTABLE
BIS BEADS,PORTABLE
INIT * Set FREEBIE objects
BIS BIRD,FREEBIE
BIS OIL,FREEBIE
BIS WATER,FREEBIE
BIS BEAR,FREEBIE
INIT * Specify which rooms are self-lit (lamp not needed)
BIS ROAD,LIT
BIS HILL,LIT
BIS BUILDING,LIT
BIS VALLEY,LIT
BIS FOREST,LIT
BIS FOREST2,LIT
BIS SLIT,LIT
BIS FAKE.SLIT,LIT
BIS DEPRESSION,LIT
BIS INCAVE,LIT
BIS COBBLES,LIT
BIS PLOVER,LIT
BIS BREATHTAKER,LIT
BIS LAIR,LIT
BIS SHELF,LIT
BIS BEACH,LIT
BIS PLAIN.2,LIT
BIS PLAIN.3,LIT
BIS FACES,LIT
BIS BY.FIGURE,LIT
BIS AUDIENCE,LIT
BIS TRANSLUCENT,LIT
BIS PLATFORM,LIT
BIS CYLINDRICAL,LIT
BIS TREASUREROOM,LIT
BIS BALCONY,LIT
INITIAL * Set dwarf-inhibits for appropriate places
BIS INCAVE,NODWARF
BIS COBBLES,NODWARF
BIS ALCOVE,NODWARF
BIS PLOVER,NODWARF
BIS DARK,NODWARF
BIS SWOFCHASM,NODWARF
BIS NEOFCHASM,NODWARF
BIS CORRIDOR,NODWARF
BIS FORK,NODWARF
BIS WARMJUNCTN,NODWARF
BIS BREATHTAKER,NODWARF
BIS BOULDERS,NODWARF
BIS LIMESTONE,NODWARF
BIS BARREN,NODWARF
BIS BEARHERE,NODWARF
BIS MAZEA.114,NODWARF
BIS EASTPIT,NODWARF
BIS WESTPIT,NODWARF
BIS STREAMPIT,NODWARF
BIS FACES,NODWARF
BIS BY.FIGURE,NODWARF
BIS PLAIN.1,NODWARF
BIS PLAIN.2,NODWARF
BIS PLAIN.3,NODWARF
BIS NONDESCRIPT,NODWARF
BIS PENTAGRAM,NODWARF
BIS CHIMNEY,NODWARF
BIS TUBE,NODWARF
BIS TUBE.SLIDE,NODWARF
BIS BASQUE.1,NODWARF
BIS BASQUE.2,NODWARF
BIS BASQUE.FORK,NODWARF
BIS PEELGRUNT,NODWARF
BIS ON.STEPS,NODWARF
BIS STEPS.EXIT,NODWARF
BIS STORAGE,NODWARF
BIS FAKE.Y2,NODWARF
BIS FAKE.JUMBLE,NODWARF
BIS CATACOMBS.1,NODWARF
BIS CATACOMBS.2,NODWARF
BIS CATACOMBS.3,NODWARF
BIS CATACOMBS.4,NODWARF
BIS CATACOMBS.5,NODWARF
BIS CATACOMBS.6,NODWARF
BIS CATACOMBS.7,NODWARF
BIS CATACOMBS.8,NODWARF
BIS CATACOMBS.9,NODWARF
BIS CATACOMBS.10,NODWARF
BIS CATACOMBS.11,NODWARF
BIS CATACOMBS.12,NODWARF
BIS CATACOMBS.13,NODWARF
BIS CATACOMBS.14,NODWARF
BIS CATACOMBS.15,NODWARF
BIS CATACOMBS.16,NODWARF
BIS CATACOMBS.17,NODWARF
BIS CATACOMBS.18,NODWARF
BIS CATACOMBS.19,NODWARF
BIS AUDIENCE,NODWARF
BIS AUDIENCE.E,NODWARF
BIS BANSHEE.1,NODWARF
BIS GOLDEN,NODWARF
BIS ARABESQUE,NODWARF
BIS TRANSLUCENT,NODWARF
BIS RESERVOIR.N,NODWARF
BIS WARM,NODWARF
BIS BALCONY,NODWARF
BIS INSAFE,NODWARF
INITIAL (Specify what places aren't in the cave)
BIS ROAD,NOTINCAVE
BIS HILL,NOTINCAVE
BIS BUILDING,NOTINCAVE
BIS VALLEY,NOTINCAVE
BIS FOREST,NOTINCAVE
BIS FOREST2,NOTINCAVE
BIS SLIT,NOTINCAVE
BIS DEPRESSION,NOTINCAVE
BIS FAKE.SLIT,NOTINCAVE
INITIAL {indicate where "BACK" command invalid}
*
* Most of the rooms in the mazes are NOBACK-type places to give
* the adventurer heartburn and a possible ulcer. The two rooms that
* are at the very entrances of their respective mazes (MAXEA.42 and
* MAZED.107) are not NOBACK-types, so that if you accidentally
* wander into the mazes you can escape quickly by saying "GO BACK".
* You still can't use "BACK" when in these rooms if you got there
* from another room in the maze, because the room you came from
* has the "NOBACK" bit set.
*
BIS MAZEA.43,NOBACK
BIS MAZEA.44,NOBACK
BIS MAZEA.45,NOBACK
BIS MAZEA.46,NOBACK
BIS MAZEA.47,NOBACK
BIS MAZEA.48,NOBACK
BIS MAZEA.49,NOBACK
BIS MAZEA.50,NOBACK
BIS MAZEA.51,NOBACK
BIS MAZEA.52,NOBACK
BIS MAZEA.53,NOBACK
BIS MAZEA.54,NOBACK
BIS MAZEA.55,NOBACK
BIS MAZEA.56,NOBACK
BIS MAZEA.57.PIT,NOBACK
BIS MAZEA.58,NOBACK
BIS MAZEA.80,NOBACK
BIS MAZEA.81,NOBACK
BIS MAZEA.82,NOBACK
BIS MAZEA.83,NOBACK
BIS MAZEA.84,NOBACK
BIS MAZEA.85,NOBACK
BIS MAZEA.86,NOBACK
BIS MAZEA.87,NOBACK
BIS MAZED.112,NOBACK
BIS MAZED.114,NOBACK
BIS MAZED.131,NOBACK
BIS MAZED.132,NOBACK
BIS MAZED.133,NOBACK
BIS MAZED.134,NOBACK
BIS MAZED.135,NOBACK
BIS MAZED.136,NOBACK
BIS MAZED.137,NOBACK
BIS MAZED.138,NOBACK
BIS MAZED.139,NOBACK
BIS MAZED.140,NOBACK
BIS INCLINE,NOBACK
BIS STALACT,NOBACK
BIS SWOFCHASM,NOBACK
BIS NEOFCHASM,NOBACK
BIS WITTSEND,NOBACK
BIS ALCOVE,NOBACK
BIS PLOVER,NOBACK
BIS DARK,NOBACK
BIS NSCANYONWIDE,NOBACK
BIS ICECAVE.1,NOBACK
BIS ICECAVE.2,NOBACK
BIS ICECAVE.3,NOBACK
BIS ICECAVE.4,NOBACK
BIS ICECAVE.5,NOBACK
BIS ICECAVE.6,NOBACK
BIS ICECAVE.7,NOBACK
BIS ICECAVE.8,NOBACK
BIS ICECAVE.9,NOBACK
BIS ICECAVE.10,NOBACK
BIS ICECAVE.11,NOBACK
BIS ICECAVE.12,NOBACK
BIS ICECAVE.13,NOBACK
BIS ICECAVE.14,NOBACK
BIS ICECAVE.15,NOBACK
BIS ICECAVE.16,NOBACK
BIS ICECAVE.17,NOBACK
BIS ICECAVE.18,NOBACK
BIS ICECAVE.19,NOBACK
BIS ICECAVE.20,NOBACK
BIS ICECAVE.21,NOBACK
BIS SLIDE,NOBACK
BIS ICE,NOBACK
BIS CATACOMBS.1,NOBACK
BIS CATACOMBS.2,NOBACK
BIS CATACOMBS.3,NOBACK
BIS CATACOMBS.4,NOBACK
BIS CATACOMBS.5,NOBACK
BIS CATACOMBS.6,NOBACK
BIS CATACOMBS.7,NOBACK
BIS CATACOMBS.8,NOBACK
BIS CATACOMBS.9,NOBACK
BIS CATACOMBS.10,NOBACK
BIS CATACOMBS.11,NOBACK
BIS CATACOMBS.12,NOBACK
BIS CATACOMBS.13,NOBACK
BIS CATACOMBS.14,NOBACK
BIS CATACOMBS.15,NOBACK
BIS CATACOMBS.16,NOBACK
BIS CATACOMBS.17,NOBACK
BIS CATACOMBS.18,NOBACK
BIS CATACOMBS.19,NOBACK
BIS FACES,NOBACK
BIS PLAIN.1,NOBACK
BIS PLAIN.2,NOBACK
BIS BASQUE.1,NOBACK
BIS CYLINDRICAL,NOBACK
BIS PLATFORM,NOBACK
BIS SHELL,NOBACK {so he can't sneak out with the clam}
BIS ARCH.COR.1,NOBACK {so he can't retreat over the quicksand}
BIS ARCH.COR.2,NOBACK {so he can't retreat over the quicksand}
INITIAL {set in-maze bits}
BIS MAZEA.42,INMAZE
BIS MAZEA.43,INMAZE
BIS MAZEA.44,INMAZE
BIS MAZEA.45,INMAZE
BIS MAZEA.46,INMAZE
BIS MAZEA.47,INMAZE
BIS MAZEA.48,INMAZE
BIS MAZEA.49,INMAZE
BIS MAZEA.50,INMAZE
BIS MAZEA.51,INMAZE
BIS MAZEA.52,INMAZE
BIS MAZEA.53,INMAZE
BIS MAZEA.54,INMAZE
BIS MAZEA.55,INMAZE
BIS MAZEA.56,INMAZE
BIS MAZEA.57.PIT,INMAZE
BIS MAZEA.58,INMAZE
BIS MAZEA.80,INMAZE
BIS MAZEA.81,INMAZE
BIS MAZEA.82,INMAZE
BIS MAZEA.83,INMAZE
BIS MAZEA.84,INMAZE
BIS MAZEA.85,INMAZE
BIS MAZEA.86,INMAZE
BIS MAZEA.87,INMAZE
BIS MAZED.107,INMAZE
BIS MAZED.112,INMAZE
BIS MAZED.114,INMAZE
BIS MAZED.131,INMAZE
BIS MAZED.132,INMAZE
BIS MAZED.133,INMAZE
BIS MAZED.134,INMAZE
BIS MAZED.135,INMAZE
BIS MAZED.136,INMAZE
BIS MAZED.137,INMAZE
BIS MAZED.138,INMAZE
BIS MAZED.139,INMAZE
BIS MAZED.140,INMAZE
BIS SLIDE,INMAZE
BIS ICECAVE.1,INMAZE
BIS ICECAVE.1A,INMAZE
BIS ICECAVE.2,INMAZE
BIS ICECAVE.2A,INMAZE
BIS ICECAVE.3,INMAZE
BIS ICECAVE.3A,INMAZE
BIS ICECAVE.4,INMAZE
BIS ICECAVE.5,INMAZE
BIS ICECAVE.6,INMAZE
BIS ICECAVE.7,INMAZE
BIS ICECAVE.8,INMAZE
BIS ICECAVE.9,INMAZE
BIS ICECAVE.10,INMAZE
BIS ICECAVE.11,INMAZE
BIS ICECAVE.12,INMAZE
BIS ICECAVE.12A,INMAZE
BIS ICECAVE.13,INMAZE
BIS ICECAVE.14,INMAZE
BIS ICECAVE.15,INMAZE
BIS ICECAVE.15A,INMAZE
BIS ICECAVE.16,INMAZE
BIS ICECAVE.17,INMAZE
BIS ICECAVE.18,INMAZE
BIS ICECAVE.19,INMAZE
BIS ICECAVE.20,INMAZE
BIS ICECAVE.21,INMAZE
BIS ICECAVE.22,INMAZE
BIS ICECAVE.23,INMAZE
BIS ICECAVE.24,INMAZE
BIS ICECAVE.25,INMAZE
BIS ICECAVE.26,INMAZE
BIS ICECAVE.27,INMAZE
BIS ICECAVE.28,INMAZE
BIS ICECAVE.28A,INMAZE
BIS ICECAVE.29,INMAZE
BIS ICECAVE.30,INMAZE
INITIAL {specify rooms with only 1 exit}
BIS GOLDROOM,ONE.EXIT
BIS SOUTHSIDE,ONE.EXIT
BIS SANDSTONE,ONE.EXIT
BIS WINDOW,ONE.EXIT
BIS WINDOW2,ONE.EXIT
BIS MAZEA.46,ONE.EXIT
BIS MAZEA.47,ONE.EXIT
BIS MAZEA.48,ONE.EXIT
BIS MAZEA.49,ONE.EXIT
BIS MAZEA.54,ONE.EXIT
BIS MAZEA.56,ONE.EXIT
BIS MAZEA.58,ONE.EXIT
BIS DEADEND1,ONE.EXIT
BIS DEADEND2,ONE.EXIT
BIS DEADEND3,ONE.EXIT
BIS MAZEA.81,ONE.EXIT
BIS MAZEA.82,ONE.EXIT
BIS MAZEA.85,ONE.EXIT
BIS MAZEA.86,ONE.EXIT
BIS SOFT,ONE.EXIT
BIS CULDESAC,ONE.EXIT
BIS RESERVOIR,ONE.EXIT
BIS BALCONY,ONE.EXIT
BIS MAZED.140,ONE.EXIT
BIS INSAFE,ONE.EXIT
BIS TOOL,ONE.EXIT
BIS CUBICLE,ONE.EXIT
BIS SPHERICAL,ONE.EXIT
BIS ICECAVE.1A,ONE.EXIT
BIS ICECAVE.3A,ONE.EXIT
BIS ICECAVE.7,ONE.EXIT
BIS ICECAVE.8,ONE.EXIT
BIS ICECAVE.13,ONE.EXIT
BIS ICECAVE.14,ONE.EXIT
BIS CRACK.4,ONE.EXIT
BIS BEACH,ONE.EXIT
INITIAL {specify openable objects}
BIS GRATE,OPENABLE
BIS DOOR,OPENABLE
BIS CLAM,OPENABLE
BIS OYSTER,OPENABLE
BIS FLASK,OPENABLE
BIS CHAIN,OPENABLE
BIS SAFE,OPENABLE
BIS VIAL,OPENABLE
INITIAL {specify invisible objects}
BIS STEPS,INVISIBLE
BIS FISSURE,INVISIBLE
BIS MIRROR,INVISIBLE
BIS STALACTITE,INVISIBLE
BIS DRAWING,INVISIBLE
BIS PIRATE,INVISIBLE
BIS STATUE,INVISIBLE
BIS VOLCANO,INVISIBLE
BIS QUICKSAND,INVISIBLE
BIS THRONE,INVISIBLE
BIS CARPET,INVISIBLE
BIS DWARF,INVISIBLE
BIS KNIFE,INVISIBLE
BIS FOG,INVISIBLE
BIS PLANT2,INVISIBLE
INITIAL {set hint-exists bits}
BIS MAZEA.42,HINTABLE
BIS MAZEA.43,HINTABLE
BIS MAZEA.44,HINTABLE
BIS MAZEA.45,HINTABLE
BIS MAZEA.46,HINTABLE
BIS MAZEA.47,HINTABLE
BIS MAZEA.48,HINTABLE
BIS MAZEA.49,HINTABLE
BIS MAZEA.50,HINTABLE
BIS MAZEA.51,HINTABLE
BIS MAZEA.52,HINTABLE
BIS MAZEA.53,HINTABLE
BIS MAZEA.54,HINTABLE
BIS MAZEA.55,HINTABLE
BIS MAZEA.56,HINTABLE
BIS MAZEA.57.PIT,HINTABLE
BIS MAZEA.58,HINTABLE
BIS MAZEA.80,HINTABLE
BIS MAZEA.81,HINTABLE
BIS MAZEA.82,HINTABLE
BIS MAZEA.83,HINTABLE
BIS MAZEA.84,HINTABLE
BIS MAZEA.85,HINTABLE
BIS MAZEA.86,HINTABLE
BIS MAZEA.87,HINTABLE
BIS MAZED.107,HINTABLE
BIS MAZED.112,HINTABLE
BIS MAZED.114,HINTABLE
BIS MAZED.131,HINTABLE
BIS MAZED.132,HINTABLE
BIS MAZED.133,HINTABLE
BIS MAZED.134,HINTABLE
BIS MAZED.135,HINTABLE
BIS MAZED.136,HINTABLE
BIS MAZED.137,HINTABLE
BIS MAZED.138,HINTABLE
BIS MAZED.139,HINTABLE
BIS MAZED.140,HINTABLE
BIS BIRDCHAMBER,HINTABLE
BIS DEPRESSION,HINTABLE
BIS MTKING,HINTABLE
BIS WITTSEND,HINTABLE
BIS PLOVER,HINTABLE
BIS ALCOVE,HINTABLE
BIS DARK,HINTABLE
BIS SLIDE,HINTABLE
BIS ICECAVE.1,HINTABLE
BIS ICECAVE.1A,HINTABLE
BIS ICECAVE.2,HINTABLE
BIS ICECAVE.2A,HINTABLE
BIS ICECAVE.3,HINTABLE
BIS ICECAVE.3A,HINTABLE
BIS ICECAVE.4,HINTABLE
BIS ICECAVE.5,HINTABLE
BIS ICECAVE.6,HINTABLE
BIS ICECAVE.7,HINTABLE
BIS ICECAVE.8,HINTABLE
BIS ICECAVE.9,HINTABLE
BIS ICECAVE.10,HINTABLE
BIS ICECAVE.11,HINTABLE
BIS ICECAVE.12,HINTABLE
BIS ICECAVE.12A,HINTABLE
BIS ICECAVE.13,HINTABLE
BIS ICECAVE.14,HINTABLE
BIS ICECAVE.15,HINTABLE
BIS ICECAVE.15A,HINTABLE
BIS ICECAVE.16,HINTABLE
BIS ICECAVE.17,HINTABLE
BIS ICECAVE.18,HINTABLE
BIS ICECAVE.19,HINTABLE
BIS ICECAVE.20,HINTABLE
BIS ICECAVE.21,HINTABLE
BIS ICECAVE.22,HINTABLE
BIS ICECAVE.23,HINTABLE
BIS ICECAVE.24,HINTABLE
BIS ICECAVE.25,HINTABLE
BIS ICECAVE.26,HINTABLE
BIS ICECAVE.27,HINTABLE
BIS ICECAVE.28,HINTABLE
BIS ICECAVE.28A,HINTABLE
BIS ICECAVE.29,HINTABLE
BIS ICECAVE.30,HINTABLE
BIS ICECAVE.PLAIN.2,HINTABLE
INITIAL {Declare water-holes}
BIS BUILDING,H20HERE
BIS ROAD,H20HERE
BIS VALLEY,H20HERE
BIS SLIT,H20HERE
BIS STREAMPIT,H20HERE
BIS CAVERN,H20HERE
BIS RESERVOIR,H20HERE
BIS RESERVOIR.N,H20HERE
INIT {indicate where throwing things sends them elsewhere}
BIS PIT,THROWER
BIS EASTOFFISSURE,THROWER
BIS WESTOFFISSURE,THROWER
BIS WEND2PIT,THROWER
BIS EEND2PIT,THROWER
BIS LOWNSPASSAGE,THROWER
BIS WINDOW,THROWER
BIS WINDOW2,THROWER
BIS BRINK,THROWER
BIS DUSTY,THROWER
BIS MAZEA.57.PIT,THROWER
BIS SECRETNSCYN,THROWER
BIS SECRETNSCPAS,THROWER
BIS SECRETEW.TITE,THROWER
BIS INCLINE,THROWER
BIS CAVERN,THROWER
BIS MISTY,THROWER
BIS RESERVOIR,THROWER
BIS RESERVOIR.N,THROWER
BIS STALACT,THROWER
BIS BALCONY,THROWER
BIS SWOFCHASM,THROWER
BIS NEOFCHASM,THROWER
BIS BREATHTAKER,THROWER
BIS FACES,THROWER
BIS TUBE,THROWER
BIS TUBE.SLIDE,THROWER
BIS BASQUE.FORK,THROWER
BIS ON.STEPS,THROWER
BIS STEPS.EXIT,THROWER
BIS BRINK.1,THROWER
BIS BRINK.2,THROWER
BIS ICE,THROWER
BIS BRINK.3,THROWER
BIS SHELF,THROWER
BIS PLATFORM,THROWER
INITIAL * Declare the treasures
BIS GOLD,VALUED
BIS DIAMONDS,VALUED
BIS SILVER,VALUED
BIS JEWELRY,VALUED
BIS COINS,VALUED
BIS CHEST,VALUED
BIS EGGS,VALUED
BIS TRIDENT,VALUED
BIS VASE,VALUED
BIS EMERALD,VALUED
BIS PYRAMID,VALUED
BIS PEARL,VALUED
BIS RUG,VALUED
BIS SPICES,VALUED
BIS CHAIN,VALUED
BIS CASKET,VALUED
BIS SCULPTURE,VALUED
BIS BRACELET,VALUED
BIS RING,VALUED
BIS SPYGLASS,VALUED
BIS BAG,VALUED
BIS HELMET,VALUED
BIS CROWN,VALUED
BIS SCEPTRE,VALUED
BIS YACHT,VALUED
BIS BRACELET,VALUED
BIS BEADS,VALUED
INIT * Declare unstable objects
BIS CHEST,UNSTABLE
BIS SCULPTURE,UNSTABLE
BIS CASE,UNSTABLE
BIS CASKET,UNSTABLE
BIS TEETH,UNSTABLE
BIS MUSHROOM,UNSTABLE
BIS BAG,UNSTABLE
BIS CROWN,UNSTABLE
BIS YACHT,UNSTABLE
BIS PLATE,UNSTABLE
BIS BEADS,UNSTABLE
BIS FLASK,UNSTABLE
INITIAL {declare mortal (killable) things}
BIS TROLL,MORTAL
BIS DWARF,MORTAL
BIS DRAGON,MORTAL
BIS SNAKE,MORTAL
BIS BLOB,MORTAL
BIS BEAR,MORTAL
BIS CLAM,MORTAL
BIS OYSTER,MORTAL
BIS OGRE,MORTAL
BIS BIRD,MORTAL
BIS DJINN,MORTAL
BIS GOBLINS,MORTAL
BIS BASILISK,MORTAL
BIS GONG,MORTAL {strange but true - you can HIT GONG}
*
* Declare edible objects
*
BIS FOOD,EDIBLE
BIS MUSHROOM,EDIBLE
INITIAL * Move objects to their starting places
APPORT KEYS,BUILDING
APPORT LAMP,BUILDING
APPORT GRATE,DEPRESSION
APPORT CAGE,COBBLES
APPORT ROD,DEBRIS
APPORT STEPS,PIT
APPORT BIRD,BIRDCHAMBER
APPORT DOOR,IMMENSENSPASS
APPORT PILLOW,SOFT
APPORT SNAKE,MTKING
APPORT FISSURE,EASTOFFISSURE
APPORT TABLET,DARK
APPORT CLAM,SHELL
APPORT MAGAZINES,ANTEROOM
APPORT FOOD,BUILDING
APPORT BOTTLE,BUILDING
APPORT PLANT,WESTPIT
APPORT PLANT2,WEND2PIT
APPORT STALACTITE,STALACT
APPORT SHADOW,WINDOW
APPORT DRAWING,ORIENTAL
APPORT DRAGON,SECRETCYNNE1
APPORT CHASM,SWOFCHASM
APPORT TROLL,SWOFCHASM
APPORT BEAR,BEARHERE
APPORT VOLCANO,BREATHTAKER
APPORT MACHINE,MAZED.140
APPORT CARPET,SOFT
APPORT GOLD,GOLDROOM
APPORT DIAMONDS,WESTOFFISSURE
APPORT SILVER,LOWNSPASSAGE
APPORT JEWELRY,SOUTHSIDE
APPORT COINS,WESTSIDE
APPORT EGGS,GIANT
APPORT TRIDENT,CAVERN
APPORT VASE,ORIENTAL
APPORT EMERALD,PLOVER
APPORT PYRAMID,DARK
APPORT SPICES,BOULDERS
APPORT CHAIN,BEARHERE
APPORT SPYGLASS,IN.JONAH
APPORT BAG,BEACH
APPORT DINGHY,BEACH
APPORT HELMET,MORION
APPORT VIAL,SPHERICAL
APPORT MUSHROOM,CUBICLE
APPORT SCULPTURE,ICECAVE.14
APPORT CASKET,CRACK.4
APPORT SAFE,VAULT
APPORT QUICKSAND,ARCH.COR.1
APPORT SLIME,CRACK.2
APPORT SWORD,SANDSTONE
APPORT OGRE,GLASSY
APPORT THRONE,AUDIENCE.E
APPORT SKELETON,AUDIENCE.E
APPORT SCEPTRE,AUDIENCE.E
APPORT CROWN,INSAFE
APPORT STATUE,BY.FIGURE
APPORT FOG,PLAIN.2
APPORT YACHT,NONDESCRIPT
APPORT BRACELET,TRANSLUCENT
APPORT FLASK,ARABESQUE
APPORT BASILISK,BASQUE.1
APPORT PLATE,STORAGE
APPORT BEADS,BALCONY
APPORT GONG,RESERVOIR.N
INITIAL * Declare schizoid objects
BIS GRATE,SCHIZOID
BIS STEPS,SCHIZOID
BIS FISSURE,SCHIZOID
BIS PLANT2,SCHIZOID
BIS SHADOW,SCHIZOID
BIS DRAGON,SCHIZOID
BIS CHASM,SCHIZOID
BIS TROLL,SCHIZOID
BIS TROLL2,SCHIZOID
BIS QUICKSAND,SCHIZOID
BIS SAFE,SCHIZOID
BIS FOG,SCHIZOID {weird case - see PHOG routine}
BIS GORGE,SCHIZOID
BIS BASILISK,SCHIZOID
INITIAL * Wake up user and greet him.
RANDOM I,100 {kick the random number generator}
GOTO ROAD
LDA OK,OK!
RANDOM CLOCK,10
ADD CLOCK,15
SET LAMPLIFE,300
RANDOM DWARFCOUNT,3
ADD DWARFCOUNT,3
CHANCE 10 { up the chance just a little K.C.W }
RANDOM CAMEO.TIME,400
ADD CAMEO.TIME,100
ELSE
SET CAMEO.TIME,0
FIN
SET CHAIN,1
SET FOG,8
SET FLASK,1
SET INVCT,0
SET STRENGTH,7
SAY LOGON
EXECUTIVE 5,I {get prime-time flag}
IFGT I,0
LDA J,CAVE.NOT.OPEN-1
ADD J,I
SAY J
IFEQ I,1
EXECUTIVE 6,J
FIN
SAY BLANK
SAY CAN.DEMO
QUERY WANT.DEMO
SAY BLANK
SAY OK!
SAY BLANK
BIS ADMIN.DEMO
ELSE
SAY TA.TA
STOP
FIN
FIN
QUERY HITHERE
SAY INTRO
FIN
SAY BLANK
INITIAL
QUIT
NULL THE,A,IT,AN,THAT,THIS,TO
*
* Define control bits
*
* First: bits set in ARG1 and ARG2 to indicate word type
*
SYNON 15,OBJECT
SYNON 14,VERB
SYNON 13,PLACE
SYNON 12,BADWORD
*
* Next, bits set in STATUS variable
*
SYNON 0,MOVED * We moved last turn
SYNON 1,QUICKIE * BRIEF output mode in effect
SYNON 2,FASTMODE * FAST output mode in effect
SYNON 3,FULLDISP * Display full place description
*
* Next, bits related to places
*
SYNON 0,LIT * Place is self-illuminated
SYNON 1,BEENHERE * We've been here at least once
SYNON 2,NODWARF * Dwarves can't go here
SYNON 3,NOBACK * Can't use BACK to go to/from this place
SYNON 4,NOTINCAVE * This place is not in the cave
SYNON 5,HINTABLE * There may be a hint for this place
SYNON 6,H20HERE * Water is available here
SYNON 7,INMAZE * This room is in one of the mazes
SYNON 8,ONE.EXIT * Only one exit out of room - dwarves can block
* * your way and force you to fight them.
SYNON 9,THROWER * Throwing objects here will send them elsewhere.
* * unless you're throwing them at something
* * special (like a troll or dwarf).
*
* Next, bits related to objects
*
SYNON 0,PORTABLE * Object can be carried
SYNON 1,SEEN * We've seen the object
SYNON 2,VALUED * It's a treasure - must be left in the building
SYNON 3,SCHIZOID * It's schizoid - in 2 places at once
SYNON 4,UNSTABLE * Unstable objects get kicked from state 0
* into state 1 the first time they're picked
* up - applies only to objects that aren't
* special-cased anywhere in the code.
SYNON 5,MORTAL * This is a killable entity
SYNON 6,OPENABLE * Object can be opened/unlocked
SYNON 7,INVISIBLE * Object can't be seen.
SYNON 8,EDIBLE * Object can be eaten (food/mushroom)
SYNON 9,FREEBIE * Object is effectively weightless
SYNON 10,SPECIAL1 * Special control bit 1 - depends on context
SYNON 11,SPECIAL2 * Special control bit 2 - depends on context
*
* Define bits for the ADMIN variable
*
SYNON 0,DEMO * Demonstration game
SYNON 1,TICKER * Call TICK label after each move, if set.
SYNON 3,NOMAGIC * Magic words are being suppressed
SYNON 4,PANICED * He paniced during closure
SYNON 5,OLORIN * He's a wizard
SYNON 6,RANOUT * His lamp just died.
*
* Define administrative control parameters
*
SYNON 30,MINTIME {# of minutes you must wait after SAVE}
SYNON 30,MAX.DEMO {maximum # of moves in demo games}
SYNON 600,MAX.GAME {maximum # of moves in real games}
SYNON 20,HINT.COST {what each hint costs you}
*
* Define worth of each CLOSURE phase
*
SYNON 20,CLOSE.CREDIT {each phase of CLOSURE is worth 20 points}
*
* The phases of cave closure are as follows:
*
* 0 - cave open and operating normally
* 1 - ditto - all treasures are in well-house
* 2 - "Cave closing soon"
* 3 - "Cave closed" - in cylindrical room
* 4 - escaped from cylindrical room, back outside cave
* 5 - located the treasure room, wins game!
*
DEFINE HERE,THERE,ARG1,ARG2,STATUS
DEFINE ROAD
DEFINE HILL
DEFINE BUILDING,HOUSE
DEFINE VALLEY
DEFINE FOREST
DEFINE SLIT
DEFINE DEPRESSION
DEFINE COBBLES
DEFINE DEBRIS
DEFINE CANYON
DEFINE PIT
DEFINE MISTS
DEFINE MTKING
DEFINE Y2
DEFINE JUMBLE,WALL,BROKEN
DEFINE WINDOW
DEFINE DIRTY
DEFINE BRINK
DEFINE DUSTY
DEFINE CROSSOVER
DEFINE COMPLEX
DEFINE BEDQUILT
DEFINE SWISS
DEFINE SLAB
DEFINE LOW
DEFINE INCLINE
DEFINE GIANT
DEFINE CAVERN
DEFINE SOFT
DEFINE ORIENTAL
DEFINE MISTY
DEFINE ALCOVE
DEFINE PLOVER
DEFINE DARK
DEFINE ARCHED
DEFINE SHELL
DEFINE ANTEROOM
DEFINE RESERVOIR
DEFINE SLOPING
DEFINE CORRIDOR
DEFINE FORK
DEFINE BOULDERS
DEFINE LIMESTONE
DEFINE BARREN
DEFINE LIMBO
DEFINE LAIR
DEFINE ICE
DEFINE GLASSY
DEFINE TOOL
DEFINE MORION
DEFINE VAULT
DEFINE CUBICLE
DEFINE SPHERICAL
DEFINE SLIDE
DEFINE SHELF
DEFINE BEACH
DEFINE FOURIER
DEFINE JONAH
DEFINE FACES
DEFINE NONDESCRIPT
DEFINE PENTAGRAM
DEFINE PEELGRUNT
DEFINE STORAGE
DEFINE AUDIENCE
DEFINE ARABESQUE
DEFINE TRANSLUCENT
DEFINE INSAFE
DEFINE PLATFORM
DEFINE SANDSTONE
DEFINE CHIMNEY
DEFINE TUBE
DEFINE WARM
DEFINE BALCONY
*
* This module defines the actions to be taken when certain
* verb, verb/object, or object/object word sequences are
* spoken. BEWARE: When defining a set of alternate actions
* to be taken for different uses of a word, you must ALWAYS
* use the same definition of the word - do NOT define ANY
* actions for the word's synonyms if any, or you will lose
* some of your action controls!
*
ACTION GET
IFEQ LAMP,0 {off?
OR
NOT
IFNEAR LAMP {missing the lamp?}
AND
NOT
BIT HERE,LIT {place is not illuminated}
CALL GROPE.FOR.IT {have to grope around for it}
FIN
DEFAULT PORTABLE {hope this works!}
ANYOF BIRD,CAGE,BOTTLE,OIL,WATER,CHAIN,BEAR,INVENTORY,CLAM
ANYOF SWORD,SCEPTRE,KNIFE
IFKEY BIRD
CALL GETBIRD
ELSE
IFKEY CAGE
CALL GETCAGE
ELSE
IFKEY BOTTLE
CALL GETBOTTLE
ELSE
IFKEY OIL
CALL GETOIL
ELSE
IFKEY WATER
CALL GETWATER
ELSE
IFKEY CHAIN
CALL GETCHAIN
ELSE
IFKEY BEAR
CALL GETBEAR
ELSE
IFKEY INVENTORY
CALL INVENTORY
ELSE
IFKEY SWORD
CALL GETSWORD
ELSE
IFKEY SCEPTRE
CALL GETSCEPTRE
ELSE
IFKEY KNIFE
CALL GETKNIFE
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
ACTION GET * Generalized last-case "get" routine
IFEQ STATUS,1
PROCEED
FIN
BIT ARG2,OBJECT
ELSE
SAY HAH!
QUIT
FIN
IFHAVE ARG2
SAY YOUHAVEIT
QUIT
FIN
IFNEAR ARG2
ELSE
NAME IDONTSEE,ARG2
QUIT
FIN
BIT ARG2,PORTABLE
ELSE
SAY HAH!
QUIT
FIN
IFLT INVCT,STRENGTH
GET ARG2
SAY OK
BIT ARG2,UNSTABLE
EVAL J,ARG2
IFEQ J,0
DEPOSIT ARG2,1
FIN
FIN
ELSE
SAY ARMSAREFULL
FIN
QUIT
ACTION DROP
ANYOF BIRD,CAGE,BOTTLE,OIL,WATER,VASE,VIAL,DJINN,BEAR
IFKEY BIRD
CALL DROPBIRD
ELSE
IFKEY CAGE
CALL DROPCAGE
ELSE
IFKEY BOTTLE
CALL DROPBOTTLE
ELSE
IFKEY OIL
OR
IFKEY WATER
CALL DROPLIQUID
ELSE
IFKEY VASE
CALL DROPVASE
ELSE
IFKEY VIAL
CALL DROPVIAL
ELSE
IFKEY DJINN
CALL FREEDJINN
ELSE
IFKEY BEAR
CALL DROPBEAR
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
PROCEED
ACTION DROP * Generalized "drop" control
IFEQ STATUS,1
PROCEED
FIN
BIT ARG2,OBJECT
ELSE
SAY HAH!
QUiT
FIN
IFHAVE ARG2
DROP ARG2
SAY OK
ELSE
SAY NOTCARRYING
FIN
QUIT
ACTION WALK
IFEQ STATUS,1
NAME WHICHWAY,ARG1
ELSE
IFKEY NORTH
OR
IFKEY SOUTH
OR
IFKEY EAST
OR
IFKEY WEST
OR
IFKEY NORTHEAST
OR
IFKEY NORTHWEST
OR
IFKEY SOUTHEAST
OR
IFKEY SOuTHWEST
OR
IFKEY UP
OR
IFKEY DOWN
OR
IFKEY BACK
OR
IFKEY CAVE
OR
IFKEY OUT
OR
IFKEY IN
CALL ARG2
ELSE
BIT ARG2,PLACE
IFAT ARG2
SAY NEEDDETAIL
ELSE
SAY NO.CAN.GO
FIN
ELSE
SAY HUH??
FIN
FIN
FIN
QUIT
ACTION DIG
SAY NEEDSHOVEL
QUIT
ACTION CAVE
AT VALLEY,FOREST,FOREST2,STREAM,ROAD,SLIT,DEPRESSION,BUILDING
SAY WHEREISCAVE
QUIT
ACTION CAVE
SAY NEEDDETAIL
QUIT
ACTION WATER DOOR
IFNEAR DOOR
IFHAVE WATER
APPORT WATER,LIMBO
SET BOTTLE,1
SAY HINGES..RUST
SET DOOR,0
ELSE
NAME YOUDONTHAVE,ARG1
FIN
ELSE
NAME IDONTSEE,ARG2
FIN
QUIT
ACTION OIL DOOR
IFNEAR DOOR
IFHAVE OIL
APPORT OIL,LIMBO
SET BOTTLE,1
SET DOOR,1
SAY OIL..DOOR
ELSE
NAME YOUDONTHAVE,ARG1
FIN
ELSE
NAME IDONTSEE,ARG2
FIN
QUIT
AcTION WATER PLANT
IFNEAR PLANT
IFHAVE WATER
APPORT WATER,LIMBO
SET BOTTLE,1
ADD PLANT,1
SAY PLANT
ADD PLANT,1
IFEQ PLANT,6
SET PLANT,0
BIS PLANT2,INVISIBLE
ELSE
BIC PLANT2,INVISIBLE
FIN
GOTO HERE
SET PLANT2,PLANT
ELSE
NAME YOUDONTHAVE,ARG1
FIN
ELSE
NAME IDONTSEE,ARG2
FIN
QUIT
ACTION OIL PLANT
IFNEAR PLANT
IFHAVE OIL
APPORT OIL,LIMBO
SET BOTTLE,1
SAY OIL..PLANT
ELSE
NAME YOUDONTHAVE,ARG1
FIN
ELSE
NAME IDONTSEE,ARG2
FIN
QUIT
AcTION OIL
IFEQ STATUS,1
IFNEAR BOTTLE
AND
IFEQ BOTTLE,2
OR
IFHAVE OIL
OR
IFAT EASTPIT
NAME WHAT.DO,ARG1
ELSE
NAME IDONTSEE,ARG1
FIN
ELSE
SAY HAH!
FIN
QUIT
ACTION WATER
IFEQ STATUS,1
IFNEAR BOTTLE
AND
IFEQ BOTTLE,0
OR
IFHAVE WATER
OR
BIT HERE,H20HERE
NAME WHAT.DO,ARG1
ELSE
NAME IDONTSEE,ARG1
FIN
ELSE
SAY HAH!
FIN
QUIT
ACTION THROW
ANYOF AXE,SWORD
CALL WEAPONRY
ACTION THROW FOOD
HAVE FOOD
IFNEAR TROLL
SAY FEED..TROLL
ELSE
IFNEAR DWARF
SAY FED..DWARF
DROP FOOD
BIS DWARF,SPECIAL2 {enrage the dwarf}
ELSE
IFNEAR BEAR
SAY BEAR..URRP
APPORT FOOD,LIMBO
SET BEAR,1
IFEQ AXE,1
SET AXE,0
FIN
ELSE
PROCEED
FIN
FIN
FIN
QUIT
ACTION THROW TEETH
HAVE TEETH
SET TEETH,0
NEAR GOBLINS
SAY WARRIORS
APPORT TEETH,LIMBO
APPORT GOBLINS,LIMBO
QUIT
ACTION THROW VIAL
HAVE VIAL
CALL BREAK.VIAL
ACTION WAVE
IFGT STATUS,1
NOT
BIT ARG2,OBJECT
SAY HAH!
QUIT
FIN
IFHAVE ARG2
ELSE
SAY NOTCARRYING
QUIT
FIN
FIN
IFKEY ROD
IFNEAR FISSURE
IFLT CLOSURE,2
ADD FISSURE,1
SAY FISSURE
IFEQ FISSURE,2
SET FISSURE,0
BIS FISSURE,INVISIBLE
ELSE
BIC FISSURE,INVISIBLE
FIN
ELSE
SAY NOTHING
FIN
ELSE
IFNEAR QUICKSAND
SAY NOTHING.OBVIOUS
SET QUICKSAND,1 {harden the quicksand for a while}
ELSE
IFNEAR GORGE
AND
IFLT CLOSURE,2
ADD GORGE,1
SAY GORGE
ADD GORGE,1
IFEQ GORGE,4
SET GORGE,0
BIS GORGE,INVISIBLE
ELSE
BIC GORGE,INVISIBLE
FIN
ELSE
SAY NOTHING
FIN
FIN
FIN
ELSE
IFKEY AXE
OR
IFKEY SWORD
CALL WEAPONRY
ELSE
SAY NOTHING
FIN
FIN
QUIT
ACTION THROW * Generalized "throw" control
IFEQ STATUS,2
BIT ARG2,OBJECT {throwing objects}
IFHAVE ARG2 {that you happen to be carrying}
AND
BIT HERE,THROWER {thrown from, to someplace else}
CALL UPCHUCK {find the destination and print}
FIN {the message}
FIN
FIN
CALL DROP
ACTION NORTH
CALL NO.MOVE.POSSIBLE
QUIT
ACTION SOUTH
CALL NO.MOVE.POSSIBLE
QUIT
ACTION UP
SAY NOCANGO
QUIT
ACTION DOWN
SAY NOCANGO
QUIT
ACTION EAST
CALL NO.MOVE.POSSIBLE
QUIT
ACTION WEST
CALL NO.MOVE.POSSIBLE
QUIT
ACTION NORTHEAST
CALL NO.MOVE.POSSIBLE
QUIT
ACTION NORTHWEST
CALL NO.MOVE.POSSIBLE
QUIT
ACTION SOUTHEAST
CALL NO.MOVE.POSSIBLE
QUIT
ACTION SOUTHWEST
CALL NO.MOVE.POSSIBLE
QUIT
ACTION INVENTORY
SET J,0
ITOBJ I
IFHAVE I
IFEQ J,0
SAY YOUNOWHAVE
SET J,1
FIN
SAY I
FIN
EOI
IFEQ J,0
SAY ARMSAREEMPTY
FIN
QUIT
ACTION LOOK
ANYOF MIST,TREES
CALL ARG2
ACTION LOOK
IFNEAR LAMP
AND
IFEQ LAMP,1
OR
BIT HERE,LIT
SET J,0
BIT STATUS,FASTMODE
ELSE
BIS STATUS,FULLDISP
SET J,1
FIN
SAY HERE
BIC STATUS,FULLDISP
BIS HERE,BEENHERE
ITLIST I
IFNEAR I
AND
NOT
IFHAVE I
IFEQ J,1
AND
NOT
BIT I,INVISIBLE
SET J,0
SAY BLANK
FIN
BIS I,SEEN
SAY I
FIN
EOI
IFNEAR DWARF
IFEQ DWARROWS,1
SAY DWARFHERE
ELSE
VALUE DWARVESHERE,DWARROWS
FIN
FIN
IFHAVE BEAR
SAY I.C.A.BEAR
FIN
ELSE
SAY NOLIGHTHERE
FIN
QUIT
ACTION LIGHT
IFKEY LAMP
IFNEAR LAMP
IFLT LAMPLIFE,40
IFNEAR BATTERIES
AND
IFEQ BATTERIES,0
SAY NEW.BATTERIES
SET BATTERIES,1
ADD LAMPLIFE,300
BIC LAMP,SPECIAL1 {clear "recharged" flag}
BIC LAMP,SPECIAL1 {clear "recharged already" flag}
FIN
FIN
IFGT LAMPLIFE,0
SAY LAMPNOWON
IFLT LAMP,1
BIT HERE,LIT
ELSE
SET LAMP,1
CALL LOOK
FIN
FIN
SET LAMP,1
CALL PHOG
ELSE
SAY LAMP.IS.DEAD
FIN
ELSE
NAME IDONTSEE,ARG2 { (is this right?) }
FIN
ELSE
IFGT STATUS,1
SAY DUNNO.HOW
ELSE
IFNEAR LAMP
IFLT LAMPLIFE,40
IFNEAR BATTERIES
IFEQ BATTERIES,0
SAY NEW.BATTERIES
SET BATTERIES,1
ADD LAMPLIFE,300
BIC LAMP,SPECIAL1 {clear "recharged already" flag}
FIN
FIN
FIN
IFGT LAMPLIFE,0
SAY LAMPNOWON
SET I,LAMP
SET LAMP,1
CALL PHOG
IFLT I,1
AND
NOT
BIT HERE,LIT
CALL LOOK
FIN
ELSE
SAY LAMP.IS.DEAD
FIN
ELSE
SAY NOLIGHTHERE
FIN
FIN
FIN
QUIT
ACTION EXTINGUISH
IFKEY LAMP
OR
IFEQ STATUS,1
IFNEAR LAMP
SET LAMP,0
SAY LAMPNOWOFF
BIT HERE,LIT
ELSE
SAY ITISNOWDARK
FIN
CALL PHOG
ELSE
IFKEY LAMP
NAME IDONTSEE,ARG2
ELSE
PROCEED
FIN
FIN
ELSE
SAY DUNNO.HOW
FIN
QUIT
ACTION OPEN
DEFAULT OPENABLE
KEYWORD GRATE
NEAR GRATE
IFHAVE KEYS
IFGT CLOSURE,1
OR
BIT ADMIN,NOMAGIC
SAY GRATE.STUCK
IFGT CLOSURE,1
BIS ADMIN,PANICED
BIT GRATE,SPECIAL1
ELSE
BIS GRATE,SPECIAL1
SAY GRATE.CLOSED
FIN
FIN
ELSE
SET GRATE,1
SAY GRATEUNLOCKED
BIC DEPRESSION,HINTABLE
FIN
ELSE
SAY NEEDKEYS
FIN
QUIT
ACTION OPEN CHAIN
NEAR CHAIN
IFHAVE KEYS
IFEQ CHAIN,0
SAY CHAIN.UNLOCKED
ELSE
IFEQ CHAIN,1
IFEQ BEAR,0
SAY BEAR..CHAIN
ELSE
SAY CHAIN.UNLOCKED
SET CHAIN,0
SET BEAR,2
FIN
ELSE
SAY CHAIN.UNLOCKED
SET CHAIN,0
FIN
FIN
ELSE
SAY NEEDKEYS
FIN
QUIT
ACTION OPEN DOOR
NEAR DOOR
SAY NOLOCK
QUIT
ACTION OPEN KEYS
SAY UNLOCKKEYS
QUIT
ACTION OPEN SAFE
NEAR SAFE
IFEQ SAFE,0
SAY NO.KEYHOLE
ELSE
IFEQ SAFE,1
NAME ALREADY.OPEN,ARG2
ELSE
SAY IT.IS.MELTED
FIN
FIN
QUIT
ACTION OPEN CLAM
NEAR CLAM
IFHAVE CLAM
SAY DROP.THE.CLAM
ELSE
IFHAVE TRIDENT
APPORT CLAM,LIMBO
APPORT OYSTER,HERE
APPORT PEARL,CULDESAC
SAY CLAM..OPENED
ELSE
SAY NEED.TRIDENT
FIN
FIN
QUIT
ACTION OPEN OYSTER
NEAR OYSTER
IFHAVE OYSTER
SAY DROP.THE.OYSTER
ELSE
IFHAVE TRIDENT
SAY OYSTER..OPENED
ELSE
SAY NEED.TRIDNT2
FIN
FIN
QUIT
ACTION OPEN VIAL
NEAR VIAL
CALL BREAK,VIAL
ACTION OPEN FLASK
NEAR FLASK
IFLT FLASK,2
IFLOC FLASK,PENTAGRAM
APPORT DJINN,PENTAGRAM
SAY POLITE.DJINN
ELSE
SAY RUDE.DJINN
FIN
SET FLASK,2
ELSE
NAME ALREADY.OPEN,ARG2
FIN
QUIT
ACTION OPEN PENTAGRAM {weird case - opening a place!}
IFAT PENTAGRAM
IFNEAR DJINN
SAY DJINN.ADVICE
APPORT DJINN,LIMBO
BIS DJINN,SPECIAL1
ELSE
SAY EMPTY.PENTA
FIN
ELSE
NAME IDONTSEE,ARG2
FIN
QUIT
ACTION CLOSE
DEFAULT OPENABLE
KEYWORD GRATE
NEAR GRATE
SET GRATE,0
SAY GRATELOCKED
QUIT
ACTION CLOSE CHAIN
NEAR CHAIN
IFAT BEARHERE
IFEQ CHAIN,0
IFNEAR BEAR
DROP BEAR
SET BEAR,1
SET CHAIN,1
ELSE
SET CHAIN,2
FIN
FIN
SAY LOCK..CHAIN
IFHAVE CHAIN
DROP CHAIN
FIN
ELSE
SAY LOCK..CHAIN?
FIN
QUIT
ACTION CLOSE DOOR
NEAR DOOR
SAY NOLOCK
QUIT
ACTION CLOSE SAFE
NEAR SAFE
IFEQ SAFE,1
SAY SAFE.SHUTS
SET SAFE,0
ELSE
NAME ALREADY.SHUT,ARG2
FIN
QUIT
ACTION CLOSE FLASK
NEAR FLASK
IFEQ FLASK,0
NAME ALREADY.SHUT,ARG2
ELSE
NAME DUNNO.HAO,ARG2
FIN
QUIT
ACTION HELP
BIT HERE,HINTABLE { modification by K.C.W next 5 lines }
CALL HINT.LOGIC
ELSE
SAY HELPDATA
FIN
QUIT
ACTION INFO
SAY INFO.2
QUIT
ACTION QUIT
QUERY WANTTOQUIT
SET QUITTING,1
CALL FINIS
FIN
SAY OK
QUIT
ACTION BRIEF
SAY BRIEF.OK
BIS STATUS,QUICKIE
BIC STATUS,FASTMODE
LDA OK,OK!
QUIT
ACTION LPSD
IFEQ STATUS,1
OR
NOT
BIT ADMIN,OLORIN
SAY WHAT?
QUIT
FIN
BIT ARG2,PLACE
GOTO ARG2
ELSE
SAY WHAT?
FIN
QUIT
ACTION KILL
DEFAULT MORTAL {find default enemy in one exists}
ANYOF TROLL,DWARF,DRAGON,SNAKE,BIRD,BEAR,OYSTER,CLAM,OGRE,BLOB
ANYOF DJINN,GOBLINS,BASILISK,GONG
NEAR ARG2
IFKEY TROLL
CALL KILLTROLL
ELSE
IFKEY DWARF
CALL KILLDWARF
ELSE
IFKEY DRAGON
CALL KILLDRAGON
ELSE
IFKEY SNAKE
CALL KILLSNAKE
ELSE
IFKEY BLOB
CALL KILLBLOB
ELSE
IFKEY BEAR
CALL KILLBEAR
ELSE
IFKEY CLAM
OR
IFKEY OYSTER
CALL KILLBIVALVE
ELSE
IFKEY OGRE
CALL KILLOGRE
ELSE
IFKEY BIRD
CALL KILLBIRD
ELSE
IFKEY DJINN
CALL KILLDJINN
ELSE
IFKEY GOBLINS
CALL KILLGOBLINS
ELSE
IFKEY BASILISK
CALL KILLBASILISK
ELSE
IFKEY GONG
CALL HITGONG
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
QUIT
ACTION KILL
IFEQ STATUS,1
SAY PACIFIST
QUIT
FIN
ACTION FAST
BIC STATUS,QUICKIE
BIS STATUS,FASTMODE
SAY OK
LDA OK,SOK!
QUIT
ACTION FULL
BIC STATUS,QUICKIE
BIC STATUS,FASTMODE
LDA OK,OK!
SAY OK
QUIT
ACTION FEED
ANYOF BEAR,TROLL,BIRD,SNAKE,DWARF,DRAGON,BASILISK,GOBLINS
IFNEAR ARG2
IFKEY BEAR
IFNEAR FOOD
SAY BEAR..URRP
SET BEAR,1
IFHAVE FOOD
FIN
APPORT FOOD,LIMBO
IFEQ AXE,1
SET AXE,0
FIN
ELSE
SAY SNAKEWONTEAT
FIN
ELSE
IFKEY TROLL
SAY FEED..TROLL
ELSE
IFKEY SNAKE
IFHAVE BIRD
SAY SNAKE..BIRD
APPORT BIRD,LIMBO
ELSE
SAY SNAKEWONTEAT
FIN
ELSE
IFKEY DWARF
SAY FED..DWARF
BIS DWARF,SPECIAL2 {makes him mad}
ELSE
IFKEY BIRD
SAY BIRDSEED
ELSE
IFKEY DRAGON
IFEQ DRAGON,0
SAY SNAKEWONTEAT
ELSE
SAY IT.IS.DEAD
FIN
ELSE
IFKEY BASILISK
IFLT BASILISK,2
SAY SNAKEWONTEAT
ELSE
SAY IT.IS.DEAD
FIN
ELSE
IFKEY GOBLINS
SAY GOBL.EAT.YOU
FIN
FIN
FIN
FIN
FIN
FIN
FIN
FIN
ELSE
NAME IDONTSEE,ARG2
FIN
QUIT
ACTION FEED
IFEQ STATUS,1
SAY HUH??
ELSE
SAY HAH!
FIN
QUIT
ACTION SCORE
SET QUITTING,1
CALL GETSCORE
VALUE IFYOUQUIT,SCOREX
VALUE IFYOUQUIT2,MAXSCORE
QUERY WANTTOQUIT
SAY OK
CALL FINIS
ELSE
SAY OK
FIN
QUIT
ACTION JUMP
SAY NOJUMPING
QUIT
ACTION IN
SAY INFROMOUT
QUIT
ACTION OUT
SAY INFROMOUT
QUIT
ACTION ABRA
SAY MAGICKWORD
QUIT
ACTION FEE
ANYOF FIE,FOE,FOO,FUM
SET FOOBAR,0
SAY NOTHING
QUIT
ACTION FEE
SET FOOBAR,1
SAY OK
QUIT
ACTION FIE
IFEQ FOOBAR,0
SET FOOBAR,2
SAY OK
ELSE
SET FOOBAR,0
SAY NOTHING
FIN
QUIT
ACTION FOE
IFEQ FOOBAR,1
SET FOOBAR,3
SAY OK
ELSE
SET FOOBAR,0
SAY NOTHING
FIN
QUIT
ACTION FOO
IFEQ FOOBAR,2
IFLOC EGGS,GIANT
OR
IFLOC EGGS,YLEM {threw 'em into the chasm}
SAY NOTHING
ELSE
IFNEAR EGGS
SET EGGS,1
ELSE
IFAT GIANT
SET EGGS,0
ELSE
SET EGGS,2
FIN
FIN
IFHAVE EGGS
DROP EGGS
FIN
SAY EGGS
SET EGGS,0
IFLOC EGGS,LIMBO {if the eggs were given in toll}
BIS TROLL,SPECIAL1 {can't be fooled twice}
IFEQ TROLL,1 {bought off, not crossed}
OR
IFEQ TROLL,2 {bought off, crossed}
IFNEAR TROLL2 {at the chasm with a good bridge}
SET TROLL,5 {irate}
SAY TROLL {bitch, bitch!}
FIN
SET TROLL,0 {normal troll mode}
APPORT TROLL,SWOFCHASM {fetch him back}
APPORT TROLL2,LIMBO {discard fake troll}
FIN
FIN
APPORT EGGS,GIANT
FIN
ELSE
SAY NOTHING
FIN
SET FOOBAR,0
QUIT
ACTION FUM
SET FOOBAR,0
SAY NOTHING
QUIT
ACTION XYZZY
SAY NOTHING
QUIT
ACTION PLUGH
SAY NOTHING
QUIT
ACTION FIND CAVE
BIT HERE,NOTINCAVE
AND
NOT
BIT INCAVE,BEENHERE
SAY WHEREISCAVE
ELSE
SAY NEEDDETAIL
FIN
QUIT
ACTION FIND
IFGT STATUS,1
BIT ARG2,OBJECT
IFNEAR ARG2
IFHAVE ARG2
SAY ITISHERENOW
ELSE
SAY HERESOMEWHERE
FIN
ELSE
SAY CANTFIND
FIN
QUIT
ELSE
BIT ARG2,PLACE
IFAT ARG2
SAY YOU.ARE.THERE
ELSE
SAY CANTFIND
FIN
ELSE
SAY WHAT?
FIN
QUIT
FIN
FIN
ACTION SWIM
SAY DUNNO.HOW
QUIT
ACTION BREAK VASE
NEAR VASE
SAY THROW,VASE
IFHAVE VASE
FIN
APPORT VASE,LIMBO
APPORT SHARDS,HERE
QUIT
ACTION BREAK VIAL
NEAR VIAL
CALL BREAK,VIAL
ACTION FIX VASE
NEAR POTTERY
SAY NO.CAN.FIX
QUIT
ACTION FILL VASE
NEAR VASE
BIT HERE,H20HERE
OR
IFAT EASTPIT
SAY SHATTER.VASE
IFHAVE VASE
FIN
APPORT VASE,LIMBO
APPORT SHARDS,HERE
ELSE
SAY NOTHING,VASE
FIN
QUIT
ACTION FILL BOTTLE
NEAR BOTTLE
IFEQ BOTTLE,1
BIT HERE,H20HERE
SAY BOTTLE..H20
SET BOTTLE,0
IFHAVE BOTTLE
GET WATER
FIN
ELSE
IFAT EASTPIT
SAY BOTTLE..OIL
SET BOTTLE,2
IFHAVE BOTTLE
GET OIL
FIN
ELSE
SAY NOTHING2FILL
FIN
FIN
ELSE
SAY BOTTLEWASFULL
FIN
QUIT
ACTION FILL
IFGT STATUS,1
SAY CANTFILLTHAT
QUIT
FIN
ACTION POUR WATER
IFHAVE WATER
APPORT WATER,LIMBO
SET BOTTLE,1
IFNEAR PLANT
ADD PLANT,1
SAY PLANT
ADD PLANT,1
IFEQ PLANT,6
SET PLANT,0
BIS PLANT2,INVISIBLE
ELSE
BIC PLANT2,INVISIBLE
FIN
GOTO HERE
SET PLANT2,PLANT
ELSE
IFNEAR DOOR
SET HINGES..RUST
SET DOOR,0
ELSE
SAY POURWATER
FIN
FIN
ELSE
NAME YOUDONTHAVE,WATER
FIN
QUIT
ACTION POUR OIL
IFHAVE OIL
APPORT OIL,LIMBO
SET BOTTLE,1
IFNEAR PLANT
SAY OIL..PLANT
ELSE
IFNEAR DOOR
SAY OIL..DOOR
SET DOOR,1
ELSE
SAY POURWATER
FIN
FIN
ELSE
NAME YOUDONTHAVE,ARG2
FIN
QUIT
ACTION PLACATE
ANYOF DWARF,SNAKE,BIRD,DRAGON,TROLL,BEAR,PIRATE,OGRE,BASILISK,GOBLINS
NEAR ARG2
SAY IAMGAME
QUIT
ACTION EAT
DEFAULT EDIBLE
NEAR MUSHROOM
IFEQ STATUS,1
OR
IFKEY MUSHROOM
IFHAVE MUSHROOM
DROP MUSHROOM
FIN
SET MUSHROOM,2
SET MUSHTIME,30
ADD MUSHTIME,LASTCLOCK
APPORT MUSHROOM,LIMBO
SET STRENGTH,12
QUIT
FIN
ACTION EAT
NEAR FOOD
IFEQ STATUS,1
OR
IFKEY FOOD
IFHAVE FOOD
FIN
APPORT FOOD,LIMBO
SAY URRP
QUIT
FIN
ACTION EAT
ANYOF DWARF,DRAGON,BIRD,SNAKE,BEAR,TROLL,PLANT,OGRE
ANYOF BASILISK,GOBLINS
IFNEAR ARG2
SAY BLEAH
ELSE
NAME IDONTSEE,ARG2
FIN
QUIT
ACTION EAT
IFEQ STATUS,1
SAY NO.FOOD
QUIT
ELSE
BIT ARG2,OBJECT
IFNEAR ARG2
SAY REPULSIVE
QUIT
FIN
FIN
FIN
ACTION RUB LAMP
NEAR LAMP
NAME RUBLAMP,ARG2
QUIT
ACTION RUB
IFGT STATUS,1
BIT ARG2,OBJECT
IFNEAR ARG2
SAY PECULIAR
QUIT
FIN
FIN
FIN
ACTION BACK
BIT HERE,NOBACK
OR
BIT THERE,NOBACK
OR
IFEQ THERE,0
SAY CANTGOBACK
ELSE
GOTO THERE
FIN
QUIT
ACTION MIST
SAY THISISMIST
QUIT
ACTION TREES { Bug fix. Add TREES routine Jim 6/12/85 }
BIT HERE,NOTINCAVE { Can see trees anywhere above ground }
SAY INFOREST
ELSE
SAY NO.TREES.HERE
FIN
QUIT
ACTION SAY
ANYOF PLUGH,XYZZY,PLOVER,THURB,MELENKURION,NOSIDE,SAMOHT
ANYOF KNERL,ZORTON,KLAETU,SNOEZE,BLERBI,PHUGGG
CALL ARG2
QUIT
ACTION SAY
IFEQ STATUS,2
QUIT
FIN
ACTION SAVE
BIT ADMIN,DEMO
SAY SUSP.DEMO
ELSE
SET I,1
NOT
BIT ADMIN,OLORIN
VALUE MUSTWAIT,MINTIME
QUERY IS.THIS.OK?
ELSE
SET I,0
FIN
FIN
IFGT I,0
SVAR 4,TIME
MULT TIME,60
SVAR 5,I
ADD TIME,1
EXECUTIVE 1,I {save program image}
IFEQ I,0
BIT ADMIN,OLORIN
QUERY CONTINUE.NOW?
SAY OK
SAY BLANK
QUIT
FIN
FIN
SAY OK
SAY BLANK
STOP
ELSE
SAY CANT.SAVE
FIN
ELSE
SAY OK
FIN
FIN
QUIT
ACTION RESTORE
EXECUTE 5,I {get prime-time factor}
IFGT I,0 {if something forbids adventures}
NOT
BIT ADMIN,OLORIN
LDA J,RESTORE.PRIME-1
ADD J,I
SAY J
QUIT
FIN
FIN
BIT ADMIN,OLORIN
SET I,1
ELSE
SET I,0
FIN
EXECUTIVE 7,I {save value of I over RESTORE attempt}
EXECUTE 2,I {attempt to restore image}
IFEQ I,0 {all well}
SVAR 4,I {get hours}
SVAR 5,J {get minutes}
MULT I,60
ADD I,J
IFLT I,TIME
ADD I,720
ADD I,720 {1440 is too big}
FIN
SUB I,TIME
EXECUTIVE 8,J {restore pushed value}
IFEQ J,1
BIS ADMIN,OLORIN
ELSE
BIC ADMIN,OLORIN
FIN
BIT ADMIN,OLORIN {if he's a wizard}
OR
IFGT I,MINTIME
IFEQ LAMP,1 {if the lamp is on}
ADD LAMPLIFE,1 {compensate for following move}
FIN
BIT ADMIN,OLORIN {if we're a wizard}
QUERY SAVE.THE.IMAGE
ELSE
EXECUTIVE 3,I {flush the image}
FIN
ELSE
EXECUTIVE 3,I {flush user-mode image}
FIN
EXECUTIVE 4,I {flush the cache out}
GOTO HERE
SAY OK
SAY BLANK
ELSE
VALUE TOO.SOON,MINTIME
SAY BLANK
STOP {must stop - we already did the restore!}
FIN
ELSE
IFEQ I,1 {no file, or no image}
SAY NO.IMAGE
SUB TURNS,1 {let him try again}
ELSE {response 2 = checksum failed!}
SAY EXPLOSION {well-house blew up}
EXECUTE 3,I {delete the record}
FIN
FIN
QUIT
ACTION DRINK
IFEQ STATUS,1
OR
IFKEY WATER
BIT HERE,H20HERE
SAY SLURP
QUIT
ELSE
IFNEAR BOTTLE
AND
IFEQ BOTTLE,0
SAY WATERGONE
APPORT WATER,LIMBO
SET BOTTLE,1
QUIT
FIN
FIN
IFKEY WATER
NAME IDONTSEE,ARG2
ELSE
SAY CANTDRINK
FIN
ELSE
BIT ARG2,OBJECT
IFNEAR ARG2
SAY HAH!
ELSE
NAME IDONTSEE,ARG2
FIN
ELSE
SAY HAH!
FIN
FIN
QUIT
ACTION NEWS
SAY NEWSDATA
QUIT
ACTION READ
IFGT STATUS,1
BIT ARG2,OBJECT
IFNEAR ARG2
IFKEY MAGAZINES
CALL READ,MAGAZINES
ELSE
IFKEY MESSAGE
CALL READ,MESSAGE
ELSE
IFKEY TABLET
CALL READ,TABLET
ELSE
NAME DUNNO.HAD,ARG1
FIN
FIN
FIN
ELSE
NAME IDONTSEE,ARG2
FIN
ELSE
SAY HAH!
FIN
ELSE
PROCEED
FIN
QUIT
ACTION HOURS
SAY HOURS.ARE
EXECUTIVE 6,I
QUIT
ACTION WIZARD
QUERY R.U.A.WIZARD?
SAY PROVE.IT
INPUT
SET I,1 {sense switch number}
SVAR 8,I {read sense switch 1}
IFEQ I,1
AND
IFKEY SLIME
SAY SO.YOU.ARE
BIC ADMIN,DEMO
BIS ADMIN,OLORIN
ELSE
SAY OH.POOH
ADD PENALTIES,10
FIN
ELSE
SAY OK
FIN
QUIT
ACTION CLIMB
SAY NOCANCLIMB
QUIT
ACTION LOST
SAY IMCONFUSED
QUIT
ACTION MELENKURION
IFNEAR STATUE
AND
IFEQ STATUE,0
SET STATUE,1
SAY CRUMBLE
ELSE
SAY NOTHING
FIN
QUIT
ACTION NOSIDE SAMOHT
BIT LAMP,SPECIAL1
OR
BIT HERE,LIT
OR
NOT
BIT LAIR,BEENHERE
OR
NOT
IFNEAR LAMP
SAY NOTHING
ELSE
IFHAVE LAMP
SAY FZAP
CALL CORONER
ELSE
IFGT LAMPLIFE,40
APPORT LAMP,YLEM
SET BATTERIES,1 {so lamp doesn't come back}
SET LAMP,0
SET LAMPLIFE,0
CHANCE 50
SAY LAMP.GOES.POOF
SAY ITISNOWDARK
ELSE
SAY LAMP.EXPLODES
CALL CORONER
FIN
ELSE
SAY LAMP.RECHARGED
ADD LAMPLIFE,150
SET LAMP,1
BIS LAMP,SPECIAL1
FIN
FIN
FIN
QUIT
ACTION NOSIDE
SAY NOTHING
QUIT
ACTION SAMOHT
SAY NOTHING
QUIT
ACTION THURB
SAY NOTHING
QUIT
ACTION KNERL
CALL PASSPHRASE
ACTION ZORTON
CALL PASSPHRASE
ACTION KLAETU
CALL PASSPHRASE
ACTION SNOEZE
CALL PASSPHRASE
ACTION BLERBI
CALL PASSPHRASE
ACTION RIDE
IFEQ STATUS,1
OR
IFKEY TURTLE
AND
IFNEAR TURTLE
SAY TURTLE.BACK
GOTO RESERVOIR
APPORT TURTLE.LIMBO
QUIT
FIN
ACTION PHUGGG
BIS DJINN,SPECIAL2 {he needn't tell us about it}
BIT HERE,NOTINCAVE
SAY NOTHING
ELSE
IFNEAR BOTTLE
AND
IFEQ BOTTLE,0
OR
BIT HERE,H20HERE
CHANCE 85
SAY NOTHING
ELSE
CHANCE 95
SAY JELLYFISH
CALL CORONER
ELSE
SAY CAVE.DESTROYED
STOP
FIN
FIN
ELSE
IFNEAR AXE
OR
IFNEAR SWORD
IFNEAR AXE
SAY ZOT.AXE
IFHAVE AXE
FIN
APPORT AXE,LIMBO
FIN
IFNEAR SWORD
SAY ZOT.SWORD
IFHAVE SWORD
FIN
APPORT SWORD,LIMBO
FIN
ELSE
RANDOM I,3
MULT I,2
IFGT DWARROWS,1
ADD I,1
FIN
IFNEAR DWARF
CHANCE 70
LDA J,IT.WORKED
ADD I,J
SAY I
APPORT DWARF,LIMBO
SUB DWARFCOUNT,DWARROWS
SET DWARROWS,0
ELSE
LDA J,IT.DIDNT.WORK
ADD I,J
SAY I
CALL CORONER
FIN
ELSE
SAY NOTHING
FIN
FIN
FIN
FIN
QUIT
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
main ()
{
srandom (time(0)+getpid()) ;
setup () ;
opendb (ADV) ;
webster () ;
#ifdef PSTAB
pstab () ;
#endif PSTAB
process (INITIAL) ;
forever
process (REPEAT) ;
}
int setup ()
{
register int i ;
for ( i = 0 ; i < OBJECTS ; i++ )
{
objval[i] = 0 ;
objbit[i] = XOBJECT ;
objloc[i] = 0 ;
}
for ( i = 0 ; i < PLACES ; i++ )
{
plcbit[i] = XPLACE ;
}
for ( i = 0 ; i < VARS ; i++ )
{
varval[i] = 0 ;
varbit[i] = XVERB ;
}
#ifdef CACHE
ClrCache () ;
#endif CACHE
return ;
}
int opendb(name)
char *name ;
{
dbunit = openk (name) ;
if ( dbunit == ERROR )
error ("Opendb","unable to open %s!",name) ;
return ;
}
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
char opn [MAXOPS] =
{
2, 0, 1, 2, 1, 2, 2, 2, 1, 1,
1, 2, 2, 1, 0, 0, 0, 0, 2, 2,
0, 1, 1, 1, 1, 2, 2, 2, 1, 1,
2, 2, 2, 1, 0, 1, 1, 1, 1, 2,
2, 2, 2, 2, 1, 0, 0, 0, 1, 0,
2, 1, 2, 3, 0, 2, 2, 2
} ;
char ltab[MAXOPS] =
{
0,0,0,0,0,0,0,1,0,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,0,0,0,0,0,0,0,0,
0,0,0,1,0,0,1,0,0,0,0,0,0,0,
0,0
} ;
struct symstr *symtab [TABSIZ] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
} ;
char clss [] =
{
INITIAL,
LABEL,
VERB,
VERB,
PLACE,
PLACE,
PLACE,
TEXT,
OBJECT,
OBJECT,
OBJECT,
VARIABLE,
NULL,
0
} ;
char token [MAXLINE] ;
int linlen = 0 ;
int linewd [LINELEN] ;
char lex[LEXLEN][LEXSIZ] ;
short int objval[OBJECTS] ;
short int objbit[OBJECTS] ;
short int objloc[OBJECTS] ;
short int plcbit[PLACES] ;
short int varval[VARS] ;
short int varbit[VARS] ;
short int codebuf[BUFSIZE] ;
char textbuf[TBUFSIZE] ;
int nrep, ninit, nvars, nobj, nplace ;
int here, there, status, argwd[LINELEN] ;
int dbunit = -1 ;
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#define ADV "adv"
#define FREEZER "freezer"
#define INITIAL 0
#define REPEAT 500
#define ERROR (-1)
#define OBJECTS 120
#define PLACES 307
#define VARS 50
#define SYMTABREC 13000
#define MAXKEY 14000
#define MAXOPS 58
#define BUFSIZE 500
#define TBUFSIZE 3000
#define CACHESIZE 100
#define MAXCACHE 4096
#define TABSIZ 128
#define LEXSIZ 20
#define MAXLINE 134
#define YES 1
#define NO 0
#define EOS 0
#define NIL ((struct symstr *)0)
#define OK 1
#define MATCH 6
#define ADD 0
#define AND 1
#define ANYOF 2
#define APPORT 3
#define AT 4
#define BIC 5
#define BIS 6
#define BIT 7
#define CALL 8
#define CHANCE 9
#define DEFAULT 10
#define DEPOSIT 11
#define DIVIDE 12
#define DROP 13
#define ELSE 14
#define EOF 15
#define EOI 16
#define EOR 17
#define EVAL 18
#define EXEC 19
#define FIN 20
#define GET 21
#define GOTO 22
#define HAVE 23
#define IFAT 24
#define IFEQ 25
#define IFGE 26
#define IFGT 27
#define IFHAVE 28
#define IFKEY 29
#define IFLE 30
#define IFLOC 31
#define IFLT 32
#define IFNEAR 33
#define INPUT 34
#define ITLIST 35
#define ITOBJ 36
#define IFPLACE 37
#define KEYWORD 38
#define LDA 39
#define LOCATE 40
#define MOVE 41
#define MULT 42
#define NAME 43
#define NEAR 44
#define NOT 45
#define OR 46
#define PROCEED 47
#define QUERY 48
#define QUIT 49
#define RANDOM 50
#define SAY 51
#define SET 52
#define SMOVE 53
#define STOP 54
#define SUB 55
#define SVAR 56
#define VALUE 57
#define LINELEN 2
#define LEXLEN 5
#define MAXCALLS 10
#define MAXDOS 2
#define OBJKEY 8000
#define MAXOBJECTS 120
#define MAXOTEXT 20
#define MAXOCODE 4
#define PLACEKEY 4000
#define MAXPLACES 350
#define MAXPCODE 8
#define VERBKEY 2000
#define MAXVERBS 160
#define MAXVCODE 12
#define MOVED 001
#define BRIEF 002
#define FAST 004
#define LOOKING 010
#define BEEN 002
#define DUAL 010
#define XOBJECT 010000
#define XVERB 004000
#define XPLACE 002000
#define BADWORD 001000
#define INIT 0
#define LABEL 1
#define VERB 2
#define PLACE 3
#define TEXT 4
#define OBJECT 5
#define VARIABLE 6
#define NULL 7
#define INHAND (-1)
#define REPLACE '#'
#define NULLTXT 7000
#define BLANKTXT 7001
#define OKTXT 7002
#define forever for(;;)
#define class(key) (clss[(key)/1000])
#define indx(key) ((key)%1000)
#define logical(instr) (ltab[(instr)])
#define opnum(opcode) (opn[(opcode)])
#define where(key) (objloc[indx(key)])
#define CACHE /* see `cache.c' for details */
struct symstr
{
char *s_nam ;
struct symstr *s_nxt ;
short int s_val ;
} ;
extern char opn [] ;
extern struct symstr *symtab [] ;
extern char ltab[] ;
extern char token [] ;
extern int linlen ;
extern int linewd [] ;
extern char lex[LEXLEN][LEXSIZ] ;
extern short int objval[], objbit[], objloc[] ;
extern short int plcbit[] ;
extern short int varval[], varbit[] ;
extern short int codebuf[] ;
extern char textbuf[] ;
extern int nrep, ninit, nvars, nobj, nplace ;
extern int here, there, status, arowd[] ;
extern int dbunit ;
extern char clss[] ;
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
int command ()
{
register int i, k ;
int cnt, val ;
linlen = 0 ;
for ( i = 0 ; i < LINELEN ; i++ )
linewd[i] = -1 ;
cnt = readln (lex) ;
for ( i = 0 ; i < cnt ; i++ )
{
low2up (lex[i]) ;
val = find(lex[i]) ;
if ( class(val) == NULL )
continue ;
linewd[linlen++] = val ;
}
for ( i = 0 ; i < LINELEN ; i++ )
{
switch (class(linewd[i]))
{
case OBJECT:
case PLACE:
k = bitval(linewd[i]) ;
break ;
case VERB:
k = XVERB ;
break ;
default:
k = 0 ;
break ;
}
if ( linewd[i] < 0 )
k = BADWORD ;
setval (argwd[i],linewd[i]) ;
setbit (argwd[i],k) ;
}
setval (status,linlen) ;
if ( linlen <= 0 )
return ;
switch ( class(linewd[0]) )
{
case VERB:
setbit(status,(bitval(status)|XVERB)) ;
break ;
case OBJECT:
setbit(status,(bitval(status)|XOBJECT)) ;
break ;
case PLACE:
setbit(status,(bitval(status)|XPLACE)) ;
break ;
}
return ;
}
int low2up (word)
register char *word ;
{
for ( ; *word ; word++ )
if ( (*word) >= 'a' && (*word) <= 'z' )
*word += ( 'A' - 'a' ) ;
return ;
}
#undef NULL
#undef EOF
#include <stdio.h>
#define LINESIZE 134
int readln (words)
char words[LEXLEN][LEXSIZ] ;
{
register int cnt, i ;
register char *b ;
char buffer[LINESIZE] ;
printf ("? ") ;
if ( fgets (buffer,LINESIZE,stdin) == NULL )
exit (1) ;
#ifdef STATUS
if ( strcmp (buffer,"~status\n") == 0 )
{
pcstat () ;
(void) strcpy (buffer,"LOOK\n") ;
}
#endif STATUS
cnt = 0;
for ( cnt = 0, b = buffer ; *b != '\n' && *b != '\0' ; )
{
while ( *b == ' ' || *b == '\t' )
b++ ;
for ( i = 0 ; *b != ' ' && *b != '\t' && *b != '\n' && *b != '\0' ; b++ )
if ( i < (LEXSIZ-1) )
words[cnt][i++] = *b ;
words[cnt][i] = EOS ;
if ( i > 0 )
if ( ++cnt >= LEXLEN )
break ;
}
return (cnt) ;
}
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
#ifdef SHOWOP
extern int CurKey ;
#endif SHOWOP
int process (key)
int key ;
{
int rec, calls, dos, endb ;
int srec[MAXCALLS], sbp[MAXCALLS], sdos[MAXCALLS] ;
int dover[MAXDOS], dopnt[MAXDOS], domod[MAXDOS] ;
short int instr, op[3] ;
register int bp, i, j ;
int n ;
rec = key ;
calls = 0 ;
dos = 0 ;
forever
{
bp = 0 ;
while ( rec == ERROR || ( endb = rdcode (rec) ) == ERROR )
{
if ( calls <= 0 )
return ;
rec = srec [calls] ;
bp = sbp [calls] ;
dos = sdos [calls] ;
calls-- ;
}
#ifdef SHOWOP
CurKey = rec ;
#endif SHOWOP
while ( bp < endb )
{
instr = codebuf [bp] ;
if ( logical (instr) )
{
bp = condition (bp,codebuf,endb) ;
continue ;
}
bp++ ;
n = opnum (instr) ;
for ( i = 0 ; i < n ; i++, bp++ )
op [i] = codeful [bp] ;
#ifdef SHOWOP
showop (YES,instr,op) ;
#endif SHOWOP
switch (instr)
{
case ADD:
setval (op[0],(eval(op[0])+eval(op[1]))) ;
continue ;
case ANYOF:
bp -= 2 ;
for ( j = 0 ; codebuf [bp] == ANYOF ; bp+=2 )
for ( i = 0 ; i < LINELEN ; i++ )
if ( codebuf [bp+1] == linewd [i] )
j++ ;
if ( j > 0 )
continue ;
break ;
case APPORT:
movobj ( ref (op[0]), ref (op[1]) ) ;
continue ;
case AT:
bp -= 2 ;
i = eval (here) ;
for ( j = 0 ; codebuf [bp] == AT ; bp += 2 )
if ( codebuf [bp+1] == i )
j++ ;
if ( j > 0 )
continue ;
break ;
case BIC:
setbit (op[0],bitval(op[0])&(~bitval(op[1]))) ;
continue ;
case BIS:
setbit (op[0],bitval(op[0])|bitval(op[1])) ;
continue ;
case CALL:
if ( (++calls) >= MAXCALLS )
error ("Process","call stack overflow (%d)!",
calls) ;
srec [calls] = rec ;
sbp [calls] = bp ;
sdos [calls] = dos ;
rec = ref ( op[0] ) ;
j = class ( rec ) ;
if ( j == OBJECT )
rec += (MAXOTEXT * MAXOBJECTS) ;
else
if ( j == PLACE )
rec += ( 2 * MAXPLACES ) ;
break ;
case DEFAULT:
if ( linlen != 1 )
continue ;
j = 0;
for ( i = OBJKEY ; indx(i) < nobj ; i++ )
{
if ( near (i) == NO ||
(bitval(i)&bitval(op[0])) == 0 )
continue ;
if ( j != 0 )
{
j = 0 ;
break ;
}
j = i ;
}
if ( j == 0 )
continue ;
setval (argwd[1],j) ;
setbit (argwd[1],bitval(j)) ;
linewd[1] = j ;
setval (status,2) ;
linlen = 2 ;
continue ;
case DEPOSIT:
setval (ref(op[0]),eval(op[1])) ;
continue ;
case DIVIDE:
setval (op[0],(eval(op[0])/eval(op[1]))) ;
continue ;
case DROP:
movobj ( ref (op[0]), eval (here) ) ;
continue ;
case ELSE:
bp = flushc (bp,codebuf,endb) ;
continue ;
case EOF:
continue ;
case EOI:
i = eval ( dovar[dos] ) ;
switch ( domod[dos] )
{
/* only iterate with nearby objects */
case ITLIST:
do
{
if ( indx(++i) >= nobj )
{
dos-- ;
break ;
}
}
while ( near (i) != YES ) ;
if ( indx(i) >= nobj )
continue ;
break ;
case ITOBJ :
if ( indx(++i) >= nobj )
{
dos-- ;
continue ;
}
break ;
case ITPLACE :
if ( indx(++i) >= nplace )
{
dos-- ;
continue ;
}
break ;
default :
error ("Process",
"unknown IT* type!") ;
break ;
}
setval (dovar[dos],i) ;
bp = dopnt[dos] ;
continue ;
case EVAL:
setval (op[0],eval(ref(op[1]))) ;
continue ;
case EXEC:
executive (op[0],op[1]) ;
continue ;
case FIN:
continue ;
case GET:
j = ref ( op[0] ) ;
movobj (j,INHAND) ;
i = eval (j) ;
if ( i < 0 )
setval (j,-1-i) ;
continue ;
case GOTO:
/* must do this so "back" will work */
i = eval (here) ;
j = bitval (here) ;
setval (here,ref(op[0])) ;
setbit (here,bitval(ref(op[0]))) ;
setval (there,i) ;
setbit (there,j) ;
setbit (status,(bitval(status)|MOVED)) ;
continue ;
case HAVE:
if ( where ( ref (op[0]) ) == INHAND )
continue ;
break ;
case INPUT:
command () ;
continue ;
case ITLIST:
dos++ ;
dovar[dos] = op[0] ;
/* do first object and all others nearby */
setval (op[0],OBJKEY) ;
dopnt[dos] = bp ;
domod[dos] = ITLIST ;
continue ;
case ITOBJ:
dos++ ;
dovar[dos] = op[0] ;
setval (op[0],OBJKEY) ;
dopnt[dos] = bp ;
domod[dos] = ITOBJ ;
continue ;
case ITPLACE:
dos++ ;
dovar[dos] = op[0] ;
setval (op[0],PLACEKEY) ;
dopnt[dos] = bp ;
domod[dos] = ITPLACE ;
continue ;
case KEYWORD:
for ( i = 0 ; i < LINELEN ; i++ )
if ( op[0] == linewd[i] )
break ;
if ( i < LINELEN )
continue ;
break ;
case LDA:
setval (op[0],op[1]) ;
continue ;
case LOCATE:
setval (op[0],where(ref(op[1]))) ;
continue ;
case MOVE:
if ( op[0] != linewd[0] )
{
if ( linlen < 2 )
continue ;
if ( op[0] != linewd[1] )
continue ;
}
i = eval (here) ;
j = bitval (here) ;
setval (here,ref(op[1])) ;
setbit (here,bitval(ref(op[1]))) ;
setval (there,i) ;
setbit (there,j) ;
setbit (status,(bitval(status)|MOVED)) ;
return ;
case MULT:
setval (op[0],(eval(op[0])*eval(op[1]))) ;
continue ;
case NAME:
for ( i = 0 ; i < LINELEN ; i++ )
if ( op[1] == argwd[i] )
{
saynam (ref(op[0]),op[1]) ;
break ;
}
if ( i >= LINELEN )
saynam (ref(op[0]),ref(op[1])) ;
continue ;
case NEAR:
i = ref ( op[0] ) ;
if ( where (i) == INHAND || near (i) == YES )
continue ;
break ;
case PROCEED:
break ;
case QUIT:
return ;
case RANDOM:
setval (op[0],rnd(eval(op[1]))) ;
continue ;
case SAY:
say ( ref (op[0]) ) ;
continue ;
case SET:
setval (op[0],eval(op[1])) ;
continue ;
case SMOVE:
if ( op[0] != linewd[0] )
{
if ( linlen < 2 )
continue ;
if ( op[0] != linewd[1] )
continue ;
}
i = eval (here) ;
j = bitval (here) ;
setval (here,ref(op[1])) ;
setbit (here,bitval(ref(op[1]))) ;
setval (there,i);
setbit (there,j);
setbit (status,(bitval(status)|MOVED)) ;
say (op[2]) ;
return ;
case STOP:
fini () ;
case SUB:
setval (op[0],(eval(op[0])-eval(op[1]))) ;
continue ;
case SVAR:
i = eval (op[1]) ;
i = svar (eval(op[0]),i) ;
setval (op[1],i) ;
continue ;
case VALUE:
sayval (ref(op[0]),ref(op[1])) ;
continue ;
default:
error ("Process","unrecognized opcode %d!",
instr) ;
break ;
}
break ;
}
if ( instr != CALL )
rec = nextrec (rec) ;
}
}
int nextrec (key)
register int key ;
{
register int n ;
switch (class(key))
{
case INITIAL:
if ( key < REPEAT )
{
if ( ++key >= ninit )
key = ERROR ;
}
else
{
if ( ++key >= nrep+REPEAT )
key = ERROR ;
}
break ;
case LABEL:
key = ERROR ;
break ;
case VERB:
key += MAXVERBS ;
n = key - VERBKEY ;
n /= MAXVERBS ;
if ( n >= MAXVCODE )
key = ERROR ;
break ;
case PLACE:
key += MAXPLACES ;
n = key - PLACEKEY ;
n /= MAXPLACES ;
n -= 2 ;
if ( n >= MAXPCODE )
key = ERROR ;
break ;
case OBJECT:
key += MAXOBJECTS ;
n = key - OBJKEY ;
n /= MAXOBJECTS ;
n -= MAXOTEXT ;
if ( n >= MAXOCODE )
key = ERROR ;
break ;
default:
error ("Nextkey","bad key %d!",key) ;
break ;
}
return (key) ;
}
int fini ()
{
closek (dbunit) ;
exit (0) ;
}
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
int webster ()
{
register int key, i, j ;
int totsym, size, val ;
key = SYMTABREC ;
if ( ( size = readk (dbunit,key,codebuf,BUFSIZE*2) ) == ERROR )
error ("Webster","unable to access symbol table (%d)!",key) ;
if ( size != sizeof(short int) )
error ("Webster","bad symbol table size record (%d)!",size) ;
for ( totsym = codebuf[0] ; totsym > 0 ; )
{
key++ ;
if ( ( size = readk (dbunit,key,codebuf,BUFSIZE*2) ) < 1 )
error ("Webster","bad sym table count (%d)!",totsym) ;
size /= sizeof(short int) ;
for ( i = 0 ; i < size ; )
{
for ( j = 0 ; codebuf[i] != EOS ; j++, i++ )
token[j] = codebuf[i] ;
token[j] = token[6] = EOS ;
val = codebuf[i+1] ;
i += 2 ;
define (token,val) ;
totsym-- ;
}
}
nrep = find ("<NREP>") ;
ninit = find ("<NINIT>") ;
nvars = find ("<NVARS>") ;
nobj = find ("<NOBJ>") ;
nplace = find ("<NPLACE>") ;
here = find ("HERE") ;
there = find ("THERE") ;
status = find ("STATUS") ;
argwd[0] = find ("ARG1") ;
argwd[1] = find ("ARG2") ;
if ( nrep < 1 )
error ("Webster","missing repeat code (%d)!",nrep) ;
if ( nobj > OBJECTS )
error ("Webster","too many objects (%d>%d)!",nobj,OBJECTS) ;
if ( nplace > PLACES )
error ("Webster","too many places (%d>%d)!",nplace,PLACES) ;
if ( nvars > VARS )
error ("Webster","too many variables (%d>%d)!",nvars,VARS) ;
if ( class(here) != VARIABLE || class(there) != VARIABLE ||
class(argwd[0]) != VARIABLE || class(argwd[1]) != VARIABLE ||
class(status) != VARIABLE )
error ("Webster","missing special variable!") ;
return ;
}
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
#ifdef CACHE
struct ctabstr
{
short int c_key ;
short int c_siz ;
} ;
static int full = NO ;
static struct ctabstr ctab[CACHESIZE] ;
static short int cache[MAXCACHE] ;
static int cachesize = 0 ;
#endif CACHE
/*
** rdcode -- fetch the code addressed by key.
**
** Note: an open (chain) hashing strategy was tried
** on the cache table, with no significant speed
** increase! This seems puzzling, but since the
** hashing takes more memory, why bother with it?
**
*/
int rdcode (key)
int key ;
{
register int endb ;
#ifdef CACHE
if ( ( endb = GetCache (key) ) > 0 ) /* already in memory? */
return (endb) ;
#endif CACHE
if ( ( endb = readk (dbunit,key,codebuf,BUFSIZE*2) ) < 1 )
return (ERROR) ;
endb = (endb+1)/2 ;
#ifdef CACHE
if ( full )
return (endb) ;
if ( ok2sav (key) == NO )
return (endb) ;
PutCache (key,endb) ; /* lets keep a copy around */
#endif CACHE
return (endb) ;
}
#ifdef CACHE
/*
** ok2sav -- determine whether the code for the given key
** should be saved (if possible).
** Note: there is no need to save the INIT code,
** but certainly saving the REPEAT code is
** well worthwhile.
*/
static int ok2sav (key)
int key ;
{
register int val ;
if ( key >= REPEAT && key < 1000 ) /* save `REPEAT' code */
return (YES) ;
switch ( class (key) )
{
case VERB :
case OBJECT :
case LABEL :
case PLACE :
val = YES ;
break ;
default :
val = NO ;
break ;
}
return (val) ;
}
static int PutCache (key,size)
int key, size ;
{
register int i ;
if ( size <= 0 )
return ;
for ( i = 0 ; i < (CACHESIZE-1) ; i++ )
{
if ( ctab[i].c_key == key )
return ;
if ( ctab[i].c_key == -1 )
{
ctab[i+1].c_key = -1 ;
break ;
}
}
if ( i == (CACHESIZE-1) ) /* cache address table is full */
{
full = YES ;
return ;
}
if ( (cachesize+size) >= MAXCACHE ) /* cache memory is (almost) full */
{
if ( (MAXCACHE-cachesize) < 50 ) /* less than 50 bytes left */
full = YES ;
return ;
}
ctab[i].c_key = key ;
ctab[i[.c_siz = size ;
ctab[i].c_cod = &(cache[cachesize]) ;
cachesize += size ;
wcopy (codebuf,ctab[i].c_cod,size) ;
return ;
}
static int GetCache (key)
int key ;
{
register int i, size ;
for ( i = 0 ; i < CACHESIZE ; i++ )
{
if ( ctab[i].c_key == key )
break ;
if ( ctab[i].c_key == -1 )
return (ERROR) ;
}
size = ctab[i].c_siz ;
if ( size <= 0 )
return (ERROR) ;
wcopy (ctab[i].c_cod,codebuf,size) ;
return (size) ;
}
int ClrCache ()
{
register int i ;
full = NO ;
cachesize = 0 ;
for ( i = 0 ; i < CACHESIZE ; i++ )
ctab[i].c_key = -1 ;
return ;
}
int wcopy (a,b,n)
register short int *a, *b ;
register int n ;
{
while ( n-- )
*b++ = *a++ ;
return ;
}
#ifdef STATUS
int pcstat ()
{
register int i ;
printf ("Cache Status: (%s) -- (%d) of (%d) available\n\n",
(full?"full":"active"),(MAXCACHE-cachesize),MAXCACHE) ;
for ( i = 0 ; i < (CACHESIZE-1) ; )
{
if ( ctab[i].c_key == -1 )
break ;
printf ("\t[%d] key(%d) size(%d)\n",
i,ctab[i].c_key,ctab[i].c_siz) ;
}
printf ("\n") ;
return ;
}
#endif STATUS
#endif CACHE
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
int condition (bp,cbuf,len)
int bp, len ;
short int cbuf[] ;
{
register int i, cond, instr ;
int op[3], imode ;
int n, negate, passon ;
negate = 0 ;
passon = 0 ;
imode = 0 ;
forever
{
instr = cbuf [bp++] ;
n = opnum (instr) ;
for ( i = 0 ; i < n ; i++, bp++ )
op[i] = cbuf [bp] ;
if ( bp > len )
error ("Condition","bad opcode %d!",instr) ;
#ifdef SHOWOP
showop (YES,instr,op);
#endif SHOWOP
if ( instr == NOT )
{
negate = !negate ;
continue ;
}
switch (instr)
{
case BIT:
cond = ( (bitval(op[0]) & bitval(op[1])) != 0 );
break ;
case CHANCE:
cond = ( eval (op[0]) > rnd (100) ) ;
break ;
case IFAT:
cond = ( ref (op[0]) == eval (here) ) ;
break ;
case IFEQ:
cond = ( eval (op[0]) == eval (op[1]) ) ;
break ;
case IFGE:
cond = ( eval (op[0]) >= eval (op[1]) ) ;
break ;
case IFGT:
cond = ( eval (op[0}) > eval (op[1]) ) ;
break ;
case IFHAVE:
cond = ( where ( ref (op[0]) ) == INHAND ) ;
break ;
case IFKEY:
cond = 0 ;
for ( i = 0 ; i < linlen ; i++ )
if ( (cond = (op[0] == linewd[i])) )
break ;
break ;
case IFLE:
cond = ( eval (op[0]) <= eval (op[1]) ) ;
break ;
case IFLOC:
cond = ( where ( ref(op[0]) ) == ref (op[1]) ) ;
break ;
case IFLT:
cond = ( eval (op[0]) < eval (op[1]) ) ;
break ;
case IFNEAR:
cond = ( where < ref (op[0]) ) == INHAND ||
near ( ref (op[0]) ) == YES ) ;
break ;
case QUERY:
cond = (query ( ref (op[0]) ) == YES) ;
break ;
default:
error ("Condition","bad opcode %d!",instr) ;
break ;
}
cond = ((cond||negate)&&(!(cond&&negate))) ;
switch ( lmode )
{
case OR :
cond = ( cond || passon ) ;
break ;
case AND :
cond = ( cond && passon ) ;
break ;
case EOR :
cond = ((cond||passon)&&(!(cond&&passon))) ;
break ;
}
switch ( cbuf[bp] )
{
case OR :
lmode = OR ;
break ;
case AND :
lmode = AND ;
break ;
case EOR :
lmode = EOR ;
break ;
default :
if ( cond )
return (bp) ;
return (flushc (bp,cbuf,len)) ;
}
bp++ ;
passon = cond ;
negate = 0;
}
}
int flushc (bp,cbuf,len)
register int bp ;
int len ;
short int cbuf[] ;
{
register int instr, level ;
int new, n ;
for ( level = 1, new = 1 ; level > 0 ; )
{
if ( bp >= len )
error ("Flushc","nonterminating condition!") ;
instr = cbuf[bp++] ;
#ifdef SHOWOP
showop (NO,instr,&(cbuf[bp])) ;
#endif SHOWOP
if ( instr == NOT )
continue ;
bp += opnum (instr) ;
if ( logical (instr) )
{
if ( new )
level++ ;
n = cbuf[bp] ;
if ( n == OR || n == AND || n == EOR )
{
new = 0 ;
bp++ ;
}
else
new = 1 ;
continue ;
}
if ( instr == ELSE && level <= 1 )
break ;
if ( instr == FIN )
level-- ;
else
if ( instr == EOF )
break ;
}
return (bp) ;
}
int query (op)
short int op ;
{
register int c, d ;
forever
{
say (op) ;
printf ("? ") ;
c = getchar () ;
while ( (d=getchar()) != '\n' )
if ( d == EOF )
break ;
if ( c == 'y' || c == 'Y' )
return (YES) ;
if ( c == 'n' || c == 'N' )
return (NO) ;
}
}
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include <stdio.h>
/*VARARGS1*/
int error (rnam,a1,a2,a3,a4,a5,a6,a7,a8,a9)
char *rname, *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9 ;
{
fprintf (stderr,"%s: ",rnam) ;
fprintf (stderr,a1,a2,a3,a4,a5,a6,a7,a8,a9) ;
fprintf (stderr,"\n") ;
exit (1) ;
}
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
int executive (a,b)
int a, b ;
{
static int saveval ;
switch (a)
{
case 1:
if ( savgm() == ERROR )
setval (b,1) ;
else
setval (b,0) ;
break ;
case 2:
if ( resgm() == ERROR )
setval (b,1) ;
else
setval (b,0) ;
break ;
case 3:
if ( delgm() == ERROR )
setval (b,1) ;
else
setval (b,0) ;
break ;
case 4:
#ifdef CACHE
ClrCache () ;
#endif CACHE
setval (b,0) ;
break ;
case 5:
setval (b,prime()) ;
break ;
case 6:
setval (b,0) ;
break ;
case 7:
saveval = eval (b) ;
break ;
case 8:
setval (b,saveval) ;
break ;
default:
error ("Execute","bad mode %d!",a) ;
break ;
}
return ;
}
int ssw (a)
int a ;
{
register char *p ;
extern char *getenv() ;
if ( ( p = getenv("WIZARD") ) == 0 )
return (0) ;
if ( strcmp (p,"Gandalf") == 0 )
return (1) ;
return (0) ;
}
#include <time.h>
int svar (a,b)
int a, b ;
{
struct tm *tp, *localtime() ;
long int time(), clock ;
register int c ;
clock = time (0) ;
tp = localtime (&clock) ;
switch (a)
{
case 0:
case 1:
case 2:
c = 0 ;
break ;
case 3:
c = tp->tm_wday ;
break ;
case 4:
c = tp->tm_hour ;
break ;
case 5:
c = tp->tm_min ;
break ;
case 6:
c = tp->tm_sec ;
break ;
case 7:
c = 0 ;
break ;
case 8:
c = ssw (b) ;
break ;
default:
c = 0 ;
break ;
}
return (c) ;
}
int prime ()
{
return (0) ;
}
int rnd (n)
int n ;
{
return ((random())%n) ;
}
In this printout, I failed to write down the filenames on the printout, so I'm guessing the filenames based on which files are named by the makefile at the end.
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
#define READONLY 0
#define WRITEONLY 1
#define READWRITE 2
struct saveb
{
int s_uid ;
short int s_ov[OBJECTS], s_ob[OBJECTS], s_ol[OBJECTS] ;
short int s_pb[PLACES] ;
short int s_vv[VARS], s_vb[VARS] ;
} ;
int savgm ()
{
register int i ;
register int uid ;
register int fd ;
if ( ( fd = open (FREEZER,READWRITE) ) < 0 )
{
if ( ( fd = creat (FREEZER,0600) ) < 0 )
return (ERROR) ;
close (fd) ;
if ( ( fd = open (FREEZER,READWRITE) ) < 0 )
return (ERROR) ;
}
uid = getuid() + 1 ;
forever
{
if ( read(fd,(char *)&sb.sizeof(sb)) != sizeof(sb) )
break ;
if ( sb.s_uid == uid || sb.s_uid == 0 )
{
(void) lseek (fd,-(sizeof(sb)),1) ;
break ;
}
}
sb.s_uid = uid ;
for ( i = 0 ; i < OBJECTS ; i++ )
{
sb.s_ov[i] = objval[i] ;
sb.s_ob[i] = objbit[i] ;
sb.s_ol[i] = objloc[i] ;
}
for ( i = 0 ; i < PLACES ; i++ )
{
sb.s_pb[i] = plcbit[i] ;
}
for ( i = 0 ; i < VARS ; i++ )
{
sb.s_vv[i] = varval[i] ;
sb.s_vb[i] = varbit[i] ;
}
if ( write (fd,(char *)&sb.sizeof(sb)) != sizeof(sb) )
{
(void) close(fd) ;
return (ERROR) ;
}
(void) close(fd) ;
return (OK) ;
}
int resgm ()
{
register int i ;
register int uid ;
register int fd ;
if ( ( fd = open (FREEZER,READONLY) ) < 0 )
return (ERROR) ;
uid = getuid() + 1 ;
forever
{
if ( read(fd,(char *)&sb,sizeof(sb)) != sizeof(sb) )
{
(void) close (fd) ;
return (ERROR) ;
}
if ( sb.s_uid == uid )
break ;
}
for ( i = 0 ; i < OBJECTS ; i++ )
{
objval[i] = sb.s_ov[i] ;
objbit[i] = sb.s_ob[i] ;
objloc[i] = sb.s_ol[i] ;
}
for ( i = 0 ; i < PLACES ; i++ )
{
plcbit[i] = sb.s_pb[i] ;
}
for ( i = 0 ; i < VARS ; i++ )
{
varval[i] = sb.s_vv[i] ;
varbit[i] = sb.s_vb[i] ;
}
(void) close(fd) ;
return (OK) ;
}
int delgm ()
{
register int uid ;
register int fd ;
if ( ( fd = open (FREEZER,READWRITE) ) < 1 )
return (ERROR) ;
uid = getuid() + 1 ;
forever
{
if ( read(fd,(char *)&sb,sizeof(sb)) != sizeof(sb) )
{
(void) close (fd) ;
return (ERROR) ;
}
if ( sb.s_uid == uid )
break ;
}
sb.s_uid = 0 ;
(void) lseek (fd,-(sizeof(sb)),1) ;
if ( write (fd,(char *)&sb,sizeof(sb)) != sizeof(sb) )
{
(void) close(fd) ;
return (ERROR) ;
}
(void) close(fd) ;
return (OK) ;
}
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
int say (key)
register int key ;
{
register int rec ;
if ( key == NULLTXT )
return ;
if ( key == BLANKTXT )
{
printf ("\n") ;
return ;
}
if ( key == OKTXT )
{
printf ("Ok.\n") ;
return ;
}
if ( ( rec = saykey (key) ) < 0 )
return ;
if ( readk (dbunit,rec,textbuf,TBUFSIZE) < 1 )
return ;
printf ("%s",textbuf) ;
return ;
}
int sayval (key,val)
int key, val ;
{
register int rec, i, endb ;
rec = saykey (key) ;
if ( ( endb = readk (dbunit,rec,textbuf,TBUFSIZE) ) < 1 )
error ("Sayval","bad text key %d!",key) ;
for ( i = 0 ; i < endb ; i++ )
{
if ( textbuf[i] == REPLACE )
{
printf ("%d",val) ;
continue ;
}
putchar(textbuf[i]) ;
}
return ;
}
int saykey (key)
register int key ;
{
register int rec, b ;
switch (class(key))
{
case OBJECT:
if ( where (key) != INHAND )
{
if ( eval (key) < 0 )
return (ERROR) ;
rec = key + ( (eval(key) + 1) * MAXOBJECTS ) ;
}
else
rec = key ;
break ;
case PLACE:
b = bitval (status) ;
if ( (b&LOOKING) )
rec = key + MAXPLACES ;
else
if ( (b&BRIEF) && (bitval(key)&BEEN) )
rec = key ;
else
if ( (b&FAST) )
rec = key ;
else
rec = key + MAXPLACES ;
break ;
case TEXT:
rec = key ;
break ;
default:
error ("Saykey","bad key %d!",key) ;
break ;
}
return (rec) ;
}
int saynam (key,op)
int key, op ;
{
register int i, j ;
int rec, endb ;
char word[20] ;
for ( j = 0 ; j < LINELEN ; j++ )
if ( op == argwd[j] || op == ref(argwd[j]) )
break ;
if ( j < LINELEN )
(void) strncpy (word,lex[j],20) ;
else
if ( findnam (op,word) != op )
error ("Saynam","bad name %d!",op) ;
rec = saykey (key) ;
if ( ( endb = readk (dbunit,rec,textbuf,TBUFSIZE) ) < 1 )
error ("Saynam","bad key %d!",rec) ;
up2low (word) ;
for ( i = 0 ; i < endb ; i++ )
{
if ( textbuf[i] == REPLACE )
{
printf ("%s",word) ;
continue ;
}
putchar (textbuf[i]) ;
}
return ;
}
int findnam (val,s)
int val ;
char *s ;
{
register struct symstr *p ;
register int i ;
for ( i = 0 ; i < TABSIZ; i++ )
for ( p = symtab[i] ; p != NIL ; p = p->s_nxt )
{
if ( p->s_val == val )
{
(void) strcpy (s,p->s_nam) ;
return (val) ;
}
}
return (ERROR) ;
}
int up2low (word)
register char *word ;
{
for ( ; *word ; word++ )
if ( (*word) >= 'A' && (*word) <= 'Z' )
*word += ( 'a' - 'A' ) ;
return ;
}
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
static char *ops [MAXOPS] =
{
"ADD", "AND", "ANYOF", "APPORT",
"AT", "BIC", "BIS", "BIT",
"CALL", "CHANCE", "DEFAULT", "DEPOSIT",
"DIVIDE", "DROP", "ELSE", "EOF",
"EOI", "EOR", "EVAL", "EXEC",
"FIN", "GET", "GOTO", "HAVE",
"IFAT", "IFEQ", "IFGE", "IFGT",
"IFHAVE", "IFKEY", "IFLE", "IFLOC",
"IFLT", "IFNEAR", "INPUT", "ITLIST",
"ITOBJ", "ITPLACE", "KEYWORD", "LDA",
"LOCATE", "MOVE", "MULT", "NAME",
"NEAR", "NOT", "OR", "PROCEED",
"QUERY", "QUIT", "RANDOM", "SAY",
"SET", "SMOVE", "STOP", "SUB",
"SVAR", "VALUE"
} ;
int CurKey = -1 ;
int showop (active,op,args)
int active, op ;
short int args[3] ;
{
register int n, i ;
if ( active )
printf ("%5d: ",CurKey) ;
else
printf ("(skip) ") ;
if ( op < 0 || op >= 58 )
{
printf ("bad opcode (%d)\n",op) ;
return ;
}
printf ("%-7,7s",ops[op]) ;
n = opnum (op) ;
for ( i = 0 ; i < n ; i++ )
printf (" %5d",args[i]) ;
printf ("\n") ;
return ;
}
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
#define SMEMSIZ 450
static struct symstr smem[SMEMSIZ] ;
static int psmem = SMEMSIZ ;
int define (nam,val)
char *nam ;
int val ;
{
register struct symstr *p ;
register int h ;
extern char *strsav () ;
/* assume the symbol does not exist */
if ( psmem <= 0 )
error ("Symbol Define","symbol table full on `%s'",nam) ;
p = &(smem[--psmem]) ;
p->s_nam = strsav (nam) ;
p->s_val = val ;
h = hash (nam) ;
p->s_nxt = symtab[h] ;
symtab[h] = p ;
return ;
}
int find (name)
char *name ;
{
register struct symstr *p ;
for ( p = symtab[hash(name)] ; p != NIL ; p = p->s_nxt )
{
if ( strncmp (name,p->s_nam,MATCH) == 0 )
{
return (p->s_val) ;
}
}
return (ERROR) ;
}
int hash (s)
register char *s ;
{
register int h, i ;
for (i = h = 0 ; *s != EOS && i < MATCH ; i++ )
h += *s++ ;
return ( ( h % TABSIZ ) ) ;
}
#define CMEMSIZ 2600
static char cmem[CMEMSIZ] ;
static int pcmem = 0 ;
char *strsav (s)
char *s ;
{
register char *p ;
register int n ;
n = strlen(s) + 1 ;
if ( (pcmem+n) >= CMEMSIZ )
error ("Strsave","Out of symbol space on `%-10.10s'\n",s) ;
p = &(cmem[pcmem]) ;
pcmem += n ;
(void) strcpy (p,s) ;
return (p) ;
}
#ifdef PSTAB
int pstab ()
{
register int i, j ;
register struct symstr *p ;
for ( i = j = 0 ; i < TABSIZ ; i++ )
{
for ( p = symtab[i] ; p != NIL ; p = p->s_nxt )
{
printf (" %-6.6s %5d",p->s_nam,p->s_val) ;
if ( (++j)%4 == 0 )
printf ("\n") ;
}
}
printf ("\n\n") ;
printf ("Total number of symbols in symbol table is %d\n",j) ;
printf ("Total symbol structures still available is %d\n",psmem) ;
printf ("Total character storage space used is %d\n",pcmem) ;
return ;
}
#endif PSTAB
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
#ifndef class
int class (key)
int key ;
{
if ( key < 0 || key > MAXKEY )
return (clss[0]) ;
return (clss[key/1000]) ;
}
#endif class
int eval (key)
int key ;
{
register int val ;
switch (class(key))
{
case INIT:
val = key ;
break ;
case OBJECT:
val = objval[indx(key)] ;
break ;
case VARIABLE:
val = varval[indx(key)] ;
break ;
default:
error ("Eval","bad key %d!",key) ;
break ;
}
return (val) ;
}
#ifndef indx
int indx (key)
int key ;
{
register int i, m ;
i = key % 1000 ;
switch (class(key))
{
case OBJECT:
m = OBJECTS ;
break ;
case PLACE:
m = PLACES ;
break ;
case VARIABLE:
m = VARS ;
break ;
default:
error ("Indx","bad key %d!",key) ;
break ;
}
if ( i < 0 || i >= m )
error ("Indx","bad index %d for key %d!",i,key) ;
return (i) ;
}
#endif indx
#ifndef logical
int logical (instr)
short int instr ;
{
if ( instr < 0 || instr >= MAXOPS )
error ("Logical","bad opcode %d!",instr) ;
return (ltab[instr]) ;
}
#endif logical
int movobj (key,loc)
int key, loc ;
{
if ( class(key) != OBJECT )
error ("Movobj","not an object %d!",key) ;
objloc[indx(key)] = loc ;
return ;
}
int near (key)
int key ;
{
register int w, b, h ;
w = where (key) ;
b = bitval (key) ;
h = eval(here) ;
if ( w == h || ( w == (h-1) && (b&DUAL) ) )
return (YES) ;
return (NO) ;
}
#ifndef opnum
int opnum (opcode)
int opcode ;
{
if ( opcode < 0 || opcode >= MAXOPS )
error ("Opnum","bad opcode %d",opcode) ;
return (opn[opcode]) ;
}
#endif opnum
int ref (key)
int key ;
{
if ( class(key) == VARIABLE )
return (varval[indx(key)]) ;
return (key) ;
}
#ifndef where
int where (key)
int key ;
{
if ( class(key) != OBJECT )
error ("Where","not object key %d!",key) ;
return (objloc[indx(key)]) ;
}
#endif where
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
static int powof2[16] =
{
000001, 000002, 000004, 000010,
000020, 000040, 000100, 000200,
000400, 001000, 002000, 004000,
010000, 020000, 040000, 0100000
} ;
int bitval (key)
register int key ;
{
register int val ;
switch (class(key))
{
case INIT:
if ( key < 0 || key > 15 )
error ("Bitval","bad key %d!",key) ;
val = powof2[key] ;
break ;
case OBJECT:
val = objbit[indx(key)] ;
break ;
case VARIABLE:
val = varval[indx(key)] ; /* single indirection */
switch (class(val))
{
case OBJECT:
val = objbit[indx(val)] ;
break ;
case PLACE:
val = plcbit[indx(val)] ;
break ;
default:
val = varbit[indx(key)] ;
break ;
}
break ;
case PLACE:
val = plcbit[indx(key)] ;
break ;
default:
error ("Bitval","bad key %d!",key) ;
break ;
}
return (val) ;
}
int setbit (key, bits)
int key, bits ;
{
register int val ;
switch (class(key))
{
case OBJECT:
objbit[indx(key)] = bits ;
break ;
case VARIABLE:
varbit[indx(key)] = bits ;
val = varval[indx(key)] ;
switch (class(val))
{
case OBJECT:
objbit[indx(val)] = bits ;
break ;
case PLACE:
plcbit[indx(val)] = bits ;
break ;
}
break ;
case PLACE:
plcbit[indx(key)] = bits ;
break ;
default:
error ("SetBit","bad key %d!",key) ;
break ;
}
return ;
}
int setval (key, val)
int key, val ;
{
switch (class(key))
{
case OBJECT:
objval[indx(key)] = val ;
break ;
case VARIABLE:
varval[indx(key)] = val ;
break ;
default:
error ("Setval","bad key %d!",key) ;
break ;
}
return ;
}
#
# Makefile for the Adventure interpreter.
# (c) Ken Wellsch 1985
#
CFLAGS = -0
KLIB = ../kio/klib.a
ALIB = alib.a
MAIN = adv.c
SRC = error.c advglob.c cache.c command.c condition.c \
exec.c process.c savgm.c say.c showop.c symtab.c \
util.c values.c webster.c
OBJ = error.o advglob.o cache.o command.o condition.o \
exec.o process.o savgm.o say.o showop.o symtab.o \
util.o values.o webster.o
HEADER = adefs.h
adv: $(ALIB)
cc $(CFLAGS) $(MAIN) alib.a $(KLIB) -o adv
size adv
$(SRC):: $(HEADER)
touch $@
$(ALIB): $(SRC)
-ar x $(ALIB)
cc $(CFLAGS) -c $?
rm -f $(ALIB)
-ar ru $(ALIB) $(OBJ)
rm -f *.o
ranlib $(ALIB)
clean:
rm *.o
backup:
cp Makefile $(HEADER) $(SRC) $(MAIN) bkup
lint:
lint $(SRC) $(MAIN)
print:
lpr -Phw -p -J "ADV" Makefile $(HEADER) $(MAIN) $(SRC)