+ int iReturn = 0;
+
+ if (argc > 1 && (strcmp(s_szProgramName, fileBasename (argv[0])) == 0 || strcmp(s_szProgramName2, fileBasename (argv[0])) == 0 || strcmp(s_szProgramName3, fileBasename (argv[0])) == 0)) {
+ argv++;
+ argc--;
+ iReturn = processCommand (argc, argv);
+ } else if (argc >= 1 && ! (strcmp(s_szProgramName, fileBasename (argv[0])) == 0 || strcmp(s_szProgramName2, fileBasename (argv[0])) == 0 || strcmp(s_szProgramName3, fileBasename (argv[0])) == 0)) {
+ iReturn = processCommand (argc, argv);
+ } else {
+ s_bInteractive = true;
+ char szPrompt[] = "CTSim> ";
+ std::cout << "CTSim Text Shell";
+#ifdef VERSION
+ std::cout << ", Version " << VERSION;
+#endif
+ std::cout << " (Type \"quit\" to end)\n\n";
+
+ while (1) {
+#ifdef HAVE_READLINE
+ char* pszInputLine = readline (szPrompt);
+ if (! pszInputLine)
+ break;
+ if (*pszInputLine != EOS)
+ add_history (pszInputLine);
+
+#else // DONT_HAVE_READLINE
+
+ static const int s_MaxLineLength = 1024;
+ char* pszInputLine = new char [s_MaxLineLength+1];
+ std::cout << szPrompt;
+ std::cin.getline (pszInputLine, s_MaxLineLength);
+
+#ifdef DEBUG
+ std::cout << "#" << pszInputLine << "#\n";
+#endif
+
+ std::cout << std::flush;
+ std::cout << "\n";
+#endif // DONT_HAVE_READLINE
+
+ if (strncasecmp (pszInputLine, "quit", 4) == 0)
+ break;
+
+ convertStringToArgcv (pszInputLine, &argc, &argv);
+#ifdef DEBUG
+ for (unsigned int i = 0; i < argc; i++)
+ std::cout << "Token " << i << ": " << argv[i] << "\n";
+#endif
+ iReturn = processCommand (argc, argv);
+
+ delete pszInputLine;
+ }