mirror of
https://github.com/systemd/systemd.git
synced 2024-11-12 15:21:19 +03:00
492 lines
12 KiB
C
492 lines
12 KiB
C
|
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||
|
|
||
|
/***
|
||
|
This file is part of systemd.
|
||
|
|
||
|
Copyright (C) 2014 David Herrmann <dh.herrmann@gmail.com>
|
||
|
|
||
|
systemd is free software; you can redistribute it and/or modify it
|
||
|
under the terms of the GNU Lesser General Public License as published by
|
||
|
the Free Software Foundation; either version 2.1 of the License, or
|
||
|
(at your option) any later version.
|
||
|
|
||
|
systemd 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
|
||
|
Lesser General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU Lesser General Public License
|
||
|
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||
|
***/
|
||
|
|
||
|
/*
|
||
|
* VTE Character Sets
|
||
|
* These are predefined charactersets that can be loaded into GL and GR. By
|
||
|
* default we use unicode_lower and unicode_upper, that is, both sets have the
|
||
|
* exact unicode mapping. unicode_lower is effectively ASCII and unicode_upper
|
||
|
* as defined by the unicode standard (I guess, ISO 8859-1).
|
||
|
* Several other character sets are defined here. However, all of them are
|
||
|
* limited to the 96 character space of GL or GR. Everything beyond GR (which
|
||
|
* was not supported by the classic VTs by DEC but is available in VT emulators
|
||
|
* that support unicode/UTF8) is always mapped to unicode and cannot be changed
|
||
|
* by these character sets. Even mapping GL and GR is only available for
|
||
|
* backwards compatibility as new applications can use the Unicode functionality
|
||
|
* of the VTE.
|
||
|
*
|
||
|
* Moreover, mapping GR is almost unnecessary to support. In fact, Unicode UTF-8
|
||
|
* support in VTE works by reading every incoming data as UTF-8 stream. This
|
||
|
* maps GL/ASCII to ASCII, as UTF-8 is backwards compatible to ASCII, however,
|
||
|
* everything that has the 8th bit set is a >=2-byte haracter in UTF-8. That is,
|
||
|
* this is in no way backwards compatible to >=VT220 8bit support. Therefore, if
|
||
|
* someone maps a character set into GR and wants to use them with this VTE,
|
||
|
* then they must already send UTF-8 characters to use GR (all GR characters are
|
||
|
* 8-bits). Hence, they can easily also send the correct UTF-8 character for the
|
||
|
* unicode mapping.
|
||
|
* The only advantage is that most characters in many sets are 3-byte UTF-8
|
||
|
* characters and by mapping the set into GR/GL you can use 2 or 1 byte UTF-8
|
||
|
* characters which saves bandwidth.
|
||
|
* Another reason is, if you have older applications that use the VT220 8-bit
|
||
|
* support and you put a ASCII/8bit-extension to UTF-8 converter in between, you
|
||
|
* need these mappings to have the application behave correctly if it uses GL/GR
|
||
|
* mappings extensively.
|
||
|
*
|
||
|
* Anyway, we support GL/GR mappings so here are the most commonly used maps as
|
||
|
* defined by Unicode-standard, DEC-private maps and other famous charmaps.
|
||
|
*
|
||
|
* Characters 1-32 are always the control characters (part of CL) and cannot be
|
||
|
* mapped. Characters 34-127 (94 characters) are part of GL and can be mapped.
|
||
|
* Characters 33 and 128 are not part of GL and always mapped by the VTE.
|
||
|
* However, for GR they can be mapped differently (96 chars) so we have to
|
||
|
* include them. The mapper has to take care not to use them in GL.
|
||
|
*/
|
||
|
|
||
|
#include <errno.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include "term-internal.h"
|
||
|
|
||
|
/*
|
||
|
* Lower Unicode character set. This maps the characters to the basic ASCII
|
||
|
* characters 33-126. These are all graphics characters defined in ASCII.
|
||
|
*/
|
||
|
term_charset term_unicode_lower = {
|
||
|
[0] = 32,
|
||
|
[1] = 33,
|
||
|
[2] = 34,
|
||
|
[3] = 35,
|
||
|
[4] = 36,
|
||
|
[5] = 37,
|
||
|
[6] = 38,
|
||
|
[7] = 39,
|
||
|
[8] = 40,
|
||
|
[9] = 41,
|
||
|
[10] = 42,
|
||
|
[11] = 43,
|
||
|
[12] = 44,
|
||
|
[13] = 45,
|
||
|
[14] = 46,
|
||
|
[15] = 47,
|
||
|
[16] = 48,
|
||
|
[17] = 49,
|
||
|
[18] = 50,
|
||
|
[19] = 51,
|
||
|
[20] = 52,
|
||
|
[21] = 53,
|
||
|
[22] = 54,
|
||
|
[23] = 55,
|
||
|
[24] = 56,
|
||
|
[25] = 57,
|
||
|
[26] = 58,
|
||
|
[27] = 59,
|
||
|
[28] = 60,
|
||
|
[29] = 61,
|
||
|
[30] = 62,
|
||
|
[31] = 63,
|
||
|
[32] = 64,
|
||
|
[33] = 65,
|
||
|
[34] = 66,
|
||
|
[35] = 67,
|
||
|
[36] = 68,
|
||
|
[37] = 69,
|
||
|
[38] = 70,
|
||
|
[39] = 71,
|
||
|
[40] = 72,
|
||
|
[41] = 73,
|
||
|
[42] = 74,
|
||
|
[43] = 75,
|
||
|
[44] = 76,
|
||
|
[45] = 77,
|
||
|
[46] = 78,
|
||
|
[47] = 79,
|
||
|
[48] = 80,
|
||
|
[49] = 81,
|
||
|
[50] = 82,
|
||
|
[51] = 83,
|
||
|
[52] = 84,
|
||
|
[53] = 85,
|
||
|
[54] = 86,
|
||
|
[55] = 87,
|
||
|
[56] = 88,
|
||
|
[57] = 89,
|
||
|
[58] = 90,
|
||
|
[59] = 91,
|
||
|
[60] = 92,
|
||
|
[61] = 93,
|
||
|
[62] = 94,
|
||
|
[63] = 95,
|
||
|
[64] = 96,
|
||
|
[65] = 97,
|
||
|
[66] = 98,
|
||
|
[67] = 99,
|
||
|
[68] = 100,
|
||
|
[69] = 101,
|
||
|
[70] = 102,
|
||
|
[71] = 103,
|
||
|
[72] = 104,
|
||
|
[73] = 105,
|
||
|
[74] = 106,
|
||
|
[75] = 107,
|
||
|
[76] = 108,
|
||
|
[77] = 109,
|
||
|
[78] = 110,
|
||
|
[79] = 111,
|
||
|
[80] = 112,
|
||
|
[81] = 113,
|
||
|
[82] = 114,
|
||
|
[83] = 115,
|
||
|
[84] = 116,
|
||
|
[85] = 117,
|
||
|
[86] = 118,
|
||
|
[87] = 119,
|
||
|
[88] = 120,
|
||
|
[89] = 121,
|
||
|
[90] = 122,
|
||
|
[91] = 123,
|
||
|
[92] = 124,
|
||
|
[93] = 125,
|
||
|
[94] = 126,
|
||
|
[95] = 127,
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* Upper Unicode Table
|
||
|
* This maps all characters to the upper unicode characters 161-254. These are
|
||
|
* not compatible to any older 8 bit character sets. See the Unicode standard
|
||
|
* for the definitions of each symbol.
|
||
|
*/
|
||
|
term_charset term_unicode_upper = {
|
||
|
[0] = 160,
|
||
|
[1] = 161,
|
||
|
[2] = 162,
|
||
|
[3] = 163,
|
||
|
[4] = 164,
|
||
|
[5] = 165,
|
||
|
[6] = 166,
|
||
|
[7] = 167,
|
||
|
[8] = 168,
|
||
|
[9] = 169,
|
||
|
[10] = 170,
|
||
|
[11] = 171,
|
||
|
[12] = 172,
|
||
|
[13] = 173,
|
||
|
[14] = 174,
|
||
|
[15] = 175,
|
||
|
[16] = 176,
|
||
|
[17] = 177,
|
||
|
[18] = 178,
|
||
|
[19] = 179,
|
||
|
[20] = 180,
|
||
|
[21] = 181,
|
||
|
[22] = 182,
|
||
|
[23] = 183,
|
||
|
[24] = 184,
|
||
|
[25] = 185,
|
||
|
[26] = 186,
|
||
|
[27] = 187,
|
||
|
[28] = 188,
|
||
|
[29] = 189,
|
||
|
[30] = 190,
|
||
|
[31] = 191,
|
||
|
[32] = 192,
|
||
|
[33] = 193,
|
||
|
[34] = 194,
|
||
|
[35] = 195,
|
||
|
[36] = 196,
|
||
|
[37] = 197,
|
||
|
[38] = 198,
|
||
|
[39] = 199,
|
||
|
[40] = 200,
|
||
|
[41] = 201,
|
||
|
[42] = 202,
|
||
|
[43] = 203,
|
||
|
[44] = 204,
|
||
|
[45] = 205,
|
||
|
[46] = 206,
|
||
|
[47] = 207,
|
||
|
[48] = 208,
|
||
|
[49] = 209,
|
||
|
[50] = 210,
|
||
|
[51] = 211,
|
||
|
[52] = 212,
|
||
|
[53] = 213,
|
||
|
[54] = 214,
|
||
|
[55] = 215,
|
||
|
[56] = 216,
|
||
|
[57] = 217,
|
||
|
[58] = 218,
|
||
|
[59] = 219,
|
||
|
[60] = 220,
|
||
|
[61] = 221,
|
||
|
[62] = 222,
|
||
|
[63] = 223,
|
||
|
[64] = 224,
|
||
|
[65] = 225,
|
||
|
[66] = 226,
|
||
|
[67] = 227,
|
||
|
[68] = 228,
|
||
|
[69] = 229,
|
||
|
[70] = 230,
|
||
|
[71] = 231,
|
||
|
[72] = 232,
|
||
|
[73] = 233,
|
||
|
[74] = 234,
|
||
|
[75] = 235,
|
||
|
[76] = 236,
|
||
|
[77] = 237,
|
||
|
[78] = 238,
|
||
|
[79] = 239,
|
||
|
[80] = 240,
|
||
|
[81] = 241,
|
||
|
[82] = 242,
|
||
|
[83] = 243,
|
||
|
[84] = 244,
|
||
|
[85] = 245,
|
||
|
[86] = 246,
|
||
|
[87] = 247,
|
||
|
[88] = 248,
|
||
|
[89] = 249,
|
||
|
[90] = 250,
|
||
|
[91] = 251,
|
||
|
[92] = 252,
|
||
|
[93] = 253,
|
||
|
[94] = 254,
|
||
|
[95] = 255,
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* The DEC supplemental graphics set. For its definition see here:
|
||
|
* http://vt100.net/docs/vt220-rm/table2-3b.html
|
||
|
* Its basically a mixture of common European symbols that are not part of
|
||
|
* ASCII. Most often, this is mapped into GR to extend the basci ASCII part.
|
||
|
*
|
||
|
* This is very similar to unicode_upper, however, few symbols differ so do not
|
||
|
* mix them up!
|
||
|
*/
|
||
|
term_charset term_dec_supplemental_graphics = {
|
||
|
[0] = -1, /* undefined */
|
||
|
[1] = 161,
|
||
|
[2] = 162,
|
||
|
[3] = 163,
|
||
|
[4] = 0,
|
||
|
[5] = 165,
|
||
|
[6] = 0,
|
||
|
[7] = 167,
|
||
|
[8] = 164,
|
||
|
[9] = 169,
|
||
|
[10] = 170,
|
||
|
[11] = 171,
|
||
|
[12] = 0,
|
||
|
[13] = 0,
|
||
|
[14] = 0,
|
||
|
[15] = 0,
|
||
|
[16] = 176,
|
||
|
[17] = 177,
|
||
|
[18] = 178,
|
||
|
[19] = 179,
|
||
|
[20] = 0,
|
||
|
[21] = 181,
|
||
|
[22] = 182,
|
||
|
[23] = 183,
|
||
|
[24] = 0,
|
||
|
[25] = 185,
|
||
|
[26] = 186,
|
||
|
[27] = 187,
|
||
|
[28] = 188,
|
||
|
[29] = 189,
|
||
|
[30] = 0,
|
||
|
[31] = 191,
|
||
|
[32] = 192,
|
||
|
[33] = 193,
|
||
|
[34] = 194,
|
||
|
[35] = 195,
|
||
|
[36] = 196,
|
||
|
[37] = 197,
|
||
|
[38] = 198,
|
||
|
[39] = 199,
|
||
|
[40] = 200,
|
||
|
[41] = 201,
|
||
|
[42] = 202,
|
||
|
[43] = 203,
|
||
|
[44] = 204,
|
||
|
[45] = 205,
|
||
|
[46] = 206,
|
||
|
[47] = 207,
|
||
|
[48] = 0,
|
||
|
[49] = 209,
|
||
|
[50] = 210,
|
||
|
[51] = 211,
|
||
|
[52] = 212,
|
||
|
[53] = 213,
|
||
|
[54] = 214,
|
||
|
[55] = 338,
|
||
|
[56] = 216,
|
||
|
[57] = 217,
|
||
|
[58] = 218,
|
||
|
[59] = 219,
|
||
|
[60] = 220,
|
||
|
[61] = 376,
|
||
|
[62] = 0,
|
||
|
[63] = 223,
|
||
|
[64] = 224,
|
||
|
[65] = 225,
|
||
|
[66] = 226,
|
||
|
[67] = 227,
|
||
|
[68] = 228,
|
||
|
[69] = 229,
|
||
|
[70] = 230,
|
||
|
[71] = 231,
|
||
|
[72] = 232,
|
||
|
[73] = 233,
|
||
|
[74] = 234,
|
||
|
[75] = 235,
|
||
|
[76] = 236,
|
||
|
[77] = 237,
|
||
|
[78] = 238,
|
||
|
[79] = 239,
|
||
|
[80] = 0,
|
||
|
[81] = 241,
|
||
|
[82] = 242,
|
||
|
[83] = 243,
|
||
|
[84] = 244,
|
||
|
[85] = 245,
|
||
|
[86] = 246,
|
||
|
[87] = 339,
|
||
|
[88] = 248,
|
||
|
[89] = 249,
|
||
|
[90] = 250,
|
||
|
[91] = 251,
|
||
|
[92] = 252,
|
||
|
[93] = 255,
|
||
|
[94] = 0,
|
||
|
[95] = -1, /* undefined */
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* DEC special graphics character set. See here for its definition:
|
||
|
* http://vt100.net/docs/vt220-rm/table2-4.html
|
||
|
* This contains several characters to create ASCII drawings and similar. Its
|
||
|
* commonly mapped into GR to extend the basic ASCII characters.
|
||
|
*
|
||
|
* Lower 62 characters map to ASCII 33-64, everything beyond is special and
|
||
|
* commonly used for ASCII drawings. It depends on the Unicode Standard 3.2 for
|
||
|
* the extended horizontal scan-line characters 3, 5, 7, and 9.
|
||
|
*/
|
||
|
term_charset term_dec_special_graphics = {
|
||
|
[0] = -1, /* undefined */
|
||
|
[1] = 33,
|
||
|
[2] = 34,
|
||
|
[3] = 35,
|
||
|
[4] = 36,
|
||
|
[5] = 37,
|
||
|
[6] = 38,
|
||
|
[7] = 39,
|
||
|
[8] = 40,
|
||
|
[9] = 41,
|
||
|
[10] = 42,
|
||
|
[11] = 43,
|
||
|
[12] = 44,
|
||
|
[13] = 45,
|
||
|
[14] = 46,
|
||
|
[15] = 47,
|
||
|
[16] = 48,
|
||
|
[17] = 49,
|
||
|
[18] = 50,
|
||
|
[19] = 51,
|
||
|
[20] = 52,
|
||
|
[21] = 53,
|
||
|
[22] = 54,
|
||
|
[23] = 55,
|
||
|
[24] = 56,
|
||
|
[25] = 57,
|
||
|
[26] = 58,
|
||
|
[27] = 59,
|
||
|
[28] = 60,
|
||
|
[29] = 61,
|
||
|
[30] = 62,
|
||
|
[31] = 63,
|
||
|
[32] = 64,
|
||
|
[33] = 65,
|
||
|
[34] = 66,
|
||
|
[35] = 67,
|
||
|
[36] = 68,
|
||
|
[37] = 69,
|
||
|
[38] = 70,
|
||
|
[39] = 71,
|
||
|
[40] = 72,
|
||
|
[41] = 73,
|
||
|
[42] = 74,
|
||
|
[43] = 75,
|
||
|
[44] = 76,
|
||
|
[45] = 77,
|
||
|
[46] = 78,
|
||
|
[47] = 79,
|
||
|
[48] = 80,
|
||
|
[49] = 81,
|
||
|
[50] = 82,
|
||
|
[51] = 83,
|
||
|
[52] = 84,
|
||
|
[53] = 85,
|
||
|
[54] = 86,
|
||
|
[55] = 87,
|
||
|
[56] = 88,
|
||
|
[57] = 89,
|
||
|
[58] = 90,
|
||
|
[59] = 91,
|
||
|
[60] = 92,
|
||
|
[61] = 93,
|
||
|
[62] = 94,
|
||
|
[63] = 0,
|
||
|
[64] = 9830,
|
||
|
[65] = 9618,
|
||
|
[66] = 9225,
|
||
|
[67] = 9228,
|
||
|
[68] = 9229,
|
||
|
[69] = 9226,
|
||
|
[70] = 176,
|
||
|
[71] = 177,
|
||
|
[72] = 9252,
|
||
|
[73] = 9227,
|
||
|
[74] = 9496,
|
||
|
[75] = 9488,
|
||
|
[76] = 9484,
|
||
|
[77] = 9492,
|
||
|
[78] = 9532,
|
||
|
[79] = 9146,
|
||
|
[80] = 9147,
|
||
|
[81] = 9472,
|
||
|
[82] = 9148,
|
||
|
[83] = 9149,
|
||
|
[84] = 9500,
|
||
|
[85] = 9508,
|
||
|
[86] = 9524,
|
||
|
[87] = 9516,
|
||
|
[88] = 9474,
|
||
|
[89] = 8804,
|
||
|
[90] = 8805,
|
||
|
[91] = 960,
|
||
|
[92] = 8800,
|
||
|
[93] = 163,
|
||
|
[94] = 8901,
|
||
|
[95] = -1, /* undefined */
|
||
|
};
|