//------------------------------------------------------------------- // PURPOSE: Save parameters to paramset for script // Use: conf.script_file, conf.script_param_set // PARAMETERS: enforce = 1 mean save always // = 0 mean save only if any values was changed // (script_loaded_params[i] != conf.script_vars[i]) // // NOTE: 1. create SCRIPT_DATA_PATH/scriptname.cfg // which store # of last saved paramset // 2. create SCRIPT_DATA_PATH/scriptname_PARAMSETNUM // which param_str //------------------------------------------------------------------- void save_params_values( int enforce ) { if (conf.script_param_save && (conf.script_param_set != DEFAULT_PARAM_SET)) { // Write paramsetnum file make_param_filename( MAKE_PARAMSETNUM_FILENAME, conf.script_file, 0); save_int_value_file( cfg_name, conf.script_param_set ); int i, changed=0; // Check is anything changed since last time for(i = 0; i < SCRIPT_NUM_PARAMS; i++) { if (script_loaded_params[i] != conf.script_vars[i]) changed++; script_loaded_params[i] = conf.script_vars[i]; } if (enforce || changed) { // Write parameters file make_param_filename( MAKE_PARAM_FILENAME, conf.script_file, conf.script_param_set); do_save_param_file(cfg_param_name); } } }
//------------------------------------------------------------------- // read last paramset num of script "fn" to conf.script_param_set //------------------------------------------------------------------- void get_last_paramset_num(const char *fn) { // skip if internal script used if (fn == NULL || fn[0] == 0) return; make_param_filename( MAKE_PARAMSETNUM_FILENAME, fn, 0); if ( !load_int_value_file( cfg_name, &conf.script_param_set ) ) conf.script_param_set = 0; make_param_filename( MAKE_PARAM_FILENAME, fn, conf.script_param_set); }
//------------------------------------------------------------------- // PURPOSE: Save parameters to paramset for script // Use: conf.script_file, conf.script_param_set // PARAMETERS: enforce = 1 mean save always // = 0 mean save only if any values was changed // (script_params[i].old_val != script_params[i].val) // // NOTE: 1. create SCRIPT_DATA_PATH/scriptname.cfg // which store # of last saved paramset // 2. create SCRIPT_DATA_PATH/scriptname_PARAMSETNUM // which param_str //------------------------------------------------------------------- void save_params_values( int enforce ) { if (conf.script_param_save && (conf.script_param_set != DEFAULT_PARAM_SET)) { // Write paramsetnum file if (conf.script_param_set != last_script_param_set) { char *nm = make_param_filename(MAKE_PARAMSETNUM_FILENAME); save_int_value_file( nm, conf.script_param_set ); last_script_param_set = conf.script_param_set; } int i, changed=0; // Check is anything changed since last time sc_param *p = script_params; while (p) { if (p->old_val != p->val) { changed++; p->old_val = p->val; } p = p->next; } if (enforce || changed) { // Write parameters file do_save_param_file(); } } }
//------------------------------------------------------------------- // 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; }
//------------------------------------------------------------------- // read last paramset num of script "fn" to conf.script_param_set //------------------------------------------------------------------- static void get_last_paramset_num() { // skip if no script available if (conf.script_file[0] == 0) return; char *nm = make_param_filename(MAKE_PARAMSETNUM_FILENAME); if ( !load_int_value_file( nm, &conf.script_param_set ) ) { conf.script_param_set = 0; last_script_param_set = -1; // failed to load so force next save } else { last_script_param_set = conf.script_param_set; // save last value loaded from file } if ((conf.script_param_set < 0) || (conf.script_param_set > 10)) conf.script_param_set = 0; }
//------------------------------------------------------------------- // PURPOSE: Auxilary function. // Actually save param file //------------------------------------------------------------------- static void do_save_param_file() { char buf[100]; char *fn = make_param_filename(MAKE_PARAM_FILENAME_V2); int fd = open(fn, O_WRONLY|O_CREAT|O_TRUNC, 0777); if (fd >= 0) { sc_param *p = script_params; while (p) { // Only save parameters, skip 'subtitle' lines if (p->name != 0) { // Only need to save name and value - saved as #name=value sprintf(buf,"#%s=%d\n",p->name,p->val); write(fd, buf, strlen(buf)); } p = p->next; } close(fd); } }
//------------------------------------------------------------------- // 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; }