78 lines
1.3 KiB
Go
78 lines
1.3 KiB
Go
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
|
|
}
|