Changeset 13575 for trunk/ippTools/src/dettoolConfig.c
- Timestamp:
- May 31, 2007, 12:44:19 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/ippTools/src/dettoolConfig.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/dettoolConfig.c
r13573 r13575 22 22 #endif 23 23 24 #include <string.h>25 26 24 #include <psmodules.h> 27 25 … … 29 27 #include "dettool.h" 30 28 31 #define PXTOOL_MODE(option, comment, modeval, argset) \ 32 { \ 33 if (!psMetadataAddMetadata(argSets, PS_LIST_TAIL, option, 0, comment, argset)) {;\ 34 psError(PS_ERR_UNKNOWN, false, "failed to add argset for %s", option); \ 35 } \ 36 psFree(argset); \ 37 \ 38 if (!psMetadataAddU32(modes, PS_LIST_TAIL, option, 0, comment, modeval)) {;\ 39 psError(PS_ERR_UNKNOWN, false, "failed to add argset for %s", option); \ 40 } \ 41 } 42 43 static void printUsage(int argc, char **argv, psMetadata *modes) 29 pxConfig *dettoolConfig(pxConfig *config, int argc, char **argv) 44 30 { 45 printf("Usage: %s <mode> [<options>]\n\n", argv[0]);46 printf("<mode>:\n");47 48 psArgumentHelpSimple(stderr, modes);49 }50 51 52 static void printUsageMode(int argc, char **argv, const char *modeName, psMetadata *argSet)53 {54 printf("Usage: %s <mode> [<options>]\n\n", argv[0]);55 printf("%s:\n", modeName);56 57 psArgumentHelpSimple(stderr, argSet);58 }59 60 61 static bool parseOptions(int argc, char **argv, pxConfig *config, psMetadata *modes, psMetadata *argSets)62 {63 // figure out what mode we're running in64 psMetadataIterator *iter = psMetadataIteratorAlloc(modes, PS_LIST_HEAD, NULL);65 psMetadataItem *item = NULL;66 while ((item = psMetadataGetAndIncrement(iter))) {67 int N = 0;68 if ((N = psArgumentGet(argc, argv, item->name))) {69 psArgumentRemove(N, &argc, argv);70 // check for duplicate mode specification71 if (config->mode) {72 psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed");73 fprintf(stderr, "only one mode selection is allowed\n");74 printUsage(argc, argv, modes);75 return NULL;76 }77 78 config->mode = item->data.U32;79 config->modeName = psStringCopy(item->name);80 81 bool status = false;82 psMetadata *argset = psMetadataLookupMetadata(&status, argSets, item->name);83 // make sure we can find the argSet for the sepcified mode84 if (!status) {85 psError(PS_ERR_UNKNOWN, true, "can not find arguments for mode");86 fprintf(stderr, "can not find arugments for mode");87 return NULL;88 }89 90 config->args = psMemIncrRefCounter(argset);91 }92 93 }94 95 psFree(iter);96 97 // make sure we found a mode98 if (config->mode == DETTOOL_MODE_NONE) {99 psError(PS_ERR_UNKNOWN, true, "mode argument is required");100 fprintf(stderr, "mode argument is required\n");101 printUsage(argc, argv, modes);102 return NULL;103 }104 105 // actually parse the command line106 if (!psArgumentParse(config->args, &argc, argv)) {107 psError(PS_ERR_UNKNOWN, true, "error parsing arguments");108 fprintf(stderr, "error parsing arguments\n");109 printUsageMode(argc, argv, config->modeName, config->args);110 return NULL;111 }112 113 // look for left overs on the command line114 if (argc != 1) {115 psError(PS_ERR_UNKNOWN, true, "extra arguments: ");116 fprintf(stderr, "extra arguments: ");117 for (int i = 1; i < argc; i++) {118 fprintf (stderr, "%s ", argv[i]);119 }120 fprintf(stderr, "\n");121 printUsageMode(argc, argv, config->modeName, config->args);122 return NULL;123 }124 125 // make sure that all required parameters have been specified126 iter = psMetadataIteratorAlloc(config->args, PS_LIST_HEAD, NULL);127 item = NULL; // Item from iterator128 while ((item = psMetadataGetAndIncrement(iter))) {129 if (strstr(item->comment, "require") == NULL) {130 continue;131 }132 133 switch (item->type) {134 case PS_DATA_BOOL:135 psError(PS_ERR_UNKNOWN, false, "boolean type can not be required");136 fprintf(stderr, "boolean type can not be required\n");137 return NULL;138 break;139 case PS_DATA_S8:140 case PS_DATA_S16:141 case PS_DATA_S32:142 case PS_DATA_S64:143 if (item->data.S64 != 0) {144 break;145 }146 goto ARG_REQUIRED;147 case PS_DATA_U8:148 case PS_DATA_U16:149 case PS_DATA_U32:150 case PS_DATA_U64:151 if (item->data.U64 != 0) {152 break;153 }154 goto ARG_REQUIRED;155 case PS_DATA_F32:156 case PS_DATA_F64:157 if (!isnan(item->data.F64)) {158 break;159 }160 goto ARG_REQUIRED;161 case PS_DATA_STRING:162 case PS_DATA_METADATA:163 if (item->data.V) {164 break;165 }166 goto ARG_REQUIRED;167 default:168 psError(PS_ERR_UNKNOWN, false, "unknown argument type");169 fprintf(stderr, "unknown argument type\n");170 return NULL;171 ARG_REQUIRED:172 psError(PS_ERR_UNKNOWN, false, "argument %s is required", item->name);173 fprintf(stderr, "argument %s is required\n", item->name);174 printUsageMode(argc, argv, config->modeName, config->args);175 return NULL;176 }177 178 }179 180 psFree(iter);181 182 return true;183 }184 185 186 pxConfig *dettoolConfig(pxConfig *config, int argc, char **argv) {187 31 if (!config) { 188 32 config = pxConfigAlloc(); … … 941 785 942 786 // find which mode we're running under 943 PXTOOL_ MODE("-pending", "list active detruns", DETTOOL_MODE_PENDING, pendingArgs);944 PXTOOL_ MODE("-definebytag", "", DETTOOL_MODE_DEFINEBYTAG, definebytagArgs);945 PXTOOL_ MODE("-definebyquery", "", DETTOOL_MODE_DEFINEBYQUERY, definebyqueryArgs);946 PXTOOL_ MODE("-definebydetrun", "", DETTOOL_MODE_DEFINEBYDETRUN, definebydetrunArgs);947 PXTOOL_ MODE("-raw", "", DETTOOL_MODE_RAW, rawArgs);948 PXTOOL_ MODE("-runs", "", DETTOOL_MODE_RUNS, runsArgs);949 PXTOOL_ MODE("-childlessrun", "", DETTOOL_MODE_CHILDLESSRUN, childlessrunArgs);950 PXTOOL_ MODE("-input", "", DETTOOL_MODE_INPUT, inputArgs);951 PXTOOL_ MODE("-toprocessedimfile", "", DETTOOL_MODE_TOPROCESSEDIMFILE, toprocessedimfileArgs);952 PXTOOL_ MODE("-addprocessedimfile", "", DETTOOL_MODE_ADDPROCESSEDIMFILE, addprocessedimfileArgs);953 PXTOOL_ MODE("-processedimfile", "", DETTOOL_MODE_PROCESSEDIMFILE, processedimfileArgs);954 PXTOOL_ MODE("-toprocessedexp", "", DETTOOL_MODE_TOPROCESSEDEXP, toprocessedexpArgs);955 PXTOOL_ MODE("-addprocessedexp", "", DETTOOL_MODE_ADDPROCESSEDEXP, addprocessedexpArgs);956 PXTOOL_ MODE("-processedexp", "", DETTOOL_MODE_PROCESSEDEXP, processedexpArgs);957 PXTOOL_ MODE("-tostacked", "", DETTOOL_MODE_TOSTACKED, tostackedArgs);958 PXTOOL_ MODE("-addstacked", "", DETTOOL_MODE_ADDSTACKED, addstackedArgs);959 PXTOOL_ MODE("-stacked", "", DETTOOL_MODE_STACKED, stackedArgs);960 PXTOOL_ MODE("-tonormalize", "", DETTOOL_MODE_TONORMALIZE, tonormalizeArgs);961 PXTOOL_ MODE("-addnormalizedstat", "", DETTOOL_MODE_ADDNORMALIZEDSTAT, addnormstatArgs);962 PXTOOL_ MODE("-tonormalizedstat", "", DETTOOL_MODE_TONORMALIZEDSTAT, tonormstatArgs);963 PXTOOL_ MODE("-addnormalizedimfile", "", DETTOOL_MODE_ADDNORMALIZEDIMFILE,addnormalizedimfileArgs);964 PXTOOL_ MODE("-normalizedimfile","", DETTOOL_MODE_NORMALIZEDIMFILE, normalizedimfileArgs);965 PXTOOL_ MODE("-tonormalizedexp", "", DETTOOL_MODE_TONORMALIZEDEXP, tonormalizedexpArgs);966 PXTOOL_ MODE("-addnormalizedexp", "", DETTOOL_MODE_ADDNORMALIZEDEXP, addnormalizedexpArgs);967 PXTOOL_ MODE("-normalizedexp", "", DETTOOL_MODE_NORMALIZEDEXP, normalizedexpArgs);968 PXTOOL_ MODE("-toresidimfile", "", DETTOOL_MODE_TORESIDIMFILE, toresidimfileArgs);969 PXTOOL_ MODE("-addresidimfile", "", DETTOOL_MODE_ADDRESIDIMFILE, addresidimfileArgs);970 PXTOOL_ MODE("-residimfile", "", DETTOOL_MODE_RESIDIMFILE, residimfileArgs);971 PXTOOL_ MODE("-toresidexp", "", DETTOOL_MODE_TORESIDEXP, toresidexpArgs);972 PXTOOL_ MODE("-addresidexp", "", DETTOOL_MODE_ADDRESIDEXP, addresidexpArgs);973 PXTOOL_ MODE("-residexp", "", DETTOOL_MODE_RESIDEXP, residexpArgs);974 PXTOOL_ MODE("-residdetrun", "", DETTOOL_MODE_RESIDDETRUN, residdetrunArgs);975 PXTOOL_ MODE("-updateresidexp", "", DETTOOL_MODE_UPDATERESIDEXP,updateresidexpArgs);976 PXTOOL_ MODE("-adddetrunsummary", "", DETTOOL_MODE_ADDDETRUNSUMMARY,adddetrunsummaryArgs);977 PXTOOL_ MODE("-detrunsummary", "", DETTOOL_MODE_DETRUNSUMMARY,detrunsummaryArgs);978 PXTOOL_ MODE("-updatedetrun", "", DETTOOL_MODE_UPDATEDETRUN, updatedetrunArgs);979 PXTOOL_ MODE("-rerun", "", DETTOOL_MODE_RERUN, rerunArgs);980 PXTOOL_ MODE("-register_detrend", "", DETTOOL_MODE_REGISTER_DETREND, register_detrendArgs);981 PXTOOL_ MODE("-register_detrend_imfile", "", DETTOOL_MODE_REGISTER_DETREND_IMFILE, register_detrend_imfileArgs);982 983 984 if (!p arseOptions(argc, argv, config, modes, argSets)) {787 PXTOOL_ADD_MODE("-pending", "list active detruns", DETTOOL_MODE_PENDING, pendingArgs); 788 PXTOOL_ADD_MODE("-definebytag", "", DETTOOL_MODE_DEFINEBYTAG, definebytagArgs); 789 PXTOOL_ADD_MODE("-definebyquery", "", DETTOOL_MODE_DEFINEBYQUERY, definebyqueryArgs); 790 PXTOOL_ADD_MODE("-definebydetrun", "", DETTOOL_MODE_DEFINEBYDETRUN, definebydetrunArgs); 791 PXTOOL_ADD_MODE("-raw", "", DETTOOL_MODE_RAW, rawArgs); 792 PXTOOL_ADD_MODE("-runs", "", DETTOOL_MODE_RUNS, runsArgs); 793 PXTOOL_ADD_MODE("-childlessrun", "", DETTOOL_MODE_CHILDLESSRUN, childlessrunArgs); 794 PXTOOL_ADD_MODE("-input", "", DETTOOL_MODE_INPUT, inputArgs); 795 PXTOOL_ADD_MODE("-toprocessedimfile", "", DETTOOL_MODE_TOPROCESSEDIMFILE, toprocessedimfileArgs); 796 PXTOOL_ADD_MODE("-addprocessedimfile", "", DETTOOL_MODE_ADDPROCESSEDIMFILE, addprocessedimfileArgs); 797 PXTOOL_ADD_MODE("-processedimfile", "", DETTOOL_MODE_PROCESSEDIMFILE, processedimfileArgs); 798 PXTOOL_ADD_MODE("-toprocessedexp", "", DETTOOL_MODE_TOPROCESSEDEXP, toprocessedexpArgs); 799 PXTOOL_ADD_MODE("-addprocessedexp", "", DETTOOL_MODE_ADDPROCESSEDEXP, addprocessedexpArgs); 800 PXTOOL_ADD_MODE("-processedexp", "", DETTOOL_MODE_PROCESSEDEXP, processedexpArgs); 801 PXTOOL_ADD_MODE("-tostacked", "", DETTOOL_MODE_TOSTACKED, tostackedArgs); 802 PXTOOL_ADD_MODE("-addstacked", "", DETTOOL_MODE_ADDSTACKED, addstackedArgs); 803 PXTOOL_ADD_MODE("-stacked", "", DETTOOL_MODE_STACKED, stackedArgs); 804 PXTOOL_ADD_MODE("-tonormalize", "", DETTOOL_MODE_TONORMALIZE, tonormalizeArgs); 805 PXTOOL_ADD_MODE("-addnormalizedstat", "", DETTOOL_MODE_ADDNORMALIZEDSTAT, addnormstatArgs); 806 PXTOOL_ADD_MODE("-tonormalizedstat", "", DETTOOL_MODE_TONORMALIZEDSTAT, tonormstatArgs); 807 PXTOOL_ADD_MODE("-addnormalizedimfile", "", DETTOOL_MODE_ADDNORMALIZEDIMFILE,addnormalizedimfileArgs); 808 PXTOOL_ADD_MODE("-normalizedimfile","", DETTOOL_MODE_NORMALIZEDIMFILE, normalizedimfileArgs); 809 PXTOOL_ADD_MODE("-tonormalizedexp", "", DETTOOL_MODE_TONORMALIZEDEXP, tonormalizedexpArgs); 810 PXTOOL_ADD_MODE("-addnormalizedexp", "", DETTOOL_MODE_ADDNORMALIZEDEXP, addnormalizedexpArgs); 811 PXTOOL_ADD_MODE("-normalizedexp", "", DETTOOL_MODE_NORMALIZEDEXP, normalizedexpArgs); 812 PXTOOL_ADD_MODE("-toresidimfile", "", DETTOOL_MODE_TORESIDIMFILE, toresidimfileArgs); 813 PXTOOL_ADD_MODE("-addresidimfile", "", DETTOOL_MODE_ADDRESIDIMFILE, addresidimfileArgs); 814 PXTOOL_ADD_MODE("-residimfile", "", DETTOOL_MODE_RESIDIMFILE, residimfileArgs); 815 PXTOOL_ADD_MODE("-toresidexp", "", DETTOOL_MODE_TORESIDEXP, toresidexpArgs); 816 PXTOOL_ADD_MODE("-addresidexp", "", DETTOOL_MODE_ADDRESIDEXP, addresidexpArgs); 817 PXTOOL_ADD_MODE("-residexp", "", DETTOOL_MODE_RESIDEXP, residexpArgs); 818 PXTOOL_ADD_MODE("-residdetrun", "", DETTOOL_MODE_RESIDDETRUN, residdetrunArgs); 819 PXTOOL_ADD_MODE("-updateresidexp", "", DETTOOL_MODE_UPDATERESIDEXP,updateresidexpArgs); 820 PXTOOL_ADD_MODE("-adddetrunsummary", "", DETTOOL_MODE_ADDDETRUNSUMMARY,adddetrunsummaryArgs); 821 PXTOOL_ADD_MODE("-detrunsummary", "", DETTOOL_MODE_DETRUNSUMMARY,detrunsummaryArgs); 822 PXTOOL_ADD_MODE("-updatedetrun", "", DETTOOL_MODE_UPDATEDETRUN, updatedetrunArgs); 823 PXTOOL_ADD_MODE("-rerun", "", DETTOOL_MODE_RERUN, rerunArgs); 824 PXTOOL_ADD_MODE("-register_detrend", "", DETTOOL_MODE_REGISTER_DETREND, register_detrendArgs); 825 PXTOOL_ADD_MODE("-register_detrend_imfile", "", DETTOOL_MODE_REGISTER_DETREND_IMFILE, register_detrend_imfileArgs); 826 827 828 if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) { 985 829 psError(PS_ERR_UNKNOWN, true, "option parsing failed"); 986 830 psFree(argSets);
Note:
See TracChangeset
for help on using the changeset viewer.
