Moontalk server and client (provided by many parties)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

29 lines
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 @ ;