Moontalk server and client (provided by many parties)
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

70 řádky
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