diff --git a/Makefile b/Makefile index 98473bd..d8990f2 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -all: build build_rd build_free build_rpylib run_free +all: build build_rd build_free build_rpylib run # Variables for compiler and flags CC = gcc diff --git a/indexer.h b/indexer.h index dfc8837..2a2e33d 100644 --- a/indexer.h +++ b/indexer.h @@ -13,7 +13,15 @@ static const char *extensions[] = { ".c", ".cpp", ".h", ".py", ".java", ".js", ".mk", ".html", - "Makefile", ".css", ".json", ".cs", ".csproj", ".sln", ".toml", ".rs" + "Makefile", ".css", ".json", ".cs", ".csproj", ".sln", ".toml", ".rs", + ".go", ".rb", ".swift", ".php", ".pl", ".sh", ".bash", ".sql", + ".xml", ".yaml", ".yml", ".kt", ".dart", ".scala", ".clj", ".asm", + ".m", ".r", ".lua", ".groovy", ".v", ".pas", ".d", ".f90", ".f95", + ".for", ".s", ".tcl", ".vhdl", ".verilog", ".coffee", ".less", ".scss", + ".ps1", ".psm1", ".cmd", ".bat", ".json5", ".cxx", ".cc", ".hpp", + ".hxx", ".inc", ".nsi", ".ninja", ".cmake", ".cmake.in", ".mk.in", + ".make", ".makefile", ".gyp", ".gypi", ".pro", ".qml", ".ui", ".wxs", + ".wxl", ".wxi", ".wxl", ".wxs", ".wxi", ".wxl", ".wxs", ".wxi" }; static const size_t ext_count = sizeof(extensions) / sizeof(extensions[0]); @@ -101,4 +109,4 @@ char *index_directory(const char *dir_path) { char *result = strdup(json_object_to_json_string(jarray)); json_object_put(jarray); return result; -} +} \ No newline at end of file diff --git a/main.c b/main.c index 39687a9..e82784d 100644 --- a/main.c +++ b/main.c @@ -139,6 +139,7 @@ void repl() { line = line_read("> "); if (!line || !*line) continue; + if (!strncmp(line, "!dump", 5)) { printf("%s\n", message_json()); continue; @@ -218,7 +219,6 @@ void init() { line_init(); auth_init(); db_initialize(); - char *schema = db_get_schema(); char payload[1024 * 1024] = {0}; snprintf(payload, sizeof(payload), diff --git a/messages.h b/messages.h index 069d83b..683036e 100644 --- a/messages.h +++ b/messages.h @@ -28,7 +28,7 @@ #include "json-c/json.h" #include "tools.h" #include <string.h> - +#include "db_utils.h" struct json_object *message_array = NULL; struct json_object *message_list() { @@ -77,6 +77,9 @@ void message_add_object(json_object *message) { json_object_array_add(messages, message); } + +struct json_object *message_add(const char *role, const char *content); + struct json_object *message_add(const char *role, const char *content) { struct json_object *messages = message_list(); struct json_object *message = json_object_new_object(); diff --git a/rpylib.so b/rpylib.so index 3595647..c59d3aa 100755 Binary files a/rpylib.so and b/rpylib.so differ diff --git a/utils.h b/utils.h index 8f50822..88f1cad 100644 --- a/utils.h +++ b/utils.h @@ -20,38 +20,77 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> + + +#ifdef _WIN32 +#include <windows.h> +#else #include <unistd.h> - -char *expand_home_directory(const char *path) { - if (path == NULL) - return NULL; - - if (path[0] == '~' && path[1] == '/') { - const char *home_dir = getenv("HOME"); - if (home_dir == NULL) { +#include <limits.h> #include <pwd.h> -#include <unistd.h> - struct passwd *pw = getpwuid(getuid()); - if (pw == NULL) - return NULL; - home_dir = pw->pw_dir; +#endif + +void get_current_directory() { + char buffer[PATH_MAX]; + +#ifdef _WIN32 + DWORD length = GetCurrentDirectory(PATH_MAX, buffer); + if (length > 0 && length < PATH_MAX) { + printf("Current Directory: %s\n", buffer); + } else { + printf("Error getting current directory.\n"); + } +#else + if (getcwd(buffer, sizeof(buffer)) != NULL) { + printf("Current Directory: %s\n", buffer); + } else { + perror("Error getting current directory"); + } +#endif +} + +char* expand_home_directory(const char* path) { + if (path[0] != '~') { + return strdup(path); // Return the original path if it doesn't start with ~ } - size_t home_len = strlen(home_dir); - size_t path_len = strlen(path) - 1; - char *expanded_path = malloc(home_len + path_len + 1); + char* home_dir; - if (expanded_path == NULL) - return NULL; +#ifdef _WIN32 + home_dir = getenv("USERPROFILE"); // Get home directory on Windows +#else + struct passwd* pw = getpwuid(getuid()); + home_dir = pw->pw_dir; // Get home directory on Linux +#endif - strcpy(expanded_path, home_dir); - strcat(expanded_path, path + 1); + if (home_dir == NULL) { + return NULL; // Error getting home directory + } + // Allocate memory for the expanded path + size_t expanded_size = strlen(home_dir) + strlen(path); + char* expanded_path = (char *)malloc(expanded_size); + if (expanded_path == NULL) { + return NULL; // Memory allocation error + } + + // Construct the expanded path + snprintf(expanded_path, expanded_size, "%s%s", home_dir, path + 1); return expanded_path; - } else { - return strdup(path); - } } + +unsigned long hash(const char *str) { + unsigned long hash = 5381; // Starting value + int c; + + while ((c = *str++)) { + hash = ((hash << 5) + hash) + c; // hash * 33 + c + } + + return hash; +} + + char *read_file(const char *path) { char *expanded_path = expand_home_directory(path); FILE *file = fopen(expanded_path, "r");