From 6d7320a10ded22619ee49eb71e8380fd514b849b Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sat, 10 Aug 2019 15:47:59 -0400 Subject: Rewrite terminal emulator --- term.h | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 term.h (limited to 'term.h') diff --git a/term.h b/term.h new file mode 100644 index 0000000..03d9ac5 --- /dev/null +++ b/term.h @@ -0,0 +1,81 @@ +/* Copyright (C) 2019 C. McEnroe + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include +#include + +#define MIN(a, b) ((a) < (b) ? (a) : (b)) + +typedef unsigned uint; + +enum { + NUL, SOH, STX, ETX, EOT, ENQ, ACK, BEL, + BS, HT, NL, VT, NP, CR, SO, SI, + DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB, + CAN, EM, SUB, ESC, FS, GS, RS, US, + DEL = 0x7F, +}; + +enum Attr { + Bold = 1 << 0, + Dim = 1 << 1, + Italic = 1 << 2, + Underline = 1 << 3, + Blink = 1 << 4, + Reverse = 1 << 5, +}; + +struct Style { + enum Attr attr; + int bg, fg; +}; + +struct Cell { + struct Style style; + wchar_t ch; +}; + +enum Mode { + Insert = 1 << 0, + Wrap = 1 << 1, + Cursor = 1 << 2, +}; + +enum { ParamCap = 16 }; + +struct Term { + uint rows, cols; + char state; + struct { + bool q; + uint s[ParamCap]; + uint n, i; + } param; + enum Mode mode; + struct { + uint y, x; + } save; + struct { + uint top, bot; + } scroll; + uint y, x; + struct Style style; + struct Cell cells[]; +}; + +struct Term *termAlloc(uint rows, uint cols); +void termUpdate(struct Term *term, wchar_t ch); +int termSnapshot(struct Term *term, int fd); -- cgit 1.4.1