aboutsummaryrefslogtreecommitdiff
path: root/pkg/field/field.go
diff options
context:
space:
mode:
authorJulien Dessaux2021-10-02 00:59:38 +0200
committerJulien Dessaux2021-10-02 00:59:38 +0200
commit483d5c6a46950334610b369ee3ec253eea132aa0 (patch)
tree719995e60449da4c959026ff1d1f3226f94f4811 /pkg/field/field.go
parentFixed some more resizing bugs in certain situations not covered by mycology (diff)
downloadgofunge98-483d5c6a46950334610b369ee3ec253eea132aa0.tar.gz
gofunge98-483d5c6a46950334610b369ee3ec253eea132aa0.tar.bz2
gofunge98-483d5c6a46950334610b369ee3ec253eea132aa0.zip
Fixed a file loading bug not covered by the mycology test suite
Diffstat (limited to 'pkg/field/field.go')
-rw-r--r--pkg/field/field.go28
1 files changed, 20 insertions, 8 deletions
diff --git a/pkg/field/field.go b/pkg/field/field.go
index a31f4da..72890fe 100644
--- a/pkg/field/field.go
+++ b/pkg/field/field.go
@@ -36,13 +36,19 @@ func Load(fd io.Reader) (*Field, error) {
data := make([]byte, 4096)
if n, errRead := fd.Read(data); errRead != nil {
if errRead == io.EOF {
- if f.ly == 0 && l.l == 0 {
- return nil, newDecodeError("No instruction on the first line of the file produces an unusable program in Befunge98")
+ if f.ly == 0 {
+ if l.l == 0 {
+ return nil, newDecodeError("No instruction on the first line of the file produces an unusable program in Befunge98")
+ }
+ f.x = l.x
}
if l.l > 0 {
f.ly++
- if f.lx-f.x < l.l-l.x {
- f.lx = l.l - l.x + f.x
+ if f.x < l.x {
+ f.x = l.x
+ }
+ if f.lx < l.l+l.x-f.x {
+ f.lx = l.l + l.x - f.x
}
f.lines = append(f.lines, *l)
}
@@ -56,12 +62,18 @@ func Load(fd io.Reader) (*Field, error) {
continue
}
if data[i] == '\n' || data[i] == '\r' {
- if f.ly == 0 && l.l == 0 {
- return nil, newDecodeError("No instruction on the first line of the file produces an unusable program in Befunge98")
+ if f.ly == 0 {
+ if l.l == 0 {
+ return nil, newDecodeError("No instruction on the first line of the file produces an unusable program in Befunge98")
+ }
+ f.x = l.x
}
f.ly++
- if f.lx < l.l {
- f.lx = l.l
+ if f.x > l.x {
+ f.x = l.x
+ }
+ if f.lx < l.l+l.x-f.x {
+ f.lx = l.l + l.x - f.x
}
f.lines = append(f.lines, *l)
l = new(Line)