249 lines
6.1 KiB
Plaintext
249 lines
6.1 KiB
Plaintext
"REALTIME for
|
|
BORDER ZONE
|
|
(c) Copyright 1987 Infocom, Inc. All Rights Reserved."
|
|
|
|
<GLOBAL CHRONOGRAPH-TIME 0>
|
|
|
|
<GLOBAL CHRONOGRAPH-ON <>>
|
|
|
|
<ROUTINE CHRONOGRAPH-TELL ("AUX" N)
|
|
<SET N </ <MOD ,CHRONOGRAPH-TIME 3600> 60>>
|
|
<COND (<G? .N 59>
|
|
<SET N <- .N 60>>)>
|
|
<COND (<L? .N 10>
|
|
<TELL "0">)>
|
|
<TELL N .N ":">
|
|
<SET N <MOD ,CHRONOGRAPH-TIME 60>>
|
|
<COND (<L? .N 10>
|
|
<TELL "0">)>
|
|
<TELL N .N>>
|
|
|
|
<GLOBAL CLOCK-TIME 0>
|
|
|
|
<GLOBAL CLOCK-TBL <>>
|
|
|
|
<GLOBAL CLOCK-TBL-1 <TABLE I-TOWER 32767
|
|
I-FUSE 32767
|
|
I-FUSE 32767>>
|
|
<CONSTANT CLOCK-INTS-1 3>
|
|
<CONSTANT I-SLOW-CLOCK-OFF 3>
|
|
<CONSTANT I-RANDOM-QUEUE-OFF 5>
|
|
|
|
<GLOBAL CLOCK-TBL-2 <TABLE I-TOWER 32767
|
|
I-FUSE 32767
|
|
I-DOGS 68
|
|
I-SEARCHLIGHTS 1
|
|
I-CARS 180
|
|
I-30-SECONDS 30
|
|
I-200-SECONDS 200>>
|
|
<CONSTANT CLOCK-INTS-2 7>
|
|
|
|
<CONSTANT I-FUSE-OFF 3>
|
|
<CONSTANT I-RT-QUEUE-OFF 1>
|
|
|
|
<GLOBAL CLOCK-INTS <>>
|
|
|
|
<GLOBAL INT-FLAG T>
|
|
|
|
<GLOBAL CLOCK-TICKS 0>
|
|
|
|
<ROUTINE SLOW-CLOCK-QUEUE (FCN TIM "AUX" (OFF ,I-SLOW-CLOCK-OFF))
|
|
<PUT ,CLOCK-TBL <- .OFF 1> .FCN>
|
|
<PUT ,CLOCK-TBL .OFF .TIM>>
|
|
|
|
<ROUTINE SLOW-CLOCK-QUEUED? (FCN "AUX" (OFF ,I-SLOW-CLOCK-OFF))
|
|
<AND <EQUAL? <GET ,CLOCK-TBL <- .OFF 1>> .FCN>
|
|
<NOT <EQUAL? <GET ,CLOCK-TBL .OFF> 32767>>>>
|
|
|
|
<ROUTINE DE-QUEUE (OFF)
|
|
<PUT ,CLOCK-TBL .OFF 32767>>
|
|
|
|
<ROUTINE DE-RT-QUEUE ()
|
|
<DE-QUEUE ,I-RT-QUEUE-OFF>>
|
|
|
|
<ROUTINE DE-RANDOM-QUEUE ()
|
|
<DE-QUEUE ,I-RANDOM-QUEUE-OFF>>
|
|
|
|
<ROUTINE DE-SLOW-CLOCK-QUEUE ()
|
|
<DE-QUEUE ,I-SLOW-CLOCK-OFF>>
|
|
|
|
<ROUTINE RT-QUEUE (FCN TIM "OPTIONAL" (OFF ,I-RT-QUEUE-OFF))
|
|
<PUT ,CLOCK-TBL <- .OFF 1> .FCN>
|
|
<PUT ,CLOCK-TBL .OFF <+ <INT-TIME> .TIM>>>
|
|
|
|
<ROUTINE RANDOM-QUEUE (FCN TIM "AUX" (OFF ,I-RANDOM-QUEUE-OFF))
|
|
<PUT ,CLOCK-TBL <- .OFF 1> .FCN>
|
|
<PUT ,CLOCK-TBL .OFF <+ <INT-TIME> .TIM>>>
|
|
|
|
<ROUTINE RT-QUEUED? (FCN "AUX" (OFF ,I-RT-QUEUE-OFF))
|
|
<AND <EQUAL? <GET ,CLOCK-TBL <- .OFF 1>> .FCN>
|
|
<NOT <EQUAL? <GET ,CLOCK-TBL .OFF> 32767>>>>
|
|
|
|
<ROUTINE I-CLOCKER ("OPTIONAL" (TICKS 1) "AUX" SCENE CNT TBL TIM)
|
|
<SET SCENE ,SCENARIO>
|
|
<SET CNT ,CLOCK-INTS>
|
|
<SET TBL ,CLOCK-TBL>
|
|
<COND (<AND <EQUAL? .TICKS 1> <NOT ,INT-FLAG>>
|
|
;"If real-time interrupts are turned off"
|
|
<RFALSE>)>
|
|
<SETG CLOCK-TICKS .TICKS>
|
|
<REPEAT ()
|
|
<COND (<NOT <EQUAL? .SCENE ,SCENARIO>>
|
|
<COND (<NOT ,PRSA> <SETG READ-INTERRUPTED T>)>
|
|
<RETURN>)
|
|
(<L? <SET CNT <- .CNT 1>> 0>
|
|
<UPDATE-CLOCK .TICKS>
|
|
<RETURN>)
|
|
(<L? .TICKS <SET TIM <GET .TBL 1>>>
|
|
<COND (<NOT <L? <+ .TICKS <MOD ,CLOCK-TIME .TIM>>
|
|
.TIM>>
|
|
<APPLY <GET .TBL 0>>)>)
|
|
(T
|
|
<MULTAPPLY <GET .TBL 0> </ .TICKS .TIM>>)>
|
|
<SET TBL <REST .TBL 4>>>
|
|
;<RFALSE>
|
|
,READ-INTERRUPTED>
|
|
|
|
<ROUTINE UPDATE-CLOCK (TICKS "OPTIONAL" (FORCE? <>))
|
|
<SETG CLOCK-TIME <+ ,CLOCK-TIME .TICKS>>
|
|
;<COND (,CHRONOGRAPH-ON <UPDATE-CHRONOGRAPH .TICKS .FORCE?>)>
|
|
<UPDATE-CHRONOGRAPH .TICKS .FORCE?>
|
|
<SETG REAL-UPDATE <+ ,REAL-UPDATE .TICKS>>
|
|
<COND (<G? ,REAL-UPDATE 59>
|
|
<SETG REAL-UPDATE <MOD ,REAL-UPDATE 60>>
|
|
<UPDATE-TIME>)>>
|
|
|
|
<ROUTINE MULTAPPLY (FCN NUM)
|
|
;<COND (,DEBUG <TELL "[MULTAPPLY x " N .NUM "]" CR>)>
|
|
<REPEAT ()
|
|
<COND (<L? <SET NUM <- .NUM 1>> 0>
|
|
<RETURN>)
|
|
(T
|
|
<APPLY .FCN>)>>>
|
|
|
|
<GLOBAL REAL-UPDATE 0>
|
|
<GLOBAL START-HOUR 17>
|
|
<GLOBAL START-MINUTE 44>
|
|
|
|
<ROUTINE UPDATE-TIME ("AUX" MIN TMP)
|
|
<BUFOUT <>>
|
|
<SCREEN 1>
|
|
<CURSET 1 <- <GETB 0 33> 5>>
|
|
<HLIGHT ,H-INVERSE>
|
|
<SET MIN <+ </ ,CLOCK-TIME 60> ,START-MINUTE>>
|
|
<SET TMP <+ ,START-HOUR </ .MIN 60>>>
|
|
<COND (<G? .TMP 23>
|
|
<TELL "0">
|
|
<SET TMP <- .TMP 24>>)>
|
|
<TELL N .TMP ":">
|
|
<SET MIN <MOD .MIN 60>>
|
|
<COND (<L? .MIN 10> <TELL "0">)>
|
|
<TELL N .MIN>
|
|
<SCREEN-0>>
|
|
|
|
<ROUTINE UPDATE-CHRONOGRAPH (TICKS "OPTIONAL" (FORCE? <>) (SCR <>))
|
|
<COND (,CHRONOGRAPH-ON
|
|
<SCREEN-1>
|
|
<SET SCR T>
|
|
<COND (<G? <GETB 0 33> 58>
|
|
<CURSET 1 <- </ <GETB 0 33> 2> 3>>)
|
|
(T
|
|
<CURSET 1 27>)>
|
|
<SETG CHRONOGRAPH-TIME <+ ,CHRONOGRAPH-TIME .TICKS>>
|
|
<COND (<EQUAL? ,SCENARIO 2>
|
|
<CHRONOGRAPH-TELL>)
|
|
(T
|
|
<TELL " ">)>
|
|
<TELL " ">)>
|
|
<COND (,SL-WATCH
|
|
<COND (<NOT .SCR> <SCREEN-1> <SET SCR T>)>
|
|
<SL-WATCHER>)>
|
|
<COND (<AND ,G-WATCH
|
|
<OR .FORCE? <ZERO? <MOD ,CHRONOGRAPH-TIME 5>>>>
|
|
<COND (<NOT .SCR> <SCREEN-1> <SET SCR T>)>
|
|
<GUARD-WATCHER>)>
|
|
<COND (.SCR <SCREEN-0>)>
|
|
<RTRUE>>
|
|
|
|
<ROUTINE I-SEARCHLIGHTS () <TURN-SL> ;<TELL "[SL]" CR>>
|
|
|
|
<ROUTINE SL-WATCHER ()
|
|
<CURSET 2 8>
|
|
<TELL <SL-POS-STR-AB 1> " ">
|
|
<CURSET 2 <+ </ <GETB 0 33> 2> 2>>
|
|
<TELL <SL-POS-STR-AB 2> " ">
|
|
<CURSET 2 <- <GETB 0 33> 4>>
|
|
<TELL <SL-POS-STR-AB 3> " ">>
|
|
|
|
<GLOBAL G-WATCH <>>
|
|
|
|
<GLOBAL GUARD-MARGIN 0>
|
|
|
|
<ROUTINE GUARD-WATCHER ("OPTIONAL" (INIT? <>) "AUX" MT FACE? OFF SW)
|
|
<SET SW <GETB 0 33>>
|
|
<COND (,GUARD-MARGIN
|
|
<SET OFF ,GUARD-MARGIN>)
|
|
(T
|
|
<COND (<L? .SW 41>
|
|
<SET OFF 2>)
|
|
(T
|
|
<SET OFF <- </ <- .SW 36> 2> 4>>)>
|
|
<SETG GUARD-MARGIN .OFF>)>
|
|
<COND (.INIT?
|
|
<SCREEN-1>
|
|
<CURSET 2 .OFF>
|
|
<TELL "T">
|
|
<CURSET 2 <+ 18 .OFF>>
|
|
<TELL "T">
|
|
<CURSET 2 <+ 36 .OFF>>
|
|
<TELL "T">
|
|
<CURSET 3 <+ .OFF </ <GETP ,HERE ,P?GPOS> 5>>>
|
|
<TELL "*">)>
|
|
<SET FACE? <GUARDS-FACING-EACH-OTHER?>>
|
|
<SET MT <MOD ,CLOCK-TIME 180>>
|
|
<COND (<NOT <L? .MT 90>> <SET MT <- 180 .MT>>)>
|
|
<COND (,GUARD-CHASE
|
|
<SET FACE? T>
|
|
<SET MT <- ,GUARD-CHASE <- ,CLOCK-TIME ,GUARD-CHASE-TIME>>>
|
|
<SET MT <- 90 .MT>>)>
|
|
<COND (,G-WATCH
|
|
<CURSET 2 <+ .OFF <- ,G-WATCH 1>>>
|
|
<COND (<EQUAL? ,G-WATCH 1 19>
|
|
<TELL "T">)
|
|
(T <TELL " ">)>
|
|
<CURSET 2 <+ .OFF <- 37 ,G-WATCH>>>
|
|
<COND (<EQUAL? ,G-WATCH 1 19>
|
|
<TELL "T">)
|
|
(T <TELL " ">)>)>
|
|
<SETG G-WATCH <+ </ .MT 5> 1>>
|
|
<CURSET 2 <+ .OFF <- ,G-WATCH 1>>>
|
|
<COND (.FACE? <TELL ">">)
|
|
(T <TELL "<">)>
|
|
<CURSET 2 <+ .OFF <- 37 ,G-WATCH>>>
|
|
<COND (.FACE? <TELL "<">)
|
|
(T <TELL ">">)>
|
|
<COND (.INIT?
|
|
<SCREEN-0>)>
|
|
<RTRUE>>
|
|
|
|
<ROUTINE GUARDS-FACING-EACH-OTHER? ()
|
|
<ZERO? <MOD </ ,CLOCK-TIME 90> 2>>>
|
|
|
|
<ROUTINE GUARDS-FACING-PLAYER? ()
|
|
<OR <NOT <EQUAL? <GETP ,HERE ,P?GPOS> 90>>
|
|
<ZERO? <MOD </ ,CLOCK-TIME 90> 2>>>>
|
|
|
|
<ROUTINE SCREEN-1 ()
|
|
<BUFOUT <>>
|
|
<SCREEN 1>
|
|
<HLIGHT ,H-INVERSE>>
|
|
|
|
<ROUTINE SCREEN-0 ()
|
|
<HLIGHT ,H-NORMAL>
|
|
<SCREEN 0>
|
|
<BUFOUT T>>
|
|
|
|
<ROUTINE HLIGHTELL (STR "OPTIONAL" (HL ,H-ITALIC))
|
|
<HLIGHT .HL>
|
|
<TELL .STR>
|
|
<HLIGHT ,H-NORMAL>> |