271 lines
4.8 KiB
Plaintext
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
|