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