Changeset 1905
- Timestamp:
- 06/10/12 08:03:57 (11 months ago)
- Location:
- branches/release-1_0
- Files:
-
- 6 edited
-
. (modified) (1 prop)
-
core/gui.c (modified) (1 diff)
-
core/gui_menu.h (modified) (1 diff)
-
core/script.c (modified) (11 diffs)
-
include/script.h (modified) (1 diff)
-
lib/ubasic/tokenizer.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/release-1_0
-
branches/release-1_0/core/gui.c
r1856 r1905 1366 1366 register int p=0, i; 1367 1367 1368 for (i=0; i<sizeof(script_submenu_items_top)/sizeof(script_submenu_items_top[0]); ++p, ++i) { 1368 for (i=0; i<sizeof(script_submenu_items_top)/sizeof(script_submenu_items_top[0]); ++p, ++i) 1369 { 1369 1370 script_submenu_items[p]=script_submenu_items_top[i]; 1370 1371 } 1371 for (i=0; i<SCRIPT_NUM_PARAMS; ++i) { 1372 if (script_param_order[i]) { 1373 script_submenu_items[p].symbol=0x0; 1374 script_submenu_items[p].text=(int)script_params[script_param_order[i]-1]; 1375 script_submenu_items[p].type=MENUITEM_INT; 1376 script_submenu_items[p].value=&conf.script_vars[script_param_order[i]-1]; 1372 for (i=0; i<SCRIPT_NUM_PARAMS; ++i) 1373 { 1374 if (script_param_order[i]) 1375 { 1376 int n = script_param_order[i]-1; 1377 1378 script_submenu_items[p].symbol = 0x0; 1379 script_submenu_items[p].text = (int)script_params[n]; 1380 script_submenu_items[p].type = MENUITEM_INT; 1381 script_submenu_items[p].value = &conf.script_vars[n]; 1382 1383 if (script_range_values[n] != 0) 1384 { 1385 if (script_range_values[n] == MENU_MINMAX(0,1)) 1386 { 1387 script_submenu_items[p].type = MENUITEM_BOOL; 1388 } 1389 else 1390 { 1391 script_submenu_items[p].type |= MENUITEM_F_MINMAX; 1392 script_submenu_items[p].arg = script_range_values[n]; 1393 } 1394 } 1395 else if (script_named_counts[n] != 0) 1396 { 1397 script_submenu_items[p].type = MENUITEM_ENUM2; 1398 script_submenu_items[p].opt_len = script_named_counts[n]; 1399 script_submenu_items[p].arg = (int)script_named_values[n]; 1400 } 1401 1377 1402 ++p; 1378 1403 } 1379 1404 } 1380 for (i=0; i<sizeof(script_submenu_items_bottom)/sizeof(script_submenu_items_bottom[0]); ++p, ++i) { 1405 for (i=0; i<sizeof(script_submenu_items_bottom)/sizeof(script_submenu_items_bottom[0]); ++p, ++i) 1406 { 1381 1407 script_submenu_items[p]=script_submenu_items_bottom[i]; 1382 1408 } -
branches/release-1_0/core/gui_menu.h
r1407 r1905 32 32 #define MENUITEM_ARG_CALLBACK 0x0300 33 33 34 #define MENU_MINMAX(min, max) (((max)<<16)|(min ))34 #define MENU_MINMAX(min, max) (((max)<<16)|(min&0xFFFF)) 35 35 36 36 //------------------------------------------------------------------- -
branches/release-1_0/core/script.c
r1721 r1905 5 5 #include "gui.h" 6 6 #include "gui_draw.h" 7 #include "gui_menu.h" 7 8 #include "conf.h" 8 9 #include "script.h" … … 106 107 int script_param_order[SCRIPT_NUM_PARAMS]; // Ordered as_in_script list of variables ( [idx] = id_of_var ) 107 108 // to display in same order in script 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 108 113 static char script_params_update[SCRIPT_NUM_PARAMS]; // Flag is such parameter exist 109 114 static int script_loaded_params[SCRIPT_NUM_PARAMS]; // Copy of original values of parameters … … 113 118 114 119 //------------------------------------------------------------------- 120 121 const char* skip_whitespace(const char* p) { while (*p==' ' || *p=='\t') p++; return p; } // Skip past 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 124 125 //------------------------------------------------------------------- 115 126 static void process_title(const char *title) { 116 127 register const char *ptr = title; 117 128 register int i=0; 118 129 119 while (ptr[0]==' ' || ptr[0]=='\t') ++ptr; // whitespaces130 ptr = skip_whitespace(ptr); 120 131 while (i<(sizeof(script_title)-1) && ptr[i] && ptr[i]!='\r' && ptr[i]!='\n') { 121 132 script_title[i]=ptr[i]; … … 134 145 // RETURN VALUE: 0 if err, 1..26 = id of var 135 146 //------------------------------------------------------------------- 136 static int process_param(const char *param, int update) { 147 static int process_param(const char *param, int update) 148 { 137 149 register const char *ptr = param; 138 150 register int n, i=0; 139 151 140 while (ptr[0]==' ' || ptr[0]=='\t') ++ptr; // whitespaces152 ptr = skip_whitespace(ptr); 141 153 if (ptr[0] && (ptr[0]>='a' && ptr[0]<='a'+SCRIPT_NUM_PARAMS) && (ptr[1]==' ' || ptr[1]=='\t')) { 142 154 n=ptr[0]-'a'; 143 ptr+=2; 144 while (ptr[0]==' ' || ptr[0]=='\t') ++ptr; // whitespaces 155 ptr = skip_whitespace(ptr+2); 145 156 script_params_update[n] = 1; 146 157 while (i<(sizeof(script_params[0])-1) && ptr[i] && ptr[i]!='\r' && ptr[i]!='\n') { … … 165 176 // 1 - only if updated 166 177 //------------------------------------------------------------------- 167 static void process_default(const char *param, char update) { 178 static void process_default(const char *param, char update) 179 { 168 180 register const char *ptr = param; 169 181 register int n; 170 182 171 while (ptr[0]==' ' || ptr[0]=='\t') ++ptr; // whitespaces183 ptr = skip_whitespace(ptr); 172 184 if (ptr[0] && (ptr[0]>='a' && ptr[0]<='a'+SCRIPT_NUM_PARAMS) && (ptr[1]==' ' || ptr[1]=='\t')) { 173 185 n=ptr[0]-'a'; 174 ptr +=2;186 ptr = skip_whitespace(ptr+2); 175 187 if (!update || script_params_update[n]) 176 188 { 177 189 conf.script_vars[n] = strtol(ptr, NULL, 0); 178 190 script_loaded_params[n] = conf.script_vars[n]; 191 } 192 } // ??? else produce error message 193 } 194 195 //------------------------------------------------------------------- 196 // Process one entry "@range VAR MIN MAX" 197 // param = ptr right after descriptor (should point to var) 198 // update = 0 - get 199 // 1 - only if updated 200 //------------------------------------------------------------------- 201 static void process_range(const char *param, char update) 202 { 203 register const char *ptr = param; 204 register int n; 205 206 ptr = skip_whitespace(ptr); 207 if (ptr[0] && (ptr[0]>='a' && ptr[0]<='a'+SCRIPT_NUM_PARAMS) && (ptr[1]==' ' || ptr[1]=='\t')) 208 { 209 n=ptr[0]-'a'; 210 ptr = skip_whitespace(ptr+2); 211 if (!update || script_params_update[n]) 212 { 213 short min = strtol(ptr,NULL,0); 214 ptr = skip_whitespace(skip_token(ptr)); 215 short max = strtol(ptr,NULL,0); 216 script_range_values[n] = MENU_MINMAX(min,max); 217 } 218 } // ??? else produce error message 219 } 220 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 } 179 267 } 180 268 } // ??? else produce error message … … 201 289 script_params[i][0]=0; 202 290 script_param_order[i]=0; 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; 203 297 } 204 298 205 299 while (ptr[0]) { 206 while (ptr[0]==' ' || ptr[0]=='\t') ++ptr; // whitespaces300 ptr = skip_whitespace(ptr); 207 301 if (ptr[0]=='@') { 208 302 if (strncmp("@title", ptr, 6)==0) { … … 219 313 ptr+=8; 220 314 process_default(ptr, 0); 315 } else if (update_vars && strncmp("@range", ptr, 6)==0) { 316 ptr+=6; 317 process_range(ptr, 0); 318 } else if (update_vars && strncmp("@values", ptr, 7)==0) { 319 ptr+=7; 320 process_values(ptr, 0); 221 321 } 222 322 } … … 329 429 ptr+=8; 330 430 process_default(ptr, 1); 431 } else if (strncmp("@range", ptr, 6)==0) { 432 ptr+=6; 433 process_range(ptr, 1); 434 } else if (strncmp("@values", ptr, 7)==0) { 435 ptr+=7; 436 process_values(ptr, 0); 331 437 } 332 438 } … … 353 459 { 354 460 int i, n, fd, changed=0; 355 char *buf ,*p;461 char *buf; 356 462 for(i = 0; i < SCRIPT_NUM_PARAMS; i++) 357 463 { … … 375 481 376 482 // max possible params * (param description + some extra for @default etc) 377 buf=umalloc( SCRIPT_NUM_PARAMS*(28 + 20));483 buf=umalloc(256); 378 484 if(!buf) 379 485 return; … … 385 491 } 386 492 buf[0] = 0; 387 p=buf;388 493 for(n = 0; n < SCRIPT_NUM_PARAMS; ++n) 389 494 { 390 495 if (script_params[n][0] != 0) 391 496 { 392 p+=sprintf(p,"@param %c %s\n@default %c %d\n",'a'+n,script_params[n],'a'+n,conf.script_vars[n]); 393 } 394 } 395 write(fd, buf, strlen(buf)); 497 sprintf(buf,"@param %c %s\n@default %c %d\n",'a'+n,script_params[n],'a'+n,conf.script_vars[n]); 498 if (script_range_values[n] != 0) 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 } 507 write(fd, buf, strlen(buf)); 508 } 509 } 396 510 close(fd); 397 511 ufree(buf); -
branches/release-1_0/include/script.h
r1712 r1905 20 20 extern char script_title[36]; 21 21 extern char script_params[SCRIPT_NUM_PARAMS][28]; 22 extern int script_range_values[SCRIPT_NUM_PARAMS]; 22 23 extern int script_param_order[SCRIPT_NUM_PARAMS]; 24 extern const char **script_named_values[SCRIPT_NUM_PARAMS]; 25 extern int script_named_counts[SCRIPT_NUM_PARAMS]; 23 26 24 27 //------------------------------------------------------------------- -
branches/release-1_0/lib/ubasic/tokenizer.c
r1712 r1905 202 202 {"@param", TOKENIZER_REM}, 203 203 {"@default", TOKENIZER_REM}, 204 {"@range", TOKENIZER_REM}, 205 {"@values", TOKENIZER_REM}, 204 206 205 207 {"md_detect_motion", TOKENIZER_MD_DETECT_MOTION},
Note: See TracChangeset
for help on using the changeset viewer.