OLD | NEW |
(Empty) | |
| 1 /*- |
| 2 * Copyright (c) 2008-2009 Ed Schouten <ed@FreeBSD.org> |
| 3 * All rights reserved. |
| 4 * |
| 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions |
| 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright |
| 11 * notice, this list of conditions and the following disclaimer in the |
| 12 * documentation and/or other materials provided with the distribution. |
| 13 * |
| 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
| 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
| 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 24 * SUCH DAMAGE. |
| 25 * |
| 26 * $FreeBSD: head/sys/teken/teken.h 259667 2013-12-20 21:31:50Z ed $ |
| 27 */ |
| 28 |
| 29 #ifndef _TEKEN_H_ |
| 30 #define _TEKEN_H_ |
| 31 |
| 32 // !!! Start of Mojo addition. |
| 33 #include <stdint.h> |
| 34 // !!! End of Mojo addition. |
| 35 #include <sys/types.h> |
| 36 |
| 37 /* |
| 38 * libteken: terminal emulation library. |
| 39 * |
| 40 * This library converts an UTF-8 stream of bytes to terminal drawing |
| 41 * commands. |
| 42 */ |
| 43 |
| 44 // !!! Start of Mojo addition. |
| 45 #ifdef __cplusplus |
| 46 extern "C" { |
| 47 #endif |
| 48 // !!! End of Mojo addition. |
| 49 |
| 50 typedef uint32_t teken_char_t; |
| 51 typedef unsigned short teken_unit_t; |
| 52 typedef unsigned char teken_format_t; |
| 53 #define TF_BOLD 0x01 /* Bold character. */ |
| 54 #define TF_UNDERLINE 0x02 /* Underline character. */ |
| 55 #define TF_BLINK 0x04 /* Blinking character. */ |
| 56 #define TF_REVERSE 0x08 /* Reverse rendered character. */ |
| 57 #define TF_CJK_RIGHT 0x10 /* Right-hand side of CJK character. */ |
| 58 typedef unsigned char teken_color_t; |
| 59 #define TC_BLACK 0 |
| 60 #define TC_RED 1 |
| 61 #define TC_GREEN 2 |
| 62 #define TC_BROWN 3 |
| 63 #define TC_BLUE 4 |
| 64 #define TC_MAGENTA 5 |
| 65 #define TC_CYAN 6 |
| 66 #define TC_WHITE 7 |
| 67 #define TC_NCOLORS 8 |
| 68 |
| 69 typedef struct { |
| 70 teken_unit_t tp_row; |
| 71 teken_unit_t tp_col; |
| 72 } teken_pos_t; |
| 73 typedef struct { |
| 74 teken_pos_t tr_begin; |
| 75 teken_pos_t tr_end; |
| 76 } teken_rect_t; |
| 77 typedef struct { |
| 78 teken_format_t ta_format; |
| 79 teken_color_t ta_fgcolor; |
| 80 teken_color_t ta_bgcolor; |
| 81 } teken_attr_t; |
| 82 typedef struct { |
| 83 teken_unit_t ts_begin; |
| 84 teken_unit_t ts_end; |
| 85 } teken_span_t; |
| 86 |
| 87 typedef struct __teken teken_t; |
| 88 |
| 89 typedef void teken_state_t(teken_t *, teken_char_t); |
| 90 |
| 91 /* |
| 92 * Drawing routines supplied by the user. |
| 93 */ |
| 94 |
| 95 typedef void tf_bell_t(void *); |
| 96 typedef void tf_cursor_t(void *, const teken_pos_t *); |
| 97 typedef void tf_putchar_t(void *, const teken_pos_t *, teken_char_t, |
| 98 const teken_attr_t *); |
| 99 typedef void tf_fill_t(void *, const teken_rect_t *, teken_char_t, |
| 100 const teken_attr_t *); |
| 101 typedef void tf_copy_t(void *, const teken_rect_t *, const teken_pos_t *); |
| 102 typedef void tf_param_t(void *, int, unsigned int); |
| 103 #define TP_SHOWCURSOR 0 |
| 104 #define TP_KEYPADAPP 1 |
| 105 #define TP_AUTOREPEAT 2 |
| 106 #define TP_SWITCHVT 3 |
| 107 #define TP_132COLS 4 |
| 108 #define TP_SETBELLPD 5 |
| 109 #define TP_SETBELLPD_PITCH(pd) ((pd) >> 16) |
| 110 #define TP_SETBELLPD_DURATION(pd) ((pd) & 0xffff) |
| 111 #define TP_MOUSE 6 |
| 112 typedef void tf_respond_t(void *, const void *, size_t); |
| 113 |
| 114 typedef struct { |
| 115 tf_bell_t *tf_bell; |
| 116 tf_cursor_t *tf_cursor; |
| 117 tf_putchar_t *tf_putchar; |
| 118 tf_fill_t *tf_fill; |
| 119 tf_copy_t *tf_copy; |
| 120 tf_param_t *tf_param; |
| 121 tf_respond_t *tf_respond; |
| 122 } teken_funcs_t; |
| 123 |
| 124 typedef teken_char_t teken_scs_t(teken_t *, teken_char_t); |
| 125 |
| 126 /* |
| 127 * Terminal state. |
| 128 */ |
| 129 |
| 130 struct __teken { |
| 131 const teken_funcs_t *t_funcs; |
| 132 void *t_softc; |
| 133 |
| 134 teken_state_t *t_nextstate; |
| 135 unsigned int t_stateflags; |
| 136 |
| 137 #define T_NUMSIZE 8 |
| 138 unsigned int t_nums[T_NUMSIZE]; |
| 139 unsigned int t_curnum; |
| 140 |
| 141 teken_pos_t t_cursor; |
| 142 teken_attr_t t_curattr; |
| 143 teken_pos_t t_saved_cursor; |
| 144 teken_attr_t t_saved_curattr; |
| 145 |
| 146 teken_attr_t t_defattr; |
| 147 teken_pos_t t_winsize; |
| 148 |
| 149 /* For DECSTBM. */ |
| 150 teken_span_t t_scrollreg; |
| 151 /* For DECOM. */ |
| 152 teken_span_t t_originreg; |
| 153 |
| 154 #define T_NUMCOL 160 |
| 155 unsigned int t_tabstops[T_NUMCOL / (sizeof(unsigned int) * 8)]; |
| 156 |
| 157 unsigned int t_utf8_left; |
| 158 teken_char_t t_utf8_partial; |
| 159 |
| 160 unsigned int t_curscs; |
| 161 teken_scs_t *t_saved_curscs; |
| 162 teken_scs_t *t_scs[2]; |
| 163 }; |
| 164 |
| 165 /* Initialize teken structure. */ |
| 166 void teken_init(teken_t *, const teken_funcs_t *, void *); |
| 167 |
| 168 /* Deliver character input. */ |
| 169 void teken_input(teken_t *, const void *, size_t); |
| 170 |
| 171 /* Get/set teken attributes. */ |
| 172 const teken_pos_t *teken_get_cursor(teken_t *); |
| 173 const teken_attr_t *teken_get_curattr(teken_t *); |
| 174 const teken_attr_t *teken_get_defattr(teken_t *); |
| 175 void teken_get_defattr_cons25(teken_t *, int *, int *); |
| 176 const teken_pos_t *teken_get_winsize(teken_t *); |
| 177 void teken_set_cursor(teken_t *, const teken_pos_t *); |
| 178 void teken_set_curattr(teken_t *, const teken_attr_t *); |
| 179 void teken_set_defattr(teken_t *, const teken_attr_t *); |
| 180 void teken_set_winsize(teken_t *, const teken_pos_t *); |
| 181 void teken_set_winsize_noreset(teken_t *, const teken_pos_t *); |
| 182 |
| 183 /* Key input escape sequences. */ |
| 184 #define TKEY_UP 0x00 |
| 185 #define TKEY_DOWN 0x01 |
| 186 #define TKEY_LEFT 0x02 |
| 187 #define TKEY_RIGHT 0x03 |
| 188 |
| 189 #define TKEY_HOME 0x04 |
| 190 #define TKEY_END 0x05 |
| 191 #define TKEY_INSERT 0x06 |
| 192 #define TKEY_DELETE 0x07 |
| 193 #define TKEY_PAGE_UP 0x08 |
| 194 #define TKEY_PAGE_DOWN 0x09 |
| 195 |
| 196 #define TKEY_F1 0x0a |
| 197 #define TKEY_F2 0x0b |
| 198 #define TKEY_F3 0x0c |
| 199 #define TKEY_F4 0x0d |
| 200 #define TKEY_F5 0x0e |
| 201 #define TKEY_F6 0x0f |
| 202 #define TKEY_F7 0x10 |
| 203 #define TKEY_F8 0x11 |
| 204 #define TKEY_F9 0x12 |
| 205 #define TKEY_F10 0x13 |
| 206 #define TKEY_F11 0x14 |
| 207 #define TKEY_F12 0x15 |
| 208 const char *teken_get_sequence(teken_t *, unsigned int); |
| 209 |
| 210 /* Legacy features. */ |
| 211 void teken_set_8bit(teken_t *); |
| 212 void teken_set_cons25(teken_t *); |
| 213 |
| 214 /* Color conversion. */ |
| 215 teken_color_t teken_256to8(teken_color_t); |
| 216 |
| 217 // !!! Start of Mojo addition. |
| 218 #ifdef __cplusplus |
| 219 } // extern "C" |
| 220 #endif |
| 221 // !!! End of Mojo addition. |
| 222 |
| 223 #endif /* !_TEKEN_H_ */ |
OLD | NEW |