2f9f3dd65f5da54493616cfec9e5cc68213500ff
[project/luci.git] / contrib / lar / lar.pl
1 #!/usr/bin/perl
2
3 use strict;
4
5 @ARGV || die "Usage: $0 <file1> <file2> ... <fileN>\n";
6
7 my @index;
8 my $offset = 0;
9
10 foreach my $file ( @ARGV )
11 {
12         if( -f $file && open F, "< $file" )
13         {
14                 warn sprintf "Member at 0x%08X\n", $offset;
15                 push @index, [ ];
16
17                 my $size = length $file;
18
19                 print $file;
20                 print "\0" x ( $size % 4 );
21
22                 $index[-1][0] = $offset;
23                 $index[-1][1] = $size;
24                 $index[-1][2] = $offset + $size + ( $size % 4 );
25
26                 
27                 $size = 0;
28                 while( read F, my $buffer, 4096 ) {
29                         $size += length $buffer;
30                         print $buffer;
31                 }
32                 print "\0" x ( $size % 4 );
33
34                 $index[-1][3] = $size;
35                 $offset = $index[-1][2] + $size + ( $size % 4 );
36
37                 close F;
38         }
39 }
40
41 my $count = 1;
42 foreach my $file ( @index )
43 {
44         warn sprintf "Index[%4d]: 0x%08X 0x%08X 0x%08X 0x%08X\n", $count++, $file->[0], $file->[1], $file->[2], $file->[3];
45         print pack "NNNNnn", $file->[0], $file->[1], $file->[2], $file->[3], 0x0000, 0x0000;
46 }
47
48 warn sprintf "Index at 0x%08X, length 0x%08X\n", $offset, @index * 20;
49 print pack "N", $offset;
50