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
zcmeHQdw5&Ll^@wjZ~{i=9Ue_CX#x(xisi(wfEPQlo$IXfAWlM{35u+TEh0-oy0V?L
zg%n3Lst{`mVS(>!8`{!Mm;Lq&rLcj1P?JC&Z7G4>(m=OOcoeP(?S@A~8n$SEXYP!A
zC4AX_w0~;g>dg7gIcH|hJnr1NzLQ%!T%Bb$8>vm
z`CSV=^2=WvM02v0B0sBkI4t}xDfJTybHl-*xp6HL^UocKHTvRB1A{%Gy1?efXsoWz
z>8syV8)ynQd+G;$o|@iJu*X|d=a^qxQ|D}&3vO=6R}%_`6GJsaO${{-^BwVsqmJ91
zMYeHKx0%in#;z3f0zrvTUnSYgh!J5j=p0;E;G$yNan<0WFw-EsTTc~nBGg@IC|{0?
z+I$+WFW@={*9=?~&NIm0^efxRY=nm5nYhjn;Q64HxX!|Lk-(^(9Jr?7Ivv*~xX#6O
zDK2xMcKIT%i*Z%sx)2uy*(a!;WQXJo>}!Y_7||E~zw9S!6_QXCQ%8YFC%Ex&w*|h_
z0w
vylyYG%efu)Z>%7fdGs7q2y!HgcfH}
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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;
}
}