From 168eaf26bc26208fec6f5e71927f69c25de359a9 Mon Sep 17 00:00:00 2001 From: Aleteoryx Date: Sun, 14 Jun 2026 22:45:49 -0400 Subject: [PATCH] bettar extractor --- extract.tcl | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) mode change 100644 => 100755 extract.tcl diff --git a/extract.tcl b/extract.tcl old mode 100644 new mode 100755 index c3017bd5ed075f94ef7c82805759fa6af799a0ce..eff3b9b4cbf0adac33f0e9647c3c6e9f3099b27f --- a/extract.tcl +++ b/extract.tcl @@ -1,25 +1,45 @@ -set fp [open CARDPVR.PAC rb] -binary scan [read $fp 0xc] {iii} magic numents hdrlen +#!/bin/env tclsh + +proc fatal {num reason} { + global argv0 + puts stderr "fatal: $argv0: $reason" + exit $num +} + +if {[llength $argv] != 2} { + puts stderr "usage: $argv0 FILE.PAC OUTDIR/" + exit 1 +} + +lassign $argv file dir + +set fp [open $file rb] +binary scan [read $fp 0xc] {iii} magic numents startpos if {$magic != 0x00434150} { - return -code error "unknown magic: $magic" + die 2 "unknown magic: $magic" } else { puts "magic = $magic, OK" } + +set hdrlen [expr {0xc + ($numents * 4)}] puts "header length: $hdrlen ($numents entries)" +puts "data offset: $startpos" puts "reading end table..." set endhdr [read $fp [expr {$numents * 4}]] binary scan $endhdr "i$numents" endtab puts $endtab -file mkdir records +seek $fp $startpos + +file mkdir $dir -set pos $hdrlen +set pos $startpos foreach endpt $endtab { set length [expr {$endpt - $pos}] set data [read $fp $length] - set fp2 [open records/[format %08x $endpt].bin wb] + set fp2 [open $dir/[format %08x $endpt].bin wb] puts $fp2 $data close $fp2