tool/main.cpp
changeset 1158 f65164fa4a58
parent 1151 1fc1535dec29
child 1165 c5d6e28eec91
equal deleted inserted replaced
1157:04d1c950cf9d 1158:f65164fa4a58
    93 
    93 
    94 /*****************************************************************************/
    94 /*****************************************************************************/
    95 
    95 
    96 void getOptions(int argc, char **argv)
    96 void getOptions(int argc, char **argv)
    97 {
    97 {
    98     int c, argCount, optionIndex, number;
    98     int c, argCount;
    99 	char *remainder;
    99     stringstream str;
   100 
   100 
   101     static struct option longOptions[] = {
   101     static struct option longOptions[] = {
   102         //name,      has_arg,           flag, val
   102         //name,      has_arg,           flag, val
   103         {"master",   required_argument, NULL, 'm'},
   103         {"master",   required_argument, NULL, 'm'},
   104         {"alias",    required_argument, NULL, 'a'},
   104         {"alias",    required_argument, NULL, 'a'},
   111         {"help",     no_argument,       NULL, 'h'},
   111         {"help",     no_argument,       NULL, 'h'},
   112         {}
   112         {}
   113     };
   113     };
   114 
   114 
   115     do {
   115     do {
   116         c = getopt_long(argc, argv, "m:a:p:d:t:fqvh",
   116         c = getopt_long(argc, argv, "m:a:p:d:t:fqvh", longOptions, NULL);
   117                 longOptions, &optionIndex);
       
   118 
   117 
   119         switch (c) {
   118         switch (c) {
   120             case 'm':
   119             case 'm':
   121                 number = strtoul(optarg, &remainder, 0);
   120                 str.clear();
   122                 if (remainder == optarg || *remainder || number < 0) {
   121                 str.str("");
       
   122                 str << optarg;
       
   123                 str >> resetiosflags(ios::basefield) // guess base from prefix
       
   124                     >> masterIndex;
       
   125                 if (str.fail() || masterIndex < 0) {
   123                     cerr << "Invalid master number " << optarg << "!" << endl
   126                     cerr << "Invalid master number " << optarg << "!" << endl
   124                         << endl << usage();
   127                         << endl << usage();
   125                     exit(1);
   128                     exit(1);
   126                 }
   129                 }
   127 				masterIndex = number;
       
   128                 break;
   130                 break;
   129 
   131 
   130             case 'a':
   132             case 'a':
   131                 if (!strcmp(optarg, "all")) {
   133                 str.clear();
   132                     slaveAlias = -1;
   134                 str.str("");
   133                 } else {
   135                 str << optarg;
   134                     number = strtoul(optarg, &remainder, 0);
   136                 str >> resetiosflags(ios::basefield) // guess base from prefix
   135                     if (remainder == optarg || *remainder
   137                     >> slaveAlias;
   136                             || number < 0 || number > 0xFFFF) {
   138                 if (str.fail() || slaveAlias < 0 || slaveAlias > 0xFFFF) {
   137                         cerr << "Invalid slave alias " << optarg << "!"
   139                     cerr << "Invalid slave alias " << optarg << "!" << endl
   138                             << endl << endl << usage();
   140                         << endl << usage();
   139                         exit(1);
   141                     exit(1);
   140                     }
       
   141                     slaveAlias = number;
       
   142                 }
   142                 }
   143                 break;
   143                 break;
   144 
   144 
   145             case 'p':
   145             case 'p':
   146                 if (!strcmp(optarg, "all")) {
   146                 str.clear();
   147                     slavePosition = -1;
   147                 str.str("");
   148                 } else {
   148                 str << optarg;
   149                     number = strtoul(optarg, &remainder, 0);
   149                 str >> resetiosflags(ios::basefield) // guess base from prefix
   150                     if (remainder == optarg || *remainder
   150                     >> slavePosition;
   151                             || number < 0 || number > 0xFFFF) {
   151                 if (str.fail()
   152                         cerr << "Invalid slave position " << optarg << "!"
   152                         || slavePosition < 0 || slavePosition > 0xFFFF) {
   153                             << endl << endl << usage();
   153                     cerr << "Invalid slave position " << optarg << "!" << endl
   154                         exit(1);
   154                         << endl << usage();
   155                     }
   155                     exit(1);
   156                     slavePosition = number;
       
   157                 }
   156                 }
   158                 break;
   157                 break;
   159 
   158 
   160             case 'd':
   159             case 'd':
   161                 if (!strcmp(optarg, "all")) {
   160                 str.clear();
   162                     domainIndex = -1;
   161                 str.str("");
   163                 } else {
   162                 str << optarg;
   164                     number = strtoul(optarg, &remainder, 0);
   163                 str >> resetiosflags(ios::basefield) // guess base from prefix
   165                     if (remainder == optarg || *remainder || number < 0) {
   164                     >> domainIndex;
   166                         cerr << "Invalid domain index "
   165                 if (str.fail() || domainIndex < 0) {
   167 							<< optarg << "!" << endl << endl << usage();
   166                     cerr << "Invalid domain index " << optarg << "!" << endl
   168                         exit(1);
   167                         << endl << usage();
   169                     }
   168                     exit(1);
   170                     domainIndex = number;
       
   171                 }
   169                 }
   172                 break;
   170                 break;
   173 
   171 
   174             case 't':
   172             case 't':
   175                 dataTypeStr = optarg;
   173                 dataTypeStr = optarg;