/* 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 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; uint state; struct { uint s[ParamCap]; uint n, i; } param; enum Mode mode; struct { uint y, x; } save; struct { uint top, bot; } scroll; uint y, x; uint charset; 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);