...
1 package tty
2
3 import (
4 "bufio"
5 "errors"
6 "os"
7 "syscall"
8 )
9
10 type TTY struct {
11 in *os.File
12 bin *bufio.Reader
13 out *os.File
14 }
15
16 func open(path string) (*TTY, error) {
17 tty := new(TTY)
18
19 in, err := os.Open("/dev/cons")
20 if err != nil {
21 return nil, err
22 }
23 tty.in = in
24 tty.bin = bufio.NewReader(in)
25
26 out, err := os.OpenFile("/dev/cons", syscall.O_WRONLY, 0)
27 if err != nil {
28 return nil, err
29 }
30 tty.out = out
31
32 return tty, nil
33 }
34
35 func (tty *TTY) buffered() bool {
36 return tty.bin.Buffered() > 0
37 }
38
39 func (tty *TTY) readRune() (rune, error) {
40 r, _, err := tty.bin.ReadRune()
41 return r, err
42 }
43
44 func (tty *TTY) close() (err error) {
45 if err2 := tty.in.Close(); err2 != nil {
46 err = err2
47 }
48 if err2 := tty.out.Close(); err2 != nil {
49 err = err2
50 }
51 return
52 }
53
54 func (tty *TTY) size() (int, int, error) {
55 return 80, 24, nil
56 }
57
58 func (tty *TTY) sizePixel() (int, int, int, int, error) {
59 x, y, _ := tty.size()
60 return x, y, -1, -1, errors.New("no implemented method for querying size in pixels on Plan 9")
61 }
62
63 func (tty *TTY) input() *os.File {
64 return tty.in
65 }
66
67 func (tty *TTY) output() *os.File {
68 return tty.out
69 }
70
View as plain text