From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web12.48827.1629251416559261342 for ; Tue, 17 Aug 2021 18:50:16 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=Hq2OpAdV; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: zhichao.gao@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10079"; a="238329761" X-IronPort-AV: E=Sophos;i="5.84,330,1620716400"; d="scan'208";a="238329761" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Aug 2021 18:50:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,330,1620716400"; d="scan'208";a="488255075" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga008.fm.intel.com with ESMTP; 17 Aug 2021 18:50:15 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Tue, 17 Aug 2021 18:50:14 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Tue, 17 Aug 2021 18:50:14 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10 via Frontend Transport; Tue, 17 Aug 2021 18:50:14 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.168) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.10; Tue, 17 Aug 2021 18:50:14 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cTsWCos1Bg18AEba2lPdiTYenXlGg1etExq/Dou55vBraqQiTEX3lySewkzOPBCGhF3+t7fCbcNDoJynmxqScCCqGSXDxuuhkmyjWcf6d6SsmLtSJ173ObUwYZxe/Ev5VulY1KFIMJa5cCYuNGuOBt80/oNxc03QiHGmdAK+aG6VrJBfRgMBGRiFlxHhh6CztGVL6NJeaVZ0+P+JRUseQyxHsAB15lzIr5cqNac5lBBMSyrEkCTILyqfri8GmwQGJvXvUNAS3BjtX+YYoLik5XRH7z9lJtdvszdrItKEijYpPyBc1z6dATOF/m6SyJWgesmMfENum+VF3ID2LqiHkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oIqac5Io/vhnNT33amxnldFhA8I6nFA9cw2Lb8Pbsls=; b=CMvG3cASu/9xPqYTGMKhGzFn+XsM0RfanFyj5mteCwQ3oVGErpWBnfV5daYTAwGngyIK4Cu+XKXo68VZEeo4BmTv5z4bH//HdOjgqx9v9hX0EE9HHJXYtGqWlHEaqT12PPxZGEqhIcfAc7pMirdSiClGh7MCAg5oTfmzMDDx+SHSyEzZG6yO+QYb3qMcAeeAMn3pDSZu82BAUIH/hxNvQ+r/Dr/VtOcM6wixmUxVu2xeGwNaHJr0pfl313apU61MvwJz48BpFzy5etwQ6ow8sUqsZNQ7sbJREVng/IvaQM99Ug9ldOmCxAlZWw+Z3cJXPo9pOLYH5JWCgbb+zELkvQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oIqac5Io/vhnNT33amxnldFhA8I6nFA9cw2Lb8Pbsls=; b=Hq2OpAdVYaaAiWKFZP3+CIEYxmRivnRlWrTRwxeo7hyzArwHT1jBsJonihA4J4Pk5Eno1eL4Tj8ueY/KSKd7d/M3C59cmudo4uOybb1y8d6ZGWEj48nUPMiNbbicKW0NrIDB6oLTwrNGKylcnvxsumxWLkq33g86W56wsTMMBJY= Received: from DM4PR11MB5277.namprd11.prod.outlook.com (2603:10b6:5:388::23) by DM6PR11MB4283.namprd11.prod.outlook.com (2603:10b6:5:206::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4415.14; Wed, 18 Aug 2021 01:50:07 +0000 Received: from DM4PR11MB5277.namprd11.prod.outlook.com ([fe80::ed42:131e:e0a0:dacf]) by DM4PR11MB5277.namprd11.prod.outlook.com ([fe80::ed42:131e:e0a0:dacf%6]) with mapi id 15.20.4415.024; Wed, 18 Aug 2021 01:50:07 +0000 From: "Gao, Zhichao" To: "devel@edk2.groups.io" , "cadenkline9@gmail.com" CC: "Wang, Jian J" , "Wu, Hao A" , "Ni, Ray" , "Desimone, Nathaniel L" Subject: Re: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/Console: Improve encoding of box drawing characters Thread-Topic: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/Console: Improve encoding of box drawing characters Thread-Index: AQHXj9Zo2Wt288KquUiMlfhJgKkme6t3bwbw Date: Wed, 18 Aug 2021 01:50:07 +0000 Message-ID: References: <20210813000022.1145416-1-cadenkline9@gmail.com> <20210813000022.1145416-2-cadenkline9@gmail.com> In-Reply-To: <20210813000022.1145416-2-cadenkline9@gmail.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 52f2f9a2-edaa-4fbf-dca4-08d961ea81a6 x-ms-traffictypediagnostic: DM6PR11MB4283: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1775; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: jIMYP0If5pk0DqCOOk7j9o+Ci/HM0GtvYQ/gYlJ2K4B4mDWfaqVL4Z5mQPXIP28XThtffh35XQIDoxY/UDV2JCaO2tOowo94+4l4PtofbjKGMG62lu0zmfwtOEOG4kvpY2j8Z7PVj6olZw9eDNgp4l3yMr6PWUKKTICCiv9l7uZOHF8s+anL+w34w6GrpqaiZ455oFSktuIO30fsjOaLuPFT4cIsun+ud2OBV3km4nTw6lJu6nuSC+yFJ0iNRQHcFytLIGasW+PukwUnlBYmv9+759c17ZIhnCYCiEcPmS30vzVW54IFAEnbEKJlHt+opt1ZRuCLzLSu7DUFTBfJrnXjinXA8ezkYdDHf+dq5S8XgWxnVcndVmMks4yWV8+OcHsZbHWqaZxAxCk2fg4ODRO028AXoJtW8j3YdjgPh6VtZ7ALKIeeIyflP0mKePPXILQhpOsE+DygJR4GGHTkUMehPh+k7/wK3C/FYYxqC4NwYXQ4+k1/7FKQM5cJWdX0N/Otc2GafsfwBOzkK1nC2sftb7bHAYBkQ5/oDkOHOmHipeNqxgyizdKdihHg8dvIWGLxLjLndqZy3YRGJBaJM/ArA3hGnCfdUA0Yoh05O2X/HfYpDt4V0d54WNl7bZD+lQ6f76//spUKXavE36AI5UdaCb7c+eIOVhdsUuxQULEIMOujVltjGu8s/+wvFqcT68CJ1/jsHNFyxS/Mmr7Fj1vRdx+ONhOIAmJzNOcmJQLXsVTWcDpNYdge8uYZEGBcZfegD7W1FBaxjYu2zpG9Bp3hfaQmBezxp5bCooz81Qh1wdHrDRjf+p8A5P5UWjqHR5Canv9u6XYviV3nNJtRfA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5277.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(376002)(366004)(39860400002)(136003)(396003)(478600001)(107886003)(86362001)(26005)(186003)(38100700002)(55016002)(4326008)(53546011)(6506007)(316002)(8936002)(7696005)(30864003)(966005)(8676002)(110136005)(83380400001)(52536014)(5660300002)(9686003)(122000001)(66556008)(66946007)(38070700005)(71200400001)(64756008)(66446008)(66476007)(2906002)(76116006)(54906003)(33656002)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?3GjH7Op4pUPyju+VSjnrBqcIpmswFT3suq69Z8c4bgNQnRJxgSH3RTkbP4R3?= =?us-ascii?Q?uAtNxzDsvT9LRDLx47/eUajppaaYLnAZ1I1Hehaiq/RruI6HXbRNYelE5Nn3?= =?us-ascii?Q?dPgkEwd5unq3AbaLy5RXWEubkI9qSjdbtg/7O+MEwP2EQrY9arcPiXlESE+g?= =?us-ascii?Q?jiLgFkC9WoBYmUE7rUCyVdgutLtAOoeeF4MdVhwgSdBIS8T7Zeq5Qs95v2JR?= =?us-ascii?Q?xT8gZaL51ZwF0maqcv5NSD652UU6WzvHEcXKwtwt845WL0AWwZESRy5b13fi?= =?us-ascii?Q?kXOf8pi/CzgqdeWjCjBYc/5x4Z+pRHxvaMHRAEBihp2kBgdM5GaiJUP9rp8J?= =?us-ascii?Q?WKqClC6IYAeW+TjkPW57qQWMK7HjrQSqKEYxRxyeZ7kREZi34FZB3pyTW2wD?= =?us-ascii?Q?sv39L32+Otm4Ea38XQXo6Dslx6CoYU0rOoXa3B2DrFN28+h01YPNNE5H8DHG?= =?us-ascii?Q?JDrusQ6Cb06rPCDP66bqxBORQGT6GL3oZ0Ygl38RAcdT2q5BDi0uJLDuNGTD?= =?us-ascii?Q?UgE53CvtL3mQVvknRxDBtFqtP2FKNvEyhC92yIJti50EeEL8cBg8IHe3BcR1?= =?us-ascii?Q?F502fMidQKJ75ZnLdS5QhhtYUs3LdV+F47ZFBnyDa46PgWnDp6SwtGD0Lg2m?= =?us-ascii?Q?R0ooGSRLmCIQp75ofphhJdWW/GRRC6Fnd3jAHJSE2RJ9H9pqpDeZfE33k9jS?= =?us-ascii?Q?xwCvAj2XeWDP6nolQ/UfRXYCbY9WkT00fTLfZZj93SoqvZyfYmkwudqQx585?= =?us-ascii?Q?BdSoGBDWJQhnsekrOG1s+JADOSDIq9mBrP6yzd369O71PdgefZ7RgteTUAtC?= =?us-ascii?Q?jm31NmDXWv4Uk/fNFz4GKy7/afPEMH6epKQMprlppF3RSUGknfZFyNkiCZ2y?= =?us-ascii?Q?C8mmTN87oKyi0VsCqh4S6qk8uUoWcp6LfIWPLzMWb07bvbK0MOgkt+MRAnMY?= =?us-ascii?Q?ilw1L8LOIPe4XSWxTJFKw3Xk1QRBu+fZnXhxpIv3O0wLAhC3jVYlCoLoWZTm?= =?us-ascii?Q?thn4PCrWo2qTPRPJ/PsEKYoBGnfhbbcP3w8mewLzhaBEDx2b7vz6ewrK6XRF?= =?us-ascii?Q?HAvLkuXoqBn01L01JV2mp6pAW1x01fRtVapTKLSZBcCsANq8XEaVPeodL/aR?= =?us-ascii?Q?QIiIzByG5VqwdBZsBH0cvFwJOnC0RK0tZLrWNHMEXtlHCWo11fZ9+L6CxGxF?= =?us-ascii?Q?dFLh61lCSyTbiZAk1S+FFHN4lMeNp3qw0MTz16kJdCYdNUoGVKAz9XgC1liq?= =?us-ascii?Q?cbgR7ENVKey8AJl6uI1qH4jmPJHhE1moxXZfJEFkMHKz+C25+IRPpVjHypXm?= =?us-ascii?Q?u6EI9lp3It4nBkrOPxQlNjFg?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5277.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 52f2f9a2-edaa-4fbf-dca4-08d961ea81a6 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Aug 2021 01:50:07.3381 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 5N+uCbDcbp+JHoXxIccBOPqA2X5SkEouep6FAUzKWfEOhtr2Ign7UGIFwvE/wUHtbyVoRhjGVZcecxbdJvn2XA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4283 Return-Path: zhichao.gao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Caden/Nate, This patch aims to make the terminal output character set to be expected as= https://github.com/tianocore/tianocore.github.io/wiki/Tasks-Terminal-drive= r-improvements. It is better to add this info to the commit message. Because of the commit = message length limitation, I would suggest to file a Bugzilla and attach ab= ove link. For the poor man's line drawing, our code is using '\' and '/' instead of '= +'. Should we change it to match the table? Caden, The patch thru email is not separated for every lines, it mixed up. So it i= s hard to give comment thru email. So I give my comments thru https://githu= b.com/ZhichaoGao/edk2/commit/b9a47188d7228a47897413ca73c265143edfec29#diff-= e3ef4106fc8f77b7d4ac5679f4104281cbf9a0322606703f2a6be152960c1125R300. Thanks, Zhichao > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Caden > Kline > Sent: Friday, August 13, 2021 8:00 AM > To: devel@edk2.groups.io > Cc: Wang, Jian J ; Wu, Hao A ; > Gao, Zhichao ; Ni, Ray ; > Desimone, Nathaniel L > Subject: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/Console: Improve > encoding of box drawing characters >=20 > Improved encoding of box drawing characters for different terminal types. > This includes Dec special graphics mode and more utf8. >=20 > Cc: Jian J Wang > Cc: Hao A Wu > Cc: Zhichao Gao > Cc: Ray Ni > Signed-off-by: Caden Kline > Reviewed-by: Nate DeSimone > --- >=20 > Notes: > v2: > - code style changes to fix indents and comments [Hao A Wu] >=20 > MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h | 26 +- > MdeModulePkg/Universal/Console/TerminalDxe/Ansi.c | 2 +- > MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c | 321 > +++++++++++++++----- > 3 files changed, 271 insertions(+), 78 deletions(-) >=20 > diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h > b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h > index 360e58e84743..1eab439531dc 100644 > --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h > +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h > @@ -122,7 +122,12 @@ typedef struct { > EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleInputEx; LIST_ENTRY > NotifyList; EFI_EVENT KeyNotifyProcessEvent;+= BOOLEAN > DecSpecialGraphicsMode; } TERMINAL_DEV;+//+// This the length the > escape sequences for entering and exiting Dec Special Graphics > Mode+//+#define LENGTH_DEC_ESCAPE 0x03 #define > INPUT_STATE_DEFAULT 0x00 #define INPUT_STATE_ESC > 0x01@@ -169,6 +174,7 @@ typedef struct { > UINT16 Unicode; CHAR8 PcAnsi; CHAR8 Ascii;+ CHAR8 > DecSpecialGraphics; } UNICODE_TO_CHAR; //@@ -1367,20 +1373,22 @@ > Utf8ToUnicode ( > /** Detects if a Unicode char is for Box Drawing text graphics. - @pa= ram > Graphic Unicode char to test.- @param PcAnsi Optional pointe= r to > return PCANSI equivalent of- Graphic.- @param Asc= ii Optional > pointer to return ASCII equivalent of- Graphic.-- = @retval TRUE > If Graphic is a supported Unicode Box Drawing character.+ @param Graphi= c > Unicode char to test.+ @param PcAnsi Optional pointer to r= eturn > PCANSI equivalent of+ Graphic.+ @param Asc= ii > Optional pointer to return ASCII equivalent of+ = Graphic.+ > @param DecSpecialGraphics Optional pointer to return Dec Special Graphi= cs > equivalent of+ Graphic.+ @retval TRUE = If Graphic is a > supported Unicode Box Drawing character. **/ BOOLEAN > TerminalIsValidTextGraphics ( IN CHAR16 Graphic,- OUT CHAR8 *PcAns= i, > OPTIONAL- OUT CHAR8 *Ascii OPTIONAL+ OUT CHAR8 *PcAnsi, > OPTIONAL+ OUT CHAR8 *Ascii, OPTIONAL+ OUT CHAR8 > *DecSpecialGraphics OPTIONAL ); /**diff --git > a/MdeModulePkg/Universal/Console/TerminalDxe/Ansi.c > b/MdeModulePkg/Universal/Console/TerminalDxe/Ansi.c > index f117d90b9de3..5ae5a4f0212e 100644 > --- a/MdeModulePkg/Universal/Console/TerminalDxe/Ansi.c > +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Ansi.c > @@ -63,7 +63,7 @@ AnsiTestString ( > if ( !(TerminalIsValidAscii (*WString) || TerminalIsValidEf= iCntlChar > (*WString) ||- TerminalIsValidTextGraphics (*WString, &GraphicChar= , > NULL) )) {+ TerminalIsValidTextGraphics (*WString, &GraphicChar, N= ULL, > NULL) )) { return EFI_UNSUPPORTED; }diff --git > a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c > b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c > index aae470e9562c..6da1fa64a2f3 100644 > --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c > +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c > @@ -16,61 +16,59 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > // // UNICODE_TO_CHAR UnicodeToPcAnsiOrAscii[] =3D {- > { BOXDRAW_HORIZONTAL, 0xc4, L'-' },- { BOXDRAW_VERTICAL, > 0xb3, L'|' },- { BOXDRAW_DOWN_RIGHT, 0xda, L'/' },- > { BOXDRAW_DOWN_LEFT, 0xbf, L'\\' },- { BOXDRAW_UP_RIGHT= , > 0xc0, L'\\' },- { BOXDRAW_UP_LEFT, 0xd9, L'/' },- > { BOXDRAW_VERTICAL_RIGHT, 0xc3, L'|' },- > { BOXDRAW_VERTICAL_LEFT, 0xb4, L'|' },- > { BOXDRAW_DOWN_HORIZONTAL, 0xc2, L'+' },- > { BOXDRAW_UP_HORIZONTAL, 0xc1, L'+' },- > { BOXDRAW_VERTICAL_HORIZONTAL, 0xc5, L'+' },- > { BOXDRAW_DOUBLE_HORIZONTAL, 0xcd, L'-' },- > { BOXDRAW_DOUBLE_VERTICAL, 0xba, L'|' },- > { BOXDRAW_DOWN_RIGHT_DOUBLE, 0xd5, L'/' },- > { BOXDRAW_DOWN_DOUBLE_RIGHT, 0xd6, L'/' },- > { BOXDRAW_DOUBLE_DOWN_RIGHT, 0xc9, L'/' },- > { BOXDRAW_DOWN_LEFT_DOUBLE, 0xb8, L'\\' },- > { BOXDRAW_DOWN_DOUBLE_LEFT, 0xb7, L'\\' },- > { BOXDRAW_DOUBLE_DOWN_LEFT, 0xbb, L'\\' },- > { BOXDRAW_UP_RIGHT_DOUBLE, 0xd4, L'\\' },- > { BOXDRAW_UP_DOUBLE_RIGHT, 0xd3, L'\\' },- > { BOXDRAW_DOUBLE_UP_RIGHT, 0xc8, L'\\' },- > { BOXDRAW_UP_LEFT_DOUBLE, 0xbe, L'/' },- > { BOXDRAW_UP_DOUBLE_LEFT, 0xbd, L'/' },- > { BOXDRAW_DOUBLE_UP_LEFT, 0xbc, L'/' },- > { BOXDRAW_VERTICAL_RIGHT_DOUBLE, 0xc6, L'|' },- > { BOXDRAW_VERTICAL_DOUBLE_RIGHT, 0xc7, L'|' },- > { BOXDRAW_DOUBLE_VERTICAL_RIGHT, 0xcc, L'|' },- > { BOXDRAW_VERTICAL_LEFT_DOUBLE, 0xb5, L'|' },- > { BOXDRAW_VERTICAL_DOUBLE_LEFT, 0xb6, L'|' },- > { BOXDRAW_DOUBLE_VERTICAL_LEFT, 0xb9, L'|' },- > { BOXDRAW_DOWN_HORIZONTAL_DOUBLE, 0xd1, L'+' },- > { BOXDRAW_DOWN_DOUBLE_HORIZONTAL, 0xd2, L'+' },- > { BOXDRAW_DOUBLE_DOWN_HORIZONTAL, 0xcb, L'+' },- > { BOXDRAW_UP_HORIZONTAL_DOUBLE, 0xcf, L'+' },- > { BOXDRAW_UP_DOUBLE_HORIZONTAL, 0xd0, L'+' },- > { BOXDRAW_DOUBLE_UP_HORIZONTAL, 0xca, L'+' },- > { BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE, 0xd8, L'+' },- > { BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL, 0xd7, L'+' },- > { BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL, 0xce, L'+' },+ > { BOXDRAW_HORIZONTAL, 0xc4, L'-', 0x71 },+ { BOXDRAW_VE= RTICAL, > 0xb3, L'|', 0x78 },+ { BOXDRAW_DOWN_RIGHT, 0xda, L'/', = 0x6c },+ > { BOXDRAW_DOWN_LEFT, 0xbf, L'\\', 0x6b },+ > { BOXDRAW_UP_RIGHT, 0xc0, L'\\', 0x6d },+ { BOXDRAW_UP= _LEFT, > 0xd9, L'/', 0x6a },+ { BOXDRAW_VERTICAL_RIGHT, 0xc3, L'|', = 0x74 },+ > { BOXDRAW_VERTICAL_LEFT, 0xb4, L'|', 0x75 },+ > { BOXDRAW_DOWN_HORIZONTAL, 0xc2, L'+', 0x77 },+ > { BOXDRAW_UP_HORIZONTAL, 0xc1, L'+', 0x76 },+ > { BOXDRAW_VERTICAL_HORIZONTAL, 0xc5, L'+', 0x6e },+ > { BOXDRAW_DOUBLE_HORIZONTAL, 0xcd, L'-', 0x71 },+ > { BOXDRAW_DOUBLE_VERTICAL, 0xba, L'|', 0x78 },+ > { BOXDRAW_DOWN_RIGHT_DOUBLE, 0xd5, L'/', 0x6c },+ > { BOXDRAW_DOWN_DOUBLE_RIGHT, 0xd6, L'/', 0x6c },+ > { BOXDRAW_DOUBLE_DOWN_RIGHT, 0xc9, L'/', 0x6c },+ > { BOXDRAW_DOWN_LEFT_DOUBLE, 0xb8, L'\\', 0x6b },+ > { BOXDRAW_DOWN_DOUBLE_LEFT, 0xb7, L'\\', 0x6b },+ > { BOXDRAW_DOUBLE_DOWN_LEFT, 0xbb, L'\\', 0x6b },+ > { BOXDRAW_UP_RIGHT_DOUBLE, 0xd4, L'\\', 0x6d },+ > { BOXDRAW_UP_DOUBLE_RIGHT, 0xd3, L'\\', 0x6d },+ > { BOXDRAW_DOUBLE_UP_RIGHT, 0xc8, L'\\', 0x6d },+ > { BOXDRAW_UP_LEFT_DOUBLE, 0xbe, L'/', 0x6a },+ > { BOXDRAW_UP_DOUBLE_LEFT, 0xbd, L'/', 0x6a },+ > { BOXDRAW_DOUBLE_UP_LEFT, 0xbc, L'/', 0x6a },+ > { BOXDRAW_VERTICAL_RIGHT_DOUBLE, 0xc6, L'|', 0x74 },+ > { BOXDRAW_VERTICAL_DOUBLE_RIGHT, 0xc7, L'|', 0x74 },+ > { BOXDRAW_DOUBLE_VERTICAL_RIGHT, 0xcc, L'|', 0x74 },+ > { BOXDRAW_VERTICAL_LEFT_DOUBLE, 0xb5, L'|', 0x75 },+ > { BOXDRAW_VERTICAL_DOUBLE_LEFT, 0xb6, L'|', 0x75 },+ > { BOXDRAW_DOUBLE_VERTICAL_LEFT, 0xb9, L'|', 0x75 },+ > { BOXDRAW_DOWN_HORIZONTAL_DOUBLE, 0xd1, L'+', 0x77 },+ > { BOXDRAW_DOWN_DOUBLE_HORIZONTAL, 0xd2, L'+', 0x77 },+ > { BOXDRAW_DOUBLE_DOWN_HORIZONTAL, 0xcb, L'+', 0x77 },+ > { BOXDRAW_UP_HORIZONTAL_DOUBLE, 0xcf, L'+', 0x76 },+ > { BOXDRAW_UP_DOUBLE_HORIZONTAL, 0xd0, L'+', 0x76 },+ > { BOXDRAW_DOUBLE_UP_HORIZONTAL, 0xca, L'+', 0x76 },+ > { BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE, 0xd8, L'+', 0x6e },+ > { BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL, 0xd7, L'+', 0x6e },+ > { BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL, 0xce, L'+', 0x6e }, - > { BLOCKELEMENT_FULL_BLOCK, 0xdb, L'*' },- > { BLOCKELEMENT_LIGHT_SHADE, 0xb0, L'+' },+ > { BLOCKELEMENT_FULL_BLOCK, 0xdb, L'*', 0x61 },+ > { BLOCKELEMENT_LIGHT_SHADE, 0xb0, L'+', 0x61 }, - > { GEOMETRICSHAPE_UP_TRIANGLE, '^', L'^' },- > { GEOMETRICSHAPE_RIGHT_TRIANGLE, '>', L'>' },- > { GEOMETRICSHAPE_DOWN_TRIANGLE, 'v', L'v' },- > { GEOMETRICSHAPE_LEFT_TRIANGLE, '<', L'<' },+ > { GEOMETRICSHAPE_UP_TRIANGLE, '^', L'^', L'^' },+ > { GEOMETRICSHAPE_RIGHT_TRIANGLE, '>', L'>', L'>' },+ > { GEOMETRICSHAPE_DOWN_TRIANGLE, 'v', L'v', L'v' },+ > { GEOMETRICSHAPE_LEFT_TRIANGLE, '<', L'<', L'<' }, - { ARROW_LEF= T, > '<', L'<' },- { ARROW_UP, '^', L'^' },- { ARR= OW_RIGHT, > '>', L'>' },- { ARROW_DOWN, 'v', L'v' },-- { 0x= 0000, > 0x00, L'\0' }+ { ARROW_LEFT, '<', L'<', L'<' }= ,+ { ARROW_UP, > '^', L'^', L'^' },+ { ARROW_RIGHT, '>', L'>', = L'>' },+ > { ARROW_DOWN, 'v', L'v', L'v' }, }; CHAR16 mSe= tModeString[] > =3D { ESC, '[', '=3D', '3', 'h', 0 };@@ -80,6 +78,8 @@ CHAR16 > mSetCursorPositionString[] =3D { ESC, '[', '0', '0', ';', '0', '0', 'H',= 0 > CHAR16 mCursorForwardString[] =3D { ESC, '[', '0', '0', 'C', 0 }; C= HAR16 > mCursorBackwardString[] =3D { ESC, '[', '0', '0', 'D', 0 }; +CHAR8 > SetDecModeString[] =3D {ESC, 0x28, 0x30};+CHAR8 ExitDecModeStri= ng[] > =3D {ESC, 0x28, 0x42}; // // Body of the ConOut functions //@@ -183,16 +1= 83,19 > @@ TerminalConOutOutputString ( > EFI_STATUS Status; UINT8 Vali= dBytes; CHAR8 > CrLfStr[2];+ CHAR8 DecChar;+ UINTN > ModeSwitchLength; // // flag used to indicate whether condition happ= ens > which will cause // return EFI_WARN_UNKNOWN_GLYPH // BOOLEAN > Warning; - ValidBytes =3D 0;- Warning =3D FALSE;- AsciiChar =3D= 0;-+ ValidBytes > =3D 0;+ Warning =3D FALSE;+ AsciiChar =3D 0;+ DecChar = =3D 0;+ > ModeSwitchLength =3D LENGTH_DEC_ESCAPE; // // get Terminal device da= ta > structure pointer. //@@ -217,17 +220,137 @@ TerminalConOutOutputString > ( > for (; *WString !=3D CHAR_NULL; WString++) { switch (TerminalDevi= ce- > >TerminalType) {- case TerminalTypePcAnsi:- case TerminalTypeVt100= :- > case TerminalTypeVt100Plus:- case TerminalTypeTtyTerm:- case > TerminalTypeLinux:+ if (!TerminalIsValidTextGraphics (*WString, > &GraphicChar, &AsciiChar, NULL)) {+ //+ // If it's not a gr= aphic > character convert Unicode to ASCII.+ //+ GraphicChar =3D > (CHAR8)*WString;++ if (!(TerminalIsValidAscii (GraphicChar) || > TerminalIsValidEfiCntlChar (GraphicChar))) {+ //+ // wh= en this driver > use the OutputString to output control string,+ // TerminalDevic= e- > >OutputEscChar is set to let the Esc char+ // to be output to th= e terminal > emulation software.+ //+ if ((GraphicChar =3D=3D 27) && > TerminalDevice->OutputEscChar) {+ GraphicChar =3D 27;+ = } else {+ > GraphicChar =3D '?';+ Warning =3D TRUE;+ }+ = }++ AsciiChar =3D > GraphicChar;+ }+ Length =3D 1;+ Status =3D TerminalDevice-= >SerialIo- > >Write (+ TerminalDevice->Serial= Io,+ > &Length,+ &GraphicChar+ = );++ if > (EFI_ERROR (Status)) {+ goto OutputError;+ }++ break; = case > TerminalTypeXtermR6:- case TerminalTypeVt400: case > TerminalTypeSCO:+ if (TerminalIsValidTextGraphics (*WString, NULL, N= ULL, > &DecChar) && !TerminalIsValidAscii (*WString)) {+ //+ // Bo= x graphics > are split into 2 types simple and advanced.+ // Simple are drawn w= ith dec > special graphics.+ // Advanced are drawn with utf8.+ // Thi= s checks for > simple because they have a lower value than the advanced.+ if(*WSt= ring > < BOXDRAW_DOUBLE_HORIZONTAL) {+ if (!TerminalDevice- > >DecSpecialGraphicsMode) {+ ValidBytes =3D 0;+ > ModeSwitchLength =3D LENGTH_DEC_ESCAPE;+ Status =3D TerminalDe= vice- > >SerialIo->Write (+ Termin= alDevice->SerialIo,+ > &ModeSwitchLength,+ (UINT8 > *)SetDecModeString+ );+ = TerminalDevice- > >DecSpecialGraphicsMode =3D TRUE;+ } - if > (!TerminalIsValidTextGraphics (*WString, &GraphicChar, &AsciiChar)) {+ > GraphicChar =3D DecChar;+ Length =3D 1;+ } else {+ = if > (TerminalDevice->DecSpecialGraphicsMode) {+ ModeSwitchLength = =3D > LENGTH_DEC_ESCAPE;+ Status =3D TerminalDevice->SerialIo->Write= (+ > TerminalDevice->SerialIo,+ = &ModeSwitchLength,+ > (UINT8 *)ExitDecModeString+ = );+ if (EFI_ERROR > (Status)) {+ goto OutputError;+ }++ = TerminalDevice- > >DecSpecialGraphicsMode =3D FALSE;+ }++ UnicodeToUtf8 (= *WString, > &Utf8Char, &ValidBytes);+ Length =3D ValidBytes;+ }+ = } else {+ if > (TerminalDevice->DecSpecialGraphicsMode) {+ Status =3D TerminalD= evice- > >SerialIo->Write (+ Terminal= Device->SerialIo,+ > &ModeSwitchLength,+ (UINT8 > *)ExitDecModeString+ );+ = if (EFI_ERROR (Status)) > {+ goto OutputError;+ }++ TerminalDevice- > >DecSpecialGraphicsMode =3D FALSE;+ }++ GraphicChar =3D > (CHAR8)*WString;++ if (!(TerminalIsValidAscii (GraphicChar) || > TerminalIsValidEfiCntlChar (GraphicChar))) {+ //+ // wh= en this driver > use the OutputString to output control string,+ // TerminalDevic= e- > >OutputEscChar is set to let the Esc char+ // to be output to th= e terminal > emulation software.+ //+ if ((GraphicChar =3D=3D 27) && > TerminalDevice->OutputEscChar) {+ GraphicChar =3D 27;+ = Length =3D > 1;+ } else {+ UnicodeToUtf8 (*WString, &Utf8Char, &Va= lidBytes);+ > Length =3D ValidBytes;+ }+ } else {+ Length =3D = 1;+ }+ }++ if > (ValidBytes) {+ Status =3D TerminalDevice->SerialIo->Write (+ > TerminalDevice->SerialIo,+ &Le= ngth,+ > (UINT8 *)&Utf8Char+ );+ = ValidBytes =3D 0;+ } else {+ > Status =3D TerminalDevice->SerialIo->Write (+ > TerminalDevice->SerialIo,+ &Le= ngth,+ > &GraphicChar+ );+ }+ i= f (EFI_ERROR (Status)) {+ > goto OutputError;+ }++ break;+ case TerminalTypeVt100:+ case > TerminalTypeTtyTerm:+ if (!TerminalIsValidTextGraphics (*WString, > &GraphicChar, &AsciiChar, NULL)) { // // If it's not a gr= aphic character > convert Unicode to ASCII. //@@ -248,14 +371,70 @@ > TerminalConOutOutputString ( > } AsciiChar =3D GraphicChar;- } - if (Termin= alDevice- > >TerminalType !=3D TerminalTypePcAnsi) {- GraphicChar =3D AsciiCha= r;+ > GraphicChar =3D AsciiChar;++ Length =3D 1;++ Status =3D Termina= lDevice- > >SerialIo->Write (+ TerminalDevi= ce->SerialIo,+ > &Length,+ &GraphicChar+ = );++ if > (EFI_ERROR (Status)) {+ goto OutputError; } + break;+= case > TerminalTypeVt100Plus:+ case TerminalTypeVt400: Length =3D 1;+ = if > (TerminalIsValidTextGraphics (*WString, NULL, NULL, &DecChar)) {+ = if > (!TerminalDevice->DecSpecialGraphicsMode) {+ ModeSwitchLength = =3D > LENGTH_DEC_ESCAPE;+ Status =3D TerminalDevice->SerialIo->Write (= + > TerminalDevice->SerialIo,+ &= ModeSwitchLength,+ > (UINT8 *)SetDecModeString+ )= ;+ TerminalDevice- > >DecSpecialGraphicsMode =3D TRUE;+ }++ GraphicChar =3D DecCha= r;+ } > else {+ if (TerminalDevice->DecSpecialGraphicsMode) {+ > ModeSwitchLength =3D LENGTH_DEC_ESCAPE;+ Status =3D TerminalDevi= ce- > >SerialIo->Write (+ Terminal= Device->SerialIo,+ > &ModeSwitchLength,+ (UINT8 > *)ExitDecModeString+ );++ = if (EFI_ERROR (Status)) > {+ goto OutputError;+ }++ TerminalDevice- > >DecSpecialGraphicsMode =3D FALSE;+ }++ GraphicChar =3D > (CHAR8)*WString;++ if (!(TerminalIsValidAscii (GraphicChar) || > TerminalIsValidEfiCntlChar (GraphicChar))) {+ //+ // wh= en this driver > use the OutputString to output control string,+ // TerminalDevic= e- > >OutputEscChar is set to let the Esc char+ // to be output to th= e terminal > emulation software.+ //+ if ((GraphicChar =3D=3D 27) && > TerminalDevice->OutputEscChar) {+ GraphicChar =3D 27;+ = } else {+ > GraphicChar =3D '?';+ Warning =3D TRUE;+ }+ = }+ } Status =3D > TerminalDevice->SerialIo->Write ( = TerminalDevice- > >SerialIo,@@ -268,7 +447,7 @@ TerminalConOutOutputString ( > } break;-+ case TerminalTypeLinux: case TerminalType= VtUtf8: > UnicodeToUtf8 (*WString, &Utf8Char, &ValidBytes); Length =3D > ValidBytes;@@ -280,8 +459,10 @@ TerminalConOutOutputString ( > if (EFI_ERROR (Status)) { goto OutputError; }+ = break; }+ // > // Update cursor position. //@@ -875,7 +1056,8 @@ BOOLEAN > TerminalIsValidTextGraphics ( IN CHAR16 Graphic, OUT CHAR8 *PcAn= si, > OPTIONAL- OUT CHAR8 *Ascii OPTIONAL+ OUT CHAR8 *Ascii, OPTIONAL+ > OUT CHAR8 *DecSpecialGraphics OPTIONAL ) { UNICODE_TO_CHAR > *Table;@@ -897,6 +1079,9 @@ TerminalIsValidTextGraphics ( > if (Ascii !=3D NULL) { *Ascii =3D Table->Ascii; }+ = if > (DecSpecialGraphics !=3D NULL){+ *DecSpecialGraphics =3D Table- > >DecSpecialGraphics;+ } return TRUE; }-- > 2.32.0 >=20 >=20 >=20 > -=3D-=3D-=3D-=3D-=3D-=3D > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#79214): https://edk2.groups.io/g/devel/message/79214 > Mute This Topic: https://groups.io/mt/84853186/1768756 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [zhichao.gao@intel.com] > -=3D-=3D-=3D-=3D-=3D-=3D >=20