66 lines
1.1 KiB
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
|
|
}
|
|
|
|
|