1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 
5 #include "stputil.h"
6 
stputil_validate_parameters(stp_vars_t * v)7 void stputil_validate_parameters(stp_vars_t *v)
8 {
9 	stp_parameter_list_t params = stp_get_parameter_list(v);
10 
11 	int count = stp_parameter_list_count(params);
12 	int i;
13 	for (i = 0; i < count; i++)
14 	{
15 		const stp_parameter_t *p = stp_parameter_list_param(params, i);
16 		stp_parameter_t desc;
17 		stp_describe_parameter(v,p->name,&desc);
18 
19 		if(desc.is_active && desc.p_level<=STP_PARAMETER_LEVEL_ADVANCED4)
20 		{
21 			switch(desc.p_type)
22 			{
23 				case STP_PARAMETER_TYPE_STRING_LIST:
24 					{
25 						int idx=-1;
26 						if(stp_check_string_parameter(v,desc.name,STP_PARAMETER_DEFAULTED))
27 						{
28 							const char *val=stp_get_string_parameter(v,desc.name);
29 							stp_string_list_t *strlist=desc.bounds.str;
30 							if(strlist)
31 							{
32 								int j;
33 								int strcount=stp_string_list_count(strlist);
34 								for(j=0;j<strcount;++j)
35 								{
36 									stp_param_string_t *p=stp_string_list_param(strlist,j);
37 									if(strcmp(p->name,val)==0)
38 									{
39 										idx=j;
40 										j=strcount;
41 									}
42 								}
43 							}
44 						}
45 						if(idx<0 && desc.is_mandatory)
46 						{
47 //							fprintf(stderr,"Setting %s to default value %s\n",desc.name,desc.deflt.str);
48 							stp_set_string_parameter(v,desc.name,desc.deflt.str);
49 						}
50 					}
51 					break;
52 
53 				case STP_PARAMETER_TYPE_INT:
54 					{
55 						int setdefault=1;
56 						if(stp_check_string_parameter(v,desc.name,STP_PARAMETER_DEFAULTED))
57 						{
58 							int val=stp_get_int_parameter(v,desc.name);
59 							if(val>=desc.bounds.integer.lower && val<=desc.bounds.integer.upper)
60 							{
61 								setdefault=0;
62 							}
63 						}
64 						if(setdefault && desc.is_mandatory)
65 							stp_set_int_parameter(v,desc.name,desc.deflt.integer);
66 					}
67 					break;
68 
69 				case STP_PARAMETER_TYPE_BOOLEAN:
70 					if(desc.is_mandatory && !stp_check_boolean_parameter(v,desc.name,STP_PARAMETER_DEFAULTED))
71 						stp_set_boolean_parameter(v,desc.name,desc.deflt.boolean);
72 					break;
73 
74 				case STP_PARAMETER_TYPE_DOUBLE:
75 					{
76 						int setdefault=1;
77 						if(stp_check_string_parameter(v,desc.name,STP_PARAMETER_DEFAULTED))
78 						{
79 							int val=stp_get_int_parameter(v,desc.name);
80 							if(val>=desc.bounds.integer.lower && val<=desc.bounds.integer.upper)
81 							{
82 								setdefault=0;
83 							}
84 						}
85 						if(setdefault && desc.is_mandatory)
86 							stp_set_int_parameter(v,desc.name,desc.deflt.integer);
87 					}
88 					break;
89 
90 				case STP_PARAMETER_TYPE_DIMENSION:
91 					{
92 						int setdefault=1;
93 						if(stp_check_dimension_parameter(v,desc.name,STP_PARAMETER_DEFAULTED))
94 						{
95 							int val=stp_get_dimension_parameter(v,desc.name);
96 							if(val>=desc.bounds.dimension.lower && val<=desc.bounds.dimension.upper)
97 							{
98 								setdefault=0;
99 							}
100 						}
101 						if(setdefault && desc.is_mandatory)
102 							stp_set_dimension_parameter(v,desc.name,desc.deflt.dimension);
103 					}
104 					break;
105 
106 				default:
107 					break;
108 			}
109 		}
110 	}
111 	stp_parameter_list_destroy(params);
112 }
113 
114