📄 param.c
字号:
load_builtin_param_double("q1", (void*)&q1, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL); load_builtin_param_double("q2", (void*)&q2, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL); load_builtin_param_double("q3", (void*)&q3, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL); load_builtin_param_double("q4", (void*)&q4, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL); load_builtin_param_double("q5", (void*)&q5, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL); load_builtin_param_double("q6", (void*)&q6, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL); load_builtin_param_double("q7", (void*)&q7, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL); load_builtin_param_double("q8", (void*)&q8, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL); /* variables added in 1.04 */ load_builtin_param_int("meshx", (void*)&gx, P_FLAG_READONLY, 32, 96, 8, NULL); load_builtin_param_int("meshy", (void*)&gy, P_FLAG_READONLY, 24, 72, 6, NULL); return SUCCESS; }/* Free's a parameter type */void free_param(param_t * param) { int x; if (param == NULL) return; if (param->flags & P_FLAG_USERDEF) { free(param->engine_val); } if (!(param->flags & P_FLAG_DONT_FREE_MATRIX)) { if (param->flags & P_FLAG_PER_POINT) free(param->matrix); else if (param->flags & P_FLAG_PER_PIXEL) { for(x = 0; x < gx; x++) free(((double**)param->matrix)[x]); free(param->matrix); } } if (PARAM_DEBUG) printf("free_param: freeing \"%s\".\n", param->name); free(param);}/* Loads a double parameter into the builtin database */int load_builtin_param_double(char * name, void * engine_val, void * matrix, short int flags, double init_val, double upper_bound, double lower_bound, char * alt_name) { param_t * param = NULL; value_t iv, ub, lb; iv.double_val = init_val; ub.double_val = upper_bound; lb.double_val = lower_bound; /* Create new parameter of type double */ if (PARAM_DEBUG == 2) { printf("load_builtin_param_double: (name \"%s\") (alt_name = \"%s\") ", name, alt_name); fflush(stdout); } if ((param = create_param(name, P_TYPE_DOUBLE, flags, engine_val, matrix, iv, ub, lb)) == NULL) { return OUTOFMEM_ERROR; } if (PARAM_DEBUG == 2) { printf("created..."); fflush(stdout); } /* Insert the paremeter into the database */ if (insert_builtin_param(param) < 0) { free_param(param); return ERROR; } if (PARAM_DEBUG == 2) { printf("inserted..."); fflush(stdout); } /* If this parameter has an alternate name, insert it into the database as link */ if (alt_name != NULL) { insert_param_alt_name(param, alt_name); if (PARAM_DEBUG == 2) { printf("alt_name inserted..."); fflush(stdout); } } if (PARAM_DEBUG == 2) printf("finished\n"); /* Finished, return success */ return SUCCESS;}/* Loads a double parameter into the builtin database */param_t * new_param_double(char * name, short int flags, void * engine_val, void * matrix, double upper_bound, double lower_bound, double init_val) { param_t * param; value_t iv, ub, lb; iv.double_val = init_val; ub.double_val = upper_bound; lb.double_val = lower_bound; if ((param = create_param(name, P_TYPE_DOUBLE, flags, engine_val, matrix,iv, ub, lb)) == NULL) return NULL; /* Finished, return success */ return param;}/* Creates a new parameter of type int */param_t * new_param_int(char * name, short int flags, void * engine_val, int upper_bound, int lower_bound, int init_val) { param_t * param; value_t iv, ub, lb; iv.int_val = init_val; ub.int_val = upper_bound; lb.int_val = lower_bound; if ((param = create_param(name, P_TYPE_INT, flags, engine_val, NULL, iv, ub, lb)) == NULL) return NULL; /* Finished, return success */ return param;}/* Creates a new parameter of type bool */param_t * new_param_bool(char * name, short int flags, void * engine_val, int upper_bound, int lower_bound, int init_val) { param_t * param; value_t iv, ub, lb; iv.bool_val = init_val; ub.bool_val = upper_bound; lb.bool_val = lower_bound; if ((param = create_param(name, P_TYPE_BOOL, flags, engine_val, NULL, iv, ub, lb)) == NULL) return NULL; /* Finished, return success */ return param;}/* Loads a integer parameter into the builtin database */int load_builtin_param_int(char * name, void * engine_val, short int flags, int init_val, int upper_bound, int lower_bound, char * alt_name) { param_t * param; value_t iv, ub, lb; iv.int_val = init_val; ub.int_val = upper_bound; lb.int_val = lower_bound; param = create_param(name, P_TYPE_INT, flags, engine_val, NULL, iv, ub, lb); if (param == NULL) { return OUTOFMEM_ERROR; } if (insert_builtin_param(param) < 0) { free_param(param); return ERROR; } if (alt_name != NULL) { insert_param_alt_name(param, alt_name); } return SUCCESS;} /* Loads a boolean parameter */int load_builtin_param_bool(char * name, void * engine_val, short int flags, int init_val, char * alt_name) { param_t * param; value_t iv, ub, lb; iv.int_val = init_val; ub.int_val = TRUE; lb.int_val = FALSE; param = create_param(name, P_TYPE_BOOL, flags, engine_val, NULL, iv, ub, lb); if (param == NULL) { return OUTOFMEM_ERROR; } if (insert_builtin_param(param) < 0) { free_param(param); return ERROR; } if (alt_name != NULL) { insert_param_alt_name(param, alt_name); } return SUCCESS;} /* Returns nonzero if the string is valid parameter name */int is_valid_param_string(char * string) { if (string == NULL) return FALSE; /* This ensures the first character is non numeric */ if( ((*string) >= 48) && ((*string) <= 57)) return FALSE; /* These probably should never happen */ if (*string == '.') return FALSE; if (*string == '+') return FALSE; if (*string == '-') return FALSE; /* Could also add checks for other symbols. May do later */ return TRUE; }/* Inserts a parameter into the builtin database */int insert_builtin_param(param_t * param) { if (param == NULL) return FAILURE; return splay_insert(param, param->name, builtin_param_tree); }/* Inserts a parameter into the builtin database */int insert_param(param_t * param, splaytree_t * database) { if (param == NULL) return FAILURE; if (database == NULL) return FAILURE; return splay_insert(param, param->name, database); }/* Sets the parameter engine value to value val. clipping occurs if necessary */void set_param(param_t * param, double val) { switch (param->type) { case P_TYPE_BOOL: if (val < 0) *((int*)param->engine_val) = 0; else if (val > 0) *((int*)param->engine_val) = 1; else *((int*)param->engine_val) = 0; break; case P_TYPE_INT: /* Make sure value is an integer */ val = floor(val); if (val < param->lower_bound.int_val) *((int*)param->engine_val) = param->lower_bound.int_val; else if (val > param->upper_bound.int_val) *((int*)param->engine_val) = param->upper_bound.int_val; else *((int*)param->engine_val) = val; break; case P_TYPE_DOUBLE: /* Make sure value is an integer */ if (val < param->lower_bound.double_val) *((double*)param->engine_val) = param->lower_bound.double_val; else if (val > param->upper_bound.double_val) *((double*)param->engine_val) = param->upper_bound.double_val; else *((double*)param->engine_val) = val; break; default: break; } return;}/* Search for parameter 'name' in 'database', if create_flag is true, then generate the parameter and insert it into 'database' */param_t * find_param_db(char * name, splaytree_t * database, int create_flag) { param_t * param = NULL; /* Null argument checks */ if (name == NULL) return NULL; if (database == NULL) return NULL; /* First look in the builtin database */ param = (param_t *)splay_find(name, database); if (((param = (param_t *)splay_find(name, database)) == NULL) && (create_flag == TRUE)) { /* Check if string is valid */ if (!is_valid_param_string(name)) return NULL; /* Now, create the user defined parameter given the passed name */ if ((param = create_user_param(name)) == NULL) return NULL; /* Finally, insert the new parameter into this preset's proper splaytree */ if (splay_insert(param, param->name, database) < 0) { free_param(param); return NULL; } } /* Return the found (or created) parameter. Note that this could be null */ return param;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -