go-dasm-mlb/cmd/main.go

99 lines
1.6 KiB
Go

package main
import (
"os"
"fmt"
"github.com/alexflint/go-arg"
"git.zorchenhimer.com/Zorchenhimer/dasm-labels"
)
type Arguments struct {
Output string `arg:"positional,required"`
Input []string `arg:"positional,required"`
RamStart int `arg:"--ram-start" default:"0x6000"`
RomStart int `arg:"--rom-start" default:"0x8000"`
}
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 {
var config *dasmlbl.Config
var err error
for _, infile := range args.Input {
input, err := os.ReadFile(infile)
if err != nil {
return err
}
l, ch := dasmlbl.NewLexer(string(input))
go l.Run()
parser := dasmlbl.NewParser(ch)
cfg, err := parser.Run()
if err != nil {
fmt.Printf("[%s] %s\n", infile, err)
}
if config == nil {
config = cfg
} else {
config.Append(cfg)
}
}
if config == nil {
return fmt.Errorf("no configs parsed")
}
//input, err := os.ReadFile(args.Input)
//if err != nil {
// return 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
}