home *** CD-ROM | disk | FTP | other *** search
/ gdead.berkeley.edu / gdead.berkeley.edu.tar / gdead.berkeley.edu / pub / cad-tools / ciftomann.tar / pggen_dir / get_args.c < prev    next >
C/C++ Source or Header  |  1988-01-28  |  3KB  |  179 lines

  1. #include <stdio.h>
  2.  
  3. extern int debug;
  4. extern int center;
  5. extern int silent;
  6.  
  7. extern int x_trans;
  8. extern int y_trans;
  9. extern int x_center;
  10. extern int y_center;
  11.  
  12. extern char *name;
  13.  
  14. extern FILE *infile;
  15.  
  16. FILE *fopen();
  17.  
  18. #define USAGE "Usage : pggen [-s] [-n name] [-c x_center y_center] [-t x_offset y_offset] input_file\n"
  19.  
  20.     /* get_args parses the command line arguments */
  21.  
  22. get_args(argc,argv)
  23. int argc;
  24. char **argv;
  25. {
  26.     char *ptr;
  27.     int t_used = 0;
  28.  
  29.     if (argc == 1) {
  30.     fprintf(stderr,USAGE);
  31.     exit(1);
  32.     }
  33.  
  34.     while ( argc-- > 1 ) {
  35.  
  36.     if (*(++argv)[0] == '-') {
  37.  
  38.         ptr = argv[0];
  39.  
  40.         switch (ptr[1]) {
  41.  
  42.         case 't' :
  43.  
  44.             if ( ptr[2] != '\0' || argc < 3 ) {
  45.             fprintf(stderr,USAGE);
  46.             exit(1);
  47.             }
  48.  
  49.             t_used++;
  50.             
  51.             if ( center ) {
  52.             fprintf(stderr,"t and c options may not be used at the same time\n");
  53.             exit(1);
  54.             }
  55.  
  56.             if ( sscanf(*++argv,"%d",&x_trans) != 1 || 
  57.                 sscanf(*++argv,"%d",&y_trans) != 1 ) {
  58.  
  59.             fprintf(stderr,"Offsets must be integers\n");
  60.             fprintf(stderr,USAGE);
  61.             exit(1);
  62.             }
  63.  
  64.             argc -= 2;
  65.             break;
  66.  
  67.  
  68.         case 'c' :
  69.  
  70.             if ( ptr[2] != '\0' || argc < 3 ) {
  71.             fprintf(stderr,USAGE);
  72.             exit(1);
  73.             }
  74.  
  75.             center++;
  76.             
  77.             if ( t_used ) {
  78.             fprintf(stderr,"t and c options may not be used at the same time\n");
  79.             exit(1);
  80.             }
  81.  
  82.             if ( sscanf(*++argv,"%d",&x_center) != 1 || 
  83.                 sscanf(*++argv,"%d",&y_center) != 1 ) {
  84.  
  85.             fprintf(stderr,"center coordinates must be integers\n");
  86.             fprintf(stderr,USAGE);
  87.             exit(1);
  88.             }
  89.  
  90.             argc -= 2;
  91.             break;
  92.  
  93.         case 'n' :
  94.             
  95.             if ( argc < 2 ) {
  96.             fprintf("Name missing in '-n name'\n");
  97.             fprintf(stderr,USAGE);
  98.             exit(1);
  99.             }
  100.             name = *++argv;
  101.             argc--;
  102.             break;
  103.  
  104.         default :
  105.  
  106.             while ( *(++ptr) != '\0' ) {
  107.             
  108.             switch (*ptr) {
  109.                 
  110.                 case 'D' :
  111.                 
  112.                 debug++;
  113.                 break;
  114.                 
  115.                 case 's' :
  116.  
  117.                 silent++;
  118.                 break;
  119.  
  120.                 default :
  121.                 
  122.                 fprintf(stderr,"Unknown flag %c\n",*ptr);
  123.                 fprintf(stderr,USAGE);
  124.                 exit(1);
  125.             }
  126.             }
  127.         }
  128.     } else {
  129.         
  130.         char *infile_name = argv[0];
  131.  
  132.         if ( (infile = fopen(infile_name,"r")) == NULL ) {
  133.         fprintf(stderr,"Cannot open the input file %s\n",
  134.             argv[0]);
  135.         fprintf(stderr,USAGE);
  136.         exit(1);
  137.         }
  138.  
  139.         if ( *(++argv) != 0 ) {
  140.         fprintf(stderr,"Extra characters after the input file\n");
  141.         fprintf(stderr,USAGE);
  142.         exit(1);
  143.         }
  144.  
  145.         return;
  146.     }
  147.     }
  148.     
  149.     fprintf(stderr,"No input_file given\n");
  150.     fprintf(stderr,USAGE);
  151.     exit(1);
  152. }
  153.  
  154. #define IS_DIGIT(c) ( (c) >='0' && (c) <='9' )
  155.  
  156. atoi(string,int_ptr)
  157. char *string;
  158. int *int_ptr;
  159. {
  160.     *int_ptr = 0;
  161.  
  162.     if ( (string == (char *) 0) || *string == '\0' ) {
  163.     return(0);
  164.     }
  165.  
  166.     while ( *string != '\0' ) {
  167.  
  168.     if ( IS_DIGIT(*string) ) {
  169.         *int_ptr += *string - '0';
  170.     } else {
  171.         return(0);
  172.     }
  173.  
  174.     string++;
  175.     }
  176.  
  177.     return(1);
  178. }
  179.