From ec5558b648516e83497aa56f2839c339c3ce5c59 Mon Sep 17 00:00:00 2001 From: Tomas Rivera <137088692+Totorile1@users.noreply.github.com> Date: Mon, 30 Mar 2026 12:57:52 +0200 Subject: [PATCH] cleaned debug logic and debug messages --- a.out | Bin 22104 -> 26240 bytes startup.c | 121 ++++++++++++++++++++++++++++++++---------------------- 2 files changed, 73 insertions(+), 48 deletions(-) diff --git a/a.out b/a.out index 5c6468f846a1b74264f790156be91fb851d3d970..1402e5524360cc140e1a9dfc10dc6cb82bc7c8d8 100755 GIT binary patch literal 26240 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 #include -char** getVaultsFromDirectory(char *dirString, size_t *count) { +int compareString(const void *a, const void *b) { // this will be the function used by qsort + const char *str1 = *(const char **)a; + const char *str2 = *(const char **)b; + return strcmp(str1, str2); // strcmp returns <0, 0, >0 +} + + +char** getVaultsFromDirectory(char *dirString, size_t *count, int debug) { // (TODO LATER) it might be a good idea to check if these directories exist // (TODO LATER) expand ~ as it does not work with opendir() // this function is inputed a path to a directory (which comes usually from the config file) and outpus all the suitable directories (so not the hidden ones) which will serve as separate vaults for notes - printf("Opening %s aka the directory of vaults\n", dirString); + if (debug) {printf("\e[0;32m[DEBUG]\e[0m Opening %s aka the directory of vaults\n", dirString);} // originally from https://www.geeksforgeeks.org/c/c-program-list-files-sub-directories-directory/ struct dirent *vaultsDirectoryEntry; DIR *vaultsDirectory = opendir(dirString); if (vaultsDirectory == NULL) // opendir returns NULL if couldn't open directory { - printf("Could not open current directory" ); + printf("\e[0;31mERROR: Could not open current directory\e[0m\n" ); exit(1); //something is fucked up } char **dirsArray = NULL; // will contain all the dirs/vaults size_t dirsCount = 0; // we need to count how many dirs there is to always readjust how many memory we alloc // Refer https://pubs.opengroup.org/onlinepubs/7990989775/xsh/readdir.html // for readdir() + if (debug) {printf("┌------------------------------\n\e[0;32m[DEBUG]\e[0m Files and dirs from the directory\n");} while ((vaultsDirectoryEntry = readdir(vaultsDirectory)) != NULL) { - printf("%s\n", vaultsDirectoryEntry->d_name); // debugs every file/directory + if (debug) {printf("%s\n", vaultsDirectoryEntry->d_name);} // debugs every file/directory if (vaultsDirectoryEntry->d_name[0] != '.') { // if the entry don't start with a dot (so hidden dirs and hidden files) char fullPathEntry[PATH_MAX]; // creates a string of size of the maximum path lenght snprintf(fullPathEntry, sizeof(fullPathEntry), "%s/%s", dirString, vaultsDirectoryEntry->d_name); // sets the full absolute path to fullPathEntry @@ -41,6 +49,7 @@ char** getVaultsFromDirectory(char *dirString, size_t *count) { } } } + if (debug) {printf("└------------------------------\n");} // (TODO LATER) Alphabetically sort them // free's some used memory @@ -49,38 +58,29 @@ char** getVaultsFromDirectory(char *dirString, size_t *count) { return dirsArray; } -int openNvim(char *path) { - printf("Opening with command nvim +:NvimTreeOpen %s\n", path); - execlp("nvim", - "nvim", // we can specify each argument for nvim by passing more args to execlp - path, - NULL); - perror("execlp failed"); - return 1; -} - - -char** getNotesFromVault(char *pathToVault, char *vault, int *count) { +char** getNotesFromVault(char *pathToVault, char *vault, int *count, int debug) { // this function is inputed a path to a vault (which was selected before) and outpus all the suitable notes (so not the hidden ones) - printf("Opening %s aka the vault\n", vault); + if (debug) {printf("\e[0;32m[DEBUG]\e[0m Opening %s aka the vault\n", vault);} // originally from https://www.geeksforgeeks.org/c/c-program-list-files-sub-directories-directory/ struct dirent *notesDirectoryEntry; char tempPath[PATH_MAX]; snprintf(tempPath, sizeof(tempPath), "%s/%s", pathToVault, vault); // sets the full absolute path to fullPathEntry DIR *vaultDirectory = opendir(tempPath); - if (vaultDirectory == NULL) // opendir returns NULL if couldn't open directory - { - printf("Could not open current directory" ); - exit(1); //something is fucked up + if (vaultDirectory == NULL) { // opendir returns NULL if couldn't open directory + printf("\e[0;31mERROR: Could not open current directory\e[0m\n" ); + exit(1); //something is fucked up } char **notesArray = NULL; // will contain all the notes size_t notesCount = 0; // we need to count how many notes there is to always readjust how many memory we alloc // Refer https://pubs.opengroup.org/onlinepubs/7990989775/xsh/readdir.html // for readdir() + if (debug) {printf("┌------------------------------\n\e[0;32m[DEBUG]\e[0m Files and dirs from the vault:\n");} while ((notesDirectoryEntry = readdir(vaultDirectory)) != NULL) { - printf("%s\n", notesDirectoryEntry->d_name); // debugs every note + + if (debug) {printf("%s\n", notesDirectoryEntry->d_name);} + if (notesDirectoryEntry->d_name[0] != '.') { // if the entry don't start with a dot (so hidden dirs and hidden files) char fullPathEntry[PATH_MAX]; // creates a string of size of the maximum path lenght snprintf(fullPathEntry, sizeof(fullPathEntry), "%s/%s/%s", pathToVault, vault, notesDirectoryEntry->d_name); // sets the full absolute path to fullPathEntry @@ -93,6 +93,7 @@ char** getNotesFromVault(char *pathToVault, char *vault, int *count) { } } } + if (debug) {printf("└ ------------------------------\n");} // (TODO LATER) Alphabetically sort them // free's some used memory closedir(vaultDirectory); @@ -100,7 +101,7 @@ char** getNotesFromVault(char *pathToVault, char *vault, int *count) { return notesArray; } -char* ncursesSelect(char **options, char *optionsType, size_t optionsNumber) { // this fonction make a TUI to select one of multiple options. +char* ncursesSelect(char **options, char *optionsType, size_t optionsNumber, int debug) { // this fonction make a TUI to select one of multiple options. int highlight = 0; //curently highlighted option int choice = 1; //selected index int key; @@ -152,18 +153,35 @@ char* ncursesSelect(char **options, char *optionsType, size_t optionsNumber) { / return options[choice]; } -int compareString(const void *a, const void *b) { // this will be the function used by qsort - const char *str1 = *(const char **)a; - const char *str2 = *(const char **)b; - return strcmp(str1, str2); // strcmp returns <0, 0, >0 -} + +int openNvim(char *path, int debug) { + if (debug) {printf("\e[0;32m[DEBUG]\e[0m Opening with command:\nnvim +:NvimTreeOpen %s\n", path);} + execlp("nvim", + "nvim", // we can specify each argument for nvim by passing more args to execlp + path, + NULL); + perror("\e[0;31mERROR: execlp failed. Nvim might be not installed or not in path.\e[0m\n"); + return 1; +} -int main() { + + + +int main(int argc, char *argv[]) { + + int debug = 0; + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i], "-V") == 0) { + debug = 0; + } else if (strcmp(argv[i], "-v") == 0) { + debug = 1; + } + } // Read config file FILE *f = fopen("./config.json", "r"); if (!f) { - fprintf(stderr, "Could not open config.json\n"); + fprintf(stderr, "\e[0;31mERROR: Could not open config.json\e[0m\n"); return 1; } @@ -174,7 +192,7 @@ int main() { char *data = malloc(size + 1); size_t read_bytes = fread(data, 1, size, f); if (read_bytes != size) { - fprintf(stderr, "Failed to read file\n"); + fprintf(stderr, "\e[0;31mERROR: Failed to read file\e[0m\n"); free(data); fclose(f); return 1; @@ -185,7 +203,7 @@ int main() { // Parse JSON cJSON *json = cJSON_Parse(data); if (!json) { - fprintf(stderr, "JSON parse error\n"); + fprintf(stderr, "\e[0;31mERROR: JSON parse error\[0m\n"); free(data); return 1; } @@ -204,11 +222,14 @@ int main() { while(!shouldExit) { // this loop is the vault selector size_t vaultsCount = 0; - char **vaultsArray = getVaultsFromDirectory(notesDirectoryString, &vaultsCount); + char **vaultsArray = getVaultsFromDirectory(notesDirectoryString, &vaultsCount, debug); qsort(vaultsArray, vaultsCount, sizeof(const char *), compareString); // sorts the vaults alphabetically - printf("Available vaults:\n"); - for (size_t i = 0; i < vaultsCount; i++) { - printf("%s\n", vaultsArray[i]); + if (debug) { + printf("┌------------------------------\n\e[0;32m[DEBUG]\e[0m Available vaults:\n"); + for (size_t i = 0; i < vaultsCount; i++) { + printf("%s\n", vaultsArray[i]); + } + printf("└ ------------------------------\n"); } // adds "create a new vault" into the vaultsArray @@ -219,20 +240,23 @@ int main() { vaultsArray[vaultsCount+1] = "Settings"; vaultsArray[vaultsCount+2] = "Quit (Ctrl+C)"; // select a vault - char *vaultSelected = ncursesSelect(vaultsArray, "vault", vaultsCount + extraOptions); - printf("Selected vault:%s\n", vaultSelected); + char *vaultSelected = ncursesSelect(vaultsArray, "vault", vaultsCount + extraOptions, debug); + if (debug) {printf("\e[0;32m[DEBUG]\e[0m Selected vault:%s\n", vaultSelected);} if (vaultSelected != "Create a new vault" && vaultSelected != "Settings" && vaultSelected != "Quit (Ctrl+C)") { int shouldChangeVault = 0; while (!shouldExit && !shouldChangeVault) { // this loop is the note selector int filesCount = 0; - char **filesArray = getNotesFromVault(notesDirectoryString, vaultSelected, &filesCount); + char **filesArray = getNotesFromVault(notesDirectoryString, vaultSelected, &filesCount, debug); qsort(filesArray, filesCount, sizeof(const char *), compareString); // sorts the notes alphabetically - // - printf("Available notes:\n"); - for (size_t i = 0; i < filesCount; i++) { - printf("%s\n", filesArray[i]); + + if (debug) { + printf("┌------------------------------\n\e[0;32m[DEBUG]\e[0m Available notes:\n"); + for (size_t i = 0; i < filesCount; i++) { + printf("%s\n", filesArray[i]); + } + printf("└ ------------------------------\n"); } // adds options int extraNotesOptions = 3; @@ -240,18 +264,19 @@ int main() { filesArray[filesCount] = "Create new note"; filesArray[filesCount+1] = "Back to vault selection"; filesArray[filesCount+2] = "Quit (Ctrl+C)"; - char *noteSelected = ncursesSelect(filesArray, "note", filesCount + extraNotesOptions); - printf("Selected note: %s\n", noteSelected); + char *noteSelected = ncursesSelect(filesArray, "note", filesCount + extraNotesOptions, debug); + if (debug) {printf("\e[0;32m[DEBUG]\e[0m Selected note: %s\n", noteSelected);} + if (noteSelected != "Create new note" && noteSelected != "Back to vault selection" && noteSelected != "Quit (Ctrl+C)") { char fullPath[PATH_MAX]; sprintf(fullPath, "%s/%s/%s", notesDirectoryString, vaultSelected, noteSelected); - openNvim(fullPath); + openNvim(fullPath, debug); } else if (noteSelected == "Create new note") { } else if (noteSelected == "Back to vault selection") { shouldChangeVault = 1; } else if (noteSelected == "Quit (Ctrl+C)") { - printf("The program was exited,\n"); + if (debug) {printf("\e[0;32m[DEBUG]\e[0m The program was exited,\n");} shouldExit = 1; } } @@ -261,7 +286,7 @@ int main() { } else if (vaultSelected == "Settings") { //(TODO LATER) add a way to change the config.json from the app or at least show all the options } else if (vaultSelected == "Quit (Ctrl+C)") { - printf("The program was exited.\n"); + if (debug) {printf("\e[0;32m[DEBUG]\e[0m The program was exited.\n");} shouldExit = 1; } }