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