2 $lGenDate = date("Y-m-d H:i");
13 $ACESSDIR = getenv("ACESSDIR");
14 $ARCH = getenv("ARCH");
16 $gInputFile = $argv[1];
17 $gOutputFile = $argv[2];
18 $gOutputLDOptsFile = $argv[3];
19 $gDepFile = ($argc > 4 ? $argv[4] : false);
21 $gDependencies = array();
23 $lines = file($argv[1]);
27 $lStack = array( array("",array()) );
28 foreach($lines as $line)
32 if(preg_match('/^Dir\s+"([^"]+)"\s+{$/', $line, $matches))
34 $new = array($matches[1], array());
35 array_push($lStack, $new);
43 $lStack[$lDepth][1][] = array_pop($lStack);
47 if(preg_match('/^File\s+"([^"]+)"\s+"([^"]+)"$/', $line, $matches))
49 $lStack[$lDepth][1][] = array($matches[1], $matches[2]);
52 echo "ERROR: $line\n";
58 //return "0x".str_pad( dechex(ord(fgetc($fp))), 8, "0", STR_PAD_LEFT );
59 $val = unpack("I", fread($fp, 4));
60 //print_r($val); exit -1;
61 return "0x".dechex($val[1]);
66 return "0x".str_pad( dechex(ord(fgetc($fp))), 2, "0", STR_PAD_LEFT );
71 function ProcessFolder($prefix, $items)
73 global $gOutput, $gDependencies;
74 global $ACESSDIR, $ARCH;
77 foreach($items as $i=>$item)
80 if(is_array($item[1]))
82 ProcessFolder("{$prefix}_{$i}", $item[1]);
84 $gOutput .= "tInitRD_File {$prefix}_{$i}_entries[] = {\n";
85 foreach($item[1] as $j=>$child)
87 if($j) $gOutput .= ",\n";
88 $gOutput .= "\t{\"".addslashes($child[0])."\",&{$prefix}_{$i}_{$j}}";
92 $size = count($item[1]);
94 tVFS_Node {$prefix}_{$i} = {
96 .ACLs = &gVFS_ACL_EveryoneRX,
97 .Flags = VFS_FFLAG_DIRECTORY,
100 .ImplPtr = {$prefix}_{$i}_entries,
101 .ReadDir = InitRD_ReadDir,
102 .FindDir = InitRD_FindDir
111 // Parse path components
112 $path = str_replace("__BIN__", "$ACESSDIR/Usermode/Output/$ARCH", $path);
113 $path = str_replace("__FS__", "$ACESSDIR/Usermode/Filesystem", $path);
114 $path = str_replace("__SRC__", "$ACESSDIR", $path);
118 $gDependencies[] = $path;
120 if(!file_exists($path)) {
121 echo "ERROR: '{$path}' does not exist\n",
124 $size = filesize($path);
127 $_sym = $prefix."_".$i."_data";
128 $fp = fopen($path, "rb");
130 $gOutput .= "Uint8 $_sym[] = {\n";
131 for( $j = 0; $j + 16 < $size; $j += 16 ) {
133 $gOutput .= hd8($fp).",".hd8($fp).",";
134 $gOutput .= hd8($fp).",".hd8($fp).",";
135 $gOutput .= hd8($fp).",".hd8($fp).",";
136 $gOutput .= hd8($fp).",".hd8($fp).",";
137 $gOutput .= hd8($fp).",".hd8($fp).",";
138 $gOutput .= hd8($fp).",".hd8($fp).",";
139 $gOutput .= hd8($fp).",".hd8($fp).",";
140 $gOutput .= hd8($fp).",".hd8($fp).",\n";
143 for( ; $j < $size; $j ++ ) {
144 if( $j & 15 ) $gOutput .= ",";
145 $gOutput .= hd8($fp);
148 $gOutput .= "\n};\n";
152 $_sym = "_binary_".str_replace(array("/","-","."), "_", $path)."_start";
153 $gOutput .= "extern Uint8 {$_sym}[];";
154 $gSymFiles[] = $path;
157 tVFS_Node {$prefix}_{$i} = {
159 .ACLs = &gVFS_ACL_EveryoneRX,
164 .Read = InitRD_ReadFile
175 ProcessFolder("gInitRD_Files", $lStack[0][1]);
177 $gOutput .= "tInitRD_File gInitRD_Root_Files[] = {\n";
178 foreach($lStack[0][1] as $j=>$child)
180 if($j) $gOutput .= ",\n";
181 $gOutput .= "\t{\"".addslashes($child[0])."\",&gInitRD_Files_{$j}}";
183 $gOutput .= "\n};\n";
184 $nRootFiles = count($lStack[0][1]);
186 tVFS_Node gInitRD_RootNode = {
188 .ACLs = &gVFS_ACL_EveryoneRX,
189 .Flags = VFS_FFLAG_DIRECTORY,
191 .ImplPtr = gInitRD_Root_Files,
192 .ReadDir = InitRD_ReadDir,
193 .FindDir = InitRD_FindDir
199 tVFS_Node * const gInitRD_FileList[] = {
203 function PutNodePointers($prefix, $items)
206 foreach($items as $i=>$item)
208 $gOutput .= ",&{$prefix}_{$i}";
209 if(is_array($item[1]))
211 PutNodePointers("{$prefix}_{$i}", $item[1]);
216 PutNodePointers("gInitRD_Files", $lStack[0][1]);
220 const int giInitRD_NumFiles = sizeof(gInitRD_FileList)/sizeof(gInitRD_FileList[0]);
225 $fp = fopen($gOutputFile, "w");
226 fputs($fp, $gOutput);
229 // - Create options call
230 $fp = fopen($gOutputLDOptsFile, "w");
231 fputs($fp, "--format binary\n");
232 foreach($gSymFiles as $sym=>$file)
234 fputs($fp, "$file\n");
235 // fputs($fp, "--defsym $sym=_binary_".$sym_filename."_start\n");
239 if($gDepFile !== false)
241 $fp = fopen($gDepFile, "w");
242 $line = $gOutputFile.":\t".implode(" ", $gDependencies);