cutthroats/clock.zap

99 lines
1.8 KiB
Plaintext

.FUNCT QUEUE,RTN,TICK,CINT
CALL INT,RTN >CINT
PUT CINT,C-TICK,TICK
RETURN CINT
.FUNCT INT,RTN,E,C,INT
ADD C-TABLE,C-TABLELEN >E
ADD C-TABLE,C-INTS >C
?PRG1: EQUAL? C,E \?ELS5
SUB C-INTS,C-INTLEN >C-INTS
ADD C-TABLE,C-INTS >INT
PUT INT,C-RTN,RTN
RETURN INT
?ELS5: GET C,C-RTN
EQUAL? STACK,RTN \?CND3
RETURN C
?CND3: ADD C,C-INTLEN >C
JUMP ?PRG1
.FUNCT ENABLED?,RTN,C,E
ADD C-TABLE,C-TABLELEN >E
ADD C-TABLE,C-INTS >C
?PRG1: EQUAL? C,E /FALSE
GET C,C-RTN
EQUAL? STACK,RTN \?CND3
GET C,C-ENABLED?
ZERO? STACK \TRUE
RFALSE
?CND3: ADD C,C-INTLEN >C
JUMP ?PRG1
.FUNCT QUEUED?,RTN,C,E
ADD C-TABLE,C-TABLELEN >E
ADD C-TABLE,C-INTS >C
?PRG1: EQUAL? C,E /FALSE
GET C,C-RTN
EQUAL? STACK,RTN \?CND3
GET C,C-ENABLED?
ZERO? STACK /FALSE
GET C,C-TICK
ZERO? STACK \TRUE
RFALSE
?CND3: ADD C,C-INTLEN >C
JUMP ?PRG1
.FUNCT CLOCKER,C,E,TICK,FLG=0,VAL
ZERO? CLOCK-WAIT /?CND1
SET 'CLOCK-WAIT,FALSE-VALUE
RFALSE
?CND1: INC 'PRESENT-TIME
GRTR? PRESENT-TIME,1439 \?CND5
SUB PRESENT-TIME,1440 >PRESENT-TIME
?CND5: ZERO? WATCH-WOUND /?CND8
IGRTR? 'WATCH-MOVES,59 \?CND8
SUB WATCH-MOVES,60 >WATCH-MOVES
IGRTR? 'WATCH-SCORE,11 \?CND12
SET 'WATCH-SCORE,0
?CND12:
?CND8: CALL WATCH-UPDATE
ADD C-TABLE,C-INTS >C
ADD C-TABLE,C-TABLELEN >E
?PRG18: EQUAL? C,E \?ELS22
RETURN FLG
?ELS22: GET C,C-ENABLED?
ZERO? STACK /?CND20
GET C,C-TICK >TICK
ZERO? TICK \?ELS27
JUMP ?CND20
?ELS27: SUB TICK,1
PUT C,C-TICK,STACK
GRTR? TICK,1 /?CND25
GET C,C-RTN
CALL STACK >VAL
ZERO? VAL /?CND25
ZERO? FLG /?THN38
EQUAL? VAL,M-FATAL \?CND20
?THN38: SET 'FLG,VAL
?CND25:
?CND20: ADD C,C-INTLEN >C
JUMP ?PRG18
.FUNCT WATCH-UPDATE
IN? WATCH,PLAYER \?ELS5
SET 'MOVES,WATCH-MOVES
SET 'SCORE,WATCH-SCORE
RETURN SCORE
?ELS5: SET 'MOVES,99
SET 'SCORE,111
RETURN SCORE
.ENDI