コード例 #1
0
ファイル: rpcgen.cpp プロジェクト: mverzocc/psi46exp
int main(int argc, char* argv[])
{
	char *srcFileName = 0;
	char *dtbFileName = 0;
	char *hstFileName = 0;

	// --- read command line parameter --------------------------------------
	if (argc < 2 || argc > 4) { Help("Wong number of arguments"); return 1; }
	srcFileName = argv[1];
	if (srcFileName == 0) { Help(); return 1; }
	for (int i=2; i<argc; i++)
	{
		if (argv[i][0] != '-') Help("Wrong argument");
		switch (argv[i][1])
		{
			case 'd': dtbFileName = &(argv[i][2]); break;
			case 'h': hstFileName = &(argv[i][2]); break;
			default: Help("Wong argument opti"); return 1;
		}
	}

	CreateTimeStamp();

	// --- analyze C++ file ------------------------------------------
	FILE *f;
	functList cmdList;

	CppParser parser;
	try
	{
		parser.Open(srcFileName);
		while(true)
		{
			parser.GetRpcExport();
			parser.GetFunctionDecl();
			cmdList.push_back(parser.GetFname() + '$' + parser.GetFparam());

			printf("%s$%s\n", parser.GetFname().c_str(), parser.GetFparam().c_str());
		}
	}
	catch (CPError e)
	{
		if (e.error != CPError::END_OF_FILE) { e.What(); return 1; }
	}
	parser.Close();

	// --- create server functions
	if (dtbFileName)
	{
		f = fopen(dtbFileName, "wt");
		if (!f) { printf("ERROR: could not create DTB code file\n"); return 1; }
		GenerateServerCodeHeader(f);
		GenerateServerCode(cmdList, f);
		GenerateServerCodeTrailer(cmdList, f);
		fclose(f);
	}

	// generate host functions
	if (hstFileName)
	{
		f = fopen(hstFileName, "wt");
		if (!f) { printf("ERROR: could not create host code file\n"); return 2; }
		GenerateClientCodeHeader(cmdList, f);
		GenerateClientCode(cmdList, f);
		fclose(f);
	}

	//	system("pause");
	return 0;
}