Fix Windows Wrappers and Extensions

This commit is contained in:
2026-04-10 08:13:09 +02:00
parent febd109041
commit 3a0d4eb990
4 changed files with 108 additions and 4 deletions
+60 -4
View File
@@ -114,13 +114,69 @@ var extensionTypes = map[string]uint16{
"png": 0x083E,
}
var typeExtensions map[uint16]string
var typeExtensions = map[uint16]string{
0x0000: "res",
0x0001: "bmp",
0x0002: "mve",
0x0003: "tga",
0x0004: "wav",
0x0006: "plt",
0x0007: "ini",
0x000A: "txt",
0x07D2: "mdl",
0x07D9: "nss",
0x07DA: "ncs",
0x07DC: "are",
0x07DD: "set",
0x07DE: "ifo",
0x07DF: "bic",
0x07E1: "wok",
0x07E2: "2da",
0x07E3: "tlk",
0x07E6: "txi",
0x07E7: "git",
0x07E9: "uti",
0x07EA: "utt",
0x07EB: "utc",
0x07ED: "dlg",
0x07EE: "itp",
0x07F0: "uts",
0x07F1: "dds",
0x07F6: "fac",
0x07F7: "gff",
0x07F9: "ute",
0x07FB: "utd",
0x07FC: "utp",
0x07FD: "dfa",
0x07FE: "gic",
0x07FF: "gui",
0x0800: "utm",
0x0804: "dwk",
0x0805: "pwk",
0x0808: "jrl",
0x080A: "utw",
0x080C: "ssf",
0x080D: "hak",
0x080E: "nwm",
0x080F: "bik",
0x0810: "ndb",
0x0811: "ptm",
0x0812: "ptt",
0x0813: "ltr",
0x0815: "shd",
0x0818: "mtr",
0x081E: "lod",
0x083E: "png",
}
func init() {
typeExtensions = make(map[uint16]string, len(extensionTypes))
for ext, resourceType := range extensionTypes {
if _, exists := typeExtensions[resourceType]; !exists {
typeExtensions[resourceType] = ext
canonicalExt, ok := typeExtensions[resourceType]
if !ok {
panic(fmt.Sprintf("missing canonical extension for resource type 0x%04X", resourceType))
}
if canonicalExt == ext {
continue
}
}
}
+28
View File
@@ -28,3 +28,31 @@ func TestArchiveRoundTrip(t *testing.T) {
t.Fatalf("unexpected first resource: %#v", decoded.Resources[0])
}
}
func TestExtensionMappingsKeep2DAAndTLKDistinct(t *testing.T) {
resourceType, ok := ResourceTypeForExtension("2da")
if !ok {
t.Fatal("expected 2da resource type")
}
if resourceType != 0x07E2 {
t.Fatalf("expected 2da type 0x07E2, got 0x%04X", resourceType)
}
extension, ok := ExtensionForResourceType(resourceType)
if !ok {
t.Fatal("expected canonical extension for 2da type")
}
if extension != "2da" {
t.Fatalf("expected 2da extension, got %q", extension)
}
tlkType, ok := ResourceTypeForExtension("tlk")
if !ok {
t.Fatal("expected tlk resource type")
}
if tlkType != 0x07E3 {
t.Fatalf("expected tlk type 0x07E3, got 0x%04X", tlkType)
}
if tlkType == resourceType {
t.Fatal("expected 2da and tlk resource types to stay distinct")
}
}