Thinking about an intcode debugger
This commit is contained in:
parent
c145e23c83
commit
1a8a0d3099
1
2019/intcode-processor/debugger/.gitignore
vendored
Normal file
1
2019/intcode-processor/debugger/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
debugger
|
44
2019/intcode-processor/debugger/app_state.go
Normal file
44
2019/intcode-processor/debugger/app_state.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/br0xen/termbox-screen"
|
||||||
|
termbox "github.com/nsf/termbox-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
DefaultFg = termbox.ColorWhite
|
||||||
|
DefaultBg = termbox.ColorBlack
|
||||||
|
TitleFg = termbox.ColorWhite
|
||||||
|
TitleBg = termbox.ColorBlue
|
||||||
|
CursorFg = termbox.ColorBlack
|
||||||
|
CursorBg = termbox.ColorGreen
|
||||||
|
|
||||||
|
ScreenIdExit = iota - 1
|
||||||
|
ScreenIdMain
|
||||||
|
ScreenIdError
|
||||||
|
)
|
||||||
|
|
||||||
|
type AppState struct {
|
||||||
|
ui *termboxScreen.Manager
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewApp(parms []string) *AppState {
|
||||||
|
return &AppState{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AppState) run(parms []string) int {
|
||||||
|
var err error
|
||||||
|
a.ui = termboxScreen.NewManager()
|
||||||
|
if err = a.ui.AddAndInitializeScreen(NewMainScreen()); err != nil {
|
||||||
|
a.ui.Close()
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := a.ui.Loop(); err != nil {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
14
2019/intcode-processor/debugger/main.go
Normal file
14
2019/intcode-processor/debugger/main.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "os"
|
||||||
|
|
||||||
|
var app *AppState
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var parms []string
|
||||||
|
if len(os.Args) > 1 {
|
||||||
|
parms = os.Args[1:]
|
||||||
|
}
|
||||||
|
app = NewApp(parms)
|
||||||
|
os.Exit(app.run(parms))
|
||||||
|
}
|
126
2019/intcode-processor/debugger/screen_main.go
Normal file
126
2019/intcode-processor/debugger/screen_main.go
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
intcode "git.bullercodeworks.com/brian/adventofcode/2019/intcode-processor"
|
||||||
|
"github.com/br0xen/termbox-screen"
|
||||||
|
"github.com/br0xen/termbox-util"
|
||||||
|
termbox "github.com/nsf/termbox-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
MS_MODE_WAIT = iota
|
||||||
|
MS_MODE_LOAD
|
||||||
|
MS_MODE_RUN
|
||||||
|
|
||||||
|
MS_MODES = 15
|
||||||
|
|
||||||
|
MS_MODE_MENU = 1 << 4
|
||||||
|
)
|
||||||
|
|
||||||
|
type MainScreen struct {
|
||||||
|
id int
|
||||||
|
title string
|
||||||
|
mode int
|
||||||
|
|
||||||
|
filename string
|
||||||
|
|
||||||
|
prog *intcode.Program
|
||||||
|
menu []*MenuItem
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMainScreen() *MainScreen {
|
||||||
|
m := &MainScreen{
|
||||||
|
id: ScreenIdMain,
|
||||||
|
title: "IntCode Debugger",
|
||||||
|
mode: MS_MODE_WAIT,
|
||||||
|
}
|
||||||
|
m.menu = append(m.menu, NewMenu("File", NewMenu("Load"), NewMenu("Exit")))
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) Id() int { return screen.id }
|
||||||
|
|
||||||
|
func (screen *MainScreen) Initialize(bundle termboxScreen.Bundle) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) ResizeScreen() {
|
||||||
|
screen.Initialize(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) HandleNoneEvent(event termbox.Event) int {
|
||||||
|
return screen.Id()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) HandleKeyEvent(event termbox.Event) int {
|
||||||
|
if event.Ch == 0 && event.Key == termbox.KeyEsc {
|
||||||
|
screen.toggleMenu()
|
||||||
|
}
|
||||||
|
return screen.Id()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ╭╼╾╮
|
||||||
|
// │┼━│
|
||||||
|
// ├┴┬┤
|
||||||
|
// ╰──╯
|
||||||
|
func (screen *MainScreen) DrawScreen() {
|
||||||
|
//w, _ := termbox.Size()
|
||||||
|
screen.drawHeader()
|
||||||
|
|
||||||
|
screen.drawFooter()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) drawHeader() {
|
||||||
|
w, _ := termbox.Size()
|
||||||
|
spaces := strings.Repeat(" ", ((w-len(screen.title))/2)+1)
|
||||||
|
termboxUtil.DrawStringAtPoint(fmt.Sprintf("%s%s%s", spaces, screen.title, spaces), 0, 0, TitleFg, TitleBg)
|
||||||
|
if screen.menuIsOn() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) drawFooter() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) getMode() int {
|
||||||
|
return screen.mode & MS_MODES
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) menuIsOn() bool {
|
||||||
|
return screen.mode&MS_MODE_MENU == MS_MODE_MENU
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) toggleMenu() {
|
||||||
|
if screen.menuIsOn() {
|
||||||
|
screen.hideMenu()
|
||||||
|
} else {
|
||||||
|
screen.showMenu()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) showMenu() {
|
||||||
|
screen.mode = screen.mode | MS_MODE_MENU
|
||||||
|
}
|
||||||
|
|
||||||
|
func (screen *MainScreen) hideMenu() {
|
||||||
|
screen.mode = screen.mode ^ MS_MODE_MENU
|
||||||
|
}
|
||||||
|
|
||||||
|
type MenuItem struct {
|
||||||
|
title string
|
||||||
|
parent string
|
||||||
|
SubMenu []*MenuItem
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMenu(title string, items ...*MenuItem) *MenuItem {
|
||||||
|
m := MenuItem{title: title}
|
||||||
|
for i := range items {
|
||||||
|
items[i].parent = title
|
||||||
|
m.SubMenu = append(m.SubMenu, items[i])
|
||||||
|
}
|
||||||
|
return &m
|
||||||
|
}
|
8
go.mod
8
go.mod
@ -3,12 +3,20 @@ module git.bullercodeworks.com/brian/adventofcode
|
|||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/BurntSushi/toml v0.3.1 // indirect
|
||||||
|
github.com/br0xen/termbox-screen v0.0.0-20190712162752-c91f70ac38c6
|
||||||
|
github.com/br0xen/termbox-util v0.0.0-20190325151025-c168c0df31ca
|
||||||
|
github.com/br0xen/user-config v0.0.0-20170914134719-16e743ec93a2 // indirect
|
||||||
|
github.com/casimir/xdg-go v0.0.0-20160329195404-372ccc2180da // indirect
|
||||||
github.com/fatih/color v1.7.0
|
github.com/fatih/color v1.7.0
|
||||||
github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7
|
github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7
|
||||||
github.com/go-gl/glfw v0.0.0-20191125211704-12ad95a8df72
|
github.com/go-gl/glfw v0.0.0-20191125211704-12ad95a8df72
|
||||||
|
github.com/google/uuid v1.1.1 // indirect
|
||||||
|
github.com/jcelliott/lumber v0.0.0-20160324203708-dd349441af25 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.4 // indirect
|
github.com/mattn/go-colorable v0.1.4 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.10 // indirect
|
github.com/mattn/go-isatty v0.0.10 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.7 // indirect
|
github.com/mattn/go-runewidth v0.0.7 // indirect
|
||||||
|
github.com/nanobox-io/golang-scribble v0.0.0-20190309225732-aa3e7c118975 // indirect
|
||||||
github.com/nlopes/slack v0.6.0 // indirect
|
github.com/nlopes/slack v0.6.0 // indirect
|
||||||
github.com/nsf/termbox-go v0.0.0-20190817171036-93860e161317
|
github.com/nsf/termbox-go v0.0.0-20190817171036-93860e161317
|
||||||
)
|
)
|
||||||
|
16
go.sum
16
go.sum
@ -1,3 +1,13 @@
|
|||||||
|
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
||||||
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
github.com/br0xen/termbox-screen v0.0.0-20190712162752-c91f70ac38c6 h1:QaQWdi0Kgk1v+DW35aaBsEpoig3smyjJy2M6e/dePjM=
|
||||||
|
github.com/br0xen/termbox-screen v0.0.0-20190712162752-c91f70ac38c6/go.mod h1:g8Iv1LnV2Dg45Bg5uCATrYi5Y57mXWsqlPnfU2BhD5I=
|
||||||
|
github.com/br0xen/termbox-util v0.0.0-20190325151025-c168c0df31ca h1:UMJCb+zIdrTX68nP5byq1xjW72UIqMBNxcYPlPFhnOs=
|
||||||
|
github.com/br0xen/termbox-util v0.0.0-20190325151025-c168c0df31ca/go.mod h1:x9wJlgOj74OFTOBwXOuO8pBguW37EgYNx51Dbjkfzo4=
|
||||||
|
github.com/br0xen/user-config v0.0.0-20170914134719-16e743ec93a2 h1:H/prDPxUZBsK4DQC7ScP3ftSijMtWyetb6ab69DSKrs=
|
||||||
|
github.com/br0xen/user-config v0.0.0-20170914134719-16e743ec93a2/go.mod h1:lMy7txIyYXt+I/1JgTGBZTdyTNJyNVDCX4Z+lHzNcSM=
|
||||||
|
github.com/casimir/xdg-go v0.0.0-20160329195404-372ccc2180da h1:hjpZV7G49m1bly++F+Gho1Sbf2+eBW/eTLJWuRkH9Uc=
|
||||||
|
github.com/casimir/xdg-go v0.0.0-20160329195404-372ccc2180da/go.mod h1:dywSSi3sMtJn2IjiYfJciP9tjVVeIVRa7AE7N5WLUBo=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
|
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
|
||||||
@ -6,8 +16,12 @@ github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7 h1:SCYMcCJ89LjRGwEa0tRluN
|
|||||||
github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
|
github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
|
||||||
github.com/go-gl/glfw v0.0.0-20191125211704-12ad95a8df72 h1:LgLYrxDRSVv3kStk6louYTP1ekZ6t7HZY/X05KUyaeM=
|
github.com/go-gl/glfw v0.0.0-20191125211704-12ad95a8df72 h1:LgLYrxDRSVv3kStk6louYTP1ekZ6t7HZY/X05KUyaeM=
|
||||||
github.com/go-gl/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
|
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
||||||
|
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gorilla/websocket v1.2.0 h1:VJtLvh6VQym50czpZzx07z/kw9EgAxI3x1ZB8taTMQQ=
|
github.com/gorilla/websocket v1.2.0 h1:VJtLvh6VQym50czpZzx07z/kw9EgAxI3x1ZB8taTMQQ=
|
||||||
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
|
github.com/jcelliott/lumber v0.0.0-20160324203708-dd349441af25 h1:EFT6MH3igZK/dIVqgGbTqWVvkZ7wJ5iGN03SVtvvdd8=
|
||||||
|
github.com/jcelliott/lumber v0.0.0-20160324203708-dd349441af25/go.mod h1:sWkGw/wsaHtRsT9zGQ/WyJCotGWG/Anow/9hsAcBWRw=
|
||||||
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
|
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
|
||||||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
@ -15,6 +29,8 @@ github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW1
|
|||||||
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
|
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
|
||||||
github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54=
|
github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54=
|
||||||
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||||
|
github.com/nanobox-io/golang-scribble v0.0.0-20190309225732-aa3e7c118975 h1:zm/Rb2OsnLWCY88Njoqgo4X6yt/lx3oBNWhepX0AOMU=
|
||||||
|
github.com/nanobox-io/golang-scribble v0.0.0-20190309225732-aa3e7c118975/go.mod h1:4Mct/lWCFf1jzQTTAaWtOI7sXqmG+wBeiBfT4CxoaJk=
|
||||||
github.com/nlopes/slack v0.6.0 h1:jt0jxVQGhssx1Ib7naAOZEZcGdtIhTzkP0nopK0AsRA=
|
github.com/nlopes/slack v0.6.0 h1:jt0jxVQGhssx1Ib7naAOZEZcGdtIhTzkP0nopK0AsRA=
|
||||||
github.com/nlopes/slack v0.6.0/go.mod h1:JzQ9m3PMAqcpeCam7UaHSuBuupz7CmpjehYMayT6YOk=
|
github.com/nlopes/slack v0.6.0/go.mod h1:JzQ9m3PMAqcpeCam7UaHSuBuupz7CmpjehYMayT6YOk=
|
||||||
github.com/nsf/termbox-go v0.0.0-20190817171036-93860e161317 h1:hhGN4SFXgXo61Q4Sjj/X9sBjyeSa2kdpaOzCO+8EVQw=
|
github.com/nsf/termbox-go v0.0.0-20190817171036-93860e161317 h1:hhGN4SFXgXo61Q4Sjj/X9sBjyeSa2kdpaOzCO+8EVQw=
|
||||||
|
Loading…
Reference in New Issue
Block a user