2020-03-31 13:24:34 +01:00
|
|
|
#include <string.h>
|
|
|
|
#include "../../mem/heap.h"
|
|
|
|
#include "../gfx/gfxutils.h"
|
|
|
|
#include "../emmc/emmc.h"
|
|
|
|
#include "../../utils/types.h"
|
|
|
|
#include "../../libs/fatfs/ff.h"
|
|
|
|
#include "../../utils/sprintf.h"
|
|
|
|
#include "../../utils/btn.h"
|
|
|
|
#include "../../gfx/gfx.h"
|
|
|
|
#include "../../utils/util.h"
|
|
|
|
#include "../../storage/emummc.h"
|
|
|
|
#include "parser.h"
|
|
|
|
#include "../common/common.h"
|
|
|
|
#include "../fs/fsactions.h"
|
|
|
|
#include "variables.h"
|
|
|
|
#include "../utils/utils.h"
|
|
|
|
|
|
|
|
static dict_str_int *str_int_table = NULL;
|
|
|
|
static dict_str_str *str_str_table = NULL;
|
|
|
|
static dict_str_loc *str_jmp_table = NULL;
|
|
|
|
|
|
|
|
int str_int_add(char *key, int value){
|
|
|
|
char *key_local;
|
|
|
|
dict_str_int *keyvaluepair;
|
|
|
|
|
|
|
|
utils_copystring(key, &key_local);
|
|
|
|
|
2020-03-31 16:58:09 +01:00
|
|
|
keyvaluepair = calloc(1, sizeof(dict_str_int));
|
2020-03-31 13:24:34 +01:00
|
|
|
keyvaluepair->key = key_local;
|
|
|
|
keyvaluepair->value = value;
|
|
|
|
keyvaluepair->next = NULL;
|
2020-03-31 19:13:39 +01:00
|
|
|
|
2020-03-31 13:24:34 +01:00
|
|
|
if (str_int_table == NULL){
|
|
|
|
str_int_table = keyvaluepair;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
dict_str_int *temp;
|
|
|
|
temp = str_int_table;
|
|
|
|
while (temp != NULL){
|
|
|
|
if (!strcmp(temp->key, key_local)){
|
2020-03-31 19:13:39 +01:00
|
|
|
free(keyvaluepair);
|
|
|
|
free(key_local);
|
2020-03-31 13:24:34 +01:00
|
|
|
temp->value = value;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (temp->next == NULL){
|
|
|
|
temp->next = keyvaluepair;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
temp = temp->next;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int str_int_find(char *key, int *out){
|
|
|
|
dict_str_int *temp;
|
|
|
|
temp = str_int_table;
|
|
|
|
while (temp != NULL){
|
|
|
|
if (!strcmp(temp->key, key)){
|
|
|
|
*out = temp->value;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
temp = temp->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void str_int_clear(){
|
|
|
|
dict_str_int *cur, *next;
|
|
|
|
cur = str_int_table;
|
|
|
|
|
|
|
|
while (cur != NULL){
|
|
|
|
next = cur->next;
|
|
|
|
free(cur->key);
|
|
|
|
free(cur);
|
|
|
|
cur = next;
|
|
|
|
}
|
2020-03-31 16:58:09 +01:00
|
|
|
str_int_table = NULL;
|
2020-03-31 13:24:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void str_int_printall(){
|
|
|
|
dict_str_int *temp;
|
|
|
|
temp = str_int_table;
|
|
|
|
while (temp != NULL){
|
|
|
|
gfx_printf("%s -> %d\n", temp->key, temp->value);
|
|
|
|
temp = temp->next;
|
|
|
|
}
|
2020-03-31 16:58:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
int str_jmp_add(char *key, u64 value){
|
|
|
|
char *key_local;
|
|
|
|
dict_str_loc *keyvaluepair;
|
|
|
|
|
|
|
|
//gfx_printf("Adding |%s|\n", key_local);
|
2020-03-31 19:13:39 +01:00
|
|
|
|
|
|
|
utils_copystring(key, &key_local);
|
|
|
|
|
2020-03-31 16:58:09 +01:00
|
|
|
keyvaluepair = calloc(1, sizeof(dict_str_loc));
|
|
|
|
keyvaluepair->key = key_local;
|
|
|
|
keyvaluepair->value = value;
|
|
|
|
keyvaluepair->next = NULL;
|
2020-03-31 19:13:39 +01:00
|
|
|
|
2020-03-31 16:58:09 +01:00
|
|
|
if (str_jmp_table == NULL){
|
|
|
|
str_jmp_table = keyvaluepair;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
dict_str_loc *temp;
|
|
|
|
temp = str_jmp_table;
|
|
|
|
while (temp != NULL){
|
|
|
|
if (!strcmp(temp->key, key_local)){
|
2020-03-31 19:13:39 +01:00
|
|
|
free(keyvaluepair);
|
|
|
|
free(key_local);
|
|
|
|
|
2020-03-31 16:58:09 +01:00
|
|
|
temp->value = value;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (temp->next == NULL){
|
|
|
|
temp->next = keyvaluepair;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
temp = temp->next;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int str_jmp_find(char *key, u64 *out){
|
|
|
|
dict_str_loc *temp;
|
|
|
|
temp = str_jmp_table;
|
|
|
|
//gfx_printf("Searching |%s|\n", key);
|
|
|
|
while (temp != NULL){
|
|
|
|
if (!strcmp(temp->key, key)){
|
|
|
|
//gfx_printf("Key found!\n", temp->value);
|
|
|
|
*out = temp->value;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
temp = temp->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
//gfx_printf("no key!\n");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void str_jmp_clear(){
|
|
|
|
dict_str_loc *cur, *next;
|
|
|
|
cur = str_jmp_table;
|
|
|
|
|
|
|
|
while (cur != NULL){
|
|
|
|
next = cur->next;
|
|
|
|
free(cur->key);
|
|
|
|
free(cur);
|
|
|
|
cur = next;
|
|
|
|
}
|
|
|
|
str_jmp_table = NULL;
|
2020-03-31 19:13:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
int str_str_add(char *key, char *value){
|
|
|
|
char *key_local, *value_local;
|
|
|
|
dict_str_str *keyvaluepair;
|
|
|
|
//gfx_printf("Adding |%s|\n", key_local);
|
|
|
|
utils_copystring(value, &value_local);
|
|
|
|
utils_copystring(key, &key_local);
|
|
|
|
|
|
|
|
keyvaluepair = calloc(1, sizeof(dict_str_str));
|
|
|
|
keyvaluepair->key = key_local;
|
|
|
|
keyvaluepair->value = value_local;
|
|
|
|
keyvaluepair->next = NULL;
|
|
|
|
|
|
|
|
if (str_str_table == NULL){
|
|
|
|
str_str_table = keyvaluepair;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
dict_str_str *temp;
|
|
|
|
temp = str_str_table;
|
|
|
|
while (temp != NULL){
|
|
|
|
if (!strcmp(temp->key, key_local)){
|
|
|
|
free(keyvaluepair);
|
|
|
|
free(key_local);
|
|
|
|
|
|
|
|
free(temp->value);
|
|
|
|
temp->value = value_local;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (temp->next == NULL){
|
|
|
|
temp->next = keyvaluepair;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
temp = temp->next;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int str_str_find(char *key, char **out){
|
|
|
|
dict_str_str *temp;
|
|
|
|
temp = str_str_table;
|
|
|
|
|
|
|
|
while (temp != NULL){
|
|
|
|
if (!strcmp(temp->key, key)){
|
|
|
|
*out = temp->value;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
temp = temp->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
int str_str_index(int index, char **out){
|
|
|
|
dict_str_str *temp;
|
|
|
|
temp = str_str_table;
|
|
|
|
|
|
|
|
for (int i = 0; i < (index - 1); i++){
|
|
|
|
if (temp == NULL)
|
|
|
|
return -1;
|
|
|
|
temp = temp->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (temp == NULL)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
*out = temp->value;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void str_str_clear(){
|
|
|
|
dict_str_str *cur, *next;
|
|
|
|
cur = str_str_table;
|
|
|
|
|
|
|
|
while (cur != NULL){
|
|
|
|
next = cur->next;
|
|
|
|
free(cur->key);
|
|
|
|
free(cur->value);
|
|
|
|
free(cur);
|
|
|
|
cur = next;
|
|
|
|
}
|
|
|
|
str_str_table = NULL;
|
2020-03-31 13:24:34 +01:00
|
|
|
}
|