diff --git a/LICENSE b/LICENSE index 773cf6e..3354f2f 100644 --- a/LICENSE +++ b/LICENSE @@ -32,6 +32,11 @@ MemWatch http://www.linkdata.se/sourcecode/memwatch/ GPL2 +minicoro +-------- +https://github.com/edubart/minicoro +Public Domain or MIT No Attribution + SDL2 ---- https://www.libsdl.org/ diff --git a/client/client.pro b/client/client.pro index 8feeca2..f6660a0 100644 --- a/client/client.pro +++ b/client/client.pro @@ -40,13 +40,17 @@ LINUX_SOURCES = \ INCLUDEPATH += \ $$LINUX_INCLUDES \ - $$PWD/src \ + $$PWD/src/thirdparty \ $$PWD/src/system \ $$PWD/src/gui \ - $$PWD/src/thirdparty + $$PWD/src HEADERS = \ $$LINUX_HEADERS \ + src/thirdparty/stb_ds.h \ + src/thirdparty/stb_image.h \ + src/thirdparty/memwatch/memwatch.h \ + src/thirdparty/minicoro/minicoro.h \ src/system/memory.h \ src/system/keyboard.h \ src/system/task.h \ @@ -56,10 +60,6 @@ HEADERS = \ src/system/mouse.h \ src/system/vesa.h \ src/system/os.h \ - src/thirdparty/stb_ds.h \ - src/thirdparty/stb_image.h \ - src/thirdparty/memwatch/memwatch.h \ - src/thirdparty/minicoro/minicoro.h \ src/gui/listbox.h \ src/gui/terminal.h \ src/gui/updown.h \ diff --git a/client/src/gui/terminal.c b/client/src/gui/terminal.c index b2702a0..a73ee99 100644 --- a/client/src/gui/terminal.c +++ b/client/src/gui/terminal.c @@ -25,7 +25,8 @@ #include "terminal.h" -#define termWrite(...) logWrite(__VA_ARGS__) +//#define termWrite(...) logWrite(__VA_ARGS__) +#define termWrite(...) while(0){} #define TERMINAL_CELL_GET_FLAG(t,x,y,f) (((t)->cells[(x)][(y)].flags & (1 << (f))) != 0) @@ -51,7 +52,7 @@ static int16_t terminalConvertToInt(char *number, int16_t defaultValue) { char *end = NULL; int16_t result = (int16_t)strtol(number, &end, 10); - if (end == NULL) result = defaultValue; + if (end == NULL || number[0] == 0) result = defaultValue; return result; } @@ -133,7 +134,7 @@ WidgetT *terminalInit(WidgetT *widget, uint16_t cols, uint16_t rows) { t->base.paintMethod = terminalPaint; t->base.keyboardEventMethod = terminalKeyboardEvent; t->base.mouseEventMethod = terminalMouseEvent; - t->font = _guiFont8; // Default font. Also see terminalNew. + t->font = _guiFont; // Default font. Also see terminalNew. t->cols = cols; t->rows = rows; t->cursorX = 1; @@ -167,22 +168,22 @@ WidgetT *terminalInit(WidgetT *widget, uint16_t cols, uint16_t rows) { } // Set up default palette. - t->palette[TERMINAL_COLOR_BLACK] = vbeMakeColor(0x00, 0x00, 0x00); - t->palette[TERMINAL_COLOR_BLUE] = vbeMakeColor(0x00, 0x00, 0xAA); - t->palette[TERMINAL_COLOR_GREEN] = vbeMakeColor(0x00, 0xAA, 0x00); - t->palette[TERMINAL_COLOR_CYAN] = vbeMakeColor(0x00, 0xAA, 0xAA); - t->palette[TERMINAL_COLOR_RED] = vbeMakeColor(0xAA, 0x00, 0x00); - t->palette[TERMINAL_COLOR_MAGENTA] = vbeMakeColor(0xAA, 0x00, 0xAA); - t->palette[TERMINAL_COLOR_BROWN] = vbeMakeColor(0xAA, 0x55, 0x00); - t->palette[TERMINAL_COLOR_LIGHT_GRAY] = vbeMakeColor(0xAA, 0xAA, 0xAA); - t->palette[TERMINAL_COLOR_DARK_GRAY] = vbeMakeColor(0x55, 0x55, 0x55); - t->palette[TERMINAL_COLOR_BRIGHT_BLUE] = vbeMakeColor(0x55, 0x55, 0xFF); - t->palette[TERMINAL_COLOR_BRIGHT_GREEN] = vbeMakeColor(0x55, 0xFF, 0x55); - t->palette[TERMINAL_COLOR_BRIGHT_CYAN] = vbeMakeColor(0x55, 0xFF, 0xFF); - t->palette[TERMINAL_COLOR_BRIGHT_RED] = vbeMakeColor(0xFF, 0x55, 0x55); - t->palette[TERMINAL_COLOR_BRIGHT_MAGENTA] = vbeMakeColor(0xFF, 0x55, 0xFF); - t->palette[TERMINAL_COLOR_YELLOW] = vbeMakeColor(0xFF, 0xFF, 0x55); - t->palette[TERMINAL_COLOR_WHITE] = vbeMakeColor(0xFF, 0xFF, 0xFF); + t->palette[TERMINAL_COLOR_BLACK] = vbeMakeColor( 0, 0, 0); + t->palette[TERMINAL_COLOR_BLUE] = vbeMakeColor(170, 0, 0); + t->palette[TERMINAL_COLOR_GREEN] = vbeMakeColor( 0, 170, 0); + t->palette[TERMINAL_COLOR_CYAN] = vbeMakeColor(170, 85, 0); + t->palette[TERMINAL_COLOR_RED] = vbeMakeColor( 0, 0, 170); + t->palette[TERMINAL_COLOR_MAGENTA] = vbeMakeColor(170, 0, 170); + t->palette[TERMINAL_COLOR_BROWN] = vbeMakeColor( 0, 170, 170); + t->palette[TERMINAL_COLOR_LIGHT_GRAY] = vbeMakeColor(170, 170, 170); + t->palette[TERMINAL_COLOR_DARK_GRAY] = vbeMakeColor( 85, 85, 85); + t->palette[TERMINAL_COLOR_BRIGHT_BLUE] = vbeMakeColor(255, 85, 85); + t->palette[TERMINAL_COLOR_BRIGHT_GREEN] = vbeMakeColor( 85, 255, 85); + t->palette[TERMINAL_COLOR_BRIGHT_CYAN] = vbeMakeColor(255, 255, 85); + t->palette[TERMINAL_COLOR_BRIGHT_RED] = vbeMakeColor( 85, 85, 255); + t->palette[TERMINAL_COLOR_BRIGHT_MAGENTA] = vbeMakeColor(255, 85, 255); + t->palette[TERMINAL_COLOR_YELLOW] = vbeMakeColor( 85, 255, 255); + t->palette[TERMINAL_COLOR_WHITE] = vbeMakeColor(255, 255, 255); // Default attributes is gray on black, no bold, no blink, and dirty. for (y=0; ysaveX, terminal->saveX); - terminalCursorMove(terminal, terminal->saveX, terminal->saveY); + terminal->cursorX = terminal->saveX; + terminal->cursorY = terminal->saveY; terminalSequenceReset(terminal); break; diff --git a/client/src/main.c b/client/src/main.c index 2effdd3..db229f0 100644 --- a/client/src/main.c +++ b/client/src/main.c @@ -131,6 +131,7 @@ void mainLoop(void *data) { vbeWaitVBlank(); vbePresent(); + taskYield(); } while (key != 27); // Exit on ESC. imageUnload(&pointer); @@ -141,7 +142,6 @@ void terminalTest(void *data) { FILE *in = NULL; char *buffer = NULL; uint16_t length = 0; - uint16_t x = 0; (void)data; @@ -155,17 +155,7 @@ void terminalTest(void *data) { fclose(in); buffer[length] = 0; - logWrite("ANSI loaded.\n"); - - while (x < length) { - if (lastKey == 27) break; -// if (lastKey == ' ') { - lastKey = 0; - terminalPrintChar(t1, buffer[x]); - x++; -// } - taskYield(); - } + terminalPrint(t1, buffer); free(buffer); } @@ -202,7 +192,7 @@ void test(void *data) { guiAttach(W(desktop), W(w2)); w3 = windowNew(300, 300, 300, 200, "Window 3"); guiAttach(W(desktop), W(w3)); - w4 = windowNew(10, 10, 7 + 8 + (80 * 8), 26 + 8 + (24 * 8), "Terminal"); + w4 = windowNew(10, 10, 7 + 8 + (80 * 8), 26 + 8 + (24 * 14), "Terminal"); guiAttach(W(desktop), W(w4)); // Window 1 @@ -260,7 +250,7 @@ void test(void *data) { t1 = terminalNew(0, 0, 80, 24); guiAttach(W(w4), W(t1)); - taskCreate(terminalTest, NULL); + taskCreate(terminalTest, "terminalTest"); } @@ -319,8 +309,8 @@ int main(int argc, char *argv[]) { guiStartup(); taskStartup(); - taskCreate(test, NULL); - taskCreate(mainLoop, NULL); + taskCreate(test, "test"); + taskCreate(mainLoop, "mainLoop"); taskRun(); taskShutdown();