package main import ( "os" "fmt" "github.com/alexflint/go-arg" "git.zorchenhimer.com/Zorchenhimer/dasm-labels" ) type Arguments struct { Input string `arg:"positional,required"` Output string `arg:"positional"` RamStart int `arg:"--ram-start" default:"0x5000"` RomStart int `arg:"--rom-start" default:"0xE000"` } func main() { args := &Arguments{} arg.MustParse(args) err := run(args) if err != nil { fmt.Fprintln(os.Stdout, err) os.Exit(1) } } func run(args *Arguments) error { input, err := os.ReadFile(args.Input) if err != nil { return err } l, ch := dasmlbl.NewLexer(string(input)) go l.Run() parser := dasmlbl.NewParser(ch) config, err := parser.Run() if err != nil { fmt.Println(err) } var output *os.File if args.Output == "" { output = os.Stdout } else { output, err = os.Create(args.Output) if err != nil { return err } defer output.Close() } for _, lbl := range config.Labels { //fmt.Println(lbl) fmt.Fprintln(output, lbl.Mlb(args.RamStart, args.RomStart)) } for _, rng := range config.Ranges { if rng.Name == "" { continue } fmt.Fprintln(output, rng.Mlb(args.RamStart, args.RomStart)) } //go func(items chan dasmlbl.LexItem) { // for { // fmt.Println(<-items) // } //}(ch) //l.Run() return nil }