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.

70 lignes
1.8KB

  1. 80 constant COMMANDLINE_SIZE
  2. create commandline COMMANDLINE_SIZE allot
  3. variable cmdcursor
  4. variable cmdready
  5. : (cursor@) ( -- index-u ) cmdcursor @ ;
  6. : (translate) ( index-u -- addr )
  7. commandline + ;
  8. : (last-position) ( -- index-u )
  9. COMMANDLINE_SIZE 1- ;
  10. : (tail) ( index-u -- length-u )
  11. COMMANDLINE_SIZE swap - ;
  12. : (cursor-left) ( -- ) (cursor@) 1- 0 max cmdcursor ! ;
  13. : (cursor-right) ( -- ) (cursor@) 1+ COMMANDLINE_SIZE 1- min cmdcursor ! ;
  14. : (overwrite-char) ( c -- )
  15. commandline (cursor@) + c! ;
  16. : (append-char) ( c -- )
  17. (cursor@) (last-position) <> IF
  18. (cursor@) dup (translate) dup 1+ rot (tail) 1- move
  19. THEN (overwrite-char) ;
  20. : (backspace) ( -- )
  21. (cursor@) 0> IF
  22. (cursor@) (translate) dup 1- (cursor@) (tail) move
  23. bl (last-position) (translate) c!
  24. (cursor-left)
  25. THEN ;
  26. : commandline-handlekey ( ekey-n -- )
  27. ekey>char if ( c )
  28. CASE
  29. 10 OF true cmdready ! ENDOF \ newline
  30. 13 OF true cmdready ! ENDOF \ carriage return
  31. 127 OF (backspace) ENDOF \ DEL
  32. (append-char) (cursor-right) EXIT
  33. ENDCASE
  34. else ekey>fkey if ( key-id )
  35. case
  36. k-left of (cursor-left) endof
  37. k-right of (cursor-right) endof
  38. endcase
  39. else ( keyboard-event )
  40. drop \ just ignore an unknown keyboard event type
  41. then then ;
  42. : commandline-getline ( -- c-addr u )
  43. commandline COMMANDLINE_SIZE ;
  44. : (update-cursorpos) ( -- )
  45. s\" \033[" type
  46. (cursor@) 1+ s>d <# #s #> type
  47. s" G" type ;
  48. : (carriage-return) ( -- )
  49. 13 emit ;
  50. : commandline-redraw ( -- )
  51. (carriage-return)
  52. commandline-getline type
  53. (update-cursorpos) ;
  54. : commandline-reset ( -- )
  55. commandline COMMANDLINE_SIZE bl fill
  56. 0 cmdcursor !
  57. false cmdready ! ;
  58. : commandline-key? ( -- flag ) key? ;
  59. : commandline-key ( -- ekey ) ekey ;
  60. : commandline-ready? ( -- flag ) cmdready @ ;
  61. commandline-reset