92 lines
2.0 KiB
Go
92 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"math/rand"
|
|
"time"
|
|
|
|
"github.com/mediocregopher/ginger/gg"
|
|
"github.com/mediocregopher/ginger/gim/geo"
|
|
"github.com/mediocregopher/ginger/gim/terminal"
|
|
"github.com/mediocregopher/ginger/gim/view"
|
|
)
|
|
|
|
// TODO be able to draw circular graphs
|
|
// TODO audit all steps, make sure everything is deterministic
|
|
// TODO self-edges
|
|
|
|
//const (
|
|
// framerate = 10
|
|
// frameperiod = time.Second / time.Duration(framerate)
|
|
//)
|
|
|
|
//func debugf(str string, args ...interface{}) {
|
|
// if !strings.HasSuffix(str, "\n") {
|
|
// str += "\n"
|
|
// }
|
|
// fmt.Fprintf(os.Stderr, str, args...)
|
|
//}
|
|
|
|
func mkGraph() (*gg.Graph, gg.Value) {
|
|
a := gg.NewValue("a")
|
|
aE0 := gg.NewValue("aE0")
|
|
aE1 := gg.NewValue("aE1")
|
|
aE2 := gg.NewValue("aE2")
|
|
aE3 := gg.NewValue("aE3")
|
|
b0 := gg.NewValue("b0")
|
|
b1 := gg.NewValue("b1")
|
|
b2 := gg.NewValue("b2")
|
|
b3 := gg.NewValue("b3")
|
|
oaE0 := gg.ValueOut(a, aE0)
|
|
oaE1 := gg.ValueOut(a, aE1)
|
|
oaE2 := gg.ValueOut(a, aE2)
|
|
oaE3 := gg.ValueOut(a, aE3)
|
|
g := gg.ZeroGraph
|
|
g = g.AddValueIn(oaE0, b0)
|
|
g = g.AddValueIn(oaE1, b1)
|
|
g = g.AddValueIn(oaE2, b2)
|
|
g = g.AddValueIn(oaE3, b3)
|
|
|
|
c := gg.NewValue("c")
|
|
empty := gg.NewValue("")
|
|
jE := gg.TupleOut([]gg.OpenEdge{
|
|
gg.ValueOut(b0, empty),
|
|
gg.ValueOut(b1, empty),
|
|
gg.ValueOut(b2, empty),
|
|
gg.ValueOut(b3, empty),
|
|
}, gg.NewValue("jE"))
|
|
g = g.AddValueIn(jE, c)
|
|
|
|
// TODO this really fucks it up
|
|
//d := gg.NewValue("d")
|
|
//deE := gg.ValueOut(d, gg.NewValue("deE"))
|
|
//g = g.AddValueIn(deE, gg.NewValue("e"))
|
|
|
|
return g, c
|
|
}
|
|
|
|
//func mkGraph() *gg.Graph {
|
|
// g := gg.Null
|
|
// g = g.AddValueIn(gg.ValueOut(str("a"), str("e")), str("b"))
|
|
// return g
|
|
//}
|
|
|
|
func main() {
|
|
rand.Seed(time.Now().UnixNano())
|
|
term := terminal.New()
|
|
wSize := term.WindowSize()
|
|
center := geo.Zero.Midpoint(wSize)
|
|
|
|
g, start := mkGraph()
|
|
view := view.New(g, start, geo.Right, geo.Down)
|
|
viewBuf := terminal.NewBuffer()
|
|
view.Draw(viewBuf)
|
|
|
|
buf := terminal.NewBuffer()
|
|
buf.DrawBufferCentered(center, viewBuf)
|
|
|
|
term.Clear()
|
|
term.WriteBuffer(geo.Zero, buf)
|
|
term.SetPos(wSize.Add(geo.XY{0, -1}))
|
|
term.Draw()
|
|
}
|