Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.12 KB | None | 0 0
  1. #include <string.h>
  2. #include "parser_tp0.h"
  3.  
  4. #define VERSION1 "-V"
  5. #define VERSION2 "--version"
  6. #define HELP1 "-h"
  7. #define HELP2 "--help"
  8. #define INPUT1 "-i"
  9. #define INPUT2 "--input"
  10. #define OUTPUT1 "-o"
  11. #define OUTPUT2 "--output"
  12. #define ACTION1 "-a"
  13. #define ACTION2 "--action"
  14.  
  15. //util
  16.  
  17. //define+declarations
  18. #define UNKNOWN_CMD "\"%s\" is not a known command.\n"
  19. #define INVALID_OPT "\"%s\" is not a valid %s.\n"
  20. #define EXPECTED_OPT "Expected an argument after \"%s\".\n"
  21.  
  22. void set_default(run_data_t* rd){
  23.     rd->error_flag= 0;
  24.     rd->is_decode = 0;
  25.     rd->print_help = 0;
  26.     rd->print_version = 0;
  27.     rd->input="-";
  28.     rd->output="-";
  29. }
  30.  
  31. char set_action(run_data_t* rd, char* arg){
  32.     if(!strcmp(arg,"encode")){
  33.         rd->is_decode = 0;
  34.         return 0;
  35.     }
  36.     if(!strcmp(arg,"decode")){
  37.         rd->is_decode = 1;
  38.         return 0;
  39.     }
  40.     return 1;
  41. }
  42.  
  43.  
  44. void parse_cmd(run_data_t* rd, int argc, char* argv[]){
  45.     char went_wrong=0; 
  46.     for(int i = 1; i<argc; i++){    //parsing loop
  47.         if(!strcmp(argv[i],VERSION1) || !strcmp(argv[i],VERSION2)){ //version
  48.             rd->print_version=1;
  49.             continue;
  50.         }
  51.         if(!strcmp(argv[i],HELP1) || !strcmp(argv[i],HELP2)){ //help
  52.             rd->print_help=1;
  53.             continue;
  54.         }
  55.         if(!strcmp(argv[i],ACTION1) || !strcmp(argv[i],ACTION2)){ //action
  56.             if((i+1)==argc){
  57.                     fprintf(stderr,EXPECTED_OPT,argv[i]);
  58.                     went_wrong=1;
  59.                     break;
  60.             }
  61.             if(set_action(rd,argv[i+1])){
  62.                     fprintf(stderr,INVALID_OPT,argv[i+1],"action");
  63.                     went_wrong=1;
  64.                     break;
  65.             }
  66.             i++;
  67.             continue;
  68.         }
  69.         if(!strcmp(argv[i],INPUT1) || !strcmp(argv[i],INPUT2)){ //input
  70.             if((i+1)==argc){
  71.                     fprintf(stderr,EXPECTED_OPT,argv[i]);
  72.                     went_wrong=1;
  73.                     break;
  74.             }
  75.             rd->input = argv[i+1];
  76.             i++;
  77.             continue;
  78.         }
  79.         if(!strcmp(argv[i],OUTPUT1) || !strcmp(argv[i],OUTPUT2)){ //output
  80.             if((i+1)==argc){
  81.                     fprintf(stderr,EXPECTED_OPT,argv[i]);
  82.                     went_wrong=1;
  83.                     break;
  84.             }
  85.             rd->output = argv[i+1];
  86.             i++;
  87.             continue;
  88.         }
  89.         //not recognized
  90.         fprintf(stderr,UNKNOWN_CMD,argv[i]);
  91.         went_wrong=1;
  92.         break;
  93.     }
  94.     if(went_wrong){
  95.         set_default(rd);
  96.         rd->error_flag=1;      
  97.         rd->print_help=1;
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement