Mega Code Archive

 
Categories / C / Development
 

Parse Arguements

/* Practical C Programming, Third Edition By Steve Oualline Third Edition August 1997  ISBN: 1-56592-306-5 Publisher: O'Reilly */ /* This program is an example of how to parse    *  * the command line arguments.  It sets up all the  *  * global variables for a real program, it just doesn't  *  * have any body.          *  **/ /* Program: Print          *  *              *  * Purpose:            *  *  Formats files for printing      *  *              *  * Usage:            *  *  print [options] file(s)        *  *              *  * Options:            *  *  -v    Produce versbose messages  *  *  -o<file>  Send output to a file     *  *      (default=print.out)    *  *  -l<lines>  Set the number of lines/page.  *  *      (default=66).      *  */ #include <stdio.h> #include <stdlib.h>       int verbose = 0;         /* verbose mode (default = false) */ char *out_file = "print.out";   /* output filename */ char *program_name;      /* name of the program (for errors) */ int line_max = 66;       /* number of lines per page */ /*  * do_file -- dummy routine to handle a file            *  *                                                      *  * Parameter                                            *  *      name -- name of the file to print               *  */ void do_file(char *name) {     printf("Verbose %d Lines %d Input %s Output %s\n",         verbose, line_max, name, out_file); } /*  * usage -- tell the user how to use this program and   *  *              exit                                    *  */ void usage(void) {     fprintf(stderr,"Usage is %s [options] [file-list]\n",                                  program_name);     fprintf(stderr,"Options\n");     fprintf(stderr,"  -v          verbose\n");     fprintf(stderr,"  -l<number>  Number of lines\n");     fprintf(stderr,"  -o<name>    Set output filename\n");     exit (8); } int main(int argc, char *argv[]) {     /* save the program name for future use */     program_name = argv[0];     /*       * loop for each option.        *   Stop if we run out of arguments      *   or we get an argument without a dash.      */     while ((argc > 1) && (argv[1][0] == '-')) {         /*          * argv[1][1] is the actual option character.          */         switch (argv[1][1]) {             /*              * -v verbose               */             case 'v':                 verbose = 1;                  break;             /*              * -o<name>  output file              *    [0] is the dash              *    [1] is the "o"              *    [2] starts the name              */             case 'o':                 out_file = &argv[1][2];                 break;             /*              * -l<number> set max number of lines              */             case 'l':                 line_max = atoi(&argv[1][2]);                 break;             default:                 fprintf(stderr,"Bad option %s\n", argv[1]);                 usage();         }         /*          * move the argument list up one          * move the count down one          */         ++argv;         --argc;     }     /*      * At this point all the options have been processed.      * Check to see if we have no files in the list      * and if so, we need to process just standard in.      */     if (argc == 1) {         do_file("print.in");     } else {         while (argc > 1) {           do_file(argv[1]);           ++argv;           --argc;         }     }     return (0); }