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
-
- 256 constant CONNECTION_BUFFER_SIZE
- 0
- cell +field connection.number
- cell +field connection.admin
- cell +field connection.fd
- cell +field connection.connected
- cell +field connection.sendcount
- cell +field connection.circuitid
- cell +field connection.bufferlen
- CONNECTION_BUFFER_SIZE +field connection.buffer
- constant /CONNECTION
-
- 32 constant MAX_CONNECTIONS
-
- -1 variable! last-connection
- -1 variable! largest-index
- MAX_CONNECTIONS /CONNECTION * constant CONNECTIONS_SIZE
- create connections CONNECTIONS_SIZE allot
- connections CONNECTIONS_SIZE erase
-
- : (translate) ( index-u -- connection-addr )
- /CONNECTION * connections + ;
- : (untranslate) ( connection-addr -- index-u )
- connections - /CONNECTION / ;
- : (find-free) ( -- index-u flag )
- MAX_CONNECTIONS 0 DO
- I (translate) connection.connected @ invert IF
- I true UNLOOP EXIT
- THEN
- LOOP 0 false ;
- : connections.append ( connection-addr -- flag )
- (find-free) IF
- tuck (translate) /CONNECTION move
- dup last-connection !
- dup largest-index @ > IF
- largest-index !
- ELSE
- drop
- THEN
- true
- ELSE
- 2drop false
- THEN ;
- : connections.count ( -- count-u )
- largest-index @ 1+ ;
- : connections.at ( index-u -- connection-addr )
- (translate) ;
- : connections.last ( -- connection-addr )
- last-connection @ (translate) ;
- : connections.indexOf ( connection-addr -- index-u )
- (untranslate) ;
|