struct jx * nvpair_to_jx( struct nvpair *nv ) { struct jx *object = jx_object(0); char *key; char *value; struct jx *jvalue; long long integer_value; double double_value; nvpair_first_item(nv); while(nvpair_next_item(nv,&key,&value)) { if(!strcmp(value,"true")) { jvalue = jx_boolean(1); } else if(!strcmp(value,"false")) { jvalue = jx_boolean(0); } else if(!strcmp(value,"null")) { jvalue = jx_null(); } else if(string_is_integer(value,&integer_value)) { jvalue = jx_integer(integer_value); } else if(string_is_float(value,&double_value)) { jvalue = jx_double(double_value); } else if(value[0]=='[' || value[0]=='{') { jvalue = jx_parse_string(value); if(!jvalue) jvalue = jx_string(value); } else { jvalue = jx_string(value); } jx_insert(object,jx_string(key),jvalue); } return object; }
bool CommandBase::SetArg(int arg, const char* val) { if(0 == strcmp(val,"#")) return true; //default arguments switch(args[arg].type) { case Bool: return string_is_bool(val,*(bool*)args[arg].data); case Int: return string_is_int(val,*(int*)args[arg].data); case Float: return string_is_float(val,*(float*)args[arg].data); case Double: return string_is_double(val,*(double*)args[arg].data); case String: *(const char**)args[arg].data = val; return true; } return false; }
t_linked_list *resolve_line(t_linked_list *line, t_linked_list *declared_functions, t_linked_list **splitted_strings_line, t_linked_list *builtin_keywords) { int i; t_linked_list *resolved_line; char *to_add; char *tmp_string; t_linked_list *new_line_strings; new_line_strings = new_list(); resolved_line = new_list(); i = 0; while (i < line->len && (*((char*)line->elts[i]) == TAB || *((char*)line->elts[i]) == SPACE)) { if (!(to_add = (char*)malloc(sizeof(char)))) malloc_error(); *to_add = *((char*)line->elts[i]); add_to_list(resolved_line, to_add); add_to_list(new_line_strings, ft_strdup("\t")); i++; } while (i < line->len) { if (!(to_add = (char*)malloc(sizeof(char)))) malloc_error(); *to_add = *((char*)line->elts[i]); tmp_string = ((char*)(*splitted_strings_line)->elts[i]); if (*((char*)line->elts[i]) == NAME) { if (i > 0 && *((char*)line->elts[i]) == FUNCTION_DECL) *to_add = FUNCTION_NAME; else if (string_in_list((*splitted_strings_line)->elts[i], declared_functions)) *to_add = FUNCTION_NAME; else if (string_in_list((*splitted_strings_line)->elts[i], builtin_keywords)) *to_add = KEYWORD; else if (string_is_string((*splitted_strings_line)->elts[i])) *to_add = STRING_DEF; else if (string_is_character((*splitted_strings_line)->elts[i])) *to_add = CHARACTER_DEF; else if (string_is_integer((*splitted_strings_line)->elts[i])) *to_add = INTEGER_DEF; else if (string_is_float((*splitted_strings_line)->elts[i])) *to_add = FLOAT_DEF; else *to_add = VAR_NAME; } else if (*((char*)line->elts[i]) == EQUAL && i + 1 < line->len && *((char*)line->elts[i + 1]) == EQUAL) { *to_add = EQUALITY_CHECK; tmp_string = ft_strdup("=="); i++; } else if (*((char*)line->elts[i]) == COLON && i + 2 < line->len && *((char*)line->elts[i + 1]) == COLON && *((char*)line->elts[i + 2]) == EQUAL) { *to_add = DEEPCOPY_EQUAL; tmp_string = ft_strdup("::="); i += 2; } else if (*((char*)line->elts[i]) == COLON && i + 1 < line->len && *((char*)line->elts[i + 1]) == EQUAL) { *to_add = COPY_EQUAL; tmp_string = ft_strdup(":="); i++; } else if (*((char*)line->elts[i]) == COLON && i + 1 < line->len && *((char*)line->elts[i + 1]) == COLON) { *to_add = DEEPCOPY; tmp_string = ft_strdup("::"); i++; } else if (*((char*)line->elts[i]) == COLON && i + 1 < line->len) { *to_add = COPY; tmp_string = ft_strdup(":"); } add_to_list(resolved_line, to_add); add_to_list(new_line_strings, tmp_string); i++; } *splitted_strings_line = new_line_strings; return (resolved_line); }