Beispiel #1
0
// Parses options specified in the first line of the file with 'filename'.
// Returns: success?
// On success, public member variables shall contain interpreted program
// parameters.
bool Options::ParseConfigFile(string filename, bool validate /* = true */) {
	// avoid endless recursion!
	//printf("Parsing: '%s'...\n", filename.c_str());
	if (parsedConfigFiles.find(filename) != parsedConfigFiles.end()) {
		fprintf(stderr, "Cyclic list of configuration files is not allowed!\nStopping at file named: '%s'.\n", filename.c_str());
		return true;
	}

	const int MAX_LINE_LEN = 1024;
	char line[MAX_LINE_LEN+1] = {0};

	FILE* in = fopen(filename.c_str(), "r+t");
	if (!in) {
		fprintf(stderr, "Failed to open config file named: '%s'.\n", filename.c_str());
		return false;
	}
	fgets(line, MAX_LINE_LEN, in);
	fclose(in);

	// add this file to read config files set
	parsedConfigFiles.insert(filename);

	CmdLineParser cmdline = cmdline_prototype;
	if (!cmdline.Parse(line, true)) {
		fprintf(stderr, "Syntax error in config file: '%s'. \n", filename.c_str());
		return false;
	}
	Store(cmdline);

	return validate ? Validate() : true;
}
Beispiel #2
0
int main(int argc, const char **argv)
{
	char xmlfile[1024];
	char configfile[1024];
	char platform[128];
	bool rebuild = false;
	bool packages = false;
	bool compression = false;
	bool resources = false;
	bool unified = false;
	bool dirs = false;
	u8	 alignment = ALIGN_32;

	memset(configfile, '\0', 1024);
	memcpy(configfile, "config.xml", strlen("config.xml"));

	CmdLineParser *parser = new CmdLineParser(12);
	parser->Add("i", "input", false, false, true, SetXmlFile, xmlfile);
	parser->Add("p", "platform", false, false, true, SetPlatformString, platform);
	parser->Add("r", "rebuild", true, false, false, Rebuild, &rebuild);
	parser->Add("k", "packages", true, false, false, EnablePackages, &packages);
	parser->Add("a", "alignment", true, false, true, SetAlignment, &alignment);
	parser->Add("c", "compress", true, false, false, EnableCompression, &compression);
	parser->Add("d", "add_resources", true, false, false, EnablePackageResources, &resources);
	parser->Add("t", "tree", true, false, true, RebuildDirectoryTree, &dirs);
	parser->Add("v", "verbose", true, false, false, EnableVerboseMode, &gVerbose);
	parser->Add("q", "quiet", true, false, false, EnableQuietMode, &gQuiet);
	parser->Add("f", "config", true, false, true, SetConfigFile, &configfile);
	parser->Add("u", "unify", true, false, false, EnablePackageUnified, &unified);

	fprintf(stdout, "Seed Exporter (c) Danny Angelo Carminati Grein 2008\n");
	if (!parser->Parse(argc, argv, true))
	{
		fprintf(stdout, "\nusage: %s -i [input xml] -p [platform] [params]\n\n", argv[0]);
		fprintf(stdout, "PARAMS\n");
		fprintf(stdout, "\t\t-f, --config\tUse this config file as config.xml\n");
		fprintf(stdout, "\t\t-r, --rebuild\tRebuild all files.\n");
		fprintf(stdout, "\t\t-k, --packages\tCreate group packages.\n");
		fprintf(stdout, "\t\t-d, --add_resources\tAdd resources to the package files.\n");
		fprintf(stdout, "\t\t-u, --unify\tUnify packages in one output only.\n");
		fprintf(stdout, "\t\t-a [value], --alignment [value]\tOutput data alignment.\n");
		fprintf(stdout, "\t\t-c, --compress\tEnable output data compression.\n");
		fprintf(stdout, "\t\t-t, --tree\tBuild directory structure only (not implemented!)\n");
		fprintf(stdout, "\t\t-v, --verbose\tVerbose mode.\n");
		fprintf(stdout, "\t\t-q, --quiet\tQuiet mode.\n");
		fprintf(stdout, "\n");

		return EXIT_FAILURE;
	}

	e->bfsExeName = bfs::path(argv[0]);
	e->Process(configfile, xmlfile, platform, rebuild, packages, alignment, compression, resources, unified);

	return EXIT_SUCCESS;
}
Beispiel #3
0
// Parses the command line given in a form the main() function received it.
// Returns: success?
// On success, public member variables shall contain interpreted 
// (validated) program parameters.
bool Options::ParseCmdLine(int argc, char* argv[]) {
	// zeroth, ensure fallback to the defaults..
	Reset();

	// first, try to read options from the default configuration file..
	FILE* in = fopen(INPUT, "r");
	if (in) {
		fclose(in);
		ParseConfigFile(INPUT, false);
	}

	// than, update those options with options from command-line..
	// ..and user-specified config files..
	CmdLineParser cmdline = cmdline_prototype;
	if (!cmdline.Parse(argc, argv)) {
		fprintf(stderr, "Command line syntax error!\n");
		fprintf(stderr, "Type '%s --help' for more information. \n", argv[0]);
		return false;
	}
	Store(cmdline);

	// at last, validate all stored options..
	return Validate();
}