![]() |
Routines |
| Prev: 75F6 | Up: Map | Next: 76EC |
|
Used by the routines at PARSE_AND and PARSE_VERB.
|
||||
| PARSE_THEN | 75FA | BIT 1,E | No verb yet, and no earlier frame to borrow one from... | |
| 75FC | JR Z,END_COMMAND | |||
| 75FE | LD A,(COMMAND_FRAMES) | |||
| 7601 | AND A | |||
| 7602 | JR NZ,END_COMMAND | |||
| 7604 | LD A,(LAST_CLASS) | ...an empty line: nothing to do | ||
| 7607 | CP $C0 | |||
| 7609 | JR NZ,PARSE_THEN_0 | |||
| 760B | CP D | |||
| 760C | JR Z,IN_ORDER_ONLY | |||
| PARSE_THEN_0 | 760E | CALL PARSING_ORDER | ...no verb outside a quotation: "what ?" | |
| 7611 | JP Z,QUOTE_LEFT_OPEN | |||
|
This entry point is used by the routine at PARSE_COMMAND.
|
||||
| END_COMMAND | 7614 | LD A,(ALL_EXCEPT) | ALL_EXCEPT = 1 means ALL: set bit 7 of the verb's second byte | |
| 7617 | DEC A | |||
| 7618 | JR NZ,PARSE_THEN_1 | |||
| 761A | SET 7,(IY+$01) | |||
| PARSE_THEN_1 | 761E | LD HL,COMMAND_FRAMES | Count the frame, except for the AND in ALL EXCEPT | |
| 7621 | DEC A | |||
| 7622 | LD A,D | |||
| 7623 | JR NZ,PARSE_THEN_2 | |||
| 7625 | CP $A0 | |||
| 7627 | JR Z,PARSE_THEN_3 | |||
| PARSE_THEN_2 | 7629 | INC (HL) | ||
| PARSE_THEN_3 | 762A | CALL FRAME_BELOW_THEN_SWAP | On to the next frame; if an AND ended this one, keep going: TAKE THE MAP AND THE KEY | |
| 762D | CP $A0 | |||
| 762F | JP Z,PARSE_NEXT_COMMAND | |||
| 7632 | LD A,(QUESTION_WAITING) | Finishing a command that was left unfinished? | ||
| 7635 | AND A | |||
| 7636 | JR Z,PARSE_THEN_10 | |||
| 7638 | PUSH DE | Compare the new frame's noun with the old command's... | ||
| 7639 | LD E,A | |||
| 763A | LD D,$00 | |||
| 763C | LD HL,COMMAND_FRAME | |||
| 763F | ADD HL,DE | |||
| 7640 | PUSH IY | |||
| 7642 | LD IY,NEXT_FRAME | |||
| 7646 | LD A,(IY+$08) | |||
| 7649 | OR (IY+$09) | |||
| 764C | LD DE,$B9B8 | |||
| 764F | JR Z,PARSE_THEN_5 | |||
| 7651 | LD A,(IY+$08) | |||
| 7654 | CP (HL) | |||
| 7655 | JR NZ,PARSE_THEN_4 | |||
| 7657 | LD A,(IY+$09) | |||
| 765A | INC HL | |||
| 765B | CP (HL) | |||
| 765C | DEC HL | |||
| 765D | JR Z,PARSE_THEN_5 | |||
| PARSE_THEN_4 | 765F | LD A,(IY+$12) | ...or its second noun... | |
| 7662 | OR (IY+$13) | |||
| 7665 | LD DE,$B9C2 | |||
| PARSE_THEN_5 | 7668 | POP IY | ||
| 766A | JR NZ,PARSE_THEN_9 | ...and copy the new words into whichever of the old noun and adjectives are empty | ||
| 766C | EX DE,HL | |||
| 766D | LD B,$03 | |||
| PARSE_THEN_6 | 766F | LD A,(HL) | ||
| 7670 | INC HL | |||
| 7671 | OR (HL) | |||
| 7672 | DEC HL | |||
| 7673 | JR NZ,PARSE_THEN_7 | |||
| 7675 | LD A,(DE) | |||
| 7676 | LD (HL),A | |||
| PARSE_THEN_7 | 7677 | INC HL | ||
| 7678 | INC DE | |||
| 7679 | JR NZ,PARSE_THEN_8 | |||
| 767B | LD A,(DE) | |||
| 767C | LD (HL),A | |||
| PARSE_THEN_8 | 767D | INC HL | ||
| 767E | INC DE | |||
| 767F | DJNZ PARSE_THEN_6 | |||
| PARSE_THEN_9 | 7681 | POP DE | ||
| PARSE_THEN_10 | 7682 | PUSH IY | Every frame with no verb takes the verb of the frame before | |
| 7684 | LD IY,ROOM_POINTERS | |||
| 7688 | LD A,(COMMAND_FRAMES) | |||
| 768B | LD B,A | |||
| 768C | PUSH BC | |||
| 768D | CALL FRAME_BELOW_SWAP | |||
| PARSE_THEN_11 | 7690 | LD A,B | ||
| 7691 | AND A | |||
| 7692 | JR Z,PARSE_THEN_12 | |||
| 7694 | CALL FRAME_BELOW_SWAP | |||
| 7697 | LD A,(IY+$01) | |||
| 769A | AND $7F | |||
| 769C | OR (IY+$00) | |||
| 769F | CALL Z,COPY_VERB_ON | |||
| 76A2 | JR PARSE_THEN_11 | |||
| PARSE_THEN_12 | 76A4 | POP BC | And a frame with the same verb but no second phrase borrows the one before's: PUT THE MAP AND THE KEY IN THE CHEST | |
| 76A5 | POP IY | |||
| 76A7 | PUSH IY | |||
| 76A9 | CALL FRAME_SWAP_DOWN | |||
| PARSE_THEN_13 | 76AC | LD A,B | ||
| 76AD | AND A | |||
| 76AE | JP Z,PARSE_THEN_14 | |||
| 76B1 | CALL FRAME_SWAP_DOWN | |||
| 76B4 | LD A,(IY+$12) | |||
| 76B7 | OR (IY+$13) | |||
| 76BA | JR NZ,PARSE_THEN_13 | |||
| 76BC | LD A,(IY+$00) | |||
| 76BF | CP (IX+$00) | |||
| 76C2 | JR NZ,PARSE_THEN_13 | |||
| 76C4 | LD A,(IY+$01) | |||
| 76C7 | CP (IX+$01) | |||
| 76CA | JR NZ,PARSE_THEN_13 | |||
| 76CC | LD A,(IX+$0E) | |||
| 76CF | OR (IX+$0F) | |||
| 76D2 | JR Z,PARSE_THEN_13 | |||
| 76D4 | EXX | |||
| 76D5 | LD DE,$000E | |||
| 76D8 | CALL COPY_VERB_PHRASE | |||
| 76DB | JP PARSE_THEN_13 | |||
| PARSE_THEN_14 | 76DE | POP IY | Nothing more on the line: done | |
| 76E0 | LD A,(MORE_COMMANDS) | |||
| 76E3 | AND A | |||
| 76E4 | RET Z | |||
| 76E5 | CALL PARSING_ORDER | More: outside a quotation, go back to the main loop for it; inside one, carry straight on | ||
| 76E8 | RET Z | |||
| 76E9 | JP PARSE_NEXT_COMMAND | |||
| Prev: 75F6 | Up: Map | Next: 76EC |