/src/libteken/teken_subr_compat.h
Line | Count | Source (jump to first uncovered line) |
1 | | /*- |
2 | | * SPDX-License-Identifier: BSD-2-Clause-FreeBSD |
3 | | * |
4 | | * Copyright (c) 2008-2009 Ed Schouten <ed@FreeBSD.org> |
5 | | * All rights reserved. |
6 | | * |
7 | | * Redistribution and use in source and binary forms, with or without |
8 | | * modification, are permitted provided that the following conditions |
9 | | * are met: |
10 | | * 1. Redistributions of source code must retain the above copyright |
11 | | * notice, this list of conditions and the following disclaimer. |
12 | | * 2. Redistributions in binary form must reproduce the above copyright |
13 | | * notice, this list of conditions and the following disclaimer in the |
14 | | * documentation and/or other materials provided with the distribution. |
15 | | * |
16 | | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
17 | | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
18 | | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
19 | | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
20 | | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
21 | | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
22 | | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
23 | | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
24 | | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
25 | | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
26 | | * SUCH DAMAGE. |
27 | | * |
28 | | * $FreeBSD: head/sys/teken/teken_subr_compat.h 332297 2018-04-08 19:23:50Z phk $ |
29 | | */ |
30 | | |
31 | | static void |
32 | | teken_subr_cons25_set_border(const teken_t *t, unsigned int c) |
33 | 389 | { |
34 | | |
35 | 389 | teken_funcs_param(t, TP_SETBORDER, c); |
36 | 389 | } |
37 | | |
38 | | static void |
39 | | teken_subr_cons25_set_global_cursor_shape(const teken_t *t, unsigned int ncmds, |
40 | | const unsigned int cmds[]) |
41 | 685 | { |
42 | 685 | unsigned int code, i; |
43 | | |
44 | | /* |
45 | | * Pack the args to work around API deficiencies. This requires |
46 | | * knowing too much about the low level to be fully compatible. |
47 | | * Returning when ncmds > 3 is necessary and happens to be |
48 | | * compatible. Discarding high bits is necessary and happens to |
49 | | * be incompatible only for invalid args when ncmds == 3. |
50 | | */ |
51 | 685 | if (ncmds > 3) |
52 | 194 | return; |
53 | 491 | code = 0; |
54 | 1.16k | for (i = ncmds; i > 0; i--) |
55 | 671 | code = (code << 8) | (cmds[i - 1] & 0xff); |
56 | 491 | code = (code << 8) | ncmds; |
57 | 491 | teken_funcs_param(t, TP_SETGLOBALCURSOR, code); |
58 | 491 | } |
59 | | |
60 | | static void |
61 | | teken_subr_cons25_set_local_cursor_type(const teken_t *t, unsigned int type) |
62 | 390 | { |
63 | | |
64 | 390 | teken_funcs_param(t, TP_SETLOCALCURSOR, type); |
65 | 390 | } |
66 | | |
67 | | static const teken_color_t cons25_colors[8] = { TC_BLACK, TC_BLUE, |
68 | | TC_GREEN, TC_CYAN, TC_RED, TC_MAGENTA, TC_BROWN, TC_WHITE }; |
69 | | |
70 | | static void |
71 | | teken_subr_cons25_set_default_background(teken_t *t, unsigned int c) |
72 | 397 | { |
73 | | |
74 | 397 | t->t_defattr.ta_bgcolor = cons25_colors[c % 8] | (c & 8); |
75 | 397 | t->t_curattr.ta_bgcolor = cons25_colors[c % 8] | (c & 8); |
76 | 397 | } |
77 | | |
78 | | static void |
79 | | teken_subr_cons25_set_default_foreground(teken_t *t, unsigned int c) |
80 | 389 | { |
81 | | |
82 | 389 | t->t_defattr.ta_fgcolor = cons25_colors[c % 8] | (c & 8); |
83 | 389 | t->t_curattr.ta_fgcolor = cons25_colors[c % 8] | (c & 8); |
84 | 389 | } |
85 | | |
86 | | static const teken_color_t cons25_revcolors[8] = { 0, 4, 2, 6, 1, 5, 3, 7 }; |
87 | | |
88 | | void |
89 | | teken_get_defattr_cons25(const teken_t *t, int *fg, int *bg) |
90 | 0 | { |
91 | |
|
92 | 0 | *fg = cons25_revcolors[teken_256to8(t->t_defattr.ta_fgcolor)]; |
93 | 0 | if (t->t_defattr.ta_format & TF_BOLD) |
94 | 0 | *fg += 8; |
95 | 0 | *bg = cons25_revcolors[teken_256to8(t->t_defattr.ta_bgcolor)]; |
96 | 0 | } |
97 | | |
98 | | static void |
99 | | teken_subr_cons25_switch_virtual_terminal(const teken_t *t, unsigned int vt) |
100 | 388 | { |
101 | | |
102 | 388 | teken_funcs_param(t, TP_SWITCHVT, vt); |
103 | 388 | } |
104 | | |
105 | | static void |
106 | | teken_subr_cons25_set_bell_pitch_duration(const teken_t *t, unsigned int pitch, |
107 | | unsigned int duration) |
108 | 429 | { |
109 | | |
110 | 429 | teken_funcs_param(t, TP_SETBELLPD, (pitch << 16) | |
111 | 429 | (duration & 0xffff)); |
112 | 429 | } |
113 | | |
114 | | static void |
115 | | teken_subr_cons25_set_graphic_rendition(teken_t *t, unsigned int cmd, |
116 | | unsigned int param) |
117 | 421 | { |
118 | | |
119 | 421 | (void)param; |
120 | 421 | switch (cmd) { |
121 | 200 | case 0: /* Reset. */ |
122 | 200 | t->t_curattr = t->t_defattr; |
123 | 200 | break; |
124 | 221 | default: |
125 | 221 | teken_printf("unsupported attribute %u\n", cmd); |
126 | 421 | } |
127 | 421 | } |
128 | | |
129 | | static void |
130 | | teken_subr_cons25_set_terminal_mode(teken_t *t, unsigned int mode) |
131 | 711 | { |
132 | | |
133 | 711 | switch (mode) { |
134 | 195 | case 0: /* Switch terminal to xterm. */ |
135 | 195 | t->t_stateflags &= ~TS_CONS25; |
136 | 195 | break; |
137 | 320 | case 1: /* Switch terminal to cons25. */ |
138 | 320 | t->t_stateflags |= TS_CONS25; |
139 | 320 | break; |
140 | 196 | default: |
141 | 196 | break; |
142 | 711 | } |
143 | 711 | } |
144 | | |
145 | | #if 0 |
146 | | static void |
147 | | teken_subr_vt52_decid(teken_t *t) |
148 | | { |
149 | | const char response[] = "\x1B/Z"; |
150 | | |
151 | | teken_funcs_respond(t, response, sizeof response - 1); |
152 | | } |
153 | | #endif |