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
|
||||
|
||||
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/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7
|
||||
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-isatty v0.0.10 // 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/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
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/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/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/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/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
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-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/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/go.mod h1:JzQ9m3PMAqcpeCam7UaHSuBuupz7CmpjehYMayT6YOk=
|
||||
github.com/nsf/termbox-go v0.0.0-20190817171036-93860e161317 h1:hhGN4SFXgXo61Q4Sjj/X9sBjyeSa2kdpaOzCO+8EVQw=
|
||||
|
Loading…
Reference in New Issue
Block a user