payredu

[WIP] Cross-platform ledger GUI written in c99

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
#include <stdio.h>
#include <stdlib.h>
// TODO enable this for GUI
//#include <dlfcn.h>
#include <signal.h>
#ifndef _WIN32
#include <unistd.h>
#endif

#include <book.h>

#define MAX_MEMORY 4064
#define BUFFER_SIZE 256

int should_exit = 0;

void
sig_handle() {
	printf("Reloaded\n");
	system("date");
	should_exit = 1;
}

typedef void* (*module_main_func)(const char*, size_t);

#define die(...) \
	do { printf(__VA_ARGS__); \
	exit(-1); } while(0);

int
main(int argc, char* argv[]) {
	FILE* in = NULL;
	char* file_to_open = NULL;
	// FIXME this is for debugging, payredu will not open any file by default
	if (argc == 1) file_to_open = "october-2023.txt";
	else for (int i = 1; i < argc; i++)
	if (argv[i][0] == '-' && strlen(argv[i]) == 2) {
		switch (argv[i][1]) {
			case 'f':
				file_to_open = argv[++i];
				break;
			default:
				printf("unknown flag: %s\n", argv[i]);
				break;
		}
	} else die("invalid argument: %s", argv[i]);

	if (file_to_open == NULL)
		die("require a file to open, pass -f <filename>");

	in = fopen(file_to_open, "r");

	char* data = (char*)malloc(2048 * sizeof(char));
	size_t data_size = 0;
	size_t c_read =  0;
	while((c_read = fread(data + data_size + 0, 1, BUFFER_SIZE, in)) != 0) {
		data_size += c_read;
	}
	if (ferror(in)) fprintf(stderr, "Error reading file\n");
	fprintf(stdout, "Startig loop\n");
	ledger_parse_data(data, data_size);
	return 0;
}