From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web11.19174.1628488623411140784 for ; Sun, 08 Aug 2021 22:57:04 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=XciHubfM; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: hao.a.wu@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10070"; a="201804589" X-IronPort-AV: E=Sophos;i="5.84,305,1620716400"; d="scan'208";a="201804589" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Aug 2021 22:57:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,305,1620716400"; d="scan'208";a="468537009" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga008.jf.intel.com with ESMTP; 08 Aug 2021 22:57:01 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Sun, 8 Aug 2021 22:57:01 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) 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 via Frontend Transport; Sun, 8 Aug 2021 22:57:01 -0700 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (104.47.73.173) 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; Sun, 8 Aug 2021 22:57:01 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DqrKs8eaA6GZqWc4JdUYWrQjeRBfiV7nMUIW25oeE7WThyGGmvpDUXy6bQOTc3HSOXTujyjPdialzxlgJj5oce+LekOdzRiS4+wSgaE9FNzxbbfEE1vK15Zb/csT9RwdqfpPqSHVUZgvZjgG0VHSD2zSvclcrtRR81ZuPDBZ3kfz3skYzSH4UhdIZ1Rp8iRl2fYioZfDU8JpIvCKcPafMC4H3FIfy0Krt8+/+Uef2gkFUL/rUFZlMFkxAj7y7dcIAenLLOO+GsTQ17GS3D6uFRao0Oso/wLYHGpGi8gAm6F2eDHllPN6pzvlx7Dor0FHWc5f6sKWK3t8axqRHWikTA== 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=lybR/A5nFPm98CeXmsVm8vIW0G4yaRfiCCj2Rz9XQeA=; b=m5Q+mTP6UmpVel+B1xxsl5aWatfissRF0PkEaYyigfOKujrch7aHLW+l96VghEbAA3lK91X6doLq2SlpMPCuTDG+sDCu23huFMCChm2QIoT3ChAe7J1PSbgAr50or1ZCBwN6rtUnXF9Vpm8yGmAAZm+fXYCRlZ4HAq5+PTm8JJoACYEfYeybMvtoB9qXTBzX54h0tO1/5NHYKY0H2dg5JG3Z8ofq8bzBRvowbTTxB8wskd0tC4DsvLInLmDRgwk55pg70PCl3QpKxLxd4pv3y4oKxSnNzKJNEDjLDYTM1dHwiG9RxLEQb3ehlqfqm5ZeV2CHQEwrqrV+vAfN007aAQ== 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=lybR/A5nFPm98CeXmsVm8vIW0G4yaRfiCCj2Rz9XQeA=; b=XciHubfMbSV8SzrN1jAZJaxXuclczeARcxp7bQU/dLpNoyqm7+IoeBxCDdCSd8ZjNOflLWQUUu8cBx/n+upyx4Oy5zw6+sv5rOKyc4FgxvQyGAFIBFi3onNBNIX6eBUDt3zcVgM6dKyhPWFAWzdNhH3eU1BKFrbLy7i5czyW/uM= Received: from BN8PR11MB3666.namprd11.prod.outlook.com (2603:10b6:408:8c::19) by BN6PR1101MB2242.namprd11.prod.outlook.com (2603:10b6:405:58::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4394.21; Mon, 9 Aug 2021 05:56:59 +0000 Received: from BN8PR11MB3666.namprd11.prod.outlook.com ([fe80::1d8:daf8:84de:1666]) by BN8PR11MB3666.namprd11.prod.outlook.com ([fe80::1d8:daf8:84de:1666%3]) with mapi id 15.20.4394.022; Mon, 9 Aug 2021 05:56:59 +0000 From: "Wu, Hao A" To: Caden Kline , "devel@edk2.groups.io" , "Gao, Zhichao" , "Ni, Ray" CC: "Wang, Jian J" Subject: Re: [PATCH 1/1] MdeModulePkg/Console: Improve encoding of box drawing characters Thread-Topic: [PATCH 1/1] MdeModulePkg/Console: Improve encoding of box drawing characters Thread-Index: AQHXhOz0KYgtXhrITE60Y84qqWRwhatqtKKA Date: Mon, 9 Aug 2021 05:56:59 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f92d934e-38a4-407a-243b-08d95afa80b4 x-ms-traffictypediagnostic: BN6PR1101MB2242: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3276; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: PRdpYr1y+BQ4Qu/WQabOgSvgJ9sB87++ec93no3t0Fb0vnNSTs8Bl236IWN+R148WeJFcjiavn57ElADVSYh6y1CUB6ie6B+LrbQ9RNO4Pn+UskkC3SB6VOr5KMKoaaCP2tjON7sbI1kAc/GDqfpckI+3sc13+XQQ6Vb+uw/LTxfSJejsEvkG6fhzWWfewp3YC0058ss83R/RAqXyghbBpVIo5HAuyQu45U/2j/3Hy2cdS5RsWfC8yiv7EpdKj41Eq4aPylmjmSot3swG+mqTDtMaLgs9u7GdNyhy7r22+aZM6GK2E2ZydiTcCJHfnqpepMBIV+X3dS15ApO7acUI4QwUwtAcxxLvbj9MvEh1gWF2oJSwgMZQyg0H9+46FteA9ydGfFql6gOYJw4qUkpz8xc3HvTAhfLfu5jg8hOh0mtjL8qsfciFiQaeTQZmpxr/bQLOB61ejuMj468rCHw3LG/a/FBZJ3J35noda84UD/gB9V8Lj5R2ShJnil0ZaKytZAhAywoBhP3JXDNlvkVEgnO+nrmzbsPuMjAc3RkkTAtcIFiwwKFcaQcrEcoNDiVKqcROakXSRWplYY1V27gXozb9S6uDXsaFUZ2kwbd6D4pmUCy5vm9SnPgfGBd1IBW1TIPuuBXmOoCEgLP7H9d18Se3YAMSYCdpz47Yo3HON3ilz/iv5HecWYZ1EjeI9+rGkrZsEQp5SXaz1CnP/7MMQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN8PR11MB3666.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(346002)(366004)(136003)(396003)(376002)(38070700005)(6636002)(2906002)(83380400001)(122000001)(38100700002)(33656002)(6506007)(30864003)(107886003)(4326008)(53546011)(26005)(186003)(86362001)(5660300002)(71200400001)(9686003)(7696005)(55016002)(19627235002)(110136005)(52536014)(8936002)(66556008)(66446008)(66476007)(76116006)(8676002)(478600001)(316002)(66946007)(64756008)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?G3P4GU/Ijg7yQuOOeiBmIHRJVcmQLHa1eMFG+JNa0wNdLyTOJCM+VU2CYlnr?= =?us-ascii?Q?7+j3ZnFmzfRUv7uLJIDxKbHVW3WlP9pmlteXo7Fkj9JEqxXPcBhKgS8hZgMP?= =?us-ascii?Q?1TnLHOW01d4PNITuK0l1bYf7BQl9eJm4D6pby/bH6+aeg7CxiBG6D6jtMzR+?= =?us-ascii?Q?qlJK4y8uqS+wK3yYdxzOVYFt5I3IgNuksPqPVR7QpDDfbmbPFKJUcQu4OchQ?= =?us-ascii?Q?bLPUEuw/yhK9pAC7/ZM646lg/eeLXtJHPdT0SOlGh9uPi4qZnEnnSkUhJZyb?= =?us-ascii?Q?rQBSb8uBCs673VlH7JcVfUpAi4br/gk9gHfVgyE0wa4S62itqXKcakv06rEU?= =?us-ascii?Q?k8newjLi4x+deMVy4/vDR04B7Q3QO2XMecGQHHj7EITXGFdc5MUZL68VCeMB?= =?us-ascii?Q?rBQc25Q6A9xXkTjOvRHTW9lc+g+NA3r+BDwz6e0DzJkBYj/jQsEpk9e2r/AM?= =?us-ascii?Q?q/EW8e+NGN1HJlvKsq8d+HePsmx0tJUQ3LdRr0MVwRiOEsozYLlA4JTSHQ5c?= =?us-ascii?Q?VZJtvAHASQFDuqv7lWWEZf3bNxwmVbujlg1+y7lUC5YEWhQMDdaQnAbWfK3x?= =?us-ascii?Q?LYnfoV0Vvict7P/k/LSCfdAl0ThQtFE6O7/EblSIkLs2vekiA57lXBQKwU3W?= =?us-ascii?Q?lU7y3ZmmeBE0RIbTM1w7pE0hR9tXb8Kt1EsLd110gL0ouFXEeErtZetnBS1q?= =?us-ascii?Q?JCf4c0qPQljxFRx96BHrMcFS60iWsai5criA2b73XwKYrrI0gmxEm8pgmyZW?= =?us-ascii?Q?EaYAuPEo88WPcITUDFrFzLYGKA0YGpy6Rkt/xd8ryNRhg2ExmbhlSNx82GAe?= =?us-ascii?Q?CczDYOMQsJD2D3qsEy+6PV+4178rTbXY2pS1/odZn4rPvaedCODee+A6BQhf?= =?us-ascii?Q?5C6sGEQAj0unUSQZB74y7/4ofJVjLoH0IhlVY7sV/qWSzuOaEvPrNP9zHTJy?= =?us-ascii?Q?oz55+2Aq8yxiH3Af4AP13Xvah71K8qb/Fr83ayu8/zY+896mdAlTp+OAqnQF?= =?us-ascii?Q?+cyhrl3PgZEy0zHbmHfAAtSyjpBP0aK/aKCDUxFUkukgYkoh8DEmBMQ0JUPB?= =?us-ascii?Q?efuBRu/r+Wx60UYq2SnJUGcQsMPA+4aARKa9TaaNIoUtF74N7zjbr8rj2Uwk?= =?us-ascii?Q?c874r3pGySwF6zsg/1TqNvEzgmZwZwHyUGhb0noReWJnJTLp7wH3zyPOJN98?= =?us-ascii?Q?wfVilDooM9ap+dNGkAHSu6RiNzMwsZtlwAjCIzRX2Gf3zdqOT8LSs2prpQqq?= =?us-ascii?Q?ZIiALtMgFIQG8tKF/dB0K0+oJ6kJco8FvaXCrxpmgXe253tvktcGP9aXv4uq?= =?us-ascii?Q?1/5sYysoX6xuE32JVN+NtcTc?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN8PR11MB3666.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f92d934e-38a4-407a-243b-08d95afa80b4 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Aug 2021 05:56:59.6019 (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: TF4RFVcfRtg+BNx5e1D1EMwLbjJN87szRIhajNy5w4TftexaN+ssT9gU1aAPXnp8SGR0F99q21q/aayhdZrECA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR1101MB2242 Return-Path: hao.a.wu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Sorry Zhichao and Ray, could you please help to check if you have comments = for this patch. Thanks in advance. Hello Caden Kline, could you help to provide the information on what kind o= f unit test was done for this patch? Some inline comments for ONLY coding style issues: > -----Original Message----- > From: Caden Kline > Sent: Friday, July 30, 2021 10:45 AM > To: devel@edk2.groups.io > Cc: Wang, Jian J ; Wu, Hao A ; > Gao, Zhichao ; Ni, Ray > Subject: [PATCH 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 > --- > .../Universal/Console/TerminalDxe/Terminal.h | 24 +- > .../Universal/Console/TerminalDxe/Ansi.c | 2 +- > .../Console/TerminalDxe/TerminalConOut.c | 322 ++++++++++++++---- > 3 files changed, 269 insertions(+), 79 deletions(-) >=20 > diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h > b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h > index 360e58e84743..83c3ea94a042 100644 > --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h > +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h > @@ -122,7 +122,10 @@ typedef struct { > EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleInputEx; >=20 > LIST_ENTRY NotifyList; >=20 > EFI_EVENT KeyNotifyProcessEvent; >=20 > + BOOLEAN DecSpecialGraphicsMode; >=20 > } TERMINAL_DEV; >=20 > +// This the lenth the escape squences for entering and exiting Dec Speci= al Typo: lenth -> length, squences -> sequences=20 Also, please help to update the comments to style: // // This the length the escape sequences for entering and exiting Dec Specia= l // > Graphics Mode >=20 > +#define LENGTH_DEC_ESCAPE 0x03 >=20 >=20 >=20 > #define INPUT_STATE_DEFAULT 0x00 >=20 > #define INPUT_STATE_ESC 0x01 >=20 > @@ -169,6 +172,7 @@ typedef struct { > UINT16 Unicode; >=20 > CHAR8 PcAnsi; >=20 > CHAR8 Ascii; >=20 > + CHAR8 DecSpecialGraphics; >=20 > } UNICODE_TO_CHAR; >=20 >=20 >=20 > // >=20 > @@ -1367,20 +1371,22 @@ Utf8ToUnicode ( > /** >=20 > Detects if a Unicode char is for Box Drawing text graphics. >=20 >=20 >=20 > - @param Graphic Unicode char to test. >=20 > - @param PcAnsi Optional pointer to return PCANSI equivalent of >=20 > - Graphic. >=20 > - @param Ascii Optional pointer to return ASCII equivalent of >=20 > - Graphic. >=20 > - >=20 > - @retval TRUE If Graphic is a supported Unicode Box Drawing cha= racter. >=20 > + @param Graphic Unicode char to test. >=20 > + @param PcAnsi Optional pointer to return PCANSI equivale= nt of >=20 > + Graphic. >=20 > + @param Ascii Optional pointer to return ASCII equivalen= t of >=20 > + Graphic. >=20 > + @param DecSpecialGraphics Optional pointer to return Dec Special > Graphics equivalent of >=20 > + Graphic. >=20 > + @retval TRUE If Graphic is a supported Unicode Box Draw= ing > character. >=20 >=20 >=20 > **/ >=20 > BOOLEAN >=20 > TerminalIsValidTextGraphics ( >=20 > IN CHAR16 Graphic, >=20 > - OUT CHAR8 *PcAnsi, OPTIONAL >=20 > - OUT CHAR8 *Ascii OPTIONAL >=20 > + OUT CHAR8 *PcAnsi, OPTIONAL >=20 > + OUT CHAR8 *Ascii, OPTIONAL >=20 > + OUT CHAR8 *DecSpecialGraphics OPTIONAL >=20 > ); >=20 >=20 >=20 > /** >=20 > 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 ( >=20 >=20 > if ( !(TerminalIsValidAscii (*WString) || >=20 > TerminalIsValidEfiCntlChar (*WString) || >=20 > - TerminalIsValidTextGraphics (*WString, &GraphicChar, NULL) )) { >=20 > + TerminalIsValidTextGraphics (*WString, &GraphicChar, NULL, NULL)= )) { >=20 >=20 >=20 > return EFI_UNSUPPORTED; >=20 > } >=20 > diff --git > a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c > b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c > index aae470e9562c..1c22ed426715 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 > // >=20 > // >=20 > UNICODE_TO_CHAR UnicodeToPcAnsiOrAscii[] =3D { >=20 > - { BOXDRAW_HORIZONTAL, 0xc4, L'-' }, >=20 > - { BOXDRAW_VERTICAL, 0xb3, L'|' }, >=20 > - { BOXDRAW_DOWN_RIGHT, 0xda, L'/' }, >=20 > - { BOXDRAW_DOWN_LEFT, 0xbf, L'\\' }, >=20 > - { BOXDRAW_UP_RIGHT, 0xc0, L'\\' }, >=20 > - { BOXDRAW_UP_LEFT, 0xd9, L'/' }, >=20 > - { BOXDRAW_VERTICAL_RIGHT, 0xc3, L'|' }, >=20 > - { BOXDRAW_VERTICAL_LEFT, 0xb4, L'|' }, >=20 > - { BOXDRAW_DOWN_HORIZONTAL, 0xc2, L'+' }, >=20 > - { BOXDRAW_UP_HORIZONTAL, 0xc1, L'+' }, >=20 > - { BOXDRAW_VERTICAL_HORIZONTAL, 0xc5, L'+' }, >=20 > - { BOXDRAW_DOUBLE_HORIZONTAL, 0xcd, L'-' }, >=20 > - { BOXDRAW_DOUBLE_VERTICAL, 0xba, L'|' }, >=20 > - { BOXDRAW_DOWN_RIGHT_DOUBLE, 0xd5, L'/' }, >=20 > - { BOXDRAW_DOWN_DOUBLE_RIGHT, 0xd6, L'/' }, >=20 > - { BOXDRAW_DOUBLE_DOWN_RIGHT, 0xc9, L'/' }, >=20 > - { BOXDRAW_DOWN_LEFT_DOUBLE, 0xb8, L'\\' }, >=20 > - { BOXDRAW_DOWN_DOUBLE_LEFT, 0xb7, L'\\' }, >=20 > - { BOXDRAW_DOUBLE_DOWN_LEFT, 0xbb, L'\\' }, >=20 > - { BOXDRAW_UP_RIGHT_DOUBLE, 0xd4, L'\\' }, >=20 > - { BOXDRAW_UP_DOUBLE_RIGHT, 0xd3, L'\\' }, >=20 > - { BOXDRAW_DOUBLE_UP_RIGHT, 0xc8, L'\\' }, >=20 > - { BOXDRAW_UP_LEFT_DOUBLE, 0xbe, L'/' }, >=20 > - { BOXDRAW_UP_DOUBLE_LEFT, 0xbd, L'/' }, >=20 > - { BOXDRAW_DOUBLE_UP_LEFT, 0xbc, L'/' }, >=20 > - { BOXDRAW_VERTICAL_RIGHT_DOUBLE, 0xc6, L'|' }, >=20 > - { BOXDRAW_VERTICAL_DOUBLE_RIGHT, 0xc7, L'|' }, >=20 > - { BOXDRAW_DOUBLE_VERTICAL_RIGHT, 0xcc, L'|' }, >=20 > - { BOXDRAW_VERTICAL_LEFT_DOUBLE, 0xb5, L'|' }, >=20 > - { BOXDRAW_VERTICAL_DOUBLE_LEFT, 0xb6, L'|' }, >=20 > - { BOXDRAW_DOUBLE_VERTICAL_LEFT, 0xb9, L'|' }, >=20 > - { BOXDRAW_DOWN_HORIZONTAL_DOUBLE, 0xd1, L'+' }, >=20 > - { BOXDRAW_DOWN_DOUBLE_HORIZONTAL, 0xd2, L'+' }, >=20 > - { BOXDRAW_DOUBLE_DOWN_HORIZONTAL, 0xcb, L'+' }, >=20 > - { BOXDRAW_UP_HORIZONTAL_DOUBLE, 0xcf, L'+' }, >=20 > - { BOXDRAW_UP_DOUBLE_HORIZONTAL, 0xd0, L'+' }, >=20 > - { BOXDRAW_DOUBLE_UP_HORIZONTAL, 0xca, L'+' }, >=20 > - { BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE, 0xd8, L'+' }, >=20 > - { BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL, 0xd7, L'+' }, >=20 > - { BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL, 0xce, L'+' }, >=20 > + { BOXDRAW_HORIZONTAL, 0xc4, L'-', 0x71 }, >=20 > + { BOXDRAW_VERTICAL, 0xb3, L'|', 0x78 }, >=20 > + { BOXDRAW_DOWN_RIGHT, 0xda, L'/', 0x6c }, >=20 > + { BOXDRAW_DOWN_LEFT, 0xbf, L'\\', 0x6b }, >=20 > + { BOXDRAW_UP_RIGHT, 0xc0, L'\\', 0x6d }, >=20 > + { BOXDRAW_UP_LEFT, 0xd9, L'/', 0x6a }, >=20 > + { BOXDRAW_VERTICAL_RIGHT, 0xc3, L'|', 0x74 }, >=20 > + { BOXDRAW_VERTICAL_LEFT, 0xb4, L'|', 0x75 }, >=20 > + { BOXDRAW_DOWN_HORIZONTAL, 0xc2, L'+', 0x77 }, >=20 > + { BOXDRAW_UP_HORIZONTAL, 0xc1, L'+', 0x76 }, >=20 > + { BOXDRAW_VERTICAL_HORIZONTAL, 0xc5, L'+', 0x6e }, >=20 > + { BOXDRAW_DOUBLE_HORIZONTAL, 0xcd, L'-', 0x71 }, >=20 > + { BOXDRAW_DOUBLE_VERTICAL, 0xba, L'|', 0x78 }, >=20 > + { BOXDRAW_DOWN_RIGHT_DOUBLE, 0xd5, L'/', 0x6c }, >=20 > + { BOXDRAW_DOWN_DOUBLE_RIGHT, 0xd6, L'/', 0x6c }, >=20 > + { BOXDRAW_DOUBLE_DOWN_RIGHT, 0xc9, L'/', 0x6c }, >=20 > + { BOXDRAW_DOWN_LEFT_DOUBLE, 0xb8, L'\\', 0x6b }, >=20 > + { BOXDRAW_DOWN_DOUBLE_LEFT, 0xb7, L'\\', 0x6b }, >=20 > + { BOXDRAW_DOUBLE_DOWN_LEFT, 0xbb, L'\\', 0x6b }, >=20 > + { BOXDRAW_UP_RIGHT_DOUBLE, 0xd4, L'\\', 0x6d }, >=20 > + { BOXDRAW_UP_DOUBLE_RIGHT, 0xd3, L'\\', 0x6d }, >=20 > + { BOXDRAW_DOUBLE_UP_RIGHT, 0xc8, L'\\', 0x6d }, >=20 > + { BOXDRAW_UP_LEFT_DOUBLE, 0xbe, L'/', 0x6a }, >=20 > + { BOXDRAW_UP_DOUBLE_LEFT, 0xbd, L'/', 0x6a }, >=20 > + { BOXDRAW_DOUBLE_UP_LEFT, 0xbc, L'/', 0x6a }, >=20 > + { BOXDRAW_VERTICAL_RIGHT_DOUBLE, 0xc6, L'|', 0x74 }, >=20 > + { BOXDRAW_VERTICAL_DOUBLE_RIGHT, 0xc7, L'|', 0x74 }, >=20 > + { BOXDRAW_DOUBLE_VERTICAL_RIGHT, 0xcc, L'|', 0x74 }, >=20 > + { BOXDRAW_VERTICAL_LEFT_DOUBLE, 0xb5, L'|', 0x75 }, >=20 > + { BOXDRAW_VERTICAL_DOUBLE_LEFT, 0xb6, L'|', 0x75 }, >=20 > + { BOXDRAW_DOUBLE_VERTICAL_LEFT, 0xb9, L'|', 0x75 }, >=20 > + { BOXDRAW_DOWN_HORIZONTAL_DOUBLE, 0xd1, L'+', 0x77 }, >=20 > + { BOXDRAW_DOWN_DOUBLE_HORIZONTAL, 0xd2, L'+', 0x77 }, >=20 > + { BOXDRAW_DOUBLE_DOWN_HORIZONTAL, 0xcb, L'+', 0x77 }, >=20 > + { BOXDRAW_UP_HORIZONTAL_DOUBLE, 0xcf, L'+', 0x76 }, >=20 > + { BOXDRAW_UP_DOUBLE_HORIZONTAL, 0xd0, L'+', 0x76 }, >=20 > + { BOXDRAW_DOUBLE_UP_HORIZONTAL, 0xca, L'+', 0x76 }, >=20 > + { BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE, 0xd8, L'+', 0x6e }, >=20 > + { BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL, 0xd7, L'+', 0x6e }, >=20 > + { BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL, 0xce, L'+', 0x6e }, >=20 >=20 >=20 > - { BLOCKELEMENT_FULL_BLOCK, 0xdb, L'*' }, >=20 > - { BLOCKELEMENT_LIGHT_SHADE, 0xb0, L'+' }, >=20 > + { BLOCKELEMENT_FULL_BLOCK, 0xdb, L'*', 0x61 }, >=20 > + { BLOCKELEMENT_LIGHT_SHADE, 0xb0, L'+', 0x61 }, >=20 >=20 >=20 > - { GEOMETRICSHAPE_UP_TRIANGLE, '^', L'^' }, >=20 > - { GEOMETRICSHAPE_RIGHT_TRIANGLE, '>', L'>' }, >=20 > - { GEOMETRICSHAPE_DOWN_TRIANGLE, 'v', L'v' }, >=20 > - { GEOMETRICSHAPE_LEFT_TRIANGLE, '<', L'<' }, >=20 > + { GEOMETRICSHAPE_UP_TRIANGLE, '^', L'^', L'^' }, >=20 > + { GEOMETRICSHAPE_RIGHT_TRIANGLE, '>', L'>', L'>' }, >=20 > + { GEOMETRICSHAPE_DOWN_TRIANGLE, 'v', L'v', L'v' }, >=20 > + { GEOMETRICSHAPE_LEFT_TRIANGLE, '<', L'<', L'<' }, >=20 >=20 >=20 > - { ARROW_LEFT, '<', L'<' }, >=20 > - { ARROW_UP, '^', L'^' }, >=20 > - { ARROW_RIGHT, '>', L'>' }, >=20 > - { ARROW_DOWN, 'v', L'v' }, >=20 > - >=20 > - { 0x0000, 0x00, L'\0' } >=20 > + { ARROW_LEFT, '<', L'<', L'<' }, >=20 > + { ARROW_UP, '^', L'^', L'^' }, >=20 > + { ARROW_RIGHT, '>', L'>', L'>' }, >=20 > + { ARROW_DOWN, 'v', L'v', L'v' }, >=20 > }; >=20 >=20 >=20 > CHAR16 mSetModeString[] =3D { ESC, '[', '=3D', '3', 'h', 0 }; >=20 > @@ -80,6 +78,8 @@ CHAR16 mSetCursorPositionString[] =3D { ESC, '[', '0',= '0', ';', > '0', '0', 'H', 0 > CHAR16 mCursorForwardString[] =3D { ESC, '[', '0', '0', 'C', 0 }; >=20 > CHAR16 mCursorBackwardString[] =3D { ESC, '[', '0', '0', 'D', 0 }; >=20 >=20 >=20 > +CHAR8 SetDecModeString[] =3D {ESC, 0x28, 0x30}; >=20 > +CHAR8 ExitDecModeString[] =3D {ESC, 0x28, 0x42}; >=20 > // >=20 > // Body of the ConOut functions >=20 > // >=20 > @@ -183,16 +183,19 @@ TerminalConOutOutputString ( > EFI_STATUS Status; >=20 > UINT8 ValidBytes; >=20 > CHAR8 CrLfStr[2]; >=20 > + CHAR8 DecChar; >=20 > + UINTN ModeSwitchLength; >=20 > // >=20 > // flag used to indicate whether condition happens which will cause >=20 > // return EFI_WARN_UNKNOWN_GLYPH >=20 > // >=20 > BOOLEAN Warning; >=20 >=20 >=20 > - ValidBytes =3D 0; >=20 > - Warning =3D FALSE; >=20 > - AsciiChar =3D 0; >=20 > - >=20 > + ValidBytes =3D 0; >=20 > + Warning =3D FALSE; >=20 > + AsciiChar =3D 0; >=20 > + DecChar =3D 0; >=20 > + ModeSwitchLength =3D LENGTH_DEC_ESCAPE; >=20 > // >=20 > // get Terminal device data structure pointer. >=20 > // >=20 > @@ -217,17 +220,136 @@ TerminalConOutOutputString ( > for (; *WString !=3D CHAR_NULL; WString++) { >=20 >=20 >=20 > switch (TerminalDevice->TerminalType) { >=20 > - >=20 > case TerminalTypePcAnsi: >=20 > - case TerminalTypeVt100: >=20 > - case TerminalTypeVt100Plus: >=20 > - case TerminalTypeTtyTerm: >=20 > - case TerminalTypeLinux: >=20 > + if (!TerminalIsValidTextGraphics (*WString, &GraphicChar, &AsciiCh= ar, > NULL)) { >=20 > + // >=20 > + // If it's not a graphic character convert Unicode to ASCII. >=20 > + // >=20 > + GraphicChar =3D (CHAR8)*WString; Please help to fix the space indent (extra spaces) here to keep it aligned = with the contexts. >=20 > + >=20 > + if (!(TerminalIsValidAscii (GraphicChar) || TerminalIsValidEfiCn= tlChar > (GraphicChar))) { >=20 > + // >=20 > + // when this driver use the OutputString to output control str= ing, >=20 > + // TerminalDevice->OutputEscChar is set to let the Esc char >=20 > + // to be output to the terminal emulation software. >=20 > + // >=20 > + if ((GraphicChar =3D=3D 27) && TerminalDevice->OutputEscChar) = { >=20 > + GraphicChar =3D 27; >=20 > + } else { >=20 > + GraphicChar =3D '?'; >=20 > + Warning =3D TRUE; >=20 > + } >=20 > + } >=20 > + >=20 > + AsciiChar =3D GraphicChar; >=20 > + } >=20 > + Length =3D 1; >=20 > + Status =3D TerminalDevice->SerialIo->Write ( >=20 > + TerminalDevice->SerialIo, >=20 > + &Length, >=20 > + &GraphicChar >=20 > + ); Please help to add an extra space for the above 3 lines for space indent co= ding style. >=20 > + >=20 > + if (EFI_ERROR (Status)) { >=20 > + goto OutputError; >=20 > + } >=20 > + >=20 > + break; >=20 > case TerminalTypeXtermR6: >=20 > - case TerminalTypeVt400: >=20 > case TerminalTypeSCO: >=20 For the below added codes (for case TerminalTypeXtermR6 & TerminalTypeSCO),= please help to fix below coding style issues: a) Codes within a 'case' or 'if-else' statement is recommended to add 2 spa= ces for indent. (The space indent of the below chunk of codes are messy, wh= ich impacts the readability.) b) For multi-line function calls, the input parameters (including the closi= ng bracket) are recommended to add 2 spaces from the function name in the 1= st line. c) Please update multi-line comment to align with style: // // Comments... // > + if (TerminalIsValidTextGraphics (*WString, NULL, NULL, &DecChar) > && !TerminalIsValidAscii (*WString)) { >=20 > + //Box graphics are split into 2 types simple and advanced >=20 > + //simple are drawn with dec special graphics >=20 > + //advanced are drawn with utf8 >=20 > + //This checks for simple because they have a lower value than = the > advanced >=20 > + if(*WString < BOXDRAW_DOUBLE_HORIZONTAL) { >=20 > + if (!TerminalDevice->DecSpecialGraphicsMode) { >=20 > + ValidBytes =3D 0; >=20 > + ModeSwitchLength =3D LENGTH_DEC_ESCAPE; >=20 > + Status =3D TerminalDevice->SerialIo->Write ( >=20 > + TerminalDevice->Seria= lIo, >=20 > + &ModeSwitchLength, >=20 > + (UINT8 *)SetDecModeSt= ring >=20 > + ); >=20 > + TerminalDevice->DecSpecialGraphicsMode =3D TRUE; >=20 > + } >=20 >=20 >=20 > - if (!TerminalIsValidTextGraphics (*WString, &GraphicChar, &AsciiCh= ar)) { >=20 > + GraphicChar =3D DecChar; >=20 > + Length =3D 1; >=20 > + } else { >=20 > + if (TerminalDevice->DecSpecialGraphicsMode) { >=20 > + ModeSwitchLength =3D LENGTH_DEC_ESCAPE; >=20 > + Status =3D TerminalDevice->SerialIo->Write ( >=20 > + TerminalDevice->Seria= lIo, >=20 > + &ModeSwitchLength, >=20 > + (UINT8 *)ExitDecModeS= tring >=20 > + ); >=20 > + if (EFI_ERROR (Status)) { >=20 > + goto OutputError; >=20 > + } >=20 > + >=20 > + TerminalDevice->DecSpecialGraphicsMode =3D FALSE; >=20 > + } >=20 > + >=20 > + UnicodeToUtf8 (*WString, &Utf8Char, &ValidBytes); >=20 > + Length =3D ValidBytes; >=20 > + } >=20 > + } else { >=20 > + if (TerminalDevice->DecSpecialGraphicsMode) { >=20 > + Status =3D TerminalDevice->SerialIo->Write ( >=20 > + TerminalDevice->SerialIo, >=20 > + &ModeSwitchLength, >=20 > + (UINT8 *)ExitDecModeString >=20 > + ); >=20 > + if (EFI_ERROR (Status)) { >=20 > + goto OutputError; >=20 > + } >=20 > + >=20 > + TerminalDevice->DecSpecialGraphicsMode =3D FALSE; >=20 > + } >=20 > + >=20 > + GraphicChar =3D (CHAR8)*WString; >=20 > + >=20 > + if (!(TerminalIsValidAscii (GraphicChar) || TerminalIsValidEfiCn= tlChar > (GraphicChar))) { >=20 > + // >=20 > + // when this driver use the OutputString to output control str= ing, >=20 > + // TerminalDevice->OutputEscChar is set to let the Esc char >=20 > + // to be output to the terminal emulation software. >=20 > + // >=20 > + if ((GraphicChar =3D=3D 27) && TerminalDevice->OutputEscChar= ) { >=20 > + GraphicChar =3D 27; >=20 > + Length =3D 1; >=20 > + } else { >=20 > + UnicodeToUtf8 (*WString, &Utf8Char, &ValidBytes); >=20 > + Length =3D ValidBytes; >=20 > + } >=20 > + } else { >=20 > + Length =3D 1; >=20 > + } >=20 > + } >=20 > + >=20 > + if (ValidBytes) { >=20 > + Status =3D TerminalDevice->SerialIo->Write ( >=20 > + TerminalDevice->SerialIo, >=20 > + &Length, >=20 > + (UINT8 *)&Utf8Char >=20 > + ); >=20 > + ValidBytes =3D 0; >=20 > + } else { >=20 > + Status =3D TerminalDevice->SerialIo->Write ( >=20 > + TerminalDevice->SerialIo, >=20 > + &Length, >=20 > + &GraphicChar >=20 > + ); >=20 > + } >=20 > + if (EFI_ERROR (Status)) { >=20 > + goto OutputError; >=20 > + } >=20 > + >=20 > + break; >=20 > + case TerminalTypeVt100: >=20 > + case TerminalTypeTtyTerm: >=20 > + if (!TerminalIsValidTextGraphics (*WString, &GraphicChar, &AsciiCh= ar, > NULL)) { >=20 > // >=20 > // If it's not a graphic character convert Unicode to ASCII. >=20 > // >=20 > @@ -248,12 +370,9 @@ TerminalConOutOutputString ( > } >=20 >=20 >=20 > AsciiChar =3D GraphicChar; >=20 > - >=20 > } >=20 >=20 >=20 > - if (TerminalDevice->TerminalType !=3D TerminalTypePcAnsi) { >=20 > - GraphicChar =3D AsciiChar; >=20 > - } >=20 > + GraphicChar =3D AsciiChar; >=20 >=20 >=20 > Length =3D 1; >=20 >=20 >=20 > @@ -267,8 +386,67 @@ TerminalConOutOutputString ( > goto OutputError; >=20 > } >=20 >=20 >=20 > - break; >=20 > + break; >=20 > + case TerminalTypeVt100Plus: >=20 > + case TerminalTypeVt400: For the below added codes (for case TerminalTypeVt100Plus & TerminalTypeVt4= 00), please help to fix below coding style issues: a) Codes within a 'case' or 'if-else' statement is recommended to add 2 spa= ces for indent. (The space indent of the below chunk of codes are messy, wh= ich impacts the readability.) b) For multi-line function calls, the input parameters (including the closi= ng bracket) are recommended to add 2 spaces from the function name in the 1= st line. Best Regards, Hao Wu >=20 > + Length =3D 1; >=20 > + if (TerminalIsValidTextGraphics (*WString, NULL, NULL, &DecChar)= ) { >=20 > + if (!TerminalDevice->DecSpecialGraphicsMode) { >=20 > + ModeSwitchLength =3D LENGTH_DEC_ESCAPE; >=20 > + Status =3D TerminalDevice->SerialIo->Write ( >=20 > + TerminalDevice->SerialI= o, >=20 > + &ModeSwitchLength, >=20 > + (UINT8 *)SetDecModeStri= ng >=20 > + ); >=20 > + TerminalDevice->DecSpecialGraphicsMode =3D TRUE; >=20 > + } >=20 >=20 >=20 > + GraphicChar =3D DecChar; >=20 > + } else { >=20 > + if (TerminalDevice->DecSpecialGraphicsMode) { >=20 > + ModeSwitchLength =3D LENGTH_DEC_ESCAPE; >=20 > + Status =3D TerminalDevice->SerialIo->Write ( >=20 > + TerminalDevice->SerialI= o, >=20 > + &ModeSwitchLength, >=20 > + (UINT8 *)ExitDecModeStr= ing >=20 > + ); >=20 > + >=20 > + if (EFI_ERROR (Status)) { >=20 > + goto OutputError; >=20 > + } >=20 > + >=20 > + TerminalDevice->DecSpecialGraphicsMode =3D FALSE; >=20 > + } >=20 > + >=20 > + GraphicChar =3D (CHAR8)*WString; >=20 > + >=20 > + if (!(TerminalIsValidAscii (GraphicChar) || TerminalIsValidEfiCn= tlChar > (GraphicChar))) { >=20 > + // >=20 > + // when this driver use the OutputString to output control str= ing, >=20 > + // TerminalDevice->OutputEscChar is set to let the Esc char >=20 > + // to be output to the terminal emulation software. >=20 > + // >=20 > + if ((GraphicChar =3D=3D 27) && TerminalDevice->OutputEscChar) = { >=20 > + GraphicChar =3D 27; >=20 > + } else { >=20 > + GraphicChar =3D '?'; >=20 > + Warning =3D TRUE; >=20 > + } >=20 > + } >=20 > + } >=20 > + >=20 > + Status =3D TerminalDevice->SerialIo->Write ( >=20 > + TerminalDevice->SerialIo, >=20 > + &Length, >=20 > + &GraphicChar >=20 > + ); >=20 > + >=20 > + if (EFI_ERROR (Status)) { >=20 > + goto OutputError; >=20 > + } >=20 > + >=20 > + break; >=20 > + case TerminalTypeLinux: >=20 > case TerminalTypeVtUtf8: >=20 > UnicodeToUtf8 (*WString, &Utf8Char, &ValidBytes); >=20 > Length =3D ValidBytes; >=20 > @@ -280,8 +458,10 @@ TerminalConOutOutputString ( > if (EFI_ERROR (Status)) { >=20 > goto OutputError; >=20 > } >=20 > + >=20 > break; >=20 > } >=20 > + >=20 > // >=20 > // Update cursor position. >=20 > // >=20 > @@ -875,7 +1055,8 @@ BOOLEAN > TerminalIsValidTextGraphics ( >=20 > IN CHAR16 Graphic, >=20 > OUT CHAR8 *PcAnsi, OPTIONAL >=20 > - OUT CHAR8 *Ascii OPTIONAL >=20 > + OUT CHAR8 *Ascii, OPTIONAL >=20 > + OUT CHAR8 *DecSpecialGraphics OPTIONAL >=20 > ) >=20 > { >=20 > UNICODE_TO_CHAR *Table; >=20 > @@ -897,6 +1078,9 @@ TerminalIsValidTextGraphics ( > if (Ascii !=3D NULL) { >=20 > *Ascii =3D Table->Ascii; >=20 > } >=20 > + if (DecSpecialGraphics !=3D NULL){ >=20 > + *DecSpecialGraphics =3D Table->DecSpecialGraphics; >=20 > + } >=20 >=20 >=20 > return TRUE; >=20 > } >=20 > -- > 2.32.0