diff --git a/cmd/fdslist.go b/cmd/fdslist.go index 5c8b610..034f459 100644 --- a/cmd/fdslist.go +++ b/cmd/fdslist.go @@ -16,6 +16,7 @@ import ( type Arguments struct { Input string `arg:"positional,required"` + Extract string `arg:"--extract" help:"Extract files to the given directory"` } @@ -49,6 +50,26 @@ func run(args *Arguments) error { 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 }