diff --git a/main.c b/main.c index 628fb93..1e86d54 100644 --- a/main.c +++ b/main.c @@ -8,6 +8,7 @@ #include "cli.h" #include "gui.h" #include "dispatcher.h" +#include "carla.h" static Engine engine; static volatile int keep_running = 1; @@ -87,6 +88,10 @@ int main(int argc, char *argv[]) { initial_state.clips[i].read_position = 0; } + // Initialize Carla host in the initial state (before dispatcher starts) + carla_init(&initial_state.carla_host, NULL); + carla_scan_plugins(&initial_state.carla_host); + // Initialize dispatcher dispatch = dispatcher_init(&initial_state); diff --git a/tui.c b/tui.c index 428cdaf..183347d 100644 --- a/tui.c +++ b/tui.c @@ -815,23 +815,34 @@ void tui_init(Engine *engine) { g_dispatch = engine->dispatch; initscr(); + if (!has_colors()) { + endwin(); + fprintf(stderr, "Terminal does not support colors\n"); + exit(1); + } + cbreak(); noecho(); keypad(stdscr, TRUE); curs_set(0); + // Check terminal size + if (LINES < 20 || COLS < 40) { + endwin(); + fprintf(stderr, "Terminal too small (need at least 20x40)\n"); + exit(1); + } + mousemask(BUTTON1_CLICKED | BUTTON3_CLICKED | BUTTON2_CLICKED | BUTTON1_DOUBLE_CLICKED, NULL); mouseinterval(10); - if (has_colors()) { - start_color(); - init_pair(COLOR_EMPTY, COLOR_WHITE, COLOR_BLACK); - init_pair(COLOR_RECORDING, COLOR_RED, COLOR_BLACK); - init_pair(COLOR_LOOPING, COLOR_GREEN, COLOR_BLACK); - init_pair(COLOR_STOPPED, COLOR_BLUE, COLOR_BLACK); - init_pair(COLOR_SELECTED, COLOR_BLACK, COLOR_CYAN); - init_pair(COLOR_HELP, COLOR_CYAN, COLOR_BLACK); - } + start_color(); + init_pair(COLOR_EMPTY, COLOR_WHITE, COLOR_BLACK); + init_pair(COLOR_RECORDING, COLOR_RED, COLOR_BLACK); + init_pair(COLOR_LOOPING, COLOR_GREEN, COLOR_BLACK); + init_pair(COLOR_STOPPED, COLOR_BLUE, COLOR_BLACK); + init_pair(COLOR_SELECTED, COLOR_BLACK, COLOR_CYAN); + init_pair(COLOR_HELP, COLOR_CYAN, COLOR_BLACK); } void tui_run(Engine *engine) { @@ -844,11 +855,7 @@ void tui_run(Engine *engine) { marks[i] = -1; } - // Initialize Carla - AppState init_state = dispatcher_get_state(); - carla_init(&init_state.carla_host, engine->client); - carla_scan_plugins(&init_state.carla_host); - + // Carla is now initialized in main.c before dispatcher starts draw_grid(); while (1) {