コード例 #1
0
ファイル: command.cpp プロジェクト: EJDomi/psi46test-1
bool CInterpreter::run(FILE *f, int iter)
{
	if (iter > 20) return false;

	bool interactive = f==stdin;

	cmdline.setInteractive(interactive);
	while (true)
	{
		if (!cmdline.read(f)) break;
		if (cmdline.getName()[0] == 0) continue;   // empty line
		if (cmdline.getName()[0] == '-') continue; // comment
		CCommand *p = cmdList.Find(cmdline.getName());
		if (p) { p->m_exec(cmdline); }
		else if (cmdline.isCmd("help")) help();
		else if (cmdline.isCmd("exit")) break;
		else
		{
			char *fname = new char[CMDLINELENGTH+256+8];
			strcpy(fname,scriptPath);
#ifdef _WIN32
			strcat(fname, "\\");
#else
			strcat(fname, "/");
#endif
			strcat(fname,cmdline.getName());
			strcat(fname,".roc");
			FILE *cf = fopen(fname, "rt");
			delete[] fname;
			if (cf)
			{
				run(cf, iter+1);
				fclose(cf);
				cmdline.setInteractive(interactive);
			}
			else printf("unknown command \"%s\"!\n", cmdline.getName());
		}
	}
	return true;
}