go-fds/cmd/fdslist.go

66 lines
1.1 KiB
Go

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
}