Output file prefix. --input-file Message file to generate source for. --output-dir Destination directory for generated files. EOD; } $name = ""; $input_file = ""; $output_dir = ""; for ($i = 1; $i < $argc;) { $arg = $argv[$i++]; switch ($arg) { case "--name": $name = $argv[$i++]; break; case "--input-file": $input_file = $argv[$i++]; break; case "--output-dir": $output_dir = $argv[$i++]; break; case "--help": print_help($argv[0]); exit(0); default: fatal_error("Unknown option: {$arg}"); } } if ($name == "") { fatal_error("--name missing"); } if ($input_file == "") { fatal_error("--input-file missing"); } if ($output_dir == "") { fatal_error("--output-dir missing"); } if (($data = file_get_contents($input_file)) === FALSE) { fatal_error("Failed to read input file"); } if (!tokenize($data, $tokens)) { fatal_error("Failed to tokenize"); } $parser = new parse_engine(new ProtoParser()); try { foreach ($tokens as $token) { $parser->eat($token[0], $token[1]); } $parser->eat_eof(); } catch (parse_error $e) { fatal_error("$input_file: Parse error: ".$e->getMessage()); } $data = generate_header($name, $parser->semantic["directives"], $parser->semantic["messages"]); if (file_put_contents("{$output_dir}/{$name}.h", $data) === NULL) { fatal_error("{$input_file}: Failed to write .h file"); }