Revision 9c69afef
Added by Hamish Coleman almost 17 years ago
- ID 9c69afef574e321319fdb191753636703c3bcfbc
| scm.h | ||
|---|---|---|
|
struct SCM_def {
|
||
|
char *name;
|
||
|
char *desc;
|
||
|
int mode; /* set to SVC_CONSOLE by the *-scm.c code */
|
||
|
int (*init)(int, char **);
|
||
|
int (*main)(int);
|
||
|
int (*stop)(int);
|
||
|
int mode; /* set to SVC_CONSOLE by the *-scm.c code */
|
||
|
int (*init)(int, char **); /* called before main */
|
||
|
int (*main)(int); /* called to run the service */
|
||
|
int (*stop)(int); /* called by scm to tell the service to stop */
|
||
|
};
|
||
|
|
||
|
int SCM_Start(struct SCM_def *);
|
||
|
int SCM_Start(struct SCM_def *, int argc, char **argv);
|
||
|
char *SCM_Install(struct SCM_def *);
|
||
|
int SCM_Remove(struct SCM_def *);
|
||
|
|
||
| wconsd.c | ||
|---|---|---|
|
int wconsd_main(int param1);
|
||
|
int wconsd_stop(int param1);
|
||
|
struct SCM_def sd = {
|
||
|
"wconsd","wconsd - Telnet to Serial server",
|
||
|
wconsd_init, wconsd_main, wconsd_stop
|
||
|
.name = "wconsd",
|
||
|
.desc = "wconsd - Telnet to Serial server",
|
||
|
.init = wconsd_init,
|
||
|
.main = wconsd_main,
|
||
|
.stop = wconsd_stop,
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* output from OutputDebugStringA can be seen using sysinternals debugview
|
||
|
* http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
|
||
|
* http://live.sysinternals.com/Dbgview.exe
|
||
|
*/
|
||
|
|
||
|
/*
|
||
| ... | ... | |
|
WSADATA wsaData;
|
||
|
int err;
|
||
|
|
||
|
if (sd->mode==SVC_CONSOLE) {
|
||
|
if (sd.mode==SVC_CONSOLE) {
|
||
|
/* We are running in a command-line mode */
|
||
|
dprintf_to_stdout=1;
|
||
|
|
||
| win-scm.c | ||
|---|---|---|
|
return;
|
||
|
}
|
||
|
|
||
|
int SCM_Start_Console(const int argc, const char **argv) {
|
||
|
int SCM_Start_Console(int argc, char **argv) {
|
||
|
|
||
|
global_sd->mode=SVC_CONSOLE;
|
||
|
int err = sd->init(argc,argv);
|
||
|
int err = global_sd->init(argc,argv);
|
||
|
if (err!=0) {
|
||
|
printf("SCM_Start_Console: init failed, return code %d\n",err);
|
||
|
return SVC_FAIL;
|
||
|
}
|
||
|
|
||
|
sd->main(0);
|
||
|
global_sd->main(0);
|
||
|
return SVC_OK;
|
||
|
}
|
||
|
|
||
|
int SCM_Start(struct SCM_def *sd, const int argc, const char **argv) {
|
||
|
int SCM_Start(struct SCM_def *sd, int argc, char **argv) {
|
||
|
SERVICE_TABLE_ENTRY ServiceTable[] = {
|
||
|
{ "", ServiceMain },
|
||
|
{ NULL, NULL }
|
||
| ... | ... | |
|
/* If we have commandline args, then we cannot have been started
|
||
|
* by the Windows SCM
|
||
|
*/
|
||
|
if (argc<2) {
|
||
|
if (argc>1) {
|
||
|
return SCM_Start_Console(argc,argv);
|
||
|
}
|
||
|
|
||
Also available in: Unified diff
Fix the bugs with the new scm console code