itdevdraw: accept 5- and 6-byte Unicode hex values - plan9port - [fork] Plan 9 from user space Err mx1.adamsgaard.dk 70 hgit clone git://src.adamsgaard.dk/plan9port URL:git://src.adamsgaard.dk/plan9port mx1.adamsgaard.dk 70 1Log /src/plan9port/log.gph mx1.adamsgaard.dk 70 1Files /src/plan9port/files.gph mx1.adamsgaard.dk 70 1Refs /src/plan9port/refs.gph mx1.adamsgaard.dk 70 1README /src/plan9port/file/README.md.gph mx1.adamsgaard.dk 70 1LICENSE /src/plan9port/file/LICENSE.gph mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1commit 3850e6e177677885074c8896ef24534894726ad5 /src/plan9port/commit/3850e6e177677885074c8896ef24534894726ad5.gph mx1.adamsgaard.dk 70 1parent 2c70acc3ab751ab1ccb1999f1d22310ad8c35b27 /src/plan9port/commit/2c70acc3ab751ab1ccb1999f1d22310ad8c35b27.gph mx1.adamsgaard.dk 70 hAuthor: Russ Cox URL:mailto:rsc@swtch.com mx1.adamsgaard.dk 70 iDate: Fri, 29 May 2020 21:19:32 -0400 Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 idevdraw: accept 5- and 6-byte Unicode hex values Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iAlt X 1234 for U+1234 Err mx1.adamsgaard.dk 70 iAlt X X 12345 for U+12345 Err mx1.adamsgaard.dk 70 iAlt X X X 103456 for U+103456. Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iDiffstat: Err mx1.adamsgaard.dk 70 i M man/man7/keyboard.7 | 21 ++++++++++++++------- Err mx1.adamsgaard.dk 70 i M src/cmd/devdraw/latin1.c | 39 ++++++++++++++++++++++++------- Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i2 files changed, 45 insertions(+), 15 deletions(-) Err mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1diff --git a/man/man7/keyboard.7 b/man/man7/keyboard.7 /src/plan9port/file/man/man7/keyboard.7.gph mx1.adamsgaard.dk 70 it@@ -58,7 +58,7 @@ The up arrow scrolls backward. Err mx1.adamsgaard.dk 70 i .PP Err mx1.adamsgaard.dk 70 i Characters in Plan 9 are runes (see Err mx1.adamsgaard.dk 70 i .IR utf (7)). Err mx1.adamsgaard.dk 70 i-Any 16-bit rune can be typed using a compose key followed by several Err mx1.adamsgaard.dk 70 i+Any rune can be typed using a compose key followed by several Err mx1.adamsgaard.dk 70 i other keys. Err mx1.adamsgaard.dk 70 i The compose key is also generally near the lower right of the main key area: Err mx1.adamsgaard.dk 70 i the Err mx1.adamsgaard.dk 70 it@@ -72,14 +72,21 @@ key on the SLC, the Err mx1.adamsgaard.dk 70 i key on the Magnum, and either Err mx1.adamsgaard.dk 70 i .B Alt Err mx1.adamsgaard.dk 70 i key on the PC. Err mx1.adamsgaard.dk 70 i-After typing the compose key, type a capital Err mx1.adamsgaard.dk 70 i-.L X Err mx1.adamsgaard.dk 70 i-and exactly four hexadecimal characters (digits and Err mx1.adamsgaard.dk 70 i+To type a single rune with the value specified by Err mx1.adamsgaard.dk 70 i+a given four-digit hexadecimal number, Err mx1.adamsgaard.dk 70 i+type the compose key, Err mx1.adamsgaard.dk 70 i+then a capital Err mx1.adamsgaard.dk 70 i+.LR X , Err mx1.adamsgaard.dk 70 i+and then the four hexadecimal digits (decimal digits and Err mx1.adamsgaard.dk 70 i .L a Err mx1.adamsgaard.dk 70 i to Err mx1.adamsgaard.dk 70 i-.LR f ) Err mx1.adamsgaard.dk 70 i-to type a single rune with the value represented by Err mx1.adamsgaard.dk 70 i-the typed number. Err mx1.adamsgaard.dk 70 i+.LR f ). Err mx1.adamsgaard.dk 70 i+For a longer rune, type Err mx1.adamsgaard.dk 70 i+.L X Err mx1.adamsgaard.dk 70 i+twice followed by five digits, Err mx1.adamsgaard.dk 70 i+or type Err mx1.adamsgaard.dk 70 i+.L X Err mx1.adamsgaard.dk 70 i+three times followed by six digits. Err mx1.adamsgaard.dk 70 i There are shorthands for many characters, comprising Err mx1.adamsgaard.dk 70 i the compose key followed by a two- or three-character sequence. Err mx1.adamsgaard.dk 70 i The full list is too long to repeat here, but is contained in the file Err mx1.adamsgaard.dk 70 1diff --git a/src/cmd/devdraw/latin1.c b/src/cmd/devdraw/latin1.c /src/plan9port/file/src/cmd/devdraw/latin1.c.gph mx1.adamsgaard.dk 70 it@@ -17,16 +17,15 @@ static struct cvlist Err mx1.adamsgaard.dk 70 i }; Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i /* Err mx1.adamsgaard.dk 70 i- * Given 5 characters k[0]..k[4], find the rune or return -1 for failure. Err mx1.adamsgaard.dk 70 i+ * Given 5 characters k[0]..k[n], find the rune or return -1 for failure. Err mx1.adamsgaard.dk 70 i */ Err mx1.adamsgaard.dk 70 i static long Err mx1.adamsgaard.dk 70 i-unicode(Rune *k) Err mx1.adamsgaard.dk 70 i+unicode(Rune *k, int n) Err mx1.adamsgaard.dk 70 i { Err mx1.adamsgaard.dk 70 i long i, c; Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i- k++; /* skip 'X' */ Err mx1.adamsgaard.dk 70 i c = 0; Err mx1.adamsgaard.dk 70 i- for(i=0; i<4; i++,k++){ Err mx1.adamsgaard.dk 70 i+ for(i=0; i Runemax) Err mx1.adamsgaard.dk 70 i+ return -1; Err mx1.adamsgaard.dk 70 i } Err mx1.adamsgaard.dk 70 i return c; Err mx1.adamsgaard.dk 70 i } Err mx1.adamsgaard.dk 70 it@@ -53,10 +54,32 @@ latin1(Rune *k, int n) Err mx1.adamsgaard.dk 70 i char* p; Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i if(k[0] == 'X'){ Err mx1.adamsgaard.dk 70 i- if(n>=5) Err mx1.adamsgaard.dk 70 i- return unicode(k); Err mx1.adamsgaard.dk 70 i- else Err mx1.adamsgaard.dk 70 i- return -5; Err mx1.adamsgaard.dk 70 i+ if(n < 2) Err mx1.adamsgaard.dk 70 i+ return -2; Err mx1.adamsgaard.dk 70 i+ if(k[1] == 'X') { Err mx1.adamsgaard.dk 70 i+ if(n < 3) Err mx1.adamsgaard.dk 70 i+ return -3; Err mx1.adamsgaard.dk 70 i+ if(k[2] == 'X') { Err mx1.adamsgaard.dk 70 i+ if(n < 9) { Err mx1.adamsgaard.dk 70 i+ if(unicode(k+3, n-3) < 0) Err mx1.adamsgaard.dk 70 i+ return -1; Err mx1.adamsgaard.dk 70 i+ return -(n+1); Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ return unicode(k+3, 6); Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ if(n < 7) { Err mx1.adamsgaard.dk 70 i+ if(unicode(k+2, n-2) < 0) Err mx1.adamsgaard.dk 70 i+ return -1; Err mx1.adamsgaard.dk 70 i+ return -(n+1); Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ return unicode(k+2, 5); Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ if(n < 5) { Err mx1.adamsgaard.dk 70 i+ if(unicode(k+1, n-1) < 0) Err mx1.adamsgaard.dk 70 i+ return -1; Err mx1.adamsgaard.dk 70 i+ return -(n+1); Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ return unicode(k+1, 4); Err mx1.adamsgaard.dk 70 i } Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i for(l=latintab; l->ld!=0; l++) Err mx1.adamsgaard.dk 70 .