Project

General

Profile

« Previous | Next » 

Revision de212a70

Added by Hamish Coleman almost 16 years ago

  • ID de212a70f6254cb08cd63ba2a6af64e0bd344ebd

Move to getopt commandline processing

View differences:

wconsd.c
#include <winsvc.h>
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include "scm.h"
......
conn->serialThread=NULL;
}
static void usage(const char *name, struct option *option)
{
printf("Usage: %s [-i pathname | -r | -d | -p port ]\n",name);
printf("Just start with no options to start server\n");
printf(" -i install service 'wconsd'\n");
printf(" -r remove service 'wconsd'\n");
printf(" -d run wconsd in foreground mode\n");
printf(" -p port listen on the given port in foreground mode\n");
printf("\n");
while(option->name) {
printf("--%s%s ",option->name,option->has_arg?"=VAL":"");
option++;
}
printf("\n\n");
}
#define GETOPT_INIT 1
#define GETOPT_SCMINIT 2
static int do_getopt(const int whence, const int argc, char **argv) {
static struct option long_options[] = {
{"install", 0, 0, 'i'},
{"remove", 0, 0, 'r'},
{"debug", 2, 0, 'd'},
{"port", 1, 0, 'p'},
{0,0,0,0}
};
while(1) {
int c = getopt_long(argc,argv, "ird::p:",
long_options,NULL);
if (c==-1)
break;
switch(c) {
case 'i': {
/* request service installation */
char *path = SCM_Install(&sd);
if (!path) {
printf("Service installation failed\n");
return 1;
}
printf("Service '%s' installed, binary path '%s'\n",sd.name,path);
printf("You should now start the service using the service manager.\n");
return 0;
}
case 'r':
// request service removal
if (SCM_Remove(&sd)==0) {
printf("Deleted service '%s'\n",sd.name);
} else {
printf("Service removal failed\n");
}
return 0;
case 'd':
if (optarg) {
dprintf_level = atoi(optarg);
}
break;
case 'p':
if (optarg) {
default_tcpport = atoi(optarg);
}
break;
default:
usage("wconsd",long_options);
exit(EXIT_FAILURE);
}
}
return 1;
}
int wconsd_stop(int param1) {
SetEvent(stopEvent);
return 0;
......
WSADATA wsaData;
int err;
/* do_getopt(GETOPT_SCMINIT,argc,argv) */
/* Start up sockets */
wVersionRequested = MAKEWORD( 2, 2 );
......
return 0;
}
static void usage(void)
{
printf("Usage: wconsd [-i pathname | -r | -d | -p port ]\n");
printf("Just start with no options to start server\n");
printf(" -i install service 'wconsd'\n");
printf(" -r remove service 'wconsd'\n");
printf(" -d run wconsd in foreground mode\n");
printf(" -p port listen on the given port in foreground mode\n");
}
int main(int argc, char **argv)
{
DWORD err;
int console_application=0;
// debug info for when I test this as a service
dprintf(1,"wconsd: started with argc==%i\n",argc);
......
}
// fall through and try running as a command-line application
console_application=1;
}
// We are running in debug mode (or any other command-line mode)
......
dprintf(1,
" (see http://wob.zot.org/2/wiki/wconsd for more info)\n\n");
if (argc>1) {
if (strcmp(argv[1],"-i")==0) {
/* request service installation */
char *path = SCM_Install(&sd);
if (!path) {
printf("Service installation failed\n");
return 1;
}
printf("Service '%s' installed, binary path '%s'\n",sd.name,path);
printf("You should now start the service using the service manager.\n");
return 0;
} else if (strcmp(argv[1],"-r")==0) {
// request service removal
if (SCM_Remove(&sd)==0) {
printf("Deleted service '%s'\n",sd.name);
} else {
printf("Service removal failed\n");
return 1;
}
return 0;
} else if (strcmp(argv[1],"-p")==0) {
console_application=1;
if (argc>2) {
default_tcpport = atoi(argv[2]);
}
} else if (strcmp(argv[1],"-d")==0) {
console_application=1;
if (argc>2) {
dprintf_level = atoi(argv[2]);
}
} else {
usage();
return 1;
}
}
// if we have decided to run as a console app..
if (console_application) {
/* we have decided to run as a console app.. */
if (do_getopt(GETOPT_INIT,argc,argv)) {
int r;
dprintf(1,"wconsd: Foreground mode\n");
r=wconsd_init(argc,argv);
r=wconsd_init(0,NULL);
if (r!=0) {
dprintf(1,"wconsd: wconsd_init failed, return code %d\n",r);
return 1;

Also available in: Unified diff