static void asSetSubstitutionsCallFunc(const iocshArgBuf *args) { asSetSubstitutions(args[0].sval); }
int main(int argc, char *argv[]) { char *dbd_file = const_cast<char*>(base_dbd); char *macros = NULL; char xmacro[PVNAME_STRINGSZ + 4]; int startIocsh = 1; /* default = start shell */ int loadedDb = 0; arg0 = strrchr(*argv, '/'); if (!arg0) { arg0 = *argv; } else { ++arg0; /* skip the '/' */ } --argc, ++argv; /* Do this here in case the dbd file not available */ if (argc>0 && **argv=='-' && (*argv)[1]=='h') { usage(EXIT_SUCCESS); } if (argc>1 && **argv=='-' && (*argv)[1]=='D') { dbd_file = *++argv; argc -= 2; ++argv; } if (dbLoadDatabase(dbd_file, NULL, NULL)) { epicsExit(EXIT_FAILURE); } softIocPVA_registerRecordDeviceDriver(pdbbase); registryFunctionAdd("exit", (REGISTRYFUNCTION) exitSubroutine); while (argc>1 && **argv == '-') { switch ((*argv)[1]) { case 'a': if (macros) asSetSubstitutions(macros); asSetFilename(*++argv); --argc; break; case 'd': if (dbLoadRecords(*++argv, macros)) { epicsExit(EXIT_FAILURE); } loadedDb = 1; --argc; break; case 'h': usage(EXIT_SUCCESS); case 'm': macros = *++argv; --argc; break; case 'S': startIocsh = 0; break; case 's': break; case 'x': epicsSnprintf(xmacro, sizeof xmacro, "IOC=%s", *++argv); if (dbLoadRecords(exit_db, xmacro)) { epicsExit(EXIT_FAILURE); } loadedDb = 1; --argc; break; default: printf("%s: option '%s' not recognized\n", arg0, *argv); usage(EXIT_FAILURE); } --argc; ++argv; } if (argc>0 && **argv=='-') { switch((*argv)[1]) { case 'a': case 'd': case 'm': case 'x': printf("%s: missing argument to option '%s'\n", arg0, *argv); usage(EXIT_FAILURE); case 'h': usage(EXIT_SUCCESS); case 'S': startIocsh = 0; break; case 's': break; default: printf("%s: option '%s' not recognized\n", arg0, *argv); usage(EXIT_FAILURE); } --argc; ++argv; } if (loadedDb) { iocInit(); epicsThreadSleep(0.2); } /* run user's startup script */ if (argc>0) { if (iocsh(*argv)) epicsExit(EXIT_FAILURE); epicsThreadSleep(0.2); loadedDb = 1; /* Give it the benefit of the doubt... */ } /* start an interactive shell if it was requested */ if (startIocsh) { iocsh(NULL); } else { if (loadedDb) { epicsThreadExitMain(); } else { printf("%s: Nothing to do!\n", arg0); usage(EXIT_FAILURE); } } epicsExit(EXIT_SUCCESS); /*Note that the following statement will never be executed*/ return 0; }