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; }