[comp.sources.apple2] v001SRC054: Inmate Parser -- ATN Based, Part04/05

jac@yoko.rutgers.edu (Jonathan A. Chandross) (06/01/91)

Submitted-by: Phil Goetz (goetz@cs.buffalo.EDU)
Posting-number: Volume 1, Source:54
Archive-name: util/parser/inmate/part04
Architecture: ANY_2
Version-number: 1.00


=transit
-*
-SAVETRANSIT28
-OBJ    .EQ 1
-DEST   .EQ 2
-INSTR  .EQ 3
-EXCE   .EQ 4
-* TRANSITION ACTIONS
-* CAN USE SUB FOR MULT IF OBJS ALSO HAVE 6 BYTES
-TV     LDY #0
-       STY MISC+1
-       STY TEMP+1
-       LDA WVERB    MISC,+1=WVERB*6
-       STA TEMP
-       ASL
-       BCC .0
-       INC TEMP+1
-.0     STA TEMP
-       ROL MISC+1
-       ASL
-       ROL MISC+1
-       ADC TEMP     C=0
-       BCC .1
-       INC MISC+1
-       CLC
-.1     ADC #VERBS
-       STA MISC
-       LDA /VERBS
-       ADC MISC+1
-       ADC TEMP+1
-       STA MISC+1
-.2     LDA (MISC),Y
-       STA CASEFRAME,Y
-       INY
-       CPY #6
-       BNE .2
-RESVDAT LDY #1
-.1     LDA CASEFRAME+4,Y
-       STA VDAT+1,Y
-       DEY
-       BPL .1
-TRTS   RTS
-TPLACE LDA WNOUN-1,X  USED ONLY FOR NON-NOUN PLACES (NSEW..)
-       STA SPLACE
-       RTS
-TPOBJ  LDX NPSP
-       LDA #TLPOBJ
-       STA NPSTACK,X
-       INX
-       LDA /TLPOBJ
-       JMP TNP
-TLPOBJ JSR COMBINE
-       LDA NOUNLIST+1
-       BNE .2       >1 PLACE
-       LDA NOUNLIST
-       BNE .1
-       JMP DNS      0 PLACE
-.1     CMP #LP+1
-       BCS NAP      NOT A PLACE
-       STA SDEST
-       LDA #7
-       JMP OUTOFNP
-.4     .US /GIVE ONLY ONE PLACE.@=/
-.2     LDY /.4
-       LDA #.4
-       JMP PS
-NAP    LDY /.6
-       LDA #.6
-       BCS NAP-3    ALWAYS
-.6     .US /THAT'S NOT A PLACE!@=/
-* TADV, T9.10, T9.E UNUSED
-TADV   LDA WNOUN-1,X
-       STA SADV
-       RTS
-T9.10  JSR LOADNUM
-       STA SPT
-       STY SPT+1
-       RTS
-T9.E   JSR LOADNUM
-       STA STIME
-       STY STIME+1
-       RTS
-TEXC   LDA #EXCE
-       STA NTYPE
-       LDX NPSP
-       LDA #TLEXC
-       STA NPSTACK,X
-       INX
-       LDA /TLEXC
-       JMP TNP
-       RTS
-TLEXC  JSR EXCL
-       LDA #5
-       JMP OUTOFNP
-EXCL   LDY #0
-.1     LDA NOUNLIST,Y
-       BEQ .3       NO MORE
-       JSR RFO
-       INY
-       CPY #20
-       BNE .1
-.3     RTS
-* REMOVE A FROM OBJLIST
-* FIND & ZERO IT IN OBJLIST
-RFO    LDX #21
-.1     DEX
-       BEQ .3
-       CMP OBJLIST-1,X
-       BNE .1
-       LDA #0
-       STA OBJLIST-1,X
-       STX TEMP
-* MOVE LAST OBJ INTO EMPTY SPACE
-       LDX #21
-.2     DEX
-       CPX TEMP
-       BCC .3       LAST OBJ WAS ZEROED
-       LDA OBJLIST-1,X   SEARCH FOR LAST OBJ
-       BEQ .2
-       PHA
-       LDA #0
-       STA OBJLIST-1,X   REMOVE FROM END
-       PLA
-       LDX TEMP
-       STA OBJLIST-1,X   & PUT IT IN PLACE OF REMOVED OBJ
-.3     RTS
-* VERB PART:GET NEW VERB#,DELETE VERB PART,JMP ATN
-TPRT   STX TEMP
-       LDA #$D0     BNE
-       JSR SKP2     POINT TO VERB PARTS
-       LDX TEMP
-.1     JSR VDAT
-       TAY
-       BEQ BEJF     PART NOT FOUND
-       CMP WVERB-1,X     PART#
-       PHP
-       JSR VDAT     NEW VERB#
-       PLP
-       BNE .1
-       STA WVERB
-       STA PFND
-       TXA
-       TAY
-       DEX
-.2     JSR TMOVE
-       INX
-       INY
-       CPY WORDS
-       BCC .2
-       DEC WORDS
-       PLA
-       PLA
-       JMP ATN
-PFND   .BS 1        >0=PART FOUND
-TPM    LDA CASEFRAME+1  DEST ALLOWED WI THIS VERB?
-       AND #2
-BEJF   BEQ JMPFAIL  NO
-       LDA WNOUN-1,X
-       TAX
-       JSR CLCPNT   REVERSE
-       STA SPM
-       RTS
-T6.7   LDA #DEST
-       STA NTYPE
-       LDX NPSP
-       LDA #TLDEST
-       STA NPSTACK,X
-       INX
-       LDA /TLDEST
-       JMP TNP
-TLDEST JSR COMBINE
-       LDA NOUNLIST+1
-       BNE .4       >1 DEST
-       LDA NOUNLIST
-       BEQ .0
-       STA SDEST
-       JSR CHECKLOC
-       BCC .1
-.0     JMP DNS
-*.1     LDX WTFIN    VERB
-*      CPX #VP
-*      BNE .2
-*      CMP #LP+1
-*      BCS NAP      NOT A PLACE
-.1     LDA #7
-       JMP OUTOFNP
-.4     JMP OD
-T7.8   LDA CASEFRAME+1  INSTR ALLOWED?
-       AND #8
-       BEQ JMPFAIL  NO
-       JSR LOADNUM
-       STA SPI
-       STY SPI+1
-T7RTS  RTS
-*--------------------------------
-* JUMPED TO IF A JUMP TRANSITION'S REQUIREMENTS AREN'T MET
-JMPFAIL PLA
-       PLA
-       LDX CURWORD
-       JMP A4
-*--------------------------------
-LOADNUM DEX
-       LDA WLO,X
-       LDY WHI,X
-       RTS
-*--------------------------------
-* ON ENTERING NP:
-*      STORE ADDRESS OF LEAVE ROUTINE ON NPSTACK
-*      ZERO SPN
-*      INC WORDS
-*      ZERO ADJLIST
-* ON EXITING:
-*      DEC WORDS
-TNUM   LDA SPN
-       BNE JMPFAIL  NUM CAN'T BE USED FOR SOURCE OR DEST
-       LDA WLO-1,X
-       CMP #ALLNUM  MAKE ALL=0
-       BNE .1
-       LDA WHI-1,X  CONT CMP ALLNUM
-       BEQ .2
-.1     LDA WNOUN-1,X  GET VALUE
-.2     STA SNUM
-       RTS
-TPRN   LDA CNTOBJ
-       BNE TN2
-       LDA LSTOBJ
-       BNE TN2
-       PLA
-       PLA
-       LDY /.1
-       LDA #.1
-       JMP PS
-.1     .US /I DON'T KNOW WHAT YOU MEAN BY "IT".@=/
-CNTOBJ .BS 1        CONTEXT OBJ
-TADJ   LDA WNOUN-1,X  GET ADJ#
-       LDY #$FF
-.1     INY
-       LDX ADJLIST,Y
-       BNE .1
-       STA ADJLIST,Y
-TARTS  RTS
-TNOUN  LDA WNOUN-1,X
-TN2    PHA
-       JSR COMBINE
-       STA UALL
-.0     STA LNL,Y    ERASE LNL
-       STA SOURCELIST,Y  AND SOURCELIST
-       DEY
-       BPL .0
-       PLA
-       STA TEMP3
-* SEE IF OBJ HAS SUBOBJS, I.E. "DOOR" CAN REFER TO MANY DOORS
-* ENTER WI OBJ IN A
-* ON EXIT, X=#SUBOBJS,WHICH ARE ON STACK
-* NO MORE THAN 256 BYTES IN SUBTAB DATA
-       LDY #0
-.1     LDX SUBTAB,Y
-       BEQ TN1      NOT FOUND
-       CMP SUBTAB,Y
-       BNE .3
-       LDX #0
-.2     INY
-       LDA SUBTAB,Y
-       BEQ TN1      END OF LIST
-       PHA
-       INX
-       BNE .2       ALWAYS
-.3     INY
-       LDX SUBTAB,Y
-       BNE .3       FIND END OF THIS LIST
-       INY
-       BNE .1       ALWAYS
-TN1    TXA
-       BNE .1
-       LDA TEMP3
-       JSR CHECKADJ
-       BCS TARTS    ELIMINATED BY ADJ
-       STA SOURCELIST
-       CMP #ALL
-       BEQ .0
-       JMP .3
-.0     DEC UALL     FF FOR BIT
-       LDX #HOLDS
-       BIT CASEFRAME
-       BVC .12      OBJS IN LOC FORBIDDEN
-       LDA LIGHT
-       BEQ .12      USES OBJS IN ME IF NO LIGHT
-       LDA LOC
-       JSR GETOBJ   NOTE THAT THIS DOESN'T INCLUDE LOC WITH OBJS IN LOC
-       JMP .1
-.12    LDA #ME      OBJS IN ME
-       JSR GETOBJ
-.1     LDY #0
-       STY INLOC    NO OBJS YET IN LOC
-       STY TEMP+3   SUB POINTER
-.2     DEX
-       BMI .26
-       PLA
-       JSR CHECKADJ
-       BCS .2
-       JSR CHECKLOC WHEN DEALING WI SUBSETS,ONLY INCLUDE OBJS IN LOC
-       STY TEMP+2
-       LDY TEMP+3
-       STA LNL,Y    SAVE IN CASE WE MUST RESTORE
-       INC TEMP+3
-       LDY TEMP+2
-       BCS .2       NOT LOC
-       INC INLOC    1 OBJ IN LOC
-.23    JSR FF4A
-       LDA $45
-       JSR PNTOBJ
-       LDY #5
-       LDA (MISC),Y
-       PHP
-       JSR FF3F
-       PLP
-       BPL .25
-       BIT UALL     INVISIBLE^(0/FF)
-       BNE .2       DON'T INCLUDE INVISIBLE IN ALL
-.25    STA SOURCELIST,Y
-       INY
-       BNE .2       ALWAYS
-*IF NO OBJ IS IN LOC & ABS OBJS ALLOWED,RESTORE OBJS NOT IN LOC
-.26    LDY TEMP+3
-       LDA INLOC
-       BNE .28      AT LEAST 1 WAS IN LOC
-       BIT CASEFRAME
-       BPL .28
-.27    DEY
-       BMI .99
-       LDA LNL,Y
-       STA SOURCELIST,Y
-       JMP .27
-.99    LDY TEMP+3
-.28    LDA #0
-.29    DEY
-       BMI .3
-       STA LNL,Y    CLEAR FOR SOURCES
-       BPL .29
-* NOUNS IN SOURCELIST, LAST IN NL, LNL EMPTY
-.3     LDX SPN
-       BNE .6       PRECEDING PREP
-       LDY #19      1ST NOUN
-.4     LDA SOURCELIST,Y  MOVE SOURCELIST INTO NL & LNL
-       STA NOUNLIST,Y    FOR POSSIBLE COMBINE AFTER PREP NOUN
-       STA LNL,Y
-       DEY
-       BPL .4
-.45    RTS
-.6     CPX #NOTIN
-       BCS .8       SPECIAL PN
-       LDY #0
-       STY TEMPIND
-       STY TEMPIND+1
-.65    LDY TEMPIND
-       LDA SOURCELIST,Y
-       BEQ .45      NONE LEFT
-       INC TEMPIND
-       LDX SPN
-       JSR GETOBJ   A=OBJ,X=EDGE WE'RE LOOKING FOR
-       LDY TEMPIND+1
-.7     DEX
-       BMI .65
-       PLA
-       STA LNL,Y
-       INY
-       INC TEMPIND+1
-       BNE .7       ALWAYS
-.8
-TNRTS  RTS          IMPLEMENT .8 LATER
-TEMP3  .BS 3
-TEMPIND .BS 2
-UALL   .BS 1        1=OBJ IS ALL
-INLOC  .BS 1
-TPN    LDA WTYPE-1,X  USED IN TNOUN TO SEE IF THIS PN CAN BE A PM
-*THUS PM MUST BE 1ST TYPE
-       STA PTYPE
-       LDA WNOUN-1,X
-TP2    JMP CLRADJ   NEXT LINE STA SPN
-PTYPE  .BS 1
-TCONJ  LDA NTYPE
-       CMP #INSTR
-       BNE .1
-       PLA
-       PLA
-       JMP POI
-.1     CMP #DEST
-       BNE .2
-       PLA
-       PLA
-       JMP OD
-.2     CMP #EXCE
-       BNE .3
-       JSR EXCL
-       JMP .4
-.3     LDA #$FF
-       STA UCONJ    MARK CONJ USED
-       STA JUCONJ   JUST USED CONJ
-       JSR COMBINE
-       JSR CHECKOBJ
-       JSR NL.OL
-.4     LDA #0
-       BEQ TP2
-UCONJ  .BS 1        1=CONJ USED
-JUCONJ .BS 1
-TOBJ   LDA #OBJ
-       STA NTYPE
-       LDX NPSP
-       LDA #TLOBJ
-       STA NPSTACK,X
-       INX
-       LDA /TLOBJ
-       JMP TNP
-TLOBJ  JSR CHECKOBJ
-       JSR NL.OL
-       JSR COMBINE
-       STA JUCONJ
-* IF NOTHING LEFT AND A PN WAS GIVEN,LNL -> DEST IF ALLOWED
-       LDA NOUNLIST
-       BNE .9
-       LDA SPN
-       BNE .2       IF THERE WERE NO PN,COULDN'T BE A DEST
-.9     LDX TEMP3+1
-       LDA #0
-.0     STA OBJLIST,X  DELETE LAST NL.OL RESULTS
-       INX
-       CPX #20
-       BNE .0
-       JSR NL.OL
-       LDA OBJLIST
-       BEQ .24      RTS
-.1     LDA #3       JMP TO NODE 3
-       JMP OUTOFNP
-.2     LDA CASEFRAME+1  SEE IF DEST ALLOWED
-       AND #2
-       BEQ .23      NO
-       LDA SOURCELIST+1
-       BNE OD       MORE THAN 1 DEST
-       LDA OBJLIST
-       BNE .25      OBJLIST NOT EMPTY
-.23    LDA OBJS     WERE ALL OBJS ELIMINATED BEFORE COMBINE?
-.24    BEQ CARTS    YES,NO MORE MSG
-       LDY /NOBJ
-       LDA #NOBJ
-       JMP PS
-.25    LDA SOURCELIST
-       BEQ .5
-       JSR CHECKLOC
-       BCS .5
-       LDX PTYPE    SAVED BY TPN
-       CPX #PM
-       BNE .6       PN CAN'T BE PM
-       STA SDEST    MAKE LAST SOURCE THE DEST
-       LDX SPN
-       JSR CLCPNT   DEST POINTER IS OPPOSITE OF SOURCE POINTER
-       STA SPM
-       JMP .1
-.5     JMP DNS
-.6     JMP SENTFAIL
-OD     LDY /ODEST   >1 DEST
-       LDA #ODEST
-       JMP PS
-TINSTR LDA #INSTR
-       STA NTYPE
-       LDX NPSP
-       LDA #TLINSTR
-       STA NPSTACK,X
-       INX
-       LDA /TLINSTR
-TNP    STA NPSTACK,X
-       INX
-       STX NPSP
-       LDX #39
-       LDA #0
-.2     STA NOUNLIST,X  CLEAR NL & LNL
-       DEX
-       BPL .2
-       INC WORDS    MAKE SURE ATN COMES OUT OF NP
-CLRADJ STA SPN
-       LDA #0
-       STA SNUM
-       LDX #7
-.1     STA ADJLIST,X  ERASE OLD ADJS
-       DEX
-       BPL .1
-CARTS  RTS
-TLEAVENP PLA
-       PLA
-TLNP2  LDX NPSP     USED FROM ATN
-       DEX
-       LDA NPSTACK,X
-       STA .1+2
-       DEX
-       LDA NPSTACK,X
-       STA .1+1
-       STX NPSP
-       DEC WORDS    MAKE UP FOR INC ON WAY IN
-.1     JMP 0        JMP TO PROPER EXIT ROUTINE
-NTYPE  .BS 1
-TLINSTR JSR COMBINE
-       LDA NOUNLIST  SHOULD BE 1 INSTR
-       BEQ PALI
-       STA SINSTR
-       LDY NOUNLIST+1
-       BNE POI      BUT ONLY ONE
-       JSR CHECKLOC
-       BCC .3
-       LDA #.1
-       LDY /.1
-       BNE PPS
-.1     .US /I DON'T SEE ANY+/
-       .DA PRINS
-       .US / HERE!@=/
-.3     LDA #9       JMP TO NODE 9
-OUTOFNP LDX CURWORD
-       STA WORDNODE,X    JUMPING TO NODE Z, SO RETURN TO Z RATHER THAN NODE JUST LEFT (F)
-       JSR GETNODE
-       JMP A8
-PALI   LDA #PA2
-       LDY /PA2
-PPS    JMP PS
-PA2    .DA #"$,PLSP
-       .US /AN INSTRUMENT.@=/
-POI    LDA #.1
-       LDY /.1
-       BNE PPS
-.1     .DA #"$,PLSP
-       .US /ONLY ONE INSTRUMENT.@=/
-ODEST  .US /YOU CAN ONLY$/
-       .DA SP
-       .US /ONE DESTINATION.@=/
-NOBJ   .US /I SEE NO SUCH OBJECT.@=/
-SP     .US / SPECIFY =/
-PLSP   .US /PLEASE$/
-       .DA SP,#"=
=tsub
-*
-SAVETSUB16,S6,D1
-* TRANSITION SUBS
-* SEE IF ADJS ELIMINATE ANY NOUNS
-CHECKADJ STX TEMP3+2
-       CLC          IN CASE OF IMMEDIATE EXIT
-       LDX ADJLIST
-       BEQ .4
-       STY TEMP3
-       STA TEMP3+1
-       LDX #ADJEC
-       JSR GETOBJ   FIND ADJS
-       LDY #7
-.7     LDA ADJLIST,Y
-       BEQ .8
-       ORA #$80     SET HIBIT TO MARK AS UNMATCHED
-       STA ADJLIST,Y
-.8     DEY
-       BPL .7
-.0     DEX
-       BMI .3
-       PLA
-       ORA #$80
-       LDY #8
-.1     DEY
-       BMI .0
-       CMP ADJLIST,Y
-       BNE .1
-       AND #$7F     MARK AS MATCHED
-       STA ADJLIST,Y
-       JMP .0
-.3     LDY #8
-.35    DEY
-       BMI .38     ALL ADJS DELETED, NONE ELIMINATED NOUN
-       LDA ADJLIST,Y  NO ADJS SHOULD BE LEFT UNLESS NOT ATTACHED TO NOUN
-       BPL .35      MATCHED
-       SEC          NOUN ELIMINATED
-       .HS 90       BCC
-.38    CLC
-       LDY TEMP3
-       LDA TEMP3+1
-.4     LDX TEMP3+2
-       RTS
-*ELIMINATE SUBSET OBJS NOT IN ROOM
-*ENDLESS LOOP IF A IS IN B IS IN A
-* USED BY TRANSIT & CNDACT
-CHECKLOC STX TEMP3+1
-       STY TEMP3
-       PHA          SAVE OBJ
-.1     CMP ACLOC
-       BEQ .2
-       LDX #IN
-       JSR GETOBJ
-       DEX
-       BMI .3       NOT IN LOC
-       PLA          OBJ LAST OBJ IS IN
-       JMP .1       FIND OBJ THIS ONE IS IN
-.2     STA ILOC     LOC OBJ IS IN
-       CLC
-       .HS B0       BCS
-.3     SEC          NOT HERE,ELIM
-       PLA
-       LDX TEMP3+1
-       LDY TEMP3
-       RTS
-ILOC   .BS 1
-*-------------------------------
-* NL -> OBJLIST
-* WITHOUT ERASING OR DUPLICATING WHAT'S THERE
-NL.OL  LDY #0
-       LDX #$FF
-.1     INX
-       LDA OBJLIST,X  SEARCH FOR 1ST OPEN BYTE
-       BNE .1
-       STX TEMP3    INDEX TO NEXT FREE BYTE IN OBJLIST
-       STX TEMP3+1  IN CASE WE NEED TO DELETE NEW ADDITIONS
-* BECAUSE A COMBINE IN TLOBJ ELIMINATES THEM
-.2     LDA NOUNLIST,Y
-       BEQ .6       DONE
-       LDX TEMP3
-       BEQ .4       NO OBJS IN OBJLIST YET
-       DEX
-.3     CMP OBJLIST,X
-       BEQ .5       SKIP IF ALREADY IN OBJLIST
-       DEX
-       BPL .3
-       LDX TEMP3
-.4     STA OBJLIST,X
-       INC TEMP3
-.5     INY
-       CPY #20
-       BNE .2
-.6     RTS
-*-------------------------------
-* COMBINE NOUNLIST & LNL INTO NOUNLIST
-* DELETING OBJS NOT IN BOTH
-* USED TO ELIMINATE OBJS NOT IN SOURCE
-* ON EXIT A=0
-COMBINE LDA #2       2 PASSES
-       STA PASS
-.1     LDY #0
-.2     LDX LNL,Y
-       BNE .3       OBJECT FOUND
-.25    INY          SKIP BLANK
-       CPY #20
-       BNE .2
-       LDY #19
-       LDA #0
-       DEC PASS
-       BEQ CORTS
-.26    STA NOUNLIST,Y  ZERO NL TO MOVE LNL INTO IT
-       DEY
-       BPL .26
-       BMI .1
-.3     LDA PASS
-       LSR          LOW BIT -> C
-       TXA
-       BCS .5       2ND PASS
-       LDX #19      1ST PASS
-.4     CMP NOUNLIST,X
-       BEQ .25      LEAVE IT ALONE CAUSE IT'S IN BOTH LISTS
-       DEX
-       BPL .4
-       LDA #0
-       STA LNL,Y  DELETE
-       BEQ .25      ALWAYS
-.5     LDX #$FF
-       PHA
-.6     INX
-       LDA NOUNLIST,X
-       BNE .6
-       PLA
-       STA NOUNLIST,X
-       BNE .25      ALWAYS
-CORTS  RTS
-PASS   .BS 1
-*--------------------------------
-* CHECK OBJS FOR LOC & NUM
-* HAVE ALREADY BEEN CHECKED WI SOURCE
-* ELIMINATE UNQUALIFIED WI MESSAGE
-*SEE IF 0,1,OR MORE OBJS
-CHECKOBJ TSX
-       STX STEMP
-       LDA NOUNLIST
-       BNE CH2
-       LDA JUCONJ   DON'T PRINT ERRMSG TILL LAST CHECK OF NOUNLIST
-       ORA OBJLIST  OBJ LEFT FROM BEFORE CONJ?
-       BNE CORTS
-PLADNS PLA
-       PLA
-DNS    LDY /DONSEE
-       LDA #DONSEE
-       BIT CASEFRAME
-       BVS .53      OBJS IN ROOM PRMITTED?
-       LDY /NOTCAR  OBJS NOT IN ROOM,BUT SINCE VERB DOESN'T PERMIT
-       LDA #NOTCAR  OBJS IN ROOM,PRINT NOTCAR
-.53    JMP PS
-CH2    LDA NOUNLIST+1
-       ORA UCONJ    2 OBJS IF 2 IN NL OR ANOTHER TO COME AFT CONJ
-       STA TWOOBJ
-       JSR STNL
-       LDY #20
-       LDA #0
-.05    STA LOCLIST-1,Y
-       DEY
-       BNE .05
-* FOR EACH OBJ,RECURSIVELY FIND OBJ WHICH IT'S IN
-.10    STY NOTDONE
-.15    STY TEMPIND
-       LDA (TEMP+2),Y
-       BEQ .25
-       CMP ACLOC    DOESN'T MATTER IF LOC I'M IN IS IN SOMETHING ELSE
-       BEQ .20
-       CMP ACTOR    STOP RECURSION AT ME,THO ME IS IN (LOC)
-       BNE .19
-       LDA NOUNLIST,Y
-       CMP ACTOR    IS IT ME?
-       BEQ .16
-       LDA ACTOR    NO,LOC IS ME
-       BNE .20
-.16    LDA ACLOC    YES,LOC IS (LOC)
-       JMP .20
-.19    LDX #IN
-       JSR GETOBJ   FIND WHAT CURRENT OBJ IS IN
-       LDY TEMPIND
-       DEX
-       BMI .22      OBJ ISN'T IN ANYTHING
-       PLA
-       INC NOTDONE  FLAG:FOUND A PAPA OBJ
-.20    STA LOCLIST,Y  REP OBJ WITH OBJ IT'S IN
-.22    INY
-       CPY #20
-       BNE .15
-.25    LDA NOTDONE
-       BEQ CH30
-       LDA #LOCLIST
-       STA TEMP+2   ALL SUBSEQUENT TIMES THRU,READ FROM LOCLIST INSTEAD
-       LDA /LOCLIST
-       STA TEMP+3
-       LDY #0
-       BEQ .10
-*ELIMINATE OBJS NOT IN ALLOWED LOCATIONS (ABSENT,LOC, OR ACTOR)
-CH30   STY OBJS     #OBJS
-       DEY          HIGHEST INDEXED OBJ
-       STY TEMPIND
-       LDA CASEFRAME
-       BMI .60      ABSENT OBJS ALLOWED
-       LDA #9
-       STA ERRMSG   BLANK
-       LDA #0
-.35    LDX LOCLIST,Y
-       CPX ACLOC    IN LOC?
-       BEQ .40
-       CPX ACTOR    IN ME?
-       BEQ .40
-       JSR ELIM
-.37    STA NOUNLIST,Y  DELETE
-.40    DEY
-       BPL .35
-       LDA UALL
-       BEQ .60
-       LDX OBJS
-       DEX
-       BNE .60
-       LDA UCONJ
-       STA TWOOBJ   CHANGE IF OBJS FROM ALL HAVE BEEN ELIMINATED
-.60    BIT CASEFRAME
-       BVS .65      OBJS IN ROOM ALLOWED
-       LDA ACLOC
-       STA TEMPIND+1  SEE IF OBJS ARE IN (LOC)
-       LDA #1       NOTCAR
-       STA ERRMSG
-       JSR CLOC
-.65    LDA CASEFRAME
-       AND #$20
-       BNE .70      OBJS IN ME ALLOWED
-       LDA ACTOR
-       STA TEMPIND+1  SEE IF OBJS ARE IN ACTOR
-       LDA #0       CARR
-       STA ERRMSG
-       JSR CLOC
-.70    JSR COMP
-       LDY SNUM
-       BEQ CHL
-       CPY #21      MAX+1
-       BCC .83
-.95    LDY /NSM
-       LDA #NSM
-       JMP PS
-.83    DEY          INDEX STARTS AT 0
-       JSR STNL
-       LDA (TEMP+2),Y
-       BEQ .95      ?"I DON'T SEE THAT MANY" & CONT
-       LDA #0
-.85    INY
-       CPY #20
-       BCS CHL
-       STA (TEMP+2),Y
-       BCC .85      ALWAYS:FILLS IN REST OF NOUNLIST WI 00s
-       LDY #0
-CHL    LDA NOUNLIST,Y
-       BEQ COMP
-       JSR CHPROP
-       INY
-       CPY #20
-       BNE CHL
-*COMPRESS NOUNLIST:REMOVE 0'S
-COMP   LDY #0
-       LDX #0
-.1     LDA NOUNLIST,Y
-       STA NOUNLIST,X
-       BEQ .2       IF BLANK,DON'T INX,THUS REMOVING BYTE
-       INX
-.2     INY
-       CPY #20
-       BNE .1
-.3     INX
-       STA NOUNLIST,X
-       CPX #19
-       BNE .3
-       RTS
-* CHECK PROPERTIES OF 1 OBJ AGAINST VERB'S REQUIREMENTS
-CHPROP STY TEMP+3
-       STA TEMP+2
-       JSR PNTOBJ
-       JSR RESVDAT  RESET POINTER TO VERB DATA
-       LDA #2
-       STA ERRMSG
-       LDA CASEFRAME
-       ASL
-       ASL
-       ASL
-       ASL          BIT 4 -> C
-       BCC .10      NO LIST OF ALLOWED OBJS
-       PHA
-.3     JSR VDAT
-       TAY
-       BEQ .64      CAME TO END OF LIST WIOUT FINDINT IT
-       CMP TEMP+2
-       BNE .3
-.7     JSR VDAT
-       TAY
-       BNE .7       MOVE POINTER TO NEXT ITEM
-       PLA
-.10    ASL
-       BCC .20      NO LIST OF FORBIDDEN OBJS
-       PHA
-.13    JSR VDAT
-       CMP TEMP+2
-       BEQ .64      FORBIDDEN OBJ
-       TAY
-       BNE .13      NOT EOL
-       PLA
-.20    INC ERRMSG
-       ASL
-       BCS .30      HUMAN OBJ ALLOWED
-       PHA
-       LDY #5       PROP3
-       LDA (MISC),Y
-       AND #8
-       BNE .64      HUMAN,FORBIDDEN
-       PLA
-.30    INC ERRMSG
-       ASL
-       BCS .40      ANIMATE OBJ ALLOWED
-       PHA
-       LDY #5
-       LDA (MISC),Y
-       AND #$10
-       BNE .64      ANIMATE,FORBIDDEN
-       PLA
-.40    INC ERRMSG
-       ASL
-       BCS .50      INANIMATE OBJ ALLOWED
-       PHA
-       LDY #5
-       LDA (MISC),Y
-       AND #$10
-       BEQ .64      INANIMATE,FORBIDDEN
-       PLA
-.50    INC ERRMSG
-       LDA CASEFRAME+1
-       ASL
-       BCC .60
-       PHA
-       JSR VDAT     X
-       LDY #0       SIZE
-       CMP (MISC),Y
-       BCC .64      SIZE>X
-       PLA
-.60    INC ERRMSG
-       ASL
-       BCC .70
-       PHA
-       JSR VDAT     Y
-       LDY #0
-       CMP (MISC),Y
-       BCC .67
-.64    PLA          A WAS SAVED
-.65    JMP PELIM
-.67    PLA
-.70    ASL
-       BCC .80
-       PHA
-       JSR TBIT
-       BNE .64
-       PLA
-.80    ASL
-       BCS .90      BURNT/BROKEN PERMITTED
-       LDA #8
-       STA ERRMSG
-       LDY #5
-       LDA (MISC),Y
-       AND #$60
-       BNE .65
-.90    LDY TEMP+3
-       RTS
-* TEST BIT: ON EXIT Z=1 IFF ANY OF BITS ARE SET
-TBIT   LDY #2
-       STY ERRMSG
-.1     INY
-       JSR VDAT
-       TAX
-       BEQ .2
-       AND (MISC),Y
-       BNE .4       OR:SUCCESS IF ANY OF BITS IS SET
-.2     CPY #5
-       BNE .1
-       INY          Z<=0:3 BYTES WIOUT MATCHED PROP. FAILURE IF 3 00s.
-       RTS
-.3     INY
-       JSR VDAT     ADVANCE VDAT
-.4     CPY #5
-       BNE .3
-       RTS          Z=1
-*GET VERB DATA
-VDAT   LDA $FFFF    VERB DATA
-       INC VDAT+1
-       BNE .1
-       INC VDAT+2
-.1     RTS
-STNL   LDA #NOUNLIST
-       STA TEMP+2
-       LDX /NOUNLIST
-       STX TEMP+3
-       RTS
-* DELETE OBJS IN FORBIDDEN LOCS
-CLOC   LDY TEMPIND
-       LDA #0
-.1     LDX LOCLIST,Y
-       CPX TEMPIND+1     FORBIDDEN LOC?
-       BNE .2
-       JSR ELIM     ? MESSAGE
-.2     DEY
-       BPL .1
-       RTS
-NOTDONE .BS 1       1=STILL FINDING PAPA OBJECTS
-TWOOBJ .BS 1        0=1 OBJ IN NL
-OBJS   .BS 1        #OBJS
-DONSEE .US /I DON'T SEE ANY HERE.@=/
-NSM    .US /YOU DON'T SEE THAT MANY.@=/
-STEMP  .BS 1        TEMP STORAGE FOR STACK POINTER
-* SKIP OBJ DATA
-* 0-7F SKIP THAT MANY BYTES
-* 80+  LIST
-SKPOBJ LDA #$10     BPL
-SKP2   STA .7
-       JSR RESVDAT
-       LDY #18      19 BITS
-       LDA CASEFRAME+2
-       STA TEMP+3
-       LDA CASEFRAME+1
-       STA TEMP+2
-       LDA CASEFRAME
-.1     ASL TEMP+3
-       ROL TEMP+2
-       ROL
-       BCC .2
-       LDX SKPTAB,Y
-       BEQ .2       NO DATA
-       PHA
-       BMI .15
-.12    JSR VDAT
-       DEX
-       BNE .12
-       JMP .17
-.15    JSR VDAT     LIST
-       TAX
-       BNE .15
-.17    PLA
-.2     DEY
-.7     BPL .1       BNE POINTS VDAT AT VERB PARTS
-       RTS
-SKPTAB .HS FFFFFF000000FF00030101000000FFFF000000
-* ELIMINATE A NOUN FROM NLIST
-* IF MORE THAN 1 NOUN OR BEFORE CONJ,PRINT NAME OF NOUN BEFORE MESSAGE
-* & GO BACK FOR MORE. ELSE PRINT & QUIT.
-* ON ENTRY: Y POINTS TO OBJ IN NOUNLIST
-* SAVES Y,SCRAMBLES A&X
-PELIM  LDY TEMP+3   CALLED FROM CHPROP
-ELIM   STY TEMP+3
-       DEC OBJS     1 MORE GONE
-       LDA NMSG
-       BNE .17
-       LDA TWOOBJ
-       BEQ .1
-       LDA UALL
-       BEQ .12
-       LDA OBJS
-       BNE .17      ONLY PRINT LAST REJECT IN CASE OF ALL
-       BEQ .1
-.12    LDA NOUNLIST,Y    CAN'T LOAD FROM TEMP+2 SINCE CH30 CALLS ELIM
-       JSR OBJCOL
-.1     LDX ERRMSG
-       CPX #9
-       BNE .15
-       JSR DNS
-       JMP .17
-.15    LDY MSGS+9,X
-       LDA MSGS,X
-       JSR PS
-* WOULD SAVE BYTES HERE BY PRINTING CR, BUT NOTCAR IS USED BY ANOTHER
-.17    LDA OBJS     ANY LEFT?
-       ORA JUCONJ   MORE COMING?
-       BNE .3
-       LDX STEMP    ONLY 1 OBJ & IT WAS BLOWN. BACK TO CALLER.
-       TXS
-.3     LDY TEMP+3   MULT OBJS,RTS
-       LDA #0
-       STA NOUNLIST,Y  DELETE OBJ
-ELRTS  RTS
-ERRMSG .BS 1        MSG#
-NMSG   .BS 1        0=PRINT MSG
-* CHANGE MSGS+9 IF YOU CHANGE # MSGS
-MSGS   .DA #CAR,#NOTCAR,#.3,#.4,#.5,#.6,#.7,#.8,#IR
-       .DA /CAR,/NOTCAR,/.3,/.4,/.5,/.6,/.7,/.8,/IR
-.3     .DA #"$,.10,#"+,.9
-       .US /<.@=/  SKIPPED IF UALL
-.4     .DA #"$,.10
-       .US /A PERSON!@=/
-.5     .DA #"$,.10
-       .US /AN ANIMAL!@=/
-.6     .DA #"$,.10
-       .US /SOMETHING THAT'S NOT ALIVE!@=/
-.7     .DA #"$,.11
-       .US /BIG!@=/
-.8     .DA #"$,.11
-       .US /SMALL.@=/
-.9     LDA UALL
-       BEQ .20
-       LDA #.12-1   FOR ALL,DON'T PRINT LAST OBJ
-       LDX /.12-1
-       JMP SWPR
-.20    LDX TEMP+3
-       LDA NOUNLIST,X
-       STA $10
-       RTS
-.10    .US /YOU CAN'T +/
-       .DA PRVERB,#" ,#"=
-.11    .US /IT'S TOO =/
-.12    .US /ANYTHING HERE.@=/
-IR     .US /YOU CAN'T. IT'S RUINED.@=/
-CAR    .US /YOU'RE$/
-       .DA CI,#"=
-NOTCAR .US /YOU'RE NOT$/
-       .DA CI,#"=
-CI     .US / CARRYING IT.@=/
-*--------------------------------
-CHKLST LDY #40      NL & LNL
-       LDA #0
-.1     STA NOUNLIST-1,Y
-       DEY
-       BNE .1
-.2     JSR VDAT
-       TAX
-       BEQ .3       EOL
-       STA LNL,Y    PUT PERMITTED LIST IN LNL
-       INY
-       BNE .2       ALWAYS
-.3     RTS
-*CHECK SENT FOR REQRD PARTS
-CHECKSENT LDA CASEFRAME+1
-       LSR          DEST REQD?
-       BCC .1       NO
-       LDY SDEST    GIVEN?
-       BNE .1       YES
-       LDA #74      GIVE DEST!
-       JMP PMSG
-.1     AND #2       (4 BEFORE LSR) INSTR REQD?
-       ORA SINSTR   GIVEN?
-       BNE .8       YES
-       JMP CDEST
-.8     JSR CHKLST
-       LDA SINSTR
-       BEQ .40
-* CHECK INSTR
-       STA NOUNLIST
-       STA $10
-       JSR COMBINE
-       LDA NOUNLIST
-       BNE .32
-       LDY /.30
-       LDA #.30
-       JMP PS
-.32    JSR CINME
-       BEQ .55      IN ME
-       LDA SINSTR
-       JSR PNTOBJ   INEFFICIENT
-       LDY #3
-       LDA (MISC),Y
-       AND #$20
-       BNE .55      CAN'T CARRY LIQUID
-       LDA SINSTR
-       LDX #PARTOF
-       JSR GETOBJ
-       PLA
-       DEX
-       BPL .55      CAN USE INSTR WHICH IS PART WIOUT CARRYING IT
-* IE HANDS,HOSE,TEETH
-* USED TO PICK UP INSTRUMENT.  BUT THIS CAUSED PROBLEMS WITH
-* RESTRICTIONS (IE OWNERSHIP).
-       PHA
-       LDA #131     YOU DON'T HAVE >
-       JMP PMSG
-* INSTR REQD, NOT GIVEN
-* PUT OBJS IN ME IN NL & INSTRLIST IN LNL, THEN COMBINE
-.40    LDA #ME
-       LDX #HOLDS
-       JSR GETOBJ
-.45    DEX
-       BMI .50
-       PLA
-       STA NOUNLIST,X
-       BNE .45      ALWAYS
-.50    JSR COMBINE
-       LDA NOUNLIST+1
-       BEQ .51
-.60    LDA #73      WITH WHAT?
-       JMP PMSG
-.51    LDA NOUNLIST
-       BEQ .60
-       STA SINSTR
-       LDY /.70
-       LDA #.70
-.54    JSR PRINT
-.55    LDA SINSTR
-       JSR PNTOBJ
-       LDY #5
-       LDA (MISC),Y
-       AND #$60     BURNT OR BROKEN?
-.58    BEQ CDEST
-       LDA #IR
-       LDY /IR
-       JMP PS
-.30    .US /YOU CAN'T +/
-       .DA PRVERB
-       .US / WITH <!@=/
-.70    .US /(WITH+/
-       .DA PRINS,#"),#"@,#"=
-PRINS  LDA SINSTR
-PIT    PHA
-       STY $24
-       LDA #$A0
-       JSR FDF0     SPACE LEFT OUT OF STRING SO A COULD BE IN ANYTHING
-       LDA $1A
-       STA $50
-       LDA $1B
-       STA $51
-       PLA
-       JSR PROBJ
-       LDA $50
-       LDX $51
-SWPR   STA $1A
-       STX $1B
-       RTS
-CDEST  LDA CASEFRAME+2
-       BPL .10      NO DESTLIST
-       JSR CHKLST   ADVANCE VDAT
-       LDA SDEST
-       BEQ .10      NO DEST
-       STA NOUNLIST
-       JSR COMBINE
-       LDA NOUNLIST DEST IN DESTLIST?
-       BNE .10      Y
-       LDA #108     USE A DIFFERENT DEST
-.8     JMP PMSG
-.10    LDA CASEFRAME+2
-       ASL
-       BPL .20      NO PREPLIST
-       JSR CHKLST
-       LDA SPM
-       BEQ .20      NO PREP (UNLIKELY)
-       STA NOUNLIST
-       JSR COMBINE
-       LDA #109     TRY A DIF PREP
-       LDX NOUNLIST PREP IN PREPLIST?
-       BEQ .8       N
-.20    LDA CASEFRAME+2
-       AND #$10
-       BEQ HANDLER  VERB PART N/R
-       LDA #113     THAT VERB NEEDS TWO PARTS
-       LDX PFND
-       BEQ .8
-* FALL THRU TO HANDLER
=verbs
-*
-SAVEVERBS33.1,S6,D2
-TATT   .DA FBULB,CAMERA,TO,#FBULB,#ON,#CAMERA
-TBRE   .DA #71,#$80,0,#BAR,#GUN,#HANDS,#HOSE,TEETH,#OBJIS,#BULB1,#$80,#OBJIS,#BULB2,#AMSG,#147,#SKIP,#$80,#JSR+$40,.1,#AMSG,#94,#SKIP,#$80,#NULL,#AZBIT,#VOBJ,#$FF,$FFBF,#0,#VOBJ,#ADJEC,#BROKEN,0,#$40
-.1     LDA SINSTR
-       STA $10
-       JSR PNTOBJ
-       LDY #0       SIZE
-       LDA (MISC),Y
-       PHA
-       LDA CUROBJ
-       JSR PNTOBJ
-       LDY #0       SIZE
-       PLA
-       LSR          DIV BY 2
-       CMP (MISC),Y
-       TYA          Z=1
-       BCS .2       INSTRSIZE/2>=OBJSIZE
-       DEY
-.2     RTS
-TBRU   .DA #TEETH,CAV,TBRUSH,#ZERO,CAVFORM,#0,#ZERO,CAVFORM+1,#AMSG,#19,#ELSE,#POKE,CAVFORM+1,/18*60,#UPSCR,#2,#AMSG,20
-TBUR   .DA #$40,0,TC,#VOBJ,#ADJEC,#BURNT,0,#$20  WAS MATCHES
-TCHEC  .DA #BOOK1,#BOOK2,#BOOK3,BOOK4,#OUT,CHEOUT
-TCHEOUT .DA #BOOK1,#BOOK2,#BOOK3,BOOK4,#BITSET,VOBJ,$40,#AMSG,#79,#SKIP,#$80,#LOCIS+$40,#LIBR1,#AMSG,#95,#SKIP,#$80,#PEEK,BCNT,#2,#AMSG,#80,#SKIP,#ELSE,#AINC,BCNT,#$80,#OBJIS,#BOOK2,#AMSG,81,#0,$40
-TCHEW  .DA #$10,0,#PRIMED,#AMSG,#6,#$80,#NULL,#AMSG,22
-TCLE   .DA #CLOTH,#HANDS,ME,#71,#SOAP1,#SOAP2,#WATER,#WATER+1,#WATER+2,#WATER+3,WATER+4,#VOBJ,#ADJEC,#CLEAN
-TCLI   .DA #IN,ON,#SLOTIS,#VDEST,#SHELF,#UPSCR,3,#VACT,#IN,#VDEST
-TCLOS  .DA #4,0,OC,$DFFF,#$FF
-TCLOT  .DA CLOTH,#OBJIS,#ME,#DO,#ME,#WEA,#VINSTR,0,0,#ELSE,#AMSG,76
-TCOM   .DA COMB,#OBJIS,#VACT,#AMSG,#36,#ELSE,#AMSG,76
-TCUT   .DA ID,TC,#VOBJ,#ADJEC,#BROKEN,0,#$40  LEFTOVER
-TD     .DA HD
-TDAM   .DA ME,#NULL,#AMSG,#250,#AINC,.2,#$80,#PEEK,.2,#3,#AINC,GAMOVR,#AJSR,.5,#0
-.2     .BS 1        # OF CUSSES (NOT SAVED)
-* SCARE FOUL-MOUTHED PLAYER
-.5     LDY #0
-       STY .2
-       STY BUF
-       STY MISC
-       STY CMND     SEEK
-       STY SECT
-       LDA #2
-       STA BUF+1
-.7     LDA .10,Y
-       STA TRACK
-       JSR RWTS
-       INC MISC
-       LDY MISC
-       CPY #6
-       BCC .7
-       RTS
-.10    .DA #0,#15,#30,#10,#11,#12
-TDEB   .DA HDEB
-TDEV   .DA FILM,#NULL,#AMSG,23
-TDIE   .DA #NULL,#AMSG,24
-TDRIB  .DA BALL
-TDRI   .DA #$20,0,#BITSET,#VOBJ,#$10,0,#GOTO,TEA2
-TDR2   .DA #$80,#PRIMED,#AMSG,#6,#POKE,POISON,#7,#$80,#OBJIS+$40,#RUM,#GOTO,.2,#$80,ACTME,#ZERO+$40,AD,#AMSG,#2,#GOTO,SLP,#ELSE,#AMSG,#137,#POKE,FLACT,#VACT,#POKE,FL,#14,#AREP,#VACT,#ADJEC,#DRUNK,#AZBIT,#VACT,$FFFF,#$FE
-.2     .DA #0,HSWA
-TDRO   .DA #NULL,#AREP,#VOBJ,#IN,#VLOC,#$80,#ZERO+$40,SDEST,#DO,#VACT,#PUT,#VOBJ,#VPM,#VDEST,0,#$80,#OBJIS,#BALL,#ASBIT,#BALL,0,1
-TDRY   .DA #WATER,#WATER+1,#WATER+2,#WATER+3,WATER+4,#90,TOWEL,#ISEDG+$40,#VOBJ,#ADJEC,#WET,#AMSG,25,#VOBJ,#ADJEC,#WET
-TDUM   .DA #MGET+1,#BITSET,#VOBJ,4,0,#BITSET+$40,VOBJ,$20,#AMSG,#1,#SKIP,#$80,#ISEDG+$40,#VOBJ,#HOLDS,#VX,#AMSG,#92,#SKIP
-.1     .DA #$80,#BITSET,#VX,$20,#0,#POKE,$10,#VX,#AMSG,#105,#DELIT,#VX,#ELSE,#AREP,#VX,#IN,#VLOC,#$80,#ISEDG,#VX,#IN,#VOBJ,#SKIP,#ELSE,#UNBIND,#$80,#ISEDG,#VOBJ,#HOLDS,#VX,#GOTO,.1,#0
-TDUN   .DA BALL,#14,#HOOP1,HOOP2,IN,#LOCIS,#GYM1,#$80,#LOCIS,#GYM2,#AMSG,#27,#ELSE,#AMSG,26
-TE     .DA HE
-* PRIMED=POISON
-TEAT   .DA #$10,0,#NULL,#NOTH
-TEA2   .DA #$80,#PRIMED,#AMSG,#6,#POKE,POISON,#7,#$80,#OBJIS,#POWDER,#GOTO,.1,#$80,#OBJIS+$40,#FOOD2,#GOTO,.2,#$80,#PEEK,INP,#SALT,#AMSG,#144,#SKIP,#$80,#PEEK,INP,#SUGAR,#AMSG,#145,#ELSE
-.1     .DA #POKE,TIRED,#7,#POKE,TIRED+1,#0,#AINC,AD
-.2     .DA #0,HEAT
-TELL   .DA #NULL,#POKE,ELOP,$EA
-TEND   .DA GAME,#NULL,#AINC,GAMOVR,#0
-TERA   .DA ARR,#NULL,#DELIT,ARR
-TEXA   .DA #BITSET,VOBJ,$800,#DO,#VOBJ,IV,0,0,#$80,#OBJIS,#FBULB,#AJSR,.1,#$80,#OBJIS,PAN1,#BITSET,#PAN1,0,#$80,#AMSG,#28,#$80,#OBJIS,TC,#BITSET,TC,$20,#AMSG,218,HEXA
-.1     LDA #FBULB
-       JSR PNTOBJ
-       LDY #4
-       LDA (MISC),Y
-       AND #7
-       STA $50
-       LDA #0
-       STA $51
-       RTS          MSG PRINTED BY HEXA
-TEXI   .DA HEXI
-TEXT   .DA #WATER,#WATER+1,#WATER+2,#WATER+3,WATER+4,#BITSET,#VOBJ,0,#$20,#AMSG,#19,#ELSE,#AMSG,33
-* JSR GTIME 2* AS OFTEN
-TFAS   .DA .1
-.1     ASL TR       TR=TR*2
-       BNE .2
-       ROR TR       DON'T SHIFT 1 BIT OUT & GET 0
-.2     RTS
-TFIL   .DA #0,8,#WATER,#WATER+1,#WATER+2,#WATER+3,WATER+4,#VINSTR,#IN,#VOBJ
-* CAN'T USE BIT REP SINCE ME MUST THEN PICK LIQUID UP
-TFIN   .DA #INME,#VOBJ,#AMSG,#124,#SKIP,#$80,#INROOM,#VOBJ,#AMSG,#125,#ELSE,#AMSG,126
-TFLU   .DA #TOILET1,TOILET2,#NULL,#AMSG,#110
-.1     .DA #UNBIND,#$80,#ISEDG,#VOBJ,#HOLDS,#VX,#DELIT,#VX,#GOTO,.1,#0,#$FF,$FFBF
-TFOL   .DA #ACTME,#AMSG,#185,#SKIP,#$80,#OBJIS+$40,#ME,#$80,#SLOTIS,#VACT,#LIB,#$80,#SLOTIS,#VACT,#MARK,#POKE,$10,#VACT,#AMSG,#154,#SKIP
-       .DA #$80,#ZERO+$40,SCRIM,#GOTO,.5,#$80,#SLOTIS,#VACT,#PROF,#$80,#SLOTIS,#VACT,#PRIS1,#AMSG,#188,#ELSE
-.5     .DA #POKE,SFL,#2,#SPAWN,#VACT,#PFOL,VOBJ
-MGET   .EQ 22
-TGET   .DA #MGET,#OFF,REM,#OBJWASIN,#VACT,#AMSG,#124,#$80,#ACTME+$40,#ADEL,#VACT,#OWNS,#VOBJ,#AMAK,#VACT,#OWNS,#VOBJ,#$80,#ISEDG,#VACT,#ON,#VOBJ,#AMSG,#35,#AREP,#VOBJ,#IN,#VLOC,SKIP,$FFFF,#$FE  ASSUMES OBJ YOU'RE SITTING IN WAS IN ROOM
-* SIMULATES REJECTION FOR CARRYING OBJ
-* SEPARATE HANDLING BECAUSE YOU CAN GET AN OBJ IN AN OBJ IN ME
-TGIV   .DA #MGET,TO,#VACT,#OWNS,#VOBJ,#VOBJ,#IN,#VDEST
-TGO    .DA #71,IN,HGO,#VACT,#IN,#VDEST
-THEA   .DA #OBJIS,#TAPE1,#$80,#OBJIS,#TAPE2,#GOTO,.1,#0,.2
-.1     .DA #$80,#OBJIN+$40,#RECOR,#AMSG,#63,#SKIP,#$80,#BITSET+$40,#VOBJ,#0,$40,#AMSG,#37,#SKIP,#ELSE,#AZBIT,#VOBJ,#$FF,$FFBF,#$80,#OBJIS,#TAPE1,#AMSG,#38,#$80,#OBJIS,#TAPE2,#UPSCR,#7,#AMSG,39,TRTS
-.3     .US /I'LL TELL YOU IF IT SAYS ANYTHING.@=/
-.2     LDY /.3
-       LDA #.3
-PSNOK  JSR PS
-       JMP NOK
-THEL   .DA ME,#POWDER,TAPE2,.1
-.1     LDA SCORE
-       BNE .3
-       LDA #.2
-       LDY /.2
-       BNE PSNOK
-.2     .US /TALK TO %MARK. HE WANTS TO HELP YOU.@=/
-.3     LDA HOUR
-       CMP #9+12
-       BNE .5
-       LDA #.4
-       LDY /.4
-       JSR PS
-.5     LDA DAY
-       CMP #21
-       BEQ .6
-       LDA KSC+4    PUSHED PANEL?
-       BNE .6       YES
-       LDA #.7
-       LDY /.7
-       JSR PS
-.6     JSR INLINE
-       .DA TRTS,#SLOTIS,#VINSTR,#POWDER,#AMSG,#173,#$80,#SLOTIS,#VINSTR,#TAPE2,#AMSG,#63,#$80,#LOCIS,#SHELF,#AMSG,#174,#$80,#LOCIS,#CRAWL1,#AMSG,#175,#$80,#LOCIS,#BATH1,#$80,#LOCIS,#BATH2,#AMSG,#181,#SKIP
-       .DA #$80,#INME,BOARD,#ISEDG,#MAG,#PARTOF,#BOARD,#AMSG,#219,#$80,#LOCIS,STAIR4,#ISEDG+$40,#MAG,#ON,#TC,#AMSG,#217,#$80,#LOCIS,#OPER,#AMSG,#182,#$80,#LOCIS,#RECR,#AMSG,#210,#$80,#LOCIS,MACH,#ZERO+$40,SCREAM,#AMSG,#176
-       .DA #$80,#LOCIS,OFFI,#ZERO+$40,KSC+6,#AMSG,#177,#$80,#LOCIS+$40,#CELL,#AMSG,#180,#SKIP,#$80,#INROOM,#GUN,#AMSG,#178,#ELSE,#AMSG,179
-.4     .US /YOU'D BETTER GET TO BED.@=/
-.7     .US /YOU'D BEST START LOOKING HIGH AND LOW FOR A WAY OUT.@=/
-THIT   .DA #BAR,#GUN,#HOSE,HANDS,#BITSET,#VOBJ,0,#$10,#DO,#VACT,#KIL,#VOBJ,0,VINSTR,#ELSE,#DO,#VACT,#BRE,#VOBJ,0,VINSTR,#0
-TI     .DA HI
-TJUM   .DA #LOCIS,#STAIR1,#$80,#LOCIS,#STAIR2,#$80,#LOCIS,#STAIR4,#AMSG,#43,#AINC,GAMOVR,#ELSE,#AMSG,120
-TKIL   .DA #BAR,#GUN,#HOSE,#HANDS
-.1     .DA #0,#SLOTIS,#VINSTR,#GUN,#DO,#VACT,#SHOO,#VOBJ,0,VINSTR,#GOTO,.1,#$80,#OBJIS,#PRIS1,#$80,#OBJIS,#PRIS2,#$80,#OBJIS,#PRIS3,#$80,#OBJIS,#PROF,#DESTR,#VOBJ,#AMSG,#46,#SKIP
-       .DA #$80,#JSR,IMP,#AMSG,#204,#SKIP,#$80,#LOCIS+$40,#OFFI,#AMSG,#44,#GOTO,NABBED,#ELSE,#AMSG,#162
-SLP    .DA #POKE,TIRED,#0,#POKE,TIRED+1,#0,#SPAWN,#ME,PDRM,#DO,#ME,SLE,0,0,#POKE,TREP,1  CLOCK CAN'T REACH 10 BEFORE DO IS EXECUTED
-       .DA HSWA     SO TEA2 CAN GOTO SLP
-NABBED .DA #$80,#ZERO+$40,SINSTR,#0,#SLOTIS+$40,#VINSTR,#HANDS,#AREP,#VINSTR,#IN,#GUARD,#$80,#LOCIS+$40,#OFFI,#MOVETO,#OFFI,#AREP,#MARK,#IN,OFFI
-TLIG   .DA #8,0,#BITSET,VOBJ,$20,#AMSG,#47,#SKIP,#$80,#ITIN+$40,#BATT1,FLASH,#ITIN+$40,#BATT2,#FLASH,#AMSG,#100,#SKIP,#$80,#ISEDG,#FLASH,#HOLDS,VX,#BITSET+$40,VX,$40,#AMSG,#101,SKIP,#VOBJ,#ADJEC,#LIT,#0,$40
-TLOA   .DA GAME,HLOA
-TLOC   .DA #BOTT,#BOX,#CAMERA,#FAUC1,#FAUC2,#FAUC3,#FLASH,#TOILET1,TOILET2,#4,0,#KEY1,#KEY2,KEY3,#BITSET,#VOBJ,#0,$20,#AJSR,.1,#AZBIT,#VOBJ,$DFFF,#$FF,#$80,#ISEDG+$40,#VINSTR,#UNLOCKS,#VOBJ,#AMSG,#48,SKIP,$EFFF,#$FF
-.1     LDA #12      (CLOSED)
-       JMP PADJ
-TLOO   .DA #IN,#ON,#UNDER,THRU,.1
-.1     JSR NOK
-.12    LDA LIGHT
-       BNE .15
-       JMP PLOC     IT'S DARK!
-.15    LDA WTFIN    CAN'T DO THIS IN SPCACT SINCE PRLOC USES VDAT
-       CMP #VI
-       BNE .2
-       JMP PRLOC
-.2     LDX SPM
-       BNE .21
-       LDA #61      HUH? (LOOK N)
-       JMP PMSG
-.21    LDA SDEST
-       CMP LOC      ONLY I LOOK
-       BEQ .25      CAN SEE IN LOC EVEN IF CLOSED (IE CLOSET)
-       CPX #IN
-       BNE .23
-       PHA
-       JSR PNTOBJ
-       LDY #3
-       LDA (MISC),Y
-       AND #4       OPENABLE?
-       BEQ .24      NO
-       INY
-       LDA (MISC),Y
-       BMI .24      TRANSPARENT
-       AND #$20
-       BNE .24      OPEN
-       PLA
-       JMP IC
-.24    PLA
-.23    PHA
-       JSR FINDO
-       PLA
-       BCC .25      CAN REACH IT
-       RTS
-.25    LDX SPM
-       CPX #THRU
-       BEQ .8
-       PHA
-       JSR CLCPNT   INVERT PREP
-       TAX
-       PLA
-       JSR GETOBJ
-       DEX
-       BPL .4
-.3     LDX SPM
-       CPX #IN
-       BNE .37
-       LDA SDEST
-       CMP #TOILET1
-       BEQ .34
-       CMP #TOILET2
-       BNE .37
-.34    JSR PNTOBJ
-       LDY #4
-       LDA (MISC),Y
-       AND #$40
-       BEQ .37
-       LDA #111     IT'S BEEN USED.
-       .HS 2C       BIT
-.37    LDA #92      THERE'S NOTHING THERE
-       JMP PMSG
-.4     LDA #0
-       STA TEMP+2
-       STX TEMP+1   PROBJ USES TEMP
-.5     PLA
-       STA $10
-       LDY SPM
-       CPY #IN
-       BNE .55      ONLY IN CAN'T DISPLAY INVISIBLE OBJS
-       JSR PNTOBJ
-       LDY #5
-       LDA (MISC),Y
-       BMI .7       INVISIBLE
-.55    CLC
-       LDA TEMP+2   0 OR 1
-       BNE .6
-       INC TEMP+2
-.6     ADC #29      YOU SEE A,AND A
-       JSR PADJ
-.7     DEC TEMP+1
-       BPL .5
-       LDA TEMP+2
-       BEQ .3       ALL INVISIBLE
-       JMP PR       .<CR>
-*8     CMP #WINDOW
-*      BNE .9
-.8     LDA #93      YOU CAN'T LOOK THRU THAT!  (NOTHING IN INMATE)
-       JMP PMSG
-TLOW   .DA #NULL,#ADEC,LWC,#0
-TMOV   .DA #MPUS,#ZERO+$40,SDEST,#0,#ZERO,OBJLIST+1,#DO,#VACT,#PUT,#VOBJ,#SPM,#SDEST,0,#$80,#ITIN,#VOBJ,#VX,#AREP,#VOBJ,#IN,#GYM1,#AREP,#VOBJ,#IN,#VX,#$80
-       .DA #OBJIS,PAN1,#ZERO,SC,#UPSCR,#4,#AMSG,#49,#MAKVIS,#PAN1,#CHMAP,#SHELF,#UP,#CRAWL1,#AREP,#PAN1,#IN,#CRAWL1,#$80,#OBJIS,#BAR,#AINC,BARREM,#UPSCR,5
-TN     .DA HN
-TNOD   .DA HNOD
-TNOE   .DA #NULL,#POKE,ELOP,$88  DEY
-TOPE   .DA #4,0,#KEY1,#KEY2,KEY3,#ZERO+$40,SINSTR,#0,#ISEDG,#VINSTR,#UNLOCKS,#VOBJ,#ASBIT,#VOBJ,#0,$10,#$80,#BITSET+$40,#VOBJ,#0,$10,#AMSG,#50,#SKIP
-       .DA #$80,#OBJIS,DOOR1,#ZERO,BARREM,#AMSG,#91,#SKIP,#$80,#OBJIS,#DOOR1,#UPSCR,#5,#$80,#OBJIS,#FLASH,#DO,#VACT,#UNLI,FLASH,0,#0
-       .DA #$80,#OBJIS+$40,#TC,#GOTO,.0,#$80,#ISEDG,#MAG,#ON,#TC,#UPSCR,#18,#ELSE,#AMSG,#216,#POKE,MT,#3
-.0     .DA #0,.1,$2000,#0
-* OBJS WHICH CONNECT LOCS WHEN OPEN
-.1     LDA #$FF     OPEN
-       .HS 2C       BIT
-OC     LDA #0       CLOSE
-       STA .7
-* CHECK TIME DOORS LEFT OPEN
-       LDY #3
-       LDA CUROBJ
-.12    DEY
-       BMI .18
-.15    CMP .8,Y
-       BNE .12
-       TYA
-       ASL          2 BYTES/TIMER
-       TAY
-       LDA .7
-       BEQ .16      CLOSE
-       LDA #30
-.16    STA DT,Y
-.18    LDY #6       #"DOORS"-1
-       LDA CUROBJ
-.2     CMP .5,Y
-       BEQ .3
-       DEY
-       BPL .2
-       RTS
-.3     TYA
-       ASL
-       ASL
-       TAY
-       LDA .6+3,Y
-       PHA
-       AND .7       0 IF CLOSING
-       TAX
-       LDA .6+2,Y   DIR FOR NEXT CHM
-       PHA
-       LDA .6,Y
-       PHA
-       LDA .6+1,Y
-       TAY
-       PLA
-       PHA
-       JSR CHM
-       PLA
-       AND .7
-       TAX
-       PLA
-       TAY
-       PLA
-       JMP CHM
-.7     .BS 1        0=CLOSE,FF=OPEN
-.8     .DA #DOOR3,#DOOR5,#DOOR6
-.5     .DA #CLOSET,#DOOR1,#DOOR2,#DOOR3,#DOOR5,#DOOR6,#DOOR7  DOOR4 CAN ONLY BE BROKEN
-.6     .DA #CLOSET,#EAST,#WEST,#RECR,#STAIR1,#UP,#DOWN,#STAIR3,#HALL2,#WEST,#EAST,#HALL4,#HALL2,#SOUTH,#NORTH,#STAIR4,#CAFE,#NORTH,#SOUTH,#KITCH,#STAIR3,#NORTH,#SOUTH,#FR,#CELL,#SOUTH,#NORTH,#HALL12
-TPHO   .DA CAMERA,#ISEDG+$40,#FBULB,#ON,#CAMERA,#$80,#BITSET,#FBULB,0,#$40,#AMSG,#89,#SKIP,#$80,#CZ,#FBULB,#AMSG,#90,#SKIP,#$80
-       .DA #ZERO,LIGHT,#ASBIT,#FBULB,#8,$40,#AJSR,DISPLAY,#AZBIT,#FBULB,#$F7,$FFBF,#$80,#NULL,#DECC,#FBULB,#$80,#BITSET,#VOBJ,0,#$10,#AMSG,#128,#POKE,FLACT,#VOBJ,#POKE,FL,#5,#$80,#OBJIS,#MARK,#UPSCR,6
-TPIC   .DA #UV,GET
-TPLA   .DA #TAPE1,#TAPE2,#BALL,PONG,#RECOR,#ED,MRS,RECOR,IN,#OBJIS,#TAPE1,#$80,#OBJIS,#TAPE2,#AJSR,NOK,#DO,#VACT,#HEA,#VOBJ,0,0
-       .DA #$80,#OBJIS,BALL,#LOCIS+$40,GYM1,#LOCIS+$40,#GYM2,#AJSR,CVH,#$80,#OBJIS,#BALL,#AMSG,#51,#$80,#OBJIS,PONG,#ZERO+$40,SINSTR,#AMSG,52
-CVH    LDY /.1
-       LDA #.1
-       JMP PSNOK
-.1     .US /YOU CAN'T +/
-       .DA PRVERB
-       .US / HERE!@=/
-TPOK   .DA HANDS,#OBJIS+$40,#ME,#AJSR,.1,#0
-.1     LDY /.2
-       LDA #.2
-       JMP PS
-.2     .DA #">,#" ,#"+,PRVERB
-       .US /S YOU BACK.@=/
-TPOU   .DA $20,#0,#IN,ON,#ZERO,SDEST,#AMSG,#105,#DELIT,#VOBJ,#SKIP,#ELSE,#AREP,#VOBJ,#VPM,VDEST
-TPRY   .DA MAG,#COMB,#KEY1,SCREW,#OFF,#PRY,#OUT,PRY,#VOBJ,PARTOF,$FFFF,#$7F
-MPUS   .EQ 25
-TPUS   .DA #MPUS,#OBJIS,#PAN1,#$80,#OBJIS,#RUG,#DO,#VACT,#MOV,#VOBJ,0,0,#$80,#OBJIS,#DBUT,#ASBIT,DOOR1,$10,#AMSG,#53,#$80,#OBJIS,#WBUT,#AJSR,.5,#$80,#BITSET,VOBJ,$40,#AMSG,76
-.5     LDA WB
-       EOR #$FF
-       STA WB
-       RTS
-TPUT   .DA #MPUS,#DV,#DRO,#OUT,UNLI,#SLOTIS+$40,#VDEST,VENT1,#SLOTIS+$40,#VDEST,#VENT2,#NOTH,#ELSE,#DO,#VACT,#PV,#VOBJ,#VPM,VDEST,0,#VOBJ,#VPM,#VDEST
-TPV    .DA #SLOTIS+$40,#VPM,#IN,#SKIP,#$80,#ISEDG,#VDEST,#PART,VX,#JSR+$40,.1,#AMSG,#104,#AREP,#VOBJ,#IN,#ME,#SKIP,#$80,#SLOTIS,#VDEST,#VENT2,#GOTO,.0
-       .DA #$80,#OBJIS,#TOWEL,#$80,#ITIN,#TOWEL,#VENT2,#AREP,#VOBJ,#IN,#VENT2,#AMSG,#214,#UPSCR,#19,#ELSE,#AMSG,#103,#DELIT,#VOBJ,#AINC,GT
-.0     .DA #0
-.1     LDA CUROBJ
-       JSR PNTOBJ
-       LDY #0       SIZE
-       LDA (MISC),Y
-       TAY
-       DEY
-TPRTS  RTS          Z=1 IF SIZE=1
-TREA   .DA #2,0,#JSR,.30,#SKIP,#$80,#OBJIS,#CLOCK,#AJSR,.1,#SKIP,#$80,#OBJIS,#WATCH,#AJSR,.0,#ELSE,#AJSR,.50,#$80,#OBJIS,ID,#INROOM,#PRIS1,#UPSCR,#10,#AMSG,#85,#ADEL,#PRIS1,#ADJEC,#OLD,#ASWI,#PRIS1,PROF
-.30    JSR NOK
-       LDA LIGHT
-       BNE .40
-       JSR PLOC     IT'S DARK
-       LDA #0       SUCCEED (TO FAIL)
-.40    RTS
-.50    LDY #$FF
-.55    INY
-       LDA .80,Y    OBJ
-       BEQ TPRTS    NO MSG FOR OBJ
-       CMP CUROBJ
-       BNE .55
-       LDA .90,Y    MSG#
-       BNE PMNOK    ALWAYS
-.80    .DA #BOOK1,#BOOK2,#BOOK3,#BOOK4,#DB,#FILE1,#FILE2,#FILE3,#FILE4,#GRAF,ID
-.90    .DA #57,#58,#59,#60,#87,#164,#165,#166,#167,#252,#84
-.0     LDA WB
-       BNE PDAT
-.1     LDA #27
-       JSR PADJ     THE
-       LDA CUROBJ
-       JSR POBJ
-       LDA #0
-       STA $51
-       LDA HOUR
-       BNE .2
-       LDA #12      0=AFTER MIDNIGHT
-.2     CMP #13
-       BCC .3
-       SBC #12
-.3     STA $50
-       LDA #0       SAYS IT IS /:
-       JSR POBJ     NO CAPS
-       LDA MINUTE
-       STA $50
-       CMP #10
-       BCS WP35
-       LDA #"0
-       JSR COUT
-       INC $24
-WP35   LDA #54
-PMNOK  JSR PMSG
-       JMP NOK
-PDAT   LDA #0
-       STA $51
-       LDA MONTH
-       STA $50
-       LDA #28      THE WATCH SAYS /
-       JSR PADJ
-       LDA DAY
-       STA $50
-       BNE WP35     ALWAYS
-TREC   .DA #TAPE1,TAPE2,ON,#NULL,#AMSG,62
-TREM   .DA #MGET,#ISEDG+$40,#VOBJ,#ON,VACT,#ITIN,#VOBJ,VX,#ITIN,#VX,#VY,#AREP,#VOBJ,#IN,#VY,SKIP,#VOBJ,#IN,#VACT
-* NOTE REMOVE PUTS OBJS IN ROOM IN ME - THAT'S NOT A BUG, IT'S A FEATURE!
-TRET   .DA #BOOK1,#BOOK2,#BOOK3,BOOK4,#LOCIS+$40,#LIBR1,#AMSG,#95,#SKIP,#ELSE,#AMSG,#98,#$80,#BITSET,#VOBJ,#0,$40,#ADEC,BCNT,#$80,#OBJIS,#BOOK2,#DELIT,#BOOK2,#ELSE,#AREP,#VOBJ,#IN,SHELF,#$FF,$FFBF
-TREW   .DA #TAPE1,TAPE2,RECOR,#ISEDG+$40,#VOBJ,#IN,#RECOR,#AMSG,#63,SKIP,#0,$40
-TRIP   .DA #FILE1,#FILE2,#FILE3,FILE4,#UV,RIP,#VOBJ,IN
+ END OF ARCHIVE