go-vise

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

main.go (1283B)


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