From unknown Sat Sep 20 07:39:29 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#79297 <79297@debbugs.gnu.org> To: bug#79297 <79297@debbugs.gnu.org> Subject: Status: patch: full color in windows terminal Reply-To: bug#79297 <79297@debbugs.gnu.org> Date: Sat, 20 Sep 2025 14:39:29 +0000 retitle 79297 patch: full color in windows terminal reassign 79297 emacs submitter 79297 Ewan severity 79297 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Sun Aug 24 02:06:23 2025 Received: (at submit) by debbugs.gnu.org; 24 Aug 2025 06:06:23 +0000 Received: from localhost ([127.0.0.1]:43061 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uq3ry-0002u2-0B for submit@debbugs.gnu.org; Sun, 24 Aug 2025 02:06:23 -0400 Received: from lists.gnu.org ([2001:470:142::17]:39442) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1upyOt-00082r-DH for submit@debbugs.gnu.org; Sat, 23 Aug 2025 20:16:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1upyOh-0007eG-CS for bug-gnu-emacs@gnu.org; Sat, 23 Aug 2025 20:15:48 -0400 Received: from mail-4317.protonmail.ch ([185.70.43.17]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1upyOd-0001eP-3a for bug-gnu-emacs@gnu.org; Sat, 23 Aug 2025 20:15:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=etown.dev; s=protonmail; t=1755994531; x=1756253731; bh=z2gsPnJMx4CA0U3Uqo6mny17ZYzYceZRgrFXI2qeW2Q=; h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=Zulrs2RGItn1Q0aITT2jfgcQFoTH5OmHXlGe402vR/OzfeytWh55dK2MHLXb1twT2 kcuQK2eigciYBDYwbtQvrHSu3HU7/4N1f/6jjLD2jiAov85QffE5JAc1xRLAK0w1xM 5JNlsop6cTu5+9xjOTo6ffQ9lgPXWPMySpzwEddbe2zNhIMA9KNZJ8bxLZmCDzs+/P ISW7isV9uQvyrbYNdtAfb5lMsVMm5WpXbu2+QnLOrbxJERYS6Bwi+a50AiW9r1asT2 /hP6/fGXtEkZ5bbEz17YGZj5r+Z1OjQWAsCooRY5ni41lgqIIUKWdasFpPcrwd78Gh 5b6ZvznzM/Vag== Date: Sun, 24 Aug 2025 00:15:28 +0000 To: "bug-gnu-emacs@gnu.org" From: Ewan Subject: patch: full color in windows terminal Message-ID: Feedback-ID: 150490971:user:proton X-Pm-Message-ID: 6d3cc7c65001ef92ebe760897973c20457f9bb84 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1=_56Ex8KSqHpskbdU57OtDQXkNvCk2Cjxq6qorpOWB4I" Received-SPF: pass client-ip=185.70.43.17; envelope-from=ewan@etown.dev; helo=mail-4317.protonmail.ch X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Sun, 24 Aug 2025 02:06:20 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) --b1=_56Ex8KSqHpskbdU57OtDQXkNvCk2Cjxq6qorpOWB4I Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable * configure.ac: Compiler flag for setting w32 console color space. * lisp/term/w32console.el: Define and apply different color spaces. * src/nsterm.c: Delete working text after inserting new text. * src/term.c: Set tty max colors based on compiler flag. * src/w32console.c: Write face colors to console via VT sequences. Most of the work was done here:=20 https://github.com/tsuu32/emacs-w32con-vt I just updated it for Emacs 30.2 and fixed some bugs. Full branch here:=20 https://github.com/ewantown/emacs/tree/w32-vt-seq Working builds here: https://github.com/ewantown/wemacs-build/releases/tag/v31.9.20250823.99d9b7= 5 Patch attached. --b1=_56Ex8KSqHpskbdU57OtDQXkNvCk2Cjxq6qorpOWB4I Content-Type: application/octet-stream; name=0001-Windows-Terminal-full-color-with-VT-Sequences.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-Windows-Terminal-full-color-with-VT-Sequences.patch RnJvbSAyNmMxZGViNTFmYjU0YTA4YWQ2ZTRjOGE1NDcwNGRkZjAzNjNhNzRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBld2FudG93biA8ZXdhbkBldG93bi5kZXY+CkRhdGU6IEZyaSwg MjIgQXVnIDIwMjUgMjM6Mjg6MDUgLTA3MDAKU3ViamVjdDogW1BBVENIXSBXaW5kb3dzIFRlcm1p bmFsIGZ1bGwgY29sb3Igd2l0aCBWVCBTZXF1ZW5jZXMKCi0tLQogY29uZmlndXJlLmFjICAgICAg ICAgICAgfCAgMjIgKysrKysKIGxpc3AvdGVybS93MzJjb25zb2xlLmVsIHwgMTI1ICsrKysrKysr KysrKysrKysrKystLS0tLS0tLQogc3JjL25zdGVybS5tICAgICAgICAgICAgfCAgIDggKy0KIHNy Yy90ZXJtLmMgICAgICAgICAgICAgIHwgIDEyICsrLQogc3JjL3czMmNvbnNvbGUuYyAgICAgICAg fCAxODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogNSBmaWxlcyBj aGFuZ2VkLCAyOTMgaW5zZXJ0aW9ucygrKSwgNTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv Y29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDhjMmU2YjQyMWQ5Li5mMTQ5OWNjNTRm NSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMjk5LDYg KzI5OSwyMSBAQCBBQ19BUkdfV0lUSChbYWxsXSwKICAgW3dpdGhfZmVhdHVyZXM9JHdpdGh2YWxd LAogICBbd2l0aF9mZWF0dXJlcz15ZXNdKQogCitBQ19BUkdfV0lUSChbdzMyLXZ0LWNvbG9yXSwK K1tBU19IRUxQX1NUUklORyhbLS13aXRoLXczMi12dC1jb2xvcj1BUkddLAorW3VzZSBWVCBzZXF1 ZW5jZXMgZm9yIHczMiBjb25zb2xlIGNvbG9yIChBUkcgb25lIG9mOiBubywgMTYsIDE1NiwgMjRi aXQpXSldLAorWyAgICBjYXNlICIke3dpdGh2YWx9IiBpbgorICAgICBubyApICAgIHZhbD1ubyA7 OworICAgICAxNiApICAgIHZhbD0xNiA7OworICAgICAyNTYgKSAgIHZhbD0yNTYgOzsKKyAgICAg MjRiaXQgKSB2YWw9MjRiaXQgOzsKKyAgICAgKiApCisgICAgIEFDX01TR19FUlJPUihbJy0td2l0 aC12dC1jb2xvcj0kd2l0aHZhbCcgaXMgaW52YWxpZDsKKyAgICAgdGhlIHZhbHVlIHNob3VsZCBi ZSAnbm8nLCAnMTYnLCAnMjU2Jywgb3IgJzI0Yml0J10pIDs7CisgICAgIGVzYWMKKyAgICAgd2l0 aF93MzJfdnRfY29sb3I9JHZhbAorXSkKKwogZG5sIEFSQ0hfSU5ERVBFTkRFTlRfQ09ORklHX0ZJ TEVTKEZJTEUuLi4pCiBkbmwgTGlrZSBBQ19DT05GSUdfRklMRVMoRklMRSkuICBIb3dldmVyLCBk byBub3QgZ2VuZXJhdGUgdGhpcwogZG5sICAgaWYgY29uZmlndXJlIGlzIGJlaW5nIGNhbGxlZCBy ZWN1cnNpdmVseSBpbiBwcmVwYXJhdGlvbgpAQCAtMzAzMyw2ICszMDQ4LDEzIEBAIGlmIHRlc3Qg IiR7b3BzeXN9IiA9ICJtaW5ndzMyIjsgdGhlbgogICAgIEFDX01TR19FUlJPUihbdGhlIFdpbmRv d3MgQVBJIGhlYWRlcnMgYXJlIHRvbyBvbGQgdG8gc3VwcG9ydCB0aGlzIGJ1aWxkLl0pCiAgIGZp CiAgIEhBVkVfVzMyPSR7ZW1hY3NfY3ZfdzMyYXBpfQorICBjYXNlICIke3dpdGhfdzMyX3Z0X2Nv bG9yfSIgaW4KKyAgICAgICAxNiApIEFDX0RFRklORShVU0VfVzMyQ09OVlRDT0xPUl8xNiwgMSwg W0RlZmluZSB0byB1c2UgVlQgc2VxdWVuY2VzIGZvciAxNiBjb2xvcnMuXSkgOzsKKyAgICAgICAy NTYgKSBBQ19ERUZJTkUoVVNFX1czMkNPTlZUQ09MT1JfMjU2LCAxLCBbRGVmaW5lIHRvIHVzZSBW VCBzZXF1ZW5jZXMgZm9yIDI1NiBjb2xvcnMuXSkgOzsKKyAgICAgICAyNGJpdCApIEFDX0RFRklO RShVU0VfVzMyQ09OVlRDT0xPUl8yNEJJVCwgMSwgW0RlZmluZSB0byB1c2UgVlQgc2VxdWVuY2Vz IGZvciAyNGJpdCBjb2xvcnMuXSkgOzsKKyAgICAgICBubyApIDs7CisgICAgICAgKiApIDs7Cisg IGVzYWMKIGZpCiAKIE5URElSPQpkaWZmIC0tZ2l0IGEvbGlzcC90ZXJtL3czMmNvbnNvbGUuZWwg Yi9saXNwL3Rlcm0vdzMyY29uc29sZS5lbAppbmRleCAxYjQ0ZGE0OGJmNy4uMjc3NGNhZThjZDYg MTAwNjQ0Ci0tLSBhL2xpc3AvdGVybS93MzJjb25zb2xlLmVsCisrKyBiL2xpc3AvdGVybS93MzJj b25zb2xlLmVsCkBAIC0yNCwyNSArMjQsNDIgQEAKIAogOzs7IENvZGU6CiAKLTs7IFczMiB1c2Vz IGRpZmZlcmVudCBjb2xvciBpbmRleGVzIHRoYW4gc3RhbmRhcmQ6Ci0KKzs7IFczMiB1c2VzIGRp ZmZlcmVudCBjb2xvciBpbmRleGVzIHRoYW4gc3RhbmRhcmQKKzs7IFdoZW4gdXNpbmcgVlQgc2Vx dWVuY2VzIGZvciBjb2xvciwgc3RhbmRhcmRpemUKIChkZWZ2YXIgdzMyLXR0eS1zdGFuZGFyZC1j b2xvcnMKLSAgJygoImJsYWNrIiAgICAgICAgICAwICAgICAwICAgICAwICAgICAwKQotICAgICgi Ymx1ZSIgICAgICAgICAgIDEgICAgIDAgICAgIDAgNTI0ODApIDsgTWVkaXVtQmx1ZQotICAgICgi Z3JlZW4iICAgICAgICAgIDIgIDg3MDQgMzU1ODQgIDg3MDQpIDsgRm9yZXN0R3JlZW4KLSAgICAo ImN5YW4iICAgICAgICAgICAzICAgICAwIDUyNzM2IDUzNTA0KSA7IERhcmtUdXJxdW9pc2UKLSAg ICAoInJlZCIgICAgICAgICAgICA0IDQ1NTY4ICA4NzA0ICA4NzA0KSA7IEZpcmVCcmljawotICAg ICgibWFnZW50YSIgICAgICAgIDUgMzU1ODQgICAgIDAgMzU1ODQpIDsgRGFya01hZ2VudGEKLSAg ICAoImJyb3duIiAgICAgICAgICA2IDQwOTYwIDIwOTkyIDExNTIwKSA7IFNpZW5uYQotICAgICgi bGlnaHRncmF5IiAgICAgIDcgNDg2NDAgNDg2NDAgNDg2NDApIDsgR3JheQotICAgICgiZGFya2dy YXkiICAgICAgIDggMjYxMTIgMjYxMTIgMjYxMTIpIDsgR3JheTQwCi0gICAgKCJsaWdodGJsdWUi ICAgICAgOSAgICAgMCAgICAgMCA2NTUzNSkgOyBCbHVlCi0gICAgKCJsaWdodGdyZWVuIiAgICAx MCAgICAgMCA2NTUzNSAgICAgMCkgOyBHcmVlbgotICAgICgibGlnaHRjeWFuIiAgICAgMTEgICAg IDAgNjU1MzUgNjU1MzUpIDsgQ3lhbgotICAgICgibGlnaHRyZWQiICAgICAgMTIgNjU1MzUgICAg IDAgICAgIDApIDsgUmVkCi0gICAgKCJsaWdodG1hZ2VudGEiICAxMyA2NTUzNSAgICAgMCA2NTUz NSkgOyBNYWdlbnRhCi0gICAgKCJ5ZWxsb3ciICAgICAgICAxNCA2NTUzNSA2NTUzNSAgICAgMCkg OyBZZWxsb3cKLSAgICAoIndoaXRlIiAgICAgICAgIDE1IDY1NTM1IDY1NTM1IDY1NTM1KSkKKyAg KGlmIHczMmNvbi11c2UtdnQtY29sb3IKKyAgICAgICcoKCJibGFjayIgICAgICAgICAgMCAgICAg MCAgICAgMCAgICAgMCkKKyAgICAgICAgKCJyZWQiICAgICAgICAgICAgMSA0NTU2OCAgODcwNCAg ODcwNCkgOyBGaXJlQnJpY2sKKyAgICAgICAgKCJncmVlbiIgICAgICAgICAgMiAgODcwNCAzNTU4 NCAgODcwNCkgOyBGb3Jlc3RHcmVlbgorICAgICAgICAoImJyb3duIiAgICAgICAgICAzIDQwOTYw IDIwOTkyIDExNTIwKSA7IFNpZW5uYQorICAgICAgICAoImJsdWUiICAgICAgICAgICA0ICAgICAw ICAgICAwIDUyNDgwKSA7IE1lZGl1bUJsdWUKKyAgICAgICAgKCJtYWdlbnRhIiAgICAgICAgNSAz NTU4NCAgICAgMCAzNTU4NCkgOyBEYXJrTWFnZW50YQorICAgICAgICAoImN5YW4iICAgICAgICAg ICA2ICAgICAwIDUyNzM2IDUzNTA0KSA7IERhcmtUdXJxdW9pc2UKKyAgICAgICAgKCJsaWdodGdy YXkiICAgICAgNyA0ODY0MCA0ODY0MCA0ODY0MCkgOyBHcmF5CisgICAgICAgICgiZGFya2dyYXki ICAgICAgIDggMjYxMTIgMjYxMTIgMjYxMTIpIDsgR3JheTQwCisgICAgICAgICgibGlnaHRyZWQi ICAgICAgIDkgNjU1MzUgICAgIDAgICAgIDApIDsgUmVkCisgICAgICAgICgibGlnaHRncmVlbiIg ICAgMTAgICAgIDAgNjU1MzUgICAgIDApIDsgR3JlZW4KKyAgICAgICAgKCJ5ZWxsb3ciICAgICAg ICAxMSA2NTUzNSA2NTUzNSAgICAgMCkgOyBZZWxsb3cKKyAgICAgICAgKCJsaWdodGJsdWUiICAg ICAxMiAgICAgMCAgICAgMCA2NTUzNSkgOyBCbHVlCisgICAgICAgICgibGlnaHRtYWdlbnRhIiAg MTMgNjU1MzUgICAgIDAgNjU1MzUpIDsgTWFnZW50YQorICAgICAgICAoImxpZ2h0Y3lhbiIgICAg IDE0ICAgICAwIDY1NTM1IDY1NTM1KSA7IEN5YW4KKyAgICAgICAgKCJ3aGl0ZSIgICAgICAgICAx NSA2NTUzNSA2NTUzNSA2NTUzNSkpCisgICAgJygoImJsYWNrIiAgICAgICAgICAwICAgICAwICAg ICAwICAgICAwKQorICAgICAgKCJibHVlIiAgICAgICAgICAgMSAgICAgMCAgICAgMCA1MjQ4MCkg OyBNZWRpdW1CbHVlCisgICAgICAoImdyZWVuIiAgICAgICAgICAyICA4NzA0IDM1NTg0ICA4NzA0 KSA7IEZvcmVzdEdyZWVuCisgICAgICAoImN5YW4iICAgICAgICAgICAzICAgICAwIDUyNzM2IDUz NTA0KSA7IERhcmtUdXJxdW9pc2UKKyAgICAgICgicmVkIiAgICAgICAgICAgIDQgNDU1NjggIDg3 MDQgIDg3MDQpIDsgRmlyZUJyaWNrCisgICAgICAoIm1hZ2VudGEiICAgICAgICA1IDM1NTg0ICAg ICAwIDM1NTg0KSA7IERhcmtNYWdlbnRhCisgICAgICAoImJyb3duIiAgICAgICAgICA2IDQwOTYw IDIwOTkyIDExNTIwKSA7IFNpZW5uYQorICAgICAgKCJsaWdodGdyYXkiICAgICAgNyA0ODY0MCA0 ODY0MCA0ODY0MCkgOyBHcmF5CisgICAgICAoImRhcmtncmF5IiAgICAgICA4IDI2MTEyIDI2MTEy IDI2MTEyKSA7IEdyYXk0MAorICAgICAgKCJsaWdodGJsdWUiICAgICAgOSAgICAgMCAgICAgMCA2 NTUzNSkgOyBCbHVlCisgICAgICAoImxpZ2h0Z3JlZW4iICAgIDEwICAgICAwIDY1NTM1ICAgICAw KSA7IEdyZWVuCisgICAgICAoImxpZ2h0Y3lhbiIgICAgIDExICAgICAwIDY1NTM1IDY1NTM1KSA7 IEN5YW4KKyAgICAgICgibGlnaHRyZWQiICAgICAgMTIgNjU1MzUgICAgIDAgICAgIDApIDsgUmVk CisgICAgICAoImxpZ2h0bWFnZW50YSIgIDEzIDY1NTM1ICAgICAwIDY1NTM1KSA7IE1hZ2VudGEK KyAgICAgICgieWVsbG93IiAgICAgICAgMTQgNjU1MzUgNjU1MzUgICAgIDApIDsgWWVsbG93Cisg ICAgICAoIndoaXRlIiAgICAgICAgIDE1IDY1NTM1IDY1NTM1IDY1NTM1KSkpCiAiQSBsaXN0IG9m IFZHQSBjb25zb2xlIGNvbG9ycywgdGhlaXIgaW5kaWNlcyBhbmQgMTYtYml0IFJHQiB2YWx1ZXMu IikKIAogKGRlY2xhcmUtZnVuY3Rpb24geC1zZXR1cC1mdW5jdGlvbi1rZXlzICJ0ZXJtL2NvbW1v bi13aW4iIChmcmFtZSkpCkBAIC01MCw2ICs2Nyw0NyBAQAogKGRlY2xhcmUtZnVuY3Rpb24gdzMy LWdldC1jb25zb2xlLWNvZGVwYWdlICJ3MzJwcm9jLmMiICgpKQogKGRlY2xhcmUtZnVuY3Rpb24g dzMyLWdldC1jb25zb2xlLW91dHB1dC1jb2RlcGFnZSAidzMycHJvYy5jIiAoKSkKIAorKGRlZnVu IHczMmNvbi1kZWZpbmUtYmFzZS1jb2xvcnMgKCkKKyAgIkRlZmluZXMgYmFzZSBjb2xvciBzcGFj ZSBmb3IgdzMyIgorICAobGV0KiAoKGNvbG9ycyB3MzItdHR5LXN0YW5kYXJkLWNvbG9ycykKKyAg ICAgICAgIChuYmFzZSAobGVuZ3RoIGNvbG9ycykpCisgICAgICAgICAoY29sb3IgKGNhciBjb2xv cnMpKSkKKyAgICAocHJvZ24gKHdoaWxlIGNvbG9ycworICAgICAgICAgICAgICh0dHktY29sb3It ZGVmaW5lIChjYXIgY29sb3IpIChjYWRyIGNvbG9yKSAoY2RkciBjb2xvcikpCisgICAgICAgICAg ICAgKHNldHEgY29sb3JzIChjZHIgY29sb3JzKQorICAgICAgICAgICAgICAgICAgIGNvbG9yICAo Y2FyIGNvbG9ycykpKQorICAgICAgICAgICBuYmFzZSkpKQorCisoZGVmdW4gdzMyY29uLWRlZmlu ZS0yNTYtY29sb3JzICgpCisgICJEZWZpbmVzIDI1NiBjb2xvciBzcGFjZSIKKyAgKGxldCAoKHIg MCkgKGIgMCkgKGcgMCkKKyAgICAgICAgKG4gKC0gMjU2ICh3MzJjb24tZGVmaW5lLWJhc2UtY29s b3JzKSkpCisgICAgICAgIChjb252ZXJ0LXRvLTE2Yml0IChsYW1iZGEgKHByaW0pIChsb2dpb3Ig cHJpbSAoYXNoIHByaW0gOCkpKSkpCisgICAgKHdoaWxlICg+IG4gMjQpIDs7IG5vbi1ncmV5Cisg ICAgICAobGV0ICgoaSAoLSAyNTYgbikpCisgICAgICAgICAgICAoYyAobWFwY2FyIGNvbnZlcnQt dG8tMTZiaXQKKyAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNhciAobGFtYmRhICh4KSAoaWYg KHplcm9wIHgpIDAgKCsgKCogeCA0MCkgNTUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobGlzdCByIGcgYikpKSkpCisgICAgICAgICh0dHktY29sb3ItZGVmaW5lIChmb3JtYXQg ImNvbG9yLSVkIiBpKSBpIGMpKQorICAgICAgKHNldHEgYiAoMSsgYikpCisgICAgICAod2hlbiAo PiBiIDUpIChzZXRxIGcgKDErIGcpIGIgMCkpCisgICAgICAod2hlbiAoPiBnIDUpIChzZXRxIHIg KDErIHIpIGcgMCkpCisgICAgICAoc2V0cSBuICgxLSBuKSkpCisgICAgKHdoaWxlICg+IG4gMCkg OzsgYWxsLWdyZXkKKyAgICAgIChsZXQqICgoaSAoLSAyNTYgbikpCisgICAgICAgICAgICAgKHYg KGZ1bmNhbGwgY29udmVydC10by0xNmJpdCAoKyA4ICgqICgtIDI0IG4pIDEwKSkpKQorICAgICAg ICAgICAgIChjIChsaXN0IHYgdiB2KSkpCisgICAgICAgICh0dHktY29sb3ItZGVmaW5lIChmb3Jt YXQgImNvbG9yLSVkIiBpKSBpIGMpKQorICAgICAgKHNldHEgbiAoMS0gbikpKSkpCisKKyhkZWZ1 biB3MzJjb24tZGVmaW5lLTI0Yml0LWNvbG9ycyAoKQorICAiRGVmaW5lcyAyNCBiaXQgY29sb3Ig c3BhY2UiCisgIChsZXQgKChpICh3MzJjb24tZGVmaW5lLWJhc2UtY29sb3JzKSkpCisgICAgKG1h cGMgKGxhbWJkYSAoYykgKHVubGVzcyAoYXNzb2MgKGNhciBjKSB3MzItdHR5LXN0YW5kYXJkLWNv bG9ycykKKyAgICAgICAgICAgICAgICAgICAodHR5LWNvbG9yLWRlZmluZSAoY2FyIGMpIGkgKGNk ciBjKSkKKyAgICAgICAgICAgICAgICAgICAoc2V0cSBpICgxKyBpKSkpKQorICAgICAgICAgIGNv bG9yLW5hbWUtcmdiLWFsaXN0KSkpCisKIChkZWZ1biB0ZXJtaW5hbC1pbml0LXczMmNvbnNvbGUg KCkKICAgIlRlcm1pbmFsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB3MzIgY29uc29sZS4i CiAgIDs7IFNoYXJlIGZ1bmN0aW9uIGtleSBpbml0aWFsaXphdGlvbiB3aXRoIHczMiBndWkgZnJh bWVzCkBAIC02MCwyMiArMTE4LDIxIEBACiAJKG9lbS1jb2RlLXBhZ2Utb3V0cHV0LWNvZGluZwog CSAoaW50ZXJuIChmb3JtYXQgImNwJWQiICh3MzItZ2V0LWNvbnNvbGUtb3V0cHV0LWNvZGVwYWdl KSkpKQogCW9lbS1jcy1wIG9lbS1vLWNzLXApCi0JKHNldHEgb2VtLWNzLXAgKGNvZGluZy1zeXN0 ZW0tcCBvZW0tY29kZS1wYWdlLWNvZGluZykpCi0JKHNldHEgb2VtLW8tY3MtcCAoY29kaW5nLXN5 c3RlbS1wIG9lbS1jb2RlLXBhZ2Utb3V0cHV0LWNvZGluZykpCi0JKHdoZW4gb2VtLWNzLXAKLQkg IChzZXQta2V5Ym9hcmQtY29kaW5nLXN5c3RlbSBvZW0tY29kZS1wYWdlLWNvZGluZykKLQkgIChz ZXQtdGVybWluYWwtY29kaW5nLXN5c3RlbQotCSAgIChpZiBvZW0tby1jcy1wIG9lbS1jb2RlLXBh Z2Utb3V0cHV0LWNvZGluZyBvZW0tY29kZS1wYWdlLWNvZGluZykpCi0gICAgICAgICAgOzsgU2lu Y2Ugd2UgY2hhbmdlZCB0aGUgdGVybWluYWwgZW5jb2RpbmcsIHdlIG5lZWQgdG8gcmVwZWF0Ci0g ICAgICAgICAgOzsgdGhlIHRlc3QgZm9yIFVuaWNvZGUgcXVvdGVzIGJlaW5nIGRpc3BsYXlhYmxl LgotICAgICAgICAgIChzdGFydHVwLS1zZXR1cC1xdW90ZS1kaXNwbGF5KSkpCi0gIChsZXQqICgo Y29sb3JzIHczMi10dHktc3RhbmRhcmQtY29sb3JzKQotICAgICAgICAgKGNvbG9yIChjYXIgY29s b3JzKSkpCi0gICAgKHR0eS1jb2xvci1jbGVhcikKLSAgICAod2hpbGUgY29sb3JzCi0gICAgICAo dHR5LWNvbG9yLWRlZmluZSAoY2FyIGNvbG9yKSAoY2FkciBjb2xvcikgKGNkZHIgY29sb3IpKQot ICAgICAgKHNldHEgY29sb3JzIChjZHIgY29sb3JzKQotICAgICAgICAgICAgY29sb3IgKGNhciBj b2xvcnMpKSkpCisgICAgKHNldHEgb2VtLWNzLXAgKGNvZGluZy1zeXN0ZW0tcCBvZW0tY29kZS1w YWdlLWNvZGluZykpCisgICAgKHNldHEgb2VtLW8tY3MtcCAoY29kaW5nLXN5c3RlbS1wIG9lbS1j b2RlLXBhZ2Utb3V0cHV0LWNvZGluZykpCisgICAgKHdoZW4gb2VtLWNzLXAKKyAgICAgIChzZXQt a2V5Ym9hcmQtY29kaW5nLXN5c3RlbSBvZW0tY29kZS1wYWdlLWNvZGluZykKKyAgICAgIChzZXQt dGVybWluYWwtY29kaW5nLXN5c3RlbQorICAgICAgIChpZiBvZW0tby1jcy1wIG9lbS1jb2RlLXBh Z2Utb3V0cHV0LWNvZGluZyBvZW0tY29kZS1wYWdlLWNvZGluZykpCisgICAgICA7OyBTaW5jZSB3 ZSBjaGFuZ2VkIHRoZSB0ZXJtaW5hbCBlbmNvZGluZywgd2UgbmVlZCB0byByZXBlYXQKKyAgICAg IDs7IHRoZSB0ZXN0IGZvciBVbmljb2RlIHF1b3RlcyBiZWluZyBkaXNwbGF5YWJsZS4KKyAgICAg IChzdGFydHVwLS1zZXR1cC1xdW90ZS1kaXNwbGF5KSkpCisgIDs7IERlZmluZSB0aGUgY29sb3Ig c3BhY2UKKyAgKHR0eS1jb2xvci1jbGVhcikKKyAgKGxldCAoKG5jb2xvcnMgKGRpc3BsYXktY29s b3ItY2VsbHMpKSkKKyAgICAoY29uZCAoKD0gbmNvbG9ycyAxNjc3NzIxNikgKHczMmNvbi1kZWZp bmUtMjRiaXQtY29sb3JzKSkKKyAgICAgICAgICAoKD0gbmNvbG9ycyAyNjUgICAgICAgKHczMmNv bi1kZWZpbmUtMjU2LWNvbG9ycykpKQorICAgICAgICAgICh0ICAgICAgICAgICAgICAgICAgICAo dzMyY29uLWRlZmluZS1iYXNlLWNvbG9ycykpKSkKICAgKGNsZWFyLWZhY2UtY2FjaGUpCiAgIDs7 IEZpZ3VyZSBvdXQgd2hhdCBhcmUgdGhlIGNvbG9ycyBvZiB0aGUgY29uc29sZSB3aW5kb3csIGFu ZCBzZXQgdXAKICAgOzsgdGhlIGJhY2tncm91bmQtbW9kZSBjb3JyZXNwb25kaW5nbHkuCmRpZmYg LS1naXQgYS9zcmMvbnN0ZXJtLm0gYi9zcmMvbnN0ZXJtLm0KaW5kZXggNTEyNzczOWUyZDkuLjY4 NGI3NTg2MDE5IDEwMDY0NAotLS0gYS9zcmMvbnN0ZXJtLm0KKysrIGIvc3JjL25zdGVybS5tCkBA IC03MjY1LDEwICs3MjY1LDYgQEAgLSAodm9pZClpbnNlcnRUZXh0OiAoaWQpYVN0cmluZwogICBp ZiAoIWVtYWNzX2V2ZW50KQogICAgIHJldHVybjsKIAotICAvKiBGaXJzdCwgY2xlYXIgYW55IHdv cmtpbmcgdGV4dC4gICovCi0gIGlmICh3b3JraW5nVGV4dCAhPSBuaWwpCi0gICAgW3NlbGYgZGVs ZXRlV29ya2luZ1RleHRdOwotCiAgIC8qIEl0IG1pZ2h0IGJlIHByZWZlcmFibGUgdG8gdXNlIGdl dENoYXJhY3RlcnM6cmFuZ2U6IGJlbG93LAogICAgICBjZi4gaHR0cHM6Ly9kZXZlbG9wZXIuYXBw bGUuY29tL2xpYnJhcnkvY29udGVudC9kb2N1bWVudGF0aW9uL0NvY29hL0NvbmNlcHR1YWwvQ29j b2FQZXJmb3JtYW5jZS9BcnRpY2xlcy9TdHJpbmdEcmF3aW5nLmh0bWwjLy9hcHBsZV9yZWYvZG9j L3VpZC9UUDQwMDAxNDQ1LTExMjM3OC4KICAgICAgSG93ZXZlciwgd2UgcHJvYmFibHkgY2FuJ3Qg dXNlIFNBRkVfTkFMTE9DQSBoZXJlIGJlY2F1c2UgaXQgbWlnaHQKQEAgLTcyOTcsNiArNzI5Mywx MCBAQCAtICh2b2lkKWluc2VydFRleHQ6IChpZClhU3RyaW5nCiAgICAgICBlbWFjc19ldmVudC0+ Y29kZSA9IGNvZGU7CiAgICAgICBFVl9UUkFJTEVSICgoaWQpbmlsKTsKICAgICB9CisKKyAgLyog RmluYWxseSwgY2xlYXIgYW55IHdvcmtpbmcgdGV4dC4gICovCisgIGlmICh3b3JraW5nVGV4dCAh PSBuaWwpCisgICAgW3NlbGYgZGVsZXRlV29ya2luZ1RleHRdOwogfQogCiAKZGlmZiAtLWdpdCBh L3NyYy90ZXJtLmMgYi9zcmMvdGVybS5jCmluZGV4IGExZTNmNjMxMmM2Li5lNzYyMDI0YmRkNSAx MDA2NDQKLS0tIGEvc3JjL3Rlcm0uYworKysgYi9zcmMvdGVybS5jCkBAIC00Njg2LDcgKzQ2ODYs MTcgQEAgdXNlIHRoZSBCb3VybmUgc2hlbGwgY29tbWFuZCAnVEVSTT0uLi47IGV4cG9ydCBURVJN JyAoQy1zaGVsbDpcblwKICAgICAgZG9uJ3QgdGhpbmsgd2UncmUgbG9zaW5nIGFueXRoaW5nIGJ5 IHR1cm5pbmcgaXQgb2ZmLiAgKi8KICAgdHR5LT5saW5lX2luc19kZWxfb2sgPSAwOwogCi0gIHR0 eS0+VE5fbWF4X2NvbG9ycyA9IDE2OyAgLyogTXVzdCBiZSBub24temVybyBmb3IgdHR5LWRpc3Bs YXktY29sb3ItcC4gICovCisgIC8qIFN1cHBvcnQgZnVsbCByYW5nZSBvZiBjb2xvcnMgaW4gbmV3 IHdpbmRvd3MgdGVybWluYWwgYXBwICovCisgICNpZiBkZWZpbmVkKFVTRV9XMzJDT05WVENPTE9S XzE2KQorICAgIHR0eS0+VE5fbWF4X2NvbG9ycyA9IDE2OworICAjZWxpZiBkZWZpbmVkKFVTRV9X MzJDT05WVENPTE9SXzI1NikKKyAgICB0dHktPlROX21heF9jb2xvcnMgPSAyNTY7CisgICNlbGlm IGRlZmluZWQoVVNFX1czMkNPTlZUQ09MT1JfMjRCSVQpCisgICAgdHR5LT5UTl9tYXhfY29sb3Jz ID0gMTY3NzcyMTY7CisgICNlbHNlCisgICAgLyogTXVzdCBiZSBub24temVybyBmb3IgdHR5LWRp c3BsYXktY29sb3ItcC4gICovCisgICAgdHR5LT5UTl9tYXhfY29sb3JzID0gMTY7CisgICNlbmRp ZgogI2VuZGlmCS8qIERPU19OVCAqLwogCiAjaWZkZWYgSEFWRV9HUE0KZGlmZiAtLWdpdCBhL3Ny Yy93MzJjb25zb2xlLmMgYi9zcmMvdzMyY29uc29sZS5jCmluZGV4IDFiY2EwY2FkZmY5Li41YTVk NTE5ZmZjMyAxMDA2NDQKLS0tIGEvc3JjL3czMmNvbnNvbGUuYworKysgYi9zcmMvdzMyY29uc29s ZS5jCkBAIC01Myw2ICs1MywxMCBAQCBzdGF0aWMgdm9pZCB3MzJjb25fc2V0X3Rlcm1pbmFsX21v ZGVzIChzdHJ1Y3QgdGVybWluYWwgKnQpOwogc3RhdGljIHZvaWQgdzMyY29uX3VwZGF0ZV9iZWdp biAoc3RydWN0IGZyYW1lICogZik7CiBzdGF0aWMgdm9pZCB3MzJjb25fdXBkYXRlX2VuZCAoc3Ry dWN0IGZyYW1lICogZik7CiBzdGF0aWMgV09SRCB3MzJfZmFjZV9hdHRyaWJ1dGVzIChzdHJ1Y3Qg ZnJhbWUgKmYsIGludCBmYWNlX2lkKTsKKyNpZiBkZWZpbmVkKFVTRV9XMzJDT05WVENPTE9SXzE2 KSB8fCBkZWZpbmVkKFVTRV9XMzJDT05WVENPTE9SXzI1NikgfHwgZGVmaW5lZChVU0VfVzMyQ09O VlRDT0xPUl8yNEJJVCkKK3N0YXRpYyB2b2lkIHR1cm5fb25fZmFjZSAoc3RydWN0IGZyYW1lICos IGludCBmYWNlX2lkKTsKK3N0YXRpYyB2b2lkIHR1cm5fb2ZmX2ZhY2UgKHN0cnVjdCBmcmFtZSAq LCBpbnQgZmFjZV9pZCk7CisjZW5kaWYKIAogc3RhdGljIENPT1JECWN1cnNvcl9jb29yZHM7CiBz dGF0aWMgSEFORExFCXByZXZfc2NyZWVuLCBjdXJfc2NyZWVuOwpAQCAtMTY2LDEwICsxNzAsMTAg QEAgdzMyY29uX2NsZWFyX2VuZF9vZl9saW5lIChzdHJ1Y3QgZnJhbWUgKmYsIGludCBlbmQpCiAg ICAgewogICAgICAgaW50IGk7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2x5cGhzX2xlbjsgaSsr KQotICAgICAgICB7CisJewogCSAgbWVtY3B5ICgmZ2x5cGhzW2ldLCAmc3BhY2VfZ2x5cGgsIHNp emVvZiAoc3RydWN0IGdseXBoKSk7CiAJICBnbHlwaHNbaV0uZnJhbWUgPSBOVUxMOwotICAgICAg ICB9CisJfQogICAgICAgY2VvbF9pbml0aWFsaXplZCA9IFRSVUU7CiAgICAgfQogICB3MzJjb25f d3JpdGVfZ2x5cGhzIChmLCBnbHlwaHMsIGVuZCAtIGN1cnNvcl9jb29yZHMuWCk7CkBAIC0yMTgs MjYgKzIyMiwyNiBAQCB3MzJjb25faW5zX2RlbF9saW5lcyAoc3RydWN0IGZyYW1lICpmLCBpbnQg dnBvcywgaW50IG4pCiAgIGlmIChuID4gMCkKICAgICB7CiAgICAgICBpZiAoc2Nyb2xsLkJvdHRv bSA8IGRlc3QuWSkKLSAgICAgICAgeworCXsKIAkgIGZvciAoaSA9IHNjcm9sbC5Cb3R0b207IGkg PCBkZXN0Llk7IGkrKykKLSAgICAgICAgICAgIHsKKwkgICAgewogCSAgICAgIHczMmNvbl9tb3Zl X2N1cnNvciAoZiwgaSwgMCk7CiAJICAgICAgdzMyY29uX2NsZWFyX2VuZF9vZl9saW5lIChmLCBG UkFNRV9DT0xTIChmKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgfQorCX0KICAg ICB9CiAgIGVsc2UKICAgICB7CiAgICAgICBuYiA9IGRlc3QuWSArIChzY3JvbGwuQm90dG9tIC0g c2Nyb2xsLlRvcCkgKyAxOwogCiAgICAgICBpZiAobmIgPCBzY3JvbGwuVG9wKQotICAgICAgICB7 CisJewogCSAgZm9yIChpID0gbmI7IGkgPCBzY3JvbGwuVG9wOyBpKyspCi0gICAgICAgICAgICB7 CisJICAgIHsKIAkgICAgICB3MzJjb25fbW92ZV9jdXJzb3IgKGYsIGksIDApOwogCSAgICAgIHcz MmNvbl9jbGVhcl9lbmRfb2ZfbGluZSAoZiwgRlJBTUVfQ09MUyAoZikpOwotICAgICAgICAgICAg fQotICAgICAgICB9CisJICAgIH0KKwl9CiAgICAgfQogCiAgIGN1cnNvcl9jb29yZHMuWCA9IDA7 CkBAIC0zMDYsMTAgKzMxMCwxNCBAQCB3MzJjb25faW5zZXJ0X2dseXBocyAoc3RydWN0IGZyYW1l ICpmLCByZWdpc3RlciBzdHJ1Y3QgZ2x5cGggKnN0YXJ0LAogCiBzdGF0aWMgdm9pZAogdzMyY29u X3dyaXRlX2dseXBocyAoc3RydWN0IGZyYW1lICpmLCByZWdpc3RlciBzdHJ1Y3QgZ2x5cGggKnN0 cmluZywKLSAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBsZW4pCisJCSAgICAgcmVn aXN0ZXIgaW50IGxlbikKIHsKICAgRFdPUkQgcjsKKworICAjaWYgZGVmaW5lZChVU0VfVzMyQ09O VlRDT0xPUl8xNikgfHwgZGVmaW5lZChVU0VfVzMyQ09OVlRDT0xPUl8yNTYpIHx8IGRlZmluZWQo VVNFX1czMkNPTlZUQ09MT1JfMjRCSVQpCisgICNlbHNlCiAgIFdPUkQgY2hhcl9hdHRyOworICAj ZW5kaWYKICAgTFBDU1RSIGNvbnZlcnNpb25fYnVmZmVyOwogICBzdHJ1Y3QgY29kaW5nX3N5c3Rl bSAqY29kaW5nOwogCkBAIC0zNDAsMTAgKzM0OCwxNSBAQCB3MzJjb25fd3JpdGVfZ2x5cGhzIChz dHJ1Y3QgZnJhbWUgKmYsIHJlZ2lzdGVyIHN0cnVjdCBnbHlwaCAqc3RyaW5nLAogCSAgICAgICYm IHN0cmluZ1tuXS5mcmFtZSA9PSBmYWNlX2lkX2ZyYW1lKSkKIAkgIGJyZWFrOwogCi0gICAgICAv KiB3MzJjb25fY2xlYXJfZW5kX29mX2xpbmUgc2V0cyBmcmFtZSBvZiBnbHlwaHMgdG8gTlVMTC4g ICovCi0gICAgICBzdHJ1Y3QgZnJhbWUgKmF0dHJfZnJhbWUgPSBmYWNlX2lkX2ZyYW1lID8gZmFj ZV9pZF9mcmFtZSA6IGY7Ci0gICAgICAvKiBUdXJuIGFwcGVhcmFuY2UgbW9kZXMgb2YgdGhlIGZh Y2Ugb2YgdGhlIHJ1biBvbi4gICovCi0gICAgICBjaGFyX2F0dHIgPSB3MzJfZmFjZV9hdHRyaWJ1 dGVzIChhdHRyX2ZyYW1lLCBmYWNlX2lkKTsKKyNpZiBkZWZpbmVkKFVTRV9XMzJDT05WVENPTE9S XzE2KSB8fCBkZWZpbmVkKFVTRV9XMzJDT05WVENPTE9SXzI1NikgfHwgZGVmaW5lZChVU0VfVzMy Q09OVlRDT0xPUl8yNEJJVCkKKwl0dXJuX29uX2ZhY2UgKGYsIGZhY2VfaWQpOworI2Vsc2UKKwkv KiB3MzJjb25fY2xlYXJfZW5kX29mX2xpbmUgc2V0cyBmcmFtZSBvZiBnbHlwaHMgdG8gTlVMTC4g ICovCisJc3RydWN0IGZyYW1lICphdHRyX2ZyYW1lID0gZmFjZV9pZF9mcmFtZSA/IGZhY2VfaWRf ZnJhbWUgOiBmOworCisJLyogVHVybiBhcHBlYXJhbmNlIG1vZGVzIG9mIHRoZSBmYWNlIG9mIHRo ZSBydW4gb24uICAqLworCWNoYXJfYXR0ciA9IHczMl9mYWNlX2F0dHJpYnV0ZXMgKGF0dHJfZnJh bWUsIGZhY2VfaWQpOworI2VuZGlmCiAKICAgICAgIGlmIChuID09IGxlbikKIAkvKiBUaGlzIGlz IHRoZSBsYXN0IHJ1bi4gICovCkBAIC0zNTEsNiArMzY0LDE1IEBAIHczMmNvbl93cml0ZV9nbHlw aHMgKHN0cnVjdCBmcmFtZSAqZiwgcmVnaXN0ZXIgc3RydWN0IGdseXBoICpzdHJpbmcsCiAgICAg ICBjb252ZXJzaW9uX2J1ZmZlciA9IChMUENTVFIpIGVuY29kZV90ZXJtaW5hbF9jb2RlIChzdHJp bmcsIG4sIGNvZGluZyk7CiAgICAgICBpZiAoY29kaW5nLT5wcm9kdWNlZCA+IDApCiAJeworI2lm IGRlZmluZWQoVVNFX1czMkNPTlZUQ09MT1JfMTYpIHx8IGRlZmluZWQoVVNFX1czMkNPTlZUQ09M T1JfMjU2KSB8fCBkZWZpbmVkKFVTRV9XMzJDT05WVENPTE9SXzI0QklUKQorCSAgaWYgKCFXcml0 ZUNvbnNvbGUgKGN1cl9zY3JlZW4sIGNvbnZlcnNpb25fYnVmZmVyLAorCQkJICAgICBjb2Rpbmct PnByb2R1Y2VkLCAmciwgTlVMTCkpCisJICAgIHsKKwkgICAgICBwcmludGYgKCJGYWlsZWQgd3Jp dGluZyBjb25zb2xlIGNoYXJhY3RlcnM6ICVsdVxuIiwKKwkJICAgICAgR2V0TGFzdEVycm9yICgp KTsKKwkgICAgICBmZmx1c2ggKHN0ZG91dCk7CisJICAgIH0KKyNlbHNlCiAJICAvKiBTZXQgdGhl IGF0dHJpYnV0ZSBmb3IgdGhlc2UgY2hhcmFjdGVycy4gICovCiAJICBpZiAoIUZpbGxDb25zb2xl T3V0cHV0QXR0cmlidXRlIChjdXJfc2NyZWVuLCBjaGFyX2F0dHIsCiAJCQkJCSAgIGNvZGluZy0+ cHJvZHVjZWQsIGN1cnNvcl9jb29yZHMsCkBAIC0zNzAsMTIgKzM5MiwxNiBAQCB3MzJjb25fd3Jp dGVfZ2x5cGhzIChzdHJ1Y3QgZnJhbWUgKmYsIHJlZ2lzdGVyIHN0cnVjdCBnbHlwaCAqc3RyaW5n LAogCQkgICAgICBHZXRMYXN0RXJyb3IgKCkpOwogCSAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKIAkg ICAgfQotCisjZW5kaWYKIAkgIGN1cnNvcl9jb29yZHMuWCArPSBjb2RpbmctPnByb2R1Y2VkOwog CSAgdzMyY29uX21vdmVfY3Vyc29yIChmLCBjdXJzb3JfY29vcmRzLlksIGN1cnNvcl9jb29yZHMu WCk7CiAJfQogICAgICAgbGVuIC09IG47CiAgICAgICBzdHJpbmcgKz0gbjsKKworI2lmIGRlZmlu ZWQoVVNFX1czMkNPTlZUQ09MT1JfMTYpIHx8IGRlZmluZWQoVVNFX1czMkNPTlZUQ09MT1JfMjU2 KSB8fCBkZWZpbmVkKFVTRV9XMzJDT05WVENPTE9SXzI0QklUKQorICAgICAgdHVybl9vZmZfZmFj ZSAoZiwgZmFjZV9pZCk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTQ5OCw3ICs1MjQsNyBAQCB0 dHlfZHJhd19yb3dfd2l0aF9tb3VzZV9mYWNlIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5 cGhfcm93ICp3aW5kb3dfcm93LAogCQkgIH0KIAkJICBicmVhazsKIAotCQljYXNlIERSQVdfSU5W RVJTRV9WSURFTzoKKwkJY2FzZSBEUkFXX0lOVkVSU0VfVklERU86IC8vIHNlZSBjb21tZW50IGlu IHR1cm5fb25fZmFjZQogCQljYXNlIERSQVdfQ1VSU09SOgogCQljYXNlIERSQVdfSU1BR0VfUkFJ U0VEOgogCQljYXNlIERSQVdfSU1BR0VfU1VOS0VOOgpAQCAtNTc4LDYgKzYwNCwxMyBAQCB3MzJj b25fc2V0X3Rlcm1pbmFsX21vZGVzIChzdHJ1Y3QgdGVybWluYWwgKnQpCiAgIC8qIEluaXRpYWxp emUgaW5wdXQgbW9kZTogaW50ZXJydXB0X2lucHV0IG9mZiwgbm8gZmxvdyBjb250cm9sLCBhbGxv dwogICAgICA4IGJpdCBjaGFyYWN0ZXIgaW5wdXQsIHN0YW5kYXJkIHF1aXQgY2hhci4gICovCiAg IEZzZXRfaW5wdXRfbW9kZSAoUW5pbCwgUW5pbCwgbWFrZV9maXhudW0gKDIpLCBRbmlsKTsKKwor I2lmIGRlZmluZWQoVVNFX1czMkNPTlZUQ09MT1JfMTYpIHx8IGRlZmluZWQoVVNFX1czMkNPTlZU Q09MT1JfMjU2KSB8fCBkZWZpbmVkKFVTRV9XMzJDT05WVENPTE9SXzI0QklUKQorICBEV09SRCBt b2RlOworICBHZXRDb25zb2xlTW9kZSAoY3VyX3NjcmVlbiwgJm1vZGUpOworICBtb2RlIHw9IEVO QUJMRV9WSVJUVUFMX1RFUk1JTkFMX1BST0NFU1NJTkc7CisgIFNldENvbnNvbGVNb2RlIChjdXJf c2NyZWVuLCBtb2RlKTsKKyNlbmRpZgogfQogCiAvKiBobW1tLi4uIHBlcmhhcHMgdGhlc2UgbGV0 IHVzIGJyYWNrZXQgc2NyZWVuIGNoYW5nZXMgc28gdGhhdCB3ZSBjYW4gZmx1c2gKQEAgLTcyOSw2 ICs3NjIsMTEwIEBAIHczMl9mYWNlX2F0dHJpYnV0ZXMgKHN0cnVjdCBmcmFtZSAqZiwgaW50IGZh Y2VfaWQpCiAgIHJldHVybiBjaGFyX2F0dHI7CiB9CiAKKyNpZiBkZWZpbmVkKFVTRV9XMzJDT05W VENPTE9SXzE2KSB8fCBkZWZpbmVkKFVTRV9XMzJDT05WVENPTE9SXzI1NikgfHwgZGVmaW5lZChV U0VfVzMyQ09OVlRDT0xPUl8yNEJJVCkKK3N0YXRpYyB2b2lkCit0dXJuX29uX2ZhY2UgKHN0cnVj dCBmcmFtZSAqZiwgaW50IGZhY2VfaWQpCit7CisgIHN0cnVjdCBmYWNlICpmYWNlID0gRkFDRV9G Uk9NX0lEIChmLCBmYWNlX2lkKTsKKyAgdW5zaWduZWQgbG9uZyBmZyA9IGZhY2UtPmZvcmVncm91 bmQ7CisgIHVuc2lnbmVkIGxvbmcgYmcgPSBmYWNlLT5iYWNrZ3JvdW5kOworICBzdHJ1Y3QgdHR5 X2Rpc3BsYXlfaW5mbyAqdHR5ID0gRlJBTUVfVFRZIChmKTsKKyAgRFdPUkQgcjsKKworICAvKiBy ZWFsaXplX3R0eV9mYWNlIGluIHhmYWNlcy5jIHN3YXBzIHRoZSB2YWx1ZXMgb2YgZmcgYW5kIGJn IGlmCisgIGZhY2UtPnR0eV9yZXZlcnNlX3AuIEFkZGluZyB0aGUgdGVybWluYWwgc2VxdWVuY2Ug IhtbN20iIGhlcmUKKyAgc3dhcHMgdGhlbSBiYWNrLCBhbmQgbWFrZXMgZm9yIGEgdHJpY2t5IGxp dHRsZSBidWcuIEJld2FyZSEgKi8KKyAgaWYgKGZhY2UtPnR0eV9ib2xkX3ApCisgICAgV3JpdGVD b25zb2xlIChjdXJfc2NyZWVuLCAiG1sxbSIsIDQsICZyLCBOVUxMKTsKKyAgaWYgKGZhY2UtPnR0 eV9pdGFsaWNfcCkKKyAgICBXcml0ZUNvbnNvbGUgKGN1cl9zY3JlZW4sICIbWzNtIiwgNCwgJnIs IE5VTEwpOworICBpZiAoZmFjZS0+dHR5X3N0cmlrZV90aHJvdWdoX3ApCisgICAgV3JpdGVDb25z b2xlIChjdXJfc2NyZWVuLCAiG1s5bSIsIDQsICZyLCBOVUxMKTsKKyAgaWYgKGZhY2UtPnVuZGVy bGluZSAhPSAwKSAvKiBubyBzdXBwb3J0IGZvciBtdWx0aWNvbG9yIGdseXBocyBub3cgKi8KKyAg ICBXcml0ZUNvbnNvbGUgKGN1cl9zY3JlZW4sICIbWzRtIiwgNCwgJnIsIE5VTEwpOworCisgIGlm ICh0dHktPlROX21heF9jb2xvcnMgPiAwKQorICAgIHsKKyAgICAgIGlmICh0dHktPlROX21heF9j b2xvcnMgPT0gMTYgfHwgdHR5LT5UTl9tYXhfY29sb3JzID09IDI1NikKKwl7CisJICBpZiAoZmcg Pj0gMCAmJiBmZyA8IDgpCisJICAgIHsKKwkgICAgICBjaGFyIHBbMTBdOworCSAgICAgIHNucHJp bnRmKHAsIDEwLCAiG1slbHVtIiwgZmcgKyAzMCk7CisJICAgICAgV3JpdGVDb25zb2xlIChjdXJf c2NyZWVuLCBwLCBzdHJsZW4ocCksICZyLCBOVUxMKTsKKwkgICAgfQorCSAgaWYgKGZnID49IDgg JiYgZmcgPCAxNikKKwkgICAgeworCSAgICAgIGNoYXIgcFsxMF07CisJICAgICAgc25wcmludGYo cCwgMTAsICIbWyVsdW0iLCBmZyAtIDggKyA5MCk7CisJICAgICAgV3JpdGVDb25zb2xlIChjdXJf c2NyZWVuLCBwLCBzdHJsZW4ocCksICZyLCBOVUxMKTsKKwkgICAgfQorCSAgaWYgKGZnID49IDE2 ICYmIGZnIDwgMjU2KQorCSAgICB7CisJICAgICAgY2hhciBwWzIwXTsKKwkgICAgICBzbnByaW50 ZihwLCAyMCwgIhtbMzg7NTslbHVtIiwgZmcpOworCSAgICAgIFdyaXRlQ29uc29sZSAoY3VyX3Nj cmVlbiwgcCwgc3RybGVuKHApLCAmciwgTlVMTCk7CisJICAgIH0KKwkgIGlmIChiZyA+PSAwICYm IGJnIDwgOCkKKwkgICAgeworCSAgICAgIGNoYXIgcFsxMF07CisJICAgICAgc25wcmludGYocCwg MTAsICIbWyVsdW0iLCBiZyArIDQwKTsKKwkgICAgICBXcml0ZUNvbnNvbGUgKGN1cl9zY3JlZW4s IHAsIHN0cmxlbihwKSwgJnIsIE5VTEwpOworCSAgICB9CisJICBpZiAoYmcgPj0gOCAmJiBiZyA8 IDE2KQorCSAgICB7CisJICAgICAgY2hhciBwWzEwXTsKKwkgICAgICBzbnByaW50ZihwLCAxMCwg IhtbJWx1bSIsIGJnIC0gOCArIDEwMCk7CisJICAgICAgV3JpdGVDb25zb2xlIChjdXJfc2NyZWVu LCBwLCBzdHJsZW4ocCksICZyLCBOVUxMKTsKKwkgICAgfQorCSAgaWYgKGJnPj0gMTYgJiYgYmcg PCAyNTYpCisJICAgIHsKKwkgICAgICBjaGFyIHBbMjBdOworCSAgICAgIHNucHJpbnRmKHAsIDIw LCAiG1s0ODs1OyVsdW0iLCBiZyk7CisJICAgICAgV3JpdGVDb25zb2xlIChjdXJfc2NyZWVuLCBw LCBzdHJsZW4ocCksICZyLCBOVUxMKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHR0eS0+ VE5fbWF4X2NvbG9ycyA9PSAxNjc3NzIxNikKKworCisJeworCSAgY2hhciBwWzMwXTsKKwkgIHNu cHJpbnRmKHAsMzAsICIbWzM4OzI7JWx1OyVsdTslbHVtIiwgZmcvNjU1MzYsIChmZy8yNTYpJjI1 NSwgZmcmMjU1KTsKKwkgIFdyaXRlQ29uc29sZSAoY3VyX3NjcmVlbiwgcCwgc3RybGVuKHApLCAm ciwgTlVMTCk7CisKKwkgIGNoYXIgcVszMF07CisJICBzbnByaW50ZihxLCAzMCwgIhtbNDg7Mjsl bHU7JWx1OyVsdW0iLCBiZy82NTUzNiwgKGJnLzI1NikmMjU1LCBiZyYyNTUpOworCSAgV3JpdGVD b25zb2xlIChjdXJfc2NyZWVuLCBxLCBzdHJsZW4ocSksICZyLCBOVUxMKTsKKwl9CisgICAgfQor fQorCitzdGF0aWMgdm9pZAordHVybl9vZmZfZmFjZSAoc3RydWN0IGZyYW1lICpmLCBpbnQgZmFj ZV9pZCkKK3sKKyAgc3RydWN0IGZhY2UgKmZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZhY2VfaWQp OworICBzdHJ1Y3QgdHR5X2Rpc3BsYXlfaW5mbyAqdHR5ID0gRlJBTUVfVFRZIChmKTsKKyAgRFdP UkQgcjsKKworICBpZiAoZmFjZS0+dHR5X2JvbGRfcAorICAgICAgfHwgZmFjZS0+dHR5X2l0YWxp Y19wCisgICAgICB8fCBmYWNlLT50dHlfc3RyaWtlX3Rocm91Z2hfcAorICAgICAgfHwgKGZhY2Ut PnVuZGVybGluZSAhPSAwKSkKKyAgICB7CisgICAgICBXcml0ZUNvbnNvbGUgKGN1cl9zY3JlZW4s ICIbW20iLCAzLCAmciwgTlVMTCk7CisgICAgfQorICAvKiBTd2l0Y2ggYmFjayB0byBkZWZhdWx0 IGNvbG9ycy4gICovCisgIGlmICh0dHktPlROX21heF9jb2xvcnMgPiAwCisgICAgICAmJiAoKGZh Y2UtPmZvcmVncm91bmQgIT0gRkFDRV9UVFlfREVGQVVMVF9DT0xPUgorCSAgICYmIGZhY2UtPmZv cmVncm91bmQgIT0gRkFDRV9UVFlfREVGQVVMVF9GR19DT0xPUikKKwkgIHx8IChmYWNlLT5iYWNr Z3JvdW5kICE9IEZBQ0VfVFRZX0RFRkFVTFRfQ09MT1IKKwkgICAgICAmJiBmYWNlLT5iYWNrZ3Jv dW5kICE9IEZBQ0VfVFRZX0RFRkFVTFRfQkdfQ09MT1IpKSkKKyAgICB7CisgICAgICBXcml0ZUNv bnNvbGUgKGN1cl9zY3JlZW4sICIbWzM5OzQ5bSIsIDgsICZyLCBOVUxMKTsKKyAgICB9Cit9Cisj ZW5kaWYKKwogLyogVGhlIElNRSB3aW5kb3cgaXMgbmVlZGVkIHRvIHJlY2VpdmUgdGhlIHNlc3Np b24gbm90aWZpY2F0aW9ucwogICAgcmVxdWlyZWQgdG8gcmVzZXQgdGhlIGxvdyBsZXZlbCBrZXli b2FyZCBob29rIHN0YXRlLiAgKi8KIApAQCAtODM0LDcgKzk3MSw3IEBAIGluaXRpYWxpemVfdzMy X2Rpc3BsYXkgKHN0cnVjdCB0ZXJtaW5hbCAqdGVybSwgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQp CiAJR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8gKGN1cl9zY3JlZW4sICZpbmZvKTsKIAogCS8q IFNocmluayB0aGUgd2luZG93IGZpcnN0LCBzbyB0aGUgYnVmZmVyIGRpbWVuc2lvbnMgY2FuIGJl Ci0gICAgICAgICAgIHJlZHVjZWQgaWYgbmVjZXNzYXJ5LiAgKi8KKwkgICByZWR1Y2VkIGlmIG5l Y2Vzc2FyeS4gICovCiAJbmV3X3dpbl9kaW1zLlRvcCA9IDA7CiAJbmV3X3dpbl9kaW1zLkxlZnQg PSAwOwogCW5ld193aW5fZGltcy5Cb3R0b20gPSBtaW4gKG5ld19zaXplLlksIGluZm8uZHdTaXpl LlkpIC0gMTsKQEAgLTk1Nyw3ICsxMDk0LDcgQEAgdm9pZAogc3ltc19vZl9udHRlcm0gKHZvaWQp CiB7CiAgIERFRlZBUl9CT09MICgidzMyLXVzZS1mdWxsLXNjcmVlbi1idWZmZXIiLAotICAgICAg ICAgICAgICAgdzMyX3VzZV9mdWxsX3NjcmVlbl9idWZmZXIsCisJICAgICAgIHczMl91c2VfZnVs bF9zY3JlZW5fYnVmZmVyLAogCSAgICAgICBkb2M6IC8qIE5vbi1uaWwgbWVhbnMgbWFrZSB0ZXJt aW5hbCBmcmFtZXMgdXNlIHRoZSBmdWxsIHNjcmVlbiBidWZmZXIgZGltZW5zaW9ucy4KIFRoaXMg aXMgZGVzaXJhYmxlIHdoZW4gcnVubmluZyBFbWFjcyBvdmVyIHRlbG5ldC4KIEEgdmFsdWUgb2Yg bmlsIG1lYW5zIHVzZSB0aGUgY3VycmVudCBjb25zb2xlIHdpbmRvdyBkaW1lbnNpb25zOyB0aGlz CkBAIC05NjUsNiArMTEwMiwxNSBAQCBtYXkgYmUgcHJlZmVyYWJsZSB3aGVuIHdvcmtpbmcgZGly ZWN0bHkgYXQgdGhlIGNvbnNvbGUgd2l0aCBhIGxhcmdlCiBzY3JvbGwtYmFjayBidWZmZXIuICAq Lyk7CiAgIHczMl91c2VfZnVsbF9zY3JlZW5fYnVmZmVyID0gMDsKIAorICBERUZWQVJfQk9PTCAo InczMmNvbi11c2UtdnQtY29sb3IiLAorCQl3MzJjb25fdXNlX3Z0X2NvbG9yLAorCQlkb2M6IC8q IE5vbi1uaWwgbWVhbnMgdzMyY29uc29sZSB1c2VzIHRlcm1pbmFsIHNlcXVlbmNlcyByYXRoZXIg dGhhbiB3MzIgY29uc29sZSBBUEkgZm9yIGNvbG9yLiAqLyk7CisjaWYgZGVmaW5lZChVU0VfVzMy Q09OVlRDT0xPUl8xNikgfHwgZGVmaW5lZChVU0VfVzMyQ09OVlRDT0xPUl8yNTYpIHx8IGRlZmlu ZWQoVVNFX1czMkNPTlZUQ09MT1JfMjRCSVQpCisgIHczMmNvbl91c2VfdnRfY29sb3IgPSAxOwor I2Vsc2UKKyAgdzMyY29uX3VzZV92dF9jb2xvciA9IDA7CisjZW5kaWYKKwogICBkZWZzdWJyICgm U3NldF9zY3JlZW5fY29sb3IpOwogICBkZWZzdWJyICgmU2dldF9zY3JlZW5fY29sb3IpOwogICBk ZWZzdWJyICgmU3NldF9jdXJzb3Jfc2l6ZSk7Ci0tIAoyLjQ5LjAKCg== --b1=_56Ex8KSqHpskbdU57OtDQXkNvCk2Cjxq6qorpOWB4I-- From debbugs-submit-bounces@debbugs.gnu.org Sun Aug 24 03:20:20 2025 Received: (at control) by debbugs.gnu.org; 24 Aug 2025 07:20:20 +0000 Received: from localhost ([127.0.0.1]:43221 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uq51X-0006NV-PK for submit@debbugs.gnu.org; Sun, 24 Aug 2025 03:20:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57656) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uq51U-0006NC-P8; Sun, 24 Aug 2025 03:20:17 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uq51P-0004Tk-0V; Sun, 24 Aug 2025 03:20:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=luldEC5fLhQGPRGWCX9HrEgt9rAjcQqh9LfCO8Dlbh4=; b=fPFEaH45fpv8 2XCFzwrvDXzxkPQ1Qds5HCUWmfgN13fUWViLJ6xWGtKJcl4Cx4z72dub+LL9pQKnM8dZNI9l235ZG Gw+oTAthNi9+r4zqX9ui0YqYA+XZf3lpk5N7Z0I2gC6y53l7h/E7KHYfPZ3av7zCaHq9TqqHrY2m0 RHiK81gSof8Ob8dHHzTcXQQbBOGUd3eDmBjzrcEmcjysrE3HR8AzYhpShZTiVoTsstfhtkvSuUqCK VtM5czD1k36qZSF9ks8VTbYuPB7FnPWzCNqsmSTZTTOpn/7hPUynTZyXxCboys5QsdE605egESRcf 0Ec6E+UPgNZEoYluRD/fSw==; Date: Sun, 24 Aug 2025 10:20:08 +0300 Message-Id: <865xed89uf.fsf@gnu.org> From: Eli Zaretskii To: Ewan In-Reply-To: (bug-gnu-emacs@gnu.org) Subject: Re: bug#79298: patch: full color in windows terminal References: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: control Cc: 79298@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) merge 79298 79297 thanks > Date: Sun, 24 Aug 2025 02:27:35 +0000 > From: Ewan via "Bug reports for GNU Emacs, > the Swiss army knife of text editors" > > * configure.ac: Compiler flag for setting w32 console color space. > * lisp/term/w32console.el: Define and apply different color spaces. > * src/term.c: Set tty max colors based on compiler flag. > * src/w32console.c: Write face colors to console via VT sequences. Thanks. Such a large contribution will need you to sign a copyright-assignment agreement with the FSF. If you agree to do it, I will send you the form to fill and the instructions to go with it. > --- a/configure.ac > +++ b/configure.ac > @@ -299,6 +299,21 @@ AC_ARG_WITH([all], > [with_features=$withval], > [with_features=yes]) > > +AC_ARG_WITH([w32-vt-color], > +[AS_HELP_STRING([--with-w32-vt-color=ARG], > +[use VT sequences for w32 console color (ARG one of: no, 16, 156, 24bit)])], > +[ case "${withval}" in > + no ) val=no ;; > + 16 ) val=16 ;; > + 256 ) val=256 ;; > + 24bit ) val=24bit ;; > + * ) > + AC_MSG_ERROR(['--with-vt-color=$withval' is invalid; > + the value should be 'no', '16', '256', or '24bit']) ;; > + esac > + with_w32_vt_color=$val > +]) Why do we need this configure-time switch? why not compile this feature into Emacs unconditionally? > +(defun w32con-define-256-colors () > + "Defines 256 color space" The first line of a doc string should be a single complete sentence, and must end in a period (here and elsewhere in the patch). > + ;; Define the color space > + (tty-color-clear) > + (let ((ncolors (display-color-cells))) > + (cond ((= ncolors 16777216) (w32con-define-24bit-colors)) > + ((= ncolors 265 (w32con-define-256-colors))) > + (t (w32con-define-base-colors)))) > (clear-face-cache) > ;; Figure out what are the colors of the console window, and set up > ;; the background-mode correspondingly. > diff --git a/src/term.c b/src/term.c > index a1e3f6312c6..e762024bdd5 100644 > --- a/src/term.c > +++ b/src/term.c > @@ -4686,7 +4686,17 @@ use the Bourne shell command 'TERM=...; export TERM' (C-shell:\n\ > don't think we're losing anything by turning it off. */ > tty->line_ins_del_ok = 0; > > - tty->TN_max_colors = 16; /* Must be non-zero for tty-display-color-p. */ > + /* Support full range of colors in new windows terminal app */ > + #if defined(USE_W32CONVTCOLOR_16) > + tty->TN_max_colors = 16; > + #elif defined(USE_W32CONVTCOLOR_256) > + tty->TN_max_colors = 256; > + #elif defined(USE_W32CONVTCOLOR_24BIT) > + tty->TN_max_colors = 16777216; > + #else > + /* Must be non-zero for tty-display-color-p. */ > + tty->TN_max_colors = 16; > + #endif I think it's sub-optimal to have this conditioned on the build-time conditions. I think users should be able to change the number of supported colors when starting Emacs (using the --color command-line option) and/or from within a running Emacs session by changing the value of a variable. Could you please rework the patch to allow that? > +#if defined(USE_W32CONVTCOLOR_16) || defined(USE_W32CONVTCOLOR_256) || defined(USE_W32CONVTCOLOR_24BIT) > + if (!WriteConsole (cur_screen, conversion_buffer, > + coding->produced, &r, NULL)) > + { > + printf ("Failed writing console characters: %lu\n", > + GetLastError ()); > + fflush (stdout); > + } We cannot use such printf's in a production session. I guess this is debugging code that should be removed? > +#if defined(USE_W32CONVTCOLOR_16) || defined(USE_W32CONVTCOLOR_256) || defined(USE_W32CONVTCOLOR_24BIT) > + DWORD mode; > + GetConsoleMode (cur_screen, &mode); > + mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; > + SetConsoleMode (cur_screen, mode); > +#endif AFAIK, the ENABLE_VIRTUAL_TERMINAL_PROCESSING is not supported on Windows 9X (which we still strive to support). So either we should make sure it is ignored on those old systems, or we should disable these enhanced color modes on those systems. > + snprintf(p, 10, "[%lum", fg + 30); Our style is to leave 1 space between the function's name and the following opening parenthesis. > + WriteConsole (cur_screen, p, strlen(p), &r, NULL); > + } > + if (fg >= 8 && fg < 16) > + { > + char p[10]; > + snprintf(p, 10, "[%lum", fg - 8 + 90); > + WriteConsole (cur_screen, p, strlen(p), &r, NULL); > + } > + if (fg >= 16 && fg < 256) > + { > + char p[20]; > + snprintf(p, 20, "[38;5;%lum", fg); > + WriteConsole (cur_screen, p, strlen(p), &r, NULL); > + } > + if (bg >= 0 && bg < 8) > + { > + char p[10]; > + snprintf(p, 10, "[%lum", bg + 40); > + WriteConsole (cur_screen, p, strlen(p), &r, NULL); > + } > + if (bg >= 8 && bg < 16) > + { > + char p[10]; > + snprintf(p, 10, "[%lum", bg - 8 + 100); > + WriteConsole (cur_screen, p, strlen(p), &r, NULL); > + } > + if (bg>= 16 && bg < 256) > + { > + char p[20]; > + snprintf(p, 20, "[48;5;%lum", bg); > + WriteConsole (cur_screen, p, strlen(p), &r, NULL); > + } > + } > + else if (tty->TN_max_colors == 16777216) > + > + > + { > + char p[30]; > + snprintf(p,30, "[38;2;%lu;%lu;%lum", fg/65536, (fg/256)&255, fg&255); > + WriteConsole (cur_screen, p, strlen(p), &r, NULL); > + > + char q[30]; > + snprintf(q, 30, "[48;2;%lu;%lu;%lum", bg/65536, (bg/256)&255, bg&255); > + WriteConsole (cur_screen, q, strlen(q), &r, NULL); > + } > + } Can we make this code more compact, like by using fewer snprintf calls (since they are all so much alike), and just a single WriteConsole call for each of foreground and background colors? Finally, these changes will need a NEWS entry and suitable additions/changes to the user manual. Thanks again for working on this.