From 198efceb1f14c9822bf87ede6961d0f94a4760db Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Thu, 23 Sep 2021 16:14:37 +0200 Subject: Implemented commands until helloworld works \o/ --- pkg/pointer/intput-output.go | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 pkg/pointer/intput-output.go (limited to 'pkg/pointer/intput-output.go') diff --git a/pkg/pointer/intput-output.go b/pkg/pointer/intput-output.go new file mode 100644 index 0000000..cc7533e --- /dev/null +++ b/pkg/pointer/intput-output.go @@ -0,0 +1,61 @@ +package pointer + +import ( + "fmt" + "log" + "os" + + "github.com/pkg/term" +) + +var defaultInputLastChar *int = nil + +func DefaultCharacterInput() int { + if defaultInputLastChar != nil { + c := *defaultInputLastChar + defaultInputLastChar = nil + return c + } + t, err := term.Open("/dev/stdin") + if err != nil { + log.Fatalf("Could not open stdin: %+v", err) + } + defer t.Close() + defer t.Restore() + term.RawMode(t) + b := make([]byte, 1) + i, err := os.Stdin.Read(b) + if err != nil { + log.Fatalf("Error in DefaultCharacterInput { b: %c, i: %d, err: %+v }", b[0], i, err) + } + return int(b[0]) +} + +func DefaultDecimalInput() int { + var v int + for { + c := DefaultCharacterInput() + if c >= '0' && c <= '9' { + v = c - '0' + break + } + } + for { + c := DefaultCharacterInput() + if c >= '0' && c <= '9' { + v = v*10 + c - '0' + } else { + defaultInputLastChar = &c + break + } + } + return v +} + +func DefaultCharacterOutput(c int) { + fmt.Printf("%c", c) +} + +func DefaultDecimalOutput(c int) { + fmt.Printf("%d ", c) +} -- cgit v1.2.3