6 die "usage: perl makeAsynchronousLoadData sourceFile.log outputFile.mif oldFileList.txt\n" if (@ARGV != 3);
13 my %fileExtensionIndex;
18 # command line arguments
28 sub extensionOffset_numerically
30 return $extensionOffset{$a} <=> $extensionOffset{$b};
37 my $count = @children;
38 my $parent = shift(@children);
39 $children{$parent} = join("\n int32 ", "", $count, $parent, @children) . "\n";
44 # process the old file table to minimize differential patching
45 open(FILES
, $fileList) || die "could not open file $fileList for reading\n";
49 $files{$_} = $counter;
50 $counter += 2 + length($_) + 1;
53 # now check the extension
55 $extension =~ s/^.*\.//;
56 my $extensionIndex = $extensionIndex{$extension};
57 if (!defined($extensionIndex{$extension}))
59 $extensionIndex{$extension} = scalar keys %extensionOffset;
60 $extensionOffset{$extension} = $counter - length($extension) - 1;
61 $extensionIndex = $extensionIndex{$extension};
63 $fileExtensionIndex{$_} = $extensionIndex;
67 open(FILES
, $inFile) || die "could not open file $inFile for reading\n";
73 # 20030711155304:Viewer:reportLog:TF::open(M) d:/work/swg/test/data/sku.0/sys.client/built/game/appearance/path_arrow.msh @ d:/work/swg/test/data/sku.0/sys.client/built/game/appearance/path_arrow.msh, [size=2109]
74 s/\d+\:Viewer\:reportLog\://;
76 # check if this is an opening line, which separates primary assets
79 next_parent
() if ($opening);
83 next if (!/TF::open/);
86 # clean up the file name
87 s/^.*TF::open\([A-Z]\) //;
92 s
#^.*/appearance/#appearance/#;
94 # check for it in the file list
95 my $index = $files{$_};
98 $files{$_} = $counter;
100 $counter += 2 + length($_) + 1;
103 push(@children, $index) if (scalar(grep(/^$index$/, @children)) == 0);
105 # now if the extension is known
107 $extension =~ s/^.*\.//;
108 my $extensionIndex = $extensionIndex{$extension};
109 if (!defined($extensionIndex))
111 $extensionIndex{$extension} = scalar keys %extensionOffset;
112 $extensionOffset{$extension} = $counter - length($extension) - 1;
113 $extensionIndex = $extensionIndex{$extension};
116 # remember the extension table index for this file
117 $fileExtensionIndex{$_} = $extensionIndex;
120 # finish the last primary asset
125 # write out the new file table to minimize the diff the next time the async data is updated
126 open(FILES
, ">" . $fileList) || die "could not open file $fileList for writing\n";
129 print FILES
$_, "\n";
133 # write out the mif data
134 open(OUTPUT
, ">$outFile");
137 print "form \"ASYN\"\n";
139 print " form \"0001\"\n";
141 print " chunk \"NAME\"\n";
147 die "no extension for $_\n" if (!defined($fileExtensionIndex{$_}));
148 print " int8 $fileExtensionIndex{$_}\n";
149 print " cstring \"$_\"\n";
155 print " chunk \"EXTN\"\n";
157 foreach (sort extensionOffset_numerically
keys %extensionOffset)
159 print " int32 $extensionOffset{$_} // $_\n";
163 print " chunk \"LOAD\"\n";
166 foreach (sort numerically
keys %children)