creature/examples/echo.go

45 lines
831 B
Go

//go:build ignore
// +build ignore
package main
import "os"
import cre "git.tebibyte.media/sashakoshka/creature"
func main() {
// this is a simple echo program. it will take in input indefinetly and
// repeat it. due to line buffering in the terminal however, it will
// only print output once you have pressed enter.
machine := cre.Machine[int]{}
machine.LoadProgram([]int{
cre.PUSH, 0,
cre.CAL,
cre.PUSH, 1,
cre.CAL,
cre.PUSH, 1,
cre.PUSH, 0,
cre.JMP,
})
machine.Register(0, read)
machine.Register(1, write)
err := machine.Execute(0)
if err != nil {
panic(err.Error())
}
}
func read(machine *cre.Machine[int]) (stop bool) {
ch := []byte{0}
os.Stdin.Read(ch)
machine.Push(int(ch[0]))
return
}
func write(machine *cre.Machine[int]) (stop bool) {
print(string(rune(machine.Pop())))
return
}