Changeset 13564 for trunk/ippTools/src/dettoolConfig.c
- Timestamp:
- May 30, 2007, 5:55:54 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/ippTools/src/dettoolConfig.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/dettoolConfig.c
r12784 r13564 22 22 #endif 23 23 24 #include <string.h> 25 24 26 #include <psmodules.h> 25 27 26 28 #include "pxtools.h" 27 29 #include "dettool.h" 30 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) 44 { 45 printf("Usage: %s <mode> [<options>]\n\n", argv[0]); 46 printf("<mode>:\n"); 47 48 psArgumentHelpSimple(stderr, modes); 49 } 50 51 static void printUsageMode(int argc, char **argv, const char *modeName, psMetadata *argSet) 52 { 53 printf("Usage: %s <mode> [<options>]\n\n", argv[0]); 54 printf("%s:\n", modeName); 55 56 psArgumentHelpSimple(stderr, argSet); 57 } 28 58 29 59 pxConfig *dettoolConfig(pxConfig *config, int argc, char **argv) { … … 45 75 psString now = psTimeToISO(time); 46 76 psFree(time); 77 78 psMetadata *argSets = psMetadataAlloc(); 79 psMetadata *modes = psMetadataAlloc(); 47 80 48 81 // -pending … … 780 813 psFree(now); 781 814 782 783 #define PXTOOL_MODE(option, modeval, argset) \784 { \785 int N = 0; \786 if ((N = psArgumentGet (argc, argv, option))) { \787 psArgumentRemove (N, &argc, argv); \788 if (config->mode) { \789 psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed"); \790 psFree(argset); \791 psFree(argSets); \792 psFree(config); \793 return NULL; \794 } \795 config->mode = modeval; \796 config->args = psMemIncrRefCounter(argset); \797 } \798 if (!psMetadataAddMetadata(argSets, PS_LIST_TAIL, option, 0, NULL, argset)) {;\799 psError(PS_ERR_UNKNOWN, false, "failed to add argset for %s", option); \800 } \801 psFree(argset); \802 }803 804 psMetadata *argSets = psMetadataAlloc();805 815 // find which mode we're running under 806 PXTOOL_MODE("-pending", DETTOOL_MODE_PENDING, pendingArgs); 807 PXTOOL_MODE("-definebytag", DETTOOL_MODE_DEFINEBYTAG, definebytagArgs); 808 PXTOOL_MODE("-definebyquery", DETTOOL_MODE_DEFINEBYQUERY, definebyqueryArgs); 809 PXTOOL_MODE("-definebydetrun", DETTOOL_MODE_DEFINEBYDETRUN, definebydetrunArgs); 810 PXTOOL_MODE("-raw", DETTOOL_MODE_RAW, rawArgs); 811 PXTOOL_MODE("-runs", DETTOOL_MODE_RUNS, runsArgs); 812 PXTOOL_MODE("-childlessrun", DETTOOL_MODE_CHILDLESSRUN, childlessrunArgs); 813 PXTOOL_MODE("-input", DETTOOL_MODE_INPUT, inputArgs); 814 PXTOOL_MODE("-toprocessedimfile", DETTOOL_MODE_TOPROCESSEDIMFILE, toprocessedimfileArgs); 815 PXTOOL_MODE("-addprocessedimfile", DETTOOL_MODE_ADDPROCESSEDIMFILE, addprocessedimfileArgs); 816 PXTOOL_MODE("-processedimfile", DETTOOL_MODE_PROCESSEDIMFILE, processedimfileArgs); 817 PXTOOL_MODE("-toprocessedexp", DETTOOL_MODE_TOPROCESSEDEXP, toprocessedexpArgs); 818 PXTOOL_MODE("-addprocessedexp", DETTOOL_MODE_ADDPROCESSEDEXP, addprocessedexpArgs); 819 PXTOOL_MODE("-processedexp", DETTOOL_MODE_PROCESSEDEXP, processedexpArgs); 820 PXTOOL_MODE("-tostacked", DETTOOL_MODE_TOSTACKED, tostackedArgs); 821 PXTOOL_MODE("-addstacked", DETTOOL_MODE_ADDSTACKED, addstackedArgs); 822 PXTOOL_MODE("-stacked", DETTOOL_MODE_STACKED, stackedArgs); 823 PXTOOL_MODE("-tonormalize", DETTOOL_MODE_TONORMALIZE, tonormalizeArgs); 824 PXTOOL_MODE("-addnormalizedstat", DETTOOL_MODE_ADDNORMALIZEDSTAT, addnormstatArgs); 825 PXTOOL_MODE("-tonormalizedstat", DETTOOL_MODE_TONORMALIZEDSTAT, tonormstatArgs); 826 PXTOOL_MODE("-addnormalizedimfile", DETTOOL_MODE_ADDNORMALIZEDIMFILE,addnormalizedimfileArgs); 827 PXTOOL_MODE("-normalizedimfile",DETTOOL_MODE_NORMALIZEDIMFILE, normalizedimfileArgs); 828 PXTOOL_MODE("-tonormalizedexp", DETTOOL_MODE_TONORMALIZEDEXP, tonormalizedexpArgs); 829 PXTOOL_MODE("-addnormalizedexp", DETTOOL_MODE_ADDNORMALIZEDEXP, addnormalizedexpArgs); 830 PXTOOL_MODE("-normalizedexp", DETTOOL_MODE_NORMALIZEDEXP, normalizedexpArgs); 831 PXTOOL_MODE("-toresidimfile", DETTOOL_MODE_TORESIDIMFILE, toresidimfileArgs); 832 PXTOOL_MODE("-addresidimfile", DETTOOL_MODE_ADDRESIDIMFILE, addresidimfileArgs); 833 PXTOOL_MODE("-residimfile", DETTOOL_MODE_RESIDIMFILE, residimfileArgs); 834 PXTOOL_MODE("-toresidexp", DETTOOL_MODE_TORESIDEXP, toresidexpArgs); 835 PXTOOL_MODE("-addresidexp", DETTOOL_MODE_ADDRESIDEXP, addresidexpArgs); 836 PXTOOL_MODE("-residexp", DETTOOL_MODE_RESIDEXP, residexpArgs); 837 PXTOOL_MODE("-residdetrun", DETTOOL_MODE_RESIDDETRUN, residdetrunArgs); 838 PXTOOL_MODE("-updateresidexp", DETTOOL_MODE_UPDATERESIDEXP,updateresidexpArgs); 839 PXTOOL_MODE("-adddetrunsummary", DETTOOL_MODE_ADDDETRUNSUMMARY,adddetrunsummaryArgs); 840 PXTOOL_MODE("-detrunsummary", DETTOOL_MODE_DETRUNSUMMARY,detrunsummaryArgs); 841 PXTOOL_MODE("-updatedetrun", DETTOOL_MODE_UPDATEDETRUN, updatedetrunArgs); 842 PXTOOL_MODE("-rerun", DETTOOL_MODE_RERUN, rerunArgs); 843 PXTOOL_MODE("-register_detrend", DETTOOL_MODE_REGISTER_DETREND, register_detrendArgs); 844 PXTOOL_MODE("-register_detrend_imfile", DETTOOL_MODE_REGISTER_DETREND_IMFILE, register_detrend_imfileArgs); 845 846 bool argErr = false; 816 PXTOOL_MODE("-pending", "list active detruns", DETTOOL_MODE_PENDING, pendingArgs); 817 PXTOOL_MODE("-definebytag", "", DETTOOL_MODE_DEFINEBYTAG, definebytagArgs); 818 PXTOOL_MODE("-definebyquery", "", DETTOOL_MODE_DEFINEBYQUERY, definebyqueryArgs); 819 PXTOOL_MODE("-definebydetrun", "", DETTOOL_MODE_DEFINEBYDETRUN, definebydetrunArgs); 820 PXTOOL_MODE("-raw", "", DETTOOL_MODE_RAW, rawArgs); 821 PXTOOL_MODE("-runs", "", DETTOOL_MODE_RUNS, runsArgs); 822 PXTOOL_MODE("-childlessrun", "", DETTOOL_MODE_CHILDLESSRUN, childlessrunArgs); 823 PXTOOL_MODE("-input", "", DETTOOL_MODE_INPUT, inputArgs); 824 PXTOOL_MODE("-toprocessedimfile", "", DETTOOL_MODE_TOPROCESSEDIMFILE, toprocessedimfileArgs); 825 PXTOOL_MODE("-addprocessedimfile", "", DETTOOL_MODE_ADDPROCESSEDIMFILE, addprocessedimfileArgs); 826 PXTOOL_MODE("-processedimfile", "", DETTOOL_MODE_PROCESSEDIMFILE, processedimfileArgs); 827 PXTOOL_MODE("-toprocessedexp", "", DETTOOL_MODE_TOPROCESSEDEXP, toprocessedexpArgs); 828 PXTOOL_MODE("-addprocessedexp", "", DETTOOL_MODE_ADDPROCESSEDEXP, addprocessedexpArgs); 829 PXTOOL_MODE("-processedexp", "", DETTOOL_MODE_PROCESSEDEXP, processedexpArgs); 830 PXTOOL_MODE("-tostacked", "", DETTOOL_MODE_TOSTACKED, tostackedArgs); 831 PXTOOL_MODE("-addstacked", "", DETTOOL_MODE_ADDSTACKED, addstackedArgs); 832 PXTOOL_MODE("-stacked", "", DETTOOL_MODE_STACKED, stackedArgs); 833 PXTOOL_MODE("-tonormalize", "", DETTOOL_MODE_TONORMALIZE, tonormalizeArgs); 834 PXTOOL_MODE("-addnormalizedstat", "", DETTOOL_MODE_ADDNORMALIZEDSTAT, addnormstatArgs); 835 PXTOOL_MODE("-tonormalizedstat", "", DETTOOL_MODE_TONORMALIZEDSTAT, tonormstatArgs); 836 PXTOOL_MODE("-addnormalizedimfile", "", DETTOOL_MODE_ADDNORMALIZEDIMFILE,addnormalizedimfileArgs); 837 PXTOOL_MODE("-normalizedimfile","", DETTOOL_MODE_NORMALIZEDIMFILE, normalizedimfileArgs); 838 PXTOOL_MODE("-tonormalizedexp", "", DETTOOL_MODE_TONORMALIZEDEXP, tonormalizedexpArgs); 839 PXTOOL_MODE("-addnormalizedexp", "", DETTOOL_MODE_ADDNORMALIZEDEXP, addnormalizedexpArgs); 840 PXTOOL_MODE("-normalizedexp", "", DETTOOL_MODE_NORMALIZEDEXP, normalizedexpArgs); 841 PXTOOL_MODE("-toresidimfile", "", DETTOOL_MODE_TORESIDIMFILE, toresidimfileArgs); 842 PXTOOL_MODE("-addresidimfile", "", DETTOOL_MODE_ADDRESIDIMFILE, addresidimfileArgs); 843 PXTOOL_MODE("-residimfile", "", DETTOOL_MODE_RESIDIMFILE, residimfileArgs); 844 PXTOOL_MODE("-toresidexp", "", DETTOOL_MODE_TORESIDEXP, toresidexpArgs); 845 PXTOOL_MODE("-addresidexp", "", DETTOOL_MODE_ADDRESIDEXP, addresidexpArgs); 846 PXTOOL_MODE("-residexp", "", DETTOOL_MODE_RESIDEXP, residexpArgs); 847 PXTOOL_MODE("-residdetrun", "", DETTOOL_MODE_RESIDDETRUN, residdetrunArgs); 848 PXTOOL_MODE("-updateresidexp", "", DETTOOL_MODE_UPDATERESIDEXP,updateresidexpArgs); 849 PXTOOL_MODE("-adddetrunsummary", "", DETTOOL_MODE_ADDDETRUNSUMMARY,adddetrunsummaryArgs); 850 PXTOOL_MODE("-detrunsummary", "", DETTOOL_MODE_DETRUNSUMMARY,detrunsummaryArgs); 851 PXTOOL_MODE("-updatedetrun", "", DETTOOL_MODE_UPDATEDETRUN, updatedetrunArgs); 852 PXTOOL_MODE("-rerun", "", DETTOOL_MODE_RERUN, rerunArgs); 853 PXTOOL_MODE("-register_detrend", "", DETTOOL_MODE_REGISTER_DETREND, register_detrendArgs); 854 PXTOOL_MODE("-register_detrend_imfile", "", DETTOOL_MODE_REGISTER_DETREND_IMFILE, register_detrend_imfileArgs); 855 856 857 // figure out what mode we're running in 858 char *modeName = NULL; 859 psMetadataIterator *iter = psMetadataIteratorAlloc(modes, PS_LIST_HEAD, NULL); 860 psMetadataItem *item = NULL; // Item from iterator 861 while ((item = psMetadataGetAndIncrement(iter))) { 862 int N = 0; 863 if ((N = psArgumentGet(argc, argv, item->name))) { 864 psArgumentRemove(N, &argc, argv); 865 // check for duplicate mode specification 866 if (config->mode) { 867 psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed"); 868 fprintf(stderr, "only one mode selection is allowed\n"); 869 printUsage(argc, argv, modes); 870 psFree(argSets); 871 psFree(modes); 872 psFree(config); 873 return NULL; 874 } 875 876 config->mode = item->data.U32; 877 modeName = item->name; 878 879 bool status = false; 880 psMetadata *argset = psMetadataLookupMetadata(&status, argSets, item->name); 881 // make sure we can find the argSet for the sepcified mode 882 if (!status) { 883 psError(PS_ERR_UNKNOWN, true, "can not find arguments for mode"); 884 fprintf(stderr, "can not find arugments for mode"); 885 psFree(argSets); 886 psFree(modes); 887 psFree(config); 888 return NULL; 889 } 890 891 config->args = psMemIncrRefCounter(argset); 892 } 893 894 } 895 896 psFree(iter); 897 psFree(argSets); 898 899 // make sure we found a mode 847 900 if (config->mode == DETTOOL_MODE_NONE) { 848 argErr = true; 849 fprintf (stderr, "mode argument is required\n"); 850 } else { 851 if (! psArgumentParse(config->args, &argc, argv)) { 852 argErr = true; 853 fprintf (stderr, "error parsing arguments\n"); 854 } 855 if (argc != 1) { 856 fprintf (stderr, "extra arguments: "); 857 for (int i = 1; i < argc; i++) { 858 fprintf (stderr, "%s ", argv[i]); 859 } 860 fprintf (stderr, "\n"); 861 argErr = true; 862 } 863 } 864 865 if (argErr) { 866 printf("\nPan-STARRS Detrend Tool\n"); 867 printf("Usage: %s <mode> [<options>]\n\n", argv[0]); 868 printf(" <mode> :\n\n"); 869 870 psMetadataIterator *iter = psMetadataIteratorAlloc(argSets, 0, NULL); 871 psMetadataItem *item = NULL; 872 while ((item = psMetadataGetAndIncrement(iter))) { 873 if (!item->type == PS_DATA_METADATA) { 874 psAbort("all options must be specified as a metadata"); 875 } 876 877 fprintf(stdout, "%s ", item->name); 878 psArgumentHelp(item->data.md); 879 } 880 psFree(iter); 881 psFree(argSets); 901 psError(PS_ERR_UNKNOWN, true, "mode argument is required"); 902 fprintf(stderr, "mode argument is required\n"); 903 printUsage(argc, argv, modes); 904 905 psFree(modes); 882 906 psFree(config); 883 907 return NULL; 884 908 } 885 909 886 psFree(argSets); 910 psFree(modes); 911 912 // actually parse the command line 913 if (!psArgumentParse(config->args, &argc, argv)) { 914 psError(PS_ERR_UNKNOWN, true, "error parsing arguments"); 915 fprintf(stderr, "error parsing arguments\n"); 916 printUsageMode(argc, argv, modeName, config->args); 917 918 psFree(config); 919 return NULL; 920 } 921 922 // look for left overs on the command line 923 if (argc != 1) { 924 psError(PS_ERR_UNKNOWN, true, "extra arguments: "); 925 fprintf(stderr, "extra arguments: "); 926 for (int i = 1; i < argc; i++) { 927 fprintf (stderr, "%s ", argv[i]); 928 } 929 fprintf(stderr, "\n"); 930 printUsageMode(argc, argv, modeName, config->args); 931 932 psFree(config); 933 return NULL; 934 } 935 936 // make sure that all require parameters have been specified 937 iter = psMetadataIteratorAlloc(config->args, PS_LIST_HEAD, NULL); 938 item = NULL; // Item from iterator 939 while ((item = psMetadataGetAndIncrement(iter))) { 940 if (strstr(item->comment, "require") == NULL) { 941 continue; 942 } 943 944 switch (item->type) { 945 case PS_DATA_BOOL: 946 psError(PS_ERR_UNKNOWN, false, "boolean type can not be required"); 947 fprintf(stderr, "boolean type can not be required\n"); 948 psFree(iter); 949 psFree(config); 950 return NULL; 951 break; 952 case PS_DATA_S8: 953 case PS_DATA_S16: 954 case PS_DATA_S32: 955 case PS_DATA_S64: 956 if (item->data.S64 != 0) { 957 break; 958 } 959 goto ARG_REQUIRED; 960 case PS_DATA_U8: 961 case PS_DATA_U16: 962 case PS_DATA_U32: 963 case PS_DATA_U64: 964 if (item->data.U64 != 0) { 965 break; 966 } 967 goto ARG_REQUIRED; 968 case PS_DATA_F32: 969 case PS_DATA_F64: 970 if (!isnan(item->data.F64)) { 971 break; 972 } 973 goto ARG_REQUIRED; 974 case PS_DATA_STRING: 975 case PS_DATA_METADATA: 976 if (item->data.V) { 977 break; 978 } 979 goto ARG_REQUIRED; 980 default: 981 psError(PS_ERR_UNKNOWN, false, "unknown argument type"); 982 fprintf(stderr, "unknown argument type\n"); 983 psFree(iter); 984 psFree(config); 985 return NULL; 986 ARG_REQUIRED: 987 psError(PS_ERR_UNKNOWN, false, "argument %s is required", item->name); 988 fprintf(stderr, "argument %s is required\n", item->name); 989 printUsageMode(argc, argv, modeName, config->args); 990 psFree(iter); 991 psFree(config); 992 return NULL; 993 } 994 995 } 996 psFree(iter); 887 997 888 998 // setup search criterion
Note:
See TracChangeset
for help on using the changeset viewer.
