Prev: B0A9 Up: Map Next: B10B
B0DE: Action Routing
Input
HL Table of pointers which reference item groups
DE Jump table of pointers which action each reference in HL
BC Count of the number of table items to process
ActionRouting B0DE PUSH HL Load the item group table into IX (using the stack).
B0DF POP IX
Keep looping until a match is found.
ActionRouting_Loop B0E1 LD L,(IX+$00) Fetch the phrase tokens from the item group and store the pointer in HL.
B0E4 LD H,(IX+$01)
B0E7 PUSH IX Stash the item group table, the pointer to the jump table and the table items counter on the stack.
B0E9 PUSH DE
B0EA PUSH BC
B0EB CALL MatchPhraseTokens Call MatchPhraseTokens.
B0EE POP BC Restore the table items counter, the pointer to the jump table and the item group table from the stack.
B0EF POP DE
B0F0 POP IX
Skip to the next set of phrase tokens if nothing matched...
B0F2 JR NZ,ActionRouting_Next Jump to ActionRouting_Next if none of the input matches this set of phrase tokens.
The phrase tokens matched! Handle jumping to the action routine.
B0F4 PUSH DE Load the action table into IX (using the stack).
B0F5 POP IX
B0F7 LD L,(IX+$00) Fetch the action routine from the table and store it in HL.
B0FA LD H,(IX+$01)
B0FD POP DE Discard the return address on the stack.
B0FE JP (HL) Jump to the action routine pointed to by *HL.
Nothing matched, so move to the next set of pointers.
ActionRouting_Next B0FF INC IX Move to the next pointer in the item group table.
B101 INC IX
B103 INC DE Move to the next pointer in the action pointers table.
B104 INC DE
B105 DEC BC Decrease the table items counter by one.
B106 LD A,B Jump back to ActionRouting_Loop until all the item groups have been processed.
B107 OR C
B108 JR NZ,ActionRouting_Loop
B10A RET Return.
Prev: B0A9 Up: Map Next: B10B