1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #endif
4 
5 #include <cstdio>
6 #include <cstdlib>
7 #include <cstring>
8 
9 #include "cdo_magics_mapper.h"
10 #include "magics_template_parser.h"
11 
12 #define PARAM_COUNT sizeof(mapper) / sizeof(CdoMagicsMapper)
13 
14 /* extern int _set_magics_parameter_value( const char *param_name, const char
15  * *param_type, const char *param_value ) */
16 
17 int Set_magics_param_CCOLS(const char *user_name, const char *param_value);
18 int Reset_magics_param_CCOLS(const char *user_name);
19 
20 int Set_magics_param_CLEVS(const char *user_name, const char *param_value);
21 int Reset_magics_param_CLEVS(const char *user_name);
22 
23 int Set_magics_param_CTABLE(const char *user_name, const char *param_value);
24 int Reset_magics_param_CTABLE(const char *user_name);
25 
26 /* Define an array of Mapper structures to sort. */
27 
28 struct CdoMagicsMapper
29 {
30   const char *cdo_name;
31   const char *magics_name;
32   const char *magics_type;
33   int (*Set_magics_param)(const char *user_name,
34                           const char *param_value);  // Function to Update the Corresponding Magics parameters
35   int (*Reset_magics_param)(const char *user_name);  // Function to Reset the Corresponding Magics parameters
36 };
37 
38 CdoMagicsMapper mapper[] =
39 
40     { { "clevs", "contour_level_list", "floatarray", &Set_magics_param_CLEVS, &Reset_magics_param_CLEVS },
41       { "ccols", "contour_param_2", "intarray", &Set_magics_param_CCOLS, &Reset_magics_param_CCOLS },
42       { "color_table", "contour_param_3", "intarray", &Set_magics_param_CTABLE, &Reset_magics_param_CTABLE } };
43 
44 void PrintResult(const CdoMagicsMapper *c);
45 
46 int
Set_magics_param_CCOLS(const char * user_name,const char * param_value)47 Set_magics_param_CCOLS(const char *user_name, const char *param_value)
48 
49 {
50   if (user_name == nullptr) return 1;
51   printf("Setting the CCOLS magics params \n");
52 
53   _set_magics_parameter_value("contour_shade_colour_method", "string", "list");
54   _set_magics_parameter_value("contour_shade_colour_list", "stringarray", param_value);
55 #if 0
56 #endif
57   return 0;
58 }
59 
60 int
Reset_magics_param_CCOLS(const char * user_name)61 Reset_magics_param_CCOLS(const char *user_name)
62 {
63   (void) user_name;
64   printf("Re-Setting the CCOLS magics params \n");
65   return 0;
66 }
67 
68 int
Set_magics_param_CLEVS(const char * user_name,const char * param_value)69 Set_magics_param_CLEVS(const char *user_name, const char *param_value)
70 {
71   if (user_name == nullptr) return 1;
72 
73   _set_magics_parameter_value("contour_level_selection_type", "string", "level_list");
74   _set_magics_parameter_value("contour_level_list", "floatarray", param_value);
75 
76   return 0;
77 }
78 
79 int
Reset_magics_param_CLEVS(const char * user_name)80 Reset_magics_param_CLEVS(const char *user_name)
81 {
82   (void) user_name;
83   _set_magics_parameter_value("contour_level_selection_type", "string", "count");
84   printf("Re-Setting the CLEVS magics params \n");
85   return 0;
86 }
87 
88 int
Set_magics_param_CTABLE(const char * user_name,const char * param_value)89 Set_magics_param_CTABLE(const char *user_name, const char *param_value)
90 {
91   (void) param_value;
92 
93   if (user_name == nullptr) return 1;
94   printf("Setting the CTABLE magics params \n");
95 #if 0
96   _set_magics_parameter_value( "contour_level_list", "floatarray", param_value );
97 #endif
98   return 0;
99 }
100 
101 int
Reset_magics_param_CTABLE(const char * user_name)102 Reset_magics_param_CTABLE(const char *user_name)
103 {
104   (void) user_name;
105   printf("Re-Setting the CTABLE magics params \n");
106   return 0;
107 }
108 
109 /* This is the comparison function used for sorting and searching. */
110 
111 int
Compare(const void * p1,const void * p2)112 Compare(const void *p1, const void *p2)
113 {
114   return strcmp(((CdoMagicsMapper *) p1)->cdo_name, ((CdoMagicsMapper *) p2)->cdo_name);
115 }
116 
117 /* Print information about a critter. */
118 
119 void
PrintResult(const CdoMagicsMapper * c)120 PrintResult(const CdoMagicsMapper *c)
121 {
122   printf("CDO Name:%s\t MAGICS Name:%s\t MAGICS Type:%s\n", c->cdo_name, c->magics_name, c->magics_type);
123 }
124 
125 /* Do the lookup into the sorted array. */
126 
127 /* int get_magics_parameter_info( const char *user_name, char **magics_name, char
128  * **magics_type ) */
129 
130 int
get_magics_parameter_info(const char * user_name,char * param_value)131 get_magics_parameter_info(const char *user_name, char *param_value)
132 {
133   static int once = 1;
134   int ret_flag = 0;
135   CdoMagicsMapper target, *result;
136   target.cdo_name = (char *) user_name;
137 
138   if (once)
139     {
140       std::qsort(mapper, PARAM_COUNT, sizeof(CdoMagicsMapper), Compare);
141       once = 0;
142     }
143 
144   result = (CdoMagicsMapper *) bsearch(&target, mapper, PARAM_COUNT, sizeof(CdoMagicsMapper), Compare);
145   if (result)
146     {
147       result->Set_magics_param(result->cdo_name, param_value);
148 
149       /*
150        *magics_name = result->magics_name;
151        *magics_type = result->magics_type;
152        */
153     }
154   else
155     {
156       /* Call the Reset functions of all the features to Reset the magics params
157        * to default in the calling function */
158       ret_flag = 1;
159     }
160 
161   return ret_flag;
162 }
163