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.

29 lignes
974B

  1. variable sendbuffer-len 0 sendbuffer-len !
  2. 4096 constant SENDBUFFER_SIZE
  3. create sendbuffer SENDBUFFER_SIZE allot
  4. \ Calling C here is just optimization.
  5. c-library sanitizelib
  6. \c void csanitize(char *buffer, int buffersize) {
  7. \c int lastIsNewline = buffer[buffersize-1] == '\n' ? 1 : 0;
  8. \c for(int i = 0; i<buffersize; i++) {
  9. \c if(buffer[i]<32 || buffer[i]>126) { buffer[i] = '?'; }
  10. \c }
  11. \c if(lastIsNewline) { buffer[buffersize-1] = '\n'; }
  12. \c return;
  13. \c }
  14. c-function csanitize csanitize a n -- void
  15. end-c-library
  16. : sendbuffer-reset ( -- ) 0 sendbuffer-len ! ;
  17. : (overflow?) ( n -- flag )
  18. sendbuffer-len @ + SENDBUFFER_SIZE u> ;
  19. : (append) ( str -- )
  20. dup -rot sendbuffer sendbuffer-len @ + swap move
  21. sendbuffer-len +! ;
  22. : sendbuffer-append ( str -- )
  23. dup (overflow?) abort" sendbuffer overflow" (append) ;
  24. : sendbuffer-sanitize ( -- )
  25. sendbuffer sendbuffer-len @ csanitize ;
  26. : sendbuffer@ ( -- str ) sendbuffer sendbuffer-len @ ;