Added some helpful comments to the creature command
This commit is contained in:
parent
dcd8c56c0d
commit
c7d948cdcd
BIN
cmd/creature/examples/echobin
Normal file
BIN
cmd/creature/examples/echobin
Normal file
Binary file not shown.
@ -26,10 +26,10 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
machine := cre.Machine[int]{}
|
machine := cre.Machine[int]{}
|
||||||
|
|
||||||
machine.LoadProgram(program)
|
machine.LoadProgram(program)
|
||||||
machine.LoadMemory(block)
|
machine.LoadMemory(block)
|
||||||
|
|
||||||
machine.Register(0, read)
|
machine.Register(0, read)
|
||||||
machine.Register(1, write)
|
machine.Register(1, write)
|
||||||
|
|
||||||
@ -40,6 +40,9 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// read implements a basic input function for the creature. It waits until it
|
||||||
|
// has recieved one byte of user input, and then pushes that byte onto the
|
||||||
|
// stack.
|
||||||
func read(machine *cre.Machine[int]) (stop bool) {
|
func read(machine *cre.Machine[int]) (stop bool) {
|
||||||
ch := []byte{0}
|
ch := []byte{0}
|
||||||
os.Stdin.Read(ch)
|
os.Stdin.Read(ch)
|
||||||
@ -47,16 +50,23 @@ func read(machine *cre.Machine[int]) (stop bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// write implements a basic output function for the creature. It pops one byte
|
||||||
|
// off of the stack, and writes it to stdout.
|
||||||
func write(machine *cre.Machine[int]) (stop bool) {
|
func write(machine *cre.Machine[int]) (stop bool) {
|
||||||
print(string(rune(machine.Pop())))
|
print(string(rune(machine.Pop())))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func logLine (message ...any) {
|
// logLine prints a message to stderr.
|
||||||
|
func logLine(message ...any) {
|
||||||
fmt.Fprintln(os.Stderr, message...)
|
fmt.Fprintln(os.Stderr, message...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func readFile (reader io.Reader) (program []int, block []int, err error) {
|
// readFile reads data from an io.Reader into a program slice and a block slice.
|
||||||
|
// Data in the file is represented by signed hexidecimal numbers, separated by
|
||||||
|
// whitespace. Three dashes (---) divide the block data from the program data.
|
||||||
|
// See examples/echo.
|
||||||
|
func readFile(reader io.Reader) (program []int, block []int, err error) {
|
||||||
scanner := bufio.NewScanner(reader)
|
scanner := bufio.NewScanner(reader)
|
||||||
scanner.Split(bufio.ScanWords)
|
scanner.Split(bufio.ScanWords)
|
||||||
|
|
||||||
@ -67,7 +77,7 @@ func readFile (reader io.Reader) (program []int, block []int, err error) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
if blockLen >= len(block) {
|
if blockLen >= len(block) {
|
||||||
newSlice := make([]int, len(block) * 2)
|
newSlice := make([]int, len(block)*2)
|
||||||
copy(newSlice, block)
|
copy(newSlice, block)
|
||||||
block = newSlice
|
block = newSlice
|
||||||
}
|
}
|
||||||
@ -77,7 +87,7 @@ func readFile (reader io.Reader) (program []int, block []int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
block[blockLen] = int(number)
|
block[blockLen] = int(number)
|
||||||
blockLen ++
|
blockLen++
|
||||||
}
|
}
|
||||||
block = block[:blockLen]
|
block = block[:blockLen]
|
||||||
|
|
||||||
@ -85,7 +95,7 @@ func readFile (reader io.Reader) (program []int, block []int, err error) {
|
|||||||
program = make([]int, 8)
|
program = make([]int, 8)
|
||||||
for scanner.Scan() {
|
for scanner.Scan() {
|
||||||
if programLen >= len(program) {
|
if programLen >= len(program) {
|
||||||
newSlice := make([]int, len(program) * 2)
|
newSlice := make([]int, len(program)*2)
|
||||||
copy(newSlice, program)
|
copy(newSlice, program)
|
||||||
program = newSlice
|
program = newSlice
|
||||||
}
|
}
|
||||||
@ -95,10 +105,8 @@ func readFile (reader io.Reader) (program []int, block []int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
program[programLen] = int(number)
|
program[programLen] = int(number)
|
||||||
programLen ++
|
programLen++
|
||||||
}
|
}
|
||||||
program = program[:programLen]
|
program = program[:programLen]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user