mirror of
https://github.com/xcat2/confluent.git
synced 2024-12-25 12:41:39 +00:00
e26218eb92
The tmt library had a bug with ECH with cursor position. Flesh out the dump_vt to translate the attributes to VT codes for the buffer to look the same as the attributes indicate.
141 lines
4.1 KiB
C
141 lines
4.1 KiB
C
/* Copyright (c) 2017 Rob King
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * Neither the name of the copyright holder nor the
|
|
* names of contributors may be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS,
|
|
* COPYRIGHT HOLDERS, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef TMT_H
|
|
#define TMT_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <wchar.h>
|
|
|
|
/**** INVALID WIDE CHARACTER */
|
|
#ifndef TMT_INVALID_CHAR
|
|
#define TMT_INVALID_CHAR ((wchar_t)0xfffd)
|
|
#endif
|
|
|
|
/**** INPUT SEQUENCES */
|
|
#define TMT_KEY_UP "\033[A"
|
|
#define TMT_KEY_DOWN "\033[B"
|
|
#define TMT_KEY_RIGHT "\033[C"
|
|
#define TMT_KEY_LEFT "\033[D"
|
|
#define TMT_KEY_HOME "\033[H"
|
|
#define TMT_KEY_END "\033[Y"
|
|
#define TMT_KEY_INSERT "\033[L"
|
|
#define TMT_KEY_BACKSPACE "\x08"
|
|
#define TMT_KEY_ESCAPE "\x1b"
|
|
#define TMT_KEY_BACK_TAB "\033[Z"
|
|
#define TMT_KEY_PAGE_UP "\033[V"
|
|
#define TMT_KEY_PAGE_DOWN "\033[U"
|
|
#define TMT_KEY_F1 "\033OP"
|
|
#define TMT_KEY_F2 "\033OQ"
|
|
#define TMT_KEY_F3 "\033OR"
|
|
#define TMT_KEY_F4 "\033OS"
|
|
#define TMT_KEY_F5 "\033OT"
|
|
#define TMT_KEY_F6 "\033OU"
|
|
#define TMT_KEY_F7 "\033OV"
|
|
#define TMT_KEY_F8 "\033OW"
|
|
#define TMT_KEY_F9 "\033OX"
|
|
#define TMT_KEY_F10 "\033OY"
|
|
|
|
/**** BASIC DATA STRUCTURES */
|
|
typedef struct TMT TMT;
|
|
|
|
typedef enum{
|
|
TMT_COLOR_DEFAULT = 0,
|
|
TMT_COLOR_BLACK = 1,
|
|
TMT_COLOR_RED,
|
|
TMT_COLOR_GREEN,
|
|
TMT_COLOR_YELLOW,
|
|
TMT_COLOR_BLUE,
|
|
TMT_COLOR_MAGENTA,
|
|
TMT_COLOR_CYAN,
|
|
TMT_COLOR_WHITE,
|
|
TMT_COLOR_MAX
|
|
} tmt_color_t;
|
|
|
|
typedef struct TMTATTRS TMTATTRS;
|
|
struct TMTATTRS{
|
|
bool bold;
|
|
bool dim;
|
|
bool underline;
|
|
bool blink;
|
|
bool reverse;
|
|
bool invisible;
|
|
tmt_color_t fg;
|
|
tmt_color_t bg;
|
|
};
|
|
|
|
typedef struct TMTCHAR TMTCHAR;
|
|
struct TMTCHAR{
|
|
wchar_t c;
|
|
TMTATTRS a;
|
|
};
|
|
|
|
typedef struct TMTPOINT TMTPOINT;
|
|
struct TMTPOINT{
|
|
size_t r;
|
|
size_t c;
|
|
};
|
|
|
|
typedef struct TMTLINE TMTLINE;
|
|
struct TMTLINE{
|
|
bool dirty;
|
|
TMTCHAR chars[];
|
|
};
|
|
|
|
typedef struct TMTSCREEN TMTSCREEN;
|
|
struct TMTSCREEN{
|
|
size_t nline;
|
|
size_t ncol;
|
|
|
|
TMTLINE **lines;
|
|
};
|
|
|
|
/**** CALLBACK SUPPORT */
|
|
typedef enum{
|
|
TMT_MSG_MOVED,
|
|
TMT_MSG_UPDATE,
|
|
TMT_MSG_ANSWER,
|
|
TMT_MSG_BELL,
|
|
TMT_MSG_CURSOR
|
|
} tmt_msg_t;
|
|
|
|
typedef void (*TMTCALLBACK)(tmt_msg_t m, struct TMT *v, const void *r, void *p);
|
|
|
|
/**** PUBLIC FUNCTIONS */
|
|
TMT *tmt_open(size_t nline, size_t ncol, TMTCALLBACK cb, void *p,
|
|
const wchar_t *acs);
|
|
void tmt_close(TMT *vt);
|
|
bool tmt_resize(TMT *vt, size_t nline, size_t ncol);
|
|
void tmt_write(TMT *vt, const char *s, size_t n);
|
|
const TMTSCREEN *tmt_screen(const TMT *vt);
|
|
const TMTPOINT *tmt_cursor(const TMT *vt);
|
|
void tmt_clean(TMT *vt);
|
|
void tmt_reset(TMT *vt);
|
|
|
|
#endif
|