/*-------------------------------------------------------------------------- THE SICS SERVER This file contains the main entry point into the world of SICS. Mark Koennecke, October 1996 Copyright: see copyright.h Labor fuer Neutronenstreuung Paul Scherrer Institut CH-5423 Villigen-PSI ----------------------------------------------------------------------------*/ #include #include #include #include #include "nserver.h" #include "servlog.h" /***************************** Necessary Globals ****************************/ IPair *pSICSOptions = NULL; pServer pServ = NULL; const char *argv0; /* ========================= Less dreadful file statics =================== */ #define DEFAULTINIFILE "servo.tcl" int usage(const char *name) { fprintf(stderr, "usage: %s [-d] [-nolog] \n", name); fprintf(stderr, " -d: daemonize the process\n"); fprintf(stderr, " -nolog: disable log file writing\n"); return 1; } /*--------------------------------------------------------------------------- The Servers Main program. May take one argument: the name of an initialisation file */ int main(int argc, char *argv[]) { int iRet; int daemonize = 0; char *file = NULL; int i, firstArg = 1; argv0 = argv[0]; if (argc < 2) return usage(argv[0]); /* initialise, will die on you if problems */ for (i = firstArg; i < argc; i++) { if (argv[i][0] == '-') { if (strcasecmp(argv[i], "-nolog") == 0) { SICSLogEnable(0); } else if (strcasecmp(argv[i], "-d") == 0) { daemonize = 1; } else { fprintf(stderr, "Unrecognized option ignored: %s\n", argv[i]); } } else if (file == NULL) { file = argv[i]; } else { fprintf(stderr, "Unrecognized argument ignored: %s\n", argv[i]); } } if (file == NULL) return usage(argv[0]); iRet = InitServer(file, &pServ); if (!iRet) { printf("Unrecoverable error on server startup, exiting.........\n"); exit(1); } if (daemonize == 1) daemon(1, 1); RunServer(pServ); StopServer(pServ); pServ = NULL; exit(0); } /*--------------------------------------------------------------------------*/ SicsInterp *GetInterpreter(void) { return pServ->pSics; } /*--------------------------------------------------------------------------*/ pExeList GetExecutor(void) { return pServ->pExecutor; } /*------------------------------------------------------------------------*/ void StopExit(void) { if (pServ) { StopServer(pServ); } } /*-------------------------------------------------------------------------*/ pTaskMan GetTasker(void) { return pServ->pTasker; }