Prev: 7B78 Up: Map Next: 7C23
7B9E: Find the action pattern a sentence fits
Used by the routine at PARSE_ACTION.
Four words are gathered from the frame at IY into a probe at PROBE_VERB -- the verb with its ALL bit set aside at ALL_BIT, then a particle and a preposition from the two noun phrases (PICK_WORD) -- and ACTION_PATTERNS is searched with NAME_MATCHES for one that fits, so word order within the probe does not matter. A match goes on to ASSIGN_PHRASES. With none the verb does nothing: "you ... . time passes..." -- except in an order, which goes back to the parser at TURN_OVER instead.
Input
IY The sentence's frame
Output
IX The pattern
F NZ if one was found
MATCH_PATTERN 7B9E PUSH IY
7BA0 LD L,(IY+$00)
7BA3 LD H,(IY+$01)
7BA6 LD A,H
7BA7 AND $80
7BA9 LD (ALL_BIT),A
7BAC RES 7,H
7BAE LD (PROBE_VERB),HL
7BB1 LD HL,PROBE_WORD1
7BB4 PUSH HL
7BB5 LD B,$04
7BB7 CALL CLEAR_BYTES
7BBA POP HL
7BBB LD B,$02
7BBD LD E,$04
7BBF CALL PICK_WORD
7BC2 LD E,$0E
7BC4 CALL PICK_WORD
7BC7 LD E,$06
7BC9 CALL PICK_WORD
7BCC LD E,$10
7BCE CALL PICK_WORD
7BD1 XOR A
7BD2 LD (NAME_FAILED),A
7BD5 LD HL,PROBE_VERB
7BD8 LD DE,$0008
7BDB LD IX,ACTION_PATTERNS
MATCH_PATTERN_0 7BDF PUSH IX
7BE1 POP IY
7BE3 CALL NAME_MATCHES
7BE6 JR Z,MATCH_PATTERN_1
7BE8 ADD IX,DE
7BEA LD A,(IX+$01)
7BED OR (IX+$00)
7BF0 JR NZ,MATCH_PATTERN_0
7BF2 POP IY
7BF4 LD A,(NAME_FAILED)
7BF7 AND A
7BF8 JP NZ,UNKNOWN_VERB
7BFB LD HL,(PROBE_VERB)
7BFE PUSH HL
7BFF LD HL,MSG_YOU_TIME_PASSES
7C02 XOR A
7C03 LD (INPUT_STYLE),A
7C06 LD (ALL_ACTION),A
7C09 LD A,$01
7C0B LD (DOING_IT),A
7C0E CALL RUN_MESSAGE
7C11 LD A,(IS_ORDER)
7C14 DEC A
7C15 RET Z
7C16 POP HL
7C17 POP HL
7C18 JP TURN_OVER
MATCH_PATTERN_1 7C1B POP IY
7C1D CALL ASSIGN_PHRASES
7C20 OR $01
7C22 RET
Prev: 7B78 Up: Map Next: 7C23