//------------------------------------------------------------------- // PURPOSE: Load parameters from paramset for script // PARAMETERS: fn - full path of script // paramset - num of loaded paramset (usually conf.script_param_set) // RETURN: 1-succesfully applied, 0 - something was failed //------------------------------------------------------------------- int load_params_values(const char *fn, int paramset) { // skip if internal script used if (fn == NULL || fn[0] == 0) return 0; // skip if 'default' parameters requested if (paramset == DEFAULT_PARAM_SET) return 0; if ((paramset < 0) || (paramset > 10)) paramset = 0; conf.script_param_set = paramset; make_param_filename( MAKE_PARAM_FILENAME, fn, paramset ); char* buf = load_file(cfg_param_name, 0, 1); if (!buf) return 0; const char* ptr = buf; // Initial scan of saved paramset file // Ensure all saved params match defaults from script // If not assume saved file is invalid and don't load it // may occur if script is changed, or file was saved by a different script with same name while (ptr[0]) { ptr = skip_whitespace(ptr); if (ptr[0]=='@') { if (strncmp("@param", ptr, 6) == 0) { if (!check_param(ptr+6)) return 0; } } ptr = skip_eol(ptr); } // All ok, reset and process file ptr = buf; while (ptr[0]) { ptr = skip_whitespace(ptr); if (ptr[0]=='@') { // Already checked file, so only need to load the @default values // @param, @range & @values already set from script if (strncmp("@default", ptr, 8)==0) { process_default(ptr+8); } } ptr = skip_eol(ptr); } free(buf); return 1; }
void *serv_switch(void *v){ message_queue *q = (message_queue *)v; message m; while( 1 ){ while(dequeue(q, &m)){ sleep(1); } message_type type = m.type; switch(type) { case DEFAULT: process_default(&m); break; case PREPARE: process_prepare(&m); break; case ACK_PREPARE: process_ack_prepare(&m); break; case NACK_PREPARE: break; case PROPOSE: process_propose(&m); break; default: break; } } }
//------------------------------------------------------------------- // PURPOSE: Parse script (script_source_str) for @xxx // PARAMETERS: fn - full path of script // RESULTS: script_title // script_params // script_params_order // script_loaded_params, conf.script_vars //------------------------------------------------------------------- static void script_scan(const char *fn) { register const char *ptr = script_source_str; register int i, j=0, n; char *c; if ( !ptr ) { ptr = lua_script_default; } // sanity check // Build title c=strrchr(fn, '/'); strncpy(script_title, (c)?c+1:fn, sizeof(script_title)); script_title[sizeof(script_title)-1]=0; // Reset everything for (i=0; i<SCRIPT_NUM_PARAMS; ++i) { conf.script_vars[i] = 0; script_loaded_params[i] = 0; script_params[i][0]=0; script_param_order[i]=0; script_range_values[i] = 0; if (script_named_values[i]) free(script_named_values[i]); script_named_values[i] = 0; if (script_named_strings[i]) free(script_named_strings[i]); script_named_strings[i] = 0; script_named_counts[i] = 0; } // Fillup order, defaults while (ptr[0]) { ptr = skip_whitespace(ptr); if (ptr[0]=='@') { if (strncmp("@title", ptr, 6)==0) { process_title(ptr+6); } else if (strncmp("@param", ptr, 6)==0) { n = process_param(ptr+6); // n=1 if '@param a' was processed, n=2 for 'b' ... n=26 for 'z'. n=0 if failed. if (n>0 && n<=SCRIPT_NUM_PARAMS) { script_param_order[j]=n; j++; } } else if (strncmp("@default", ptr, 8)==0) { process_default(ptr+8); } else if (strncmp("@range", ptr, 6)==0) { process_range(ptr+6); } else if (strncmp("@values", ptr, 7)==0) { process_values(ptr+7); } } ptr = skip_eol(ptr); } }
//------------------------------------------------------------------- // PURPOSE: Load parameters from paramset for script // PARAMETERS: fn - full path of script // paramset - num of loaded paramset (usually conf.script_param_set) // RETURN: 1-succesfully applied, 0 - something was failed //------------------------------------------------------------------- static int load_params_values() { // skip if no script loaded if (conf.script_file[0] == 0) return 0; // skip if 'default' parameters requested if (conf.script_param_set == DEFAULT_PARAM_SET) return 0; if ((conf.script_param_set < 0) || (conf.script_param_set > 10)) conf.script_param_set = 0; char *nm = make_param_filename(MAKE_PARAM_FILENAME_V2); char* buf = load_file(nm, 0, 1); if (buf == 0) { nm = make_param_filename(MAKE_PARAM_FILENAME); buf = load_file(nm, 0, 1); if (buf == 0) return 0; } const char* ptr = buf; int valid = 1; // Initial scan of saved paramset file // Ensure all saved params match defaults from script // If not assume saved file is invalid and don't load it // may occur if script is changed, or file was saved by a different script with same name while (ptr[0] && valid) { ptr = skip_whitespace(ptr); if (ptr[0] == '@') { if (strncmp("@param", ptr, 6) == 0) { if (!check_param(ptr+6)) valid = 0; } } else if (ptr[0] == '#') { if (!check_param(ptr+1)) valid = 0; } ptr = skip_eol(ptr); } if (valid) { // All ok, reset and process file ptr = buf; while (ptr[0]) { ptr = skip_whitespace(ptr); if (ptr[0]=='@') { // Already checked file, so only need to load the @default values // @param, @range & @values already set from script if (strncmp("@default", ptr, 8)==0) { process_default(ptr+8, 0); } } else if (ptr[0] == '#') { process_default(ptr+1, 0); } ptr = skip_eol(ptr); } } free(buf); return valid; }
//------------------------------------------------------------------- // PURPOSE: Parse script (conf.script_file) for parameters and title //------------------------------------------------------------------- static void script_scan() { // Reset everything sc_param *p = script_params; while (p) { if (p->name) free(p->name); if (p->desc) free(p->desc); if (p->options) free(p->options); if (p->option_buf) free(p->option_buf); sc_param *l = p; p = p->next; free(l); } script_params = tail = 0; script_param_count = 0; parse_version(&script_version, "1.3.0.0", 0); script_has_version = 0; is_script_loaded = 0; // Load script file const char *buf=0; if (conf.script_file[0] != 0) buf = load_file_to_length(conf.script_file, 0, 1, 4096); // Assumes parameters are in first 4K of script file // Check file loaded if (buf == 0) { strcpy(script_title, "NO SCRIPT"); return; } // Build title from name (in case no title in script) const char *c = get_script_filename(); strncpy(script_title, c, sizeof(script_title)-1); script_title[sizeof(script_title)-1]=0; // Fillup order, defaults const char *ptr = buf; while (ptr[0]) { ptr = skip_whitespace(ptr); if (ptr[0] == '@') { if (strncmp("@title", ptr, 6)==0) { process_title(ptr+6); } else if (strncmp("@subtitle", ptr, 9)==0) { process_subtitle(ptr+9); } else if (strncmp("@param", ptr, 6)==0) { process_param(ptr+6); } else if (strncmp("@default", ptr, 8)==0) { process_default(ptr+8, 1); } else if (strncmp("@range", ptr, 6)==0) { process_range(ptr+6); } else if (strncmp("@values", ptr, 7)==0) { process_values(ptr+7); } else if (strncmp("@chdk_version", ptr, 13)==0) { ptr = skip_whitespace(ptr+13); parse_version(&script_version, ptr, 0); script_has_version = 1; } } else if (ptr[0] == '#') { process_single(ptr+1); } ptr = skip_eol(ptr); } free((void*)buf); is_script_loaded = 1; }