Changeset 1901
- Timestamp:
- 06/07/12 10:53:10 (13 months ago)
- Location:
- trunk
- Files:
-
- 4 edited
-
core/gui.c (modified) (2 diffs)
-
core/script.c (modified) (10 diffs)
-
include/script.h (modified) (1 diff)
-
lib/ubasic/tokenizer.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/core/gui.c
r1900 r1901 1336 1336 register int p=0, i; 1337 1337 1338 for (i=0; i<sizeof(script_submenu_items_top)/sizeof(script_submenu_items_top[0]); ++p, ++i) { 1338 for (i=0; i<sizeof(script_submenu_items_top)/sizeof(script_submenu_items_top[0]); ++p, ++i) 1339 { 1339 1340 script_submenu_items[p]=script_submenu_items_top[i]; 1340 1341 } 1341 for (i=0; i<SCRIPT_NUM_PARAMS; ++i) { 1342 if (script_param_order[i]) { 1343 script_submenu_items[p].symbol=0x0; 1344 script_submenu_items[p].text=(int)script_params[script_param_order[i]-1]; 1345 script_submenu_items[p].type=MENUITEM_INT; 1346 script_submenu_items[p].value=&conf.script_vars[script_param_order[i]-1]; 1347 if (script_range_values[script_param_order[i]-1] != 0) 1342 for (i=0; i<SCRIPT_NUM_PARAMS; ++i) 1343 { 1344 if (script_param_order[i]) 1345 { 1346 int n = script_param_order[i]-1; 1347 1348 script_submenu_items[p].symbol = 0x0; 1349 script_submenu_items[p].text = (int)script_params[n]; 1350 script_submenu_items[p].type = MENUITEM_INT; 1351 script_submenu_items[p].value = &conf.script_vars[n]; 1352 1353 if (script_range_values[n] != 0) 1348 1354 { 1349 if (script_range_values[ script_param_order[i]-1] == MENU_MINMAX(0,1))1355 if (script_range_values[n] == MENU_MINMAX(0,1)) 1350 1356 { 1351 1357 script_submenu_items[p].type = MENUITEM_BOOL; … … 1354 1360 { 1355 1361 script_submenu_items[p].type |= MENUITEM_F_MINMAX; 1356 script_submenu_items[p].arg = script_range_values[ script_param_order[i]-1];1362 script_submenu_items[p].arg = script_range_values[n]; 1357 1363 } 1358 1364 } 1365 else if (script_named_counts[n] != 0) 1366 { 1367 script_submenu_items[p].type = MENUITEM_ENUM2; 1368 script_submenu_items[p].opt_len = script_named_counts[n]; 1369 script_submenu_items[p].arg = (int)script_named_values[n]; 1370 } 1371 1359 1372 ++p; 1360 1373 } 1361 1374 } 1362 for (i=0; i<sizeof(script_submenu_items_bottom)/sizeof(script_submenu_items_bottom[0]); ++p, ++i) { 1375 for (i=0; i<sizeof(script_submenu_items_bottom)/sizeof(script_submenu_items_bottom[0]); ++p, ++i) 1376 { 1363 1377 script_submenu_items[p]=script_submenu_items_bottom[i]; 1364 1378 } -
trunk/core/script.c
r1900 r1901 108 108 // to display in same order in script 109 109 int script_range_values[SCRIPT_NUM_PARAMS]; // Min/Max values for param validation 110 const char **script_named_values[SCRIPT_NUM_PARAMS]; // Array of list values for named parameters 111 int script_named_counts[SCRIPT_NUM_PARAMS]; // Count of # of entries in each script_list_values array 112 char *script_named_strings[SCRIPT_NUM_PARAMS]; // Base storage for named value string data 110 113 static char script_params_update[SCRIPT_NUM_PARAMS]; // Flag is such parameter exist 111 114 static int script_loaded_params[SCRIPT_NUM_PARAMS]; // Copy of original values of parameters … … 117 120 118 121 const char* skip_whitespace(const char* p) { while (*p==' ' || *p=='\t') p++; return p; } // Skip past whitespace 119 const char* skip_token(const char* p) { while (*p!=' ' && *p!='\t') p++; return p; } // Skip to next whitespace 122 const char* skip_token(const char* p) { while (*p && *p!='\r' && *p!='\n' && *p!=' ' && *p!='\t') p++; return p; } // Skip past current token value 123 const char* skip_toeol(const char* p) { while (*p!='\r' && *p!='\n') p++; return p; } // Skip to end of line 120 124 121 125 //------------------------------------------------------------------- … … 141 145 // RETURN VALUE: 0 if err, 1..26 = id of var 142 146 //------------------------------------------------------------------- 143 static int process_param(const char *param, int update) { 147 static int process_param(const char *param, int update) 148 { 144 149 register const char *ptr = param; 145 150 register int n, i=0; … … 171 176 // 1 - only if updated 172 177 //------------------------------------------------------------------- 173 static void process_default(const char *param, char update) { 178 static void process_default(const char *param, char update) 179 { 174 180 register const char *ptr = param; 175 181 register int n; … … 193 199 // 1 - only if updated 194 200 //------------------------------------------------------------------- 195 static void process_range(const char *param, char update) { 201 static void process_range(const char *param, char update) 202 { 196 203 register const char *ptr = param; 197 204 register int n; 198 205 199 206 ptr = skip_whitespace(ptr); 200 if (ptr[0] && (ptr[0]>='a' && ptr[0]<='a'+SCRIPT_NUM_PARAMS) && (ptr[1]==' ' || ptr[1]=='\t')) { 207 if (ptr[0] && (ptr[0]>='a' && ptr[0]<='a'+SCRIPT_NUM_PARAMS) && (ptr[1]==' ' || ptr[1]=='\t')) 208 { 201 209 n=ptr[0]-'a'; 202 210 ptr = skip_whitespace(ptr+2); … … 212 220 213 221 //------------------------------------------------------------------- 222 // Process one entry "@values VAR A B C D ..." 223 // param = ptr right after descriptor (should point to var) 224 // update = 0 - get 225 // 1 - only if updated 226 //------------------------------------------------------------------- 227 static void process_values(const char *param, char update) 228 { 229 register const char *ptr = param; 230 register int n; 231 232 ptr = skip_whitespace(ptr); 233 if (ptr[0] && (ptr[0]>='a' && ptr[0]<='a'+SCRIPT_NUM_PARAMS) && (ptr[1]==' ' || ptr[1]=='\t')) 234 { 235 n=ptr[0]-'a'; 236 ptr = skip_whitespace(ptr+2); 237 if (!update || script_params_update[n]) 238 { 239 int len = skip_toeol(ptr) - ptr; 240 script_named_strings[n] = malloc(len+1); 241 strncpy(script_named_strings[n], ptr, len); 242 script_named_strings[n][len] = 0; 243 244 const char *p = script_named_strings[n]; 245 int cnt = 0; 246 while (*p) 247 { 248 p = skip_whitespace(skip_token(p)); 249 cnt++; 250 } 251 script_named_counts[n] = cnt; 252 script_named_values[n] = malloc(cnt * sizeof(char*)); 253 254 p = script_named_strings[n]; 255 cnt = 0; 256 while (*p) 257 { 258 script_named_values[n][cnt] = p; 259 p = skip_token(p); 260 if (*p) 261 { 262 *((char*)p) = 0; 263 p = skip_whitespace(p+1); 264 } 265 cnt++; 266 } 267 } 268 } // ??? else produce error message 269 } 270 271 //------------------------------------------------------------------- 214 272 // PURPOSE: Parse script for @xxx 215 273 // PARAMETERS: fn - full path of script … … 232 290 script_param_order[i]=0; 233 291 script_range_values[i] = 0; 292 if (script_named_values[i]) free(script_named_values[i]); 293 script_named_values[i] = 0; 294 if (script_named_strings[i]) free(script_named_strings[i]); 295 script_named_strings[i] = 0; 296 script_named_counts[i] = 0; 234 297 } 235 298 … … 253 316 ptr+=6; 254 317 process_range(ptr, 0); 318 } else if (update_vars && strncmp("@values", ptr, 7)==0) { 319 ptr+=7; 320 process_values(ptr, 0); 255 321 } 256 322 } … … 366 432 ptr+=6; 367 433 process_range(ptr, 1); 434 } else if (strncmp("@values", ptr, 7)==0) { 435 ptr+=7; 436 process_values(ptr, 0); 368 437 } 369 438 } … … 429 498 if (script_range_values[n] != 0) 430 499 sprintf(buf+strlen(buf),"@range %c %d %d\n",'a'+n,(short)(script_range_values[n]&0xFFFF),(short)(script_range_values[n]>>16)); 500 if (script_named_counts[n] != 0) 501 { 502 sprintf(buf+strlen(buf),"@values %c",'a'+n); 503 for (i=0; i<script_named_counts[n]; i++) 504 sprintf(buf+strlen(buf)," %s",script_named_values[n][i]); 505 strcat(buf,"\n"); 506 } 431 507 write(fd, buf, strlen(buf)); 432 508 } -
trunk/include/script.h
r1900 r1901 21 21 extern int script_range_values[SCRIPT_NUM_PARAMS]; 22 22 extern int script_param_order[SCRIPT_NUM_PARAMS]; 23 extern const char **script_named_values[SCRIPT_NUM_PARAMS]; 24 extern int script_named_counts[SCRIPT_NUM_PARAMS]; 23 25 24 26 //------------------------------------------------------------------- -
trunk/lib/ubasic/tokenizer.c
r1900 r1901 203 203 {"@default", TOKENIZER_REM}, 204 204 {"@range", TOKENIZER_REM}, 205 {"@values", TOKENIZER_REM}, 205 206 206 207 {"md_detect_motion", TOKENIZER_MD_DETECT_MOTION},
Note: See TracChangeset
for help on using the changeset viewer.