go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

commit adbd790c6fe9bfb4fe3e5ec0ce8fdd089f64a775
parent b55edd2678a36ea819db8a9d58ef0001aff85483
Author: lash <dev@holbrook.no>
Date:   Sat,  8 Apr 2023 10:01:28 +0100

Revert "Remove MNEXT, MPREV again (sigh)"

This reverts commit b55edd2678a36ea819db8a9d58ef0001aff85483.

Diffstat:
Mgo/asm/menu.go | 4++--
Mgo/asm/menu_test.go | 4++--
Mgo/resource/resource.go | 30+++++++++++++++---------------
Mgo/vm/debug.go | 32++++++++++++++++----------------
Mgo/vm/debug_test.go | 38+++++++++++++++++++-------------------
Mgo/vm/opcodes.go | 12++++++------
Mgo/vm/runner.go | 46+++++++++++++++++++++++-----------------------
Mgo/vm/vm.go | 18+++++++++---------
8 files changed, 92 insertions(+), 92 deletions(-)

diff --git a/go/asm/menu.go b/go/asm/menu.go @@ -69,10 +69,10 @@ func (mp *MenuProcessor) ToLines() []byte { preLines = vm.NewLine(preLines, vm.MOUT, []string{v.choice, v.display}, nil, nil) postLines = vm.NewLine(postLines, vm.INCMP, []string{v.choice, "_"}, nil, nil) case MENU_NEXT: - preLines = vm.NewLine(preLines, vm.MOUT, []string{v.choice, v.display}, nil, nil) + preLines = vm.NewLine(preLines, vm.MNEXT, []string{v.choice, v.display}, nil, nil) postLines = vm.NewLine(postLines, vm.INCMP, []string{v.choice, ">"}, nil, nil) case MENU_PREVIOUS: - preLines = vm.NewLine(preLines, vm.MOUT, []string{v.choice, v.display}, nil, nil) + preLines = vm.NewLine(preLines, vm.MPREV, []string{v.choice, v.display}, nil, nil) postLines = vm.NewLine(postLines, vm.INCMP, []string{v.choice, "<"}, nil, nil) default: preLines = vm.NewLine(preLines, vm.MOUT, []string{v.choice, v.display}, nil, nil) diff --git a/go/asm/menu_test.go b/go/asm/menu_test.go @@ -35,8 +35,8 @@ func TestMenuInterpreter(t *testing.T) { t.Fatal(err) } expect := `MOUT 0 "inky" -MOUT 1 "pinky" -MOUT 2 "blinky clyde" +MNEXT 1 "pinky" +MPREV 2 "blinky clyde" MOUT 99 "tinky-winky" HALT INCMP 0 foo diff --git a/go/resource/resource.go b/go/resource/resource.go @@ -19,7 +19,7 @@ type Resource interface { GetCode(sym string) ([]byte, error) // Get the bytecode for the given symbol. PutMenu(string, string) error // Add a menu item. ShiftMenu() (string, string, error) // Remove and return the first menu item in list. -// SetMenuBrowse(string, string, bool) error // Set menu browser display details. + SetMenuBrowse(string, string, bool) error // Set menu browser display details. RenderTemplate(sym string, values map[string]string, idx uint16, sizer *Sizer) (string, error) // Render the given data map using the template of the symbol. RenderMenu() (string, error) // Render the current state of menu Render(sym string, values map[string]string, idx uint16, sizer *Sizer) (string, error) // Render full output. @@ -55,20 +55,20 @@ func(m *MenuResource) WithTemplateGetter(templateGetter TemplateFunc) *MenuResou return m } -//// SetMenuBrowse defines the how pagination menu options should be displayed. -//// -//// The selector is the expected user input, and the title is the description string. -//// -//// If back is set, the option will be defined for returning to a previous page. -//func(m *MenuResource) SetMenuBrowse(selector string, title string, back bool) error { -// entry := [2]string{selector, title} -// if back { -// m.prev = entry -// } else { -// m.next = entry -// } -// return nil -//} +// SetMenuBrowse defines the how pagination menu options should be displayed. +// +// The selector is the expected user input, and the title is the description string. +// +// If back is set, the option will be defined for returning to a previous page. +func(m *MenuResource) SetMenuBrowse(selector string, title string, back bool) error { + entry := [2]string{selector, title} + if back { + m.prev = entry + } else { + m.next = entry + } + return nil +} // PutMenu adds a menu option to the menu rendering. func(m *MenuResource) PutMenu(selector string, title string) error { diff --git a/go/vm/debug.go b/go/vm/debug.go @@ -129,22 +129,22 @@ func ParseAll(b []byte, w io.Writer) (int, error) { rs = fmt.Sprintf("%s %s \"%s\"\n", s, r, v) } } -// case MNEXT: -// r, v, bb, err := ParseMNext(b) -// b = bb -// if err == nil { -// if w != nil { -// rs = fmt.Sprintf("%s %s \"%s\"\n", s, r, v) -// } -// } -// case MPREV: -// r, v, bb, err := ParseMPrev(b) -// b = bb -// if err == nil { -// if w != nil { -// rs = fmt.Sprintf("%s %s \"%s\"\n", s, r, v) -// } -// } + case MNEXT: + r, v, bb, err := ParseMNext(b) + b = bb + if err == nil { + if w != nil { + rs = fmt.Sprintf("%s %s \"%s\"\n", s, r, v) + } + } + case MPREV: + r, v, bb, err := ParseMPrev(b) + b = bb + if err == nil { + if w != nil { + rs = fmt.Sprintf("%s %s \"%s\"\n", s, r, v) + } + } } if err != nil { return rn, err diff --git a/go/vm/debug_test.go b/go/vm/debug_test.go @@ -91,25 +91,25 @@ func TestToString(t *testing.T) { t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) } -// b = NewLine(nil, MNEXT, []string{"11", "nextmenu"}, nil, nil) -// r, err = ToString(b) -// if err != nil { -// t.Fatal(err) -// } -// expect = "MNEXT 11 \"nextmenu\"\n" -// if r != expect { -// t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) -// } -// -// b = NewLine(nil, MPREV, []string{"222", "previous menu item"}, nil, nil) -// r, err = ToString(b) -// if err != nil { -// t.Fatal(err) -// } -// expect = "MPREV 222 \"previous menu item\"\n" -// if r != expect { -// t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) -// } + b = NewLine(nil, MNEXT, []string{"11", "nextmenu"}, nil, nil) + r, err = ToString(b) + if err != nil { + t.Fatal(err) + } + expect = "MNEXT 11 \"nextmenu\"\n" + if r != expect { + t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) + } + + b = NewLine(nil, MPREV, []string{"222", "previous menu item"}, nil, nil) + r, err = ToString(b) + if err != nil { + t.Fatal(err) + } + expect = "MPREV 222 \"previous menu item\"\n" + if r != expect { + t.Fatalf("expected:\n\t%v\ngot:\n\t%v", expect, r) + } b = NewLine(nil, MOUT, []string{"1", "foo"}, nil, nil) r, err = ToString(b) diff --git a/go/vm/opcodes.go b/go/vm/opcodes.go @@ -17,8 +17,8 @@ const ( INCMP = 8 MSIZE = 9 MOUT = 10 - //MNEXT = 11 - //MPREV = 12 + MNEXT = 11 + MPREV = 12 _MAX = 12 ) @@ -35,8 +35,8 @@ var ( INCMP: "INCMP", MSIZE: "MSIZE", MOUT: "MOUT", - //MNEXT: "MNEXT", - //MPREV: "MPREV", + MNEXT: "MNEXT", + MPREV: "MPREV", } OpcodeIndex = map[string]Opcode { @@ -51,8 +51,8 @@ var ( "INCMP": INCMP, "MSIZE": MSIZE, "MOUT": MOUT, - //"MNEXT": MNEXT, - //"MPREV": MPREV, + "MNEXT": MNEXT, + "MPREV": MPREV, } ) diff --git a/go/vm/runner.go b/go/vm/runner.go @@ -44,10 +44,10 @@ func Run(b []byte, st *state.State, rs resource.Resource, ctx context.Context) ( b, err = RunMSize(b, st, rs, ctx) case MOUT: b, err = RunMOut(b, st, rs, ctx) -// case MNEXT: -// b, err = RunMNext(b, st, rs, ctx) -// case MPREV: -// b, err = RunMPrev(b, st, rs, ctx) + case MNEXT: + b, err = RunMNext(b, st, rs, ctx) + case MPREV: + b, err = RunMPrev(b, st, rs, ctx) case HALT: b, err = RunHalt(b, st, rs, ctx) return b, err @@ -257,25 +257,25 @@ func RunMOut(b []byte, st *state.State, rs resource.Resource, ctx context.Contex return b, err } -//// RunMNext executes the MNEXT opcode -//func RunMNext(b []byte, st *state.State, rs resource.Resource, ctx context.Context) ([]byte, error) { -// selector, display, b, err := ParseMNext(b) -// if err != nil { -// return b, err -// } -// err = rs.SetMenuBrowse(selector, display, false) -// return b, err -//} -// -//// RunMPrev executes the MPREV opcode -//func RunMPrev(b []byte, st *state.State, rs resource.Resource, ctx context.Context) ([]byte, error) { -// selector, display, b, err := ParseMPrev(b) -// if err != nil { -// return b, err -// } -// err = rs.SetMenuBrowse(selector, display, false) -// return b, err -//} +// RunMNext executes the MNEXT opcode +func RunMNext(b []byte, st *state.State, rs resource.Resource, ctx context.Context) ([]byte, error) { + selector, display, b, err := ParseMNext(b) + if err != nil { + return b, err + } + err = rs.SetMenuBrowse(selector, display, false) + return b, err +} + +// RunMPrev executes the MPREV opcode +func RunMPrev(b []byte, st *state.State, rs resource.Resource, ctx context.Context) ([]byte, error) { + selector, display, b, err := ParseMPrev(b) + if err != nil { + return b, err + } + err = rs.SetMenuBrowse(selector, display, false) + return b, err +} // retrieve data for key func refresh(key string, rs resource.Resource, ctx context.Context) (string, error) { diff --git a/go/vm/vm.go b/go/vm/vm.go @@ -75,15 +75,15 @@ func ParseInCmp(b []byte) (string, string, []byte, error) { return parseTwoSym(b) } -//// ParseMPrev parses and extracts the expected argument portion of a MPREV instruction -//func ParseMPrev(b []byte) (string, string, []byte, error) { -// return parseTwoSym(b) -//} -// -//// ParseMNext parses and extracts the expected argument portion of a MNEXT instruction -//func ParseMNext(b []byte) (string, string, []byte, error) { -// return parseTwoSym(b) -//} +// ParseMPrev parses and extracts the expected argument portion of a MPREV instruction +func ParseMPrev(b []byte) (string, string, []byte, error) { + return parseTwoSym(b) +} + +// ParseMNext parses and extracts the expected argument portion of a MNEXT instruction +func ParseMNext(b []byte) (string, string, []byte, error) { + return parseTwoSym(b) +} // ParseMSize parses and extracts the expected argument portion of a MSIZE instruction func ParseMSize(b []byte) (uint32, uint32, []byte, error) {