checkpoint/clock.zap

66 lines
1.1 KiB
Plaintext

.FUNCT QUEUE,RTN,TICK,CINT
CALL2 INT,RTN >CINT
PUT CINT,C-TICK,TICK
RETURN CINT
.FUNCT INT,RTN,DEMON=0,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 QUEUED?,RTN,C
CALL2 INT,RTN >C
GET C,C-ENABLED?
ZERO? STACK /FALSE
GET C,C-TICK >C
ZERO? C /FALSE
RETURN C
.FUNCT CLOCKER,C,E,TICK,FLG=0,VAL
ZERO? CLOCK-WAIT /?CND1
SET 'CLOCK-WAIT,FALSE-VALUE
RFALSE
?CND1: INC 'PRESENT-TIME
IGRTR? 'MOVES,59 \?CND5
SET 'MOVES,0
IGRTR? 'SCORE,23 \?CND5
SET 'SCORE,0
?CND5: PUSH C-INTS
ADD C-TABLE,STACK >C
ADD C-TABLE,C-TABLELEN >E
?PRG16: EQUAL? C,E \?ELS20
RETURN FLG
?ELS20: GET C,C-ENABLED?
ZERO? STACK /?CND18
GET C,C-TICK >TICK
ZERO? TICK \?ELS25
JUMP ?CND18
?ELS25: SUB TICK,1
PUT C,C-TICK,STACK
GRTR? TICK,1 /?CND23
GET C,C-RTN
CALL STACK >VAL
ZERO? VAL /?CND23
ZERO? FLG /?THN36
EQUAL? VAL,M-FATAL \?CND18
?THN36: SET 'FLG,VAL
?CND23:
?CND18: ADD C,C-INTLEN >C
JUMP ?PRG16
.ENDI