package main import ( "bytes" "flag" "fmt" "encoding/json" "git.binarythought.com/cdramey/sutron" "io/ioutil" "os" ) type ParserConfig struct { ParserType string `json:"parser_type"` } func main() { flags := flag.NewFlagSet("sutron", flag.ExitOnError) flags.SetOutput(os.Stdout) flags.Usage = func() { fmt.Fprintf(flags.Output(), "Usage: %s [OPTION] ...\nOptions:\n", os.Args[0]) flags.PrintDefaults() } jsonfn := flags.String("json", "sutron.json", "json parser definition file name") flags.Parse(os.Args[1:]) if flags.NArg() < 1 { fmt.Fprintf(os.Stderr, "files parameter cannot be empty\n") os.Exit(1) } jsonsrc, err := ioutil.ReadFile(*jsonfn) if err != nil { fmt.Fprintf(os.Stderr, "error reading \"%s\": %s\n", os.Args[1], err.Error()) } var pcfg ParserConfig err = json.Unmarshal(jsonsrc, &pcfg) if err != nil { fmt.Fprintf(os.Stderr, "parser config error: %s\n", err.Error()) os.Exit(1) } fmt.Printf("Parser type: %s\n", pcfg.ParserType) for _, fn := range flags.Args() { var raw []byte var err error if fn == "-" { raw, err = ioutil.ReadAll(os.Stdin) } else { raw, err = ioutil.ReadFile(fn) } if err != nil { fmt.Fprintf(os.Stderr, "error reading \"%s\": %s\n", os.Args[1], err.Error()) } i := bytes.Index(raw, []byte("B")) if i != -1 { sutrondata, err := sutron.ParseSutronB(raw[i:]) if err != nil { fmt.Fprintf(os.Stderr, "%s\n", err.Error()) os.Exit(1) } fmt.Printf("Sutron Block: %s\n", string(sutrondata.Block)) fmt.Printf("Sutron Group: %s\n", string(sutrondata.Group)) fmt.Printf("Sutron Delta: %s\n", string(sutrondata.Delta)) fmt.Printf("Sutron Voltage: %s\n", string(sutrondata.Voltage)) } } }