package main import ( "fmt" "os" //"encoding/binary" //"bufio" //"bytes" //"io" "path/filepath" "github.com/alexflint/go-arg" "git.zorchenhimer.com/zorchenhimer/go-fds" ) type Arguments struct { Input string `arg:"positional,required"` Extract string `arg:"--extract" help:"Extract files to the given directory"` } func main() { args := &Arguments{} arg.MustParse(args) err := run(args) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } func run(args *Arguments) error { rom, err := fds.ReadRomFile(args.Input, filepath.Ext(args.Input) == ".fds") if err != nil { return err } fmt.Println(rom.Info()) if args.Extract != "" { err = os.MkdirAll(args.Extract, 0775) if err != nil { return err } num := 0 for _, side := range rom.Sides { sideName := fmt.Sprintf("Side%d", side.Header.PhysicalSide) for _, file := range side.Files { fileName := filepath.Join(args.Extract, fmt.Sprintf("%03d_%s_%02d_%02X", num, sideName, file.Number, file.Id)) err := os.WriteFile(fileName, file.Data, 0664) if err != nil { return err } num++ } } } return nil }