Moontalk server and client (provided by many parties)
Você não pode selecionar mais de 25 tópicos
Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
|
- require util.4th
-
- 1024 constant MAX_EVENTS
-
- 0
- cell +field event.id
- cell +field event.data
- constant /EVENT
-
- 0 variable! current-event
- 0 variable! last-event
-
- MAX_EVENTS /EVENT * constant EVENTS_SIZE
- create events EVENTS_SIZE allot
-
- : (translate) ( index-u -- event-addr )
- ]] /EVENT * events + [[ ; IMMEDIATE
- : (wrap) ( index-u -- index-u )
- ]] MAX_EVENTS mod [[ ; IMMEDIATE
- : (read) ( addr -- data-u id-u )
- ]] dup event.data @ swap event.id @ [[ ; IMMEDIATE
- : (write) ( data-u id-u addr -- )
- ]] tuck event.id ! event.data ! [[ ; IMMEDIATE
- : events.has-item? ( -- flag )
- current-event @ last-event @ <> ;
- : events.enqueue ( data-u id-u -- )
- last-event @ dup 1+ dup >r current-event @ = abort" Queue is full."
- (translate) (write) r> (wrap) last-event ! ;
- : events.dequeue ( -- data-u id-u )
- events.has-item? invert abort" No events in queue."
- current-event @ dup (translate) (read)
- rot 1+ (wrap) current-event ! ;
- : events.clear ( -- )
- 0 current-event !
- 0 last-event !
- events EVENTS_SIZE erase ;
-
- events.clear
|