checkpoint/macros.zap

271 lines
4.8 KiB
Plaintext

.FUNCT START-SENTENCE,OBJ,INV?=0
CALL2 THIS-IS-IT,OBJ
EQUAL? OBJ,PLAYER \?ELS3
PRINTI "You"
RTRUE
?ELS3: EQUAL? OBJ,POCKET \?ELS7
PRINTI "Your pocket"
RTRUE
?ELS7: EQUAL? OBJ,TICKET \?ELS11
PRINTI "Your ticket"
RTRUE
?ELS11: EQUAL? OBJ,PASSPORT \?ELS15
PRINTI "Your passport"
RTRUE
?ELS15: EQUAL? OBJ,HEAD \?ELS19
PRINTI "Your head"
RTRUE
?ELS19: EQUAL? OBJ,HANDS \?CND1
PRINTI "Your hands"
RTRUE
?CND1: FSET? OBJ,NARTICLEBIT /?CND26
FSET? OBJ,PERSONBIT \?THN32
FSET? OBJ,SEENBIT \?ELS31
?THN32: PRINTI "The "
JUMP ?CND26
?ELS31: FSET? OBJ,VOWELBIT \?ELS37
PRINTI "An "
JUMP ?CND26
?ELS37: PRINTI "A "
?CND26: FSET? OBJ,PERSONBIT \?CND44
FSET OBJ,SEENBIT
?CND44: PRINTD OBJ
ZERO? INV? /FALSE
IN? BRIEFCASE,OBJ \FALSE
FSET? BRIEFCASE,SEENBIT /FALSE
FSET BRIEFCASE,SEENBIT
PRINTI ", carrying"
CALL2 HIM-HER-IT,BRIEFCASE
PRINTI ","
RTRUE
.FUNCT PRINTT,OBJ
EQUAL? OBJ,TURN \?ELS5
LESS? 1,P-NUMBER \?ELS5
PRINTI " "
PRINTN P-NUMBER
PRINTI " minutes"
RTRUE
?ELS5: EQUAL? OBJ,INTNUM \?ELS11
ZERO? P-DOLLAR-FLAG /?ELS11
PRINTI " that amount"
RTRUE
?ELS11: FSET? OBJ,WINDOWBIT \?ELS17
PRINTI " the window"
RTRUE
?ELS17: CALL2 THE?,OBJ
PRINTI " "
PRINTD OBJ
RTRUE
.FUNCT THE?,OBJ
FSET? OBJ,NARTICLEBIT /?CND1
FSET? OBJ,PERSONBIT \?THN7
FSET? OBJ,SEENBIT \?ELS6
?THN7: PRINTI " the"
JUMP ?CND1
?ELS6: FSET? OBJ,VOWELBIT \?ELS12
PRINTI " an"
JUMP ?CND1
?ELS12: PRINTI " a"
?CND1: FSET? OBJ,PERSONBIT \FALSE
FSET OBJ,SEENBIT
RTRUE
.FUNCT PRINTA,O
EQUAL? O,INTNUM \?ELS3
ZERO? P-DOLLAR-FLAG /?ELS3
PRINTI "money"
RTRUE
?ELS3: FSET? O,NARTICLEBIT \?ELS9
JUMP ?CND1
?ELS9: FSET? O,VOWELBIT \?ELS13
PRINTI "an "
JUMP ?CND1
?ELS13: PRINTI "a "
?CND1: PRINTD O
RTRUE
.FUNCT NO-PRONOUN?,OBJ,CAP=0
EQUAL? OBJ,PLAYER /FALSE
FSET? OBJ,PERSONBIT /?ELS5
EQUAL? OBJ,P-IT-OBJECT \?CND1
FSET? IT,TOUCHBIT \?CND1
RFALSE
?ELS5: FSET? OBJ,FEMALE \?ELS12
EQUAL? OBJ,P-HER-OBJECT \?CND1
FSET? HER,TOUCHBIT \?CND1
RFALSE
?ELS12: FSET? OBJ,PLURALBIT \?ELS19
EQUAL? OBJ,P-THEM-OBJECT \?CND1
FSET? THEM,TOUCHBIT \?CND1
RFALSE
?ELS19: EQUAL? OBJ,P-HIM-OBJECT \?CND1
FSET? HIM,TOUCHBIT /FALSE
?CND1: ZERO? CAP \?ELS34
CALL2 PRINTT,OBJ
RTRUE
?ELS34: CALL2 ONE?,CAP
ZERO? STACK /TRUE
CALL2 START-SENTENCE,OBJ
RTRUE
.FUNCT HE-SHE-IT,OBJ,CAP=0,VERB=0
CALL NO-PRONOUN?,OBJ,CAP
ZERO? STACK /?ELS3
JUMP ?CND1
?ELS3: FSET? OBJ,PERSONBIT /?ELS5
ZERO? CAP \?ELS8
PRINTI " it"
JUMP ?CND1
?ELS8: CALL2 ONE?,CAP
ZERO? STACK /?CND1
PRINTI "It"
JUMP ?CND1
?ELS5: EQUAL? OBJ,PLAYER \?ELS16
ZERO? CAP \?ELS19
PRINTI " you"
JUMP ?CND1
?ELS19: CALL2 ONE?,CAP
ZERO? STACK /?CND1
PRINTI "You"
JUMP ?CND1
?ELS16: FSET? OBJ,FEMALE \?ELS27
ZERO? CAP \?ELS30
PRINTI " she"
JUMP ?CND1
?ELS30: CALL2 ONE?,CAP
ZERO? STACK /?CND1
PRINTI "She"
JUMP ?CND1
?ELS27: FSET? OBJ,PLURALBIT \?ELS38
ZERO? CAP \?ELS41
PRINTI " they"
JUMP ?CND1
?ELS41: CALL2 ONE?,CAP
ZERO? STACK /?CND1
PRINTI "They"
JUMP ?CND1
?ELS38: ZERO? CAP \?ELS52
PRINTI " he"
JUMP ?CND1
?ELS52: CALL2 ONE?,CAP
ZERO? STACK /?CND1
PRINTI "He"
?CND1: ZERO? VERB /FALSE
PRINTC 32
EQUAL? OBJ,PLAYER /?THN70
FSET? OBJ,PLURALBIT \?ELS69
?THN70: EQUAL? VERB,STR?1 \?ELS76
PRINTI "are"
RTRUE
?ELS76: EQUAL? VERB,STR?2 \?ELS80
PRINTI "have"
RTRUE
?ELS80: PRINT VERB
RTRUE
?ELS69: PRINT VERB
EQUAL? VERB,STR?3,STR?4,STR?5 \?CND91
PRINTI "e"
?CND91: EQUAL? VERB,STR?1,STR?2 /FALSE
PRINTI "s"
RTRUE
.FUNCT ONE?,NUM
EQUAL? NUM,1,TRUE-VALUE /TRUE
RFALSE
.FUNCT HIM-HER-IT,OBJ,CAP=0,POSSESS?=0
CALL NO-PRONOUN?,OBJ,CAP
ZERO? STACK /?ELS3
ZERO? POSSESS? /TRUE
PRINTI "'s"
RTRUE
?ELS3: FSET? OBJ,PERSONBIT /?ELS11
ZERO? CAP \?ELS14
PRINTI " it"
JUMP ?CND12
?ELS14: PRINTI "It"
?CND12: ZERO? POSSESS? /TRUE
PRINTI "s"
RTRUE
?ELS11: EQUAL? OBJ,PLAYER \?ELS28
ZERO? CAP /?ELS31
PRINTI "You"
JUMP ?CND29
?ELS31: PRINTI " you"
?CND29: ZERO? POSSESS? /TRUE
PRINTI "r"
RTRUE
?ELS28: FSET? OBJ,PLURALBIT \?ELS46
ZERO? POSSESS? /?ELS49
ZERO? CAP \?ELS53
PRINTI " their"
RTRUE
?ELS53: PRINTI "Their"
RTRUE
?ELS49: ZERO? CAP \?ELS64
PRINTI " them"
RTRUE
?ELS64: PRINTI "Them"
RTRUE
?ELS46: FSET? OBJ,FEMALE \?ELS72
ZERO? CAP \?ELS75
PRINTI " her"
RTRUE
?ELS75: PRINTI "Her"
RTRUE
?ELS72: ZERO? POSSESS? /?ELS86
ZERO? CAP \?ELS90
PRINTI " his"
RTRUE
?ELS90: PRINTI "His"
RTRUE
?ELS86: ZERO? CAP \?ELS101
PRINTI " him"
RTRUE
?ELS101: PRINTI "Him"
RTRUE
.FUNCT PICK-ONE-NEW,FROB,THIS=0,L,CNT,RND,MSG,RFROB
GET FROB,0 >L
GET FROB,1 >CNT
DEC 'L
ADD FROB,2 >FROB
MUL CNT,2
ADD FROB,STACK >RFROB
ZERO? THIS /?ELS3
ZERO? CNT \?ELS3
SET 'RND,THIS
JUMP ?CND1
?ELS3: SUB L,CNT
RANDOM STACK >RND
?CND1: GET RFROB,RND >MSG
GET RFROB,1
PUT RFROB,RND,STACK
PUT RFROB,1,MSG
INC 'CNT
EQUAL? CNT,L \?CND8
SET 'CNT,0
?CND8: PUT FROB,0,CNT
RETURN MSG
.FUNCT PICK-ONE,FROB
GET FROB,0
RANDOM STACK
GET FROB,STACK
RSTACK
.ENDI