main.go (1391B)
1 package main 2 3 import ( 4 "context" 5 "flag" 6 "fmt" 7 "os" 8 "path" 9 10 testdataloader "github.com/peteole/testdata-loader" 11 12 "git.defalsify.org/vise.git/engine" 13 ) 14 var ( 15 baseDir = testdataloader.GetBasePath() 16 scriptDir = path.Join(baseDir, "examples", "longmenu") 17 ) 18 19 func main() { 20 var root string 21 var size uint 22 var sessionId string 23 var persist bool 24 flag.UintVar(&size, "s", 0, "max size of output") 25 flag.StringVar(&root, "root", "root", "entry point symbol") 26 flag.StringVar(&sessionId, "session-id", "default", "session id") 27 flag.BoolVar(&persist, "persist", false, "use state persistence") 28 flag.Parse() 29 30 dir := scriptDir 31 fmt.Fprintf(os.Stderr, "starting session at symbol '%s' using resource dir: %s\n", root, dir) 32 33 ctx := context.Background() 34 en, err := engine.NewSizedEngine(dir, uint32(size), persist, &sessionId) 35 if err != nil { 36 fmt.Fprintf(os.Stderr, "engine create error: %v", err) 37 os.Exit(1) 38 } 39 cont, err := en.Init(ctx) 40 if err != nil { 41 fmt.Fprintf(os.Stderr, "engine init exited with error: %v\n", err) 42 os.Exit(1) 43 } 44 if !cont { 45 _, err = en.WriteResult(ctx, os.Stdout) 46 if err != nil { 47 fmt.Fprintf(os.Stderr, "dead init write error: %v\n", err) 48 os.Exit(1) 49 } 50 os.Stdout.Write([]byte{0x0a}) 51 os.Exit(0) 52 } 53 err = engine.Loop(ctx, en, os.Stdin, os.Stdout) 54 if err != nil { 55 fmt.Fprintf(os.Stderr, "loop exited with error: %v\n", err) 56 os.Exit(1) 57 } 58 }