if(preg_match('/^File\s+"([^"]+)"\s+"([^"]+)"$/', $line, $matches))
{
$lStack[$lDepth][1][] = array($matches[1], $matches[2]);
- $gDependencies[] = $matches[2];
continue;
}
echo "ERROR: $line\n";
return "0x".str_pad( dechex(ord(fgetc($fp))), 2, "0", STR_PAD_LEFT );
}
+$inode = 0;
function ProcessFolder($prefix, $items)
{
- global $gOutput;
+ global $gOutput, $gDependencies;
global $ACESSDIR, $ARCH;
+ global $inode;
foreach($items as $i=>$item)
{
+ $inode ++;
if(is_array($item[1]))
{
ProcessFolder("{$prefix}_{$i}", $item[1]);
.ACLs = &gVFS_ACL_EveryoneRX,
.Flags = VFS_FFLAG_DIRECTORY,
.Size = $size,
+ .Inode = {$inode},
.ImplPtr = {$prefix}_{$i}_entries,
.ReadDir = InitRD_ReadDir,
.FindDir = InitRD_FindDir
$path = str_replace("__FS__", "$ACESSDIR/Usermode/Filesystem", $path);
echo $path,"\n";
// ---
+
+ $gDependencies[] = $path;
if(!file_exists($path)) {
echo "ERROR: '{$path}' does not exist\n",
.ACLs = &gVFS_ACL_EveryoneRX,
.Flags = 0,
.Size = $size,
+ .Inode = {$inode},
.ImplPtr = {$prefix}_{$i}_data,
.Read = InitRD_ReadFile
};
};
EOF;
+$gOutput .= <<<EOF
+
+tVFS_Node * const gInitRD_FileList[] = {
+&gInitRD_RootNode
+EOF;
+
+function PutNodePointers($prefix, $items)
+{
+ global $gOutput;
+ foreach($items as $i=>$item)
+ {
+ $gOutput .= ",&{$prefix}_{$i}";
+ if(is_array($item[1]))
+ {
+ PutNodePointers("{$prefix}_{$i}", $item[1]);
+ }
+ }
+}
+
+PutNodePointers("gInitRD_Files", $lStack[0][1]);
+
+$gOutput .= <<<EOF
+};
+const int giInitRD_NumFiles = sizeof(gInitRD_FileList)/sizeof(gInitRD_FileList[0]);
+
+EOF;
+
+
$fp = fopen($gOutputFile, "w");
fputs($fp, $gOutput);
fclose($fp);