restaurant/misc.zil

372 lines
10 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

"MISC for MILLIWAYS
Copyright (c) 1988 Infocom, Inc. All rights reserved."
<GLOBAL SCREENWIDTH:NUMBER 0>
<ROUTINE GO ()
<SETG SCREENWIDTH <LOWCORE SCRH>>
<COND (<L? ,SCREENWIDTH 64>
<TELL "[The screen is too narrow.]" CR>
<QUIT>)>
<CLEAR -1>
<INIT-STATUS-LINE>
<V-VERSION>
<INTRO>
<MAIN-LOOP>
<AGAIN>>
<ROUTINE INTRO ()
;<TELL "[LEN=" N <LOWCORE SCRV> " WID=" N ,SCREENWIDTH "]">
<CRLF>>
<ROUTINE PRINT-THE (OBJ) ;"the"
<COND (<AND <EQUAL? .OBJ ,TURN> <L? 1 ,P-NUMBER>>
<TELL !\ N ,P-NUMBER " minutes">)
(<EQUAL? .OBJ ,WINDOW>
<TELL " the window">)
;(<AND <EQUAL? .OBJ ,P-IT-OBJECT>
<FSET? ,IT ,TOUCHBIT>>
<TELL " it">
<RTRUE>)
(T
<THE? .OBJ>
<TELL !\ D .OBJ>)>>
<ROUTINE THE? (OBJ)
<COND (<NOT <FSET? .OBJ ,NARTICLEBIT>>
<COND (<OR ;<NOT <FSET? .OBJ ,PERSONBIT>>
<IN? .OBJ ,ROOMS>
<FSET? .OBJ ,SEENBIT>>
<TELL " the">)
(<FSET? .OBJ ,VOWELBIT>
<TELL " an">)
(T <TELL " a">)>)>
<COND (T ;<FSET? .OBJ ,PERSONBIT>
<FSET .OBJ ,SEENBIT>)>>
<ROUTINE START-SENTENCE (OBJ) ;"The"
<THIS-IS-IT .OBJ>
<COND (<EQUAL? .OBJ ,PLAYER> <TELL "You"> <RTRUE>)
(<EQUAL? .OBJ ,HANDS> <TELL "Your hand"> <RTRUE>)
(<EQUAL? .OBJ ,HEAD> <TELL "Your head"> <RTRUE>)
(<EQUAL? .OBJ ,EYES> <TELL "Your eyes"> <RTRUE>)
(<EQUAL? .OBJ ,TEETH> <TELL "Your teeth"> <RTRUE>)
(<EQUAL? .OBJ ,EARS> <TELL "Your ears"> <RTRUE>)>
<COND (<NOT <FSET? .OBJ ,NARTICLEBIT>>
<COND (<OR ;<NOT <FSET? .OBJ ,PERSONBIT>>
<FSET? .OBJ ,SEENBIT>>
<TELL "The ">)
(<FSET? .OBJ ,VOWELBIT>
<TELL "An ">)
(T <TELL "A ">)>)>
<COND (T ;<FSET? .OBJ ,PERSONBIT>
<FSET .OBJ ,SEENBIT>)>
<TELL D .OBJ>>
<ROUTINE PRINTA (O) ;"a"
<COND (<OR ;<FSET? .O ,PERSONBIT> <FSET? .O ,NARTICLEBIT>> T)
(<FSET? .O ,VOWELBIT> <TELL "an ">)
(T <TELL "a ">)>
<TELL D .O>>
<GLOBAL QCONTEXT:OBJECT FORD>
<GLOBAL LIT:OBJECT RAMP>
;<GLOBAL P-IT-WORDS <TABLE <VOC DRESSING ADJ> <VOC GOWN NOUN>>>
<GLOBAL P-IT-OBJECT:OBJECT GOWN>
<GLOBAL P-HER-OBJECT:OBJECT TRILLIAN>
<GLOBAL P-HIM-OBJECT:OBJECT FORD>
;<GLOBAL P-ONE-NOUN <VOC "FROB">>
<ROUTINE THIS-IS-IT (OBJ)
<COND (<EQUAL? .OBJ <> ,NOT-HERE-OBJECT ,PLAYER>
<RTRUE>)
(<EQUAL? .OBJ ,INTDIR ,GLOBAL-HERE ,ROOMS>
<RTRUE>)
(<AND <DIR-VERB?> <==? .OBJ ,PRSO>>
<RTRUE>)>
<COND (<NOT <FSET? .OBJ ,PERSONBIT>>
;<PUT ,P-IT-WORDS 0 <GET ,P-ADJW ,NOW-PRSI>>
;<PUT ,P-IT-WORDS 1 <GET ,P-NAMW ,NOW-PRSI>>
<FSET ,IT ,TOUCHBIT> ;"to cause pronoun 'it' in output"
<SETG P-IT-OBJECT .OBJ>)
(<FSET? .OBJ ,FEMALEBIT>
<FSET ,HER ,TOUCHBIT>
<SETG P-HER-OBJECT .OBJ>)
(<FSET? .OBJ ,PLURALBIT>
<FSET ,THEM ,TOUCHBIT>
<SETG P-THEM-OBJECT .OBJ>)
(T
<FSET ,HIM ,TOUCHBIT>
<SETG P-HIM-OBJECT .OBJ>)>
<RTRUE>>
<ROUTINE NO-PRONOUN? (OBJ "OPTIONAL" (CAP 0))
<COND (<EQUAL? .OBJ ,PLAYER>
<RFALSE>)
(<NOT <FSET? .OBJ ,PERSONBIT>>
<COND (<AND <EQUAL? .OBJ ,P-IT-OBJECT>
<FSET? ,IT ,TOUCHBIT>>
<RFALSE>)>)
(<FSET? .OBJ ,FEMALEBIT>
<COND (<AND <EQUAL? .OBJ ,P-HER-OBJECT>
<FSET? ,HER ,TOUCHBIT>>
<RFALSE>)>)
(<FSET? .OBJ ,PLURALBIT>
<COND (<AND <EQUAL? .OBJ ,P-THEM-OBJECT>
<FSET? ,THEM ,TOUCHBIT>>
<RFALSE>)>)
(T
<COND (<AND <EQUAL? .OBJ ,P-HIM-OBJECT>
<FSET? ,HIM ,TOUCHBIT>>
<RFALSE>)>)>
<COND (<ZERO? .CAP> <TELL the .OBJ>)
(<ONE? .CAP> <TELL The .OBJ>)>
<THIS-IS-IT .OBJ>
<RTRUE>>
<ROUTINE HE-SHE-IT (OBJ "OPTIONAL" (CAP 0) (VERB <>)) ;"He/he/+verb"
<COND (<NO-PRONOUN? .OBJ .CAP>
T)
(<NOT <FSET? .OBJ ,PERSONBIT>>
<COND (<ZERO? .CAP> <TELL " it">)
(<ONE? .CAP> <TELL "It">)>)
(<==? .OBJ ,PLAYER>
<COND (<ZERO? .CAP> <TELL " you">)
(<ONE? .CAP> <TELL "You">)>)
(<FSET? .OBJ ,FEMALEBIT>
<COND (<ZERO? .CAP> <TELL " she">)
(<ONE? .CAP> <TELL "She">)>)
;(<FSET? .OBJ ,PLURALBIT>
<COND (<ZERO? .CAP> <TELL " they">)
(<ONE? .CAP> <TELL "They">)>)
(T
<COND (<ZERO? .CAP> <TELL " he">)
(<ONE? .CAP> <TELL "He">)>)>
<COND (<NOT <ZERO? .VERB>>
<PRINTC 32>
<COND (<OR <EQUAL? .OBJ ,PLAYER>
;<FSET? .OBJ ,PLURALBIT>>
<COND (<=? .VERB "is"> <TELL "are">)
(<=? .VERB "has"><TELL "have">)
(<=? .VERB "tri"><TELL "try">)
(<=? .VERB "empti"><TELL "empty">)
(T <TELL .VERB>)>)
(T
<TELL .VERB>
<COND (<OR <EQUAL? .VERB "do" "kiss" "push">
<EQUAL? .VERB "tri" "empti">>
<TELL !\e>)>
<COND (<NOT <EQUAL? .VERB "is" "has">>
<TELL !\s>)>)>)>>
<ROUTINE HIM-HER-IT (OBJ "OPTIONAL" (CAP 0) (POSSESS? <>)) ;"His/his/him"
<COND (<NO-PRONOUN? .OBJ .CAP>
<COND (<NOT <ZERO? .POSSESS?>> <TELL "'s">)>)
(<NOT <FSET? .OBJ ,PERSONBIT>>
<COND (<ZERO? .CAP> <TELL " it">) (T <TELL "It">)>
<COND (<NOT <ZERO? .POSSESS?>> <TELL !\s>)>)
(<==? .OBJ ,PLAYER>
<COND (<ZERO? .CAP> <TELL " you">) (T <TELL "You">)>
<COND (<NOT <ZERO? .POSSESS?>> <TELL !\r>)>)
(<FSET? .OBJ ,PLURALBIT>
<COND (<NOT <ZERO? .POSSESS?>>
<COND (<ZERO? .CAP> <TELL " their">)
(T <TELL "Their">)>)
(T
<COND (<ZERO? .CAP> <TELL " them">)
(T <TELL "Them">)>)>)
(<FSET? .OBJ ,FEMALEBIT>
<COND (<ZERO? .CAP> <TELL " her">) (T <TELL "Her">)>)
(T
<COND (<NOT <ZERO? .POSSESS?>>
<COND (<ZERO? .CAP> <TELL " his">)
(T <TELL "His">)>)
(T
<COND (<ZERO? .CAP> <TELL " him">)
(T <TELL "Him">)>)>)>
<RTRUE>>
<OBJECT HER
(LOC GLOBAL-OBJECTS)
(SYNONYM ;SHE HER MADAM)
(DESC "her")
(FLAGS NARTICLEBIT)>
<OBJECT HIM
(LOC GLOBAL-OBJECTS)
(SYNONYM ;HE HIM SIR)
(DESC "him")
(FLAGS NARTICLEBIT)>
<OBJECT THEM
(LOC GLOBAL-OBJECTS)
(SYNONYM THEM)
(DESC "them")
(FLAGS NARTICLEBIT)>
<CONSTANT P-PROMPT-START 4>
<GLOBAL P-PROMPT:NUMBER 4>
<ROUTINE I-PROMPT ("OPTIONAL" (GARG <>))
<COND (<EQUAL? .GARG ,G-DEBUG> <RFALSE>)>
<SETG P-PROMPT <- ,P-PROMPT 1>>
<RFALSE>>
<ROUTINE DONT-F ()
<COND (<VERB? PANIC>
<COND (<1? <RANDOM 2>>
<TELL
"Very clever. It looks as if there's a lot you should be panicking about." CR>)
(T
<TELL
"Why not? Your position appears quite hopeless." CR>)>)
;(<VERB? LOOK>
<SETG DONT-FLAG <>>
<PERFORM ,V?CLOSE ,EYES>
<RTRUE>)
(<VERB? WAIT-FOR WAIT-UNTIL>
<TELL "Time doesn't pass..." CR>)
(<VERB? TAKE>
<TELL "Not taken." CR>)
;(<AND <VERB? LISTEN>
<VISIBLE? ,POETRY>>
<SETG DONT-FLAG <>>
<PERFORM ,V?LISTEN ,POETRY>
<RTRUE>)
(T
<TELL "Not done." CR>)>>
<ROUTINE NOT-FOUND (OBJ "AUX" (WT <>))
<COND (<VERB? WALK-TO>
<SET WT T>)>
<COND (<ZERO? .WT>
<SETG CLOCK-WAIT T>
<TELL "(Y">)
(T <TELL "But y">)>
<TELL "ou haven't found" him .OBJ " yet!">
<COND (<ZERO? .WT>
<TELL !\)>)>
<CRLF>
<RTRUE>>
<ROUTINE VERB-PRINT ("OPTIONAL" (GERUND <>) "AUX" TMP)
<SET TMP <PARSE-VERB ,PARSE-RESULT>>
<COND (<==? .TMP 0>
<COND (<ZERO? .GERUND> <TELL "tell"> <RTRUE>)
(T <TELL "walk">)>)
(<OR <T? .GERUND> ;<0? <GETB ,P-VTBL 2>>>
<SET TMP <GET .TMP 0>>
<COND (<==? .TMP ,W?L> <PRINTB ,W?LOOK>)
(<==? .TMP ,W?X> <PRINTB ,W?EXAMINE>)
(<==? .TMP ,W?Z> <PRINTB ,W?WAIT>)
(<T? .GERUND>
<COND (<==? .TMP ,W?BATHE> <TELL "bath">)
(<==? .TMP ,W?DIG> <TELL "digg">)
(<==? .TMP ,W?GET> <TELL "gett">)
(T <PRINTB .TMP>)>)
(T <PRINTB .TMP>)>)
(T
<WORD-PRINT .TMP>
;<PUTB ,P-VTBL 2 0>)>
<COND (<T? .GERUND> <TELL "ing?">)>>
<ROUTINE NOT-IT (WHO)
<COND (<EQUAL? .WHO ,P-HER-OBJECT>
<FCLEAR ,HER ,TOUCHBIT>)
(<EQUAL? .WHO ,P-HIM-OBJECT>
<FCLEAR ,HIM ,TOUCHBIT>)
(<EQUAL? .WHO ,P-THEM-OBJECT>
<FCLEAR ,THEM ,TOUCHBIT>)
(<EQUAL? .WHO ,P-IT-OBJECT>
<FCLEAR ,IT ,TOUCHBIT>)>>
<REPLACE-DEFINITION CAPITAL-NOUN?
<ROUTINE CAPITAL-NOUN? (WRD)
<OR <TITLE-NOUN? .WRD>
<EQUAL? .WRD ,W?FORD ,W?ZAPHOD ,W?BEEBLEBROX>
<EQUAL? .WRD ,W?TRILLIAN ,W?TRICIA ,W?MCMILLAN>
<EQUAL? .WRD ,W?MARV ,W?MARVIN ,W?PREFECT>>>>
<ROUTINE TITLE-NOUN? (WRD)
<OR <EQUAL? .WRD ,W?MR ,W?MS>
<EQUAL? .WRD ,W?MISTER ,W?MISS ,W?SIR>
;<EQUAL? .WRD ,W?MRS ,W?DR ,W?DOCTOR>>>
"CLOCK for MILLIWAYS
Copyright (C) 1988 Infocom, Inc. All rights reserved."
"List of queued routines:
"
<GLOBAL SCORE:NUMBER 0>
<GLOBAL MOVES:NUMBER 0>
<GLOBAL HERE:OBJECT RAMP>
<GLOBAL OHERE:OBJECT <>>
<GLOBAL CLOCKER-RUNNING:NUMBER 0>
<CONSTANT C-TABLELEN 138> ;"and one for good measure"
<GLOBAL C-TABLE
<TABLE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 I-REPLY
1 1 I-PROMPT ;"last to run">>
<GLOBAL C-INTS:NUMBER <- 138 <* 1 6>>>
<CONSTANT C-INTLEN 6>
<CONSTANT C-ENABLED? 0>
<CONSTANT C-TICK 1>
<CONSTANT C-RTN 2>
<ROUTINE QUEUE (RTN TICK "AUX" CINT)
;#DECL ((RTN) ATOM (TICK) FIX (CINT) <PRIMTYPE VECTOR>)
<PUT <SET CINT <INT .RTN>> ,C-TICK .TICK>
<PUT .CINT ,C-ENABLED? 1>
.CINT>
<ROUTINE INT (RTN "OPTIONAL" (DEMON <>) E C INT)
;#DECL ((RTN) ATOM (DEMON) <OR ATOM FALSE> (E C INT) <PRIMTYPE
VECTOR>)
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<SET C <REST ,C-TABLE ,C-INTS>>
<REPEAT ()
<COND (<==? .C .E>
<SETG C-INTS <- ,C-INTS ,C-INTLEN>>
;<AND .DEMON <SETG C-DEMONS <- ,C-DEMONS ,C-INTLEN>>>
<SET INT <REST ,C-TABLE ,C-INTS>>
<PUT .INT ,C-RTN .RTN>
<RETURN .INT>)
(<EQUAL? <GET .C ,C-RTN> .RTN> <RETURN .C>)>
<SET C <REST .C ,C-INTLEN>>>>
;<ROUTINE ENABLED? (RTN)
<NOT <ZERO? <GET <INT .RTN> ,C-ENABLED?>>>>
;<ROUTINE QUEUED? (RTN "AUX" C)
<SET C <INT .RTN>>
<COND (<ZERO? <GET .C ,C-ENABLED?>> <RFALSE>)
(T <GET .C ,C-TICK>)>>
<GLOBAL CLOCK-WAIT:FLAG <>>
<ROUTINE CLOCKER ("AUX" C E TICK (FLG <>) VAL)
;#DECL ((C E) <PRIMTYPE VECTOR> (TICK) FIX ;(FLG) ;<OR FALSE ATOM>)
<COND (,CLOCK-WAIT <SETG CLOCK-WAIT <>> <RFALSE>)>
<SETG MOVES <+ ,MOVES 1>>
<SET C <REST ,C-TABLE ,C-INTS>>
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<REPEAT ()
<COND (<==? .C .E>
<RETURN .FLG>)
(<NOT <ZERO? <GET .C ,C-ENABLED?>>>
<SET TICK <GET .C ,C-TICK>>
<COND (<NOT <ZERO? .TICK>>
<PUT .C ,C-TICK <- .TICK 1>>
<COND (<AND <NOT <G? .TICK 1>>
<SET VAL <APPLY <GET .C ,C-RTN>>>>
<COND (<OR <ZERO? .FLG>
<==? .VAL ,M-FATAL>>
<SET FLG .VAL>)>)>)>)>
<SET C <REST .C ,C-INTLEN>>>>