From 4479f21f0b2ec5fd1b7d4cfef5e92ffaa533bea7 Mon Sep 17 00:00:00 2001 From: April Ayres-Griffiths Date: Mon, 23 Apr 2018 22:35:34 +1000 Subject: [PATCH] fix: HGR2 tokenization bug --- disk/atokens.go | 16 ++++++++++++++++ disk/atokens_test.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ disk/di_test.go | 31 ------------------------------- 3 files changed, 60 insertions(+), 31 deletions(-) create mode 100644 disk/atokens_test.go delete mode 100644 disk/di_test.go diff --git a/disk/atokens.go b/disk/atokens.go index 9bd5298..0bd1ff2 100644 --- a/disk/atokens.go +++ b/disk/atokens.go @@ -566,27 +566,43 @@ func ApplesoftTokenize(lines []string) []byte { linebuffer[0x03] = byte(ln / 0x100) // PROCESS LINE + var lastKeyword string for _, ch := range rest { switch { case inqq && ch != '"': linebuffer = append(linebuffer, byte(ch)) + lastKeyword = "" continue case ch == '"': linebuffer = append(linebuffer, byte(ch)) + lastKeyword = "" inqq = !inqq continue case !inqq && breakingChar(ch): linebuffer = append(linebuffer, []byte(chunk)...) chunk = "" linebuffer = append(linebuffer, byte(ch)) + lastKeyword = "" continue } chunk += string(ch) + + if lastKeyword != "" { + code, ok := ApplesoftReverse[strings.ToUpper(lastKeyword+chunk)] + if ok { + linebuffer[len(linebuffer)-1] = byte(code) + lastKeyword = lastKeyword + chunk + chunk = "" + continue + } + } + code, ok := ApplesoftReverse[strings.ToUpper(chunk)] if ok { linebuffer = append(linebuffer, byte(code)) + lastKeyword = chunk chunk = "" } } diff --git a/disk/atokens_test.go b/disk/atokens_test.go new file mode 100644 index 0000000..7de9f41 --- /dev/null +++ b/disk/atokens_test.go @@ -0,0 +1,44 @@ +package disk + +import ( + "strings" + "testing" +) + +func TestHGR2Tokenise(t *testing.T) { + + lines := []string{ + "10 HGR2 : REM SOMETHING", + "20 REM SOMETHING ELSE", + } + + a := ApplesoftTokenize(lines) + + s := string(ApplesoftDetoks(a)) + + t.Logf("code: %s", s) + + if !strings.Contains(s, "HGR2 ") { + t.Fatalf("Expected HGR2") + } + +} + +func TestHGRTokenise(t *testing.T) { + + lines := []string{ + "10 HGR : REM SOMETHING", + "20 REM SOMETHING ELSE", + } + + a := ApplesoftTokenize(lines) + + s := string(ApplesoftDetoks(a)) + + t.Logf("code: %s", s) + + if !strings.Contains(s, "HGR ") { + t.Fatalf("Expected HGR") + } + +} diff --git a/disk/di_test.go b/disk/di_test.go deleted file mode 100644 index 01a1e42..0000000 --- a/disk/di_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package disk - -import ( - //"strings" - "testing" -) -import "fmt" - -//import "os" - -func TestDisk(t *testing.T) { - - if STD_DISK_BYTES != 143360 { - t.Error(fmt.Sprintf("Wrong size got %d", STD_DISK_BYTES)) - } - - dsk, e := NewDSKWrapper("g19.dsk") - if e != nil { - t.Error(e) - } - - fmt.Printf("Disk format is %d\n", dsk.Format) - - _, fdlist, e := dsk.GetCatalogProDOSPathed(2, "GAMES", "") - for _, fd := range fdlist { - fmt.Printf("[%s]\n", fd.Name()) - } - - t.Fail() - -}