Prev: 7D6B Up: Map Next: 7E78
7D74: Inglish: Copy The Parser Slot
Copies the parser slot into the clause. If the grammar count still needs a noun, it prints "which?" and reports no match.
Inglish_CopyTheParserSlot 7D74 LD ($B71A),A Update *B71A.
7D77 PUSH IY Copy the parser slot at IY into B9C8.
7D79 POP HL
7D7A LD DE,$B9C8
7D7D LD BC,$0018
7D80 LDIR
7D82 RET Return.
Inglish_CopyTheParserSlot_ReadTheGrammarCount 7D83 LD A,($7954) Read the grammar count.
7D86 LD HL,($7942) Read the pointer stored in the first copy window.
Inglish_CopyTheParserSlot_CopyIntoTheClause 7D89 PUSH HL Call Inglish_CopyTheParserSlot to copy the parser slot into the clause.
7D8A CALL Inglish_CopyTheParserSlot
7D8D LD HL,$ADCC Point HL at "which[0x01] ?".
This entry point is used by the routine at Inglish_PlantJumpRelativeIfNonZero.
Inglish_CopyTheParserSlot_OpenTheMessageGate 7D90 CALL Inglish_OpenTheMessageGate Call Inglish_OpenTheMessageGate to open the message gate.
7D93 CALL MessageOpenTheGateForAConjunction Call MessageOpenTheGateForAConjunction to open the message gate for a conjunction.
7D96 XOR A Return zero from the parser-slot copy.
7D97 RET Return.
Inglish_CopyTheParserSlot_TestTheSecondMatch 7D98 LD HL,$793E Jump to Inglish_CopyTheParserSlot_PlantJumpIfZero if bit 0 of the second match buffer is clear.
7D9B BIT 0,(HL)
7D9D JP Z,Inglish_CopyTheParserSlot_PlantJumpIfZero
7DA0 BIT 1,(HL) See whether bit 1 of the second match buffer is set.
7DA2 LD HL,$7948 Jump to Inglish_CopyTheParserSlot_PointAtTheExitList if bit 1 of the second match buffer is clear.
7DA5 LD DE,$B6E9
7DA8 LD BC,$B6FF
7DAB JR Z,Inglish_CopyTheParserSlot_PointAtTheExitList
Test this flag.
7DAD LD A,($7941) Jump to Inglish_CopyTheParserSlot_DispatchTheAction if *7941 is zero.
7DB0 AND A
7DB1 JP Z,Inglish_CopyTheParserSlot_DispatchTheAction
7DB4 LD A,($7955) Read the second grammar count.
7DB7 LD A,($7948) Read the second copy window.
7DBA JR Inglish_CopyTheParserSlot_CopyIntoTheClause Jump to Inglish_CopyTheParserSlot_CopyIntoTheClause to copy the slot and print the question.
This entry point is used by the routine at Inglish_ScoreTheCurrentAction.
Inglish_CopyTheParserSlot_ReadTheConjunctionCount 7DBC LD A,($B71B) Read *B71B.
7DBF DEC A Return if the conjunction count reached zero.
7DC0 RET Z
Test the phrase scratch byte.
7DC1 LD A,($B71C) Jump to Inglish_CopyTheParserSlot_TestTheGrammarMarker if *B71C is zero.
7DC4 AND A
7DC5 JR Z,Inglish_CopyTheParserSlot_TestTheGrammarMarker
7DC7 POP HL Jump back to InglishApplyAMatch_UpdateTheReplayPath to update the replay path.
7DC8 JP InglishApplyAMatch_UpdateTheReplayPath
Test the flag.
Inglish_CopyTheParserSlot_TestTheGrammarMarker 7DCB LD A,($7940) Jump to Inglish_CopyTheParserSlot_TestTheSecondMatch if *7940 is 01.
7DCE CP $01
7DD0 JR Z,Inglish_CopyTheParserSlot_TestTheSecondMatch
7DD2 LD HL,$793D Jump to Inglish_CopyTheParserSlot_PlantJumpIfNotZero if bit 0 of the match buffer is clear.
7DD5 BIT 0,(HL)
7DD7 JP Z,Inglish_CopyTheParserSlot_PlantJumpIfNotZero
7DDA BIT 1,(HL) See whether bit 1 of the match buffer is set.
7DDC LD HL,$7942 Jump to Inglish_CopyTheParserSlot_PointAtTheExitList if bit 1 of the match buffer is clear.
7DDF LD DE,$B6E8
7DE2 LD BC,$B6FE
7DE5 JR Z,Inglish_CopyTheParserSlot_PointAtTheExitList
Test this flag.
7DE7 LD A,($793F) Jump to Inglish_CopyTheParserSlot_DispatchTheAction if *793F is zero.
7DEA AND A
7DEB JR Z,Inglish_CopyTheParserSlot_DispatchTheAction
7DED DEC A Jump back to Inglish_CopyTheParserSlot_ReadTheGrammarCount if the third match buffer has not reached zero.
7DEE JR NZ,Inglish_CopyTheParserSlot_ReadTheGrammarCount
7DF0 CALL Inglish_TestTheScratchBits Call Inglish_TestTheScratchBits to test the scratch bits.
7DF3 JR NZ,Inglish_CopyTheParserSlot_TestTheSecondMatch Jump back to Inglish_CopyTheParserSlot_TestTheSecondMatch unless Inglish_TestTheScratchBits returned with the zero flag set.
This entry point is used by the routine at InglishApplyAMatch.
Inglish_CopyTheParserSlot_DispatchTheAction 7DF5 CALL Inglish_OpenTheMessageGate Call Inglish_OpenTheMessageGate to open the message gate.
7DF8 CALL Turn_RunTheHandlerIfPresent Call Turn_RunTheHandlerIfPresent to run the handler when one is present.
7DFB JP InglishApplyAMatch_TestThePhraseScratchByte Jump back to InglishApplyAMatch_TestThePhraseScratchByte to test the phrase scratch byte.
Inglish_CopyTheParserSlot_PointAtTheExitList 7DFE PUSH HL Call ExitsPointAtTheExitList to point IX at the exit list.
7DFF CALL ExitsPointAtTheExitList
7E02 LD A,$01 Write 01 to the flag at BC: the noun-print flag at B6FE, or the second-noun flag at B6FF when reached from 7DA2.
7E04 LD (BC),A
7E05 CALL ExitsFindTheExitToANamedPlace Call ExitsFindTheExitToANamedPlace to find the exit to the place named.
7E08 CP $FF Jump to Inglish_CopyTheParserSlot_StoreTheObject if ExitsFindTheExitToANamedPlace did not return FF.
7E0A JR NZ,Inglish_CopyTheParserSlot_StoreTheObject
7E0C POP HL Write 02 to *B710.
7E0D LD A,$02
7E0F LD ($B710),A
7E12 LD IX,$C060 Start the object search one slot before ObjectTable.
7E16 XOR A Put zero in A.
7E17 LD (BC),A Store it in the noun-print flag.
7E18 PUSH HL Save HL and call ConditionSamePlaceAsThePlayer to test whether the object at Pointer_CurrentCharacter is here.
7E19 CALL ConditionSamePlaceAsThePlayer
7E1C CP $FF Jump to Inglish_CopyTheParserSlot_SayItIsNotHere if ConditionSamePlaceAsThePlayer returned FF.
7E1E JR Z,Inglish_CopyTheParserSlot_SayItIsNotHere
Inglish_CopyTheParserSlot_StoreTheObject 7E20 POP HL Store it in the current object.
7E21 LD (DE),A
7E22 JP Inglish_ArmTheMessageGate Jump back to Inglish_ArmTheMessageGate to arm the message gate.
Inglish_CopyTheParserSlot_SayItIsNotHere 7E25 CALL Inglish_OpenTheMessageGate Call Inglish_OpenTheMessageGate to open the message gate.
7E28 LD HL,$ADD3 Point HL at "i do not see[0x00] here[0x14]".
7E2B CALL MessageOpenTheGateForAConjunction Call MessageOpenTheGateForAConjunction to open the message gate for a conjunction.
7E2E XOR A Return zero.
7E2F RET Return.
Inglish_CopyTheParserSlot_PlantJumpIfNotZero 7E30 CALL Inglish_PlantJumpRelativeIfNonZero Call Inglish_PlantJumpRelativeIfNonZero to plant JR NZ and read the two fields.
7E33 LD HL,($7958) Read the pointer stored in the saved text pointer.
7E36 PUSH HL Point HL at "[0x0b] D[0x01][0x01][0x14]".
7E37 LD HL,$ADE1
Test this flag.
7E3A LD A,($7940) Jump to Inglish_CopyTheParserSlot_OpenTheMessageGate if *7940 is zero.
7E3D AND A
7E3E JP Z,Inglish_CopyTheParserSlot_OpenTheMessageGate
7E41 LD A,($7954) Read the grammar count.
7E44 CALL Inglish_CopyTheParserSlot Call Inglish_CopyTheParserSlot to copy the parser slot.
7E47 LD HL,$ADC4 Point HL at the "what ?" prompt in ADC0.
7E4A JP Inglish_CopyTheParserSlot_OpenTheMessageGate Jump to Inglish_CopyTheParserSlot_OpenTheMessageGate to open the message gate and print the prompt.
Inglish_CopyTheParserSlot_PlantJumpIfZero 7E4D CALL Inglish_PlantJumpRelativeIfZero Call Inglish_PlantJumpRelativeIfZero to plant JR Z and read the two fields.
7E50 LD HL,$0000 Start from a clear pointer.
7E53 PUSH HL Read *CurrentObject.
7E54 LD A,($B6E8)
7E57 CALL Table_AddressTheObjectName Call Table_AddressTheObjectName to address the object name.
7E5A PUSH HL Call Inglish_PlantJumpRelativeIfNonZero to plant JR NZ and read the two fields.
7E5B CALL Inglish_PlantJumpRelativeIfNonZero
7E5E LD HL,($7958) Read the pointer stored in the saved text pointer.
7E61 PUSH HL Point HL at "[0x0b] Eat[0x01][0x01][0x00][0x01][0x01][0x01][0x14]".
7E62 LD HL,$ADE7
Test this flag.
7E65 LD A,($7941) Jump to Inglish_CopyTheParserSlot_OpenTheMessageGate if *7941 is zero.
7E68 AND A
7E69 JP Z,Inglish_CopyTheParserSlot_OpenTheMessageGate
7E6C LD A,($7955) Read the second grammar count.
7E6F CALL Inglish_CopyTheParserSlot Call Inglish_CopyTheParserSlot to copy the parser slot.
7E72 LD HL,$ADC0 Point HL at the "what ?" prompt in ADC0.
7E75 JP Inglish_CopyTheParserSlot_OpenTheMessageGate Jump to Inglish_CopyTheParserSlot_OpenTheMessageGate to open the message gate and print the prompt.
Prev: 7D6B Up: Map Next: 7E78