go-vise

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

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 }