diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 127 |
1 files changed, 127 insertions, 0 deletions
@@ -0,0 +1,127 @@ + +/* + main.c + + Copyright (C) 2004 Jeremy Zurcher + + This is a free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with libdaemon; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "main.h" + +static char *prog_name = NULL; + +static void usage(void) +{ + fprintf(stderr,"\n/*\n *\t=> %s <= version "VERSION", "COPYRIGHT"\n *\n",prog_name); + fprintf(stderr," *\t\tThis program is a free software; you can redistribute it and/or modify\n"); + fprintf(stderr," *\t\tit under the terms of the GNU General Public License as published by\n"); + fprintf(stderr," *\t\tthe Free Software Foundation; either version 2 of the License, or\n"); + fprintf(stderr," *\t\t(at your option) any later version.\n *\n"); + fprintf(stderr," *\t\tThis program is distributed in the hope that it will be useful,\n"); + fprintf(stderr," *\t\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n"); + fprintf(stderr," *\t\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); + fprintf(stderr," *\t\tGNU General Public License for more details.\n"); + fprintf(stderr," */\n\n"); + + fprintf(stderr,"usage : %s [-v] [ -a argument ]\n",prog_name); + fprintf(stderr,"\t\t--version : print version\n"); + fprintf(stderr,"\t\t--help : print this screen\n"); + fprintf(stderr,"\t\t-v : verbose mode\n"); + fprintf(stderr,"\t\t-a : an argument\n"); + exit(EXIT_FAILURE); +} + +static void version() +{ + fprintf(stderr,"%s version "VERSION", "COPYRIGHT"\n",prog_name); + exit(EXIT_FAILURE); +} + +static void argv_err(int i, char *opt, char *arg) +{ + if(i<0) fprintf(stderr,"%s : unknown option -%s.\n",prog_name,opt); + else if(i==0) fprintf(stderr,"%s : -%s option, argument is mandatory.\n",prog_name,opt); + else fprintf(stderr,"%s : -%s option, wrong argument %s.\n",prog_name,opt,arg); + exit(EXIT_FAILURE); +} + +int main(int argc, char **argv) +{ + int verbose = 0; + char *arg = NULL; + + char *tmp = NULL; + + /* eat progname */ + prog_name = basename(*argv); + ++argv; + --argc; + while(argc){ + tmp = *argv; + if(*tmp=='-'){ + tmp++; + if(*tmp=='-'){ + /* long options */ + tmp++; + if(!strncmp(tmp,"help",5)) usage(); + else if(!strncmp(tmp,"version",8)) version(); + else argv_err(-1,tmp-1,NULL); + } + /* short otions */ + else if(*tmp=='v') { + verbose = 1; + } + else if(*tmp=='a') { + if(!--argc) argv_err(0,"a",NULL); /* need argument */ + arg = *++argv; + } + else { + argv_err(-1,*argv,NULL); /* unknown option */ + } + } + else { + /* no (more) options */ + break; + } + argc--; + argv++; + } + + printf("-v : %d\n",verbose); + printf("-a : %s\n",arg); + + while(argc--) printf("argument : %s\n",*argv++); + + exit(EXIT_SUCCESS); +} + |