Prev: AE6B Up: Map Next: AEAF
AE80: Match Phrase Tokens
Used by the routine at B0DE.
Matches phrase patterns with multiple variations against user input tokens.
Input
HL A pointer to phrase token data
Output
F The Z flag is set if the input matches any pattern
MatchPhraseTokens AE80 EX DE,HL Switch the phrase token pointer to DE.
AE81 JR MatchPhraseTokens_Start Jump to MatchPhraseTokens_Start.
Skip the separator.
MatchPhraseTokens_Loop AE83 INC DE Increment the phrase token pointer by one.
Fetch the second user input token (not the first, as the first token is the verb and the second token onwards gives the context).
For example; "GET" (verb) "KEG OF GUNPOWDER" (direct object).
MatchPhraseTokens_Start AE84 LD HL,$A825 HL=UserInput_Token_2.
AE87 JR CompareTokens Jump to CompareTokens.
The tokens matched so advance both pointers.
MatchTokens_Loop AE89 INC HL Increment the input token pointer by one.
AE8A INC DE Increment the pattern token pointer by one.
Keep looping if the tokens match.
CompareTokens AE8B LD A,(DE) Jump to MatchTokens_Loop if the pattern token and the input token are the same.
AE8C CP (HL)
AE8D JR Z,MatchTokens_Loop
The tokens are different, but is it just that we are at the end of the pattern?
AE8F CP $FE Jump to CheckSeparator unless this is the terminator character (FE).
AE91 JR NZ,CheckSeparator
Yes! The input tokens all matched against the phrase pattern tokens.
AE93 LD A,(HL) Return with Z flag result.
AE94 CP $FF
AE96 RET
The tokens are different, but is this a separator character?
CheckSeparator AE97 CP $FD Jump to MatchPhraseTokens_Next if this is not the separator (FD).
AE99 JR NZ,MatchPhraseTokens_Next
AE9B LD A,(HL) Jump to MatchPhraseTokens_Loop if the input tokens are not complete.
AE9C CP $FF
AE9E JR NZ,MatchPhraseTokens_Loop
AEA0 RET Return.
The current variant doesn't match, so skip to the next one.
MatchPhraseTokens_Next AEA1 INC DE Increment the phrase token pointer by one.
AEA2 LD A,(DE) Jump to MatchPhraseTokens_Return if the terminator has been reached (FE).
AEA3 CP $FE
AEA5 JR Z,MatchPhraseTokens_Return
AEA7 CP $FD Jump to MatchPhraseTokens_Next if this is not the separator (FD).
AEA9 JR NZ,MatchPhraseTokens_Next
AEAB JR MatchPhraseTokens_Loop Jump to MatchPhraseTokens_Loop.
The input doesn't match any patterns.
MatchPhraseTokens_Return AEAD OR A Clear the Z flag.
AEAE RET Return.
View the equivalent code in The Jewels Of Babylon.
Prev: AE6B Up: Map Next: AEAF