🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.sources.apple2
1 messages
1 total messages Started by Jonathan A. Chandross Sat, 01 Jun 1991 02:39
v001SRC051: Inmate Parser -- ATN Based, Part01/05
#53
Author: Jonathan A. Chandross
Date: Sat, 01 Jun 1991 02:39
1870 lines
51069 bytes
Submitted-by: Phil Goetz (goetz@cs.buffalo.EDU)
Posting-number: Volume 1, Source:51
Archive-name: util/parser/inmate/part01
Architecture: ANY_2
Version-number: 1.00

This is the ATN-based parser for Phil Goetz's text adventure "Inmate".

It isn't a stand-alone piece of code, and will likely require some
judicious study before it can be used.

Enjoy.


=Document
-
-
-
-
-
-
-                                 Inmate Parser
-
-
-
-
-     ENGLISH COMMAND PARSING
-
-          Inmate is an adventure game.  Its parser handles objects,
-     sources, destinations, adjectives, prepositions, adverbs, and adver-
-     bial phrases.[1]
-
-
-          The Inmate parser runs on an Apple ][+ in 6502 machine language
-     and currently occupies about 4K of memory, and is an augmented transi-
-     tion network (ATN).  It is supported by an input routine, a lexical
-     analysis routine with 700-word dictionary, 50 verbs, 150 objects, 15
-     adjectives, and about 300 edges indicating properties of objects or
-     relationships between objects.  It has 4 phases: lexical analysis,
-     pre-ATN grammatical transformations, the ATN, and command handlers to
-     manipulate the game world.
-
-
-          If you aren't familiar with ATNs, a good tutorial can be found
-     in:
-
-
-          Author:     Madeleine Bates
-          Title:      "The Theory And Practice of Augmented Transition
-                      Network Grammars"
-          Book Title: Natural Language Communications With Computers
-          Series:     Lecture Notes In Computer Science
-          Number:     63
-          Publisher:  Springer-Verlag
-          City:       New York, NY
-          Date:       1987
-          Editor:     Leonard Bole
-
-
-     Lexical Analysis
-
-          Every word in the dictionary has at least 1 type, and often 2 or
-     3.  Some types have a number associated with them:  nouns, for
-     instance, have an object number.  Analysis produces one word number
-     and 1 to 3 word types for each word, stored in parallel arrays.  There
-     are 3 special types: synonyms, transformationals, and nulls.  Synonyms
-     take the types AND word number of another word in the dictionary.
-     This is so a word and all its synonyms can be identified by the same
-     _________________________
-
-       [1] Note: I removed the adverbial phrases and adverbs
-     because  they  seemed  to  have no purpose in an adven-
-     ture.]  The files in this distribution  contain  every-
-     thing  needed for the parser except for some of the se-
-     mantic network.
-
-
-
-
-
-
-
-
-
-                                - 2 -
-
-
-     word number.  Transformationals are marked for pre-ATN transformation
-     (see below).  Nulls are deleted.  Articles (a, the), demonstratives
-     (i.e. these, those) and intensifiers (i.e. very, extremely) are
-     currently classified as nulls.
-
-
-     Pre-ATN Grammatical Transformation
-
-
-          The transformer scans the parallel arrays of word number and word
-     type for patterns which should be transformed to simpler forms using
-     the basic transformational operations of movement, copying, insertion,
-     and deletion.  These include specific quirks of the language as well
-     as general grammatical transformations.  For instance, you would want
-     to transform VT NP1 NP2 to VT NP2 "TO" NP1 so the ATN can pick up NP2
-     as the object.
-
-
-          Note that the transformer will make a transformation if each word
-     in the input matches sequential words in the pattern using ANY of the
-     3 possible types.  So it is possible that a transformation could be
-     made with a mistaken type assumption.  In practice, this has not been
-     a problem.
-
-
-          Each transformation has a priority level assigned to it.  So
-     high-level priority transforms are tried first.  This prevents an
-     uncommon transformation from taking effect where a common one should
-     have been used.
-
-
-     ATN
-
-
-          A transition network is a set of transitions from one state, or
-     node, to another based on the section of input currently being exam-
-     ineid.  In a nondeterministic net such as this one, there is more than
-     one possible choice at some nodes.  If the program takes the wrong
-     transition and winds up at a dead end, it must be able to trace back
-     to its last decision branch and try another path.  If the input is
-     unparsable, the proram will trace all possible nodes of the network
-     and eventually back out of the original node.  The only other way to
-     leave a transition network is to succeed in parsing the input.  Suc-
-     cess is achieved by reaching the end of the input while in an "accept-
-     ing" node.
-
-
-          A recursive transition network is one that can call entire net-
-     works, including itself, as a node.  An augmented transition network
-     (ATN) is one which can perform special actions during each transition
-     and have special (i.e. semantic) requirements for a transition.  For
-     example, the transition from node 7 to node 8 in my network is invoked
-     if the current word is a preposition of instrument such as "with" or
-     "using".  The transition checks the verb's case frame to see if it
-
-
-
-
-
-
-
-
-
-                                - 3 -
-
-
-     allows an instrument (verbs which do include "hit" and "wash").  If
-     so, it stores the current word in the Prep of Instrument slot, goes on
-     to the next word, and enters node 8.  If not, it returns to node 7.
-     Some transitions leave flags to be checked/used later.  The word "his"
-     in "Get his book" (if Ed is the only man in the room) should be used
-     when finding objects to remove all books from the object list that are
-     not either owned by or presently "in" (carried by) Ed.  It doesn't
-     now.
-
-          This network is not truly recursive in that it cannot normally
-     call independent networks as a node.  It fakes recursive calling of
-     noun phrases (NPs) through tricky manipulations when entering and
-     leaving NPs and by using a special stack to keep track of NP calls.
-     The difficulty of implementing this in machine language is just one of
-     many reasons not to write your parser in machine language.
-
-          Backtracking is handled by associating a node and a transition
-     index with each word.  When a node is entered, its number is stored in
-     an array parallel to the word arrays.  When it is left by a successful
-     transition, the index pointing to the next branch that would have been
-     examined from that node is saved in another parallel array.  If the
-     program fails at the next node, it decrements the word counter,
-     reenters the node it came from, loads the index, and resumes where it
-     left off.
-
-          One great difficulty with this is that ALL data created/changed
-     by the unsuccessful link of transitions must be undone.  This might be
-     one reason to write your parser in ProLog.  It would be better to have
-     registers which are associated with a particular parse path through
-     the network which are then copied into global registers, than to use
-     the same global registers throughout (which I did).
-
-          Jumps are special cases because they involve a transition, yet
-     are not associated with a word.  However, since jumps are always the
-     last transition tested within a node, the node jumped from can be
-     removed from the backtracking list and thus the parallel arrays are
-     not thrown out of sync.
-
-          The purpose of this ATN is to fill in certain slots for the com-
-     mand handler.  These slots contain the verb, object list, preposition
-     of instrument, instrument, prep of destination (ie into, onto), desti-
-     nation, and place (ie "north", "bed" when used in ungrammatical but
-     popular sentence "go bed").
-
-          Say you enter
-          PUT THE BAG IN THE BACKPACK IN THE BIG BLUE BOX
-     The first word is always the verb.  Lexical analysis deletes the THEs:
-          PUT BAG IN BACKPACK IN BIG BLUE BOX
-     Now, a listing of the ATN looks like this (X! means that node X is an
-     accepting node; that is, if the sentence ends when it reaches that
-     node, it is accepted):
-
-
-
-
-
-
-
-
-
-
-
-
-                                - 4 -
-
-
-
-               Current node           Input            Next node
-               _________________________________________________
-                    0         Verb of place                1
-                              Transitive verb              2
-                              Intransitive verb            7
-                    1         Preposition of motion        6
-                              Place                        7
-                    2         Noun Phrase (object)         3
-                    3!        Exclusionary                 4
-                              Jump                         5
-                    4         NP (excluded from obj)       5
-                    5!        Preposition of motion        6
-                              Jump                         7
-                    6         NP (destination)             7
-                    7!        Prep of instrument           8
-
-
-     The noun phrase network looks like this:
-
-                          9    Noun group            10
-                         10!   Prep of no motion     11
-                         11    Noun group            12
-                         12!   Conjunction ("and")   9
-
-
-     The noun group network looks (I think) like this:
-
-                        13    Possessive (ie "his")   14
-                              Jump                    14
-                        14    Number ("7", "all")     15
-                              Jump                    15
-                        15    Adjective               15
-                              Classifier              16
-                              Noun                    17
-                        16    Classifier              16
-                              Noun                    17
-                        17!   Conjunction             14
-
-
-
-          (A classifier is very similar to an adjective, i.e. "sleeping" is
-     a classifier for "sleeping bag".  The only difference to the program
-     is that adjectives are handled using edges, and classifiers modifying
-     an object never change.)
-
-
-          PUT is a transitive verb, and so the ATN enters node 2 and looks
-     for a noun phrase.  The noun phrase network identifies BAG IN BACKPACK
-     IN BOX as a noun phrase in 3 recursive passes.  On the first pass, it
-     identifies BAG as a noun and tries to put it in the object list.  It
-     sees that BAG is a superset containing BAG1 (the plastic bag) and BAG2
-     (the sleeping bag), so it puts both in the object list.  IN tells the
-     NP to call itself using the next NP as a source for the last NP.  When
-     it finds BACKPACK, it removes any bags that are not IN the backpack
-
-
-
-
-
-
-
-
-                                - 5 -
-
-
-     from the object list.  Again, IN instructs the program to reenter the
-     NP network and look for a source for BAG.  (This should really look
-     for a source for BACKPACK, but if a BOX contains the proper BAG and
-     the BACKPACK contains the proper BAG, the BACKPACK is probably in the
-     BOX.  I haven't tried GET BACK IN BOX IN BACKPACK yet; my computer is
-     dismantled.) The NP network places BIG and BLUE in the adjective list.
-     (The adjective list is not used after parsing.)  When it reaches BOX,
-     it puts all boxes in the known world in the object list, then removes
-     all boxes that are not BIG and BLUE.  Then it removes all bags from
-     the object list that are not in the big blue box, and finds it has no
-     objects left.  It concludes that IN BOX must specify the destination
-     of the bag in the object list, and so puts the bags back in the object
-     list and puts BOX1 (big and blue) in the destination slot and IN in
-     the preposition of destination slot (used by the command handler).
-
-
-     Errors, Ellipsis:
-
-
-          If the network is unable to parse a sentence, it tries to inter-
-     pret the sentence as a sentence fragment by inserting it into the last
-     sentence parsed.  So if you say "Take the book" and them "examine", it
-     replaces "take" in "Take the book" with "examine" and tries (success-
-     fully) to parse that.
-
-
-     Pronouns:
-
-
-          The only pronoun with any meaning is "it".  "It" refers to the
-     last single object referenced.  I might also have a "them" for the
-     last group of objects referred to, but I forget.
-
-
-     Post-ATN Processing
-
-
-          I thought of having a post-ATN processor create conceptual depen-
-     dency representations from the information passed on by the ATN, using
-     something like Wilks' semantic primitives or Schanks' primitive ACTS
-     and inferences.  Instead of writing a command handler for each verb,
-     more general handlers could deal with similar verbs (i.e. give, take,
-     sell, buy; eat, drink).  Ideally, this construction should be used
-     during ATN analysis for semantic interpretation and disambiguation of
-     the sentence, but commands in adventures are almost always unambiguous
-     and simple enough for correct parsing by the ATN.
-
-
-          Using semantic primitives is something I think IF requires, but
-     it is not practical until we can write IF which does not depend on
-     ad-hoc rules that are applied to individual verb-object-etc. combina-
-     tions.  It would be, I think, difficult to apply such ad-hoc rules to
-     a conceptual dependency representation of a sentence - not for the
-     computer, but for the human who would have to translate all his ad-hoc
-
-
-
-
-
-
-
-
-
-                                - 6 -
-
-
-     situations into conceptual dependency representations while program-
-     ming.
-
-
-     Command Handlers
-
-
-          The command handlers might be designed for use with a processor
-     as mentioned above.  Currently, however, they are verb-specific com-
-     mand handlers as in most adventure games.  They manipulate the game
-     world by adding and/or deleting edges in the database.  They can also
-     trigger actions/messages/etc under certain conditions.
-
-
-          If a list of more than one object is provided with an action, the
-     action is repeated once for each object.
-
-
-     Source Code
-
-
-          To read the source, first read "inmate" .  That is the root file,
-     which is assembled, and includes all the other files.  The comments in
-     it explain what each file does.  So you can just read the files you're
-     interested in.
-
-
-          The list of files is:
-
-         File                             Contents
-       __________________________________________________________________
-       atn         Augmented transition network (parser)
-       caseframe   Verb case frames
-       cndact      Defines interpreted adventrue language used by verb
-                   handlers and other routines.
-       display30   Print location & happenings each turn
-       edges       Routines for altering
-       handler     Verb handler jumped to after parse completed
-       gennum      ???
-       inmate      the game; glues together all the modules
-       io          Save
-       lex         Lexical analysis: Examine raw string & find words
-       macros      macro definitions
-       monitor2    Call monitor routines in other RAM bank
-       print22     Print messages, strings; including compression routine
-       start       Initialization
-       transform   Grammatical transformations
-       transit     Transitions for the ATN
-       tsub        Subroutines called by the transitions
-       verbs       Verb execution routines
-       voca        Vocabulary, A-I
-       vocj        Vocabulary, J-Z
-
-
-
-
-
-
-
-
-
-
-
-                                - 7 -
-
-
-          The Inmate parser source is for the S-C Macro Assembler.  It
-     includes a lot of assembly directives.  The VOCab files have lines
-     like:
-           .AS -/ORT/
-     which probably means "negative (hi-bit set) ASCII for "ORT".  I think
-     .AT is for terminated ASCII (last character has hi-bit reversed).
-     More directives:
-
-              .DA     Data
-              .OR     Set object code origin address
-              .TF     Set target file name
-              .IN     Include
-              .BS     Data block of certain size
-              .US     User-defined directive, in this case meaning
-                      "write out the compressed version of the ASCII text
-                      given, using my text-compression algorithm".
-              .HS     Hexadecimal string.
-            #SYMBOL   Low byte of symbol's value
-                      SYMBOL
-
-
-
-
-     Phil Goetz
-     4023 Huckleberry Row
-     Ellicott City, MD 21043
-
-     goetz@cs.buffalo.EDU
-
-
=Manifest
-Document
-atn
-caseframe
-cndact
-display30
-edges
-gennum
-handler
-inmate
-io
-lex
-macros
-monitor2
-print22
-start
-transform
-transit
-tsub
-verbs
-voca
-vocj
=atn
-*
-SAVEATN16.1,S6,D1
-*--------------------------------
-* AUGMENTED TRANSITION NETWORK
-*--------------------------------
-* ON ENTRY: WORDS=# OF WORDS
-TNPNT  .EQ $C
-ATN    JSR CHKEY
-       BIT DBGFLG   ? "ATN:"?
-       BPL .4
-       JSR FD8E
-       LDX #0
-.1     LDA WTYPE,X  NUM IS ALWAYS 1ST TYPE
-       CMP #NUM
-       BNE .2
-       LDA WNOUN,X
-       JSR FDDA
-       JMP .3
-.2     LDA WLO,X
-       LDY WHI,X
-       JSR PRWRD
-.3     LDA #$A0
-       JSR FDF0
-       INX
-       CPX WORDS
-       BCC .1
-       LDY /ATNS
-       LDA #ATNS
-       JSR PS
-.4     LDX #33
-       LDA #0
-       STA UCONJ    CONJ NOT USED YET
-       STA JUCONJ
-.5     STA SDEST-1,X  ZERO SLOTS & OBJLIST
-       DEX
-       BNE .5
-       STX WORDNODE
-       STX CURWORD
-       STX NPSP
-       STX PFND
-       LDA #NODE0
-       STA TNPNT
-       LDA /NODE0
-       STA TNPNT+1
-A1     LDY #0
-A2     LDA (TNPNT),Y
-       BEQ A4     END OF NODE
-       STA TEMP     SAVE IN CASE IT'S A JMP
-       BMI A61      JMP
-       CMP WTYPE,X
-       BEQ A6
-       CMP WTYPE2,X
-       BEQ A6
-       CMP WTYPE3,X
-       BEQ A6
-       INY
-       INY
-       INY
-A3     INY
-       BNE A2       ALWAYS
-A4     DEX        FAIL,BACK TO LAST NODE
-       DEC CURWORD
-       BMI ASSUME   NO NODES LEFT=ALL OPTIONS EXPLORED
-       LDA WORDNODE,X  CONTINUE WI NODE X
-       JSR INTONP   IF GOING INTO MIDDLE OF NP, NPSP=NPSP+2
-       JSR GETNODE
-       LDY WORDINDEX,X
-       JMP A2
-A6     STA WTFIN,X  SUCCESS
-A61    INY
-       LDA (TNPNT),Y
-       STA .7+1
-       INY
-       LDA (TNPNT),Y
-       STA .7+2
-       INY
-       LDA (TNPNT),Y  NEXT NODE
-       CMP #EN      ENDNODE
-       BNE .65
-       BIT DBGFLG   PRINT "E"?
-       BPL .63
-       LDA #$A0
-       JSR FDF0
-       LDA #"E
-       JSR FDF0
-.63    INX
-       CPX WORDS
-       DEX
-       BCC A3
-       JMP CHECKSENT  ENDNODE ALWAYS ACCEPTS
-.65    BIT TEMP
-       BMI .67      IF A JMP, SAVE NEXT NODE IN CURRENT NODE
-       PHA
-       INY
-       TYA
-       STA WORDINDEX,X  LIKEWISE SAVE CURRENT INDEX
-       PLA
-       INC CURWORD
-       INX
-.67    STA WORDNODE,X  SAVE NEXT NODE IN CASE YOU MUST COME BACK LATER
-       JSR GETNODE
-.7     JSR 0
-A8     LDX CURWORD
-       CPX WORDS    DONE?
-       BCS .9
-       JMP A1
-.9     LDA WORDNODE,X
-       TAX
-       LDA ACCEPT,X  DOES THIS NODE ACCEPT EOL?
-       PHP
-       LDX CURWORD
-       PLP
-       BEQ A4       NO,BACK UP
-       JMP CHECKSENT  YES,PARSED!
-* ASSUME: TRY TO FIND OBJ,PLACE,OR INSTR FROM ROOM
-ASTRIED .BS 1       1=ALREADY TRIED
-RETRY  .BS 1        1-FF=TRY ATN AGAIN
-ASSUME LDA DQ       IN QUOTES?
-       BEQ .0       NO
-       LDA #0       NOT COMMAND, CHAR NOW DOES THINGS OF OWN WILL
-       STA DQ
-       JMP SPEAK
-.0     LDY ASTRIED
-       BNE .12      ALREADY TRIED
-       LDA LIGHT
-       BEQ .12      NO LIGHT, NO ASSUME
-       STY RETRY
-       STY TNPNT    FOR VT OBJ
-       INC ASTRIED  MARK AS TRIED
-       BIT DBGFLG
-       BPL .8
-       LDY /AS
-       LDA #AS
-       JSR PS
-.8     LDA WTFIN    VERB TYPE
-       CMP #VT+1    VERB?
-       BCC .11      YES
-.12    JMP ELLIPSIS
-.11    CMP #VP
-       BNE .4
-       LDA SDEST
-       BNE .39      AS5
-*VP GIVEN BUT NO PLACE
-       LDA LOC
-       LDX #HOLDS
-       JSR GETOBJ
-.1     DEX
-       BMI .2
-       PLA
-       CMP #LP+1    IS IT A PLACE?
-       BCS .1       NO
-       LDY SDEST
-       BEQ .15
-       JMP .47      MORE THAN 1 PLACE IN THIS LOC,FAILURE
-.15    STA SDEST
-       BEQ .1       ALWAYS
-.2     LDA SDEST
-       BEQ .12      NO PLACE FOUND
-       JMP .48
-.39    JMP AS5
-.4     CMP #VT
-       BNE .39
-       LDX OBJLIST
-.41    BNE .39
-       STX TNPNT    X MUST BE 0 IF GETOBJ ISN'T CALLED
-       STX OBJS     DON'T RETURN FROM ELIM USING STEMP
-       TXA
-       LDX #20
-.98    STA NOUNLIST-1,X
-       DEX
-       BNE .98
-*VT GIVEN BUT NO OBJ
-       LDA CASEFRAME
-       AND #$20
-       BEQ .42      CAN'T BE IN INVEN
-       LDA WVERB
-       CMP #GET     GET ALLOWS PICKING UP OBJS IN INVEN
-       BEQ .42
-       LDA #ME
-       LDX #HOLDS
-       JSR GETOBJ   INVEN
-       STX TNPNT
-.42    BIT CASEFRAME
-       BVC .44      OBJS IN LOC NOT ALLOWED
-       LDA LOC
-       LDX #HOLDS
-       JSR GETOBJ
-       TXA
-       CLC
-       ADC TNPNT
-       TAX
-.44    CPX #20      MAX
-       BCC .45
-       PLA
-       DEX
-       BNE .44
-.45    DEX
-       BMI .46
-       PLA
-       JSR FF4A
-       LDA $45
-       JSR PNTOBJ
-       LDY #5
-       LDA (MISC),Y
-       PHP          WORKS SINCE N IS N-BIT
-       JSR FF3F
-       PLP          PLA WOULD DESTROY #
-       BMI .45      CAN'T ASSUME OBJS WHICH ARE INVISIBLE
-       STA NOUNLIST,X
-       JMP .45
-.46    STX NMSG     DON'T PRINT
-       JSR COMP     CHL ALSO JSRs COMP (AT END)
-       JSR CHL-2
-       INC NMSG
-       LDA NOUNLIST+1    MORE THAN 1 OBJ LEFT?
-.47    BNE ELLIPSIS      YES
-       LDA NOUNLIST
-       BEQ ELLIPSIS
-*      BNE .48
-*      BIT CASEFRAME
-*      BVC ELLIPSIS OBJS IN LOC FORBIDDEN
-*      LDA #ME      ADD ME IF NOTHING ELSE IN LOC
-.48    JSR INSWRD
-       LDA #CN
-*CHANGE TO #PROPER IF HUMAN/ANIMATE
-       STA WTYPE+1
-       STA RETRY
-*AS5    LDA CASEFRAME+1
-*       AND #4
-*       BEQ .9       NO INSTR REQD
-*       LDA SINSTR
-*       BNE .9
-** INSTR REQD,NOT GIVEN
-* CURRENTLY HANDLED BY CHECKSENT
-*.9
-AS5    LDA RETRY
-       BEQ ELLIPSIS NO SUCCESS
-       JMP ATN
-* ELLIPSIS
-* IF UNABLE TO PARSE LINE, TAKE EACH WORD AND SUBSTITUTE IT FOR A WORD
-* OF THE SAME TYPE IN THE LAST SENTENCE, THEN RETRY ATN.
-* NOUN PHRASES CAUSE TROUBLE: MUST SUBSTITUTE ONE NOUN PHRASE OF LENGTH X
-* FOR OLD NOUN PHRASE OF LENGTH Y
-ELTRIED .BS 1       1=ELLIPSIS ALREADY TRIED ON THIS INPUT
-       .MA PN
-       SEC
-       SBC #NUM
-       CMP #EXC+1-NUM    C=0 IF TYPE IN A IS PART OF A NOUN
-       .EM
-SF     JMP SENTFAIL
-ELLIPSIS LDY ELTRIED
-       BNE SF        ALREADY TRIED ELLIPSIS
-       BIT DBGFLG
-       BPL .1
-       LDY /EL
-       LDA #EL
-       JSR PS
-       LDY #0
-.1     LDX #0
-E1     LDA WTYPE,X
-       >PN
-       BCC .3
-       LDA WTYPE2,X
-       >PN
-       BCC .2
-       LDA WTYPE3,X
-       >PN
-       BCC .2
-       JMP NOTNT
-.2     ADC #NUM     RESTORE TYPE
-       STA WTYPE,X
-.3     LDA LWTFIN,Y
-       >PN
-       BCC .35
-       INY
-       CPY LWORDS
-       BCC .3
-       BCS SF       NT NOT FOUND
-.35    STY MISC     POINTS TO 1ST NT
-.4     INY
-       CPY LWORDS
-       BCS .5
-       LDA LWTFIN,Y
-       >PN
-       BCC .4
-.5     TYA          POINTS TO 1ST NON-NT OLD WORD
-       DEY
-       STY TNPNT+1
-       SBC MISC     A=LENGTH OF OLD NT GROUP
-       STA TNPNT
-       STX MISC+1   POINTS TO 1ST NEW NT
-.6     INX
-       CPX WORDS
-       BCS .7
-       LDA WTYPE,X
-       >PN
-       BCC .6
-       LDA WTYPE2,X
-       >PN
-       BCC .65
-       LDA WTYPE3,X
-       >PN
-       BCS .7
-.65    ADC #NUM     RESTORE
-       STA WTYPE,X
-       BCC .6       ALWAYS
-* X POINTS TO 1ST NON-NT NEW WORD
-.7     TXA
-       SBC MISC+1   A=LEN OF NEW NT GROUP
-       SEC
-       SBC TNPNT
-       PHP
-       PHA
-       CLC
-       ADC LWORDS   + OR -
-       STA LWORDS   ADJUST #OLD WORDS
-       PLA
-       PLP
-       BEQ EMOVED
-       BCS .9
-* OLD NTG > NEW NTG
-       SBC #0       SUBTRACTS 1
-       EOR #$FF     CHANGE A FROM - TO +
-       CLC
-       ADC MISC     POINTER TO OLD NT
-       TAY
-       LDX MISC     X POINTS TO 1ST NT
-.8     JSR EMOVE
-       INX
-       INY
-       CPX LWORDS   LWORDS HAS BEEN DECREASED
-       BCC .8
-       BCS EMOVED
-* NEW NTG > OLD NTG
-.9     CLC
-       ADC LWORDS
-       TAX
-       DEX
-       DEX
-       LDY LWORDS
-       DEY
-       DEY
-.10    JSR EMOVE
-       DEX
-       DEY
-       CPY TNPNT+1
-       BCS .10
-EMOVED LDX MISC+1
-       LDY MISC
-.1     LDA WTYPE,X
-       STA LWTFIN,Y
-       JSR NW.OW
-       INX
-       CPX WORDS
-       BCS DONE
-       INY
-       LDA WTYPE,X
-       >PN
-       BCC .1
-NOTNT  LDA LWTFIN,Y
-       CMP WTYPE,X
-       BEQ .2
-       CMP WTYPE2,X
-       BEQ .2
-       CMP WTYPE3,X
-       BNE .3
-.2     CPY LWORDS
-       BCS SENTFAIL
-       JSR NW.OW
-       INX
-       CPX WORDS    DONE?
-       BCS DONE
-.3     INY          NEXT OLD WORD
-       CPY LWORDS
-       BCS SENTFAIL
-       JMP E1
-DONE   LDY #30*4+1  DON'T COPY LWTFIN
-.5     LDA LWLO-1,Y
-       STA WLO-1,Y
-       DEY
-       BNE .5
-       LDX #29
-.6     LDA LWTFIN,X
-       STA WTYPE,X
-       TYA          0
-       STA WTYPE2,X
-       STA WTYPE3,X
-       DEX
-       BPL .6
-       DEC ELTRIED  MARK ELLIPSIS AS ALREADY TRIED
-       JMP ATN
-SENTFAIL LDA #0
-       STA WORDS    DON'T TRY FAILED SENTENCE IN ELLIPSIS
-       BIT DBGFLG
-       BPL .1
-       JSR FD8E     DON'T PRINT ON SAME LINE AS DEBUGGING MESSAGES
-.1     LDY /.2
-       LDA #.2
-       JSR PS
-       JMP PARSE
-.2     .US /I DON'T UNDERSTAND THAT SENTENCE.@=/
-AS     .US /@ASSUMPTION=/
-EL     .US /@ELLIPSIS=/
-INSWRD PHA
-       LDA #"(
-       JSR FDF0
-       LDA WORDS
-       TAX
-       TAY
-       DEY
-       BEQ .3       1 WORD:VP
-.25    JSR TMOVE    MOVE SENT. UP
-       DEX
-       DEY
-       BNE .25      DON'T MOVE VERB
-.3     STY SDEST
-       STY WVERB+1
-       STY WTYPE2+1
-       STY WTYPE3+1
-       PLA
-       STA WNOUN+1  PLACE AFTER VERB
-       DEY
-       STY WHI+1    #$FF
-       INC WORDS
-       JSR PROBJ
-       LDA #")
-       JSR FDF0
-       JMP FD8E
-NW.OW  LDA WLO,X   NEW WORD->OLD SENTENCE
-       STA LWLO,Y
-       LDA WHI,X
-       STA LWHI,Y
-       LDA WVERB,X
-       STA LWVERB,Y
-       LDA WNOUN,X
-       STA LWNOUN,Y
-       RTS
-EMOVE  LDA LWLO,Y
-       STA LWLO,X
-       LDA LWHI,Y
-       STA LWHI,X
-       LDA LWVERB,Y
-       STA LWVERB,X
-       LDA LWNOUN,Y
-       STA LWNOUN,X
-       LDA LWTFIN,Y
-       STA LWTFIN,X
-       RTS
-GETNODE BIT DBGFLG  PRINT NODE?
-       BPL .1
-       PHA
-       LDA #$A0
-       JSR FDF0
-       PLA
-       PHA
-       JSR FDDA
-       PLA
-.1     STA CURNODE
-       ASL
-       TAY
-       LDA NODETAB,Y
-       STA TNPNT
-       LDA NODETAB+1,Y
-       STA TNPNT+1
-       JMP CHKEY
-CURNODE .BS 1       ONLY USED BY INTONP
-INTONP CMP #NP
-       BCC .5
-       CMP #15
-       BCS .5
-       LDY CURNODE  ONLY USE OF CURNODE
-       CPY #NP
-       BCC .45
-       CPY #15
-       BCC .5       UNLESS ALREADY IN NP
-.45    INC NPSP     IF GOING BACK INTO NP,
-       INC NPSP     GIVE IT AN EXIT ROUTINE
-.5     RTS
-*--------------------------------
-ATNS   .US /@A%T%N:=/
-*-------------------------------
-WTYPE  .BS 30
-WTYPE2 .BS 30
-WTYPE3 .BS 30
-OLO    .BS 30       ORIGINAL WORD#: USED FOR STRING SUBST
-OHI    .BS 30       WHEN A CHARACTER REPEATS STRING
-* NEXT 6 MUST BE TOGETHER
-WLO    .BS 30       UP TO 30 WORDS
-WHI    .BS 30
-WVERB  .BS 30
-WNOUN  .BS 30
-WORDS  .BS 1        # OF WORDS
-WTFIN  .BS 30
-WORDNODE .BS 30
-WORDINDEX .BS 30
-* LAST SENTENCE PARSED, USED IN ELLIPSIS
-LWLO   .BS 30
-LWHI   .BS 30
-LWVERB .BS 30
-LWNOUN .BS 30
-LWORDS .BS 1
-LWTFIN .BS 30
-* SLOTS FILLED BY ATN & PASSED TO VERB HANDLERS
-* MODIFY ATN ENTRY IF YOU CHANGE THESE
-SDEST  .BS 1
-SINSTR .BS 1
-SPLACE .BS 1
-SNUM   .BS 1
-SADV   .BS 1
-STIME  .BS 2
-SPI    .BS 2
-SPT    .BS 2
-SPM    .BS 1       USED BY HANDLER
-SPN    .BS 1       USED BY ATN
-OBJLIST .BS 21      1 EXTRA FOR BUFFER
-NOUNLIST .BS 20
-LNL    .BS 20
-SOURCELIST .BS 20
-LOCLIST .BS 20
-CASEFRAME .BS 6
-NPSP   .BS 1        POINTER INTO NP STACK
-NPSTACK .BS 20
-ADJLIST .BS 8
-*
-* ACCEPT:00=LINE CAN'T END IN THIS NODE
-ACCEPT .HS 000000FF00FF00FF00FF0000000000FF00
-*
-*      .DA #PART OF SPEECH REQD FOR TRANSITION,TRANSITION SUBROUTINE,#DEST NODE
-JMP    .EQ $80
-NODE0  .DA #VI,TV,#7
-       .DA #VP,TV,#1
-       .DA #VT,TV,#2
-       .DA #VI,TV,16
-NP     .EQ 11
-NODETAB .DA NODE0,.1,.2,.3,.4,.5,.6,.7,.8,.9,0,.11,.12,.13,.14,.15,.16
-.1     .DA #PLACE,TPLACE,#7
-       .DA #PM,TPM,#6
-       .DA #PRT,TPRT,#1
-       .DA #JMP,TPOBJ,NP
-.2     .DA #PRT,TPRT,#2
-       .DA #JMP,TOBJ,NP  NP OBJ & SOURCE
-.3     .DA #EXC,TRTS,#4
-       .DA #JMP,TRTS,5
-.4     .DA #JMP,TEXC,NP  NP.EXC
-.5     .DA #PM,TPM,#6
-       .DA #PRT,TPRT,#5
-       .DA #JMP,TRTS,7
-.6     .DA #JMP,T6.7,NP  NP.DEST
-*7     .DA #ADJ,TADV,#9
-.7     .DA #PI,T7.8,8
-*      .DA #JMP,TRTS,9
-.8     .DA #JMP,TINSTR,NP  NP.INSTRUMENT
-.9     .DA #0
-*9     .DA #PT,T9.10,#10
-*      .DA #TB,T9.E,EN
-*10    .DA #TIME,T9.E,EN
-.11    .DA #POS,TRTS,#12  POSSESSIVE IGNORED
-       .DA #JMP,TRTS,12
-.12    .DA #NUM,TNUM,#13
-       .DA #JMP,TRTS,13
-.13    .DA #ADJ,TADJ,#13
-       .DA #CN,TNOUN,#14
-       .DA #CNP,TNOUN,#14
-       .DA #PRN,TPRN,#14
-       .DA #PROPER,TNOUN,14
-.14    .DA #PN,TPN,#NP
-       .DA #CONJ,TCONJ,#NP
-       .DA #JMP,TLEAVENP,15
-.15    .DA #0       FAKE NODE FOR NP TO END AT
-.16    .DA #PRT,TPRT,7  ACTUALLY RESTARTS ATN
-EN     .EQ 17
=caseframe
-*
-SAVECASEFRAME
-*      .DA CASEFRAME,DATA TABLE
-* CASEFRAME:
-*   7=OBJ MAY BE ABSENT
-*   6=OBJ MAY BE ROOM/IN ROOM
-*   5=OBJ MAY BE IN/ON PERSON
-*   4=PERMISSIBLE OBJLIST GIVEN
-*   3=FORBIDDEN OBJLIST GIVEN
-*   2=HUMAN OBJ ALLOWED
-*   1=ANIMATE OBJ ALLOWED
-*   0=INANIMATE OBJ ALLOWED
-*   7=SIZE MUST BE <X
-*   6=SIZE MUST BE >=Y
-*   5=OBJ MUST HAVE PROPERTIES F
-*   4=CAN HAVE BURNT/BROKEN OBJ
-*   3=INSTR ALLOWED,LIST GIVEN
-*   2=INSTR REQUIRED
-*   1=DEST ALLOWED
-*   0=DEST REQ'D
-*   7=DEST LIST GIVEN
-*   6=PREP LIST GIVEN
-*   5=VERB PART PERMITTED
-*   4=VERB PART REQUIRED
-*   3=CHAR WILL DO VERB IF TOLD
-*   0=FAILURE IF OBJ NOT GOTTEN
-*   7=GET OBJ IF POSSIBLE AND NOT CARRIED
-*   6=SPECIAL ACTIONS
-*   5=JSR
-*   4=ADD EDGE
-*   3=DELETE EDGE
-*   2=REPLACE EDGE
-*   1=ZERO OBJ BITS
-*   0=SET OBJ BITS
-*
-* FOR VP SUBST PLACE FOR OBJ
-* WHEN PLACE IS NOUN (NOT NSEW..)
-* VP WON'T PARSE IF NO DEST
-* GIVEN, SO DON'T REQUIRE DEST
-* FOR VP WHICH PERMIT SPLACE
-*
-* PARTS
-* DON'T REUSE # ANOTHER PART MAY HAVE IN DATA, IE ON=4
-FOR    .EQ 40
-OFF    .EQ 41
-OUT    .EQ 42
-AWAY   .EQ 43
-* UP prt# = UV
-*
-VERBS
-ATT    .EQ 0
-       .DA $371,$4C8,TATT
-BRE    .EQ 1
-       .DA $BC61,$4500,TBRE 
-BRU    .EQ 2
-       .DA $C71,$4000,TBRU
-BUR    .EQ 3
-       .DA $3C61,$500,TBUR
-CHEC   .EQ 4
-       .DA $1071,$C030,TCHEC
-CHEOUT .EQ 5
-       .DA $1071,$C100,TCHEOUT
-CHEW   .EQ 6
-       .DA $2061,$4000,TCHEW
-CLE    .EQ 7
-       .DA $8C71,$400,TCLE
-CLI    .EQ 8
-       .DA $300,$4440,TCLI
-CLOS   .EQ 9
-       .DA $2061,$2208,TCLOS
-CLOT   .EQ 10
-       .DA $C66,$4000,TCLOT
-COM    .EQ 11
-       .DA $C66,$4000,TCOM
-CUT    .EQ 12
-       .DA $C71,$500,TCUT
-DV     .EQ 13
-       .DA 0,$2000,TD
-DAM    .EQ 14
-       .DA $1077,$4000,TDAM
-DEB    .EQ 15
-       .DA 0,$2000,TDEB
-DEV    .EQ 16
-       .DA $71,$4000,TDEV
-DIE    .EQ 17
-       .DA 0,$4000,TDIE
-DRIB   .EQ 18
-       .DA $71,$8008,TDRIB
-DRI    .EQ 19
-       .DA $2061,$6000,TDRI
-DRO    .EQ 20
-       .DA $1227,$4000,TDRO
-DRY    .EQ 21
-       .DA $9C6F,$4800,TDRY
-DUM    .EQ 22
-       .DA $8061,$4000,TDUM
-DUN    .EQ 23
-       .DA $8271,$40C8,TDUN
-EV     .EQ 24
-       .DA 0,$2000,TE
-EAT    .EQ 25
-       .DA $2061,$E001,TEAT
-ELL    .EQ 26
-       .DA 0,$4000,TELL
-END    .EQ 27
-       .DA $F1,$4000,TEND
-ERA    .EQ 28
-       .DA $1071,$4008,TERA
-EXA    .EQ 29
-       .DA $1067,$E008,TEXA
-EXI    .EQ 30
-       .DA $1041,$2000,TEXI
-EXT    .EQ 31
-       .DA $1861,$4000,TEXT
-FAS    .EQ 32
-       .DA 0,$2000,TFAS
-FIL    .EQ 33
-       .DA $2C67,$408,TFIL
-FIN    .EQ 34
-       .DA $10E7,$4008,TFIN
-FLU    .EQ 35
-       .DA $71,$4200,TFLU
-FOL    .EQ 36
-       .DA $46,$4008,TFOL
-GET    .EQ 37       GET, TAKE OFF
-       .DA $9063,$C221,TGET SPECIAL ACTION ELIMINATES OBJS IN ME
-GIV    .EQ 38
-       .DA $9321,$C40,TGIV
-GO     .EQ 39
-       .DA $4041,$2440,TGO
-HEA    .EQ 40
-       .DA $67,$6000,THEA
-HEL    .EQ 41
-       .DA $1856,$2008,THEL
-HIT    .EQ 42
-       .DA #%01100111,%00011100,#$40,THIT
-IV     .EQ 43
-       .DA 0,$2000,TI
-JUM    .EQ 44
-       .DA 0,$4000,TJUM
-KIL    .EQ 45
-       .DA #%01000110,#%00001100,#0,#$40,TKIL
-LIG    .EQ 46
-       .DA $2061,$C500,TLIG
-LOA    .EQ 47
-       .DA #%11110111,#$10,#0,#$20,TLOA
-LOCV   .EQ 48       SYMBOL LOC TAKEN
-       .DA $2C69,$4208,TLOC
-LOI    .EQ 49
-       .DA 0,0,0
-LOO    .EQ 50
-       .DA $12E7,$2048,TLOO  LOOK NORTH?
-LOW    .EQ 51
-       .DA 0,$4000,TLOW
-MOV    .EQ 52
-       .DA $9263,$4000,TMOV
-NV     .EQ 53
-       .DA 0,$2000,TN
-NOD    .EQ 54
-       .DA 0,$2000,TNOD
-NOE    .EQ 55
-       .DA 0,$4000,TNOE
-OPE    .EQ 56
-       .DA $3861,$6100,TOPE
-PIC    .EQ 57       PICK UP
-       .DA #$E7,#$10,#%00111000,#0,TPIC
-PLA    .EQ 58
-       .DA $A71,$40C8,TPLA
-PHO    .EQ 59
-       .DA $C67,$4000,TPHO
-POK    .EQ 60
-       .DA $1866,$4000,TPOK
-POU    .EQ 61
-       .DA #%01100001,#%00110010,$4048,TPOU
-PRY    .EQ 62
-       .DA #$71,#$1C,#$20,#$A,TPRY
-* PULL=MOVE
-PUS    .EQ 63
-       .DA $9061,$4000,TPUS
-PUT    .EQ 64
-       .DA $9363,$C428,TPUT  PUT,PUT DOWN,PUT OUT
-REA    .EQ 65
-       .DA $2061,$C001,TREA
-REC    .EQ 66
-       .DA $300,$40C8,TREC
-REM    .EQ 67
-       .DA $8067,$C400,TREM  DOESN'T GET IN GET ROUTINE, JUST CHECKS FOR SPCACT
-RET    .EQ 68
-       .DA #$71,$100,#%11000010,TRET
-REW    .EQ 69
-       .DA $C71,$4100,TREW
-RIP    .EQ 70
-       .DA $71,$820,TRIP
-SV     .EQ 71
-       .DA 0,$2000,TS
-SAL    .EQ 72
-       .DA $1C71,$8,TSAL
-SAU    .EQ 73
-       .DA 0,$4000,TSAU
-SAV    .EQ 74
-       .DA #%11110111,#$10,#0,#$20,TSAV
-SAY    .EQ 75
-       .DA $3F7,$6040,TSAY
-SCO    .EQ 76
-       .DA 0,$2000,TSCO
-SCR    .EQ 77       SCREW
-       .DA $F71,#$C0,#%01010101,TSCR
-SHOO   .EQ 78
-       .DA #%01000111,#%10011100,$4000,TSHOO
-SHOW   .EQ 79
-       .DA $200,$4CC0,TSHO
-SIT    .EQ 80
-       .DA $300,$4C0,TSIT
-SLE    .EQ 81
-       .DA 0,$4400,TSLE
-SLOW   .EQ 82
-       .DA 0,$2000,TSLO
-SME    .EQ 83
-       .DA $67,$E008,TSME
-SPR    .EQ 84
-       .DA 0,8,0
-STA    .EQ 85
-       .DA #$71,0,#$40,TSTA
-STI    .EQ 86
-       .DA #$71,#$13,#$C1,#$84,TSTI
-STO    .EQ 87
-       .DA $77,$4008,TSTO
-SWA    .EQ 88
-       .DA $A061,$6000,TSWA
-SWI    .EQ 89
-       .DA $200,$2000,TSWI
-THR    .EQ 90
-       .DA $9221,$4060,TTHR
-TAW    .EQ 91       THROW AWAY
-       .DA $9221,$40C0,TTAW
-TIC    .EQ 92
-       .DA $66,$4000,TTIC
-TUR    .EQ 93
-       .DA #$61,#0,#%00110000,#0,TTUR
-TUROFF .EQ 94
-       .DA #$61,0,#$40,TOF
-TURNON .EQ 95
-       .DA #$61,0,#$40,TON
-TYP    .EQ 96
-       .DA $13F1,$40C8,TTYP
-UV     .EQ 97
-       .DA 0,$2000,TU
-UNLI   .EQ 98
-       .DA $2061,$4A00,TUNLI
-UNLO   .EQ 99
-       .DA $2C69,$4100,TUNLO
-UNS    .EQ 100
-       .DA $C71,#0,#%01001000,TUNS
-USE    .EQ 101
-       .DA $71,$4000,TUSE
-VOC    .EQ 102
-       .DA 0,$2000,TVOC
-WV     .EQ 103
-       .DA 0,$2000,TW
-WEA    .EQ 104
-       .DA $2061,$D00,TWEA
-WIN    .EQ 105
-       .DA $F1,$4000,TWIN
-WIND   .EQ 106
-       .DA $71,$4000,TWIND
-YEL    .EQ 107
-       .DA 0,$4000,TYEL
-PV     .EQ 108      FAKE VERB FOR PUTTING INTO VENT
-       .DA $63,$4000,TPV
-SCRI   .EQ 109      SCRIPT
-       .DA 0,$4000,TSCRI
-NOSC   .EQ 110
-       .DA 0,$2000,TNOSC
-*--------------------------------
-* IN MOST ADVENTURES,SOME VERBS SHOULD SPECIFY THAT THE SCREEN NOT BE
-* UPDATED AFTER THEM. NOT SO HERE,BECAUSE OBJS CAN WANDER AROUND
-* INDEPENDENT OF THE PLAYER.
=cndact
-*
-SAVECNDACT26
-* CONDITION#,COND PARMS,[AND,COND,CP]/[ACTION#,ACT PARMS,0(/,#$80,CND,..)]
-* CONDITIONS AND ACTIONS
-* OBJWASIN,ISEDG,ITIN CAN BIND VAR IN FINAL BYTE
-NULL   .EQ 1
-OBJIS  .EQ 2
-LOCIS  .EQ 3
-PEEK   .EQ 4
-SLOTIS .EQ 5
-INROOM .EQ 6
-OBJIN  .EQ 7
-OBJWASIN .EQ 8
-PRIMED .EQ 9
-ZERO   .EQ 10
-BITSET .EQ 11
-JSR    .EQ 12
-ISEDG  .EQ 13
-ITIN   .EQ 14
-ACTME  .EQ 15
-CZ     .EQ 16
-INME   .EQ 17
-CNDTAB .DA .0,.5,.10,.15,.20,.25,.30,.35,.40,.45,.50,.55,.60,.65,.70,CA75,CA80
-* CONDITIONS ENTERED WI 1ST PARM IN A
-* ON EXIT:Z=1 IF SUCCESS
-* NO CONDITION
-.0     LDA VDAT+1
-       BNE .1
-       DEC VDAT+2
-.1     DEC VDAT+1   NO PARMS
-       LDA #0       SUCCESS
-       RTS
-* OBJ=X
-.5     JSR GEDGE+3
-       CMP CUROBJ
-       RTS
-* ACLOC=X
-.10    CMP ACLOC
-       RTS
-* MEMLOC=X
-.15    JSR RDADR+3
-       JSR VDAT
-       CMP (MISC),Y
-       RTS
-* SLOT=X
-.20    JSR GEDGE+3
-       STA MISC
-       JSR VDAT
-       CMP MISC
-       RTS
-* ITEM IN ROOM
-.25    JSR GEDGE+3
-       LDX #0
-       STX ILOC
-       JSR CHECKLOC
-       LDA ILOC
-       CMP ACLOC
-       RTS
-* OBJ IN X
-.30    JSR GEDGE+3
-       STA $1A
-       LDA CUROBJ
-       LDX #IN
-       JSR GETOBJ
-       DEX
-       BMI .31
-       PLA
-       CMP $1A
-.31    RTS
-* OBJ WAS IN X BEFORE GOTTEN
-.35    JSR GEDGE+3
-       CMP #$FF     UNBOUND VAR
-       BNE .37
-       LDA OLDLOC
-       JSR BIND
-.37    CMP OLDLOC
-       RTS
-* OBJ PRIMED
-.40    JSR .0       DEC VDAT
-       LDA CUROBJ
-       JSR PNTOBJ
-       LDY #4
-       LDA (MISC),Y
-       AND #$10
-       EOR #$10
-       RTS
-* PEEK (X) = 0
-.45    JSR RDADR+3
-       LDA (MISC),Y
-       RTS
-* ITEM BIT SET
-.50    JSR GEDGE+3
-       JSR PNTOBJ
-       JMP TBIT
-* MACHINE-LANGUAGE SUB WHICH DETERMINES Z
-.55    JSR RDADR+3
-       JMP (MISC)
-* EDGE V V _ V EXISTS
-.60    JSR GEDGE+3
-       PHA
-       JSR GEDGE
-       TAX
-       JSR GEDGE
-       STA TEMP+1
-       PLA
-       JSR GETOBJ
-.61    DEX
-       BMI .64      FAIL
-       PLA
-       CMP TEMP+1
-       BEQ .63      SUCCEED
-       LDY TEMP+1
-       CPY #$FF     UNBOUND VAR
-       BNE .61
-       JSR BIND     BIND,SUCCEED
-       .HS A9       (LDA #$68) PULL REST OFF STACK
-.62    PLA
-.63    DEX
-       BPL .62
-       INX          Z=1
-.64    RTS
-* ITEM IN X
-.65    JSR GEDGE+3
-       LDX #IN
-       JSR GETOBJ
-       JSR GEDGE    DOESN'T CHANGE X
-       DEX
-       BMI .67      NOT IN ANYTHING,FAIL
-       STA TEMP+1
-       PLA
-       STA MISC
-       LDA TEMP+1
-       CMP #$FF     UNBOUND VAR
-       BNE .66      NO
-       LDA MISC
-       JSR BIND     BIND,SUCCEED
-.66    CMP MISC
-.67    RTS
-* I'M ACTOR
-.70    JSR .0
-       LDA ACTOR
-       CMP #ME
-       RTS
-* ITEM COUNTER 0
-CA75   JSR GEDGE+3
-       JSR PNTOBJ
-       LDY #4
-       LDA (MISC),Y
-       AND #7
-       RTS
-* ITEM IN ME
-CA80   JSR GEDGE+3
-CINME  LDX #IN
-       JSR GETOBJ
-       DEX
-       BMI .1
-       PLA
-       CMP #ME
-       BNE CINME
-.1     RTS
-OLDLOC .BS 1
-RDADR  JSR VDAT
-       STA MISC
-       JSR VDAT
-       STA MISC+1
-       LDY #0
-       RTS
-AMSG   .EQ 1
-ARPL   .EQ 2
-AJSR   .EQ 3
-SKIP   .EQ 4
-POKE   .EQ 5
-AINC   .EQ 6
-NOTH   .EQ 7
-GOTO   .EQ 8
-MAKVIS .EQ 9
-ASBIT  .EQ 10
-AZBIT  .EQ 11
-MOVETO .EQ 12
-ADEC   .EQ 13
-DECC   .EQ 14
-DO     .EQ 15
-CHMAP  .EQ 16
-AREP   .EQ 17
-AMAK   .EQ 18
-ADEL   .EQ 19
-SPAWN  .EQ 20
-TRANS  .EQ 21
-ADIE   .EQ 22
-DELIT  .EQ 23
-UPSCR  .EQ 24
-DESTR  .EQ 25
-ASWI   .EQ 26
-UNBIND .EQ 27
-CGO    .EQ 28       CONVERSATION GOTO
-ACTLEN .DA #1,#1,#2,#0,#3,#2,#0,#2,#1,#4,#4,#1,#2,#1,#7,#3,#3,#3,#3,#3,#3,#0,#1,#1,#1,#2,#0,#1
-ACTTAB .DA .0,.3,.5,.10,.15,.20,.25,.30,.35,.40,.45,.50,.55,.60,.65,CA1,DOREP,MAK,DEL,SPW,TRN,ADI,DLO,UPS,DES,SW,UB,CG
-* PRINT MESSAGE
-.0     JSR NOK
-       JSR VDAT
-       JMP PMSG
-* PRINT REPLY
-.3     JSR NOK
-       JSR VDAT
-       JMP PRPL
-* JSR
-.5     JSR RDADR
-       JMP (MISC)
-* SKIP OBJECT
-* WHEN CALLED FROM INLINE, SKIPS THE REST OF THE AL CODE INLINE
-* & RETURNS TO THE GIVEN INLINE ADDRESS (IE DRT)
-.10    PLA          POP SPCACT
-       PLA
-       PLA          POP ROUTINE WITH JSR SPCACT
-       PLA
-       RTS
-* POKE
-.15    JSR RDADR
-       JSR GEDGE    NOTE YOU CAN'T POKE A VALUE = A VAR#
-       LDY #0
-       STA (MISC),Y
-       RTS
-* INC
-.20    JSR VDAT
-       STA .21+1
-       JSR VDAT
-       STA .21+2
-.21    INC $FFF
-* NOTHING:NORMALLY FOLLOWED BY AN ELSE
-.25    RTS
-* GOTO
-.30    JSR RDADR
-       LDA MISC
-       STA VDAT+1
-       LDA MISC+1
-       STA VDAT+2
-       RTS
-* MAKE OBJ VISIBLE
-.35    JSR GEDGE
-       JSR PNTOBJ
-       LDY #5
-       LDA (MISC),Y
-       AND #$7F
-       STA (MISC),Y
-       RTS
-* SET BITS OF ITEM
-.40    JSR GEDGE
-       JMP SBIT
-* ZERO BITS
-.45    JSR GEDGE
-       JMP ZBIT
-* MOVE ME INTO X
-.50    JSR GEDGE
-       TAY
-       LDA #ME
-       LDX #IN
-       JMP REPEDG
-* DEC BYTE
-.55    JSR VDAT
-       STA .57+1
-       JSR VDAT
-       STA .57+2
-.57    DEC $FFF
-       RTS
-* DEC ITEM COUNTER
-.60    JSR GEDGE
-       JSR PNTOBJ
-       LDY #4
-       LDA (MISC),Y
-       SEC
-       SBC #1
-       STA (MISC),Y
-       RTS
-* EXECUTE SENTENCE AFTER THIS EXECUTION IS DONE
-* WON'T WORK IF OBJ IS SKIPd
-.65    LDX #6
-.67    JSR GEDGE
-       >PHA DOSTK,DOPNT
-       DEX
-       BPL .67
-NOK    LDY /.1
-       LDA #.1
-       JMP OMSG     DON'T PRINT OK
-.1     .AS -/=/
-* VERB,OBJ,PM,DEST,INSTR,PLACE
-DOSTK  .BS 6*8
-DOPNT  .BS 1
-* CHANGE MAP: LOC DIR->LOC
-CA1    JSR VDAT
-       PHA
-       JSR VDAT
-       TAY
-       JSR VDAT
-       TAX
-       PLA
-* CHANGE MAP:A Y X = LOC DIR->LOC
-CHM    STA ALOC
-       TXA
-       PHA
-       LDA ALOC
-       JSR PNTALOC
-       PLA
-       STA (TEMP),Y
-       RTS
-* REPLACE EDGE
-DOREP  JSR GEDGE
-       PHA
-       JSR GEDGE
-       TAX
-       JSR GEDGE
-       TAY
-       PLA
-       JMP REPEDG
-* MAKE EDGE (FOR WHEN AREP WOULD COVER DIFFERENT EDGE, IE OWNING
-MAK    JSR GEDGE
-       PHA
-       JSR GEDGE
-       PHA
-       TAX
-       JSR CLCPNT
-       PHA
-       JSR GEDGE
-       PHA
-       JSR MAKEDG   CAN'T JMP
-       RTS
-* DELETE EDGE
-DEL    LDX #3
-.1     JSR GEDGE
-       PHA
-       DEX
-       BNE .1
-       STX GCALLD   FOR GETEDG
-       TAX          DEF Z
-       BNE DE2
-       PLA
-       PLA
-       TAX
-       PLA
-* DELETE LAST EDGE A X _ _
-DELAX  STA EDGCMP+1
-       JSR JG
-       BCS DE3      NO EDGE
-       LDA #DE3
-       STA MISC     RETURN TO .3 FROM DEL EXIT
-       LDA /DE3
-       STA MISC+1
-       JMP DELEXT
-DE2    JSR DELEDG   DON'T JMP SINCE DATA IS ON STACK
-DE3    RTS
-* SPAWN PLAN
-SPW    >CRL NXTPLN,#2    USE PNTR FOR ACTOR
-       LDA #1
-       STA SPWD     CALLED BY SPAWN
-SP1    JSR GEDGE    ACTOR
-       PHA
-       LDY #$FE
-       STA (TEMP),Y
-       JSR GEDGE    PLAN#
-       LDY #$FD     GEDGE WIPES Y
-       STA (TEMP),Y
-       JSR GEDGE    OBJ
-       LDY #$FC
-       STA (TEMP),Y
-       PLA
-       LDY SPWD
-       BEQ .4       TRANS WORKS EVEN IF PERSON BUSY
-* SPWD HOLDS 1, SO DOES Y
-.2     CMP PATBUS,Y
-       BEQ .5       BUSY
-       DEY
-       BPL .2
-.4     JSR PNTOBJ   WIPES TEMP
-       LDY #5
-       LDA (MISC),Y
-       AND #$10     ANIMATE (ALIVE)?
-       BEQ .5       NO
-       JSR FNPN     FANCY INC NXTPLN
-       CLC
-       RTS
-.5     LDA NXTPLN   PLAN MADE
-       JSR DELLST
-       SEC
-       RTS
-SPWD   .BS 1        1=SP1 CALLED BY SPAWN
-* TRANSFER CONTROL TO NEW PLAN
-TRN    >CRL NXTPLN,#3
-       LDA #0
-       STA SPWD     CALLED BY TRN
-       LDY #$FB
-       LDA CURPLN   RETURN TO PLAN#
-       ORA #$40     WILL BE SUSPENDED
-       STA (TEMP),Y
-       JSR SP1
-       BCS .5       CHAR DEAD
-       LDA CURPLN   RETURN TO PLAN#
-       PHA
-       JSR LL       SETS Y
-       PLA
-       ORA #$40     SUSPEND CURRENT PLAN
-       STA EDGETOP,Y
-.5     RTS
-* KILL CURPLN
-ADI    LDA CURPLN
-       PHA
-       JSR LLL
-       CMP #3       LEN
-       BCC .3       SPAWNED; NO PLAN TO REACTIVATE
-       LDY #$FB
-       LDA (TEMP),Y PLAN TO REACTIVATE
-       JSR LL
-       LDA EDGETOP,Y
-       AND #%10111111    REACTIVATE
-       STA EDGETOP,Y
-.3     PLA
-       JMP DELLST
-* DELETE ITEM: DELETE ALL EDGES INVOLVING IT
-* DELETE ALL ITEMS PART OF IT
-* CAN'T DELETE EVERY EDGE WI. OBJ#,
-* SINCE OBJ#S ARE ALSO ADJ#S.
-DLO    LDA CUROBJ
-       PHA
-       JSR GEDGE
-       STA CUROBJ
-       JSR INLINE
-       .DA .5,#NULL,#ADEL,#VOBJ,IN,#ADEL,#VOBJ,ON,#ADEL,#VOBJ,PARTOF
-.1     .DA #$80,#ISEDG,#VOBJ,#HOLDS,#VX,#$80,#ISEDG,#VOBJ,#PART,#VX,#DELIT,#VX,#GOTO,.1
-.2     .DA #$80,#ISEDG,#VOBJ,#UNDER,#VX,#ADEL,#VX,#ON,#VOBJ,#GOTO,.2,#0
-.5     PLA
-       STA CUROBJ
-       RTS
-UPS    JSR VDAT     SCORE #:0-255
-UP2    TAY
-       LDA #$FF
-       EOR KSC,Y
-       BEQ .3       POINTS ALREADY GIVEN
-       STA KSC,Y     MARK AS GIVEN
-       LDA .7,Y
-       CLC
-       ADC SCORE
-       STA SCORE
-.3     RTS
-.7     .DA #2,#5,#1,#1,#5,#4,#5,#5,#4,#4,#5,#5,#5,#5,#4,#5,#5,#10,#5,#5
-* SCREAM,GUARD DRINK,BRUSH TEETH,CLIMB SHELF,PUSH PANEL,REMOVE BAR,PHOT MARK,PLAY TAPE2,TYPE "SESAME",REMOVE VENT,READ ID,SHOOT BULB,BURN OUT BATTERY,LEAVE,REMOVE HINGE,PUT SUGAR IN PAIL,KILL PROF,LEAVE WI PROF,OPEN TC,TOWEL
-* DESTROY AN OBJECT: DON'T REMOVE FROM ROOM,
-* BUT SET & ZERO A BUNCH OF BITS, ADD ADJEC DEAD/BROKEN
-* LIQUID SPILLS OUT IF IN IT
-DES    JSR GEDGE
-       STA CUROBJ   NOTE!! CHANGES VOBJ
-       JSR INLINE
-       .DA TRTS,#BITSET+$40,#VOBJ,#$80,0,#SKIP,#$80,#OBJIS,#ME,#AINC,GAMOVR,#$80,#OBJIS,#PROF,#$80,#OBJIS,#INT,#UPSCR,#16,#$80,#BITSET,#VOBJ,0,#$10,#AREP,#VOBJ,#ADJEC,#DEAD,#ELSE,#AREP,#VOBJ,#ADJEC,#BROKEN
-       .DA #$80,#NULL,#ASBIT,VOBJ,$4000,#AZBIT,#VOBJ,#$FF,#%10110111,%11100110
-* SWITCH OBJ X WITH Y: MAKE Y LIKE X: BROKEN, CONTENTS, ETC, & AREP IT IN LOCATION
-SW     JSR GEDGE
-       STA .3+1
-       JSR PNTOBJ
-       LDY #5
-.0     LDA (MISC),Y
-       STA .8,Y
-       DEY
-       BPL .0
-       JSR GEDGE
-       STA .5+1
-       JSR PNTOBJ
-       LDY #5
-       LDA (MISC),Y SAVE ONLY Y's NOUN TYPE
-       AND #6
-       STA .9
-.1     LDA .8,Y
-       STA (MISC),Y
-       DEY
-       BPL .1
-       LDY #5
-       LDA (MISC),Y
-       AND #%11111001
-       ORA .9
-       STA (MISC),Y
-* REPLACE ALL X WITH Y IN EDGES
-       LDA #2
-       STA .9       COUNTER
-       LDA #EDGES
-       LDY /EDGES
-.2     STA MISC
-       STY MISC+1
-       LDY #0
-.3     LDA #1       X
-       CMP (MISC),Y
-       BNE .6
-.5     LDA #2       Y
-       STA (MISC),Y REP X WITH Y
-.6     JSR IM       NOT INY FOR COMPARE TO (VB)
-       JSR IM
-       JSR IM
-       JSR IM
-       LDA MISC
-       CMP VB
-       LDA MISC+1
-       SBC VB+1
-       BCC .3       (MISC)<(VB)
-       DEC .9
-       BEQ .7       DONE BOTH PASSES
-       LDA #EDGES+3 2ND PASS, GET OTHER END OF EDGES
-       LDY /EDGES+3
-       BNE .2
-.7     RTS
-.8     .BS 6        TEMP STORAGE OF OBJ X ATTRIBUTES
-.9     .BS 1
-* UNBIND X
-UB     LDA #$FF
-       STA VAR
-       RTS
-* CONVERSATION GOTO: SET DEFAULT STARTING PATTERN FOR CHAR Y TO A
-CG     JSR GEDGE
-       TAY
-       JSR VDAT
-CGO2   STA MME+1    COUNTER USED IN FKN
-       PHA
-       STY LISNR
-       JSR FCN
-       JSR FKN      FIND KEY #
-       JSR INY      POINT TO BEG OF PATTERN
-       TYA
-       CLC
-       ADC MISC
-       BCC .5
-       INC MISC+1
-.5     PHA
-       LDA CHRNUM
-       TAX
-       ASL
-       TAY
-       PLA
-       STA KEYSTRT,Y
-       LDA MISC+1
-       STA KEYSTRT+1,Y
-       PLA
-       STA RNSTRT,X
-       LDA #$FF
-       STA CHRNUM   DON'T FALSELY THINK WE'VE LOADED XXX.RPL
-       RTS
-*--------------------------------
-* BIND 1ST UNBOUND VAR
-* ONLY CALLED IF AT LEAST 1 VAR IS UNBOUND
-BIND   LDY VAR
-       INY
-       BEQ .1       1ST VAR UNBOUND
-       LDY #1       BIND 2ND VAR
-.1     STA VAR,Y    BIND APPROPRIATE VAR
-       RTS
+ END OF ARCHIVE
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads