Rework application to support GTK4 GUI by default and TUI via -t flag
Some checks failed
Build / build (push) Failing after 4s
Some checks failed
Build / build (push) Failing after 4s
This commit is contained in:
183
main.c
183
main.c
@@ -3,15 +3,25 @@
|
||||
#include <string.h>
|
||||
#include "draw.h"
|
||||
#include "main.h"
|
||||
#include "gui.h"
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
char input[4096];
|
||||
int use_tui = 0;
|
||||
char* filename = NULL;
|
||||
for (int i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-t") == 0) {
|
||||
use_tui = 1;
|
||||
} else if (filename == NULL && argv[i][0] != '-') {
|
||||
filename = argv[i];
|
||||
}
|
||||
}
|
||||
|
||||
char* data = NULL;
|
||||
size_t data_len = 0;
|
||||
|
||||
if (argc > 1) {
|
||||
if (filename != NULL) {
|
||||
// Read from file
|
||||
FILE *f = fopen(argv[1], "rb");
|
||||
FILE *f = fopen(filename, "rb");
|
||||
if (f == NULL) {
|
||||
perror("Error opening file");
|
||||
return 1;
|
||||
@@ -26,86 +36,99 @@ int main(int argc, char *argv[]) {
|
||||
fclose(f);
|
||||
return 1;
|
||||
}
|
||||
fread(data, 1, data_len, f);
|
||||
data[data_len] = '\0';
|
||||
size_t read_bytes = fread(data, 1, data_len, f);
|
||||
data[read_bytes] = '\0';
|
||||
data_len = read_bytes;
|
||||
fclose(f);
|
||||
} else {
|
||||
// Get input from user
|
||||
drawEdges();
|
||||
drawEmptyLines(1);
|
||||
drawTitle(TITLE);
|
||||
drawEmptyLines(1);
|
||||
drawEdges();
|
||||
|
||||
getUserInput(input, "What's weighing on your soul?");
|
||||
data = strdup(input);
|
||||
data_len = strlen(data);
|
||||
}
|
||||
|
||||
if (data == NULL || strlen(data) == 0) {
|
||||
printf("The void remains silent. (No input provided)\n");
|
||||
if (use_tui) {
|
||||
char input[4096];
|
||||
if (data == NULL) {
|
||||
// Get input from user
|
||||
drawEdges();
|
||||
drawEmptyLines(1);
|
||||
drawTitle(TITLE);
|
||||
drawEmptyLines(1);
|
||||
drawEdges();
|
||||
|
||||
getUserInput(input, "What's weighing on your soul?");
|
||||
data = strdup(input);
|
||||
data_len = strlen(data);
|
||||
}
|
||||
|
||||
if (data == NULL || strlen(data) == 0) {
|
||||
printf("The void remains silent. (No input provided)\n");
|
||||
free(data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Main interaction loop
|
||||
int choice = -1;
|
||||
while (choice != 0) {
|
||||
printf("\033[H\033[J"); // Clear screen
|
||||
drawEdges();
|
||||
drawEmptyLines(1);
|
||||
drawTitle("THE VOID AWAITS");
|
||||
drawEmptyLines(1);
|
||||
|
||||
if (filename != NULL) {
|
||||
char file_info[256];
|
||||
snprintf(file_info, sizeof(file_info), "File: %s (%zu bytes)", filename, data_len);
|
||||
drawTitle(file_info);
|
||||
} else {
|
||||
// Show a preview of the string
|
||||
char preview[100];
|
||||
strncpy(preview, data, 96);
|
||||
preview[96] = '\0';
|
||||
if (strlen(data) > 96) strcat(preview, "...");
|
||||
drawTitle(preview);
|
||||
}
|
||||
|
||||
drawEmptyLines(1);
|
||||
drawEdges();
|
||||
drawEmptyLines(1);
|
||||
drawTitle("1. Scream it into the void (Standard)");
|
||||
drawTitle("2. Let it burn (Fire)");
|
||||
drawTitle("3. Let it dissolve (Acid)");
|
||||
drawTitle("0. Keep it to yourself (Exit)");
|
||||
drawEmptyLines(1);
|
||||
drawEdges();
|
||||
|
||||
printf("Choose your release: ");
|
||||
if (scanf("%d", &choice) != 1) {
|
||||
while (getchar() != '\n'); // clear buffer
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (choice) {
|
||||
case 1:
|
||||
screamIntoVoid(data);
|
||||
choice = 0; // Exit after screaming
|
||||
break;
|
||||
case 2:
|
||||
burnText(data);
|
||||
choice = 0;
|
||||
break;
|
||||
case 3:
|
||||
dissolveText(data);
|
||||
choice = 0;
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
printf("Invalid choice.\n");
|
||||
sleep_ms(1000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
free(data);
|
||||
return 0;
|
||||
} else {
|
||||
// Run GUI
|
||||
int status = run_gui(argc, argv, data ? data : "");
|
||||
free(data);
|
||||
return status;
|
||||
}
|
||||
|
||||
// Main interaction loop
|
||||
int choice = -1;
|
||||
while (choice != 0) {
|
||||
printf("\033[H\033[J"); // Clear screen
|
||||
drawEdges();
|
||||
drawEmptyLines(1);
|
||||
drawTitle("THE VOID AWAITS");
|
||||
drawEmptyLines(1);
|
||||
|
||||
if (argc > 1) {
|
||||
char file_info[256];
|
||||
snprintf(file_info, sizeof(file_info), "File: %s (%zu bytes)", argv[1], data_len);
|
||||
drawTitle(file_info);
|
||||
} else {
|
||||
// Show a preview of the string
|
||||
char preview[100];
|
||||
strncpy(preview, data, 96);
|
||||
if (strlen(data) > 96) strcat(preview, "...");
|
||||
drawTitle(preview);
|
||||
}
|
||||
|
||||
drawEmptyLines(1);
|
||||
drawEdges();
|
||||
drawEmptyLines(1);
|
||||
drawTitle("1. Scream it into the void (Standard)");
|
||||
drawTitle("2. Let it burn (Fire)");
|
||||
drawTitle("3. Let it dissolve (Acid)");
|
||||
drawTitle("0. Keep it to yourself (Exit)");
|
||||
drawEmptyLines(1);
|
||||
drawEdges();
|
||||
|
||||
printf("Choose your release: ");
|
||||
if (scanf("%d", &choice) != 1) {
|
||||
while (getchar() != '\n'); // clear buffer
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (choice) {
|
||||
case 1:
|
||||
screamIntoVoid(data);
|
||||
choice = 0; // Exit after screaming
|
||||
break;
|
||||
case 2:
|
||||
burnText(data);
|
||||
choice = 0;
|
||||
break;
|
||||
case 3:
|
||||
dissolveText(data);
|
||||
choice = 0;
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
printf("Invalid choice.\n");
|
||||
sleep_ms(1000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
free(data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user