#define IS_CONTROL(ch) !((ch) & 0xffffff60UL)
+static int has_default = 0;
+
enum {
C0_NUL = 0x00,
C0_SOH, C0_STX, C0_ETX, C0_EOT, C0_ENQ, C0_ACK, C0_BEL,
CASE(27, rt->curattrs &= ~A_REVERSE);
CASE(28, rt->curattrs &= ~A_INVIS);
- case 30 ... 37:
- rt->curattrs &= ~0xf0;
- rt->curattrs |= (param[i] - 29) << 4;
+ case 30 ... 37: /* fg */
+ if (has_default) {
+ rt->curattrs &= ~0xf0;
+ rt->curattrs |= (param[i] + 1 - 30) << 4;
+ } else {
+ rt->curattrs &= ~070;
+ rt->curattrs |= (7 - (param[i] - 30)) << 3;
+ }
break;
case 39:
- rt->curattrs &= ~0xf0;
+ rt->curattrs &= has_default ? ~0xf0 : ~070;
break;
- case 40 ... 47:
- rt->curattrs &= ~0x0f;
- rt->curattrs |= (param[i] - 39);
+ case 40 ... 47: /* bg */
+ if (has_default) {
+ rt->curattrs &= ~0x0f;
+ rt->curattrs |= (param[i] + 1 - 40);
+ } else {
+ rt->curattrs &= ~007;
+ rt->curattrs |= (param[i] - 40);
+ }
break;
case 49:
- rt->curattrs &= ~0x0f;
+ rt->curattrs &= has_default ? ~0x0f : ~007;
break;
default:
rt->cols = cols;
/* default mode is replace */
- rt->insert = false;
+ rt->insert = false;
/* create the cell matrix */
rt->lines = (mtty_row_t*)calloc(sizeof(mtty_row_t), rt->rows);
setlocale(LC_ALL, "");
initscr();
start_color();
- use_default_colors();
noecho();
raw();
nodelay(stdscr, TRUE);
keypad(stdscr, TRUE);
+ curs_set(0);
ESCDELAY=50;
- for (int i = -1; i < 8; i++) {
- for (int j = -1; j < 8; j++) {
- init_pair((i + 1) * 16 + j + 1, i, j);
+ if (COLORS > 8) {
+ use_default_colors();
+ assume_default_colors(-1, -1);
+ has_default = 1;
+
+ for (int bg = -1; bg < 8; bg++) {
+ for (int fg = -1; fg < 8; fg++) {
+ init_pair((fg + 1) * 16 + bg + 1, fg, bg);
+ }
+ }
+ } else {
+ for (int bg = 0; bg < 8; bg++) {
+ for (int fg = 0; fg < 8; fg++) {
+ init_pair((7 - fg) * 8 + bg, fg, bg);
+ }
}
}
}