tty_plan9.go 915 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package tty
  2. import (
  3. "bufio"
  4. "os"
  5. "syscall"
  6. )
  7. type TTY struct {
  8. in *os.File
  9. bin *bufio.Reader
  10. out *os.File
  11. }
  12. func open() (*TTY, error) {
  13. tty := new(TTY)
  14. in, err := os.Open("/dev/cons")
  15. if err != nil {
  16. return nil, err
  17. }
  18. tty.in = in
  19. tty.bin = bufio.NewReader(in)
  20. out, err := os.OpenFile("/dev/cons", syscall.O_WRONLY, 0)
  21. if err != nil {
  22. return nil, err
  23. }
  24. tty.out = out
  25. return tty, nil
  26. }
  27. func (tty *TTY) buffered() bool {
  28. return tty.bin.Buffered() > 0
  29. }
  30. func (tty *TTY) readRune() (rune, error) {
  31. r, _, err := tty.bin.ReadRune()
  32. return r, err
  33. }
  34. func (tty *TTY) close() (err error) {
  35. if err2 := tty.in.Close(); err2 != nil {
  36. err = err2
  37. }
  38. if err2 := tty.out.Close(); err2 != nil {
  39. err = err2
  40. }
  41. return
  42. }
  43. func (tty *TTY) size() (int, int, error) {
  44. return 80, 24, nil
  45. }
  46. func (tty *TTY) input() *os.File {
  47. return tty.in
  48. }
  49. func (tty *TTY) output() *os.File {
  50. return tty.out
  51. }