Basic ANSIBBS terminal working. More features needed.

This commit is contained in:
Scott Duensing 2021-11-04 19:42:23 -05:00
parent 5287b9870e
commit 1de306bef7
4 changed files with 41 additions and 44 deletions

View file

@ -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/

View file

@ -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 \

View file

@ -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; y<rows; y++) {
@ -225,8 +226,8 @@ TerminalT *terminalNew(uint16_t x, uint16_t y, uint16_t cols, uint16_t rows) {
if (!terminal) return NULL;
// Default font. Also see terminalInit.
w = fontWidthGet(_guiFont8) * cols;
h = fontHeightGet(_guiFont8) * rows;
w = fontWidthGet(_guiFont) * cols;
h = fontHeightGet(_guiFont) * rows;
widget = widgetInit(W(terminal), MAGIC_TERMINAL, x, y, w, h, 0, 0, 0, 0);
if (!widget) {
@ -601,7 +602,8 @@ void terminalPrintChar(TerminalT *terminal, uint8_t c) {
// Cursor restore.
case 'u':
termWrite("Cursor restore %d %d\n", terminal->saveX, terminal->saveX);
terminalCursorMove(terminal, terminal->saveX, terminal->saveY);
terminal->cursorX = terminal->saveX;
terminal->cursorY = terminal->saveY;
terminalSequenceReset(terminal);
break;

View file

@ -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();