Moontalk server and client (provided by many parties)
Vous ne pouvez pas sélectionner plus de 25 sujets
Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
|
- 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) ;
|