146 lines
3.3 KiB
C
146 lines
3.3 KiB
C
#include "common.h"
|
|
|
|
#if __APPLE__
|
|
char * strndup (const char *s, size_t n) {
|
|
char *result;
|
|
size_t len = strlen (s);
|
|
|
|
if (n < len)
|
|
len = n;
|
|
|
|
result = (char *) malloc (len + 1);
|
|
if (!result)
|
|
return 0;
|
|
|
|
result[len] = '\0';
|
|
return (char *) memcpy (result, s, len);
|
|
}
|
|
#endif
|
|
|
|
void buildCommands() {
|
|
//char** commands = NULL;
|
|
}
|
|
|
|
//void addCommand(const char *command_string, void(*function)()) {
|
|
void addCommand(const char *command_string, void(*function)) {
|
|
int hash = generateHash(command_string, COMMAND_HASH_SIZE);
|
|
printf("command '%s' added with hash %d\n", command_string, hash);
|
|
commands_table[hash] = function;
|
|
}
|
|
|
|
char **getCommand(const char* string) {
|
|
char** command_array = NULL;
|
|
|
|
int i = 0;
|
|
int j = 1;
|
|
char last_pos = 0;
|
|
|
|
char current_char = string[i];
|
|
short done = 0;
|
|
|
|
while (!done) {
|
|
if (current_char == ' ') {
|
|
command_array = realloc(command_array, sizeof(char*)*j+1);
|
|
if (command_array == NULL) {
|
|
printf("ERROR, couldn't allocate memory for command_array\n");
|
|
}
|
|
command_array[j] = strndup(string+last_pos+1, i-last_pos-1);
|
|
last_pos = i;
|
|
j++;
|
|
} else if (current_char == '\n') {
|
|
command_array = realloc(command_array, sizeof(char*)*j+1);
|
|
if (command_array == NULL) {
|
|
printf("ERROR, couldn't allocate memory for command_array\n");
|
|
}
|
|
command_array[j] = strndup(string+last_pos+1, i-last_pos-1);
|
|
last_pos = i;
|
|
done = 1;
|
|
j++;
|
|
}
|
|
i++;
|
|
current_char = string[i];
|
|
}
|
|
command_array[0] = (void*)(intptr_t)(j-1);
|
|
return command_array;
|
|
}
|
|
|
|
void freeCommand(char **command_array) {
|
|
//printf("res[0] = %d\n", command_array[0]);
|
|
int j;
|
|
for (j = 1; j < (intptr_t)command_array[0]+1; j++) {
|
|
//printf("res[%d] = %s\n", j, command_array[j]);
|
|
free(command_array[j]);
|
|
}
|
|
free(command_array);
|
|
}
|
|
|
|
int generateHash(const char* string, int table_size) {
|
|
int i, sum;
|
|
size_t string_length = strlen(string);
|
|
for (sum=0, i=0; i < string_length; i++) {
|
|
sum += string[i];
|
|
}
|
|
return sum % table_size;
|
|
}
|
|
|
|
void setConfig(const char* variable, const char* value) {
|
|
if (variable && value) {
|
|
int hash = generateHash(variable, CONFIG_HASH_SIZE);
|
|
//printf("\n%s's hash is %d\n", variable, hash);
|
|
config[hash] = realloc(config[hash], strlen(value));
|
|
strcpy(config[hash], value);
|
|
|
|
config_name[hash] = realloc(config_name[hash], strlen(variable));
|
|
strcpy(config_name[hash], variable);
|
|
|
|
printf("%s(%d) set to %s\n", config_name[hash], hash, config[hash]);
|
|
//printf("%s's value: %s\n", variable, config[hash]);
|
|
} else {
|
|
printf("usage: %s", SET_SYNTAX);
|
|
}
|
|
}
|
|
|
|
void freeConfig() {
|
|
int i = 0;
|
|
for (i = 0;i < CONFIG_HASH_SIZE;i++) {
|
|
if (config[i]) {
|
|
free(config[i]);
|
|
free(config_name[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
void addHelp(const char* variable, const char* value) {
|
|
int hash = generateHash(variable, COMMAND_HASH_SIZE);
|
|
help[hash] = realloc(help[hash], strlen(value));
|
|
strcpy(help[hash], value);
|
|
}
|
|
|
|
void freeHelp() {
|
|
int i;
|
|
for (i = 0;i < COMMAND_HASH_SIZE;i++) {
|
|
if (help[i]) {
|
|
free(help[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
void addSyntax(const char* variable, const char* value) {
|
|
int hash = generateHash(variable, COMMAND_HASH_SIZE);
|
|
syntax[hash] = realloc(syntax[hash], strlen(value));
|
|
strcpy(syntax[hash], value);
|
|
}
|
|
|
|
void freeSyntax() {
|
|
int i;
|
|
for (i = 0;i < COMMAND_HASH_SIZE;i++) {
|
|
if (syntax[i]) {
|
|
free(syntax[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
void quitProgram() {
|
|
is_running = 0;
|
|
}
|