aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsaac Andrade <andradei@proton.me>2024-08-27 18:51:58 -0600
committerIsaac Andrade <andradei@proton.me>2024-08-27 18:51:58 -0600
commit45322023e30a372e4a22fe51a2841b07d68ebfc6 (patch)
tree1de0b1961a147430541d3a7c408e0055d1f61b99
parent7d94810d016dc12327cd390aeb618a7753418295 (diff)
parent9684ade23e80540da9a44ee33e7a3b4c14f85ea0 (diff)
Merge branch 'master' of github.com:odin-lang/Odin into posix-linux
-rw-r--r--base/intrinsics/intrinsics.odin2
-rw-r--r--base/runtime/default_allocators_nil.odin4
-rw-r--r--base/runtime/thread_management.odin34
-rw-r--r--core/encoding/uuid/writing.odin35
-rw-r--r--core/hash/xxhash/xxhash_64.odin18
-rw-r--r--core/image/common.odin2
-rw-r--r--core/math/big/common.odin2
-rw-r--r--core/mem/alloc.odin4
-rw-r--r--core/net/dns_windows.odin32
-rw-r--r--core/os/os2/allocators.odin5
-rw-r--r--core/os/os2/file_util.odin3
-rw-r--r--core/os/os2/process.odin27
-rw-r--r--core/os/os2/process_linux.odin16
-rw-r--r--core/os/os2/process_posix.odin19
-rw-r--r--core/os/os2/process_windows.odin222
-rw-r--r--core/os/os_linux.odin6
-rw-r--r--core/reflect/iterator.odin7
-rw-r--r--core/sys/darwin/CoreFoundation/CFString.odin297
-rw-r--r--core/sys/darwin/xnu_system_call_helpers.odin6
-rw-r--r--core/sys/darwin/xnu_system_call_wrappers.odin58
-rw-r--r--core/sys/freebsd/types.odin12
-rw-r--r--core/sys/windows/dwmapi.odin4
-rw-r--r--core/sys/windows/kernel32.odin16
-rw-r--r--core/sys/windows/types.odin52
-rw-r--r--core/text/table/table.odin2
-rw-r--r--core/thread/thread_pool.odin8
-rw-r--r--core/thread/thread_unix.odin6
-rw-r--r--core/thread/thread_windows.odin6
-rw-r--r--src/check_builtin.cpp61
-rw-r--r--src/check_expr.cpp41
-rw-r--r--src/check_stmt.cpp11
-rw-r--r--src/checker.cpp38
-rw-r--r--src/checker_builtin_procs.hpp7
-rw-r--r--src/llvm_backend_debug.cpp16
-rw-r--r--src/llvm_backend_utility.cpp2
-rw-r--r--src/parser.cpp48
-rw-r--r--src/parser.hpp6
-rw-r--r--tests/core/c/libc/test_core_libc_complex_pow.odin24
-rw-r--r--tests/core/container/test_core_rbtree.odin2
-rw-r--r--tests/core/encoding/json/test_core_json.odin2
-rw-r--r--tests/core/encoding/xml/test_core_xml.odin10
-rw-r--r--tests/core/runtime/test_core_runtime.odin3
-rw-r--r--tests/core/unicode/test_core_unicode.odin3
-rw-r--r--vendor/commonmark/cmark.odin2
-rw-r--r--vendor/directx/d3d12/d3d12.odin8
-rw-r--r--vendor/directx/dxc/dxcapi.odin4
-rw-r--r--vendor/lua/5.4/lua.odin2
-rw-r--r--vendor/miniaudio/decoding.odin6
-rw-r--r--vendor/miniaudio/device_io_types.odin6
-rw-r--r--vendor/raylib/raylib.odin31
-rw-r--r--vendor/sdl2/sdl2.odin6
-rw-r--r--vendor/sdl2/sdl_events.odin8
-rw-r--r--vendor/sdl2/sdl_gamecontroller.odin46
-rw-r--r--vendor/sdl2/sdl_touch.odin8
-rw-r--r--vendor/stb/image/stb_image_resize.odin2
-rw-r--r--vendor/wgpu/README.md4
-rw-r--r--vendor/wgpu/examples/glfw/main.odin4
-rw-r--r--vendor/wgpu/examples/sdl2/main.odin4
-rw-r--r--vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.dllbin8013824 -> 9427968 bytes
-rw-r--r--vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.dll.libbin69402 -> 58114 bytes
-rw-r--r--vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.libbin41795760 -> 53420432 bytes
-rw-r--r--vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.pdbbin3731456 -> 4108288 bytes
-rw-r--r--vendor/wgpu/sdl2glue/glue_linux.odin2
-rw-r--r--vendor/wgpu/wgpu.js187
-rw-r--r--vendor/wgpu/wgpu.odin164
-rw-r--r--vendor/x11/xlib/xlib_keysym.odin3350
-rw-r--r--vendor/x11/xlib/xlib_types.odin622
67 files changed, 2993 insertions, 2652 deletions
diff --git a/base/intrinsics/intrinsics.odin b/base/intrinsics/intrinsics.odin
index b7e8c1189..3cf99bbd2 100644
--- a/base/intrinsics/intrinsics.odin
+++ b/base/intrinsics/intrinsics.odin
@@ -219,6 +219,8 @@ type_map_cell_info :: proc($T: typeid) -> ^runtime.Map_Cell_Info ---
type_convert_variants_to_pointers :: proc($T: typeid) -> typeid where type_is_union(T) ---
type_merge :: proc($U, $V: typeid) -> typeid where type_is_union(U), type_is_union(V) ---
+type_has_shared_fields :: proc($U, $V: typeid) -> bool typeid where type_is_struct(U), type_is_struct(V) ---
+
constant_utf16_cstring :: proc($literal: string) -> [^]u16 ---
constant_log2 :: proc($v: $T) -> T where type_is_integer(T) ---
diff --git a/base/runtime/default_allocators_nil.odin b/base/runtime/default_allocators_nil.odin
index ce8519c10..e7a1b1a74 100644
--- a/base/runtime/default_allocators_nil.odin
+++ b/base/runtime/default_allocators_nil.odin
@@ -1,8 +1,8 @@
package runtime
nil_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
- size, alignment: int,
- old_memory: rawptr, old_size: int, loc := #caller_location) -> ([]byte, Allocator_Error) {
+ size, alignment: int,
+ old_memory: rawptr, old_size: int, loc := #caller_location) -> ([]byte, Allocator_Error) {
switch mode {
case .Alloc, .Alloc_Non_Zeroed:
return nil, .Out_Of_Memory
diff --git a/base/runtime/thread_management.odin b/base/runtime/thread_management.odin
new file mode 100644
index 000000000..cabd4691c
--- /dev/null
+++ b/base/runtime/thread_management.odin
@@ -0,0 +1,34 @@
+package runtime
+
+Thread_Local_Cleaner :: #type proc "odin" ()
+
+@(private="file")
+thread_local_cleaners: [8]Thread_Local_Cleaner
+
+// Add a procedure that will be run at the end of a thread for the purpose of
+// deallocating state marked as `thread_local`.
+//
+// Intended to be called in an `init` procedure of a package with
+// dynamically-allocated memory that is stored in `thread_local` variables.
+add_thread_local_cleaner :: proc "contextless" (p: Thread_Local_Cleaner) {
+ for &v in thread_local_cleaners {
+ if v == nil {
+ v = p
+ return
+ }
+ }
+ panic_contextless("There are no more thread-local cleaner slots available.")
+}
+
+// Run all of the thread-local cleaner procedures.
+//
+// Intended to be called by the internals of a threading API at the end of a
+// thread's lifetime.
+run_thread_local_cleaners :: proc "odin" () {
+ for p in thread_local_cleaners {
+ if p == nil {
+ break
+ }
+ p()
+ }
+}
diff --git a/core/encoding/uuid/writing.odin b/core/encoding/uuid/writing.odin
index 499cba72b..7acaa3cd7 100644
--- a/core/encoding/uuid/writing.odin
+++ b/core/encoding/uuid/writing.odin
@@ -11,7 +11,7 @@ Write a UUID in the 8-4-4-4-12 format.
This procedure performs error checking with every byte written.
If you can guarantee beforehand that your stream has enough space to hold the
-UUID (32 bytes), then it is better to use `unsafe_write` instead as that will
+UUID (36 bytes), then it is better to use `unsafe_write` instead as that will
be faster.
Inputs:
@@ -22,7 +22,7 @@ Returns:
- error: An `io` error, if one occurred, otherwise `nil`.
*/
write :: proc(w: io.Writer, id: Identifier) -> (error: io.Error) #no_bounds_check {
- write_octet :: proc (w: io.Writer, octet: u8) -> io.Error #no_bounds_check {
+ write_octet :: proc(w: io.Writer, octet: u8) -> io.Error #no_bounds_check {
high_nibble := octet >> 4
low_nibble := octet & 0xF
@@ -31,15 +31,15 @@ write :: proc(w: io.Writer, id: Identifier) -> (error: io.Error) #no_bounds_chec
return nil
}
- for index in 0 ..< 4 { write_octet(w, id[index]) or_return }
+ for index in 0 ..< 4 {write_octet(w, id[index]) or_return}
io.write_byte(w, '-') or_return
- for index in 4 ..< 6 { write_octet(w, id[index]) or_return }
+ for index in 4 ..< 6 {write_octet(w, id[index]) or_return}
io.write_byte(w, '-') or_return
- for index in 6 ..< 8 { write_octet(w, id[index]) or_return }
+ for index in 6 ..< 8 {write_octet(w, id[index]) or_return}
io.write_byte(w, '-') or_return
- for index in 8 ..< 10 { write_octet(w, id[index]) or_return }
+ for index in 8 ..< 10 {write_octet(w, id[index]) or_return}
io.write_byte(w, '-') or_return
- for index in 10 ..< 16 { write_octet(w, id[index]) or_return }
+ for index in 10 ..< 16 {write_octet(w, id[index]) or_return}
return nil
}
@@ -54,7 +54,7 @@ Inputs:
- id: The identifier to convert.
*/
unsafe_write :: proc(w: io.Writer, id: Identifier) #no_bounds_check {
- write_octet :: proc (w: io.Writer, octet: u8) #no_bounds_check {
+ write_octet :: proc(w: io.Writer, octet: u8) #no_bounds_check {
high_nibble := octet >> 4
low_nibble := octet & 0xF
@@ -62,15 +62,15 @@ unsafe_write :: proc(w: io.Writer, id: Identifier) #no_bounds_check {
io.write_byte(w, strconv.digits[low_nibble])
}
- for index in 0 ..< 4 { write_octet(w, id[index]) }
+ for index in 0 ..< 4 {write_octet(w, id[index])}
io.write_byte(w, '-')
- for index in 4 ..< 6 { write_octet(w, id[index]) }
+ for index in 4 ..< 6 {write_octet(w, id[index])}
io.write_byte(w, '-')
- for index in 6 ..< 8 { write_octet(w, id[index]) }
+ for index in 6 ..< 8 {write_octet(w, id[index])}
io.write_byte(w, '-')
- for index in 8 ..< 10 { write_octet(w, id[index]) }
+ for index in 8 ..< 10 {write_octet(w, id[index])}
io.write_byte(w, '-')
- for index in 10 ..< 16 { write_octet(w, id[index]) }
+ for index in 10 ..< 16 {write_octet(w, id[index])}
}
/*
@@ -106,7 +106,7 @@ Convert a UUID to a string in the 8-4-4-4-12 format.
Inputs:
- id: The identifier to convert.
-- buffer: A byte buffer to store the result. Must be at least 32 bytes large.
+- buffer: A byte buffer to store the result. Must be at least 36 bytes large.
- loc: The caller location for debugging purposes (default: #caller_location)
Returns:
@@ -119,7 +119,11 @@ to_string_buffer :: proc(
) -> (
str: string,
) {
- assert(len(buffer) >= EXPECTED_LENGTH, "The buffer provided is not at least 32 bytes large.", loc)
+ assert(
+ len(buffer) >= EXPECTED_LENGTH,
+ "The buffer provided is not at least 36 bytes large.",
+ loc,
+ )
builder := strings.builder_from_bytes(buffer)
unsafe_write(strings.to_writer(&builder), id)
return strings.to_string(builder)
@@ -129,3 +133,4 @@ to_string :: proc {
to_string_allocated,
to_string_buffer,
}
+
diff --git a/core/hash/xxhash/xxhash_64.odin b/core/hash/xxhash/xxhash_64.odin
index 3b24f20a1..c2976fb3b 100644
--- a/core/hash/xxhash/xxhash_64.odin
+++ b/core/hash/xxhash/xxhash_64.odin
@@ -19,15 +19,15 @@ xxh_u64 :: u64
XXH64_DEFAULT_SEED :: XXH64_hash(0)
XXH64_state :: struct {
- total_len: XXH64_hash, /*!< Total length hashed. This is always 64-bit. */
- v1: XXH64_hash, /*!< First accumulator lane */
- v2: XXH64_hash, /*!< Second accumulator lane */
- v3: XXH64_hash, /*!< Third accumulator lane */
- v4: XXH64_hash, /*!< Fourth accumulator lane */
- mem64: [4]XXH64_hash, /*!< Internal buffer for partial reads. Treated as unsigned char[32]. */
- memsize: XXH32_hash, /*!< Amount of data in @ref mem64 */
- reserved32: XXH32_hash, /*!< Reserved field, needed for padding anyways*/
- reserved64: XXH64_hash, /*!< Reserved field. Do not read or write to it, it may be removed. */
+ total_len: XXH64_hash, /*!< Total length hashed. This is always 64-bit. */
+ v1: XXH64_hash, /*!< First accumulator lane */
+ v2: XXH64_hash, /*!< Second accumulator lane */
+ v3: XXH64_hash, /*!< Third accumulator lane */
+ v4: XXH64_hash, /*!< Fourth accumulator lane */
+ mem64: [4]XXH64_hash, /*!< Internal buffer for partial reads. Treated as unsigned char[32]. */
+ memsize: XXH32_hash, /*!< Amount of data in @ref mem64 */
+ reserved32: XXH32_hash, /*!< Reserved field, needed for padding anyways*/
+ reserved64: XXH64_hash, /*!< Reserved field. Do not read or write to it, it may be removed. */
}
XXH64_canonical :: struct {
diff --git a/core/image/common.odin b/core/image/common.odin
index 62deb60a9..690ebc045 100644
--- a/core/image/common.odin
+++ b/core/image/common.odin
@@ -1393,6 +1393,7 @@ expand_grayscale :: proc(img: ^Image, allocator := context.allocator) -> (ok: bo
for p in inp {
out[0].rgb = p.r // Gray component.
out[0].a = p.g // Alpha component.
+ out = out[1:]
}
case:
@@ -1417,6 +1418,7 @@ expand_grayscale :: proc(img: ^Image, allocator := context.allocator) -> (ok: bo
for p in inp {
out[0].rgb = p.r // Gray component.
out[0].a = p.g // Alpha component.
+ out = out[1:]
}
case:
diff --git a/core/math/big/common.odin b/core/math/big/common.odin
index fabf39520..5428b00ee 100644
--- a/core/math/big/common.odin
+++ b/core/math/big/common.odin
@@ -195,7 +195,7 @@ Error_String :: #sparse[Error]string{
}
Primality_Flag :: enum u8 {
- Blum_Blum_Shub = 0, // Make prime congruent to 3 mod 4
+ Blum_Blum_Shub = 0, // Make prime congruent to 3 mod 4
Safe = 1, // Make sure (p-1)/2 is prime as well (implies .Blum_Blum_Shub)
Second_MSB_On = 3, // Make the 2nd highest bit one
}
diff --git a/core/mem/alloc.odin b/core/mem/alloc.odin
index acd77241f..e51d971e1 100644
--- a/core/mem/alloc.odin
+++ b/core/mem/alloc.odin
@@ -178,11 +178,11 @@ make_dynamic_array :: proc($T: typeid/[dynamic]$E, allocator := context.allocato
}
@(require_results)
make_dynamic_array_len :: proc($T: typeid/[dynamic]$E, #any_int len: int, allocator := context.allocator, loc := #caller_location) -> (T, Allocator_Error) {
- return runtime.make_dynamic_array(T, len, allocator, loc)
+ return runtime.make_dynamic_array_len_cap(T, len, len, allocator, loc)
}
@(require_results)
make_dynamic_array_len_cap :: proc($T: typeid/[dynamic]$E, #any_int len: int, #any_int cap: int, allocator := context.allocator, loc := #caller_location) -> (array: T, err: Allocator_Error) {
- return runtime.make_dynamic_array(T, len, cap, allocator, loc)
+ return runtime.make_dynamic_array_len_cap(T, len, cap, allocator, loc)
}
@(require_results)
make_map :: proc($T: typeid/map[$K]$E, #any_int cap: int = 1<<runtime.MAP_MIN_LOG2_CAPACITY, allocator := context.allocator, loc := #caller_location) -> (m: T, err: Allocator_Error) {
diff --git a/core/net/dns_windows.odin b/core/net/dns_windows.odin
index b7af050b1..1b7fe7196 100644
--- a/core/net/dns_windows.odin
+++ b/core/net/dns_windows.odin
@@ -128,33 +128,37 @@ _get_dns_records_os :: proc(hostname: string, type: DNS_Record_Type, allocator :
append(&recs, record)
case .SRV:
- target := strings.clone(string(r.Data.SRV.pNameTarget)) // The target hostname/address that the service can be found on
- priority := int(r.Data.SRV.wPriority)
- weight := int(r.Data.SRV.wWeight)
- port := int(r.Data.SRV.wPort)
-
// NOTE(tetra): Srv record name should be of the form '_servicename._protocol.hostname'
// The record name is the name of the record.
// Not to be confused with the _target_ of the record, which is--in combination with the port--what we're looking up
// by making this request in the first place.
- // NOTE(Jeroen): Service Name and Protocol Name can probably just be string slices into the record name.
- // It's already cloned, after all. I wouldn't put them on the temp allocator like this.
+ service_name, protocol_name: string
+
+ s := base_record.record_name
+ i := strings.index_byte(s, '.')
+ if i > -1 {
+ service_name = s[:i]
+ s = s[len(service_name) + 1:]
+ } else {
+ continue
+ }
- parts := strings.split_n(base_record.record_name, ".", 3, context.temp_allocator)
- if len(parts) != 3 {
+ i = strings.index_byte(s, '.')
+ if i > -1 {
+ protocol_name = s[:i]
+ } else {
continue
}
- service_name, protocol_name := parts[0], parts[1]
append(&recs, DNS_Record_SRV {
base = base_record,
- target = target,
- port = port,
+ target = strings.clone(string(r.Data.SRV.pNameTarget)), // The target hostname/address that the service can be found on
+ port = int(r.Data.SRV.wPort),
service_name = service_name,
protocol_name = protocol_name,
- priority = priority,
- weight = weight,
+ priority = int(r.Data.SRV.wPriority),
+ weight = int(r.Data.SRV.wWeight),
})
}
diff --git a/core/os/os2/allocators.odin b/core/os/os2/allocators.odin
index 0ab3adfb2..ddfe230be 100644
--- a/core/os/os2/allocators.odin
+++ b/core/os/os2/allocators.odin
@@ -61,3 +61,8 @@ TEMP_ALLOCATOR_GUARD :: #force_inline proc(loc := #caller_location) -> (runtime.
global_default_temp_allocator_index = (global_default_temp_allocator_index+1)%MAX_TEMP_ARENA_COUNT
return tmp, loc
}
+
+@(init, private)
+init_thread_local_cleaner :: proc() {
+ runtime.add_thread_local_cleaner(temp_allocator_fini)
+}
diff --git a/core/os/os2/file_util.odin b/core/os/os2/file_util.odin
index e328f9a02..963544985 100644
--- a/core/os/os2/file_util.odin
+++ b/core/os/os2/file_util.odin
@@ -125,9 +125,6 @@ read_entire_file_from_file :: proc(f: ^File, allocator: runtime.Allocator) -> (d
has_size = true
size = int(size64)
}
- } else if serr != .No_Size {
- err = serr
- return
}
if has_size && size > 0 {
diff --git a/core/os/os2/process.odin b/core/os/os2/process.odin
index f7a542276..ce65987b0 100644
--- a/core/os/os2/process.odin
+++ b/core/os/os2/process.odin
@@ -166,15 +166,15 @@ Process_Info :: struct {
This procedure obtains an information, specified by `selection` parameter of
a process given by `pid`.
-
- Use `free_process_info` to free the memory allocated by this procedure. In
- case the function returns an error it may only have been an error for one part
- of the information and you would still need to call it to free the other parts.
+
+ Use `free_process_info` to free the memory allocated by this procedure. The
+ `free_process_info` procedure needs to be called, even if this procedure
+ returned an error, as some of the fields may have been allocated.
**Note**: The resulting information may or may contain the fields specified
by the `selection` parameter. Always check whether the returned
`Process_Info` struct has the required fields before checking the error code
- returned by this function.
+ returned by this procedure.
*/
@(require_results)
process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator: runtime.Allocator) -> (Process_Info, Error) {
@@ -188,14 +188,14 @@ process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator:
about a process that has been opened by the application, specified in
the `process` parameter.
- Use `free_process_info` to free the memory allocated by this procedure. In
- case the function returns an error it may only have been an error for one part
- of the information and you would still need to call it to free the other parts.
+ Use `free_process_info` to free the memory allocated by this procedure. The
+ `free_process_info` procedure needs to be called, even if this procedure
+ returned an error, as some of the fields may have been allocated.
**Note**: The resulting information may or may contain the fields specified
by the `selection` parameter. Always check whether the returned
`Process_Info` struct has the required fields before checking the error code
- returned by this function.
+ returned by this procedure.
*/
@(require_results)
process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields, allocator: runtime.Allocator) -> (Process_Info, Error) {
@@ -208,14 +208,14 @@ process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields,
This procedure obtains the information, specified by `selection` parameter
about the currently running process.
- Use `free_process_info` to free the memory allocated by this procedure. In
- case the function returns an error it may only have been an error for one part
- of the information and you would still need to call it to free the other parts.
+ Use `free_process_info` to free the memory allocated by this procedure. The
+ `free_process_info` procedure needs to be called, even if this procedure
+ returned an error, as some of the fields may have been allocated.
**Note**: The resulting information may or may contain the fields specified
by the `selection` parameter. Always check whether the returned
`Process_Info` struct has the required fields before checking the error code
- returned by this function.
+ returned by this procedure.
*/
@(require_results)
current_process_info :: proc(selection: Process_Info_Fields, allocator: runtime.Allocator) -> (Process_Info, Error) {
@@ -305,6 +305,7 @@ Process_Desc :: struct {
// A slice of strings, each having the format `KEY=VALUE` representing the
// full environment that the child process will receive.
// In case this slice is `nil`, the current process' environment is used.
+ // NOTE(laytan): maybe should be `Maybe([]string)` so you can do `nil` == current env, empty == empty/no env.
env: []string,
// The `stderr` handle to give to the child process. It can be either a file
// or a writeable end of a pipe. Passing `nil` will shut down the process'
diff --git a/core/os/os2/process_linux.odin b/core/os/os2/process_linux.odin
index 40406bad5..b6db46423 100644
--- a/core/os/os2/process_linux.odin
+++ b/core/os/os2/process_linux.odin
@@ -490,7 +490,6 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) {
if errno = linux.pipe2(&child_pipe_fds, {.CLOEXEC}); errno != .NONE {
return process, _get_platform_error(errno)
}
- defer linux.close(child_pipe_fds[WRITE])
defer linux.close(child_pipe_fds[READ])
@@ -508,6 +507,7 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) {
//
pid: linux.Pid
if pid, errno = linux.fork(); errno != .NONE {
+ linux.close(child_pipe_fds[WRITE])
return process, _get_platform_error(errno)
}
@@ -573,25 +573,19 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) {
write_errno_to_parent_and_abort(child_pipe_fds[WRITE], errno)
}
- success_byte: [1]u8
- linux.write(child_pipe_fds[WRITE], success_byte[:])
-
errno = linux.execveat(exe_fd, "", &cargs[0], env, {.AT_EMPTY_PATH})
-
- // NOTE: we can't tell the parent about this failure because we already wrote the success byte.
- // So if this happens the user will just see the process failed when they call process_wait.
-
assert(errno != nil)
- intrinsics.trap()
+ write_errno_to_parent_and_abort(child_pipe_fds[WRITE], errno)
}
+ linux.close(child_pipe_fds[WRITE])
+
process.pid = int(pid)
- n: int
child_byte: [1]u8
errno = .EINTR
for errno == .EINTR {
- n, errno = linux.read(child_pipe_fds[READ], child_byte[:])
+ _, errno = linux.read(child_pipe_fds[READ], child_byte[:])
}
// If the read failed, something weird happened. Do not return the read
diff --git a/core/os/os2/process_posix.odin b/core/os/os2/process_posix.odin
index c9b67f199..ea4ada81e 100644
--- a/core/os/os2/process_posix.odin
+++ b/core/os/os2/process_posix.odin
@@ -139,20 +139,22 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) {
err = _get_platform_error()
return
}
- defer posix.close(pipe[WRITE])
defer posix.close(pipe[READ])
if posix.fcntl(pipe[READ], .SETFD, i32(posix.FD_CLOEXEC)) == -1 {
+ posix.close(pipe[WRITE])
err = _get_platform_error()
return
}
if posix.fcntl(pipe[WRITE], .SETFD, i32(posix.FD_CLOEXEC)) == -1 {
+ posix.close(pipe[WRITE])
err = _get_platform_error()
return
}
switch pid := posix.fork(); pid {
case -1:
+ posix.close(pipe[WRITE])
err = _get_platform_error()
return
@@ -179,25 +181,20 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) {
if posix.chdir(cwd) != .OK { abort(pipe[WRITE]) }
}
- ok := u8(0)
- posix.write(pipe[WRITE], &ok, 1)
-
res := posix.execve(strings.to_cstring(&exe_builder), raw_data(cmd), env)
-
- // NOTE: we can't tell the parent about this failure because we already wrote the success byte.
- // So if this happens the user will just see the process failed when they call process_wait.
-
assert(res == -1)
- runtime.trap()
+ abort(pipe[WRITE])
case:
+ posix.close(pipe[WRITE])
+
errno: posix.Errno
for {
errno_byte: u8
switch posix.read(pipe[READ], &errno_byte, 1) {
- case 1:
+ case 1:
errno = posix.Errno(errno_byte)
- case:
+ case -1:
errno = posix.errno()
if errno == .EINTR {
continue
diff --git a/core/os/os2/process_windows.odin b/core/os/os2/process_windows.odin
index 47fd62401..edb321509 100644
--- a/core/os/os2/process_windows.odin
+++ b/core/os/os2/process_windows.odin
@@ -93,16 +93,33 @@ read_memory_as_slice :: proc(h: win32.HANDLE, addr: rawptr, dest: []$T) -> (byte
@(private="package")
_process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator: runtime.Allocator) -> (info: Process_Info, err: Error) {
info.pid = pid
- defer if err != nil {
- free_process_info(info, allocator)
+ // Note(flysand): Open the process handle right away to prevent some race
+ // conditions. Once the handle is open, the process will be kept alive by
+ // the OS.
+ ph := win32.INVALID_HANDLE_VALUE
+ if selection >= {.Command_Line, .Environment, .Working_Dir, .Username} {
+ ph = win32.OpenProcess(
+ win32.PROCESS_QUERY_LIMITED_INFORMATION | win32.PROCESS_VM_READ,
+ false,
+ u32(pid),
+ )
+ if ph == win32.INVALID_HANDLE_VALUE {
+ err = _get_platform_error()
+ return
+ }
}
-
- // Data obtained from process snapshots
- if selection >= {.PPid, .Priority} {
+ defer if ph != win32.INVALID_HANDLE_VALUE {
+ win32.CloseHandle(ph)
+ }
+ snapshot_process: if selection >= {.PPid, .Priority} {
entry, entry_err := _process_entry_by_pid(info.pid)
if entry_err != nil {
- err = General_Error.Not_Exist
- return
+ err = entry_err
+ if entry_err == General_Error.Not_Exist {
+ return
+ } else {
+ break snapshot_process
+ }
}
if .PPid in selection {
info.fields += {.PPid}
@@ -113,29 +130,18 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator
info.priority = int(entry.pcPriClassBase)
}
}
- if .Executable_Path in selection { // snap module
- info.executable_path = _process_exe_by_pid(pid, allocator) or_return
- info.fields += {.Executable_Path}
- }
-
- ph := win32.INVALID_HANDLE_VALUE
-
- if selection >= {.Command_Line, .Environment, .Working_Dir, .Username} { // need process handle
- ph = win32.OpenProcess(
- win32.PROCESS_QUERY_LIMITED_INFORMATION | win32.PROCESS_VM_READ,
- false,
- u32(pid),
- )
- if ph == win32.INVALID_HANDLE_VALUE {
- err = _get_platform_error()
+ snapshot_modules: if .Executable_Path in selection {
+ exe_path: string
+ exe_path, err = _process_exe_by_pid(pid, allocator)
+ if _, ok := err.(runtime.Allocator_Error); ok {
return
+ } else if err != nil {
+ break snapshot_modules
}
+ info.executable_path = exe_path
+ info.fields += {.Executable_Path}
}
- defer if ph != win32.INVALID_HANDLE_VALUE {
- win32.CloseHandle(ph)
- }
-
- if selection >= {.Command_Line, .Environment, .Working_Dir} { // need peb
+ read_peb: if selection >= {.Command_Line, .Environment, .Working_Dir} {
process_info_size: u32
process_info: win32.PROCESS_BASIC_INFORMATION
status := win32.NtQueryInformationProcess(ph, .ProcessBasicInformation, &process_info, size_of(process_info), &process_info_size)
@@ -143,25 +149,26 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator
// TODO(flysand): There's probably a mismatch between NTSTATUS and
// windows userland error codes, I haven't checked.
err = Platform_Error(status)
- return
- }
- if process_info.PebBaseAddress == nil {
- // Not sure what the error is
- err = General_Error.Unsupported
- return
+ break read_peb
}
+ assert(process_info.PebBaseAddress != nil)
process_peb: win32.PEB
-
- _ = read_memory_as_struct(ph, process_info.PebBaseAddress, &process_peb) or_return
-
+ _, err = read_memory_as_struct(ph, process_info.PebBaseAddress, &process_peb)
+ if err != nil {
+ break read_peb
+ }
process_params: win32.RTL_USER_PROCESS_PARAMETERS
- _ = read_memory_as_struct(ph, process_peb.ProcessParameters, &process_params) or_return
-
+ _, err = read_memory_as_struct(ph, process_peb.ProcessParameters, &process_params)
+ if err != nil {
+ break read_peb
+ }
if selection >= {.Command_Line, .Command_Args} {
TEMP_ALLOCATOR_GUARD()
cmdline_w := make([]u16, process_params.CommandLine.Length, temp_allocator()) or_return
- _ = read_memory_as_slice(ph, process_params.CommandLine.Buffer, cmdline_w) or_return
-
+ _, err = read_memory_as_slice(ph, process_params.CommandLine.Buffer, cmdline_w)
+ if err != nil {
+ break read_peb
+ }
if .Command_Line in selection {
info.command_line = win32_utf16_to_utf8(cmdline_w, allocator) or_return
info.fields += {.Command_Line}
@@ -175,23 +182,33 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator
TEMP_ALLOCATOR_GUARD()
env_len := process_params.EnvironmentSize / 2
envs_w := make([]u16, env_len, temp_allocator()) or_return
- _ = read_memory_as_slice(ph, process_params.Environment, envs_w) or_return
-
+ _, err = read_memory_as_slice(ph, process_params.Environment, envs_w)
+ if err != nil {
+ break read_peb
+ }
info.environment = _parse_environment_block(raw_data(envs_w), allocator) or_return
info.fields += {.Environment}
}
if .Working_Dir in selection {
TEMP_ALLOCATOR_GUARD()
cwd_w := make([]u16, process_params.CurrentDirectoryPath.Length, temp_allocator()) or_return
- _ = read_memory_as_slice(ph, process_params.CurrentDirectoryPath.Buffer, cwd_w) or_return
-
+ _, err = read_memory_as_slice(ph, process_params.CurrentDirectoryPath.Buffer, cwd_w)
+ if err != nil {
+ break read_peb
+ }
info.working_dir = win32_utf16_to_utf8(cwd_w, allocator) or_return
info.fields += {.Working_Dir}
}
}
-
- if .Username in selection {
- info.username = _get_process_user(ph, allocator) or_return
+ read_username: if .Username in selection {
+ username: string
+ username, err = _get_process_user(ph, allocator)
+ if _, ok := err.(runtime.Allocator_Error); ok {
+ return
+ } else if err != nil {
+ break read_username
+ }
+ info.username = username
info.fields += {.Username}
}
err = nil
@@ -202,16 +219,16 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator
_process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields, allocator: runtime.Allocator) -> (info: Process_Info, err: Error) {
pid := process.pid
info.pid = pid
- defer if err != nil {
- free_process_info(info, allocator)
- }
-
// Data obtained from process snapshots
- if selection >= {.PPid, .Priority} { // snap process
+ snapshot_process: if selection >= {.PPid, .Priority} {
entry, entry_err := _process_entry_by_pid(info.pid)
if entry_err != nil {
- err = General_Error.Not_Exist
- return
+ err = entry_err
+ if entry_err == General_Error.Not_Exist {
+ return
+ } else {
+ break snapshot_process
+ }
}
if .PPid in selection {
info.fields += {.PPid}
@@ -222,12 +239,19 @@ _process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields
info.priority = int(entry.pcPriClassBase)
}
}
- if .Executable_Path in selection { // snap module
- info.executable_path = _process_exe_by_pid(pid, allocator) or_return
+ snapshot_module: if .Executable_Path in selection {
+ exe_path: string
+ exe_path, err = _process_exe_by_pid(pid, allocator)
+ if _, ok := err.(runtime.Allocator_Error); ok {
+ return
+ } else if err != nil {
+ break snapshot_module
+ }
+ info.executable_path = exe_path
info.fields += {.Executable_Path}
}
ph := win32.HANDLE(process.handle)
- if selection >= {.Command_Line, .Environment, .Working_Dir} { // need peb
+ read_peb: if selection >= {.Command_Line, .Environment, .Working_Dir} {
process_info_size: u32
process_info: win32.PROCESS_BASIC_INFORMATION
status := win32.NtQueryInformationProcess(ph, .ProcessBasicInformation, &process_info, size_of(process_info), &process_info_size)
@@ -237,23 +261,24 @@ _process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields
err = Platform_Error(status)
return
}
- if process_info.PebBaseAddress == nil {
- // Not sure what the error is
- err = General_Error.Unsupported
- return
- }
-
+ assert(process_info.PebBaseAddress != nil)
process_peb: win32.PEB
- _ = read_memory_as_struct(ph, process_info.PebBaseAddress, &process_peb) or_return
-
+ _, err = read_memory_as_struct(ph, process_info.PebBaseAddress, &process_peb)
+ if err != nil {
+ break read_peb
+ }
process_params: win32.RTL_USER_PROCESS_PARAMETERS
- _ = read_memory_as_struct(ph, process_peb.ProcessParameters, &process_params) or_return
-
+ _, err = read_memory_as_struct(ph, process_peb.ProcessParameters, &process_params)
+ if err != nil {
+ break read_peb
+ }
if selection >= {.Command_Line, .Command_Args} {
TEMP_ALLOCATOR_GUARD()
cmdline_w := make([]u16, process_params.CommandLine.Length, temp_allocator()) or_return
- _ = read_memory_as_slice(ph, process_params.CommandLine.Buffer, cmdline_w) or_return
-
+ _, err = read_memory_as_slice(ph, process_params.CommandLine.Buffer, cmdline_w)
+ if err != nil {
+ break read_peb
+ }
if .Command_Line in selection {
info.command_line = win32_utf16_to_utf8(cmdline_w, allocator) or_return
info.fields += {.Command_Line}
@@ -263,28 +288,37 @@ _process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields
info.fields += {.Command_Args}
}
}
-
if .Environment in selection {
TEMP_ALLOCATOR_GUARD()
env_len := process_params.EnvironmentSize / 2
envs_w := make([]u16, env_len, temp_allocator()) or_return
- _ = read_memory_as_slice(ph, process_params.Environment, envs_w) or_return
-
+ _, err = read_memory_as_slice(ph, process_params.Environment, envs_w)
+ if err != nil {
+ break read_peb
+ }
info.environment = _parse_environment_block(raw_data(envs_w), allocator) or_return
info.fields += {.Environment}
}
-
if .Working_Dir in selection {
TEMP_ALLOCATOR_GUARD()
cwd_w := make([]u16, process_params.CurrentDirectoryPath.Length, temp_allocator()) or_return
- _ = read_memory_as_slice(ph, process_params.CurrentDirectoryPath.Buffer, cwd_w) or_return
-
+ _, err = read_memory_as_slice(ph, process_params.CurrentDirectoryPath.Buffer, cwd_w)
+ if err != nil {
+ break read_peb
+ }
info.working_dir = win32_utf16_to_utf8(cwd_w, allocator) or_return
info.fields += {.Working_Dir}
}
}
- if .Username in selection {
- info.username = _get_process_user(ph, allocator) or_return
+ read_username: if .Username in selection {
+ username: string
+ username, err = _get_process_user(ph, allocator)
+ if _, ok := err.(runtime.Allocator_Error); ok {
+ return
+ } else if err != nil {
+ break read_username
+ }
+ info.username = username
info.fields += {.Username}
}
err = nil
@@ -294,15 +328,15 @@ _process_info_by_handle :: proc(process: Process, selection: Process_Info_Fields
@(private="package")
_current_process_info :: proc(selection: Process_Info_Fields, allocator: runtime.Allocator) -> (info: Process_Info, err: Error) {
info.pid = get_pid()
- defer if err != nil {
- free_process_info(info, allocator)
- }
-
- if selection >= {.PPid, .Priority} { // snap process
+ snapshot_process: if selection >= {.PPid, .Priority} {
entry, entry_err := _process_entry_by_pid(info.pid)
if entry_err != nil {
- err = General_Error.Not_Exist
- return
+ err = entry_err
+ if entry_err == General_Error.Not_Exist {
+ return
+ } else {
+ break snapshot_process
+ }
}
if .PPid in selection {
info.fields += {.PPid}
@@ -313,14 +347,16 @@ _current_process_info :: proc(selection: Process_Info_Fields, allocator: runtime
info.priority = int(entry.pcPriClassBase)
}
}
- if .Executable_Path in selection {
+ module_filename: if .Executable_Path in selection {
exe_filename_w: [256]u16
path_len := win32.GetModuleFileNameW(nil, raw_data(exe_filename_w[:]), len(exe_filename_w))
+ assert(path_len > 0)
info.executable_path = win32_utf16_to_utf8(exe_filename_w[:path_len], allocator) or_return
info.fields += {.Executable_Path}
}
- if selection >= {.Command_Line, .Command_Args} {
+ command_line: if selection >= {.Command_Line, .Command_Args} {
command_line_w := win32.GetCommandLineW()
+ assert(command_line_w != nil)
if .Command_Line in selection {
info.command_line = win32_wstring_to_utf8(command_line_w, allocator) or_return
info.fields += {.Command_Line}
@@ -330,14 +366,22 @@ _current_process_info :: proc(selection: Process_Info_Fields, allocator: runtime
info.fields += {.Command_Args}
}
}
- if .Environment in selection {
+ read_environment: if .Environment in selection {
env_block := win32.GetEnvironmentStringsW()
+ assert(env_block != nil)
info.environment = _parse_environment_block(env_block, allocator) or_return
info.fields += {.Environment}
}
- if .Username in selection {
+ read_username: if .Username in selection {
process_handle := win32.GetCurrentProcess()
- info.username = _get_process_user(process_handle, allocator) or_return
+ username: string
+ username, err = _get_process_user(process_handle, allocator)
+ if _, ok := err.(runtime.Allocator_Error); ok {
+ return
+ } else if err != nil {
+ break read_username
+ }
+ info.username = username
info.fields += {.Username}
}
if .Working_Dir in selection {
diff --git a/core/os/os_linux.odin b/core/os/os_linux.odin
index 0a3a2e236..74a67f366 100644
--- a/core/os/os_linux.odin
+++ b/core/os/os_linux.odin
@@ -398,9 +398,9 @@ SIOCGIFFLAG :: enum c.int {
PORTSEL = 13, /* Can set media type. */
AUTOMEDIA = 14, /* Auto media select active. */
DYNAMIC = 15, /* Dialup device with changing addresses. */
- LOWER_UP = 16,
- DORMANT = 17,
- ECHO = 18,
+ LOWER_UP = 16,
+ DORMANT = 17,
+ ECHO = 18,
}
SIOCGIFFLAGS :: bit_set[SIOCGIFFLAG; c.int]
diff --git a/core/reflect/iterator.odin b/core/reflect/iterator.odin
index 5b84f0133..090fe04cc 100644
--- a/core/reflect/iterator.odin
+++ b/core/reflect/iterator.odin
@@ -19,6 +19,7 @@ iterate_array :: proc(val: any, it: ^int) -> (elem: any, index: int, ok: bool) {
elem.data = rawptr(uintptr(val.data) + uintptr(it^ * info.elem_size))
elem.id = info.elem.id
ok = true
+ index = it^
it^ += 1
}
case Type_Info_Slice:
@@ -27,6 +28,7 @@ iterate_array :: proc(val: any, it: ^int) -> (elem: any, index: int, ok: bool) {
elem.data = rawptr(uintptr(array.data) + uintptr(it^ * info.elem_size))
elem.id = info.elem.id
ok = true
+ index = it^
it^ += 1
}
case Type_Info_Dynamic_Array:
@@ -35,6 +37,7 @@ iterate_array :: proc(val: any, it: ^int) -> (elem: any, index: int, ok: bool) {
elem.data = rawptr(uintptr(array.data) + uintptr(it^ * info.elem_size))
elem.id = info.elem.id
ok = true
+ index = it^
it^ += 1
}
}
@@ -69,10 +72,12 @@ iterate_map :: proc(val: any, it: ^int) -> (key, value: any, ok: bool) {
key.id = info.key.id
value.id = info.value.id
ok = true
+ it^ += 1
break
}
}
}
return
-} \ No newline at end of file
+}
+
diff --git a/core/sys/darwin/CoreFoundation/CFString.odin b/core/sys/darwin/CoreFoundation/CFString.odin
index 6ad3c5bfc..ad3d67258 100644
--- a/core/sys/darwin/CoreFoundation/CFString.odin
+++ b/core/sys/darwin/CoreFoundation/CFString.odin
@@ -9,157 +9,157 @@ String :: distinct TypeRef // same as CFStringRef
StringEncoding :: distinct u32
StringBuiltInEncodings :: enum StringEncoding {
- MacRoman = 0,
+ MacRoman = 0,
WindowsLatin1 = 0x0500,
- ISOLatin1 = 0x0201,
+ ISOLatin1 = 0x0201,
NextStepLatin = 0x0B01,
- ASCII = 0x0600,
- Unicode = 0x0100,
- UTF8 = 0x08000100,
+ ASCII = 0x0600,
+ Unicode = 0x0100,
+ UTF8 = 0x08000100,
NonLossyASCII = 0x0BFF,
- UTF16 = 0x0100,
+ UTF16 = 0x0100,
UTF16BE = 0x10000100,
UTF16LE = 0x14000100,
- UTF32 = 0x0c000100,
- UTF32BE = 0x18000100,
- UTF32LE = 0x1c000100,
+ UTF32 = 0x0c000100,
+ UTF32BE = 0x18000100,
+ UTF32LE = 0x1c000100,
}
StringEncodings :: enum Index {
- MacJapanese = 1,
- MacChineseTrad = 2,
- MacKorean = 3,
- MacArabic = 4,
- MacHebrew = 5,
- MacGreek = 6,
- MacCyrillic = 7,
- MacDevanagari = 9,
- MacGurmukhi = 10,
- MacGujarati = 11,
- MacOriya = 12,
- MacBengali = 13,
- MacTamil = 14,
- MacTelugu = 15,
- MacKannada = 16,
- MacMalayalam = 17,
- MacSinhalese = 18,
- MacBurmese = 19,
- MacKhmer = 20,
- MacThai = 21,
- MacLaotian = 22,
- MacGeorgian = 23,
- MacArmenian = 24,
- MacChineseSimp = 25,
- MacTibetan = 26,
- MacMongolian = 27,
- MacEthiopic = 28,
- MacCentralEurRoman = 29,
- MacVietnamese = 30,
- MacExtArabic = 31,
- MacSymbol = 33,
- MacDingbats = 34,
- MacTurkish = 35,
- MacCroatian = 36,
- MacIcelandic = 37,
- MacRomanian = 38,
- MacCeltic = 39,
- MacGaelic = 40,
- MacFarsi = 0x8C,
- MacUkrainian = 0x98,
- MacInuit = 0xEC,
- MacVT100 = 0xFC,
- MacHFS = 0xFF,
- ISOLatin2 = 0x0202,
- ISOLatin3 = 0x0203,
- ISOLatin4 = 0x0204,
- ISOLatinCyrillic = 0x0205,
- ISOLatinArabic = 0x0206,
- ISOLatinGreek = 0x0207,
- ISOLatinHebrew = 0x0208,
- ISOLatin5 = 0x0209,
- ISOLatin6 = 0x020A,
- ISOLatinThai = 0x020B,
- ISOLatin7 = 0x020D,
- ISOLatin8 = 0x020E,
- ISOLatin9 = 0x020F,
- ISOLatin10 = 0x0210,
- DOSLatinUS = 0x0400,
- DOSGreek = 0x0405,
- DOSBalticRim = 0x0406,
- DOSLatin1 = 0x0410,
- DOSGreek1 = 0x0411,
- DOSLatin2 = 0x0412,
- DOSCyrillic = 0x0413,
- DOSTurkish = 0x0414,
- DOSPortuguese = 0x0415,
- DOSIcelandic = 0x0416,
- DOSHebrew = 0x0417,
- DOSCanadianFrench = 0x0418,
- DOSArabic = 0x0419,
- DOSNordic = 0x041A,
- DOSRussian = 0x041B,
- DOSGreek2 = 0x041C,
- DOSThai = 0x041D,
- DOSJapanese = 0x0420,
- DOSChineseSimplif = 0x0421,
- DOSKorean = 0x0422,
- DOSChineseTrad = 0x0423,
- WindowsLatin2 = 0x0501,
- WindowsCyrillic = 0x0502,
- WindowsGreek = 0x0503,
- WindowsLatin5 = 0x0504,
- WindowsHebrew = 0x0505,
- WindowsArabic = 0x0506,
- WindowsBalticRim = 0x0507,
- WindowsVietnamese = 0x0508,
- WindowsKoreanJohab = 0x0510,
- ANSEL = 0x0601,
- JIS_X0201_76 = 0x0620,
- JIS_X0208_83 = 0x0621,
- JIS_X0208_90 = 0x0622,
- JIS_X0212_90 = 0x0623,
- JIS_C6226_78 = 0x0624,
- ShiftJIS_X0213 = 0x0628,
- ShiftJIS_X0213_MenKuTen = 0x0629,
- GB_2312_80 = 0x0630,
- GBK_95 = 0x0631,
- GB_18030_2000 = 0x0632,
- KSC_5601_87 = 0x0640,
- KSC_5601_92_Johab = 0x0641,
- CNS_11643_92_P1 = 0x0651,
- CNS_11643_92_P2 = 0x0652,
- CNS_11643_92_P3 = 0x0653,
- ISO_2022_JP = 0x0820,
- ISO_2022_JP_2 = 0x0821,
- ISO_2022_JP_1 = 0x0822,
- ISO_2022_JP_3 = 0x0823,
- ISO_2022_CN = 0x0830,
- ISO_2022_CN_EXT = 0x0831,
- ISO_2022_KR = 0x0840,
- EUC_JP = 0x0920,
- EUC_CN = 0x0930,
- EUC_TW = 0x0931,
- EUC_KR = 0x0940,
- ShiftJIS = 0x0A01,
- KOI8_R = 0x0A02,
- Big5 = 0x0A03,
- MacRomanLatin1 = 0x0A04,
- HZ_GB_2312 = 0x0A05,
- Big5_HKSCS_1999 = 0x0A06,
- VISCII = 0x0A07,
- KOI8_U = 0x0A08,
- Big5_E = 0x0A09,
- NextStepJapanese = 0x0B02,
- EBCDIC_US = 0x0C01,
- EBCDIC_CP037 = 0x0C02,
- UTF7 = 0x04000100,
- UTF7_IMAP = 0x0A10,
- ShiftJIS_X0213_00 = 0x0628, // Deprecated. Use `ShiftJIS_X0213` instead.
+ MacJapanese = 1,
+ MacChineseTrad = 2,
+ MacKorean = 3,
+ MacArabic = 4,
+ MacHebrew = 5,
+ MacGreek = 6,
+ MacCyrillic = 7,
+ MacDevanagari = 9,
+ MacGurmukhi = 10,
+ MacGujarati = 11,
+ MacOriya = 12,
+ MacBengali = 13,
+ MacTamil = 14,
+ MacTelugu = 15,
+ MacKannada = 16,
+ MacMalayalam = 17,
+ MacSinhalese = 18,
+ MacBurmese = 19,
+ MacKhmer = 20,
+ MacThai = 21,
+ MacLaotian = 22,
+ MacGeorgian = 23,
+ MacArmenian = 24,
+ MacChineseSimp = 25,
+ MacTibetan = 26,
+ MacMongolian = 27,
+ MacEthiopic = 28,
+ MacCentralEurRoman = 29,
+ MacVietnamese = 30,
+ MacExtArabic = 31,
+ MacSymbol = 33,
+ MacDingbats = 34,
+ MacTurkish = 35,
+ MacCroatian = 36,
+ MacIcelandic = 37,
+ MacRomanian = 38,
+ MacCeltic = 39,
+ MacGaelic = 40,
+ MacFarsi = 0x8C,
+ MacUkrainian = 0x98,
+ MacInuit = 0xEC,
+ MacVT100 = 0xFC,
+ MacHFS = 0xFF,
+ ISOLatin2 = 0x0202,
+ ISOLatin3 = 0x0203,
+ ISOLatin4 = 0x0204,
+ ISOLatinCyrillic = 0x0205,
+ ISOLatinArabic = 0x0206,
+ ISOLatinGreek = 0x0207,
+ ISOLatinHebrew = 0x0208,
+ ISOLatin5 = 0x0209,
+ ISOLatin6 = 0x020A,
+ ISOLatinThai = 0x020B,
+ ISOLatin7 = 0x020D,
+ ISOLatin8 = 0x020E,
+ ISOLatin9 = 0x020F,
+ ISOLatin10 = 0x0210,
+ DOSLatinUS = 0x0400,
+ DOSGreek = 0x0405,
+ DOSBalticRim = 0x0406,
+ DOSLatin1 = 0x0410,
+ DOSGreek1 = 0x0411,
+ DOSLatin2 = 0x0412,
+ DOSCyrillic = 0x0413,
+ DOSTurkish = 0x0414,
+ DOSPortuguese = 0x0415,
+ DOSIcelandic = 0x0416,
+ DOSHebrew = 0x0417,
+ DOSCanadianFrench = 0x0418,
+ DOSArabic = 0x0419,
+ DOSNordic = 0x041A,
+ DOSRussian = 0x041B,
+ DOSGreek2 = 0x041C,
+ DOSThai = 0x041D,
+ DOSJapanese = 0x0420,
+ DOSChineseSimplif = 0x0421,
+ DOSKorean = 0x0422,
+ DOSChineseTrad = 0x0423,
+ WindowsLatin2 = 0x0501,
+ WindowsCyrillic = 0x0502,
+ WindowsGreek = 0x0503,
+ WindowsLatin5 = 0x0504,
+ WindowsHebrew = 0x0505,
+ WindowsArabic = 0x0506,
+ WindowsBalticRim = 0x0507,
+ WindowsVietnamese = 0x0508,
+ WindowsKoreanJohab = 0x0510,
+ ANSEL = 0x0601,
+ JIS_X0201_76 = 0x0620,
+ JIS_X0208_83 = 0x0621,
+ JIS_X0208_90 = 0x0622,
+ JIS_X0212_90 = 0x0623,
+ JIS_C6226_78 = 0x0624,
+ ShiftJIS_X0213 = 0x0628,
+ ShiftJIS_X0213_MenKuTen = 0x0629,
+ GB_2312_80 = 0x0630,
+ GBK_95 = 0x0631,
+ GB_18030_2000 = 0x0632,
+ KSC_5601_87 = 0x0640,
+ KSC_5601_92_Johab = 0x0641,
+ CNS_11643_92_P1 = 0x0651,
+ CNS_11643_92_P2 = 0x0652,
+ CNS_11643_92_P3 = 0x0653,
+ ISO_2022_JP = 0x0820,
+ ISO_2022_JP_2 = 0x0821,
+ ISO_2022_JP_1 = 0x0822,
+ ISO_2022_JP_3 = 0x0823,
+ ISO_2022_CN = 0x0830,
+ ISO_2022_CN_EXT = 0x0831,
+ ISO_2022_KR = 0x0840,
+ EUC_JP = 0x0920,
+ EUC_CN = 0x0930,
+ EUC_TW = 0x0931,
+ EUC_KR = 0x0940,
+ ShiftJIS = 0x0A01,
+ KOI8_R = 0x0A02,
+ Big5 = 0x0A03,
+ MacRomanLatin1 = 0x0A04,
+ HZ_GB_2312 = 0x0A05,
+ Big5_HKSCS_1999 = 0x0A06,
+ VISCII = 0x0A07,
+ KOI8_U = 0x0A08,
+ Big5_E = 0x0A09,
+ NextStepJapanese = 0x0B02,
+ EBCDIC_US = 0x0C01,
+ EBCDIC_CP037 = 0x0C02,
+ UTF7 = 0x04000100,
+ UTF7_IMAP = 0x0A10,
+ ShiftJIS_X0213_00 = 0x0628, // Deprecated. Use `ShiftJIS_X0213` instead.
}
-@(link_prefix = "CF", default_calling_convention = "c")
+@(link_prefix="CF", default_calling_convention="c")
foreign CoreFoundation {
// Copies the character contents of a string to a local C string buffer after converting the characters to a given encoding.
StringGetCString :: proc(theString: String, buffer: [^]byte, bufferSize: Index, encoding: StringEncoding) -> b8 ---
@@ -181,23 +181,16 @@ foreign CoreFoundation {
STR :: StringMakeConstantString
-StringCopyToOdinString :: proc(
- theString: String,
- allocator := context.allocator,
-) -> (
- str: string,
- ok: bool,
-) #optional_ok {
+StringCopyToOdinString :: proc(theString: String, allocator := context.allocator) -> (str: string, ok: bool) #optional_ok {
length := StringGetLength(theString)
max := StringGetMaximumSizeForEncoding(length, StringEncoding(StringBuiltInEncodings.UTF8))
buf, err := make([]byte, max, allocator)
- if err != nil { return }
-
- raw_str := runtime.Raw_String {
- data = raw_data(buf),
+ if err != nil {
+ return
}
- StringGetBytes(theString, {0, length}, StringEncoding(StringBuiltInEncodings.UTF8), 0, false, raw_data(buf), max, (^Index)(&raw_str.len))
- return transmute(string)raw_str, true
+ n: Index
+ StringGetBytes(theString, {0, length}, StringEncoding(StringBuiltInEncodings.UTF8), 0, false, raw_data(buf), Index(len(buf)), &n)
+ return string(buf[:n]), true
}
diff --git a/core/sys/darwin/xnu_system_call_helpers.odin b/core/sys/darwin/xnu_system_call_helpers.odin
index a641a4be9..ae8373f99 100644
--- a/core/sys/darwin/xnu_system_call_helpers.odin
+++ b/core/sys/darwin/xnu_system_call_helpers.odin
@@ -15,9 +15,9 @@ sys_write_string :: proc (fd: c.int, message: string) -> bool {
Offset_From :: enum c.int {
SEEK_SET = 0, // the offset is set to offset bytes.
SEEK_CUR = 1, // the offset is set to its current location plus offset bytes.
- SEEK_END = 2, // the offset is set to the size of the file plus offset bytes.
- SEEK_HOLE = 3, // the offset is set to the start of the next hole greater than or equal to the supplied offset.
- SEEK_DATA = 4, // the offset is set to the start of the next non-hole file region greater than or equal to the supplied offset.
+ SEEK_END = 2, // the offset is set to the size of the file plus offset bytes.
+ SEEK_HOLE = 3, // the offset is set to the start of the next hole greater than or equal to the supplied offset.
+ SEEK_DATA = 4, // the offset is set to the start of the next non-hole file region greater than or equal to the supplied offset.
}
Open_Flags_Enum :: enum u8 {
diff --git a/core/sys/darwin/xnu_system_call_wrappers.odin b/core/sys/darwin/xnu_system_call_wrappers.odin
index 30faf86be..1188091a9 100644
--- a/core/sys/darwin/xnu_system_call_wrappers.odin
+++ b/core/sys/darwin/xnu_system_call_wrappers.odin
@@ -192,43 +192,43 @@ _STRUCT_TIMEVAL :: struct {
/* pwd.h */
_Password_Entry :: struct {
- pw_name: cstring, /* username */
- pw_passwd: cstring, /* user password */
- pw_uid: i32, /* user ID */
- pw_gid: i32, /* group ID */
+ pw_name: cstring, /* username */
+ pw_passwd: cstring, /* user password */
+ pw_uid: i32, /* user ID */
+ pw_gid: i32, /* group ID */
pw_change: u64, /* password change time */
pw_class: cstring, /* user access class */
- pw_gecos: cstring, /* full user name */
- pw_dir: cstring, /* home directory */
- pw_shell: cstring, /* shell program */
+ pw_gecos: cstring, /* full user name */
+ pw_dir: cstring, /* home directory */
+ pw_shell: cstring, /* shell program */
pw_expire: u64, /* account expiration */
pw_fields: i32, /* filled fields */
}
/* processinfo.h */
_Proc_Bsdinfo :: struct {
- pbi_flags: u32, /* if is 64bit; emulated etc */
- pbi_status: u32,
- pbi_xstatus: u32,
- pbi_pid: u32,
- pbi_ppid: u32,
- pbi_uid: u32,
- pbi_gid: u32,
- pbi_ruid: u32,
- pbi_rgid: u32,
- pbi_svuid: u32,
- pbi_svgid: u32,
- res: u32,
- pbi_comm: [DARWIN_MAXCOMLEN]u8,
- pbi_name: [2 * DARWIN_MAXCOMLEN]u8, /* empty if no name is registered */
- pbi_nfiles: u32,
- pbi_pgid: u32,
- pbi_pjobc: u32,
- e_tdev: u32, /* controlling tty dev */
- e_tpgid: u32, /* tty process group id */
- pbi_nice: i32,
- pbi_start_tvsec: u64,
- pbi_start_tvusec: u64,
+ pbi_flags: u32, /* if is 64bit; emulated etc */
+ pbi_status: u32,
+ pbi_xstatus: u32,
+ pbi_pid: u32,
+ pbi_ppid: u32,
+ pbi_uid: u32,
+ pbi_gid: u32,
+ pbi_ruid: u32,
+ pbi_rgid: u32,
+ pbi_svuid: u32,
+ pbi_svgid: u32,
+ res: u32,
+ pbi_comm: [DARWIN_MAXCOMLEN]u8,
+ pbi_name: [2 * DARWIN_MAXCOMLEN]u8, /* empty if no name is registered */
+ pbi_nfiles: u32,
+ pbi_pgid: u32,
+ pbi_pjobc: u32,
+ e_tdev: u32, /* controlling tty dev */
+ e_tpgid: u32, /* tty process group id */
+ pbi_nice: i32,
+ pbi_start_tvsec: u64,
+ pbi_start_tvusec: u64,
}
/*--==========================================================================--*/
diff --git a/core/sys/freebsd/types.odin b/core/sys/freebsd/types.odin
index a13961a47..37e8abf68 100644
--- a/core/sys/freebsd/types.odin
+++ b/core/sys/freebsd/types.odin
@@ -695,12 +695,12 @@ Record_Lock_Flag :: enum c.int {
// struct flock
File_Lock :: struct {
- start: off_t, /* starting offset */
- len: off_t, /* len = 0 means until end of file */
- pid: pid_t, /* lock owner */
- type: Record_Lock_Flag, /* lock type: read/write, etc. */
- whence: c.short, /* type of l_start */
- sysid: c.int, /* remote system id or zero for local */
+ start: off_t, /* starting offset */
+ len: off_t, /* len = 0 means until end of file */
+ pid: pid_t, /* lock owner */
+ type: Record_Lock_Flag, /* lock type: read/write, etc. */
+ whence: c.short, /* type of l_start */
+ sysid: c.int, /* remote system id or zero for local */
}
/*
diff --git a/core/sys/windows/dwmapi.odin b/core/sys/windows/dwmapi.odin
index 91911baae..d0ffc6b46 100644
--- a/core/sys/windows/dwmapi.odin
+++ b/core/sys/windows/dwmapi.odin
@@ -4,7 +4,7 @@ package sys_windows
foreign import dwmapi "system:Dwmapi.lib"
DWMWINDOWATTRIBUTE :: enum {
- DWMWA_NCRENDERING_ENABLED,
+ DWMWA_NCRENDERING_ENABLED = 1,
DWMWA_NCRENDERING_POLICY,
DWMWA_TRANSITIONS_FORCEDISABLED,
DWMWA_ALLOW_NCPAINT,
@@ -28,7 +28,7 @@ DWMWINDOWATTRIBUTE :: enum {
DWMWA_TEXT_COLOR,
DWMWA_VISIBLE_FRAME_BORDER_THICKNESS,
DWMWA_SYSTEMBACKDROP_TYPE,
- DWMWA_LAST,
+ DWMWA_LAST,
}
DWMNCRENDERINGPOLICY :: enum {
diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin
index 54dc11389..629ece3de 100644
--- a/core/sys/windows/kernel32.odin
+++ b/core/sys/windows/kernel32.odin
@@ -1175,17 +1175,17 @@ SYSTEM_POWER_STATUS :: struct {
}
AC_Line_Status :: enum BYTE {
- Offline = 0,
- Online = 1,
- Unknown = 255,
+ Offline = 0,
+ Online = 1,
+ Unknown = 255,
}
Battery_Flag :: enum BYTE {
- High = 0,
- Low = 1,
- Critical = 2,
- Charging = 3,
- No_Battery = 7,
+ High = 0,
+ Low = 1,
+ Critical = 2,
+ Charging = 3,
+ No_Battery = 7,
}
Battery_Flags :: bit_set[Battery_Flag; BYTE]
diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin
index d9a6bd1fd..934d103e5 100644
--- a/core/sys/windows/types.odin
+++ b/core/sys/windows/types.odin
@@ -3546,11 +3546,11 @@ SIGDN :: enum c_int {
}
SIATTRIBFLAGS :: enum c_int {
- AND = 0x1,
- OR = 0x2,
- APPCOMPAT = 0x3,
- MASK = 0x3,
- ALLITEMS = 0x4000,
+ AND = 0x1,
+ OR = 0x2,
+ APPCOMPAT = 0x3,
+ MASK = 0x3,
+ ALLITEMS = 0x4000,
}
FDAP :: enum c_int {
@@ -4503,35 +4503,35 @@ DNS_INFO_NO_RECORDS :: 9501
DNS_QUERY_NO_RECURSION :: 0x00000004
DNS_RECORD :: struct { // aka DNS_RECORDA
- pNext: ^DNS_RECORD,
- pName: cstring,
- wType: WORD,
- wDataLength: USHORT,
- Flags: DWORD,
- dwTtl: DWORD,
- _: DWORD,
- Data: struct #raw_union {
- CNAME: DNS_PTR_DATAA,
- A: u32be, // Ipv4 Address
- AAAA: u128be, // Ipv6 Address
- TXT: DNS_TXT_DATAA,
- NS: DNS_PTR_DATAA,
- MX: DNS_MX_DATAA,
- SRV: DNS_SRV_DATAA,
- },
+ pNext: ^DNS_RECORD,
+ pName: cstring,
+ wType: WORD,
+ wDataLength: USHORT,
+ Flags: DWORD,
+ dwTtl: DWORD,
+ _: DWORD,
+ Data: struct #raw_union {
+ CNAME: DNS_PTR_DATAA,
+ A: u32be, // Ipv4 Address
+ AAAA: u128be, // Ipv6 Address
+ TXT: DNS_TXT_DATAA,
+ NS: DNS_PTR_DATAA,
+ MX: DNS_MX_DATAA,
+ SRV: DNS_SRV_DATAA,
+ },
}
DNS_TXT_DATAA :: struct {
- dwStringCount: DWORD,
- pStringArray: cstring,
+ dwStringCount: DWORD,
+ pStringArray: cstring,
}
DNS_PTR_DATAA :: cstring
DNS_MX_DATAA :: struct {
- pNameExchange: cstring, // the hostname
- wPreference: WORD, // lower values preferred
- _: WORD, // padding.
+ pNameExchange: cstring, // the hostname
+ wPreference: WORD, // lower values preferred
+ _: WORD, // padding.
}
DNS_SRV_DATAA :: struct {
pNameTarget: cstring,
diff --git a/core/text/table/table.odin b/core/text/table/table.odin
index 27c99b1f1..66a7d442b 100644
--- a/core/text/table/table.odin
+++ b/core/text/table/table.odin
@@ -56,7 +56,7 @@ Decorations :: struct {
// Connecting decorations:
nw, n, ne,
- w, x, e,
+ w, x, e,
sw, s, se: string,
// Straight lines:
diff --git a/core/thread/thread_pool.odin b/core/thread/thread_pool.odin
index da5e116ff..7e2489013 100644
--- a/core/thread/thread_pool.odin
+++ b/core/thread/thread_pool.odin
@@ -175,10 +175,12 @@ pool_stop_task :: proc(pool: ^Pool, user_index: int, exit_code: int = 1) -> bool
intrinsics.atomic_sub(&pool.num_outstanding, 1)
intrinsics.atomic_sub(&pool.num_in_processing, 1)
+ old_thread_user_index := t.user_index
+
destroy(t)
replacement := create(pool_thread_runner)
- replacement.user_index = t.user_index
+ replacement.user_index = old_thread_user_index
replacement.data = data
data.task = {}
pool.threads[i] = replacement
@@ -207,10 +209,12 @@ pool_stop_all_tasks :: proc(pool: ^Pool, exit_code: int = 1) {
intrinsics.atomic_sub(&pool.num_outstanding, 1)
intrinsics.atomic_sub(&pool.num_in_processing, 1)
+ old_thread_user_index := t.user_index
+
destroy(t)
replacement := create(pool_thread_runner)
- replacement.user_index = t.user_index
+ replacement.user_index = old_thread_user_index
replacement.data = data
data.task = {}
pool.threads[i] = replacement
diff --git a/core/thread/thread_unix.odin b/core/thread/thread_unix.odin
index f56454bfc..3d25b1909 100644
--- a/core/thread/thread_unix.odin
+++ b/core/thread/thread_unix.odin
@@ -2,6 +2,7 @@
// +private
package thread
+import "base:runtime"
import "core:sync"
import "core:sys/unix"
import "core:time"
@@ -55,7 +56,10 @@ _create :: proc(procedure: Thread_Proc, priority: Thread_Priority) -> ^Thread {
// Here on Unix, we start the OS thread in a running state, and so we manually have it wait on a condition
// variable above. We must perform that waiting BEFORE we select the context!
context = _select_context_for_thread(init_context)
- defer _maybe_destroy_default_temp_allocator(init_context)
+ defer {
+ _maybe_destroy_default_temp_allocator(init_context)
+ runtime.run_thread_local_cleaners()
+ }
t.procedure(t)
}
diff --git a/core/thread/thread_windows.odin b/core/thread/thread_windows.odin
index 8da75a2d9..50a4e5fbc 100644
--- a/core/thread/thread_windows.odin
+++ b/core/thread/thread_windows.odin
@@ -3,6 +3,7 @@
package thread
import "base:intrinsics"
+import "base:runtime"
import "core:sync"
import win32 "core:sys/windows"
@@ -39,7 +40,10 @@ _create :: proc(procedure: Thread_Proc, priority: Thread_Priority) -> ^Thread {
// Here on Windows, the thread is created in a suspended state, and so we can select the context anywhere before the call
// to t.procedure().
context = _select_context_for_thread(init_context)
- defer _maybe_destroy_default_temp_allocator(init_context)
+ defer {
+ _maybe_destroy_default_temp_allocator(init_context)
+ runtime.run_thread_local_cleaners()
+ }
t.procedure(t)
}
diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp
index 1c4b88101..3742caeda 100644
--- a/src/check_builtin.cpp
+++ b/src/check_builtin.cpp
@@ -2048,6 +2048,14 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As
return ok;
}
+ if (BuiltinProc__atomic_begin < id && id < BuiltinProc__atomic_end) {
+ if (build_context.metrics.arch == TargetArch_riscv64) {
+ if (!check_target_feature_is_enabled(str_lit("a"), nullptr)) {
+ error(call, "missing required target feature \"a\" for atomics, enable it by setting a different -microarch or explicitly adding it through -target-features");
+ }
+ }
+ }
+
switch (id) {
default:
GB_PANIC("Implement built-in procedure: %.*s", LIT(builtin_name));
@@ -5665,6 +5673,59 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As
break;
}
break;
+
+ case BuiltinProc_type_has_shared_fields:
+ {
+ Type *u = check_type(c, ce->args[0]);
+ Type *ut = base_type(u);
+ if (ut == nullptr || ut == t_invalid) {
+ error(ce->args[0], "Expected a type for '%.*s'", LIT(builtin_name));
+ return false;
+ }
+ if (ut->kind != Type_Struct || ut->Struct.soa_kind != StructSoa_None) {
+ gbString t = type_to_string(ut);
+ error(ce->args[0], "Expected a struct type for '%.*s', got %s", LIT(builtin_name), t);
+ gb_string_free(t);
+ return false;
+ }
+
+ Type *v = check_type(c, ce->args[1]);
+ Type *vt = base_type(v);
+ if (vt == nullptr || vt == t_invalid) {
+ error(ce->args[1], "Expected a type for '%.*s'", LIT(builtin_name));
+ return false;
+ }
+ if (vt->kind != Type_Struct || vt->Struct.soa_kind != StructSoa_None) {
+ gbString t = type_to_string(vt);
+ error(ce->args[1], "Expected a struct type for '%.*s', got %s", LIT(builtin_name), t);
+ gb_string_free(t);
+ return false;
+ }
+
+ bool is_shared = true;
+
+ for (Entity *v_field : vt->Struct.fields) {
+ bool found = false;
+ for (Entity *u_field : ut->Struct.fields) {
+ if (v_field->token.string == u_field->token.string &&
+ are_types_identical(v_field->type, u_field->type)) {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ is_shared = false;
+ break;
+ }
+ }
+
+ operand->mode = Addressing_Constant;
+ operand->value = exact_value_bool(is_shared);
+ operand->type = t_untyped_bool;
+ break;
+ }
+
case BuiltinProc_type_field_type:
{
Operand op = {};
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 9cdba2710..7ac09ac56 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -1180,11 +1180,15 @@ gb_internal void check_assignment(CheckerContext *c, Operand *operand, Type *typ
LIT(article),
LIT(context_name));
} else {
+ ERROR_BLOCK();
error(operand->expr,
"Cannot assign '%s', a type, to %.*s%.*s",
op_type_str,
LIT(article),
LIT(context_name));
+ if (type && are_types_identical(type, t_any)) {
+ error_line("\tSuggestion: 'typeid_of(%s)'", expr_str);
+ }
}
break;
default:
@@ -3782,10 +3786,10 @@ gb_internal void check_binary_expr(CheckerContext *c, Operand *x, Ast *node, Typ
// NOTE(bill): Allow comparisons between types
if (is_ise_expr(be->left)) {
// Evalute the right before the left for an '.X' expression
- check_expr_or_type(c, y, be->right, type_hint);
+ check_expr_or_type(c, y, be->right, nullptr /* ignore type hint */);
check_expr_or_type(c, x, be->left, y->type);
} else {
- check_expr_or_type(c, x, be->left, type_hint);
+ check_expr_or_type(c, x, be->left, nullptr /* ignore type hint */);
check_expr_or_type(c, y, be->right, x->type);
}
bool xt = x->mode == Addressing_Type;
@@ -4658,7 +4662,8 @@ gb_internal bool check_index_value(CheckerContext *c, Type *main_type, bool open
check_expr_with_type_hint(c, &operand, index_value, type_hint);
if (operand.mode == Addressing_Invalid) {
if (value) *value = 0;
- return false;
+ // NOTE(bill): return true here to propagate the errors better
+ return true;
}
Type *index_type = t_int;
@@ -4879,7 +4884,7 @@ gb_internal ExactValue get_constant_field_single(CheckerContext *c, ExactValue v
TypeAndValue tav = fv->value->tav;
if (success_) *success_ = true;
if (finish_) *finish_ = false;
- return tav.value;;
+ return tav.value;
}
}
@@ -4954,7 +4959,6 @@ gb_internal ExactValue get_constant_field(CheckerContext *c, Operand const *oper
return value;
}
}
-
if (success_) *success_ = true;
return value;
} else if (value.kind == ExactValue_Quaternion) {
@@ -7625,7 +7629,7 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O
gbString s = gb_string_make_reserve(heap_allocator(), e->token.string.len+3);
s = gb_string_append_fmt(s, "%.*s(", LIT(e->token.string));
- TypeTuple *tuple = get_record_polymorphic_params(e->type);
+ TypeTuple *tuple = get_record_polymorphic_params(bt);
if (tuple != nullptr) for_array(i, tuple->variables) {
Entity *v = tuple->variables[i];
String name = v->token.string;
@@ -7640,8 +7644,10 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O
s = write_type_to_string(s, v->type, false);
}
} else if (v->kind == Entity_Constant) {
- s = gb_string_append_fmt(s, "=");
- s = write_exact_value_to_string(s, v->Constant.value);
+ if (v->Constant.value.kind != ExactValue_Invalid) {
+ s = gb_string_append_fmt(s, "=");
+ s = write_exact_value_to_string(s, v->Constant.value);
+ }
}
}
s = gb_string_append_fmt(s, ")");
@@ -10055,6 +10061,22 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast *
is_constant = o->mode == Addressing_Constant;
}
+ if (elem->kind == Ast_BinaryExpr) {
+ switch (elem->BinaryExpr.op.kind) {
+ case Token_Or:
+ {
+ gbString x = expr_to_string(elem->BinaryExpr.left);
+ gbString y = expr_to_string(elem->BinaryExpr.right);
+ gbString e = expr_to_string(elem);
+ error(elem, "Was the following intended? '%s, %s'; if not, surround the expression with parentheses '(%s)'", x, y, e);
+ gb_string_free(e);
+ gb_string_free(y);
+ gb_string_free(x);
+ }
+ break;
+ }
+ }
+
check_assignment(c, o, t->BitSet.elem, str_lit("bit_set literal"));
if (o->mode == Addressing_Constant) {
i64 lower = t->BitSet.lower;
@@ -10544,7 +10566,8 @@ gb_internal ExprKind check_index_expr(CheckerContext *c, Operand *o, Ast *node,
o->expr = node;
return kind;
} else if (ok && !is_type_matrix(t)) {
- ExactValue value = type_and_value_of_expr(ie->expr).value;
+ TypeAndValue tav = type_and_value_of_expr(ie->expr);
+ ExactValue value = tav.value;
o->mode = Addressing_Constant;
bool success = false;
bool finish = false;
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp
index 12156df01..c8717ba98 100644
--- a/src/check_stmt.cpp
+++ b/src/check_stmt.cpp
@@ -199,6 +199,9 @@ gb_internal bool check_has_break(Ast *stmt, String const &label, bool implicit)
}
break;
+ case Ast_DeferStmt:
+ return check_has_break(stmt->DeferStmt.stmt, label, implicit);
+
case Ast_BlockStmt:
return check_has_break_list(stmt->BlockStmt.stmts, label, implicit);
@@ -1695,7 +1698,7 @@ gb_internal void check_range_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags)
}
}
}
- bool is_ptr = type_deref(operand.type);
+ bool is_ptr = is_type_pointer(type_deref(operand.type));
Type *t = base_type(type_deref(operand.type));
switch (t->kind) {
@@ -1735,6 +1738,7 @@ gb_internal void check_range_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags)
break;
case Type_EnumeratedArray:
+ is_possibly_addressable = operand.mode == Addressing_Variable || is_ptr;
array_add(&vals, t->EnumeratedArray.elem);
array_add(&vals, t->EnumeratedArray.index);
break;
@@ -2706,6 +2710,7 @@ gb_internal void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags)
error(bs->label, "A branch statement's label name must be an identifier");
return;
}
+
Ast *ident = bs->label;
String name = ident->Ident.token.string;
Operand o = {};
@@ -2737,6 +2742,10 @@ gb_internal void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags)
break;
}
+
+ if (ctx->in_defer) {
+ error(bs->label, "A labelled '%.*s' cannot be used within a 'defer'", LIT(token.string));
+ }
}
case_end;
diff --git a/src/checker.cpp b/src/checker.cpp
index b24a7afdb..fdc1ce840 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -3174,8 +3174,8 @@ gb_internal DECL_ATTRIBUTE_PROC(foreign_block_decl_attribute) {
return true;
} else if (name == "link_prefix") {
if (ev.kind == ExactValue_String) {
- String link_prefix = ev.value_string;
- if (!is_foreign_name_valid(link_prefix)) {
+ String link_prefix = string_trim_whitespace(ev.value_string);
+ if (link_prefix.len != 0 && !is_foreign_name_valid(link_prefix)) {
error(elem, "Invalid link prefix: '%.*s'", LIT(link_prefix));
} else {
c->foreign_context.link_prefix = link_prefix;
@@ -3186,8 +3186,8 @@ gb_internal DECL_ATTRIBUTE_PROC(foreign_block_decl_attribute) {
return true;
} else if (name == "link_suffix") {
if (ev.kind == ExactValue_String) {
- String link_suffix = ev.value_string;
- if (!is_foreign_name_valid(link_suffix)) {
+ String link_suffix = string_trim_whitespace(ev.value_string);
+ if (link_suffix.len != 0 && !is_foreign_name_valid(link_suffix)) {
error(elem, "Invalid link suffix: '%.*s'", LIT(link_suffix));
} else {
c->foreign_context.link_suffix = link_suffix;
@@ -3489,7 +3489,7 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) {
if (ev.kind == ExactValue_String) {
ac->link_prefix = ev.value_string;
- if (!is_foreign_name_valid(ac->link_prefix)) {
+ if (ac->link_prefix.len != 0 && !is_foreign_name_valid(ac->link_prefix)) {
error(elem, "Invalid link prefix: %.*s", LIT(ac->link_prefix));
}
} else {
@@ -3501,7 +3501,7 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) {
if (ev.kind == ExactValue_String) {
ac->link_suffix = ev.value_string;
- if (!is_foreign_name_valid(ac->link_suffix)) {
+ if (ac->link_suffix.len != 0 && !is_foreign_name_valid(ac->link_suffix)) {
error(elem, "Invalid link suffix: %.*s", LIT(ac->link_suffix));
}
} else {
@@ -3774,7 +3774,7 @@ gb_internal DECL_ATTRIBUTE_PROC(var_decl_attribute) {
ExactValue ev = check_decl_attribute_value(c, value);
if (ev.kind == ExactValue_String) {
ac->link_prefix = ev.value_string;
- if (!is_foreign_name_valid(ac->link_prefix)) {
+ if (ac->link_prefix.len != 0 && !is_foreign_name_valid(ac->link_prefix)) {
error(elem, "Invalid link prefix: %.*s", LIT(ac->link_prefix));
}
} else {
@@ -3785,7 +3785,7 @@ gb_internal DECL_ATTRIBUTE_PROC(var_decl_attribute) {
ExactValue ev = check_decl_attribute_value(c, value);
if (ev.kind == ExactValue_String) {
ac->link_suffix = ev.value_string;
- if (!is_foreign_name_valid(ac->link_suffix)) {
+ if (ac->link_suffix.len != 0 && !is_foreign_name_valid(ac->link_suffix)) {
error(elem, "Invalid link suffix: %.*s", LIT(ac->link_suffix));
}
} else {
@@ -4532,7 +4532,9 @@ gb_internal void check_collect_entities(CheckerContext *c, Slice<Ast *> const &n
case_end;
case_ast_node(fb, ForeignBlockDecl, decl);
- check_add_foreign_block_decl(c, decl);
+ if (curr_file != nullptr) {
+ array_add(&curr_file->delayed_decls_queues[AstDelayQueue_ForeignBlock], decl);
+ }
case_end;
default:
@@ -4548,6 +4550,14 @@ gb_internal void check_collect_entities(CheckerContext *c, Slice<Ast *> const &n
// NOTE(bill): 'when' stmts need to be handled after the other as the condition may refer to something
// declared after this stmt in source
if (curr_file == nullptr) {
+ // For 'foreign' block statements that are not in file scope.
+ for_array(decl_index, nodes) {
+ Ast *decl = nodes[decl_index];
+ if (decl->kind == Ast_ForeignBlockDecl) {
+ check_add_foreign_block_decl(c, decl);
+ }
+ }
+
for_array(decl_index, nodes) {
Ast *decl = nodes[decl_index];
if (decl->kind == Ast_WhenStmt) {
@@ -5512,6 +5522,16 @@ gb_internal void check_import_entities(Checker *c) {
AstFile *f = pkg->files[i];
reset_checker_context(&ctx, f, &untyped);
+ for (Ast *decl : f->delayed_decls_queues[AstDelayQueue_ForeignBlock]) {
+ check_add_foreign_block_decl(&ctx, decl);
+ }
+ array_clear(&f->delayed_decls_queues[AstDelayQueue_ForeignBlock]);
+ }
+
+ for_array(i, pkg->files) {
+ AstFile *f = pkg->files[i];
+ reset_checker_context(&ctx, f, &untyped);
+
for (Ast *expr : f->delayed_decls_queues[AstDelayQueue_Expr]) {
Operand o = {};
check_expr(&ctx, &o, expr);
diff --git a/src/checker_builtin_procs.hpp b/src/checker_builtin_procs.hpp
index ef07938c7..2dfd570e4 100644
--- a/src/checker_builtin_procs.hpp
+++ b/src/checker_builtin_procs.hpp
@@ -99,6 +99,7 @@ enum BuiltinProcId {
BuiltinProc_prefetch_write_instruction,
BuiltinProc_prefetch_write_data,
+BuiltinProc__atomic_begin,
BuiltinProc_atomic_type_is_lock_free,
BuiltinProc_atomic_thread_fence,
BuiltinProc_atomic_signal_fence,
@@ -124,6 +125,7 @@ enum BuiltinProcId {
BuiltinProc_atomic_compare_exchange_strong_explicit,
BuiltinProc_atomic_compare_exchange_weak,
BuiltinProc_atomic_compare_exchange_weak_explicit,
+BuiltinProc__atomic_end,
BuiltinProc_fixed_point_mul,
BuiltinProc_fixed_point_div,
@@ -313,6 +315,8 @@ BuiltinProc__type_simple_boolean_end,
BuiltinProc_type_map_info,
BuiltinProc_type_map_cell_info,
+ BuiltinProc_type_has_shared_fields,
+
BuiltinProc__type_end,
BuiltinProc_procedure_of,
@@ -436,6 +440,7 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = {
{STR_LIT("prefetch_write_instruction"), 2, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
{STR_LIT("prefetch_write_data"), 2, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
+ {STR_LIT(""), 0, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
{STR_LIT("atomic_type_is_lock_free"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
{STR_LIT("atomic_thread_fence"), 1, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
{STR_LIT("atomic_signal_fence"), 1, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
@@ -461,6 +466,7 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = {
{STR_LIT("atomic_compare_exchange_strong_explicit"), 5, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true},
{STR_LIT("atomic_compare_exchange_weak"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true},
{STR_LIT("atomic_compare_exchange_weak_explicit"), 5, false, Expr_Expr, BuiltinProcPkg_intrinsics, false, true},
+ {STR_LIT(""), 0, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
{STR_LIT("fixed_point_mul"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
{STR_LIT("fixed_point_div"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
@@ -647,6 +653,7 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = {
{STR_LIT("type_map_info"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
{STR_LIT("type_map_cell_info"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
+ {STR_LIT("type_has_shared_fields"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
{STR_LIT(""), 0, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
diff --git a/src/llvm_backend_debug.cpp b/src/llvm_backend_debug.cpp
index c896f889d..5d90dccea 100644
--- a/src/llvm_backend_debug.cpp
+++ b/src/llvm_backend_debug.cpp
@@ -55,6 +55,16 @@ gb_internal void lb_debug_file_line(lbModule *m, Ast *node, LLVMMetadataRef *fil
}
}
+gb_internal LLVMMetadataRef lb_debug_procedure_parameters(lbModule *m, Type *type) {
+ if (is_type_proc(type)) {
+ return lb_debug_type(m, t_rawptr);
+ }
+ if (type->kind == Type_Tuple && type->Tuple.variables.count == 1) {
+ return lb_debug_procedure_parameters(m, type->Tuple.variables[0]->type);
+ }
+ return lb_debug_type(m, type);
+}
+
gb_internal LLVMMetadataRef lb_debug_type_internal_proc(lbModule *m, Type *type) {
i64 size = type_size_of(type); // Check size
gb_unused(size);
@@ -78,7 +88,7 @@ gb_internal LLVMMetadataRef lb_debug_type_internal_proc(lbModule *m, Type *type)
if (type->Proc.result_count == 0) {
parameters[param_index++] = nullptr;
} else {
- parameters[param_index++] = lb_debug_type(m, type->Proc.results);
+ parameters[param_index++] = lb_debug_procedure_parameters(m, type->Proc.results);
}
LLVMMetadataRef file = nullptr;
@@ -88,7 +98,7 @@ gb_internal LLVMMetadataRef lb_debug_type_internal_proc(lbModule *m, Type *type)
if (e->kind != Entity_Variable) {
continue;
}
- parameters[param_index] = lb_debug_type(m, e->type);
+ parameters[param_index] = lb_debug_procedure_parameters(m, e->type);
param_index += 1;
}
@@ -969,7 +979,7 @@ gb_internal LLVMMetadataRef lb_debug_type(lbModule *m, Type *type) {
return lb_debug_struct(m, type, bt, name, scope, file, line);
}
- case Type_Struct: return lb_debug_struct(m, type, base_type(type), name, scope, file, line);
+ case Type_Struct: return lb_debug_struct(m, type, bt, name, scope, file, line);
case Type_Slice: return lb_debug_slice(m, type, name, scope, file, line);
case Type_DynamicArray: return lb_debug_dynamic_array(m, type, name, scope, file, line);
case Type_Union: return lb_debug_union(m, type, name, scope, file, line);
diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp
index 68c1e9d1e..f63c42ab9 100644
--- a/src/llvm_backend_utility.cpp
+++ b/src/llvm_backend_utility.cpp
@@ -263,7 +263,7 @@ gb_internal lbValue lb_emit_transmute(lbProcedure *p, lbValue value, Type *t) {
if (is_type_simd_vector(src) && is_type_simd_vector(dst)) {
res.value = LLVMBuildBitCast(p->builder, value.value, lb_type(p->module, t), "");
return res;
- } else if (is_type_array_like(src) && is_type_simd_vector(dst)) {
+ } else if (is_type_array_like(src) && (is_type_simd_vector(dst) || is_type_integer_128bit(dst))) {
unsigned align = cast(unsigned)gb_max(type_align_of(src), type_align_of(dst));
lbValue ptr = lb_address_from_load_or_generate_local(p, value);
if (lb_try_update_alignment(ptr, align)) {
diff --git a/src/parser.cpp b/src/parser.cpp
index 5796012d9..e3143dd33 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -1921,6 +1921,9 @@ gb_internal Array<Ast *> parse_enum_field_list(AstFile *f) {
f->curr_token.kind != Token_EOF) {
CommentGroup *docs = f->lead_comment;
CommentGroup *comment = nullptr;
+
+ parse_enforce_tabs(f);
+
Ast *name = parse_value(f);
Ast *value = nullptr;
if (f->curr_token.kind == Token_Eq) {
@@ -2259,6 +2262,7 @@ gb_internal Array<Ast *> parse_union_variant_list(AstFile *f) {
auto variants = array_make<Ast *>(ast_allocator(f));
while (f->curr_token.kind != Token_CloseBrace &&
f->curr_token.kind != Token_EOF) {
+ parse_enforce_tabs(f);
Ast *type = parse_type(f);
if (type->kind != Ast_BadExpr) {
array_add(&variants, type);
@@ -4274,6 +4278,7 @@ gb_internal Ast *parse_field_list(AstFile *f, isize *name_count_, u32 allowed_fl
while (f->curr_token.kind != follow &&
f->curr_token.kind != Token_Colon &&
f->curr_token.kind != Token_EOF) {
+ if (!is_signature) parse_enforce_tabs(f);
u32 flags = parse_field_prefixes(f);
Ast *param = parse_var_type(f, allow_ellipsis, allow_typeid_token);
if (param->kind == Ast_Ellipsis) {
@@ -4363,6 +4368,8 @@ gb_internal Ast *parse_field_list(AstFile *f, isize *name_count_, u32 allowed_fl
f->curr_token.kind != Token_EOF &&
f->curr_token.kind != Token_Semicolon) {
CommentGroup *docs = f->lead_comment;
+
+ if (!is_signature) parse_enforce_tabs(f);
u32 set_flags = parse_field_prefixes(f);
Token tag = {};
Array<Ast *> names = parse_ident_list(f, allow_poly_names);
@@ -4532,6 +4539,10 @@ gb_internal Ast *parse_if_stmt(AstFile *f) {
return ast_bad_stmt(f, f->curr_token, f->curr_token);
}
+ Ast *top_if_stmt = nullptr;
+
+ Ast *prev_if_stmt = nullptr;
+if_else_chain:;
Token token = expect_token(f, Token_if);
Ast *init = nullptr;
Ast *cond = nullptr;
@@ -4573,12 +4584,24 @@ gb_internal Ast *parse_if_stmt(AstFile *f) {
ignore_strict_style = true;
}
skip_possible_newline_for_literal(f, ignore_strict_style);
+
+ Ast *curr_if_stmt = ast_if_stmt(f, token, init, cond, body, nullptr);
+ if (top_if_stmt == nullptr) {
+ top_if_stmt = curr_if_stmt;
+ }
+ if (prev_if_stmt != nullptr) {
+ prev_if_stmt->IfStmt.else_stmt = curr_if_stmt;
+ }
+
if (f->curr_token.kind == Token_else) {
Token else_token = expect_token(f, Token_else);
switch (f->curr_token.kind) {
case Token_if:
- else_stmt = parse_if_stmt(f);
- break;
+ // NOTE(bill): Instead of relying on recursive descent for an if-else chain
+ // we can just inline the tail-recursion manually with a simple loop like
+ // construct using a `goto`
+ prev_if_stmt = curr_if_stmt;
+ goto if_else_chain;
case Token_OpenBrace:
else_stmt = parse_block_stmt(f, false);
break;
@@ -4593,7 +4616,9 @@ gb_internal Ast *parse_if_stmt(AstFile *f) {
}
}
- return ast_if_stmt(f, token, init, cond, body, else_stmt);
+ curr_if_stmt->IfStmt.else_stmt = else_stmt;
+
+ return top_if_stmt;
}
gb_internal Ast *parse_when_stmt(AstFile *f) {
@@ -5357,6 +5382,11 @@ gb_internal u64 check_vet_flags(AstFile *file) {
gb_internal void parse_enforce_tabs(AstFile *f) {
+ // Checks to see if tabs have been used for indentation
+ if ((check_vet_flags(f) & VetFlag_Tabs) == 0) {
+ return;
+ }
+
Token prev = f->prev_token;
Token curr = f->curr_token;
if (prev.pos.line < curr.pos.line) {
@@ -5373,6 +5403,10 @@ gb_internal void parse_enforce_tabs(AstFile *f) {
isize len = end-it;
for (isize i = 0; i < len; i++) {
+ if (it[i] == '/') {
+ // ignore comments
+ break;
+ }
if (it[i] == ' ') {
syntax_error(curr, "With '-vet-tabs', tabs must be used for indentation");
break;
@@ -5387,11 +5421,7 @@ gb_internal Array<Ast *> parse_stmt_list(AstFile *f) {
while (f->curr_token.kind != Token_case &&
f->curr_token.kind != Token_CloseBrace &&
f->curr_token.kind != Token_EOF) {
-
- // Checks to see if tabs have been used for indentation
- if (check_vet_flags(f) & VetFlag_Tabs) {
- parse_enforce_tabs(f);
- }
+ parse_enforce_tabs(f);
Ast *stmt = parse_stmt(f);
if (stmt && stmt->kind != Ast_EmptyStmt) {
@@ -6416,7 +6446,7 @@ gb_internal bool parse_file(Parser *p, AstFile *f) {
}
f->total_file_decl_count += calc_decl_count(stmt);
- if (stmt->kind == Ast_WhenStmt || stmt->kind == Ast_ExprStmt || stmt->kind == Ast_ImportDecl) {
+ if (stmt->kind == Ast_WhenStmt || stmt->kind == Ast_ExprStmt || stmt->kind == Ast_ImportDecl || stmt->kind == Ast_ForeignBlockDecl) {
f->delayed_decl_count += 1;
}
}
diff --git a/src/parser.hpp b/src/parser.hpp
index 565a8e621..d5117a31e 100644
--- a/src/parser.hpp
+++ b/src/parser.hpp
@@ -82,6 +82,7 @@ enum AstFileFlag : u32 {
enum AstDelayQueueKind {
AstDelayQueue_Import,
AstDelayQueue_Expr,
+ AstDelayQueue_ForeignBlock,
AstDelayQueue_COUNT,
};
@@ -885,4 +886,7 @@ gb_internal gb_inline gbAllocator ast_allocator(AstFile *f) {
gb_internal Ast *alloc_ast_node(AstFile *f, AstKind kind);
gb_internal gbString expr_to_string(Ast *expression);
-gb_internal bool allow_field_separator(AstFile *f); \ No newline at end of file
+gb_internal bool allow_field_separator(AstFile *f);
+
+
+gb_internal void parse_enforce_tabs(AstFile *f); \ No newline at end of file
diff --git a/tests/core/c/libc/test_core_libc_complex_pow.odin b/tests/core/c/libc/test_core_libc_complex_pow.odin
index cd50c8f6a..e308cc171 100644
--- a/tests/core/c/libc/test_core_libc_complex_pow.odin
+++ b/tests/core/c/libc/test_core_libc_complex_pow.odin
@@ -69,18 +69,18 @@ test_libc_pow_binding :: proc(t: ^testing.T, $LIBC_COMPLEX:typeid, $F:typeid, po
complex_power := LIBC_COMPLEX(complex(F(n), F(0.)))
result := pow(complex_base, complex_power)
switch n%%4 {
- case 0:
- expected_real = value
- expected_imag = 0.
- case 1:
- expected_real = 0.
- expected_imag = value
- case 2:
- expected_real = -value
- expected_imag = 0.
- case 3:
- expected_real = 0.
- expected_imag = -value
+ case 0:
+ expected_real = value
+ expected_imag = 0.
+ case 1:
+ expected_real = 0.
+ expected_imag = value
+ case 2:
+ expected_real = -value
+ expected_imag = 0.
+ case 3:
+ expected_real = 0.
+ expected_imag = -value
}
testing.expectf(t, isclose(t, expected_real, F(real(result)), rtol, atol), "ftype:%T, n:%v reldiff(%v, re(%v)) is greater than specified rtol:%e", F{}, n, expected_real, result, rtol)
testing.expectf(t, isclose(t, expected_imag, F(imag(result)), rtol, atol), "ftype:%T, n:%v reldiff(%v, im(%v)) is greater than specified rtol:%e", F{}, n, expected_imag, result, rtol)
diff --git a/tests/core/container/test_core_rbtree.odin b/tests/core/container/test_core_rbtree.odin
index b686ef6dd..bdd23691c 100644
--- a/tests/core/container/test_core_rbtree.odin
+++ b/tests/core/container/test_core_rbtree.odin
@@ -187,7 +187,7 @@ validate_rbtree :: proc(t: ^testing.T, tree: ^$T/rb.Tree($Key, $Value)) {
}
verify_rbtree_propery_1 :: proc(t: ^testing.T, n: ^$N/rb.Node($Key, $Value)) {
- testing.expect(t, rb.node_color(n) == .Black || rb.node_color(n) == .Red, "Property #1: Each node is either red or black.")
+ testing.expect(t, rb.node_color(n) == .Black || rb.node_color(n) == .Red, "Property #1: Each node is either red or black.")
if n == nil {
return
}
diff --git a/tests/core/encoding/json/test_core_json.odin b/tests/core/encoding/json/test_core_json.odin
index 42ac9ce0f..f588d34fa 100644
--- a/tests/core/encoding/json/test_core_json.odin
+++ b/tests/core/encoding/json/test_core_json.odin
@@ -429,7 +429,7 @@ map_with_integer_keys :: proc(t: ^testing.T) {
defer delete_map(my_map2)
unmarshal_err := json.unmarshal(marshaled_data, &my_map2)
- defer for key, item in my_map2 {
+ defer for _, item in my_map2 {
runtime.delete_string(item)
}
testing.expectf(t, unmarshal_err == nil, "Expected `json.unmarshal` to return nil, got %v", unmarshal_err)
diff --git a/tests/core/encoding/xml/test_core_xml.odin b/tests/core/encoding/xml/test_core_xml.odin
index b29431e10..c0e4329bd 100644
--- a/tests/core/encoding/xml/test_core_xml.odin
+++ b/tests/core/encoding/xml/test_core_xml.odin
@@ -241,7 +241,7 @@ doc_to_string :: proc(doc: ^xml.Document) -> (result: string) {
written += fmt.wprintf(writer, "[DOCTYPE] %v\n", doc.doctype.ident)
if len(doc.doctype.rest) > 0 {
- fmt.wprintf(writer, "\t%v\n", doc.doctype.rest)
+ fmt.wprintf(writer, "\t%v\n", doc.doctype.rest)
}
}
@@ -250,10 +250,10 @@ doc_to_string :: proc(doc: ^xml.Document) -> (result: string) {
}
if doc.element_count > 0 {
- fmt.wprintln(writer, " --- ")
- print_element(writer, doc, 0)
- fmt.wprintln(writer, " --- ")
- }
+ fmt.wprintln(writer, " --- ")
+ print_element(writer, doc, 0)
+ fmt.wprintln(writer, " --- ")
+ }
return written, .None
}
diff --git a/tests/core/runtime/test_core_runtime.odin b/tests/core/runtime/test_core_runtime.odin
index 008146dcf..f39caff48 100644
--- a/tests/core/runtime/test_core_runtime.odin
+++ b/tests/core/runtime/test_core_runtime.odin
@@ -11,6 +11,7 @@ import "core:testing"
test_temp_allocator_alignment_boundary :: proc(t: ^testing.T) {
arena: runtime.Arena
context.allocator = runtime.arena_allocator(&arena)
+ defer runtime.arena_destroy(&arena)
_, _ = mem.alloc(int(runtime.DEFAULT_ARENA_GROWING_MINIMUM_BLOCK_SIZE)-120)
_, err := mem.alloc(112, 32)
@@ -22,6 +23,7 @@ test_temp_allocator_alignment_boundary :: proc(t: ^testing.T) {
test_temp_allocator_big_alloc_and_alignment :: proc(t: ^testing.T) {
arena: runtime.Arena
context.allocator = runtime.arena_allocator(&arena)
+ defer runtime.arena_destroy(&arena)
mappy: map[[8]int]int
err := reserve(&mappy, 50000)
@@ -32,6 +34,7 @@ test_temp_allocator_big_alloc_and_alignment :: proc(t: ^testing.T) {
test_temp_allocator_returns_correct_size :: proc(t: ^testing.T) {
arena: runtime.Arena
context.allocator = runtime.arena_allocator(&arena)
+ defer runtime.arena_destroy(&arena)
bytes, err := mem.alloc_bytes(10, 16)
testing.expect(t, err == nil)
diff --git a/tests/core/unicode/test_core_unicode.odin b/tests/core/unicode/test_core_unicode.odin
index a1f6ac934..30a40b30b 100644
--- a/tests/core/unicode/test_core_unicode.odin
+++ b/tests/core/unicode/test_core_unicode.odin
@@ -16,8 +16,7 @@ run_test_cases :: proc(t: ^testing.T, test_cases: []Test_Case, loc := #caller_lo
result, _, _ := utf8.grapheme_count(c.str)
if !testing.expectf(t, result == c.expected_clusters,
"(#% 4i) graphemes: %i != %i, %q %s", i, result, c.expected_clusters, c.str, c.str,
- loc = loc)
- {
+ loc = loc) {
failed += 1
}
}
diff --git a/vendor/commonmark/cmark.odin b/vendor/commonmark/cmark.odin
index 50544b9bd..2fdf1387c 100644
--- a/vendor/commonmark/cmark.odin
+++ b/vendor/commonmark/cmark.odin
@@ -338,7 +338,7 @@ foreign lib {
node_set_list_tight :: proc(node: ^Node, tight: b32) -> (success: b32) ---
// Returns the info string from a fenced code block.
- get_fence_info :: proc(node: ^Node) -> (fence_info: cstring) ---
+ node_get_fence_info :: proc(node: ^Node) -> (fence_info: cstring) ---
// Sets the info string in a fenced code block, returning `true` on success and `false` on failure.
node_set_fence_info :: proc(node: ^Node, fence_info: cstring) -> (success: b32) ---
diff --git a/vendor/directx/d3d12/d3d12.odin b/vendor/directx/d3d12/d3d12.odin
index e33845b73..4e51d5203 100644
--- a/vendor/directx/d3d12/d3d12.odin
+++ b/vendor/directx/d3d12/d3d12.odin
@@ -3459,10 +3459,10 @@ DRED_DEVICE_STATE :: enum i32 {
}
DRED_PAGE_FAULT_OUTPUT2 :: struct {
- PageFaultVA: GPU_VIRTUAL_ADDRESS,
- pHeadExistingAllocationNode: ^DRED_ALLOCATION_NODE1,
- pHeadRecentFreedAllocationNode: ^DRED_ALLOCATION_NODE1,
- PageFaultFlags: DRED_PAGE_FAULT_FLAGS,
+ PageFaultVA: GPU_VIRTUAL_ADDRESS,
+ pHeadExistingAllocationNode: ^DRED_ALLOCATION_NODE1,
+ pHeadRecentFreedAllocationNode: ^DRED_ALLOCATION_NODE1,
+ PageFaultFlags: DRED_PAGE_FAULT_FLAGS,
}
DEVICE_REMOVED_EXTENDED_DATA1 :: struct {
diff --git a/vendor/directx/dxc/dxcapi.odin b/vendor/directx/dxc/dxcapi.odin
index 79d305ea0..23dbc8f30 100644
--- a/vendor/directx/dxc/dxcapi.odin
+++ b/vendor/directx/dxc/dxcapi.odin
@@ -476,8 +476,8 @@ IVersionInfo3_VTable :: struct {
}
ArgPair :: struct {
- pName: wstring,
- pValue: wstring,
+ pName: wstring,
+ pValue: wstring,
}
IPdbUtils_UUID_STRING :: "E6C9647E-9D6A-4C3B-B94C-524B5A6C343D"
diff --git a/vendor/lua/5.4/lua.odin b/vendor/lua/5.4/lua.odin
index 9be8fea55..a45de4d49 100644
--- a/vendor/lua/5.4/lua.odin
+++ b/vendor/lua/5.4/lua.odin
@@ -575,7 +575,7 @@ PRELOAD_TABLE :: "_PRELOAD"
L_Reg :: struct {
name: cstring,
- func: CFunction,
+ func: CFunction,
}
L_NUMSIZES :: size_of(Integer)*16 + size_of(Number)
diff --git a/vendor/miniaudio/decoding.odin b/vendor/miniaudio/decoding.odin
index 4860680c9..f1fa279ac 100644
--- a/vendor/miniaudio/decoding.odin
+++ b/vendor/miniaudio/decoding.odin
@@ -69,9 +69,9 @@ decoder :: struct {
outputSampleRate: u32,
converter: data_converter, /* <-- Data conversion is achieved by running frames through this. */
pInputCache: rawptr, /* In input format. Can be null if it's not needed. */
- inputCacheCap: u64, /* The capacity of the input cache. */
- inputCacheConsumed: u64, /* The number of frames that have been consumed in the cache. Used for determining the next valid frame. */
- inputCacheRemaining: u64, /* The number of valid frames remaining in the cahce. */
+ inputCacheCap: u64, /* The capacity of the input cache. */
+ inputCacheConsumed: u64, /* The number of frames that have been consumed in the cache. Used for determining the next valid frame. */
+ inputCacheRemaining: u64, /* The number of valid frames remaining in the cahce. */
allocationCallbacks: allocation_callbacks,
data: struct #raw_union {
vfs: struct {
diff --git a/vendor/miniaudio/device_io_types.odin b/vendor/miniaudio/device_io_types.odin
index 857e53ff5..eae804720 100644
--- a/vendor/miniaudio/device_io_types.odin
+++ b/vendor/miniaudio/device_io_types.odin
@@ -381,7 +381,7 @@ device_config :: struct {
noPreSilencedOutputBuffer: b8, /* When set to true, the contents of the output buffer passed into the data callback will be left undefined rather than initialized to zero. */
noClip: b8, /* When set to true, the contents of the output buffer passed into the data callback will not be clipped after returning. Only applies when the playback sample format is f32. */
noDisableDenormals: b8, /* Do not disable denormals when firing the data callback. */
- noFixedSizedCallback: b8, /* Disables strict fixed-sized data callbacks. Setting this to true will result in the period size being treated only as a hint to the backend. This is an optimization for those who don't need fixed sized callbacks. */
+ noFixedSizedCallback: b8, /* Disables strict fixed-sized data callbacks. Setting this to true will result in the period size being treated only as a hint to the backend. This is an optimization for those who don't need fixed sized callbacks. */
dataCallback: device_data_proc,
notificationCallback: device_notification_proc,
stopCallback: stop_proc,
@@ -813,7 +813,7 @@ context_type :: struct {
/*pa_mainloop**/ pMainLoop: rawptr,
/*pa_context**/ pPulseContext: rawptr,
pApplicationName: cstring, /* Set when the context is initialized. Used by devices for their local pa_context objects. */
- pServerName: cstring, /* Set when the context is initialized. Used by devices for their local pa_context objects. */
+ pServerName: cstring, /* Set when the context is initialized. Used by devices for their local pa_context objects. */
} when SUPPORT_PULSEAUDIO else struct {}),
jack: (struct {
@@ -1140,7 +1140,7 @@ device :: struct {
pulse: (struct {
/*pa_mainloop**/ pMainLoop: rawptr,
- /*pa_context**/ pPulseContext: rawptr,
+ /*pa_context**/ pPulseContext: rawptr,
/*pa_stream**/ pStreamPlayback: rawptr,
/*pa_stream**/ pStreamCapture: rawptr,
} when SUPPORT_PULSEAUDIO else struct {}),
diff --git a/vendor/raylib/raylib.odin b/vendor/raylib/raylib.odin
index cff590b7f..8d26c8824 100644
--- a/vendor/raylib/raylib.odin
+++ b/vendor/raylib/raylib.odin
@@ -84,7 +84,6 @@ package raylib
import "core:c"
import "core:fmt"
import "core:mem"
-import "core:strings"
import "core:math/linalg"
_ :: linalg
@@ -447,9 +446,9 @@ VrStereoConfig :: struct #align(4) {
// File path list
FilePathList :: struct {
- capacity: c.uint, // Filepaths max entries
- count: c.uint, // Filepaths entries count
- paths: [^]cstring, // Filepaths entries
+ capacity: c.uint, // Filepaths max entries
+ count: c.uint, // Filepaths entries count
+ paths: [^]cstring, // Filepaths entries
}
// Automation event
@@ -1029,7 +1028,6 @@ foreign lib {
SetTraceLogLevel :: proc(logLevel: TraceLogLevel) --- // Set the current threshold (minimum) log level
MemAlloc :: proc(size: c.uint) -> rawptr --- // Internal memory allocator
MemRealloc :: proc(ptr: rawptr, size: c.uint) -> rawptr --- // Internal memory reallocator
- MemFree :: proc(ptr: rawptr) --- // Internal memory free
// Set custom callbacks
// WARNING: Callbacks setup is intended for advance users
@@ -1256,7 +1254,7 @@ foreign lib {
LoadImage :: proc(fileName: cstring) -> Image --- // Load image from file into CPU memory (RAM)
LoadImageRaw :: proc(fileName: cstring, width, height: c.int, format: PixelFormat, headerSize: c.int) -> Image --- // Load image from RAW file data
LoadImageSvg :: proc(fileNameOrString: cstring, width, height: c.int) -> Image --- // Load image from SVG file data or string with specified size
- LoadImageAnim :: proc(fileName: cstring, frames: [^]c.int) -> Image --- // Load image sequence from file (frames appended to image.data)
+ LoadImageAnim :: proc(fileName: cstring, frames: ^c.int) -> Image --- // Load image sequence from file (frames appended to image.data)
LoadImageFromMemory :: proc(fileType: cstring, fileData: rawptr, dataSize: c.int) -> Image --- // Load image from memory buffer, fileType refers to extension: i.e. '.png'
LoadImageFromTexture :: proc(texture: Texture2D) -> Image --- // Load image from GPU texture data
LoadImageFromScreen :: proc() -> Image --- // Load image from screen buffer and (screenshot)
@@ -1684,8 +1682,25 @@ TextFormat :: proc(text: cstring, args: ..any) -> cstring {
// Text formatting with variables (sprintf style) and allocates (must be freed with 'MemFree')
TextFormatAlloc :: proc(text: cstring, args: ..any) -> cstring {
- str := fmt.tprintf(string(text), ..args)
- return strings.clone_to_cstring(str, MemAllocator())
+ return fmt.caprintf(string(text), ..args, allocator=MemAllocator())
+}
+
+
+// Internal memory free
+MemFree :: proc{
+ MemFreePtr,
+ MemFreeCstring,
+}
+
+
+@(default_calling_convention="c")
+foreign lib {
+ @(link_name="MemFree")
+ MemFreePtr :: proc(ptr: rawptr) ---
+}
+
+MemFreeCstring :: proc "c" (s: cstring) {
+ MemFreePtr(rawptr(s))
}
diff --git a/vendor/sdl2/sdl2.odin b/vendor/sdl2/sdl2.odin
index 73d95e18a..b23389a64 100644
--- a/vendor/sdl2/sdl2.odin
+++ b/vendor/sdl2/sdl2.odin
@@ -41,6 +41,12 @@ MAJOR_VERSION :: 2
MINOR_VERSION :: 0
PATCHLEVEL :: 16
+VERSION :: proc "contextless" (ver: ^version) {
+ ver.major = MAJOR_VERSION
+ ver.minor = MINOR_VERSION
+ ver.patch = PATCHLEVEL
+}
+
@(default_calling_convention="c", link_prefix="SDL_")
foreign lib {
GetVersion :: proc(ver: ^version) ---
diff --git a/vendor/sdl2/sdl_events.odin b/vendor/sdl2/sdl_events.odin
index 60daaea56..b4c92683c 100644
--- a/vendor/sdl2/sdl_events.odin
+++ b/vendor/sdl2/sdl_events.odin
@@ -171,9 +171,9 @@ KeyboardEvent :: struct {
TEXTEDITINGEVENT_TEXT_SIZE :: 32
TextEditingEvent :: struct {
type: EventType, /**< ::SDL_TEXTEDITING */
- timestamp: u32, /**< In milliseconds, populated using SDL_GetTicks() */
- windowID: u32, /**< The window with keyboard focus, if any */
- text: [TEXTEDITINGEVENT_TEXT_SIZE]u8, /**< The editing text */
+ timestamp: u32, /**< In milliseconds, populated using SDL_GetTicks() */
+ windowID: u32, /**< The window with keyboard focus, if any */
+ text: [TEXTEDITINGEVENT_TEXT_SIZE]u8, /**< The editing text */
start: i32, /**< The start cursor of selected editing text */
length: i32, /**< The length of selected editing text */
}
@@ -184,7 +184,7 @@ TextInputEvent :: struct {
type: EventType, /**< ::SDL_TEXTINPUT */
timestamp: u32, /**< In milliseconds, populated using SDL_GetTicks() */
windowID: u32, /**< The window with keyboard focus, if any */
- text: [TEXTINPUTEVENT_TEXT_SIZE]u8, /**< The input text */
+ text: [TEXTINPUTEVENT_TEXT_SIZE]u8, /**< The input text */
}
MouseMotionEvent :: struct {
diff --git a/vendor/sdl2/sdl_gamecontroller.odin b/vendor/sdl2/sdl_gamecontroller.odin
index 8772faa26..beb7d5ce7 100644
--- a/vendor/sdl2/sdl_gamecontroller.odin
+++ b/vendor/sdl2/sdl_gamecontroller.odin
@@ -54,29 +54,29 @@ GameControllerAxis :: enum c.int {
}
GameControllerButton :: enum c.int {
- INVALID = -1,
- A,
- B,
- X,
- Y,
- BACK,
- GUIDE,
- START,
- LEFTSTICK,
- RIGHTSTICK,
- LEFTSHOULDER,
- RIGHTSHOULDER,
- DPAD_UP,
- DPAD_DOWN,
- DPAD_LEFT,
- DPAD_RIGHT,
- MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */
- PADDLE1, /* Xbox Elite paddle P1 */
- PADDLE2, /* Xbox Elite paddle P3 */
- PADDLE3, /* Xbox Elite paddle P2 */
- PADDLE4, /* Xbox Elite paddle P4 */
- TOUCHPAD, /* PS4/PS5 touchpad button */
- MAX,
+ INVALID = -1,
+ A,
+ B,
+ X,
+ Y,
+ BACK,
+ GUIDE,
+ START,
+ LEFTSTICK,
+ RIGHTSTICK,
+ LEFTSHOULDER,
+ RIGHTSHOULDER,
+ DPAD_UP,
+ DPAD_DOWN,
+ DPAD_LEFT,
+ DPAD_RIGHT,
+ MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */
+ PADDLE1, /* Xbox Elite paddle P1 */
+ PADDLE2, /* Xbox Elite paddle P3 */
+ PADDLE3, /* Xbox Elite paddle P2 */
+ PADDLE4, /* Xbox Elite paddle P4 */
+ TOUCHPAD, /* PS4/PS5 touchpad button */
+ MAX,
}
diff --git a/vendor/sdl2/sdl_touch.odin b/vendor/sdl2/sdl_touch.odin
index f2a8cc695..f0ca69333 100644
--- a/vendor/sdl2/sdl_touch.odin
+++ b/vendor/sdl2/sdl_touch.odin
@@ -19,10 +19,10 @@ TouchDeviceType :: enum c.int {
}
Finger :: struct {
- id: FingerID,
- x: f32,
- y: f32,
- pressure: f32,
+ id: FingerID,
+ x: f32,
+ y: f32,
+ pressure: f32,
}
TOUCH_MOUSEID :: ~u32(0)
diff --git a/vendor/stb/image/stb_image_resize.odin b/vendor/stb/image/stb_image_resize.odin
index d407a1852..e22b587b2 100644
--- a/vendor/stb/image/stb_image_resize.odin
+++ b/vendor/stb/image/stb_image_resize.odin
@@ -166,7 +166,7 @@ datatype :: enum c.int {
UINT32,
FLOAT,
- MAX_TYPES,
+ MAX_TYPES,
}
@(default_calling_convention="c", link_prefix="stbir_")
diff --git a/vendor/wgpu/README.md b/vendor/wgpu/README.md
index 8b2c95b5e..1022e8541 100644
--- a/vendor/wgpu/README.md
+++ b/vendor/wgpu/README.md
@@ -11,8 +11,8 @@ Have a look at the `example/` directory for the rendering of a basic triangle.
## Getting the wgpu-native libraries
For native support (not the browser), some libraries are required. Fortunately this is
-extremely easy, just download them from the [releases on GitHub](https://github.com/gfx-rs/wgpu-native/releases/tag/v0.19.4.1),
-the bindings are for v0.19.4.1 at the moment.
+extremely easy, just download them from the [releases on GitHub](https://github.com/gfx-rs/wgpu-native/releases/tag/v22.1.0.1),
+the bindings are for v22.1.0.1 at the moment.
These are expected in the `lib` folder under the same name as they are released (just unzipped).
By default it will look for a static release version (`wgpu-OS-ARCH-release.a|lib`),
diff --git a/vendor/wgpu/examples/glfw/main.odin b/vendor/wgpu/examples/glfw/main.odin
index bddd2c5f7..b57206371 100644
--- a/vendor/wgpu/examples/glfw/main.odin
+++ b/vendor/wgpu/examples/glfw/main.odin
@@ -158,15 +158,17 @@ frame :: proc "c" (dt: f32) {
view = frame,
loadOp = .Clear,
storeOp = .Store,
+ depthSlice = wgpu.DEPTH_SLICE_UNDEFINED,
clearValue = { 0, 1, 0, 1 },
},
},
)
- defer wgpu.RenderPassEncoderRelease(render_pass_encoder)
wgpu.RenderPassEncoderSetPipeline(render_pass_encoder, state.pipeline)
wgpu.RenderPassEncoderDraw(render_pass_encoder, vertexCount=3, instanceCount=1, firstVertex=0, firstInstance=0)
+
wgpu.RenderPassEncoderEnd(render_pass_encoder)
+ wgpu.RenderPassEncoderRelease(render_pass_encoder)
command_buffer := wgpu.CommandEncoderFinish(command_encoder, nil)
defer wgpu.CommandBufferRelease(command_buffer)
diff --git a/vendor/wgpu/examples/sdl2/main.odin b/vendor/wgpu/examples/sdl2/main.odin
index fa0a84bd5..58e357f7a 100644
--- a/vendor/wgpu/examples/sdl2/main.odin
+++ b/vendor/wgpu/examples/sdl2/main.odin
@@ -158,15 +158,17 @@ frame :: proc "c" (dt: f32) {
view = frame,
loadOp = .Clear,
storeOp = .Store,
+ depthSlice = wgpu.DEPTH_SLICE_UNDEFINED,
clearValue = { 0, 1, 0, 1 },
},
},
)
- defer wgpu.RenderPassEncoderRelease(render_pass_encoder)
wgpu.RenderPassEncoderSetPipeline(render_pass_encoder, state.pipeline)
wgpu.RenderPassEncoderDraw(render_pass_encoder, vertexCount=3, instanceCount=1, firstVertex=0, firstInstance=0)
+
wgpu.RenderPassEncoderEnd(render_pass_encoder)
+ wgpu.RenderPassEncoderRelease(render_pass_encoder)
command_buffer := wgpu.CommandEncoderFinish(command_encoder, nil)
defer wgpu.CommandBufferRelease(command_buffer)
diff --git a/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.dll b/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.dll
index 650260bfc..b8f782a2f 100644
--- a/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.dll
+++ b/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.dll
Binary files differ
diff --git a/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.dll.lib b/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.dll.lib
index b838c2695..864b7eb53 100644
--- a/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.dll.lib
+++ b/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.dll.lib
Binary files differ
diff --git a/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.lib b/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.lib
index ea4044d81..7c9f95c33 100644
--- a/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.lib
+++ b/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.lib
Binary files differ
diff --git a/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.pdb b/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.pdb
index b30090276..52865e174 100644
--- a/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.pdb
+++ b/vendor/wgpu/lib/wgpu-windows-x86_64-release/wgpu_native.pdb
Binary files differ
diff --git a/vendor/wgpu/sdl2glue/glue_linux.odin b/vendor/wgpu/sdl2glue/glue_linux.odin
index b01df251a..58ec90499 100644
--- a/vendor/wgpu/sdl2glue/glue_linux.odin
+++ b/vendor/wgpu/sdl2glue/glue_linux.odin
@@ -5,7 +5,9 @@ import "vendor:wgpu"
GetSurface :: proc(instance: wgpu.Instance, window: ^sdl2.Window) -> wgpu.Surface {
window_info: sdl2.SysWMinfo
+ sdl2.VERSION(&window_info.version)
sdl2.GetWindowWMInfo(window, &window_info)
+
if window_info.subsystem == .WAYLAND {
display := window_info.info.wl.display
surface := window_info.info.wl.surface
diff --git a/vendor/wgpu/wgpu.js b/vendor/wgpu/wgpu.js
index 4fe78c992..c100808e3 100644
--- a/vendor/wgpu/wgpu.js
+++ b/vendor/wgpu/wgpu.js
@@ -44,6 +44,7 @@ class WebGPUInterface {
BlendFactor: ["zero", "one", "src", "one-minus-src", "src-alpha", "one-minus-src-alpha", "dst", "one-minus-dst", "dst-alpha", "one-minus-dst-alpha", "src-alpha-saturated", "constant", "one-minus-constant", ],
PresentMode: ["fifo", "fifo-relaxed", "immediate", "mailbox", ],
TextureAspect: ["all", "stencil-only", "depth-only"],
+ DeviceLostReason: [undefined, "unknown", "destroyed"],
};
/** @type {WebGPUObjectManager<{}>} */
@@ -382,13 +383,19 @@ class WebGPUInterface {
*/
RenderPassColorAttachment(start) {
const viewIdx = this.mem.loadPtr(start + 4);
- const resolveTargetIdx = this.mem.loadPtr(start + 8);
+ const resolveTargetIdx = this.mem.loadPtr(start + 12);
+
+ let depthSlice = this.mem.loadU32(start + 8);
+ if (depthSlice == 0xFFFFFFFF) { // DEPTH_SLICE_UNDEFINED.
+ depthSlice = undefined;
+ }
return {
view: viewIdx > 0 ? this.textureViews.get(viewIdx) : undefined,
resolveTarget: resolveTargetIdx > 0 ? this.textureViews.get(resolveTargetIdx) : undefined,
- loadOp: this.enumeration("LoadOp", start + 12),
- storeOp: this.enumeration("StoreOp", start + 16),
+ depthSlice: depthSlice,
+ loadOp: this.enumeration("LoadOp", start + 16),
+ storeOp: this.enumeration("StoreOp", start + 20),
clearValue: this.Color(start + 24),
};
}
@@ -950,14 +957,25 @@ class WebGPUInterface {
/**
* @param {number} adapterIdx
- * @param {number} propertiesPtr
+ * @param {number} infoPtr
*/
- wgpuAdapterGetProperties: (adapterIdx, propertiesPtr) => {
- this.assert(propertiesPtr != 0);
- // Unknown adapter.
- this.mem.storeI32(propertiesPtr + 28, 3);
+ wgpuAdapterGetInfo: (adapterIdx, infoPtr) => {
+ this.assert(infoPtr != 0);
+
// WebGPU backend.
- this.mem.storeI32(propertiesPtr + 32, 2);
+ this.mem.storeI32(infoPtr + 20, 2);
+ // Unknown adapter.
+ this.mem.storeI32(infoPtr + 24, 3);
+
+ // NOTE: I don't think getting the other fields in this struct is possible.
+ // `adapter.requestAdapterInfo` is deprecated.
+ },
+
+ /**
+ * @param {number} infoPtr
+ */
+ wgpuAdapterInfoFreeMembers: (infoPtr) => {
+ // NOTE: nothing to free.
},
/**
@@ -972,50 +990,6 @@ class WebGPUInterface {
/**
* @param {number} adapterIdx
- * @param {number} callbackPtr
- * @param {0|number} userdata
- */
- wgpuAdapterRequestAdapterInfo: async (adapterIdx, callbackPtr, userdata) => {
- const adapter = this.adapters.get(adapterIdx);
- const callback = this.mem.exports.__indirect_function_table.get(callbackPtr);
-
- const info = await adapter.requestAdapterInfo();
-
- const addr = this.mem.exports.wgpu_alloc(16);
-
- const vendorLength = new TextEncoder().encode(info.vendor).length;
- const vendorAddr = this.mem.exports.wgpu_alloc(vendorLength);
- this.mem.storeString(vendorAddr, info.vendor);
- this.mem.storeI32(addr + 0, vendorAddr);
-
- const architectureLength = new TextEncoder().encode(info.architecture).length;
- const architectureAddr = this.mem.exports.wgpu_alloc(architectureLength);
- this.mem.storeString(architectureAddr, info.architecture);
- this.mem.storeI32(addr + 4, architectureAddr);
-
-
- const deviceLength = new TextEncoder().encode(info.device).length;
- const deviceAddr = this.mem.exports.wgpu_alloc(deviceLength);
- this.mem.storeString(deviceAddr, info.device);
- this.mem.storeI32(addr + 8, deviceAddr);
-
-
- const descriptionLength = new TextEncoder().encode(info.description).length;
- const descriptionAddr = this.mem.exports.wgpu_alloc(descriptionLength);
- this.mem.storeString(descriptionAddr, info.description);
- this.mem.storeI32(addr + 12, descriptionAddr);
-
- callback(addr, userdata);
-
- this.mem.exports.wgpu_free(descriptionAddr);
- this.mem.exports.wgpu_free(deviceAddr);
- this.mem.exports.wgpu_free(architectureAddr);
- this.mem.exports.wgpu_free(vendorAddr);
- this.mem.exports.wgpu_free(addr);
- },
-
- /**
- * @param {number} adapterIdx
* @param {0|number} descriptorPtr
* @param {number} callbackPtr
* @param {0|number} userdata
@@ -1040,14 +1014,69 @@ class WebGPUInterface {
};
}
+ let device;
let deviceIdx;
try {
- const device = await adapter.requestDevice(descriptor);
+ device = await adapter.requestDevice(descriptor);
deviceIdx = this.devices.create(device);
// NOTE: don't callback here, any errors that happen later will then be caught by the catch here.
} catch (e) {
- console.warn(e);
- callback(1, null, null, userdata);
+ const messageLength = new TextEncoder().encode(e.message).length;
+ const messageAddr = this.mem.exports.wgpu_alloc(messageLength + 1);
+ this.mem.storeString(messageAddr, e.message);
+
+ callback(1, null, messageAddr, userdata);
+
+ this.mem.exports.wgpu_free(messageAddr);
+ }
+
+ let callbacksPtr = descriptorPtr + 24 + this.mem.intSize;
+
+ const deviceLostCallbackPtr = this.mem.loadPtr(callbacksPtr);
+ if (deviceLostCallbackPtr != 0) {
+ const deviceLostUserData = this.mem.loadPtr(callbacksPtr) + 4;
+ const deviceLostCallback = this.mem.exports.__indirect_function_table.get(deviceLostCallbackPtr);
+
+ device.lost.then((info) => {
+ const reason = this.enums.DeviceLostReason.indexOf(info.reason);
+
+ const messageLength = new TextEncoder().encode(info.message).length;
+ const messageAddr = this.mem.exports.wgpu_alloc(messageLength + 1);
+ this.mem.storeString(messageAddr, info.message);
+
+ deviceLostCallback(reason, messageAddr, deviceLostUserData);
+
+ this.mem.exports.wgpu_free(messageAddr);
+ });
+ }
+ callbacksPtr += 8;
+
+ // Skip over `nextInChain`.
+ callbacksPtr += 4;
+
+ const uncapturedErrorCallbackPtr = this.mem.loadPtr(callbacksPtr);
+ if (uncapturedErrorCallbackPtr != 0) {
+ const uncapturedErrorUserData = this.mem.loadPtr(callbacksPtr + 4);
+ const uncapturedErrorCallback = this.mem.exports.__indirect_function_table.get(uncapturedErrorCallbackPtr);
+
+ device.onuncapturederror = (ev) => {
+ let status = 4; // Unknown
+ if (ev.error instanceof GPUValidationError) {
+ status = 1; // Validation
+ } else if (ev.error instanceof GPUOutOfMemoryError) {
+ status = 2; // OutOfMemory
+ } else if (ev.error instanceof GPUInternalError) {
+ status = 3; // Internal
+ }
+
+ const messageLength = new TextEncoder().encode(ev.error.message).length;
+ const messageAddr = this.mem.exports.wgpu_alloc(messageLength + 1);
+ this.mem.storeString(messageAddr, ev.error.message);
+
+ uncapturedErrorCallback(status, messageAddr, uncapturedErrorUserData);
+
+ this.mem.exports.wgpu_free(messageAddr);
+ };
}
callback(0, deviceIdx, null, userdata);
@@ -1918,29 +1947,6 @@ class WebGPUInterface {
device.pushErrorScope(this.enums.ErrorFilter[filterInt]);
},
- /**
- * @param {number} deviceIdx
- * @param {number} callbackPtr
- * @param {number} userdata
- */
- wgpuDeviceSetUncapturedErrorCallback: (deviceIdx, callbackPtr, userdata) => {
- const device = this.devices.get(deviceIdx);
- const callback = this.mem.exports.__indirect_function_table.get(callbackPtr);
-
- device.onuncapturederror = (ev) => {
- console.warn(ev.error);
- let status = 4;
- if (error instanceof GPUValidationError) {
- status = 1;
- } else if (error instanceof GPUOutOfMemoryError) {
- status = 2;
- } else if (error instanceof GPUInternalError) {
- status = 3;
- }
- callback(status, null, userdata);
- };
- },
-
...this.devices.interface(true),
/* ---------------------- Instance ---------------------- */
@@ -2646,23 +2652,23 @@ class WebGPUInterface {
const formatStr = navigator.gpu.getPreferredCanvasFormat();
const format = this.enums.TextureFormat.indexOf(formatStr);
- this.mem.storeUint(capabilitiesPtr + this.mem.intSize, 1);
+ this.mem.storeUint(capabilitiesPtr + 8, 1);
const formatAddr = this.mem.exports.wgpu_alloc(4);
this.mem.storeI32(formatAddr, format);
- this.mem.storeI32(capabilitiesPtr + this.mem.intSize*2, formatAddr);
+ this.mem.storeI32(capabilitiesPtr + 8 + this.mem.intSize, formatAddr);
// NOTE: present modes don't seem to actually do anything in JS, we can just give back a default FIFO though.
- this.mem.storeUint(capabilitiesPtr + this.mem.intSize*3, 1);
+ this.mem.storeUint(capabilitiesPtr + 8 + this.mem.intSize*2, 1);
const presentModesAddr = this.mem.exports.wgpu_alloc(4);
this.mem.storeI32(presentModesAddr, 0);
- this.mem.storeI32(capabilitiesPtr + this.mem.intSize*4, presentModesAddr);
+ this.mem.storeI32(capabilitiesPtr + 8 + this.mem.intSize*3, presentModesAddr);
// Browser seems to support opaque (1) and premultiplied (2).
- this.mem.storeUint(capabilitiesPtr + this.mem.intSize*5, 2);
+ this.mem.storeUint(capabilitiesPtr + 8 + this.mem.intSize*4, 2);
const alphaModesAddr = this.mem.exports.wgpu_alloc(8);
this.mem.storeI32(alphaModesAddr + 0, 1); // Opaque.
this.mem.storeI32(alphaModesAddr + 4, 2); // premultiplied.
- this.mem.storeI32(capabilitiesPtr + this.mem.intSize*6, alphaModesAddr);
+ this.mem.storeI32(capabilitiesPtr + 8 + this.mem.intSize*5, alphaModesAddr);
},
/**
@@ -2682,17 +2688,6 @@ class WebGPUInterface {
/**
* @param {number} surfaceIdx
- * @param {number} texturePtr
- * @returns {number}
- */
- wgpuSurfaceGetPreferredFormat: (surfaceIdx, adapterIdx) => {
- const formatStr = navigator.gpu.getPreferredCanvasFormat();
- const format = this.enums.TextureFormat.indexOf(formatStr);
- return format;
- },
-
- /**
- * @param {number} surfaceIdx
*/
wgpuSurfacePresent: (surfaceIdx) => {
// NOTE: Not really anything to do here.
diff --git a/vendor/wgpu/wgpu.odin b/vendor/wgpu/wgpu.odin
index af81dde56..ff52cdcb5 100644
--- a/vendor/wgpu/wgpu.odin
+++ b/vendor/wgpu/wgpu.odin
@@ -13,7 +13,7 @@ when ODIN_OS == .Windows {
@(private) LIB :: "lib/wgpu-windows-" + ARCH + "-" + TYPE + "/wgpu_native" + EXT
when !#exists(LIB) {
- #panic("Could not find the compiled WGPU Native library at '" + #directory + LIB + "', these can be downloaded from https://github.com/gfx-rs/wgpu-native/releases/tag/v0.19.4.1, make sure to read the README at '" + #directory + "vendor/wgpu/README.md'")
+ #panic("Could not find the compiled WGPU Native library at '" + #directory + LIB + "', these can be downloaded from https://github.com/gfx-rs/wgpu-native/releases/tag/v22.1.0.1, make sure to read the README at '" + #directory + "vendor/wgpu/README.md'")
}
foreign import libwgpu {
@@ -34,7 +34,7 @@ when ODIN_OS == .Windows {
@(private) LIB :: "lib/wgpu-macos-" + ARCH + "-" + TYPE + "/libwgpu_native" + EXT
when !#exists(LIB) {
- #panic("Could not find the compiled WGPU Native library at '" + #directory + LIB + "', these can be downloaded from https://github.com/gfx-rs/wgpu-native/releases/tag/v0.19.4.1, make sure to read the README at '" + #directory + "vendor/wgpu/README.md'")
+ #panic("Could not find the compiled WGPU Native library at '" + #directory + LIB + "', these can be downloaded from https://github.com/gfx-rs/wgpu-native/releases/tag/v22.1.0.1, make sure to read the README at '" + #directory + "vendor/wgpu/README.md'")
}
foreign import libwgpu {
@@ -49,7 +49,7 @@ when ODIN_OS == .Windows {
@(private) LIB :: "lib/wgpu-linux-" + ARCH + "-" + TYPE + "/libwgpu_native" + EXT
when !#exists(LIB) {
- #panic("Could not find the compiled WGPU Native library at '" + #directory + LIB + "', these can be downloaded from https://github.com/gfx-rs/wgpu-native/releases/tag/v0.19.4.1, make sure to read the README at '" + #directory + "vendor/wgpu/README.md'")
+ #panic("Could not find the compiled WGPU Native library at '" + #directory + LIB + "', these can be downloaded from https://github.com/gfx-rs/wgpu-native/releases/tag/v22.1.0.1, make sure to read the README at '" + #directory + "vendor/wgpu/README.md'")
}
foreign import libwgpu {
@@ -220,7 +220,8 @@ CullMode :: enum i32 {
DeviceLostReason :: enum i32 {
Undefined = 0x00000000,
- Destroyed = 0x00000001,
+ Unknown = 0x00000001,
+ Destroyed = 0x00000002,
}
ErrorFilter :: enum i32 {
@@ -264,6 +265,30 @@ FeatureName :: enum i32 {
PipelineStatisticsQuery,
StorageResourceBindingArray,
PartiallyBoundBindingArray,
+ TextureFormat16bitNorm,
+ TextureCompressionAstcHdr,
+ // TODO: requires wgpu.h api change
+ // TimestampQueryInsidePasses,
+ MappablePrimaryBuffers = 0x0003000E,
+ BufferBindingArray,
+ UniformBufferAndStorageTextureArrayNonUniformIndexing,
+ // TODO: requires wgpu.h api change
+ // AddressModeClampToZero,
+ // AddressModeClampToBorder,
+ // PolygonModeLine,
+ // PolygonModePoint,
+ // ConservativeRasterization,
+ // ClearTexture,
+ // SprivShaderPassThrough,
+ // MultiView,
+ VertexAttribute64bit = 0x00030019,
+ TextureFormatNv12,
+ RayTracingAccelarationStructure,
+ RayQuery,
+ ShaderF64,
+ ShaderI16,
+ ShaderPrimitiveIndex,
+ ShaderEarlyDepthTest,
}
FilterMode :: enum i32 {
@@ -520,6 +545,18 @@ TextureFormat :: enum i32 {
ASTC12x10UnormSrgb = 0x0000005D,
ASTC12x12Unorm = 0x0000005E,
ASTC12x12UnormSrgb = 0x0000005F,
+
+ // Native.
+
+ // From FeatureName.TextureFormat16bitNorm
+ R16Unorm = 0x00030001,
+ R16Snorm,
+ Rg16Unorm,
+ Rg16Snorm,
+ Rgba16Unorm,
+ Rgba16Snorm,
+ // From FeatureName.TextureFormatNv12
+ NV12,
}
TextureSampleType :: enum i32 {
@@ -581,13 +618,13 @@ VertexStepMode :: enum i32 {
VertexBufferNotUsed = 0x00000002,
}
-// WGSLFeatureName :: enum i32 {
-// Undefined = 0x00000000,
-// ReadonlyAndReadwriteStorageTextures = 0x00000001,
-// Packed4x8IntegerDotProduct = 0x00000002,
-// UnrestrictedPointerParameters = 0x00000003,
-// PointerCompositeAccess = 0x00000004,
-// }
+WGSLFeatureName :: enum i32 {
+ Undefined = 0x00000000,
+ ReadonlyAndReadwriteStorageTextures = 0x00000001,
+ Packed4x8IntegerDotProduct = 0x00000002,
+ UnrestrictedPointerParameters = 0x00000003,
+ PointerCompositeAccess = 0x00000004,
+}
BufferUsage :: enum i32 {
MapRead = 0x00000000,
@@ -634,22 +671,18 @@ TextureUsage :: enum i32 {
}
TextureUsageFlags :: bit_set[TextureUsage; Flags]
-
-BufferMapAsyncCallback :: #type proc "c" (status: BufferMapAsyncStatus, /* NULLABLE */ userdata: rawptr)
-ShaderModuleGetCompilationInfoCallback :: #type proc "c" (status: CompilationInfoRequestStatus, compilationInfo: ^CompilationInfo, /* NULLABLE */ userdata: rawptr)
-DeviceCreateComputePipelineAsyncCallback :: #type proc "c" (status: CreatePipelineAsyncStatus, pipeline: ComputePipeline, message: cstring, /* NULLABLE */ userdata: rawptr)
-DeviceCreateRenderPipelineAsyncCallback :: #type proc "c" (status: CreatePipelineAsyncStatus, pipeline: RenderPipeline, message: cstring, /* NULLABLE */ userdata: rawptr)
+Proc :: distinct rawptr
DeviceLostCallback :: #type proc "c" (reason: DeviceLostReason, message: cstring, userdata: rawptr)
ErrorCallback :: #type proc "c" (type: ErrorType, message: cstring, userdata: rawptr)
-Proc :: distinct rawptr
-
-QueueOnSubmittedWorkDoneCallback :: #type proc "c" (status: QueueWorkDoneStatus, /* NULLABLE */ userdata: rawptr)
-InstanceRequestAdapterCallback :: #type proc "c" (status: RequestAdapterStatus, adapter: Adapter, message: cstring, /* NULLABLE */ userdata: rawptr)
AdapterRequestDeviceCallback :: #type proc "c" (status: RequestDeviceStatus, device: Device, message: cstring, /* NULLABLE */ userdata: rawptr)
-
-// AdapterRequestAdapterInfoCallback :: #type proc "c" (adapterInfo: AdapterInfo, /* NULLABLE */ userdata: rawptr)
+BufferMapAsyncCallback :: #type proc "c" (status: BufferMapAsyncStatus, /* NULLABLE */ userdata: rawptr)
+DeviceCreateComputePipelineAsyncCallback :: #type proc "c" (status: CreatePipelineAsyncStatus, pipeline: ComputePipeline, message: cstring, /* NULLABLE */ userdata: rawptr)
+DeviceCreateRenderPipelineAsyncCallback :: #type proc "c" (status: CreatePipelineAsyncStatus, pipeline: RenderPipeline, message: cstring, /* NULLABLE */ userdata: rawptr)
+InstanceRequestAdapterCallback :: #type proc "c" (status: RequestAdapterStatus, adapter: Adapter, message: cstring, /* NULLABLE */ userdata: rawptr)
+QueueOnSubmittedWorkDoneCallback :: #type proc "c" (status: QueueWorkDoneStatus, /* NULLABLE */ userdata: rawptr)
+ShaderModuleGetCompilationInfoCallback :: #type proc "c" (status: CompilationInfoRequestStatus, compilationInfo: ^CompilationInfo, /* NULLABLE */ userdata: rawptr)
ChainedStruct :: struct {
next: ^ChainedStruct,
@@ -661,28 +694,23 @@ ChainedStructOut :: struct {
sType: SType,
}
-// AdapterInfo :: struct {
-// next: ^ChainedStructOut,
-// vendor: cstring,
-// architecture: cstring,
-// device: cstring,
-// description: cstring,
-// backendType: BackendType,
-// adapterType: AdapterType,
-// vendorID: u32,
-// deviceID: u32,
-// }
-
-AdapterProperties :: struct {
+AdapterInfo :: struct {
nextInChain: ^ChainedStructOut,
- vendorID: u32,
- vendorName: cstring,
+ vendor: cstring,
architecture: cstring,
- deviceID: u32,
- name: cstring,
- driverDescription: cstring,
- adapterType: AdapterType,
+ device: cstring,
+ description: cstring,
backendType: BackendType,
+ adapterType: AdapterType,
+ vendorID: u32,
+ deviceID: u32,
+}
+when ODIN_OS == .JS {
+ #assert(int(BackendType.WebGPU) == 2)
+ #assert(offset_of(AdapterInfo, backendType) == 20)
+
+ #assert(int(AdapterType.Unknown) == 3)
+ #assert(offset_of(AdapterInfo, adapterType) == 24)
}
BindGroupEntry :: struct {
@@ -943,6 +971,7 @@ StorageTextureBindingLayout :: struct {
SurfaceCapabilities :: struct {
nextInChain: ^ChainedStructOut,
+ usages: TextureUsageFlags,
formatCount: uint,
formats: /* const */ [^]TextureFormat `fmt:"v,formatCount"`,
presentModeCount: uint,
@@ -950,6 +979,16 @@ SurfaceCapabilities :: struct {
alphaModeCount: uint,
alphaModes: /* const */ [^]CompositeAlphaMode `fmt:"v,alphaModeCount"`,
}
+when ODIN_OS == .JS {
+ #assert(offset_of(SurfaceCapabilities, formatCount) == 8)
+ #assert(offset_of(SurfaceCapabilities, formats) == 8 + 1*size_of(int))
+
+ #assert(offset_of(SurfaceCapabilities, presentModeCount) == 8 + 2*size_of(int))
+ #assert(offset_of(SurfaceCapabilities, presentModes) == 8 + 3*size_of(int))
+
+ #assert(offset_of(SurfaceCapabilities, alphaModeCount) == 8 + 4*size_of(int))
+ #assert(offset_of(SurfaceCapabilities, alphaModes) == 8 + 5*size_of(int))
+}
SurfaceConfiguration :: struct {
nextInChain: ^ChainedStruct,
@@ -1040,6 +1079,12 @@ TextureViewDescriptor :: struct {
aspect: TextureAspect,
}
+UncapturedErrorCallbackInfo :: struct {
+ nextInChain: ^ChainedStruct,
+ callback: ErrorCallback,
+ userdata: rawptr,
+}
+
VertexAttribute :: struct {
format: VertexFormat,
offset: u64,
@@ -1120,12 +1165,21 @@ ProgrammableStageDescriptor :: struct {
RenderPassColorAttachment :: struct {
nextInChain: ^ChainedStruct,
/* NULLABLE */ view: TextureView,
- // depthSlice: u32,
+ depthSlice: u32,
/* NULLABLE */ resolveTarget: TextureView,
loadOp: LoadOp,
storeOp: StoreOp,
clearValue: Color,
}
+when ODIN_OS == .JS {
+ #assert(size_of(RenderPassColorAttachment) == 56)
+ #assert(offset_of(RenderPassColorAttachment, view) == 4)
+ #assert(offset_of(RenderPassColorAttachment, depthSlice) == 8)
+ #assert(offset_of(RenderPassColorAttachment, resolveTarget) == 12)
+ #assert(offset_of(RenderPassColorAttachment, loadOp) == 16)
+ #assert(offset_of(RenderPassColorAttachment, storeOp) == 20)
+ #assert(offset_of(RenderPassColorAttachment, clearValue) == 24)
+}
RequiredLimits :: struct {
nextInChain: ^ChainedStruct,
@@ -1194,6 +1248,10 @@ DeviceDescriptor :: struct {
defaultQueue: QueueDescriptor,
deviceLostCallback: DeviceLostCallback,
deviceLostUserdata: rawptr,
+ uncapturedErrorCallbackInfo: UncapturedErrorCallbackInfo,
+}
+when ODIN_OS == .JS {
+ #assert(offset_of(DeviceDescriptor, deviceLostCallback) == 24 + size_of(int))
}
RenderPassDescriptor :: struct {
@@ -1245,16 +1303,18 @@ foreign libwgpu {
// Methods of Adapter
@(link_name="wgpuAdapterEnumerateFeatures")
RawAdapterEnumerateFeatures :: proc(adapter: Adapter, features: [^]FeatureName) -> uint ---
+ @(link_name="wgpuAdapterGetInfo")
+ RawAdapterGetInfo :: proc(adapter: Adapter, info: ^AdapterInfo) ---
@(link_name="wgpuAdapterGetLimits")
RawAdapterGetLimits :: proc(adapter: Adapter, limits: ^SupportedLimits) -> b32 ---
- @(link_name="wgpuAdapterGetProperties")
- RawAdapterGetProperties :: proc(adapter: Adapter, properties: ^AdapterProperties) ---
AdapterHasFeature :: proc(adapter: Adapter, feature: FeatureName) -> b32 ---
- // AdapterRequestAdapterInfo :: proc(adapter: Adapter, callback: AdapterRequestAdapterInfoCallback, /* NULLABLE */ userdata: rawptr) ---
AdapterRequestDevice :: proc(adapter: Adapter, /* NULLABLE */ descriptor: /* const */ ^DeviceDescriptor, callback: AdapterRequestDeviceCallback, /* NULLABLE */ userdata: rawptr = nil) ---
AdapterReference :: proc(adapter: Adapter) ---
AdapterRelease :: proc(adapter: Adapter) ---
+ // Procs of AdapterInfo
+ AdapterInfoFreeMembers :: proc(adapterInfo: AdapterInfo) ---
+
// Methods of BindGroup
BindGroupSetLabel :: proc(bindGroup: BindGroup, label: cstring) ---
BindGroupReference :: proc(bindGroup: BindGroup) ---
@@ -1348,13 +1408,12 @@ foreign libwgpu {
DevicePopErrorScope :: proc(device: Device, callback: ErrorCallback, userdata: rawptr) ---
DevicePushErrorScope :: proc(device: Device, filter: ErrorFilter) ---
DeviceSetLabel :: proc(device: Device, label: cstring) ---
- DeviceSetUncapturedErrorCallback :: proc(device: Device, callback: ErrorCallback, userdata: rawptr) ---
DeviceReference :: proc(device: Device) ---
DeviceRelease :: proc(device: Device) ---
// Methods of Instance
InstanceCreateSurface :: proc(instance: Instance, descriptor: /* const */ ^SurfaceDescriptor) -> Surface ---
- // InstanceHasWGSLLanguageFeature :: proc(instance: Instance, feature: WGSLFeatureName) -> b32 ---
+ InstanceHasWGSLLanguageFeature :: proc(instance: Instance, feature: WGSLFeatureName) -> b32 ---
InstanceProcessEvents :: proc(instance: Instance) ---
InstanceRequestAdapter :: proc(instance: Instance, /* NULLABLE */ options: /* const */ ^RequestAdapterOptions, callback: InstanceRequestAdapterCallback, /* NULLABLE */ userdata: rawptr = nil) ---
InstanceReference :: proc(instance: Instance) ---
@@ -1455,9 +1514,8 @@ foreign libwgpu {
RawSurfaceGetCapabilities :: proc(surface: Surface, adapter: Adapter, capabilities: ^SurfaceCapabilities) ---
@(link_name="wgpuSurfaceGetCurrentTexture")
RawSurfaceGetCurrentTexture :: proc(surface: Surface, surfaceTexture: ^SurfaceTexture) ---
- SurfaceGetPreferredFormat :: proc(surface: Surface, adapter: Adapter) -> TextureFormat ---
SurfacePresent :: proc(surface: Surface) ---
- // SurfaceSetLabel :: proc(surface: Surface, label: cstring) ---
+ SurfaceSetLabel :: proc(surface: Surface, label: cstring) ---
SurfaceUnconfigure :: proc(surface: Surface) ---
SurfaceReference :: proc(surface: Surface) ---
SurfaceRelease :: proc(surface: Surface) ---
@@ -1500,8 +1558,8 @@ AdapterGetLimits :: proc(adapter: Adapter) -> (limits: SupportedLimits, ok: bool
return
}
-AdapterGetProperties :: proc(adapter: Adapter) -> (properties: AdapterProperties) {
- RawAdapterGetProperties(adapter, &properties)
+AdapterGetInfo :: proc(adapter: Adapter) -> (info: AdapterInfo) {
+ RawAdapterGetInfo(adapter, &info)
return
}
@@ -1634,8 +1692,8 @@ SurfaceGetCurrentTexture :: proc(surface: Surface) -> (surface_texture: SurfaceT
// WGPU Native bindings
-BINDINGS_VERSION :: [4]u8{0, 19, 4, 1}
-BINDINGS_VERSION_STRING :: "0.19.4.1"
+BINDINGS_VERSION :: [4]u8{22, 1, 0, 1}
+BINDINGS_VERSION_STRING :: "22.1.0.1"
when ODIN_OS != .JS {
@(private="file", init)
diff --git a/vendor/x11/xlib/xlib_keysym.odin b/vendor/x11/xlib/xlib_keysym.odin
index 594d966a4..acb16c530 100644
--- a/vendor/x11/xlib/xlib_keysym.odin
+++ b/vendor/x11/xlib/xlib_keysym.odin
@@ -2,1680 +2,1680 @@
package xlib
KeySym :: enum u32 {
- XK_BackSpace = 0xff08, /* Back space, back char */
- XK_Tab = 0xff09,
- XK_Linefeed = 0xff0a, /* Linefeed, LF */
- XK_Clear = 0xff0b,
- XK_Return = 0xff0d, /* Return, enter */
- XK_Pause = 0xff13, /* Pause, hold */
- XK_Scroll_Lock = 0xff14,
- XK_Sys_Req = 0xff15,
- XK_Escape = 0xff1b,
- XK_Delete = 0xffff, /* Delete, rubout */
- XK_Multi_key = 0xff20, /* Multi-key character compose */
- XK_Codeinput = 0xff37,
- XK_SingleCandidate = 0xff3c,
- XK_MultipleCandidate = 0xff3d,
- XK_PreviousCandidate = 0xff3e,
- XK_Kanji = 0xff21, /* Kanji, Kanji convert */
- XK_Muhenkan = 0xff22, /* Cancel Conversion */
- XK_Henkan_Mode = 0xff23, /* Start/Stop Conversion */
- XK_Henkan = 0xff23, /* Alias for Henkan_Mode */
- XK_Romaji = 0xff24, /* to Romaji */
- XK_Hiragana = 0xff25, /* to Hiragana */
- XK_Katakana = 0xff26, /* to Katakana */
- XK_Hiragana_Katakana = 0xff27, /* Hiragana/Katakana toggle */
- XK_Zenkaku = 0xff28, /* to Zenkaku */
- XK_Hankaku = 0xff29, /* to Hankaku */
- XK_Zenkaku_Hankaku = 0xff2a, /* Zenkaku/Hankaku toggle */
- XK_Touroku = 0xff2b, /* Add to Dictionary */
- XK_Massyo = 0xff2c, /* Delete from Dictionary */
- XK_Kana_Lock = 0xff2d, /* Kana Lock */
- XK_Kana_Shift = 0xff2e, /* Kana Shift */
- XK_Eisu_Shift = 0xff2f, /* Alphanumeric Shift */
- XK_Eisu_toggle = 0xff30, /* Alphanumeric toggle */
- XK_Kanji_Bangou = 0xff37, /* Codeinput */
- XK_Zen_Koho = 0xff3d, /* Multiple/All Candidate(s) */
- XK_Mae_Koho = 0xff3e, /* Previous Candidate */
- XK_Home = 0xff50,
- XK_Left = 0xff51, /* Move left, left arrow */
- XK_Up = 0xff52, /* Move up, up arrow */
- XK_Right = 0xff53, /* Move right, right arrow */
- XK_Down = 0xff54, /* Move down, down arrow */
- XK_Prior = 0xff55, /* Prior, previous */
- XK_Page_Up = 0xff55,
- XK_Next = 0xff56, /* Next */
- XK_Page_Down = 0xff56,
- XK_End = 0xff57, /* EOL */
- XK_Begin = 0xff58, /* BOL */
- XK_Select = 0xff60, /* Select, mark */
- XK_Print = 0xff61,
- XK_Execute = 0xff62, /* Execute, run, do */
- XK_Insert = 0xff63, /* Insert, insert here */
- XK_Undo = 0xff65,
- XK_Redo = 0xff66, /* Redo, again */
- XK_Menu = 0xff67,
- XK_Find = 0xff68, /* Find, search */
- XK_Cancel = 0xff69, /* Cancel, stop, abort, exit */
- XK_Help = 0xff6a, /* Help */
- XK_Break = 0xff6b,
- XK_Mode_switch = 0xff7e, /* Character set switch */
- XK_script_switch = 0xff7e, /* Alias for mode_switch */
- XK_Num_Lock = 0xff7f,
- XK_KP_Space = 0xff80, /* Space */
- XK_KP_Tab = 0xff89,
- XK_KP_Enter = 0xff8d, /* Enter */
- XK_KP_F1 = 0xff91, /* PF1, KP_A, ... */
- XK_KP_F2 = 0xff92,
- XK_KP_F3 = 0xff93,
- XK_KP_F4 = 0xff94,
- XK_KP_Home = 0xff95,
- XK_KP_Left = 0xff96,
- XK_KP_Up = 0xff97,
- XK_KP_Right = 0xff98,
- XK_KP_Down = 0xff99,
- XK_KP_Prior = 0xff9a,
- XK_KP_Page_Up = 0xff9a,
- XK_KP_Next = 0xff9b,
- XK_KP_Page_Down = 0xff9b,
- XK_KP_End = 0xff9c,
- XK_KP_Begin = 0xff9d,
- XK_KP_Insert = 0xff9e,
- XK_KP_Delete = 0xff9f,
- XK_KP_Equal = 0xffbd, /* Equals */
- XK_KP_Multiply = 0xffaa,
- XK_KP_Add = 0xffab,
- XK_KP_Separator = 0xffac, /* Separator, often comma */
- XK_KP_Subtract = 0xffad,
- XK_KP_Decimal = 0xffae,
- XK_KP_Divide = 0xffaf,
- XK_KP_0 = 0xffb0,
- XK_KP_1 = 0xffb1,
- XK_KP_2 = 0xffb2,
- XK_KP_3 = 0xffb3,
- XK_KP_4 = 0xffb4,
- XK_KP_5 = 0xffb5,
- XK_KP_6 = 0xffb6,
- XK_KP_7 = 0xffb7,
- XK_KP_8 = 0xffb8,
- XK_KP_9 = 0xffb9,
- XK_F1 = 0xffbe,
- XK_F2 = 0xffbf,
- XK_F3 = 0xffc0,
- XK_F4 = 0xffc1,
- XK_F5 = 0xffc2,
- XK_F6 = 0xffc3,
- XK_F7 = 0xffc4,
- XK_F8 = 0xffc5,
- XK_F9 = 0xffc6,
- XK_F10 = 0xffc7,
- XK_F11 = 0xffc8,
- XK_L1 = 0xffc8,
- XK_F12 = 0xffc9,
- XK_L2 = 0xffc9,
- XK_F13 = 0xffca,
- XK_L3 = 0xffca,
- XK_F14 = 0xffcb,
- XK_L4 = 0xffcb,
- XK_F15 = 0xffcc,
- XK_L5 = 0xffcc,
- XK_F16 = 0xffcd,
- XK_L6 = 0xffcd,
- XK_F17 = 0xffce,
- XK_L7 = 0xffce,
- XK_F18 = 0xffcf,
- XK_L8 = 0xffcf,
- XK_F19 = 0xffd0,
- XK_L9 = 0xffd0,
- XK_F20 = 0xffd1,
- XK_L10 = 0xffd1,
- XK_F21 = 0xffd2,
- XK_R1 = 0xffd2,
- XK_F22 = 0xffd3,
- XK_R2 = 0xffd3,
- XK_F23 = 0xffd4,
- XK_R3 = 0xffd4,
- XK_F24 = 0xffd5,
- XK_R4 = 0xffd5,
- XK_F25 = 0xffd6,
- XK_R5 = 0xffd6,
- XK_F26 = 0xffd7,
- XK_R6 = 0xffd7,
- XK_F27 = 0xffd8,
- XK_R7 = 0xffd8,
- XK_F28 = 0xffd9,
- XK_R8 = 0xffd9,
- XK_F29 = 0xffda,
- XK_R9 = 0xffda,
- XK_F30 = 0xffdb,
- XK_R10 = 0xffdb,
- XK_F31 = 0xffdc,
- XK_R11 = 0xffdc,
- XK_F32 = 0xffdd,
- XK_R12 = 0xffdd,
- XK_F33 = 0xffde,
- XK_R13 = 0xffde,
- XK_F34 = 0xffdf,
- XK_R14 = 0xffdf,
- XK_F35 = 0xffe0,
- XK_R15 = 0xffe0,
- XK_Shift_L = 0xffe1, /* Left shift */
- XK_Shift_R = 0xffe2, /* Right shift */
- XK_Control_L = 0xffe3, /* Left control */
- XK_Control_R = 0xffe4, /* Right control */
- XK_Caps_Lock = 0xffe5, /* Caps lock */
- XK_Shift_Lock = 0xffe6, /* Shift lock */
- XK_Meta_L = 0xffe7, /* Left meta */
- XK_Meta_R = 0xffe8, /* Right meta */
- XK_Alt_L = 0xffe9, /* Left alt */
- XK_Alt_R = 0xffea, /* Right alt */
- XK_Super_L = 0xffeb, /* Left super */
- XK_Super_R = 0xffec, /* Right super */
- XK_Hyper_L = 0xffed, /* Left hyper */
- XK_Hyper_R = 0xffee, /* Right hyper */
- XK_ISO_Lock = 0xfe01,
- XK_ISO_Level2_Latch = 0xfe02,
- XK_ISO_Level3_Shift = 0xfe03,
- XK_ISO_Level3_Latch = 0xfe04,
- XK_ISO_Level3_Lock = 0xfe05,
- XK_ISO_Group_Shift = 0xff7e, /* Alias for mode_switch */
- XK_ISO_Group_Latch = 0xfe06,
- XK_ISO_Group_Lock = 0xfe07,
- XK_ISO_Next_Group = 0xfe08,
- XK_ISO_Next_Group_Lock = 0xfe09,
- XK_ISO_Prev_Group = 0xfe0a,
- XK_ISO_Prev_Group_Lock = 0xfe0b,
- XK_ISO_First_Group = 0xfe0c,
- XK_ISO_First_Group_Lock = 0xfe0d,
- XK_ISO_Last_Group = 0xfe0e,
- XK_ISO_Last_Group_Lock = 0xfe0f,
- XK_ISO_Left_Tab = 0xfe20,
- XK_ISO_Move_Line_Up = 0xfe21,
- XK_ISO_Move_Line_Down = 0xfe22,
- XK_ISO_Partial_Line_Up = 0xfe23,
- XK_ISO_Partial_Line_Down = 0xfe24,
- XK_ISO_Partial_Space_Left = 0xfe25,
- XK_ISO_Partial_Space_Right = 0xfe26,
- XK_ISO_Set_Margin_Left = 0xfe27,
- XK_ISO_Set_Margin_Right = 0xfe28,
- XK_ISO_Release_Margin_Left = 0xfe29,
- XK_ISO_Release_Margin_Right = 0xfe2a,
- XK_ISO_Release_Both_Margins = 0xfe2b,
- XK_ISO_Fast_Cursor_Left = 0xfe2c,
- XK_ISO_Fast_Cursor_Right = 0xfe2d,
- XK_ISO_Fast_Cursor_Up = 0xfe2e,
- XK_ISO_Fast_Cursor_Down = 0xfe2f,
- XK_ISO_Continuous_Underline = 0xfe30,
- XK_ISO_Discontinuous_Underline = 0xfe31,
- XK_ISO_Emphasize = 0xfe32,
- XK_ISO_Center_Object = 0xfe33,
- XK_ISO_Enter = 0xfe34,
- XK_dead_grave = 0xfe50,
- XK_dead_acute = 0xfe51,
- XK_dead_circumflex = 0xfe52,
- XK_dead_tilde = 0xfe53,
- XK_dead_macron = 0xfe54,
- XK_dead_breve = 0xfe55,
- XK_dead_abovedot = 0xfe56,
- XK_dead_diaeresis = 0xfe57,
- XK_dead_abovering = 0xfe58,
- XK_dead_doubleacute = 0xfe59,
- XK_dead_caron = 0xfe5a,
- XK_dead_cedilla = 0xfe5b,
- XK_dead_ogonek = 0xfe5c,
- XK_dead_iota = 0xfe5d,
- XK_dead_voiced_sound = 0xfe5e,
- XK_dead_semivoiced_sound = 0xfe5f,
- XK_dead_belowdot = 0xfe60,
- XK_dead_hook = 0xfe61,
- XK_dead_horn = 0xfe62,
- XK_First_Virtual_Screen = 0xfed0,
- XK_Prev_Virtual_Screen = 0xfed1,
- XK_Next_Virtual_Screen = 0xfed2,
- XK_Last_Virtual_Screen = 0xfed4,
- XK_Terminate_Server = 0xfed5,
- XK_AccessX_Enable = 0xfe70,
- XK_AccessX_Feedback_Enable = 0xfe71,
- XK_RepeatKeys_Enable = 0xfe72,
- XK_SlowKeys_Enable = 0xfe73,
- XK_BounceKeys_Enable = 0xfe74,
- XK_StickyKeys_Enable = 0xfe75,
- XK_MouseKeys_Enable = 0xfe76,
- XK_MouseKeys_Accel_Enable = 0xfe77,
- XK_Overlay1_Enable = 0xfe78,
- XK_Overlay2_Enable = 0xfe79,
- XK_AudibleBell_Enable = 0xfe7a,
- XK_Pointer_Left = 0xfee0,
- XK_Pointer_Right = 0xfee1,
- XK_Pointer_Up = 0xfee2,
- XK_Pointer_Down = 0xfee3,
- XK_Pointer_UpLeft = 0xfee4,
- XK_Pointer_UpRight = 0xfee5,
- XK_Pointer_DownLeft = 0xfee6,
- XK_Pointer_DownRight = 0xfee7,
- XK_Pointer_Button_Dflt = 0xfee8,
- XK_Pointer_Button1 = 0xfee9,
- XK_Pointer_Button2 = 0xfeea,
- XK_Pointer_Button3 = 0xfeeb,
- XK_Pointer_Button4 = 0xfeec,
- XK_Pointer_Button5 = 0xfeed,
- XK_Pointer_DblClick_Dflt = 0xfeee,
- XK_Pointer_DblClick1 = 0xfeef,
- XK_Pointer_DblClick2 = 0xfef0,
- XK_Pointer_DblClick3 = 0xfef1,
- XK_Pointer_DblClick4 = 0xfef2,
- XK_Pointer_DblClick5 = 0xfef3,
- XK_Pointer_Drag_Dflt = 0xfef4,
- XK_Pointer_Drag1 = 0xfef5,
- XK_Pointer_Drag2 = 0xfef6,
- XK_Pointer_Drag3 = 0xfef7,
- XK_Pointer_Drag4 = 0xfef8,
- XK_Pointer_Drag5 = 0xfefd,
- XK_Pointer_EnableKeys = 0xfef9,
- XK_Pointer_Accelerate = 0xfefa,
- XK_Pointer_DfltBtnNext = 0xfefb,
- XK_Pointer_DfltBtnPrev = 0xfefc,
- XK_3270_Duplicate = 0xfd01,
- XK_3270_FieldMark = 0xfd02,
- XK_3270_Right2 = 0xfd03,
- XK_3270_Left2 = 0xfd04,
- XK_3270_BackTab = 0xfd05,
- XK_3270_EraseEOF = 0xfd06,
- XK_3270_EraseInput = 0xfd07,
- XK_3270_Reset = 0xfd08,
- XK_3270_Quit = 0xfd09,
- XK_3270_PA1 = 0xfd0a,
- XK_3270_PA2 = 0xfd0b,
- XK_3270_PA3 = 0xfd0c,
- XK_3270_Test = 0xfd0d,
- XK_3270_Attn = 0xfd0e,
- XK_3270_CursorBlink = 0xfd0f,
- XK_3270_AltCursor = 0xfd10,
- XK_3270_KeyClick = 0xfd11,
- XK_3270_Jump = 0xfd12,
- XK_3270_Ident = 0xfd13,
- XK_3270_Rule = 0xfd14,
- XK_3270_Copy = 0xfd15,
- XK_3270_Play = 0xfd16,
- XK_3270_Setup = 0xfd17,
- XK_3270_Record = 0xfd18,
- XK_3270_ChangeScreen = 0xfd19,
- XK_3270_DeleteWord = 0xfd1a,
- XK_3270_ExSelect = 0xfd1b,
- XK_3270_CursorSelect = 0xfd1c,
- XK_3270_PrintScreen = 0xfd1d,
- XK_3270_Enter = 0xfd1e,
- XK_space = 0x0020, /* U+0020 SPACE */
- XK_exclam = 0x0021, /* U+0021 EXCLAMATION MARK */
- XK_quotedbl = 0x0022, /* U+0022 QUOTATION MARK */
- XK_numbersign = 0x0023, /* U+0023 NUMBER SIGN */
- XK_dollar = 0x0024, /* U+0024 DOLLAR SIGN */
- XK_percent = 0x0025, /* U+0025 PERCENT SIGN */
- XK_ampersand = 0x0026, /* U+0026 AMPERSAND */
- XK_apostrophe = 0x0027, /* U+0027 APOSTROPHE */
- XK_quoteright = 0x0027, /* deprecated */
- XK_parenleft = 0x0028, /* U+0028 LEFT PARENTHESIS */
- XK_parenright = 0x0029, /* U+0029 RIGHT PARENTHESIS */
- XK_asterisk = 0x002a, /* U+002A ASTERISK */
- XK_plus = 0x002b, /* U+002B PLUS SIGN */
- XK_comma = 0x002c, /* U+002C COMMA */
- XK_minus = 0x002d, /* U+002D HYPHEN-MINUS */
- XK_period = 0x002e, /* U+002E FULL STOP */
- XK_slash = 0x002f, /* U+002F SOLIDUS */
- XK_0 = 0x0030, /* U+0030 DIGIT ZERO */
- XK_1 = 0x0031, /* U+0031 DIGIT ONE */
- XK_2 = 0x0032, /* U+0032 DIGIT TWO */
- XK_3 = 0x0033, /* U+0033 DIGIT THREE */
- XK_4 = 0x0034, /* U+0034 DIGIT FOUR */
- XK_5 = 0x0035, /* U+0035 DIGIT FIVE */
- XK_6 = 0x0036, /* U+0036 DIGIT SIX */
- XK_7 = 0x0037, /* U+0037 DIGIT SEVEN */
- XK_8 = 0x0038, /* U+0038 DIGIT EIGHT */
- XK_9 = 0x0039, /* U+0039 DIGIT NINE */
- XK_colon = 0x003a, /* U+003A COLON */
- XK_semicolon = 0x003b, /* U+003B SEMICOLON */
- XK_less = 0x003c, /* U+003C LESS-THAN SIGN */
- XK_equal = 0x003d, /* U+003D EQUALS SIGN */
- XK_greater = 0x003e, /* U+003E GREATER-THAN SIGN */
- XK_question = 0x003f, /* U+003F QUESTION MARK */
- XK_at = 0x0040, /* U+0040 COMMERCIAL AT */
- XK_A = 0x0041, /* U+0041 LATIN CAPITAL LETTER A */
- XK_B = 0x0042, /* U+0042 LATIN CAPITAL LETTER B */
- XK_C = 0x0043, /* U+0043 LATIN CAPITAL LETTER C */
- XK_D = 0x0044, /* U+0044 LATIN CAPITAL LETTER D */
- XK_E = 0x0045, /* U+0045 LATIN CAPITAL LETTER E */
- XK_F = 0x0046, /* U+0046 LATIN CAPITAL LETTER F */
- XK_G = 0x0047, /* U+0047 LATIN CAPITAL LETTER G */
- XK_H = 0x0048, /* U+0048 LATIN CAPITAL LETTER H */
- XK_I = 0x0049, /* U+0049 LATIN CAPITAL LETTER I */
- XK_J = 0x004a, /* U+004A LATIN CAPITAL LETTER J */
- XK_K = 0x004b, /* U+004B LATIN CAPITAL LETTER K */
- XK_L = 0x004c, /* U+004C LATIN CAPITAL LETTER L */
- XK_M = 0x004d, /* U+004D LATIN CAPITAL LETTER M */
- XK_N = 0x004e, /* U+004E LATIN CAPITAL LETTER N */
- XK_O = 0x004f, /* U+004F LATIN CAPITAL LETTER O */
- XK_P = 0x0050, /* U+0050 LATIN CAPITAL LETTER P */
- XK_Q = 0x0051, /* U+0051 LATIN CAPITAL LETTER Q */
- XK_R = 0x0052, /* U+0052 LATIN CAPITAL LETTER R */
- XK_S = 0x0053, /* U+0053 LATIN CAPITAL LETTER S */
- XK_T = 0x0054, /* U+0054 LATIN CAPITAL LETTER T */
- XK_U = 0x0055, /* U+0055 LATIN CAPITAL LETTER U */
- XK_V = 0x0056, /* U+0056 LATIN CAPITAL LETTER V */
- XK_W = 0x0057, /* U+0057 LATIN CAPITAL LETTER W */
- XK_X = 0x0058, /* U+0058 LATIN CAPITAL LETTER X */
- XK_Y = 0x0059, /* U+0059 LATIN CAPITAL LETTER Y */
- XK_Z = 0x005a, /* U+005A LATIN CAPITAL LETTER Z */
- XK_bracketleft = 0x005b, /* U+005B LEFT SQUARE BRACKET */
- XK_backslash = 0x005c, /* U+005C REVERSE SOLIDUS */
- XK_bracketright = 0x005d, /* U+005D RIGHT SQUARE BRACKET */
- XK_asciicircum = 0x005e, /* U+005E CIRCUMFLEX ACCENT */
- XK_underscore = 0x005f, /* U+005F LOW LINE */
- XK_grave = 0x0060, /* U+0060 GRAVE ACCENT */
- XK_quoteleft = 0x0060, /* deprecated */
- XK_a = 0x0061, /* U+0061 LATIN SMALL LETTER A */
- XK_b = 0x0062, /* U+0062 LATIN SMALL LETTER B */
- XK_c = 0x0063, /* U+0063 LATIN SMALL LETTER C */
- XK_d = 0x0064, /* U+0064 LATIN SMALL LETTER D */
- XK_e = 0x0065, /* U+0065 LATIN SMALL LETTER E */
- XK_f = 0x0066, /* U+0066 LATIN SMALL LETTER F */
- XK_g = 0x0067, /* U+0067 LATIN SMALL LETTER G */
- XK_h = 0x0068, /* U+0068 LATIN SMALL LETTER H */
- XK_i = 0x0069, /* U+0069 LATIN SMALL LETTER I */
- XK_j = 0x006a, /* U+006A LATIN SMALL LETTER J */
- XK_k = 0x006b, /* U+006B LATIN SMALL LETTER K */
- XK_l = 0x006c, /* U+006C LATIN SMALL LETTER L */
- XK_m = 0x006d, /* U+006D LATIN SMALL LETTER M */
- XK_n = 0x006e, /* U+006E LATIN SMALL LETTER N */
- XK_o = 0x006f, /* U+006F LATIN SMALL LETTER O */
- XK_p = 0x0070, /* U+0070 LATIN SMALL LETTER P */
- XK_q = 0x0071, /* U+0071 LATIN SMALL LETTER Q */
- XK_r = 0x0072, /* U+0072 LATIN SMALL LETTER R */
- XK_s = 0x0073, /* U+0073 LATIN SMALL LETTER S */
- XK_t = 0x0074, /* U+0074 LATIN SMALL LETTER T */
- XK_u = 0x0075, /* U+0075 LATIN SMALL LETTER U */
- XK_v = 0x0076, /* U+0076 LATIN SMALL LETTER V */
- XK_w = 0x0077, /* U+0077 LATIN SMALL LETTER W */
- XK_x = 0x0078, /* U+0078 LATIN SMALL LETTER X */
- XK_y = 0x0079, /* U+0079 LATIN SMALL LETTER Y */
- XK_z = 0x007a, /* U+007A LATIN SMALL LETTER Z */
- XK_braceleft = 0x007b, /* U+007B LEFT CURLY BRACKET */
- XK_bar = 0x007c, /* U+007C VERTICAL LINE */
- XK_braceright = 0x007d, /* U+007D RIGHT CURLY BRACKET */
- XK_asciitilde = 0x007e, /* U+007E TILDE */
- XK_nobreakspace = 0x00a0, /* U+00A0 NO-BREAK SPACE */
- XK_exclamdown = 0x00a1, /* U+00A1 INVERTED EXCLAMATION MARK */
- XK_cent = 0x00a2, /* U+00A2 CENT SIGN */
- XK_sterling = 0x00a3, /* U+00A3 POUND SIGN */
- XK_currency = 0x00a4, /* U+00A4 CURRENCY SIGN */
- XK_yen = 0x00a5, /* U+00A5 YEN SIGN */
- XK_brokenbar = 0x00a6, /* U+00A6 BROKEN BAR */
- XK_section = 0x00a7, /* U+00A7 SECTION SIGN */
- XK_diaeresis = 0x00a8, /* U+00A8 DIAERESIS */
- XK_copyright = 0x00a9, /* U+00A9 COPYRIGHT SIGN */
- XK_ordfeminine = 0x00aa, /* U+00AA FEMININE ORDINAL INDICATOR */
- XK_guillemotleft = 0x00ab, /* U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
- XK_notsign = 0x00ac, /* U+00AC NOT SIGN */
- XK_hyphen = 0x00ad, /* U+00AD SOFT HYPHEN */
- XK_registered = 0x00ae, /* U+00AE REGISTERED SIGN */
- XK_macron = 0x00af, /* U+00AF MACRON */
- XK_degree = 0x00b0, /* U+00B0 DEGREE SIGN */
- XK_plusminus = 0x00b1, /* U+00B1 PLUS-MINUS SIGN */
- XK_twosuperior = 0x00b2, /* U+00B2 SUPERSCRIPT TWO */
- XK_threesuperior = 0x00b3, /* U+00B3 SUPERSCRIPT THREE */
- XK_acute = 0x00b4, /* U+00B4 ACUTE ACCENT */
- XK_mu = 0x00b5, /* U+00B5 MICRO SIGN */
- XK_paragraph = 0x00b6, /* U+00B6 PILCROW SIGN */
- XK_periodcentered = 0x00b7, /* U+00B7 MIDDLE DOT */
- XK_cedilla = 0x00b8, /* U+00B8 CEDILLA */
- XK_onesuperior = 0x00b9, /* U+00B9 SUPERSCRIPT ONE */
- XK_masculine = 0x00ba, /* U+00BA MASCULINE ORDINAL INDICATOR */
- XK_guillemotright = 0x00bb, /* U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
- XK_onequarter = 0x00bc, /* U+00BC VULGAR FRACTION ONE QUARTER */
- XK_onehalf = 0x00bd, /* U+00BD VULGAR FRACTION ONE HALF */
- XK_threequarters = 0x00be, /* U+00BE VULGAR FRACTION THREE QUARTERS */
- XK_questiondown = 0x00bf, /* U+00BF INVERTED QUESTION MARK */
- XK_Agrave = 0x00c0, /* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE */
- XK_Aacute = 0x00c1, /* U+00C1 LATIN CAPITAL LETTER A WITH ACUTE */
- XK_Acircumflex = 0x00c2, /* U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
- XK_Atilde = 0x00c3, /* U+00C3 LATIN CAPITAL LETTER A WITH TILDE */
- XK_Adiaeresis = 0x00c4, /* U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS */
- XK_Aring = 0x00c5, /* U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE */
- XK_AE = 0x00c6, /* U+00C6 LATIN CAPITAL LETTER AE */
- XK_Ccedilla = 0x00c7, /* U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA */
- XK_Egrave = 0x00c8, /* U+00C8 LATIN CAPITAL LETTER E WITH GRAVE */
- XK_Eacute = 0x00c9, /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */
- XK_Ecircumflex = 0x00ca, /* U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
- XK_Ediaeresis = 0x00cb, /* U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS */
- XK_Igrave = 0x00cc, /* U+00CC LATIN CAPITAL LETTER I WITH GRAVE */
- XK_Iacute = 0x00cd, /* U+00CD LATIN CAPITAL LETTER I WITH ACUTE */
- XK_Icircumflex = 0x00ce, /* U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
- XK_Idiaeresis = 0x00cf, /* U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS */
- XK_ETH = 0x00d0, /* U+00D0 LATIN CAPITAL LETTER ETH */
- XK_Eth = 0x00d0, /* deprecated */
- XK_Ntilde = 0x00d1, /* U+00D1 LATIN CAPITAL LETTER N WITH TILDE */
- XK_Ograve = 0x00d2, /* U+00D2 LATIN CAPITAL LETTER O WITH GRAVE */
- XK_Oacute = 0x00d3, /* U+00D3 LATIN CAPITAL LETTER O WITH ACUTE */
- XK_Ocircumflex = 0x00d4, /* U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
- XK_Otilde = 0x00d5, /* U+00D5 LATIN CAPITAL LETTER O WITH TILDE */
- XK_Odiaeresis = 0x00d6, /* U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS */
- XK_multiply = 0x00d7, /* U+00D7 MULTIPLICATION SIGN */
- XK_Oslash = 0x00d8, /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */
- XK_Ooblique = 0x00d8, /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */
- XK_Ugrave = 0x00d9, /* U+00D9 LATIN CAPITAL LETTER U WITH GRAVE */
- XK_Uacute = 0x00da, /* U+00DA LATIN CAPITAL LETTER U WITH ACUTE */
- XK_Ucircumflex = 0x00db, /* U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
- XK_Udiaeresis = 0x00dc, /* U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS */
- XK_Yacute = 0x00dd, /* U+00DD LATIN CAPITAL LETTER Y WITH ACUTE */
- XK_THORN = 0x00de, /* U+00DE LATIN CAPITAL LETTER THORN */
- XK_Thorn = 0x00de, /* deprecated */
- XK_ssharp = 0x00df, /* U+00DF LATIN SMALL LETTER SHARP S */
- XK_agrave = 0x00e0, /* U+00E0 LATIN SMALL LETTER A WITH GRAVE */
- XK_aacute = 0x00e1, /* U+00E1 LATIN SMALL LETTER A WITH ACUTE */
- XK_acircumflex = 0x00e2, /* U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX */
- XK_atilde = 0x00e3, /* U+00E3 LATIN SMALL LETTER A WITH TILDE */
- XK_adiaeresis = 0x00e4, /* U+00E4 LATIN SMALL LETTER A WITH DIAERESIS */
- XK_aring = 0x00e5, /* U+00E5 LATIN SMALL LETTER A WITH RING ABOVE */
- XK_ae = 0x00e6, /* U+00E6 LATIN SMALL LETTER AE */
- XK_ccedilla = 0x00e7, /* U+00E7 LATIN SMALL LETTER C WITH CEDILLA */
- XK_egrave = 0x00e8, /* U+00E8 LATIN SMALL LETTER E WITH GRAVE */
- XK_eacute = 0x00e9, /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */
- XK_ecircumflex = 0x00ea, /* U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX */
- XK_ediaeresis = 0x00eb, /* U+00EB LATIN SMALL LETTER E WITH DIAERESIS */
- XK_igrave = 0x00ec, /* U+00EC LATIN SMALL LETTER I WITH GRAVE */
- XK_iacute = 0x00ed, /* U+00ED LATIN SMALL LETTER I WITH ACUTE */
- XK_icircumflex = 0x00ee, /* U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX */
- XK_idiaeresis = 0x00ef, /* U+00EF LATIN SMALL LETTER I WITH DIAERESIS */
- XK_eth = 0x00f0, /* U+00F0 LATIN SMALL LETTER ETH */
- XK_ntilde = 0x00f1, /* U+00F1 LATIN SMALL LETTER N WITH TILDE */
- XK_ograve = 0x00f2, /* U+00F2 LATIN SMALL LETTER O WITH GRAVE */
- XK_oacute = 0x00f3, /* U+00F3 LATIN SMALL LETTER O WITH ACUTE */
- XK_ocircumflex = 0x00f4, /* U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX */
- XK_otilde = 0x00f5, /* U+00F5 LATIN SMALL LETTER O WITH TILDE */
- XK_odiaeresis = 0x00f6, /* U+00F6 LATIN SMALL LETTER O WITH DIAERESIS */
- XK_division = 0x00f7, /* U+00F7 DIVISION SIGN */
- XK_oslash = 0x00f8, /* U+00F8 LATIN SMALL LETTER O WITH STROKE */
- XK_ooblique = 0x00f8, /* U+00F8 LATIN SMALL LETTER O WITH STROKE */
- XK_ugrave = 0x00f9, /* U+00F9 LATIN SMALL LETTER U WITH GRAVE */
- XK_uacute = 0x00fa, /* U+00FA LATIN SMALL LETTER U WITH ACUTE */
- XK_ucircumflex = 0x00fb, /* U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX */
- XK_udiaeresis = 0x00fc, /* U+00FC LATIN SMALL LETTER U WITH DIAERESIS */
- XK_yacute = 0x00fd, /* U+00FD LATIN SMALL LETTER Y WITH ACUTE */
- XK_thorn = 0x00fe, /* U+00FE LATIN SMALL LETTER THORN */
- XK_ydiaeresis = 0x00ff, /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */
- XK_Aogonek = 0x01a1, /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */
- XK_breve = 0x01a2, /* U+02D8 BREVE */
- XK_Lstroke = 0x01a3, /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */
- XK_Lcaron = 0x01a5, /* U+013D LATIN CAPITAL LETTER L WITH CARON */
- XK_Sacute = 0x01a6, /* U+015A LATIN CAPITAL LETTER S WITH ACUTE */
- XK_Scaron = 0x01a9, /* U+0160 LATIN CAPITAL LETTER S WITH CARON */
- XK_Scedilla = 0x01aa, /* U+015E LATIN CAPITAL LETTER S WITH CEDILLA */
- XK_Tcaron = 0x01ab, /* U+0164 LATIN CAPITAL LETTER T WITH CARON */
- XK_Zacute = 0x01ac, /* U+0179 LATIN CAPITAL LETTER Z WITH ACUTE */
- XK_Zcaron = 0x01ae, /* U+017D LATIN CAPITAL LETTER Z WITH CARON */
- XK_Zabovedot = 0x01af, /* U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE */
- XK_aogonek = 0x01b1, /* U+0105 LATIN SMALL LETTER A WITH OGONEK */
- XK_ogonek = 0x01b2, /* U+02DB OGONEK */
- XK_lstroke = 0x01b3, /* U+0142 LATIN SMALL LETTER L WITH STROKE */
- XK_lcaron = 0x01b5, /* U+013E LATIN SMALL LETTER L WITH CARON */
- XK_sacute = 0x01b6, /* U+015B LATIN SMALL LETTER S WITH ACUTE */
- XK_caron = 0x01b7, /* U+02C7 CARON */
- XK_scaron = 0x01b9, /* U+0161 LATIN SMALL LETTER S WITH CARON */
- XK_scedilla = 0x01ba, /* U+015F LATIN SMALL LETTER S WITH CEDILLA */
- XK_tcaron = 0x01bb, /* U+0165 LATIN SMALL LETTER T WITH CARON */
- XK_zacute = 0x01bc, /* U+017A LATIN SMALL LETTER Z WITH ACUTE */
- XK_doubleacute = 0x01bd, /* U+02DD DOUBLE ACUTE ACCENT */
- XK_zcaron = 0x01be, /* U+017E LATIN SMALL LETTER Z WITH CARON */
- XK_zabovedot = 0x01bf, /* U+017C LATIN SMALL LETTER Z WITH DOT ABOVE */
- XK_Racute = 0x01c0, /* U+0154 LATIN CAPITAL LETTER R WITH ACUTE */
- XK_Abreve = 0x01c3, /* U+0102 LATIN CAPITAL LETTER A WITH BREVE */
- XK_Lacute = 0x01c5, /* U+0139 LATIN CAPITAL LETTER L WITH ACUTE */
- XK_Cacute = 0x01c6, /* U+0106 LATIN CAPITAL LETTER C WITH ACUTE */
- XK_Ccaron = 0x01c8, /* U+010C LATIN CAPITAL LETTER C WITH CARON */
- XK_Eogonek = 0x01ca, /* U+0118 LATIN CAPITAL LETTER E WITH OGONEK */
- XK_Ecaron = 0x01cc, /* U+011A LATIN CAPITAL LETTER E WITH CARON */
- XK_Dcaron = 0x01cf, /* U+010E LATIN CAPITAL LETTER D WITH CARON */
- XK_Dstroke = 0x01d0, /* U+0110 LATIN CAPITAL LETTER D WITH STROKE */
- XK_Nacute = 0x01d1, /* U+0143 LATIN CAPITAL LETTER N WITH ACUTE */
- XK_Ncaron = 0x01d2, /* U+0147 LATIN CAPITAL LETTER N WITH CARON */
- XK_Odoubleacute = 0x01d5, /* U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
- XK_Rcaron = 0x01d8, /* U+0158 LATIN CAPITAL LETTER R WITH CARON */
- XK_Uring = 0x01d9, /* U+016E LATIN CAPITAL LETTER U WITH RING ABOVE */
- XK_Udoubleacute = 0x01db, /* U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
- XK_Tcedilla = 0x01de, /* U+0162 LATIN CAPITAL LETTER T WITH CEDILLA */
- XK_racute = 0x01e0, /* U+0155 LATIN SMALL LETTER R WITH ACUTE */
- XK_abreve = 0x01e3, /* U+0103 LATIN SMALL LETTER A WITH BREVE */
- XK_lacute = 0x01e5, /* U+013A LATIN SMALL LETTER L WITH ACUTE */
- XK_cacute = 0x01e6, /* U+0107 LATIN SMALL LETTER C WITH ACUTE */
- XK_ccaron = 0x01e8, /* U+010D LATIN SMALL LETTER C WITH CARON */
- XK_eogonek = 0x01ea, /* U+0119 LATIN SMALL LETTER E WITH OGONEK */
- XK_ecaron = 0x01ec, /* U+011B LATIN SMALL LETTER E WITH CARON */
- XK_dcaron = 0x01ef, /* U+010F LATIN SMALL LETTER D WITH CARON */
- XK_dstroke = 0x01f0, /* U+0111 LATIN SMALL LETTER D WITH STROKE */
- XK_nacute = 0x01f1, /* U+0144 LATIN SMALL LETTER N WITH ACUTE */
- XK_ncaron = 0x01f2, /* U+0148 LATIN SMALL LETTER N WITH CARON */
- XK_odoubleacute = 0x01f5, /* U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE */
- XK_udoubleacute = 0x01fb, /* U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE */
- XK_rcaron = 0x01f8, /* U+0159 LATIN SMALL LETTER R WITH CARON */
- XK_uring = 0x01f9, /* U+016F LATIN SMALL LETTER U WITH RING ABOVE */
- XK_tcedilla = 0x01fe, /* U+0163 LATIN SMALL LETTER T WITH CEDILLA */
- XK_abovedot = 0x01ff, /* U+02D9 DOT ABOVE */
- XK_Hstroke = 0x02a1, /* U+0126 LATIN CAPITAL LETTER H WITH STROKE */
- XK_Hcircumflex = 0x02a6, /* U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
- XK_Iabovedot = 0x02a9, /* U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE */
- XK_Gbreve = 0x02ab, /* U+011E LATIN CAPITAL LETTER G WITH BREVE */
- XK_Jcircumflex = 0x02ac, /* U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
- XK_hstroke = 0x02b1, /* U+0127 LATIN SMALL LETTER H WITH STROKE */
- XK_hcircumflex = 0x02b6, /* U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX */
- XK_idotless = 0x02b9, /* U+0131 LATIN SMALL LETTER DOTLESS I */
- XK_gbreve = 0x02bb, /* U+011F LATIN SMALL LETTER G WITH BREVE */
- XK_jcircumflex = 0x02bc, /* U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX */
- XK_Cabovedot = 0x02c5, /* U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE */
- XK_Ccircumflex = 0x02c6, /* U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
- XK_Gabovedot = 0x02d5, /* U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE */
- XK_Gcircumflex = 0x02d8, /* U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
- XK_Ubreve = 0x02dd, /* U+016C LATIN CAPITAL LETTER U WITH BREVE */
- XK_Scircumflex = 0x02de, /* U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
- XK_cabovedot = 0x02e5, /* U+010B LATIN SMALL LETTER C WITH DOT ABOVE */
- XK_ccircumflex = 0x02e6, /* U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX */
- XK_gabovedot = 0x02f5, /* U+0121 LATIN SMALL LETTER G WITH DOT ABOVE */
- XK_gcircumflex = 0x02f8, /* U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX */
- XK_ubreve = 0x02fd, /* U+016D LATIN SMALL LETTER U WITH BREVE */
- XK_scircumflex = 0x02fe, /* U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX */
- XK_kra = 0x03a2, /* U+0138 LATIN SMALL LETTER KRA */
- XK_kappa = 0x03a2, /* deprecated */
- XK_Rcedilla = 0x03a3, /* U+0156 LATIN CAPITAL LETTER R WITH CEDILLA */
- XK_Itilde = 0x03a5, /* U+0128 LATIN CAPITAL LETTER I WITH TILDE */
- XK_Lcedilla = 0x03a6, /* U+013B LATIN CAPITAL LETTER L WITH CEDILLA */
- XK_Emacron = 0x03aa, /* U+0112 LATIN CAPITAL LETTER E WITH MACRON */
- XK_Gcedilla = 0x03ab, /* U+0122 LATIN CAPITAL LETTER G WITH CEDILLA */
- XK_Tslash = 0x03ac, /* U+0166 LATIN CAPITAL LETTER T WITH STROKE */
- XK_rcedilla = 0x03b3, /* U+0157 LATIN SMALL LETTER R WITH CEDILLA */
- XK_itilde = 0x03b5, /* U+0129 LATIN SMALL LETTER I WITH TILDE */
- XK_lcedilla = 0x03b6, /* U+013C LATIN SMALL LETTER L WITH CEDILLA */
- XK_emacron = 0x03ba, /* U+0113 LATIN SMALL LETTER E WITH MACRON */
- XK_gcedilla = 0x03bb, /* U+0123 LATIN SMALL LETTER G WITH CEDILLA */
- XK_tslash = 0x03bc, /* U+0167 LATIN SMALL LETTER T WITH STROKE */
- XK_ENG = 0x03bd, /* U+014A LATIN CAPITAL LETTER ENG */
- XK_eng = 0x03bf, /* U+014B LATIN SMALL LETTER ENG */
- XK_Amacron = 0x03c0, /* U+0100 LATIN CAPITAL LETTER A WITH MACRON */
- XK_Iogonek = 0x03c7, /* U+012E LATIN CAPITAL LETTER I WITH OGONEK */
- XK_Eabovedot = 0x03cc, /* U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE */
- XK_Imacron = 0x03cf, /* U+012A LATIN CAPITAL LETTER I WITH MACRON */
- XK_Ncedilla = 0x03d1, /* U+0145 LATIN CAPITAL LETTER N WITH CEDILLA */
- XK_Omacron = 0x03d2, /* U+014C LATIN CAPITAL LETTER O WITH MACRON */
- XK_Kcedilla = 0x03d3, /* U+0136 LATIN CAPITAL LETTER K WITH CEDILLA */
- XK_Uogonek = 0x03d9, /* U+0172 LATIN CAPITAL LETTER U WITH OGONEK */
- XK_Utilde = 0x03dd, /* U+0168 LATIN CAPITAL LETTER U WITH TILDE */
- XK_Umacron = 0x03de, /* U+016A LATIN CAPITAL LETTER U WITH MACRON */
- XK_amacron = 0x03e0, /* U+0101 LATIN SMALL LETTER A WITH MACRON */
- XK_iogonek = 0x03e7, /* U+012F LATIN SMALL LETTER I WITH OGONEK */
- XK_eabovedot = 0x03ec, /* U+0117 LATIN SMALL LETTER E WITH DOT ABOVE */
- XK_imacron = 0x03ef, /* U+012B LATIN SMALL LETTER I WITH MACRON */
- XK_ncedilla = 0x03f1, /* U+0146 LATIN SMALL LETTER N WITH CEDILLA */
- XK_omacron = 0x03f2, /* U+014D LATIN SMALL LETTER O WITH MACRON */
- XK_kcedilla = 0x03f3, /* U+0137 LATIN SMALL LETTER K WITH CEDILLA */
- XK_uogonek = 0x03f9, /* U+0173 LATIN SMALL LETTER U WITH OGONEK */
- XK_utilde = 0x03fd, /* U+0169 LATIN SMALL LETTER U WITH TILDE */
- XK_umacron = 0x03fe, /* U+016B LATIN SMALL LETTER U WITH MACRON */
- XK_Babovedot = 0x1001e02, /* U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE */
- XK_babovedot = 0x1001e03, /* U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE */
- XK_Dabovedot = 0x1001e0a, /* U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE */
- XK_Wgrave = 0x1001e80, /* U+1E80 LATIN CAPITAL LETTER W WITH GRAVE */
- XK_Wacute = 0x1001e82, /* U+1E82 LATIN CAPITAL LETTER W WITH ACUTE */
- XK_dabovedot = 0x1001e0b, /* U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE */
- XK_Ygrave = 0x1001ef2, /* U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE */
- XK_Fabovedot = 0x1001e1e, /* U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE */
- XK_fabovedot = 0x1001e1f, /* U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE */
- XK_Mabovedot = 0x1001e40, /* U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE */
- XK_mabovedot = 0x1001e41, /* U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE */
- XK_Pabovedot = 0x1001e56, /* U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE */
- XK_wgrave = 0x1001e81, /* U+1E81 LATIN SMALL LETTER W WITH GRAVE */
- XK_pabovedot = 0x1001e57, /* U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE */
- XK_wacute = 0x1001e83, /* U+1E83 LATIN SMALL LETTER W WITH ACUTE */
- XK_Sabovedot = 0x1001e60, /* U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE */
- XK_ygrave = 0x1001ef3, /* U+1EF3 LATIN SMALL LETTER Y WITH GRAVE */
- XK_Wdiaeresis = 0x1001e84, /* U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS */
- XK_wdiaeresis = 0x1001e85, /* U+1E85 LATIN SMALL LETTER W WITH DIAERESIS */
- XK_sabovedot = 0x1001e61, /* U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE */
- XK_Wcircumflex = 0x1000174, /* U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
- XK_Tabovedot = 0x1001e6a, /* U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE */
- XK_Ycircumflex = 0x1000176, /* U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
- XK_wcircumflex = 0x1000175, /* U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX */
- XK_tabovedot = 0x1001e6b, /* U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE */
- XK_ycircumflex = 0x1000177, /* U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX */
- XK_OE = 0x13bc, /* U+0152 LATIN CAPITAL LIGATURE OE */
- XK_oe = 0x13bd, /* U+0153 LATIN SMALL LIGATURE OE */
- XK_Ydiaeresis = 0x13be, /* U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS */
- XK_overline = 0x047e, /* U+203E OVERLINE */
- XK_kana_fullstop = 0x04a1, /* U+3002 IDEOGRAPHIC FULL STOP */
- XK_kana_openingbracket = 0x04a2, /* U+300C LEFT CORNER BRACKET */
- XK_kana_closingbracket = 0x04a3, /* U+300D RIGHT CORNER BRACKET */
- XK_kana_comma = 0x04a4, /* U+3001 IDEOGRAPHIC COMMA */
- XK_kana_conjunctive = 0x04a5, /* U+30FB KATAKANA MIDDLE DOT */
- XK_kana_middledot = 0x04a5, /* deprecated */
- XK_kana_WO = 0x04a6, /* U+30F2 KATAKANA LETTER WO */
- XK_kana_a = 0x04a7, /* U+30A1 KATAKANA LETTER SMALL A */
- XK_kana_i = 0x04a8, /* U+30A3 KATAKANA LETTER SMALL I */
- XK_kana_u = 0x04a9, /* U+30A5 KATAKANA LETTER SMALL U */
- XK_kana_e = 0x04aa, /* U+30A7 KATAKANA LETTER SMALL E */
- XK_kana_o = 0x04ab, /* U+30A9 KATAKANA LETTER SMALL O */
- XK_kana_ya = 0x04ac, /* U+30E3 KATAKANA LETTER SMALL YA */
- XK_kana_yu = 0x04ad, /* U+30E5 KATAKANA LETTER SMALL YU */
- XK_kana_yo = 0x04ae, /* U+30E7 KATAKANA LETTER SMALL YO */
- XK_kana_tsu = 0x04af, /* U+30C3 KATAKANA LETTER SMALL TU */
- XK_kana_tu = 0x04af, /* deprecated */
- XK_prolongedsound = 0x04b0, /* U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK */
- XK_kana_A = 0x04b1, /* U+30A2 KATAKANA LETTER A */
- XK_kana_I = 0x04b2, /* U+30A4 KATAKANA LETTER I */
- XK_kana_U = 0x04b3, /* U+30A6 KATAKANA LETTER U */
- XK_kana_E = 0x04b4, /* U+30A8 KATAKANA LETTER E */
- XK_kana_O = 0x04b5, /* U+30AA KATAKANA LETTER O */
- XK_kana_KA = 0x04b6, /* U+30AB KATAKANA LETTER KA */
- XK_kana_KI = 0x04b7, /* U+30AD KATAKANA LETTER KI */
- XK_kana_KU = 0x04b8, /* U+30AF KATAKANA LETTER KU */
- XK_kana_KE = 0x04b9, /* U+30B1 KATAKANA LETTER KE */
- XK_kana_KO = 0x04ba, /* U+30B3 KATAKANA LETTER KO */
- XK_kana_SA = 0x04bb, /* U+30B5 KATAKANA LETTER SA */
- XK_kana_SHI = 0x04bc, /* U+30B7 KATAKANA LETTER SI */
- XK_kana_SU = 0x04bd, /* U+30B9 KATAKANA LETTER SU */
- XK_kana_SE = 0x04be, /* U+30BB KATAKANA LETTER SE */
- XK_kana_SO = 0x04bf, /* U+30BD KATAKANA LETTER SO */
- XK_kana_TA = 0x04c0, /* U+30BF KATAKANA LETTER TA */
- XK_kana_CHI = 0x04c1, /* U+30C1 KATAKANA LETTER TI */
- XK_kana_TI = 0x04c1, /* deprecated */
- XK_kana_TSU = 0x04c2, /* U+30C4 KATAKANA LETTER TU */
- XK_kana_TU = 0x04c2, /* deprecated */
- XK_kana_TE = 0x04c3, /* U+30C6 KATAKANA LETTER TE */
- XK_kana_TO = 0x04c4, /* U+30C8 KATAKANA LETTER TO */
- XK_kana_NA = 0x04c5, /* U+30CA KATAKANA LETTER NA */
- XK_kana_NI = 0x04c6, /* U+30CB KATAKANA LETTER NI */
- XK_kana_NU = 0x04c7, /* U+30CC KATAKANA LETTER NU */
- XK_kana_NE = 0x04c8, /* U+30CD KATAKANA LETTER NE */
- XK_kana_NO = 0x04c9, /* U+30CE KATAKANA LETTER NO */
- XK_kana_HA = 0x04ca, /* U+30CF KATAKANA LETTER HA */
- XK_kana_HI = 0x04cb, /* U+30D2 KATAKANA LETTER HI */
- XK_kana_FU = 0x04cc, /* U+30D5 KATAKANA LETTER HU */
- XK_kana_HU = 0x04cc, /* deprecated */
- XK_kana_HE = 0x04cd, /* U+30D8 KATAKANA LETTER HE */
- XK_kana_HO = 0x04ce, /* U+30DB KATAKANA LETTER HO */
- XK_kana_MA = 0x04cf, /* U+30DE KATAKANA LETTER MA */
- XK_kana_MI = 0x04d0, /* U+30DF KATAKANA LETTER MI */
- XK_kana_MU = 0x04d1, /* U+30E0 KATAKANA LETTER MU */
- XK_kana_ME = 0x04d2, /* U+30E1 KATAKANA LETTER ME */
- XK_kana_MO = 0x04d3, /* U+30E2 KATAKANA LETTER MO */
- XK_kana_YA = 0x04d4, /* U+30E4 KATAKANA LETTER YA */
- XK_kana_YU = 0x04d5, /* U+30E6 KATAKANA LETTER YU */
- XK_kana_YO = 0x04d6, /* U+30E8 KATAKANA LETTER YO */
- XK_kana_RA = 0x04d7, /* U+30E9 KATAKANA LETTER RA */
- XK_kana_RI = 0x04d8, /* U+30EA KATAKANA LETTER RI */
- XK_kana_RU = 0x04d9, /* U+30EB KATAKANA LETTER RU */
- XK_kana_RE = 0x04da, /* U+30EC KATAKANA LETTER RE */
- XK_kana_RO = 0x04db, /* U+30ED KATAKANA LETTER RO */
- XK_kana_WA = 0x04dc, /* U+30EF KATAKANA LETTER WA */
- XK_kana_N = 0x04dd, /* U+30F3 KATAKANA LETTER N */
- XK_voicedsound = 0x04de, /* U+309B KATAKANA-HIRAGANA VOICED SOUND MARK */
- XK_semivoicedsound = 0x04df, /* U+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
- XK_kana_switch = 0xff7e, /* Alias for mode_switch */
- XK_Farsi_0 = 0x10006f0, /* U+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO */
- XK_Farsi_1 = 0x10006f1, /* U+06F1 EXTENDED ARABIC-INDIC DIGIT ONE */
- XK_Farsi_2 = 0x10006f2, /* U+06F2 EXTENDED ARABIC-INDIC DIGIT TWO */
- XK_Farsi_3 = 0x10006f3, /* U+06F3 EXTENDED ARABIC-INDIC DIGIT THREE */
- XK_Farsi_4 = 0x10006f4, /* U+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR */
- XK_Farsi_5 = 0x10006f5, /* U+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE */
- XK_Farsi_6 = 0x10006f6, /* U+06F6 EXTENDED ARABIC-INDIC DIGIT SIX */
- XK_Farsi_7 = 0x10006f7, /* U+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN */
- XK_Farsi_8 = 0x10006f8, /* U+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT */
- XK_Farsi_9 = 0x10006f9, /* U+06F9 EXTENDED ARABIC-INDIC DIGIT NINE */
- XK_Arabic_percent = 0x100066a, /* U+066A ARABIC PERCENT SIGN */
- XK_Arabic_superscript_alef = 0x1000670, /* U+0670 ARABIC LETTER SUPERSCRIPT ALEF */
- XK_Arabic_tteh = 0x1000679, /* U+0679 ARABIC LETTER TTEH */
- XK_Arabic_peh = 0x100067e, /* U+067E ARABIC LETTER PEH */
- XK_Arabic_tcheh = 0x1000686, /* U+0686 ARABIC LETTER TCHEH */
- XK_Arabic_ddal = 0x1000688, /* U+0688 ARABIC LETTER DDAL */
- XK_Arabic_rreh = 0x1000691, /* U+0691 ARABIC LETTER RREH */
- XK_Arabic_comma = 0x05ac, /* U+060C ARABIC COMMA */
- XK_Arabic_fullstop = 0x10006d4, /* U+06D4 ARABIC FULL STOP */
- XK_Arabic_0 = 0x1000660, /* U+0660 ARABIC-INDIC DIGIT ZERO */
- XK_Arabic_1 = 0x1000661, /* U+0661 ARABIC-INDIC DIGIT ONE */
- XK_Arabic_2 = 0x1000662, /* U+0662 ARABIC-INDIC DIGIT TWO */
- XK_Arabic_3 = 0x1000663, /* U+0663 ARABIC-INDIC DIGIT THREE */
- XK_Arabic_4 = 0x1000664, /* U+0664 ARABIC-INDIC DIGIT FOUR */
- XK_Arabic_5 = 0x1000665, /* U+0665 ARABIC-INDIC DIGIT FIVE */
- XK_Arabic_6 = 0x1000666, /* U+0666 ARABIC-INDIC DIGIT SIX */
- XK_Arabic_7 = 0x1000667, /* U+0667 ARABIC-INDIC DIGIT SEVEN */
- XK_Arabic_8 = 0x1000668, /* U+0668 ARABIC-INDIC DIGIT EIGHT */
- XK_Arabic_9 = 0x1000669, /* U+0669 ARABIC-INDIC DIGIT NINE */
- XK_Arabic_semicolon = 0x05bb, /* U+061B ARABIC SEMICOLON */
- XK_Arabic_question_mark = 0x05bf, /* U+061F ARABIC QUESTION MARK */
- XK_Arabic_hamza = 0x05c1, /* U+0621 ARABIC LETTER HAMZA */
- XK_Arabic_maddaonalef = 0x05c2, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
- XK_Arabic_hamzaonalef = 0x05c3, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
- XK_Arabic_hamzaonwaw = 0x05c4, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
- XK_Arabic_hamzaunderalef = 0x05c5, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
- XK_Arabic_hamzaonyeh = 0x05c6, /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */
- XK_Arabic_alef = 0x05c7, /* U+0627 ARABIC LETTER ALEF */
- XK_Arabic_beh = 0x05c8, /* U+0628 ARABIC LETTER BEH */
- XK_Arabic_tehmarbuta = 0x05c9, /* U+0629 ARABIC LETTER TEH MARBUTA */
- XK_Arabic_teh = 0x05ca, /* U+062A ARABIC LETTER TEH */
- XK_Arabic_theh = 0x05cb, /* U+062B ARABIC LETTER THEH */
- XK_Arabic_jeem = 0x05cc, /* U+062C ARABIC LETTER JEEM */
- XK_Arabic_hah = 0x05cd, /* U+062D ARABIC LETTER HAH */
- XK_Arabic_khah = 0x05ce, /* U+062E ARABIC LETTER KHAH */
- XK_Arabic_dal = 0x05cf, /* U+062F ARABIC LETTER DAL */
- XK_Arabic_thal = 0x05d0, /* U+0630 ARABIC LETTER THAL */
- XK_Arabic_ra = 0x05d1, /* U+0631 ARABIC LETTER REH */
- XK_Arabic_zain = 0x05d2, /* U+0632 ARABIC LETTER ZAIN */
- XK_Arabic_seen = 0x05d3, /* U+0633 ARABIC LETTER SEEN */
- XK_Arabic_sheen = 0x05d4, /* U+0634 ARABIC LETTER SHEEN */
- XK_Arabic_sad = 0x05d5, /* U+0635 ARABIC LETTER SAD */
- XK_Arabic_dad = 0x05d6, /* U+0636 ARABIC LETTER DAD */
- XK_Arabic_tah = 0x05d7, /* U+0637 ARABIC LETTER TAH */
- XK_Arabic_zah = 0x05d8, /* U+0638 ARABIC LETTER ZAH */
- XK_Arabic_ain = 0x05d9, /* U+0639 ARABIC LETTER AIN */
- XK_Arabic_ghain = 0x05da, /* U+063A ARABIC LETTER GHAIN */
- XK_Arabic_tatweel = 0x05e0, /* U+0640 ARABIC TATWEEL */
- XK_Arabic_feh = 0x05e1, /* U+0641 ARABIC LETTER FEH */
- XK_Arabic_qaf = 0x05e2, /* U+0642 ARABIC LETTER QAF */
- XK_Arabic_kaf = 0x05e3, /* U+0643 ARABIC LETTER KAF */
- XK_Arabic_lam = 0x05e4, /* U+0644 ARABIC LETTER LAM */
- XK_Arabic_meem = 0x05e5, /* U+0645 ARABIC LETTER MEEM */
- XK_Arabic_noon = 0x05e6, /* U+0646 ARABIC LETTER NOON */
- XK_Arabic_ha = 0x05e7, /* U+0647 ARABIC LETTER HEH */
- XK_Arabic_heh = 0x05e7, /* deprecated */
- XK_Arabic_waw = 0x05e8, /* U+0648 ARABIC LETTER WAW */
- XK_Arabic_alefmaksura = 0x05e9, /* U+0649 ARABIC LETTER ALEF MAKSURA */
- XK_Arabic_yeh = 0x05ea, /* U+064A ARABIC LETTER YEH */
- XK_Arabic_fathatan = 0x05eb, /* U+064B ARABIC FATHATAN */
- XK_Arabic_dammatan = 0x05ec, /* U+064C ARABIC DAMMATAN */
- XK_Arabic_kasratan = 0x05ed, /* U+064D ARABIC KASRATAN */
- XK_Arabic_fatha = 0x05ee, /* U+064E ARABIC FATHA */
- XK_Arabic_damma = 0x05ef, /* U+064F ARABIC DAMMA */
- XK_Arabic_kasra = 0x05f0, /* U+0650 ARABIC KASRA */
- XK_Arabic_shadda = 0x05f1, /* U+0651 ARABIC SHADDA */
- XK_Arabic_sukun = 0x05f2, /* U+0652 ARABIC SUKUN */
- XK_Arabic_madda_above = 0x1000653, /* U+0653 ARABIC MADDAH ABOVE */
- XK_Arabic_hamza_above = 0x1000654, /* U+0654 ARABIC HAMZA ABOVE */
- XK_Arabic_hamza_below = 0x1000655, /* U+0655 ARABIC HAMZA BELOW */
- XK_Arabic_jeh = 0x1000698, /* U+0698 ARABIC LETTER JEH */
- XK_Arabic_veh = 0x10006a4, /* U+06A4 ARABIC LETTER VEH */
- XK_Arabic_keheh = 0x10006a9, /* U+06A9 ARABIC LETTER KEHEH */
- XK_Arabic_gaf = 0x10006af, /* U+06AF ARABIC LETTER GAF */
- XK_Arabic_noon_ghunna = 0x10006ba, /* U+06BA ARABIC LETTER NOON GHUNNA */
- XK_Arabic_heh_doachashmee = 0x10006be, /* U+06BE ARABIC LETTER HEH DOACHASHMEE */
- XK_Farsi_yeh = 0x10006cc, /* U+06CC ARABIC LETTER FARSI YEH */
- XK_Arabic_farsi_yeh = 0x10006cc, /* U+06CC ARABIC LETTER FARSI YEH */
- XK_Arabic_yeh_baree = 0x10006d2, /* U+06D2 ARABIC LETTER YEH BARREE */
- XK_Arabic_heh_goal = 0x10006c1, /* U+06C1 ARABIC LETTER HEH GOAL */
- XK_Arabic_switch = 0xff7e, /* Alias for mode_switch */
- XK_Cyrillic_GHE_bar = 0x1000492, /* U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE */
- XK_Cyrillic_ghe_bar = 0x1000493, /* U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE */
- XK_Cyrillic_ZHE_descender = 0x1000496, /* U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */
- XK_Cyrillic_zhe_descender = 0x1000497, /* U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER */
- XK_Cyrillic_KA_descender = 0x100049a, /* U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER */
- XK_Cyrillic_ka_descender = 0x100049b, /* U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER */
- XK_Cyrillic_KA_vertstroke = 0x100049c, /* U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */
- XK_Cyrillic_ka_vertstroke = 0x100049d, /* U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */
- XK_Cyrillic_EN_descender = 0x10004a2, /* U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER */
- XK_Cyrillic_en_descender = 0x10004a3, /* U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER */
- XK_Cyrillic_U_straight = 0x10004ae, /* U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U */
- XK_Cyrillic_u_straight = 0x10004af, /* U+04AF CYRILLIC SMALL LETTER STRAIGHT U */
- XK_Cyrillic_U_straight_bar = 0x10004b0, /* U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */
- XK_Cyrillic_u_straight_bar = 0x10004b1, /* U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */
- XK_Cyrillic_HA_descender = 0x10004b2, /* U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER */
- XK_Cyrillic_ha_descender = 0x10004b3, /* U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER */
- XK_Cyrillic_CHE_descender = 0x10004b6, /* U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */
- XK_Cyrillic_che_descender = 0x10004b7, /* U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER */
- XK_Cyrillic_CHE_vertstroke = 0x10004b8, /* U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */
- XK_Cyrillic_che_vertstroke = 0x10004b9, /* U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */
- XK_Cyrillic_SHHA = 0x10004ba, /* U+04BA CYRILLIC CAPITAL LETTER SHHA */
- XK_Cyrillic_shha = 0x10004bb, /* U+04BB CYRILLIC SMALL LETTER SHHA */
- XK_Cyrillic_SCHWA = 0x10004d8, /* U+04D8 CYRILLIC CAPITAL LETTER SCHWA */
- XK_Cyrillic_schwa = 0x10004d9, /* U+04D9 CYRILLIC SMALL LETTER SCHWA */
- XK_Cyrillic_I_macron = 0x10004e2, /* U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON */
- XK_Cyrillic_i_macron = 0x10004e3, /* U+04E3 CYRILLIC SMALL LETTER I WITH MACRON */
- XK_Cyrillic_O_bar = 0x10004e8, /* U+04E8 CYRILLIC CAPITAL LETTER BARRED O */
- XK_Cyrillic_o_bar = 0x10004e9, /* U+04E9 CYRILLIC SMALL LETTER BARRED O */
- XK_Cyrillic_U_macron = 0x10004ee, /* U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON */
- XK_Cyrillic_u_macron = 0x10004ef, /* U+04EF CYRILLIC SMALL LETTER U WITH MACRON */
- XK_Serbian_dje = 0x06a1, /* U+0452 CYRILLIC SMALL LETTER DJE */
- XK_Macedonia_gje = 0x06a2, /* U+0453 CYRILLIC SMALL LETTER GJE */
- XK_Cyrillic_io = 0x06a3, /* U+0451 CYRILLIC SMALL LETTER IO */
- XK_Ukrainian_ie = 0x06a4, /* U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE */
- XK_Ukranian_je = 0x06a4, /* deprecated */
- XK_Macedonia_dse = 0x06a5, /* U+0455 CYRILLIC SMALL LETTER DZE */
- XK_Ukrainian_i = 0x06a6, /* U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
- XK_Ukranian_i = 0x06a6, /* deprecated */
- XK_Ukrainian_yi = 0x06a7, /* U+0457 CYRILLIC SMALL LETTER YI */
- XK_Ukranian_yi = 0x06a7, /* deprecated */
- XK_Cyrillic_je = 0x06a8, /* U+0458 CYRILLIC SMALL LETTER JE */
- XK_Serbian_je = 0x06a8, /* deprecated */
- XK_Cyrillic_lje = 0x06a9, /* U+0459 CYRILLIC SMALL LETTER LJE */
- XK_Serbian_lje = 0x06a9, /* deprecated */
- XK_Cyrillic_nje = 0x06aa, /* U+045A CYRILLIC SMALL LETTER NJE */
- XK_Serbian_nje = 0x06aa, /* deprecated */
- XK_Serbian_tshe = 0x06ab, /* U+045B CYRILLIC SMALL LETTER TSHE */
- XK_Macedonia_kje = 0x06ac, /* U+045C CYRILLIC SMALL LETTER KJE */
- XK_Ukrainian_ghe_with_upturn = 0x06ad, /* U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN */
- XK_Byelorussian_shortu = 0x06ae, /* U+045E CYRILLIC SMALL LETTER SHORT U */
- XK_Cyrillic_dzhe = 0x06af, /* U+045F CYRILLIC SMALL LETTER DZHE */
- XK_Serbian_dze = 0x06af, /* deprecated */
- XK_numerosign = 0x06b0, /* U+2116 NUMERO SIGN */
- XK_Serbian_DJE = 0x06b1, /* U+0402 CYRILLIC CAPITAL LETTER DJE */
- XK_Macedonia_GJE = 0x06b2, /* U+0403 CYRILLIC CAPITAL LETTER GJE */
- XK_Cyrillic_IO = 0x06b3, /* U+0401 CYRILLIC CAPITAL LETTER IO */
- XK_Ukrainian_IE = 0x06b4, /* U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE */
- XK_Ukranian_JE = 0x06b4, /* deprecated */
- XK_Macedonia_DSE = 0x06b5, /* U+0405 CYRILLIC CAPITAL LETTER DZE */
- XK_Ukrainian_I = 0x06b6, /* U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
- XK_Ukranian_I = 0x06b6, /* deprecated */
- XK_Ukrainian_YI = 0x06b7, /* U+0407 CYRILLIC CAPITAL LETTER YI */
- XK_Ukranian_YI = 0x06b7, /* deprecated */
- XK_Cyrillic_JE = 0x06b8, /* U+0408 CYRILLIC CAPITAL LETTER JE */
- XK_Serbian_JE = 0x06b8, /* deprecated */
- XK_Cyrillic_LJE = 0x06b9, /* U+0409 CYRILLIC CAPITAL LETTER LJE */
- XK_Serbian_LJE = 0x06b9, /* deprecated */
- XK_Cyrillic_NJE = 0x06ba, /* U+040A CYRILLIC CAPITAL LETTER NJE */
- XK_Serbian_NJE = 0x06ba, /* deprecated */
- XK_Serbian_TSHE = 0x06bb, /* U+040B CYRILLIC CAPITAL LETTER TSHE */
- XK_Macedonia_KJE = 0x06bc, /* U+040C CYRILLIC CAPITAL LETTER KJE */
- XK_Ukrainian_GHE_WITH_UPTURN = 0x06bd, /* U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
- XK_Byelorussian_SHORTU = 0x06be, /* U+040E CYRILLIC CAPITAL LETTER SHORT U */
- XK_Cyrillic_DZHE = 0x06bf, /* U+040F CYRILLIC CAPITAL LETTER DZHE */
- XK_Serbian_DZE = 0x06bf, /* deprecated */
- XK_Cyrillic_yu = 0x06c0, /* U+044E CYRILLIC SMALL LETTER YU */
- XK_Cyrillic_a = 0x06c1, /* U+0430 CYRILLIC SMALL LETTER A */
- XK_Cyrillic_be = 0x06c2, /* U+0431 CYRILLIC SMALL LETTER BE */
- XK_Cyrillic_tse = 0x06c3, /* U+0446 CYRILLIC SMALL LETTER TSE */
- XK_Cyrillic_de = 0x06c4, /* U+0434 CYRILLIC SMALL LETTER DE */
- XK_Cyrillic_ie = 0x06c5, /* U+0435 CYRILLIC SMALL LETTER IE */
- XK_Cyrillic_ef = 0x06c6, /* U+0444 CYRILLIC SMALL LETTER EF */
- XK_Cyrillic_ghe = 0x06c7, /* U+0433 CYRILLIC SMALL LETTER GHE */
- XK_Cyrillic_ha = 0x06c8, /* U+0445 CYRILLIC SMALL LETTER HA */
- XK_Cyrillic_i = 0x06c9, /* U+0438 CYRILLIC SMALL LETTER I */
- XK_Cyrillic_shorti = 0x06ca, /* U+0439 CYRILLIC SMALL LETTER SHORT I */
- XK_Cyrillic_ka = 0x06cb, /* U+043A CYRILLIC SMALL LETTER KA */
- XK_Cyrillic_el = 0x06cc, /* U+043B CYRILLIC SMALL LETTER EL */
- XK_Cyrillic_em = 0x06cd, /* U+043C CYRILLIC SMALL LETTER EM */
- XK_Cyrillic_en = 0x06ce, /* U+043D CYRILLIC SMALL LETTER EN */
- XK_Cyrillic_o = 0x06cf, /* U+043E CYRILLIC SMALL LETTER O */
- XK_Cyrillic_pe = 0x06d0, /* U+043F CYRILLIC SMALL LETTER PE */
- XK_Cyrillic_ya = 0x06d1, /* U+044F CYRILLIC SMALL LETTER YA */
- XK_Cyrillic_er = 0x06d2, /* U+0440 CYRILLIC SMALL LETTER ER */
- XK_Cyrillic_es = 0x06d3, /* U+0441 CYRILLIC SMALL LETTER ES */
- XK_Cyrillic_te = 0x06d4, /* U+0442 CYRILLIC SMALL LETTER TE */
- XK_Cyrillic_u = 0x06d5, /* U+0443 CYRILLIC SMALL LETTER U */
- XK_Cyrillic_zhe = 0x06d6, /* U+0436 CYRILLIC SMALL LETTER ZHE */
- XK_Cyrillic_ve = 0x06d7, /* U+0432 CYRILLIC SMALL LETTER VE */
- XK_Cyrillic_softsign = 0x06d8, /* U+044C CYRILLIC SMALL LETTER SOFT SIGN */
- XK_Cyrillic_yeru = 0x06d9, /* U+044B CYRILLIC SMALL LETTER YERU */
- XK_Cyrillic_ze = 0x06da, /* U+0437 CYRILLIC SMALL LETTER ZE */
- XK_Cyrillic_sha = 0x06db, /* U+0448 CYRILLIC SMALL LETTER SHA */
- XK_Cyrillic_e = 0x06dc, /* U+044D CYRILLIC SMALL LETTER E */
- XK_Cyrillic_shcha = 0x06dd, /* U+0449 CYRILLIC SMALL LETTER SHCHA */
- XK_Cyrillic_che = 0x06de, /* U+0447 CYRILLIC SMALL LETTER CHE */
- XK_Cyrillic_hardsign = 0x06df, /* U+044A CYRILLIC SMALL LETTER HARD SIGN */
- XK_Cyrillic_YU = 0x06e0, /* U+042E CYRILLIC CAPITAL LETTER YU */
- XK_Cyrillic_A = 0x06e1, /* U+0410 CYRILLIC CAPITAL LETTER A */
- XK_Cyrillic_BE = 0x06e2, /* U+0411 CYRILLIC CAPITAL LETTER BE */
- XK_Cyrillic_TSE = 0x06e3, /* U+0426 CYRILLIC CAPITAL LETTER TSE */
- XK_Cyrillic_DE = 0x06e4, /* U+0414 CYRILLIC CAPITAL LETTER DE */
- XK_Cyrillic_IE = 0x06e5, /* U+0415 CYRILLIC CAPITAL LETTER IE */
- XK_Cyrillic_EF = 0x06e6, /* U+0424 CYRILLIC CAPITAL LETTER EF */
- XK_Cyrillic_GHE = 0x06e7, /* U+0413 CYRILLIC CAPITAL LETTER GHE */
- XK_Cyrillic_HA = 0x06e8, /* U+0425 CYRILLIC CAPITAL LETTER HA */
- XK_Cyrillic_I = 0x06e9, /* U+0418 CYRILLIC CAPITAL LETTER I */
- XK_Cyrillic_SHORTI = 0x06ea, /* U+0419 CYRILLIC CAPITAL LETTER SHORT I */
- XK_Cyrillic_KA = 0x06eb, /* U+041A CYRILLIC CAPITAL LETTER KA */
- XK_Cyrillic_EL = 0x06ec, /* U+041B CYRILLIC CAPITAL LETTER EL */
- XK_Cyrillic_EM = 0x06ed, /* U+041C CYRILLIC CAPITAL LETTER EM */
- XK_Cyrillic_EN = 0x06ee, /* U+041D CYRILLIC CAPITAL LETTER EN */
- XK_Cyrillic_O = 0x06ef, /* U+041E CYRILLIC CAPITAL LETTER O */
- XK_Cyrillic_PE = 0x06f0, /* U+041F CYRILLIC CAPITAL LETTER PE */
- XK_Cyrillic_YA = 0x06f1, /* U+042F CYRILLIC CAPITAL LETTER YA */
- XK_Cyrillic_ER = 0x06f2, /* U+0420 CYRILLIC CAPITAL LETTER ER */
- XK_Cyrillic_ES = 0x06f3, /* U+0421 CYRILLIC CAPITAL LETTER ES */
- XK_Cyrillic_TE = 0x06f4, /* U+0422 CYRILLIC CAPITAL LETTER TE */
- XK_Cyrillic_U = 0x06f5, /* U+0423 CYRILLIC CAPITAL LETTER U */
- XK_Cyrillic_ZHE = 0x06f6, /* U+0416 CYRILLIC CAPITAL LETTER ZHE */
- XK_Cyrillic_VE = 0x06f7, /* U+0412 CYRILLIC CAPITAL LETTER VE */
- XK_Cyrillic_SOFTSIGN = 0x06f8, /* U+042C CYRILLIC CAPITAL LETTER SOFT SIGN */
- XK_Cyrillic_YERU = 0x06f9, /* U+042B CYRILLIC CAPITAL LETTER YERU */
- XK_Cyrillic_ZE = 0x06fa, /* U+0417 CYRILLIC CAPITAL LETTER ZE */
- XK_Cyrillic_SHA = 0x06fb, /* U+0428 CYRILLIC CAPITAL LETTER SHA */
- XK_Cyrillic_E = 0x06fc, /* U+042D CYRILLIC CAPITAL LETTER E */
- XK_Cyrillic_SHCHA = 0x06fd, /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */
- XK_Cyrillic_CHE = 0x06fe, /* U+0427 CYRILLIC CAPITAL LETTER CHE */
- XK_Cyrillic_HARDSIGN = 0x06ff, /* U+042A CYRILLIC CAPITAL LETTER HARD SIGN */
- XK_Greek_ALPHAaccent = 0x07a1, /* U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS */
- XK_Greek_EPSILONaccent = 0x07a2, /* U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS */
- XK_Greek_ETAaccent = 0x07a3, /* U+0389 GREEK CAPITAL LETTER ETA WITH TONOS */
- XK_Greek_IOTAaccent = 0x07a4, /* U+038A GREEK CAPITAL LETTER IOTA WITH TONOS */
- XK_Greek_IOTAdieresis = 0x07a5, /* U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
- XK_Greek_IOTAdiaeresis = 0x07a5, /* old typo */
- XK_Greek_OMICRONaccent = 0x07a7, /* U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS */
- XK_Greek_UPSILONaccent = 0x07a8, /* U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS */
- XK_Greek_UPSILONdieresis = 0x07a9, /* U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
- XK_Greek_OMEGAaccent = 0x07ab, /* U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS */
- XK_Greek_accentdieresis = 0x07ae, /* U+0385 GREEK DIALYTIKA TONOS */
- XK_Greek_horizbar = 0x07af, /* U+2015 HORIZONTAL BAR */
- XK_Greek_alphaaccent = 0x07b1, /* U+03AC GREEK SMALL LETTER ALPHA WITH TONOS */
- XK_Greek_epsilonaccent = 0x07b2, /* U+03AD GREEK SMALL LETTER EPSILON WITH TONOS */
- XK_Greek_etaaccent = 0x07b3, /* U+03AE GREEK SMALL LETTER ETA WITH TONOS */
- XK_Greek_iotaaccent = 0x07b4, /* U+03AF GREEK SMALL LETTER IOTA WITH TONOS */
- XK_Greek_iotadieresis = 0x07b5, /* U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA */
- XK_Greek_iotaaccentdieresis = 0x07b6, /* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
- XK_Greek_omicronaccent = 0x07b7, /* U+03CC GREEK SMALL LETTER OMICRON WITH TONOS */
- XK_Greek_upsilonaccent = 0x07b8, /* U+03CD GREEK SMALL LETTER UPSILON WITH TONOS */
- XK_Greek_upsilondieresis = 0x07b9, /* U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
- XK_Greek_upsilonaccentdieresis = 0x07ba, /* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
- XK_Greek_omegaaccent = 0x07bb, /* U+03CE GREEK SMALL LETTER OMEGA WITH TONOS */
- XK_Greek_ALPHA = 0x07c1, /* U+0391 GREEK CAPITAL LETTER ALPHA */
- XK_Greek_BETA = 0x07c2, /* U+0392 GREEK CAPITAL LETTER BETA */
- XK_Greek_GAMMA = 0x07c3, /* U+0393 GREEK CAPITAL LETTER GAMMA */
- XK_Greek_DELTA = 0x07c4, /* U+0394 GREEK CAPITAL LETTER DELTA */
- XK_Greek_EPSILON = 0x07c5, /* U+0395 GREEK CAPITAL LETTER EPSILON */
- XK_Greek_ZETA = 0x07c6, /* U+0396 GREEK CAPITAL LETTER ZETA */
- XK_Greek_ETA = 0x07c7, /* U+0397 GREEK CAPITAL LETTER ETA */
- XK_Greek_THETA = 0x07c8, /* U+0398 GREEK CAPITAL LETTER THETA */
- XK_Greek_IOTA = 0x07c9, /* U+0399 GREEK CAPITAL LETTER IOTA */
- XK_Greek_KAPPA = 0x07ca, /* U+039A GREEK CAPITAL LETTER KAPPA */
- XK_Greek_LAMDA = 0x07cb, /* U+039B GREEK CAPITAL LETTER LAMDA */
- XK_Greek_LAMBDA = 0x07cb, /* U+039B GREEK CAPITAL LETTER LAMDA */
- XK_Greek_MU = 0x07cc, /* U+039C GREEK CAPITAL LETTER MU */
- XK_Greek_NU = 0x07cd, /* U+039D GREEK CAPITAL LETTER NU */
- XK_Greek_XI = 0x07ce, /* U+039E GREEK CAPITAL LETTER XI */
- XK_Greek_OMICRON = 0x07cf, /* U+039F GREEK CAPITAL LETTER OMICRON */
- XK_Greek_PI = 0x07d0, /* U+03A0 GREEK CAPITAL LETTER PI */
- XK_Greek_RHO = 0x07d1, /* U+03A1 GREEK CAPITAL LETTER RHO */
- XK_Greek_SIGMA = 0x07d2, /* U+03A3 GREEK CAPITAL LETTER SIGMA */
- XK_Greek_TAU = 0x07d4, /* U+03A4 GREEK CAPITAL LETTER TAU */
- XK_Greek_UPSILON = 0x07d5, /* U+03A5 GREEK CAPITAL LETTER UPSILON */
- XK_Greek_PHI = 0x07d6, /* U+03A6 GREEK CAPITAL LETTER PHI */
- XK_Greek_CHI = 0x07d7, /* U+03A7 GREEK CAPITAL LETTER CHI */
- XK_Greek_PSI = 0x07d8, /* U+03A8 GREEK CAPITAL LETTER PSI */
- XK_Greek_OMEGA = 0x07d9, /* U+03A9 GREEK CAPITAL LETTER OMEGA */
- XK_Greek_alpha = 0x07e1, /* U+03B1 GREEK SMALL LETTER ALPHA */
- XK_Greek_beta = 0x07e2, /* U+03B2 GREEK SMALL LETTER BETA */
- XK_Greek_gamma = 0x07e3, /* U+03B3 GREEK SMALL LETTER GAMMA */
- XK_Greek_delta = 0x07e4, /* U+03B4 GREEK SMALL LETTER DELTA */
- XK_Greek_epsilon = 0x07e5, /* U+03B5 GREEK SMALL LETTER EPSILON */
- XK_Greek_zeta = 0x07e6, /* U+03B6 GREEK SMALL LETTER ZETA */
- XK_Greek_eta = 0x07e7, /* U+03B7 GREEK SMALL LETTER ETA */
- XK_Greek_theta = 0x07e8, /* U+03B8 GREEK SMALL LETTER THETA */
- XK_Greek_iota = 0x07e9, /* U+03B9 GREEK SMALL LETTER IOTA */
- XK_Greek_kappa = 0x07ea, /* U+03BA GREEK SMALL LETTER KAPPA */
- XK_Greek_lamda = 0x07eb, /* U+03BB GREEK SMALL LETTER LAMDA */
- XK_Greek_lambda = 0x07eb, /* U+03BB GREEK SMALL LETTER LAMDA */
- XK_Greek_mu = 0x07ec, /* U+03BC GREEK SMALL LETTER MU */
- XK_Greek_nu = 0x07ed, /* U+03BD GREEK SMALL LETTER NU */
- XK_Greek_xi = 0x07ee, /* U+03BE GREEK SMALL LETTER XI */
- XK_Greek_omicron = 0x07ef, /* U+03BF GREEK SMALL LETTER OMICRON */
- XK_Greek_pi = 0x07f0, /* U+03C0 GREEK SMALL LETTER PI */
- XK_Greek_rho = 0x07f1, /* U+03C1 GREEK SMALL LETTER RHO */
- XK_Greek_sigma = 0x07f2, /* U+03C3 GREEK SMALL LETTER SIGMA */
- XK_Greek_finalsmallsigma = 0x07f3, /* U+03C2 GREEK SMALL LETTER FINAL SIGMA */
- XK_Greek_tau = 0x07f4, /* U+03C4 GREEK SMALL LETTER TAU */
- XK_Greek_upsilon = 0x07f5, /* U+03C5 GREEK SMALL LETTER UPSILON */
- XK_Greek_phi = 0x07f6, /* U+03C6 GREEK SMALL LETTER PHI */
- XK_Greek_chi = 0x07f7, /* U+03C7 GREEK SMALL LETTER CHI */
- XK_Greek_psi = 0x07f8, /* U+03C8 GREEK SMALL LETTER PSI */
- XK_Greek_omega = 0x07f9, /* U+03C9 GREEK SMALL LETTER OMEGA */
- XK_Greek_switch = 0xff7e, /* Alias for mode_switch */
- XK_leftradical = 0x08a1, /* U+23B7 RADICAL SYMBOL BOTTOM */
- XK_topleftradical = 0x08a2, /*(U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT)*/
- XK_horizconnector = 0x08a3, /*(U+2500 BOX DRAWINGS LIGHT HORIZONTAL)*/
- XK_topintegral = 0x08a4, /* U+2320 TOP HALF INTEGRAL */
- XK_botintegral = 0x08a5, /* U+2321 BOTTOM HALF INTEGRAL */
- XK_vertconnector = 0x08a6, /*(U+2502 BOX DRAWINGS LIGHT VERTICAL)*/
- XK_topleftsqbracket = 0x08a7, /* U+23A1 LEFT SQUARE BRACKET UPPER CORNER */
- XK_botleftsqbracket = 0x08a8, /* U+23A3 LEFT SQUARE BRACKET LOWER CORNER */
- XK_toprightsqbracket = 0x08a9, /* U+23A4 RIGHT SQUARE BRACKET UPPER CORNER */
- XK_botrightsqbracket = 0x08aa, /* U+23A6 RIGHT SQUARE BRACKET LOWER CORNER */
- XK_topleftparens = 0x08ab, /* U+239B LEFT PARENTHESIS UPPER HOOK */
- XK_botleftparens = 0x08ac, /* U+239D LEFT PARENTHESIS LOWER HOOK */
- XK_toprightparens = 0x08ad, /* U+239E RIGHT PARENTHESIS UPPER HOOK */
- XK_botrightparens = 0x08ae, /* U+23A0 RIGHT PARENTHESIS LOWER HOOK */
- XK_leftmiddlecurlybrace = 0x08af, /* U+23A8 LEFT CURLY BRACKET MIDDLE PIECE */
- XK_rightmiddlecurlybrace = 0x08b0, /* U+23AC RIGHT CURLY BRACKET MIDDLE PIECE */
- XK_topleftsummation = 0x08b1,
- XK_botleftsummation = 0x08b2,
- XK_topvertsummationconnector = 0x08b3,
- XK_botvertsummationconnector = 0x08b4,
- XK_toprightsummation = 0x08b5,
- XK_botrightsummation = 0x08b6,
- XK_rightmiddlesummation = 0x08b7,
- XK_lessthanequal = 0x08bc, /* U+2264 LESS-THAN OR EQUAL TO */
- XK_notequal = 0x08bd, /* U+2260 NOT EQUAL TO */
- XK_greaterthanequal = 0x08be, /* U+2265 GREATER-THAN OR EQUAL TO */
- XK_integral = 0x08bf, /* U+222B INTEGRAL */
- XK_therefore = 0x08c0, /* U+2234 THEREFORE */
- XK_variation = 0x08c1, /* U+221D PROPORTIONAL TO */
- XK_infinity = 0x08c2, /* U+221E INFINITY */
- XK_nabla = 0x08c5, /* U+2207 NABLA */
- XK_approximate = 0x08c8, /* U+223C TILDE OPERATOR */
- XK_similarequal = 0x08c9, /* U+2243 ASYMPTOTICALLY EQUAL TO */
- XK_ifonlyif = 0x08cd, /* U+21D4 LEFT RIGHT DOUBLE ARROW */
- XK_implies = 0x08ce, /* U+21D2 RIGHTWARDS DOUBLE ARROW */
- XK_identical = 0x08cf, /* U+2261 IDENTICAL TO */
- XK_radical = 0x08d6, /* U+221A SQUARE ROOT */
- XK_includedin = 0x08da, /* U+2282 SUBSET OF */
- XK_includes = 0x08db, /* U+2283 SUPERSET OF */
- XK_intersection = 0x08dc, /* U+2229 INTERSECTION */
- XK_union = 0x08dd, /* U+222A UNION */
- XK_logicaland = 0x08de, /* U+2227 LOGICAL AND */
- XK_logicalor = 0x08df, /* U+2228 LOGICAL OR */
- XK_partialderivative = 0x08ef, /* U+2202 PARTIAL DIFFERENTIAL */
- XK_function = 0x08f6, /* U+0192 LATIN SMALL LETTER F WITH HOOK */
- XK_leftarrow = 0x08fb, /* U+2190 LEFTWARDS ARROW */
- XK_uparrow = 0x08fc, /* U+2191 UPWARDS ARROW */
- XK_rightarrow = 0x08fd, /* U+2192 RIGHTWARDS ARROW */
- XK_downarrow = 0x08fe, /* U+2193 DOWNWARDS ARROW */
- XK_blank = 0x09df,
- XK_soliddiamond = 0x09e0, /* U+25C6 BLACK DIAMOND */
- XK_checkerboard = 0x09e1, /* U+2592 MEDIUM SHADE */
- XK_ht = 0x09e2, /* U+2409 SYMBOL FOR HORIZONTAL TABULATION */
- XK_ff = 0x09e3, /* U+240C SYMBOL FOR FORM FEED */
- XK_cr = 0x09e4, /* U+240D SYMBOL FOR CARRIAGE RETURN */
- XK_lf = 0x09e5, /* U+240A SYMBOL FOR LINE FEED */
- XK_nl = 0x09e8, /* U+2424 SYMBOL FOR NEWLINE */
- XK_vt = 0x09e9, /* U+240B SYMBOL FOR VERTICAL TABULATION */
- XK_lowrightcorner = 0x09ea, /* U+2518 BOX DRAWINGS LIGHT UP AND LEFT */
- XK_uprightcorner = 0x09eb, /* U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT */
- XK_upleftcorner = 0x09ec, /* U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT */
- XK_lowleftcorner = 0x09ed, /* U+2514 BOX DRAWINGS LIGHT UP AND RIGHT */
- XK_crossinglines = 0x09ee, /* U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
- XK_horizlinescan1 = 0x09ef, /* U+23BA HORIZONTAL SCAN LINE-1 */
- XK_horizlinescan3 = 0x09f0, /* U+23BB HORIZONTAL SCAN LINE-3 */
- XK_horizlinescan5 = 0x09f1, /* U+2500 BOX DRAWINGS LIGHT HORIZONTAL */
- XK_horizlinescan7 = 0x09f2, /* U+23BC HORIZONTAL SCAN LINE-7 */
- XK_horizlinescan9 = 0x09f3, /* U+23BD HORIZONTAL SCAN LINE-9 */
- XK_leftt = 0x09f4, /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
- XK_rightt = 0x09f5, /* U+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT */
- XK_bott = 0x09f6, /* U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL */
- XK_topt = 0x09f7, /* U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
- XK_vertbar = 0x09f8, /* U+2502 BOX DRAWINGS LIGHT VERTICAL */
- XK_emspace = 0x0aa1, /* U+2003 EM SPACE */
- XK_enspace = 0x0aa2, /* U+2002 EN SPACE */
- XK_em3space = 0x0aa3, /* U+2004 THREE-PER-EM SPACE */
- XK_em4space = 0x0aa4, /* U+2005 FOUR-PER-EM SPACE */
- XK_digitspace = 0x0aa5, /* U+2007 FIGURE SPACE */
- XK_punctspace = 0x0aa6, /* U+2008 PUNCTUATION SPACE */
- XK_thinspace = 0x0aa7, /* U+2009 THIN SPACE */
- XK_hairspace = 0x0aa8, /* U+200A HAIR SPACE */
- XK_emdash = 0x0aa9, /* U+2014 EM DASH */
- XK_endash = 0x0aaa, /* U+2013 EN DASH */
- XK_signifblank = 0x0aac, /*(U+2423 OPEN BOX)*/
- XK_ellipsis = 0x0aae, /* U+2026 HORIZONTAL ELLIPSIS */
- XK_doubbaselinedot = 0x0aaf, /* U+2025 TWO DOT LEADER */
- XK_onethird = 0x0ab0, /* U+2153 VULGAR FRACTION ONE THIRD */
- XK_twothirds = 0x0ab1, /* U+2154 VULGAR FRACTION TWO THIRDS */
- XK_onefifth = 0x0ab2, /* U+2155 VULGAR FRACTION ONE FIFTH */
- XK_twofifths = 0x0ab3, /* U+2156 VULGAR FRACTION TWO FIFTHS */
- XK_threefifths = 0x0ab4, /* U+2157 VULGAR FRACTION THREE FIFTHS */
- XK_fourfifths = 0x0ab5, /* U+2158 VULGAR FRACTION FOUR FIFTHS */
- XK_onesixth = 0x0ab6, /* U+2159 VULGAR FRACTION ONE SIXTH */
- XK_fivesixths = 0x0ab7, /* U+215A VULGAR FRACTION FIVE SIXTHS */
- XK_careof = 0x0ab8, /* U+2105 CARE OF */
- XK_figdash = 0x0abb, /* U+2012 FIGURE DASH */
- XK_leftanglebracket = 0x0abc, /*(U+27E8 MATHEMATICAL LEFT ANGLE BRACKET)*/
- XK_decimalpoint = 0x0abd, /*(U+002E FULL STOP)*/
- XK_rightanglebracket = 0x0abe, /*(U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET)*/
- XK_marker = 0x0abf,
- XK_oneeighth = 0x0ac3, /* U+215B VULGAR FRACTION ONE EIGHTH */
- XK_threeeighths = 0x0ac4, /* U+215C VULGAR FRACTION THREE EIGHTHS */
- XK_fiveeighths = 0x0ac5, /* U+215D VULGAR FRACTION FIVE EIGHTHS */
- XK_seveneighths = 0x0ac6, /* U+215E VULGAR FRACTION SEVEN EIGHTHS */
- XK_trademark = 0x0ac9, /* U+2122 TRADE MARK SIGN */
- XK_signaturemark = 0x0aca, /*(U+2613 SALTIRE)*/
- XK_trademarkincircle = 0x0acb,
- XK_leftopentriangle = 0x0acc, /*(U+25C1 WHITE LEFT-POINTING TRIANGLE)*/
- XK_rightopentriangle = 0x0acd, /*(U+25B7 WHITE RIGHT-POINTING TRIANGLE)*/
- XK_emopencircle = 0x0ace, /*(U+25CB WHITE CIRCLE)*/
- XK_emopenrectangle = 0x0acf, /*(U+25AF WHITE VERTICAL RECTANGLE)*/
- XK_leftsinglequotemark = 0x0ad0, /* U+2018 LEFT SINGLE QUOTATION MARK */
- XK_rightsinglequotemark = 0x0ad1, /* U+2019 RIGHT SINGLE QUOTATION MARK */
- XK_leftdoublequotemark = 0x0ad2, /* U+201C LEFT DOUBLE QUOTATION MARK */
- XK_rightdoublequotemark = 0x0ad3, /* U+201D RIGHT DOUBLE QUOTATION MARK */
- XK_prescription = 0x0ad4, /* U+211E PRESCRIPTION TAKE */
- XK_minutes = 0x0ad6, /* U+2032 PRIME */
- XK_seconds = 0x0ad7, /* U+2033 DOUBLE PRIME */
- XK_latincross = 0x0ad9, /* U+271D LATIN CROSS */
- XK_hexagram = 0x0ada,
- XK_filledrectbullet = 0x0adb, /*(U+25AC BLACK RECTANGLE)*/
- XK_filledlefttribullet = 0x0adc, /*(U+25C0 BLACK LEFT-POINTING TRIANGLE)*/
- XK_filledrighttribullet = 0x0add, /*(U+25B6 BLACK RIGHT-POINTING TRIANGLE)*/
- XK_emfilledcircle = 0x0ade, /*(U+25CF BLACK CIRCLE)*/
- XK_emfilledrect = 0x0adf, /*(U+25AE BLACK VERTICAL RECTANGLE)*/
- XK_enopencircbullet = 0x0ae0, /*(U+25E6 WHITE BULLET)*/
- XK_enopensquarebullet = 0x0ae1, /*(U+25AB WHITE SMALL SQUARE)*/
- XK_openrectbullet = 0x0ae2, /*(U+25AD WHITE RECTANGLE)*/
- XK_opentribulletup = 0x0ae3, /*(U+25B3 WHITE UP-POINTING TRIANGLE)*/
- XK_opentribulletdown = 0x0ae4, /*(U+25BD WHITE DOWN-POINTING TRIANGLE)*/
- XK_openstar = 0x0ae5, /*(U+2606 WHITE STAR)*/
- XK_enfilledcircbullet = 0x0ae6, /*(U+2022 BULLET)*/
- XK_enfilledsqbullet = 0x0ae7, /*(U+25AA BLACK SMALL SQUARE)*/
- XK_filledtribulletup = 0x0ae8, /*(U+25B2 BLACK UP-POINTING TRIANGLE)*/
- XK_filledtribulletdown = 0x0ae9, /*(U+25BC BLACK DOWN-POINTING TRIANGLE)*/
- XK_leftpointer = 0x0aea, /*(U+261C WHITE LEFT POINTING INDEX)*/
- XK_rightpointer = 0x0aeb, /*(U+261E WHITE RIGHT POINTING INDEX)*/
- XK_club = 0x0aec, /* U+2663 BLACK CLUB SUIT */
- XK_diamond = 0x0aed, /* U+2666 BLACK DIAMOND SUIT */
- XK_heart = 0x0aee, /* U+2665 BLACK HEART SUIT */
- XK_maltesecross = 0x0af0, /* U+2720 MALTESE CROSS */
- XK_dagger = 0x0af1, /* U+2020 DAGGER */
- XK_doubledagger = 0x0af2, /* U+2021 DOUBLE DAGGER */
- XK_checkmark = 0x0af3, /* U+2713 CHECK MARK */
- XK_ballotcross = 0x0af4, /* U+2717 BALLOT X */
- XK_musicalsharp = 0x0af5, /* U+266F MUSIC SHARP SIGN */
- XK_musicalflat = 0x0af6, /* U+266D MUSIC FLAT SIGN */
- XK_malesymbol = 0x0af7, /* U+2642 MALE SIGN */
- XK_femalesymbol = 0x0af8, /* U+2640 FEMALE SIGN */
- XK_telephone = 0x0af9, /* U+260E BLACK TELEPHONE */
- XK_telephonerecorder = 0x0afa, /* U+2315 TELEPHONE RECORDER */
- XK_phonographcopyright = 0x0afb, /* U+2117 SOUND RECORDING COPYRIGHT */
- XK_caret = 0x0afc, /* U+2038 CARET */
- XK_singlelowquotemark = 0x0afd, /* U+201A SINGLE LOW-9 QUOTATION MARK */
- XK_doublelowquotemark = 0x0afe, /* U+201E DOUBLE LOW-9 QUOTATION MARK */
- XK_cursor = 0x0aff,
- XK_leftcaret = 0x0ba3, /*(U+003C LESS-THAN SIGN)*/
- XK_rightcaret = 0x0ba6, /*(U+003E GREATER-THAN SIGN)*/
- XK_downcaret = 0x0ba8, /*(U+2228 LOGICAL OR)*/
- XK_upcaret = 0x0ba9, /*(U+2227 LOGICAL AND)*/
- XK_overbar = 0x0bc0, /*(U+00AF MACRON)*/
- XK_downtack = 0x0bc2, /* U+22A5 UP TACK */
- XK_upshoe = 0x0bc3, /*(U+2229 INTERSECTION)*/
- XK_downstile = 0x0bc4, /* U+230A LEFT FLOOR */
- XK_underbar = 0x0bc6, /*(U+005F LOW LINE)*/
- XK_jot = 0x0bca, /* U+2218 RING OPERATOR */
- XK_quad = 0x0bcc, /* U+2395 APL FUNCTIONAL SYMBOL QUAD */
- XK_uptack = 0x0bce, /* U+22A4 DOWN TACK */
- XK_circle = 0x0bcf, /* U+25CB WHITE CIRCLE */
- XK_upstile = 0x0bd3, /* U+2308 LEFT CEILING */
- XK_downshoe = 0x0bd6, /*(U+222A UNION)*/
- XK_rightshoe = 0x0bd8, /*(U+2283 SUPERSET OF)*/
- XK_leftshoe = 0x0bda, /*(U+2282 SUBSET OF)*/
- XK_lefttack = 0x0bdc, /* U+22A2 RIGHT TACK */
- XK_righttack = 0x0bfc, /* U+22A3 LEFT TACK */
- XK_hebrew_doublelowline = 0x0cdf, /* U+2017 DOUBLE LOW LINE */
- XK_hebrew_aleph = 0x0ce0, /* U+05D0 HEBREW LETTER ALEF */
- XK_hebrew_bet = 0x0ce1, /* U+05D1 HEBREW LETTER BET */
- XK_hebrew_beth = 0x0ce1, /* deprecated */
- XK_hebrew_gimel = 0x0ce2, /* U+05D2 HEBREW LETTER GIMEL */
- XK_hebrew_gimmel = 0x0ce2, /* deprecated */
- XK_hebrew_dalet = 0x0ce3, /* U+05D3 HEBREW LETTER DALET */
- XK_hebrew_daleth = 0x0ce3, /* deprecated */
- XK_hebrew_he = 0x0ce4, /* U+05D4 HEBREW LETTER HE */
- XK_hebrew_waw = 0x0ce5, /* U+05D5 HEBREW LETTER VAV */
- XK_hebrew_zain = 0x0ce6, /* U+05D6 HEBREW LETTER ZAYIN */
- XK_hebrew_zayin = 0x0ce6, /* deprecated */
- XK_hebrew_chet = 0x0ce7, /* U+05D7 HEBREW LETTER HET */
- XK_hebrew_het = 0x0ce7, /* deprecated */
- XK_hebrew_tet = 0x0ce8, /* U+05D8 HEBREW LETTER TET */
- XK_hebrew_teth = 0x0ce8, /* deprecated */
- XK_hebrew_yod = 0x0ce9, /* U+05D9 HEBREW LETTER YOD */
- XK_hebrew_finalkaph = 0x0cea, /* U+05DA HEBREW LETTER FINAL KAF */
- XK_hebrew_kaph = 0x0ceb, /* U+05DB HEBREW LETTER KAF */
- XK_hebrew_lamed = 0x0cec, /* U+05DC HEBREW LETTER LAMED */
- XK_hebrew_finalmem = 0x0ced, /* U+05DD HEBREW LETTER FINAL MEM */
- XK_hebrew_mem = 0x0cee, /* U+05DE HEBREW LETTER MEM */
- XK_hebrew_finalnun = 0x0cef, /* U+05DF HEBREW LETTER FINAL NUN */
- XK_hebrew_nun = 0x0cf0, /* U+05E0 HEBREW LETTER NUN */
- XK_hebrew_samech = 0x0cf1, /* U+05E1 HEBREW LETTER SAMEKH */
- XK_hebrew_samekh = 0x0cf1, /* deprecated */
- XK_hebrew_ayin = 0x0cf2, /* U+05E2 HEBREW LETTER AYIN */
- XK_hebrew_finalpe = 0x0cf3, /* U+05E3 HEBREW LETTER FINAL PE */
- XK_hebrew_pe = 0x0cf4, /* U+05E4 HEBREW LETTER PE */
- XK_hebrew_finalzade = 0x0cf5, /* U+05E5 HEBREW LETTER FINAL TSADI */
- XK_hebrew_finalzadi = 0x0cf5, /* deprecated */
- XK_hebrew_zade = 0x0cf6, /* U+05E6 HEBREW LETTER TSADI */
- XK_hebrew_zadi = 0x0cf6, /* deprecated */
- XK_hebrew_qoph = 0x0cf7, /* U+05E7 HEBREW LETTER QOF */
- XK_hebrew_kuf = 0x0cf7, /* deprecated */
- XK_hebrew_resh = 0x0cf8, /* U+05E8 HEBREW LETTER RESH */
- XK_hebrew_shin = 0x0cf9, /* U+05E9 HEBREW LETTER SHIN */
- XK_hebrew_taw = 0x0cfa, /* U+05EA HEBREW LETTER TAV */
- XK_hebrew_taf = 0x0cfa, /* deprecated */
- XK_Hebrew_switch = 0xff7e, /* Alias for mode_switch */
- XK_Thai_kokai = 0x0da1, /* U+0E01 THAI CHARACTER KO KAI */
- XK_Thai_khokhai = 0x0da2, /* U+0E02 THAI CHARACTER KHO KHAI */
- XK_Thai_khokhuat = 0x0da3, /* U+0E03 THAI CHARACTER KHO KHUAT */
- XK_Thai_khokhwai = 0x0da4, /* U+0E04 THAI CHARACTER KHO KHWAI */
- XK_Thai_khokhon = 0x0da5, /* U+0E05 THAI CHARACTER KHO KHON */
- XK_Thai_khorakhang = 0x0da6, /* U+0E06 THAI CHARACTER KHO RAKHANG */
- XK_Thai_ngongu = 0x0da7, /* U+0E07 THAI CHARACTER NGO NGU */
- XK_Thai_chochan = 0x0da8, /* U+0E08 THAI CHARACTER CHO CHAN */
- XK_Thai_choching = 0x0da9, /* U+0E09 THAI CHARACTER CHO CHING */
- XK_Thai_chochang = 0x0daa, /* U+0E0A THAI CHARACTER CHO CHANG */
- XK_Thai_soso = 0x0dab, /* U+0E0B THAI CHARACTER SO SO */
- XK_Thai_chochoe = 0x0dac, /* U+0E0C THAI CHARACTER CHO CHOE */
- XK_Thai_yoying = 0x0dad, /* U+0E0D THAI CHARACTER YO YING */
- XK_Thai_dochada = 0x0dae, /* U+0E0E THAI CHARACTER DO CHADA */
- XK_Thai_topatak = 0x0daf, /* U+0E0F THAI CHARACTER TO PATAK */
- XK_Thai_thothan = 0x0db0, /* U+0E10 THAI CHARACTER THO THAN */
- XK_Thai_thonangmontho = 0x0db1, /* U+0E11 THAI CHARACTER THO NANGMONTHO */
- XK_Thai_thophuthao = 0x0db2, /* U+0E12 THAI CHARACTER THO PHUTHAO */
- XK_Thai_nonen = 0x0db3, /* U+0E13 THAI CHARACTER NO NEN */
- XK_Thai_dodek = 0x0db4, /* U+0E14 THAI CHARACTER DO DEK */
- XK_Thai_totao = 0x0db5, /* U+0E15 THAI CHARACTER TO TAO */
- XK_Thai_thothung = 0x0db6, /* U+0E16 THAI CHARACTER THO THUNG */
- XK_Thai_thothahan = 0x0db7, /* U+0E17 THAI CHARACTER THO THAHAN */
- XK_Thai_thothong = 0x0db8, /* U+0E18 THAI CHARACTER THO THONG */
- XK_Thai_nonu = 0x0db9, /* U+0E19 THAI CHARACTER NO NU */
- XK_Thai_bobaimai = 0x0dba, /* U+0E1A THAI CHARACTER BO BAIMAI */
- XK_Thai_popla = 0x0dbb, /* U+0E1B THAI CHARACTER PO PLA */
- XK_Thai_phophung = 0x0dbc, /* U+0E1C THAI CHARACTER PHO PHUNG */
- XK_Thai_fofa = 0x0dbd, /* U+0E1D THAI CHARACTER FO FA */
- XK_Thai_phophan = 0x0dbe, /* U+0E1E THAI CHARACTER PHO PHAN */
- XK_Thai_fofan = 0x0dbf, /* U+0E1F THAI CHARACTER FO FAN */
- XK_Thai_phosamphao = 0x0dc0, /* U+0E20 THAI CHARACTER PHO SAMPHAO */
- XK_Thai_moma = 0x0dc1, /* U+0E21 THAI CHARACTER MO MA */
- XK_Thai_yoyak = 0x0dc2, /* U+0E22 THAI CHARACTER YO YAK */
- XK_Thai_rorua = 0x0dc3, /* U+0E23 THAI CHARACTER RO RUA */
- XK_Thai_ru = 0x0dc4, /* U+0E24 THAI CHARACTER RU */
- XK_Thai_loling = 0x0dc5, /* U+0E25 THAI CHARACTER LO LING */
- XK_Thai_lu = 0x0dc6, /* U+0E26 THAI CHARACTER LU */
- XK_Thai_wowaen = 0x0dc7, /* U+0E27 THAI CHARACTER WO WAEN */
- XK_Thai_sosala = 0x0dc8, /* U+0E28 THAI CHARACTER SO SALA */
- XK_Thai_sorusi = 0x0dc9, /* U+0E29 THAI CHARACTER SO RUSI */
- XK_Thai_sosua = 0x0dca, /* U+0E2A THAI CHARACTER SO SUA */
- XK_Thai_hohip = 0x0dcb, /* U+0E2B THAI CHARACTER HO HIP */
- XK_Thai_lochula = 0x0dcc, /* U+0E2C THAI CHARACTER LO CHULA */
- XK_Thai_oang = 0x0dcd, /* U+0E2D THAI CHARACTER O ANG */
- XK_Thai_honokhuk = 0x0dce, /* U+0E2E THAI CHARACTER HO NOKHUK */
- XK_Thai_paiyannoi = 0x0dcf, /* U+0E2F THAI CHARACTER PAIYANNOI */
- XK_Thai_saraa = 0x0dd0, /* U+0E30 THAI CHARACTER SARA A */
- XK_Thai_maihanakat = 0x0dd1, /* U+0E31 THAI CHARACTER MAI HAN-AKAT */
- XK_Thai_saraaa = 0x0dd2, /* U+0E32 THAI CHARACTER SARA AA */
- XK_Thai_saraam = 0x0dd3, /* U+0E33 THAI CHARACTER SARA AM */
- XK_Thai_sarai = 0x0dd4, /* U+0E34 THAI CHARACTER SARA I */
- XK_Thai_saraii = 0x0dd5, /* U+0E35 THAI CHARACTER SARA II */
- XK_Thai_saraue = 0x0dd6, /* U+0E36 THAI CHARACTER SARA UE */
- XK_Thai_sarauee = 0x0dd7, /* U+0E37 THAI CHARACTER SARA UEE */
- XK_Thai_sarau = 0x0dd8, /* U+0E38 THAI CHARACTER SARA U */
- XK_Thai_sarauu = 0x0dd9, /* U+0E39 THAI CHARACTER SARA UU */
- XK_Thai_phinthu = 0x0dda, /* U+0E3A THAI CHARACTER PHINTHU */
- XK_Thai_maihanakat_maitho = 0x0dde,
- XK_Thai_baht = 0x0ddf, /* U+0E3F THAI CURRENCY SYMBOL BAHT */
- XK_Thai_sarae = 0x0de0, /* U+0E40 THAI CHARACTER SARA E */
- XK_Thai_saraae = 0x0de1, /* U+0E41 THAI CHARACTER SARA AE */
- XK_Thai_sarao = 0x0de2, /* U+0E42 THAI CHARACTER SARA O */
- XK_Thai_saraaimaimuan = 0x0de3, /* U+0E43 THAI CHARACTER SARA AI MAIMUAN */
- XK_Thai_saraaimaimalai = 0x0de4, /* U+0E44 THAI CHARACTER SARA AI MAIMALAI */
- XK_Thai_lakkhangyao = 0x0de5, /* U+0E45 THAI CHARACTER LAKKHANGYAO */
- XK_Thai_maiyamok = 0x0de6, /* U+0E46 THAI CHARACTER MAIYAMOK */
- XK_Thai_maitaikhu = 0x0de7, /* U+0E47 THAI CHARACTER MAITAIKHU */
- XK_Thai_maiek = 0x0de8, /* U+0E48 THAI CHARACTER MAI EK */
- XK_Thai_maitho = 0x0de9, /* U+0E49 THAI CHARACTER MAI THO */
- XK_Thai_maitri = 0x0dea, /* U+0E4A THAI CHARACTER MAI TRI */
- XK_Thai_maichattawa = 0x0deb, /* U+0E4B THAI CHARACTER MAI CHATTAWA */
- XK_Thai_thanthakhat = 0x0dec, /* U+0E4C THAI CHARACTER THANTHAKHAT */
- XK_Thai_nikhahit = 0x0ded, /* U+0E4D THAI CHARACTER NIKHAHIT */
- XK_Thai_leksun = 0x0df0, /* U+0E50 THAI DIGIT ZERO */
- XK_Thai_leknung = 0x0df1, /* U+0E51 THAI DIGIT ONE */
- XK_Thai_leksong = 0x0df2, /* U+0E52 THAI DIGIT TWO */
- XK_Thai_leksam = 0x0df3, /* U+0E53 THAI DIGIT THREE */
- XK_Thai_leksi = 0x0df4, /* U+0E54 THAI DIGIT FOUR */
- XK_Thai_lekha = 0x0df5, /* U+0E55 THAI DIGIT FIVE */
- XK_Thai_lekhok = 0x0df6, /* U+0E56 THAI DIGIT SIX */
- XK_Thai_lekchet = 0x0df7, /* U+0E57 THAI DIGIT SEVEN */
- XK_Thai_lekpaet = 0x0df8, /* U+0E58 THAI DIGIT EIGHT */
- XK_Thai_lekkao = 0x0df9, /* U+0E59 THAI DIGIT NINE */
- XK_Hangul = 0xff31, /* Hangul start/stop(toggle) */
- XK_Hangul_Start = 0xff32, /* Hangul start */
- XK_Hangul_End = 0xff33, /* Hangul end, English start */
- XK_Hangul_Hanja = 0xff34, /* Start Hangul->Hanja Conversion */
- XK_Hangul_Jamo = 0xff35, /* Hangul Jamo mode */
- XK_Hangul_Romaja = 0xff36, /* Hangul Romaja mode */
- XK_Hangul_Codeinput = 0xff37, /* Hangul code input mode */
- XK_Hangul_Jeonja = 0xff38, /* Jeonja mode */
- XK_Hangul_Banja = 0xff39, /* Banja mode */
- XK_Hangul_PreHanja = 0xff3a, /* Pre Hanja conversion */
- XK_Hangul_PostHanja = 0xff3b, /* Post Hanja conversion */
- XK_Hangul_SingleCandidate = 0xff3c, /* Single candidate */
- XK_Hangul_MultipleCandidate = 0xff3d, /* Multiple candidate */
- XK_Hangul_PreviousCandidate = 0xff3e, /* Previous candidate */
- XK_Hangul_Special = 0xff3f, /* Special symbols */
- XK_Hangul_switch = 0xff7e, /* Alias for mode_switch */
- XK_Hangul_Kiyeog = 0x0ea1,
- XK_Hangul_SsangKiyeog = 0x0ea2,
- XK_Hangul_KiyeogSios = 0x0ea3,
- XK_Hangul_Nieun = 0x0ea4,
- XK_Hangul_NieunJieuj = 0x0ea5,
- XK_Hangul_NieunHieuh = 0x0ea6,
- XK_Hangul_Dikeud = 0x0ea7,
- XK_Hangul_SsangDikeud = 0x0ea8,
- XK_Hangul_Rieul = 0x0ea9,
- XK_Hangul_RieulKiyeog = 0x0eaa,
- XK_Hangul_RieulMieum = 0x0eab,
- XK_Hangul_RieulPieub = 0x0eac,
- XK_Hangul_RieulSios = 0x0ead,
- XK_Hangul_RieulTieut = 0x0eae,
- XK_Hangul_RieulPhieuf = 0x0eaf,
- XK_Hangul_RieulHieuh = 0x0eb0,
- XK_Hangul_Mieum = 0x0eb1,
- XK_Hangul_Pieub = 0x0eb2,
- XK_Hangul_SsangPieub = 0x0eb3,
- XK_Hangul_PieubSios = 0x0eb4,
- XK_Hangul_Sios = 0x0eb5,
- XK_Hangul_SsangSios = 0x0eb6,
- XK_Hangul_Ieung = 0x0eb7,
- XK_Hangul_Jieuj = 0x0eb8,
- XK_Hangul_SsangJieuj = 0x0eb9,
- XK_Hangul_Cieuc = 0x0eba,
- XK_Hangul_Khieuq = 0x0ebb,
- XK_Hangul_Tieut = 0x0ebc,
- XK_Hangul_Phieuf = 0x0ebd,
- XK_Hangul_Hieuh = 0x0ebe,
- XK_Hangul_A = 0x0ebf,
- XK_Hangul_AE = 0x0ec0,
- XK_Hangul_YA = 0x0ec1,
- XK_Hangul_YAE = 0x0ec2,
- XK_Hangul_EO = 0x0ec3,
- XK_Hangul_E = 0x0ec4,
- XK_Hangul_YEO = 0x0ec5,
- XK_Hangul_YE = 0x0ec6,
- XK_Hangul_O = 0x0ec7,
- XK_Hangul_WA = 0x0ec8,
- XK_Hangul_WAE = 0x0ec9,
- XK_Hangul_OE = 0x0eca,
- XK_Hangul_YO = 0x0ecb,
- XK_Hangul_U = 0x0ecc,
- XK_Hangul_WEO = 0x0ecd,
- XK_Hangul_WE = 0x0ece,
- XK_Hangul_WI = 0x0ecf,
- XK_Hangul_YU = 0x0ed0,
- XK_Hangul_EU = 0x0ed1,
- XK_Hangul_YI = 0x0ed2,
- XK_Hangul_I = 0x0ed3,
- XK_Hangul_J_Kiyeog = 0x0ed4,
- XK_Hangul_J_SsangKiyeog = 0x0ed5,
- XK_Hangul_J_KiyeogSios = 0x0ed6,
- XK_Hangul_J_Nieun = 0x0ed7,
- XK_Hangul_J_NieunJieuj = 0x0ed8,
- XK_Hangul_J_NieunHieuh = 0x0ed9,
- XK_Hangul_J_Dikeud = 0x0eda,
- XK_Hangul_J_Rieul = 0x0edb,
- XK_Hangul_J_RieulKiyeog = 0x0edc,
- XK_Hangul_J_RieulMieum = 0x0edd,
- XK_Hangul_J_RieulPieub = 0x0ede,
- XK_Hangul_J_RieulSios = 0x0edf,
- XK_Hangul_J_RieulTieut = 0x0ee0,
- XK_Hangul_J_RieulPhieuf = 0x0ee1,
- XK_Hangul_J_RieulHieuh = 0x0ee2,
- XK_Hangul_J_Mieum = 0x0ee3,
- XK_Hangul_J_Pieub = 0x0ee4,
- XK_Hangul_J_PieubSios = 0x0ee5,
- XK_Hangul_J_Sios = 0x0ee6,
- XK_Hangul_J_SsangSios = 0x0ee7,
- XK_Hangul_J_Ieung = 0x0ee8,
- XK_Hangul_J_Jieuj = 0x0ee9,
- XK_Hangul_J_Cieuc = 0x0eea,
- XK_Hangul_J_Khieuq = 0x0eeb,
- XK_Hangul_J_Tieut = 0x0eec,
- XK_Hangul_J_Phieuf = 0x0eed,
- XK_Hangul_J_Hieuh = 0x0eee,
- XK_Hangul_RieulYeorinHieuh = 0x0eef,
- XK_Hangul_SunkyeongeumMieum = 0x0ef0,
- XK_Hangul_SunkyeongeumPieub = 0x0ef1,
- XK_Hangul_PanSios = 0x0ef2,
- XK_Hangul_KkogjiDalrinIeung = 0x0ef3,
- XK_Hangul_SunkyeongeumPhieuf = 0x0ef4,
- XK_Hangul_YeorinHieuh = 0x0ef5,
- XK_Hangul_AraeA = 0x0ef6,
- XK_Hangul_AraeAE = 0x0ef7,
- XK_Hangul_J_PanSios = 0x0ef8,
- XK_Hangul_J_KkogjiDalrinIeung = 0x0ef9,
- XK_Hangul_J_YeorinHieuh = 0x0efa,
- XK_Korean_Won = 0x0eff, /*(U+20A9 WON SIGN)*/
- XK_Armenian_ligature_ew = 0x1000587, /* U+0587 ARMENIAN SMALL LIGATURE ECH YIWN */
- XK_Armenian_full_stop = 0x1000589, /* U+0589 ARMENIAN FULL STOP */
- XK_Armenian_verjaket = 0x1000589, /* U+0589 ARMENIAN FULL STOP */
- XK_Armenian_separation_mark = 0x100055d, /* U+055D ARMENIAN COMMA */
- XK_Armenian_but = 0x100055d, /* U+055D ARMENIAN COMMA */
- XK_Armenian_hyphen = 0x100058a, /* U+058A ARMENIAN HYPHEN */
- XK_Armenian_yentamna = 0x100058a, /* U+058A ARMENIAN HYPHEN */
- XK_Armenian_exclam = 0x100055c, /* U+055C ARMENIAN EXCLAMATION MARK */
- XK_Armenian_amanak = 0x100055c, /* U+055C ARMENIAN EXCLAMATION MARK */
- XK_Armenian_accent = 0x100055b, /* U+055B ARMENIAN EMPHASIS MARK */
- XK_Armenian_shesht = 0x100055b, /* U+055B ARMENIAN EMPHASIS MARK */
- XK_Armenian_question = 0x100055e, /* U+055E ARMENIAN QUESTION MARK */
- XK_Armenian_paruyk = 0x100055e, /* U+055E ARMENIAN QUESTION MARK */
- XK_Armenian_AYB = 0x1000531, /* U+0531 ARMENIAN CAPITAL LETTER AYB */
- XK_Armenian_ayb = 0x1000561, /* U+0561 ARMENIAN SMALL LETTER AYB */
- XK_Armenian_BEN = 0x1000532, /* U+0532 ARMENIAN CAPITAL LETTER BEN */
- XK_Armenian_ben = 0x1000562, /* U+0562 ARMENIAN SMALL LETTER BEN */
- XK_Armenian_GIM = 0x1000533, /* U+0533 ARMENIAN CAPITAL LETTER GIM */
- XK_Armenian_gim = 0x1000563, /* U+0563 ARMENIAN SMALL LETTER GIM */
- XK_Armenian_DA = 0x1000534, /* U+0534 ARMENIAN CAPITAL LETTER DA */
- XK_Armenian_da = 0x1000564, /* U+0564 ARMENIAN SMALL LETTER DA */
- XK_Armenian_YECH = 0x1000535, /* U+0535 ARMENIAN CAPITAL LETTER ECH */
- XK_Armenian_yech = 0x1000565, /* U+0565 ARMENIAN SMALL LETTER ECH */
- XK_Armenian_ZA = 0x1000536, /* U+0536 ARMENIAN CAPITAL LETTER ZA */
- XK_Armenian_za = 0x1000566, /* U+0566 ARMENIAN SMALL LETTER ZA */
- XK_Armenian_E = 0x1000537, /* U+0537 ARMENIAN CAPITAL LETTER EH */
- XK_Armenian_e = 0x1000567, /* U+0567 ARMENIAN SMALL LETTER EH */
- XK_Armenian_AT = 0x1000538, /* U+0538 ARMENIAN CAPITAL LETTER ET */
- XK_Armenian_at = 0x1000568, /* U+0568 ARMENIAN SMALL LETTER ET */
- XK_Armenian_TO = 0x1000539, /* U+0539 ARMENIAN CAPITAL LETTER TO */
- XK_Armenian_to = 0x1000569, /* U+0569 ARMENIAN SMALL LETTER TO */
- XK_Armenian_ZHE = 0x100053a, /* U+053A ARMENIAN CAPITAL LETTER ZHE */
- XK_Armenian_zhe = 0x100056a, /* U+056A ARMENIAN SMALL LETTER ZHE */
- XK_Armenian_INI = 0x100053b, /* U+053B ARMENIAN CAPITAL LETTER INI */
- XK_Armenian_ini = 0x100056b, /* U+056B ARMENIAN SMALL LETTER INI */
- XK_Armenian_LYUN = 0x100053c, /* U+053C ARMENIAN CAPITAL LETTER LIWN */
- XK_Armenian_lyun = 0x100056c, /* U+056C ARMENIAN SMALL LETTER LIWN */
- XK_Armenian_KHE = 0x100053d, /* U+053D ARMENIAN CAPITAL LETTER XEH */
- XK_Armenian_khe = 0x100056d, /* U+056D ARMENIAN SMALL LETTER XEH */
- XK_Armenian_TSA = 0x100053e, /* U+053E ARMENIAN CAPITAL LETTER CA */
- XK_Armenian_tsa = 0x100056e, /* U+056E ARMENIAN SMALL LETTER CA */
- XK_Armenian_KEN = 0x100053f, /* U+053F ARMENIAN CAPITAL LETTER KEN */
- XK_Armenian_ken = 0x100056f, /* U+056F ARMENIAN SMALL LETTER KEN */
- XK_Armenian_HO = 0x1000540, /* U+0540 ARMENIAN CAPITAL LETTER HO */
- XK_Armenian_ho = 0x1000570, /* U+0570 ARMENIAN SMALL LETTER HO */
- XK_Armenian_DZA = 0x1000541, /* U+0541 ARMENIAN CAPITAL LETTER JA */
- XK_Armenian_dza = 0x1000571, /* U+0571 ARMENIAN SMALL LETTER JA */
- XK_Armenian_GHAT = 0x1000542, /* U+0542 ARMENIAN CAPITAL LETTER GHAD */
- XK_Armenian_ghat = 0x1000572, /* U+0572 ARMENIAN SMALL LETTER GHAD */
- XK_Armenian_TCHE = 0x1000543, /* U+0543 ARMENIAN CAPITAL LETTER CHEH */
- XK_Armenian_tche = 0x1000573, /* U+0573 ARMENIAN SMALL LETTER CHEH */
- XK_Armenian_MEN = 0x1000544, /* U+0544 ARMENIAN CAPITAL LETTER MEN */
- XK_Armenian_men = 0x1000574, /* U+0574 ARMENIAN SMALL LETTER MEN */
- XK_Armenian_HI = 0x1000545, /* U+0545 ARMENIAN CAPITAL LETTER YI */
- XK_Armenian_hi = 0x1000575, /* U+0575 ARMENIAN SMALL LETTER YI */
- XK_Armenian_NU = 0x1000546, /* U+0546 ARMENIAN CAPITAL LETTER NOW */
- XK_Armenian_nu = 0x1000576, /* U+0576 ARMENIAN SMALL LETTER NOW */
- XK_Armenian_SHA = 0x1000547, /* U+0547 ARMENIAN CAPITAL LETTER SHA */
- XK_Armenian_sha = 0x1000577, /* U+0577 ARMENIAN SMALL LETTER SHA */
- XK_Armenian_VO = 0x1000548, /* U+0548 ARMENIAN CAPITAL LETTER VO */
- XK_Armenian_vo = 0x1000578, /* U+0578 ARMENIAN SMALL LETTER VO */
- XK_Armenian_CHA = 0x1000549, /* U+0549 ARMENIAN CAPITAL LETTER CHA */
- XK_Armenian_cha = 0x1000579, /* U+0579 ARMENIAN SMALL LETTER CHA */
- XK_Armenian_PE = 0x100054a, /* U+054A ARMENIAN CAPITAL LETTER PEH */
- XK_Armenian_pe = 0x100057a, /* U+057A ARMENIAN SMALL LETTER PEH */
- XK_Armenian_JE = 0x100054b, /* U+054B ARMENIAN CAPITAL LETTER JHEH */
- XK_Armenian_je = 0x100057b, /* U+057B ARMENIAN SMALL LETTER JHEH */
- XK_Armenian_RA = 0x100054c, /* U+054C ARMENIAN CAPITAL LETTER RA */
- XK_Armenian_ra = 0x100057c, /* U+057C ARMENIAN SMALL LETTER RA */
- XK_Armenian_SE = 0x100054d, /* U+054D ARMENIAN CAPITAL LETTER SEH */
- XK_Armenian_se = 0x100057d, /* U+057D ARMENIAN SMALL LETTER SEH */
- XK_Armenian_VEV = 0x100054e, /* U+054E ARMENIAN CAPITAL LETTER VEW */
- XK_Armenian_vev = 0x100057e, /* U+057E ARMENIAN SMALL LETTER VEW */
- XK_Armenian_TYUN = 0x100054f, /* U+054F ARMENIAN CAPITAL LETTER TIWN */
- XK_Armenian_tyun = 0x100057f, /* U+057F ARMENIAN SMALL LETTER TIWN */
- XK_Armenian_RE = 0x1000550, /* U+0550 ARMENIAN CAPITAL LETTER REH */
- XK_Armenian_re = 0x1000580, /* U+0580 ARMENIAN SMALL LETTER REH */
- XK_Armenian_TSO = 0x1000551, /* U+0551 ARMENIAN CAPITAL LETTER CO */
- XK_Armenian_tso = 0x1000581, /* U+0581 ARMENIAN SMALL LETTER CO */
- XK_Armenian_VYUN = 0x1000552, /* U+0552 ARMENIAN CAPITAL LETTER YIWN */
- XK_Armenian_vyun = 0x1000582, /* U+0582 ARMENIAN SMALL LETTER YIWN */
- XK_Armenian_PYUR = 0x1000553, /* U+0553 ARMENIAN CAPITAL LETTER PIWR */
- XK_Armenian_pyur = 0x1000583, /* U+0583 ARMENIAN SMALL LETTER PIWR */
- XK_Armenian_KE = 0x1000554, /* U+0554 ARMENIAN CAPITAL LETTER KEH */
- XK_Armenian_ke = 0x1000584, /* U+0584 ARMENIAN SMALL LETTER KEH */
- XK_Armenian_O = 0x1000555, /* U+0555 ARMENIAN CAPITAL LETTER OH */
- XK_Armenian_o = 0x1000585, /* U+0585 ARMENIAN SMALL LETTER OH */
- XK_Armenian_FE = 0x1000556, /* U+0556 ARMENIAN CAPITAL LETTER FEH */
- XK_Armenian_fe = 0x1000586, /* U+0586 ARMENIAN SMALL LETTER FEH */
- XK_Armenian_apostrophe = 0x100055a, /* U+055A ARMENIAN APOSTROPHE */
- XK_Georgian_an = 0x10010d0, /* U+10D0 GEORGIAN LETTER AN */
- XK_Georgian_ban = 0x10010d1, /* U+10D1 GEORGIAN LETTER BAN */
- XK_Georgian_gan = 0x10010d2, /* U+10D2 GEORGIAN LETTER GAN */
- XK_Georgian_don = 0x10010d3, /* U+10D3 GEORGIAN LETTER DON */
- XK_Georgian_en = 0x10010d4, /* U+10D4 GEORGIAN LETTER EN */
- XK_Georgian_vin = 0x10010d5, /* U+10D5 GEORGIAN LETTER VIN */
- XK_Georgian_zen = 0x10010d6, /* U+10D6 GEORGIAN LETTER ZEN */
- XK_Georgian_tan = 0x10010d7, /* U+10D7 GEORGIAN LETTER TAN */
- XK_Georgian_in = 0x10010d8, /* U+10D8 GEORGIAN LETTER IN */
- XK_Georgian_kan = 0x10010d9, /* U+10D9 GEORGIAN LETTER KAN */
- XK_Georgian_las = 0x10010da, /* U+10DA GEORGIAN LETTER LAS */
- XK_Georgian_man = 0x10010db, /* U+10DB GEORGIAN LETTER MAN */
- XK_Georgian_nar = 0x10010dc, /* U+10DC GEORGIAN LETTER NAR */
- XK_Georgian_on = 0x10010dd, /* U+10DD GEORGIAN LETTER ON */
- XK_Georgian_par = 0x10010de, /* U+10DE GEORGIAN LETTER PAR */
- XK_Georgian_zhar = 0x10010df, /* U+10DF GEORGIAN LETTER ZHAR */
- XK_Georgian_rae = 0x10010e0, /* U+10E0 GEORGIAN LETTER RAE */
- XK_Georgian_san = 0x10010e1, /* U+10E1 GEORGIAN LETTER SAN */
- XK_Georgian_tar = 0x10010e2, /* U+10E2 GEORGIAN LETTER TAR */
- XK_Georgian_un = 0x10010e3, /* U+10E3 GEORGIAN LETTER UN */
- XK_Georgian_phar = 0x10010e4, /* U+10E4 GEORGIAN LETTER PHAR */
- XK_Georgian_khar = 0x10010e5, /* U+10E5 GEORGIAN LETTER KHAR */
- XK_Georgian_ghan = 0x10010e6, /* U+10E6 GEORGIAN LETTER GHAN */
- XK_Georgian_qar = 0x10010e7, /* U+10E7 GEORGIAN LETTER QAR */
- XK_Georgian_shin = 0x10010e8, /* U+10E8 GEORGIAN LETTER SHIN */
- XK_Georgian_chin = 0x10010e9, /* U+10E9 GEORGIAN LETTER CHIN */
- XK_Georgian_can = 0x10010ea, /* U+10EA GEORGIAN LETTER CAN */
- XK_Georgian_jil = 0x10010eb, /* U+10EB GEORGIAN LETTER JIL */
- XK_Georgian_cil = 0x10010ec, /* U+10EC GEORGIAN LETTER CIL */
- XK_Georgian_char = 0x10010ed, /* U+10ED GEORGIAN LETTER CHAR */
- XK_Georgian_xan = 0x10010ee, /* U+10EE GEORGIAN LETTER XAN */
- XK_Georgian_jhan = 0x10010ef, /* U+10EF GEORGIAN LETTER JHAN */
- XK_Georgian_hae = 0x10010f0, /* U+10F0 GEORGIAN LETTER HAE */
- XK_Georgian_he = 0x10010f1, /* U+10F1 GEORGIAN LETTER HE */
- XK_Georgian_hie = 0x10010f2, /* U+10F2 GEORGIAN LETTER HIE */
- XK_Georgian_we = 0x10010f3, /* U+10F3 GEORGIAN LETTER WE */
- XK_Georgian_har = 0x10010f4, /* U+10F4 GEORGIAN LETTER HAR */
- XK_Georgian_hoe = 0x10010f5, /* U+10F5 GEORGIAN LETTER HOE */
- XK_Georgian_fi = 0x10010f6, /* U+10F6 GEORGIAN LETTER FI */
- XK_Xabovedot = 0x1001e8a, /* U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE */
- XK_Ibreve = 0x100012c, /* U+012C LATIN CAPITAL LETTER I WITH BREVE */
- XK_Zstroke = 0x10001b5, /* U+01B5 LATIN CAPITAL LETTER Z WITH STROKE */
- XK_Gcaron = 0x10001e6, /* U+01E6 LATIN CAPITAL LETTER G WITH CARON */
- XK_Ocaron = 0x10001d1, /* U+01D2 LATIN CAPITAL LETTER O WITH CARON */
- XK_Obarred = 0x100019f, /* U+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE */
- XK_xabovedot = 0x1001e8b, /* U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE */
- XK_ibreve = 0x100012d, /* U+012D LATIN SMALL LETTER I WITH BREVE */
- XK_zstroke = 0x10001b6, /* U+01B6 LATIN SMALL LETTER Z WITH STROKE */
- XK_gcaron = 0x10001e7, /* U+01E7 LATIN SMALL LETTER G WITH CARON */
- XK_ocaron = 0x10001d2, /* U+01D2 LATIN SMALL LETTER O WITH CARON */
- XK_obarred = 0x1000275, /* U+0275 LATIN SMALL LETTER BARRED O */
- XK_SCHWA = 0x100018f, /* U+018F LATIN CAPITAL LETTER SCHWA */
- XK_schwa = 0x1000259, /* U+0259 LATIN SMALL LETTER SCHWA */
- XK_Lbelowdot = 0x1001e36, /* U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW */
- XK_lbelowdot = 0x1001e37, /* U+1E37 LATIN SMALL LETTER L WITH DOT BELOW */
- XK_Abelowdot = 0x1001ea0, /* U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW */
- XK_abelowdot = 0x1001ea1, /* U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW */
- XK_Ahook = 0x1001ea2, /* U+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE */
- XK_ahook = 0x1001ea3, /* U+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE */
- XK_Acircumflexacute = 0x1001ea4, /* U+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */
- XK_acircumflexacute = 0x1001ea5, /* U+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */
- XK_Acircumflexgrave = 0x1001ea6, /* U+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */
- XK_acircumflexgrave = 0x1001ea7, /* U+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */
- XK_Acircumflexhook = 0x1001ea8, /* U+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
- XK_acircumflexhook = 0x1001ea9, /* U+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
- XK_Acircumflextilde = 0x1001eaa, /* U+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */
- XK_acircumflextilde = 0x1001eab, /* U+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */
- XK_Acircumflexbelowdot = 0x1001eac, /* U+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
- XK_acircumflexbelowdot = 0x1001ead, /* U+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
- XK_Abreveacute = 0x1001eae, /* U+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */
- XK_abreveacute = 0x1001eaf, /* U+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE */
- XK_Abrevegrave = 0x1001eb0, /* U+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */
- XK_abrevegrave = 0x1001eb1, /* U+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE */
- XK_Abrevehook = 0x1001eb2, /* U+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */
- XK_abrevehook = 0x1001eb3, /* U+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */
- XK_Abrevetilde = 0x1001eb4, /* U+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE */
- XK_abrevetilde = 0x1001eb5, /* U+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE */
- XK_Abrevebelowdot = 0x1001eb6, /* U+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
- XK_abrevebelowdot = 0x1001eb7, /* U+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */
- XK_Ebelowdot = 0x1001eb8, /* U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW */
- XK_ebelowdot = 0x1001eb9, /* U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW */
- XK_Ehook = 0x1001eba, /* U+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE */
- XK_ehook = 0x1001ebb, /* U+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE */
- XK_Etilde = 0x1001ebc, /* U+1EBC LATIN CAPITAL LETTER E WITH TILDE */
- XK_etilde = 0x1001ebd, /* U+1EBD LATIN SMALL LETTER E WITH TILDE */
- XK_Ecircumflexacute = 0x1001ebe, /* U+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */
- XK_ecircumflexacute = 0x1001ebf, /* U+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */
- XK_Ecircumflexgrave = 0x1001ec0, /* U+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */
- XK_ecircumflexgrave = 0x1001ec1, /* U+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */
- XK_Ecircumflexhook = 0x1001ec2, /* U+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
- XK_ecircumflexhook = 0x1001ec3, /* U+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
- XK_Ecircumflextilde = 0x1001ec4, /* U+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */
- XK_ecircumflextilde = 0x1001ec5, /* U+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */
- XK_Ecircumflexbelowdot = 0x1001ec6, /* U+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
- XK_ecircumflexbelowdot = 0x1001ec7, /* U+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
- XK_Ihook = 0x1001ec8, /* U+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE */
- XK_ihook = 0x1001ec9, /* U+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE */
- XK_Ibelowdot = 0x1001eca, /* U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW */
- XK_ibelowdot = 0x1001ecb, /* U+1ECB LATIN SMALL LETTER I WITH DOT BELOW */
- XK_Obelowdot = 0x1001ecc, /* U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW */
- XK_obelowdot = 0x1001ecd, /* U+1ECD LATIN SMALL LETTER O WITH DOT BELOW */
- XK_Ohook = 0x1001ece, /* U+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE */
- XK_ohook = 0x1001ecf, /* U+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE */
- XK_Ocircumflexacute = 0x1001ed0, /* U+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
- XK_ocircumflexacute = 0x1001ed1, /* U+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */
- XK_Ocircumflexgrave = 0x1001ed2, /* U+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */
- XK_ocircumflexgrave = 0x1001ed3, /* U+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */
- XK_Ocircumflexhook = 0x1001ed4, /* U+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
- XK_ocircumflexhook = 0x1001ed5, /* U+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
- XK_Ocircumflextilde = 0x1001ed6, /* U+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */
- XK_ocircumflextilde = 0x1001ed7, /* U+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */
- XK_Ocircumflexbelowdot = 0x1001ed8, /* U+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
- XK_ocircumflexbelowdot = 0x1001ed9, /* U+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
- XK_Ohornacute = 0x1001eda, /* U+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE */
- XK_ohornacute = 0x1001edb, /* U+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE */
- XK_Ohorngrave = 0x1001edc, /* U+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE */
- XK_ohorngrave = 0x1001edd, /* U+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE */
- XK_Ohornhook = 0x1001ede, /* U+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */
- XK_ohornhook = 0x1001edf, /* U+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */
- XK_Ohorntilde = 0x1001ee0, /* U+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE */
- XK_ohorntilde = 0x1001ee1, /* U+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE */
- XK_Ohornbelowdot = 0x1001ee2, /* U+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */
- XK_ohornbelowdot = 0x1001ee3, /* U+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW */
- XK_Ubelowdot = 0x1001ee4, /* U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW */
- XK_ubelowdot = 0x1001ee5, /* U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW */
- XK_Uhook = 0x1001ee6, /* U+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE */
- XK_uhook = 0x1001ee7, /* U+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE */
- XK_Uhornacute = 0x1001ee8, /* U+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE */
- XK_uhornacute = 0x1001ee9, /* U+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE */
- XK_Uhorngrave = 0x1001eea, /* U+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE */
- XK_uhorngrave = 0x1001eeb, /* U+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE */
- XK_Uhornhook = 0x1001eec, /* U+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */
- XK_uhornhook = 0x1001eed, /* U+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */
- XK_Uhorntilde = 0x1001eee, /* U+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE */
- XK_uhorntilde = 0x1001eef, /* U+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE */
- XK_Uhornbelowdot = 0x1001ef0, /* U+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */
- XK_uhornbelowdot = 0x1001ef1, /* U+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW */
- XK_Ybelowdot = 0x1001ef4, /* U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW */
- XK_ybelowdot = 0x1001ef5, /* U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW */
- XK_Yhook = 0x1001ef6, /* U+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE */
- XK_yhook = 0x1001ef7, /* U+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE */
- XK_Ytilde = 0x1001ef8, /* U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE */
- XK_ytilde = 0x1001ef9, /* U+1EF9 LATIN SMALL LETTER Y WITH TILDE */
- XK_Ohorn = 0x10001a0, /* U+01A0 LATIN CAPITAL LETTER O WITH HORN */
- XK_ohorn = 0x10001a1, /* U+01A1 LATIN SMALL LETTER O WITH HORN */
- XK_Uhorn = 0x10001af, /* U+01AF LATIN CAPITAL LETTER U WITH HORN */
- XK_uhorn = 0x10001b0, /* U+01B0 LATIN SMALL LETTER U WITH HORN */
- XK_EcuSign = 0x10020a0, /* U+20A0 EURO-CURRENCY SIGN */
- XK_ColonSign = 0x10020a1, /* U+20A1 COLON SIGN */
- XK_CruzeiroSign = 0x10020a2, /* U+20A2 CRUZEIRO SIGN */
- XK_FFrancSign = 0x10020a3, /* U+20A3 FRENCH FRANC SIGN */
- XK_LiraSign = 0x10020a4, /* U+20A4 LIRA SIGN */
- XK_MillSign = 0x10020a5, /* U+20A5 MILL SIGN */
- XK_NairaSign = 0x10020a6, /* U+20A6 NAIRA SIGN */
- XK_PesetaSign = 0x10020a7, /* U+20A7 PESETA SIGN */
- XK_RupeeSign = 0x10020a8, /* U+20A8 RUPEE SIGN */
- XK_WonSign = 0x10020a9, /* U+20A9 WON SIGN */
- XK_NewSheqelSign = 0x10020aa, /* U+20AA NEW SHEQEL SIGN */
- XK_DongSign = 0x10020ab, /* U+20AB DONG SIGN */
- XK_EuroSign = 0x20ac, /* U+20AC EURO SIGN */
+ XK_BackSpace = 0xff08, /* Back space, back char */
+ XK_Tab = 0xff09,
+ XK_Linefeed = 0xff0a, /* Linefeed, LF */
+ XK_Clear = 0xff0b,
+ XK_Return = 0xff0d, /* Return, enter */
+ XK_Pause = 0xff13, /* Pause, hold */
+ XK_Scroll_Lock = 0xff14,
+ XK_Sys_Req = 0xff15,
+ XK_Escape = 0xff1b,
+ XK_Delete = 0xffff, /* Delete, rubout */
+ XK_Multi_key = 0xff20, /* Multi-key character compose */
+ XK_Codeinput = 0xff37,
+ XK_SingleCandidate = 0xff3c,
+ XK_MultipleCandidate = 0xff3d,
+ XK_PreviousCandidate = 0xff3e,
+ XK_Kanji = 0xff21, /* Kanji, Kanji convert */
+ XK_Muhenkan = 0xff22, /* Cancel Conversion */
+ XK_Henkan_Mode = 0xff23, /* Start/Stop Conversion */
+ XK_Henkan = 0xff23, /* Alias for Henkan_Mode */
+ XK_Romaji = 0xff24, /* to Romaji */
+ XK_Hiragana = 0xff25, /* to Hiragana */
+ XK_Katakana = 0xff26, /* to Katakana */
+ XK_Hiragana_Katakana = 0xff27, /* Hiragana/Katakana toggle */
+ XK_Zenkaku = 0xff28, /* to Zenkaku */
+ XK_Hankaku = 0xff29, /* to Hankaku */
+ XK_Zenkaku_Hankaku = 0xff2a, /* Zenkaku/Hankaku toggle */
+ XK_Touroku = 0xff2b, /* Add to Dictionary */
+ XK_Massyo = 0xff2c, /* Delete from Dictionary */
+ XK_Kana_Lock = 0xff2d, /* Kana Lock */
+ XK_Kana_Shift = 0xff2e, /* Kana Shift */
+ XK_Eisu_Shift = 0xff2f, /* Alphanumeric Shift */
+ XK_Eisu_toggle = 0xff30, /* Alphanumeric toggle */
+ XK_Kanji_Bangou = 0xff37, /* Codeinput */
+ XK_Zen_Koho = 0xff3d, /* Multiple/All Candidate(s) */
+ XK_Mae_Koho = 0xff3e, /* Previous Candidate */
+ XK_Home = 0xff50,
+ XK_Left = 0xff51, /* Move left, left arrow */
+ XK_Up = 0xff52, /* Move up, up arrow */
+ XK_Right = 0xff53, /* Move right, right arrow */
+ XK_Down = 0xff54, /* Move down, down arrow */
+ XK_Prior = 0xff55, /* Prior, previous */
+ XK_Page_Up = 0xff55,
+ XK_Next = 0xff56, /* Next */
+ XK_Page_Down = 0xff56,
+ XK_End = 0xff57, /* EOL */
+ XK_Begin = 0xff58, /* BOL */
+ XK_Select = 0xff60, /* Select, mark */
+ XK_Print = 0xff61,
+ XK_Execute = 0xff62, /* Execute, run, do */
+ XK_Insert = 0xff63, /* Insert, insert here */
+ XK_Undo = 0xff65,
+ XK_Redo = 0xff66, /* Redo, again */
+ XK_Menu = 0xff67,
+ XK_Find = 0xff68, /* Find, search */
+ XK_Cancel = 0xff69, /* Cancel, stop, abort, exit */
+ XK_Help = 0xff6a, /* Help */
+ XK_Break = 0xff6b,
+ XK_Mode_switch = 0xff7e, /* Character set switch */
+ XK_script_switch = 0xff7e, /* Alias for mode_switch */
+ XK_Num_Lock = 0xff7f,
+ XK_KP_Space = 0xff80, /* Space */
+ XK_KP_Tab = 0xff89,
+ XK_KP_Enter = 0xff8d, /* Enter */
+ XK_KP_F1 = 0xff91, /* PF1, KP_A, ... */
+ XK_KP_F2 = 0xff92,
+ XK_KP_F3 = 0xff93,
+ XK_KP_F4 = 0xff94,
+ XK_KP_Home = 0xff95,
+ XK_KP_Left = 0xff96,
+ XK_KP_Up = 0xff97,
+ XK_KP_Right = 0xff98,
+ XK_KP_Down = 0xff99,
+ XK_KP_Prior = 0xff9a,
+ XK_KP_Page_Up = 0xff9a,
+ XK_KP_Next = 0xff9b,
+ XK_KP_Page_Down = 0xff9b,
+ XK_KP_End = 0xff9c,
+ XK_KP_Begin = 0xff9d,
+ XK_KP_Insert = 0xff9e,
+ XK_KP_Delete = 0xff9f,
+ XK_KP_Equal = 0xffbd, /* Equals */
+ XK_KP_Multiply = 0xffaa,
+ XK_KP_Add = 0xffab,
+ XK_KP_Separator = 0xffac, /* Separator, often comma */
+ XK_KP_Subtract = 0xffad,
+ XK_KP_Decimal = 0xffae,
+ XK_KP_Divide = 0xffaf,
+ XK_KP_0 = 0xffb0,
+ XK_KP_1 = 0xffb1,
+ XK_KP_2 = 0xffb2,
+ XK_KP_3 = 0xffb3,
+ XK_KP_4 = 0xffb4,
+ XK_KP_5 = 0xffb5,
+ XK_KP_6 = 0xffb6,
+ XK_KP_7 = 0xffb7,
+ XK_KP_8 = 0xffb8,
+ XK_KP_9 = 0xffb9,
+ XK_F1 = 0xffbe,
+ XK_F2 = 0xffbf,
+ XK_F3 = 0xffc0,
+ XK_F4 = 0xffc1,
+ XK_F5 = 0xffc2,
+ XK_F6 = 0xffc3,
+ XK_F7 = 0xffc4,
+ XK_F8 = 0xffc5,
+ XK_F9 = 0xffc6,
+ XK_F10 = 0xffc7,
+ XK_F11 = 0xffc8,
+ XK_L1 = 0xffc8,
+ XK_F12 = 0xffc9,
+ XK_L2 = 0xffc9,
+ XK_F13 = 0xffca,
+ XK_L3 = 0xffca,
+ XK_F14 = 0xffcb,
+ XK_L4 = 0xffcb,
+ XK_F15 = 0xffcc,
+ XK_L5 = 0xffcc,
+ XK_F16 = 0xffcd,
+ XK_L6 = 0xffcd,
+ XK_F17 = 0xffce,
+ XK_L7 = 0xffce,
+ XK_F18 = 0xffcf,
+ XK_L8 = 0xffcf,
+ XK_F19 = 0xffd0,
+ XK_L9 = 0xffd0,
+ XK_F20 = 0xffd1,
+ XK_L10 = 0xffd1,
+ XK_F21 = 0xffd2,
+ XK_R1 = 0xffd2,
+ XK_F22 = 0xffd3,
+ XK_R2 = 0xffd3,
+ XK_F23 = 0xffd4,
+ XK_R3 = 0xffd4,
+ XK_F24 = 0xffd5,
+ XK_R4 = 0xffd5,
+ XK_F25 = 0xffd6,
+ XK_R5 = 0xffd6,
+ XK_F26 = 0xffd7,
+ XK_R6 = 0xffd7,
+ XK_F27 = 0xffd8,
+ XK_R7 = 0xffd8,
+ XK_F28 = 0xffd9,
+ XK_R8 = 0xffd9,
+ XK_F29 = 0xffda,
+ XK_R9 = 0xffda,
+ XK_F30 = 0xffdb,
+ XK_R10 = 0xffdb,
+ XK_F31 = 0xffdc,
+ XK_R11 = 0xffdc,
+ XK_F32 = 0xffdd,
+ XK_R12 = 0xffdd,
+ XK_F33 = 0xffde,
+ XK_R13 = 0xffde,
+ XK_F34 = 0xffdf,
+ XK_R14 = 0xffdf,
+ XK_F35 = 0xffe0,
+ XK_R15 = 0xffe0,
+ XK_Shift_L = 0xffe1, /* Left shift */
+ XK_Shift_R = 0xffe2, /* Right shift */
+ XK_Control_L = 0xffe3, /* Left control */
+ XK_Control_R = 0xffe4, /* Right control */
+ XK_Caps_Lock = 0xffe5, /* Caps lock */
+ XK_Shift_Lock = 0xffe6, /* Shift lock */
+ XK_Meta_L = 0xffe7, /* Left meta */
+ XK_Meta_R = 0xffe8, /* Right meta */
+ XK_Alt_L = 0xffe9, /* Left alt */
+ XK_Alt_R = 0xffea, /* Right alt */
+ XK_Super_L = 0xffeb, /* Left super */
+ XK_Super_R = 0xffec, /* Right super */
+ XK_Hyper_L = 0xffed, /* Left hyper */
+ XK_Hyper_R = 0xffee, /* Right hyper */
+ XK_ISO_Lock = 0xfe01,
+ XK_ISO_Level2_Latch = 0xfe02,
+ XK_ISO_Level3_Shift = 0xfe03,
+ XK_ISO_Level3_Latch = 0xfe04,
+ XK_ISO_Level3_Lock = 0xfe05,
+ XK_ISO_Group_Shift = 0xff7e, /* Alias for mode_switch */
+ XK_ISO_Group_Latch = 0xfe06,
+ XK_ISO_Group_Lock = 0xfe07,
+ XK_ISO_Next_Group = 0xfe08,
+ XK_ISO_Next_Group_Lock = 0xfe09,
+ XK_ISO_Prev_Group = 0xfe0a,
+ XK_ISO_Prev_Group_Lock = 0xfe0b,
+ XK_ISO_First_Group = 0xfe0c,
+ XK_ISO_First_Group_Lock = 0xfe0d,
+ XK_ISO_Last_Group = 0xfe0e,
+ XK_ISO_Last_Group_Lock = 0xfe0f,
+ XK_ISO_Left_Tab = 0xfe20,
+ XK_ISO_Move_Line_Up = 0xfe21,
+ XK_ISO_Move_Line_Down = 0xfe22,
+ XK_ISO_Partial_Line_Up = 0xfe23,
+ XK_ISO_Partial_Line_Down = 0xfe24,
+ XK_ISO_Partial_Space_Left = 0xfe25,
+ XK_ISO_Partial_Space_Right = 0xfe26,
+ XK_ISO_Set_Margin_Left = 0xfe27,
+ XK_ISO_Set_Margin_Right = 0xfe28,
+ XK_ISO_Release_Margin_Left = 0xfe29,
+ XK_ISO_Release_Margin_Right = 0xfe2a,
+ XK_ISO_Release_Both_Margins = 0xfe2b,
+ XK_ISO_Fast_Cursor_Left = 0xfe2c,
+ XK_ISO_Fast_Cursor_Right = 0xfe2d,
+ XK_ISO_Fast_Cursor_Up = 0xfe2e,
+ XK_ISO_Fast_Cursor_Down = 0xfe2f,
+ XK_ISO_Continuous_Underline = 0xfe30,
+ XK_ISO_Discontinuous_Underline = 0xfe31,
+ XK_ISO_Emphasize = 0xfe32,
+ XK_ISO_Center_Object = 0xfe33,
+ XK_ISO_Enter = 0xfe34,
+ XK_dead_grave = 0xfe50,
+ XK_dead_acute = 0xfe51,
+ XK_dead_circumflex = 0xfe52,
+ XK_dead_tilde = 0xfe53,
+ XK_dead_macron = 0xfe54,
+ XK_dead_breve = 0xfe55,
+ XK_dead_abovedot = 0xfe56,
+ XK_dead_diaeresis = 0xfe57,
+ XK_dead_abovering = 0xfe58,
+ XK_dead_doubleacute = 0xfe59,
+ XK_dead_caron = 0xfe5a,
+ XK_dead_cedilla = 0xfe5b,
+ XK_dead_ogonek = 0xfe5c,
+ XK_dead_iota = 0xfe5d,
+ XK_dead_voiced_sound = 0xfe5e,
+ XK_dead_semivoiced_sound = 0xfe5f,
+ XK_dead_belowdot = 0xfe60,
+ XK_dead_hook = 0xfe61,
+ XK_dead_horn = 0xfe62,
+ XK_First_Virtual_Screen = 0xfed0,
+ XK_Prev_Virtual_Screen = 0xfed1,
+ XK_Next_Virtual_Screen = 0xfed2,
+ XK_Last_Virtual_Screen = 0xfed4,
+ XK_Terminate_Server = 0xfed5,
+ XK_AccessX_Enable = 0xfe70,
+ XK_AccessX_Feedback_Enable = 0xfe71,
+ XK_RepeatKeys_Enable = 0xfe72,
+ XK_SlowKeys_Enable = 0xfe73,
+ XK_BounceKeys_Enable = 0xfe74,
+ XK_StickyKeys_Enable = 0xfe75,
+ XK_MouseKeys_Enable = 0xfe76,
+ XK_MouseKeys_Accel_Enable = 0xfe77,
+ XK_Overlay1_Enable = 0xfe78,
+ XK_Overlay2_Enable = 0xfe79,
+ XK_AudibleBell_Enable = 0xfe7a,
+ XK_Pointer_Left = 0xfee0,
+ XK_Pointer_Right = 0xfee1,
+ XK_Pointer_Up = 0xfee2,
+ XK_Pointer_Down = 0xfee3,
+ XK_Pointer_UpLeft = 0xfee4,
+ XK_Pointer_UpRight = 0xfee5,
+ XK_Pointer_DownLeft = 0xfee6,
+ XK_Pointer_DownRight = 0xfee7,
+ XK_Pointer_Button_Dflt = 0xfee8,
+ XK_Pointer_Button1 = 0xfee9,
+ XK_Pointer_Button2 = 0xfeea,
+ XK_Pointer_Button3 = 0xfeeb,
+ XK_Pointer_Button4 = 0xfeec,
+ XK_Pointer_Button5 = 0xfeed,
+ XK_Pointer_DblClick_Dflt = 0xfeee,
+ XK_Pointer_DblClick1 = 0xfeef,
+ XK_Pointer_DblClick2 = 0xfef0,
+ XK_Pointer_DblClick3 = 0xfef1,
+ XK_Pointer_DblClick4 = 0xfef2,
+ XK_Pointer_DblClick5 = 0xfef3,
+ XK_Pointer_Drag_Dflt = 0xfef4,
+ XK_Pointer_Drag1 = 0xfef5,
+ XK_Pointer_Drag2 = 0xfef6,
+ XK_Pointer_Drag3 = 0xfef7,
+ XK_Pointer_Drag4 = 0xfef8,
+ XK_Pointer_Drag5 = 0xfefd,
+ XK_Pointer_EnableKeys = 0xfef9,
+ XK_Pointer_Accelerate = 0xfefa,
+ XK_Pointer_DfltBtnNext = 0xfefb,
+ XK_Pointer_DfltBtnPrev = 0xfefc,
+ XK_3270_Duplicate = 0xfd01,
+ XK_3270_FieldMark = 0xfd02,
+ XK_3270_Right2 = 0xfd03,
+ XK_3270_Left2 = 0xfd04,
+ XK_3270_BackTab = 0xfd05,
+ XK_3270_EraseEOF = 0xfd06,
+ XK_3270_EraseInput = 0xfd07,
+ XK_3270_Reset = 0xfd08,
+ XK_3270_Quit = 0xfd09,
+ XK_3270_PA1 = 0xfd0a,
+ XK_3270_PA2 = 0xfd0b,
+ XK_3270_PA3 = 0xfd0c,
+ XK_3270_Test = 0xfd0d,
+ XK_3270_Attn = 0xfd0e,
+ XK_3270_CursorBlink = 0xfd0f,
+ XK_3270_AltCursor = 0xfd10,
+ XK_3270_KeyClick = 0xfd11,
+ XK_3270_Jump = 0xfd12,
+ XK_3270_Ident = 0xfd13,
+ XK_3270_Rule = 0xfd14,
+ XK_3270_Copy = 0xfd15,
+ XK_3270_Play = 0xfd16,
+ XK_3270_Setup = 0xfd17,
+ XK_3270_Record = 0xfd18,
+ XK_3270_ChangeScreen = 0xfd19,
+ XK_3270_DeleteWord = 0xfd1a,
+ XK_3270_ExSelect = 0xfd1b,
+ XK_3270_CursorSelect = 0xfd1c,
+ XK_3270_PrintScreen = 0xfd1d,
+ XK_3270_Enter = 0xfd1e,
+ XK_space = 0x0020, /* U+0020 SPACE */
+ XK_exclam = 0x0021, /* U+0021 EXCLAMATION MARK */
+ XK_quotedbl = 0x0022, /* U+0022 QUOTATION MARK */
+ XK_numbersign = 0x0023, /* U+0023 NUMBER SIGN */
+ XK_dollar = 0x0024, /* U+0024 DOLLAR SIGN */
+ XK_percent = 0x0025, /* U+0025 PERCENT SIGN */
+ XK_ampersand = 0x0026, /* U+0026 AMPERSAND */
+ XK_apostrophe = 0x0027, /* U+0027 APOSTROPHE */
+ XK_quoteright = 0x0027, /* deprecated */
+ XK_parenleft = 0x0028, /* U+0028 LEFT PARENTHESIS */
+ XK_parenright = 0x0029, /* U+0029 RIGHT PARENTHESIS */
+ XK_asterisk = 0x002a, /* U+002A ASTERISK */
+ XK_plus = 0x002b, /* U+002B PLUS SIGN */
+ XK_comma = 0x002c, /* U+002C COMMA */
+ XK_minus = 0x002d, /* U+002D HYPHEN-MINUS */
+ XK_period = 0x002e, /* U+002E FULL STOP */
+ XK_slash = 0x002f, /* U+002F SOLIDUS */
+ XK_0 = 0x0030, /* U+0030 DIGIT ZERO */
+ XK_1 = 0x0031, /* U+0031 DIGIT ONE */
+ XK_2 = 0x0032, /* U+0032 DIGIT TWO */
+ XK_3 = 0x0033, /* U+0033 DIGIT THREE */
+ XK_4 = 0x0034, /* U+0034 DIGIT FOUR */
+ XK_5 = 0x0035, /* U+0035 DIGIT FIVE */
+ XK_6 = 0x0036, /* U+0036 DIGIT SIX */
+ XK_7 = 0x0037, /* U+0037 DIGIT SEVEN */
+ XK_8 = 0x0038, /* U+0038 DIGIT EIGHT */
+ XK_9 = 0x0039, /* U+0039 DIGIT NINE */
+ XK_colon = 0x003a, /* U+003A COLON */
+ XK_semicolon = 0x003b, /* U+003B SEMICOLON */
+ XK_less = 0x003c, /* U+003C LESS-THAN SIGN */
+ XK_equal = 0x003d, /* U+003D EQUALS SIGN */
+ XK_greater = 0x003e, /* U+003E GREATER-THAN SIGN */
+ XK_question = 0x003f, /* U+003F QUESTION MARK */
+ XK_at = 0x0040, /* U+0040 COMMERCIAL AT */
+ XK_A = 0x0041, /* U+0041 LATIN CAPITAL LETTER A */
+ XK_B = 0x0042, /* U+0042 LATIN CAPITAL LETTER B */
+ XK_C = 0x0043, /* U+0043 LATIN CAPITAL LETTER C */
+ XK_D = 0x0044, /* U+0044 LATIN CAPITAL LETTER D */
+ XK_E = 0x0045, /* U+0045 LATIN CAPITAL LETTER E */
+ XK_F = 0x0046, /* U+0046 LATIN CAPITAL LETTER F */
+ XK_G = 0x0047, /* U+0047 LATIN CAPITAL LETTER G */
+ XK_H = 0x0048, /* U+0048 LATIN CAPITAL LETTER H */
+ XK_I = 0x0049, /* U+0049 LATIN CAPITAL LETTER I */
+ XK_J = 0x004a, /* U+004A LATIN CAPITAL LETTER J */
+ XK_K = 0x004b, /* U+004B LATIN CAPITAL LETTER K */
+ XK_L = 0x004c, /* U+004C LATIN CAPITAL LETTER L */
+ XK_M = 0x004d, /* U+004D LATIN CAPITAL LETTER M */
+ XK_N = 0x004e, /* U+004E LATIN CAPITAL LETTER N */
+ XK_O = 0x004f, /* U+004F LATIN CAPITAL LETTER O */
+ XK_P = 0x0050, /* U+0050 LATIN CAPITAL LETTER P */
+ XK_Q = 0x0051, /* U+0051 LATIN CAPITAL LETTER Q */
+ XK_R = 0x0052, /* U+0052 LATIN CAPITAL LETTER R */
+ XK_S = 0x0053, /* U+0053 LATIN CAPITAL LETTER S */
+ XK_T = 0x0054, /* U+0054 LATIN CAPITAL LETTER T */
+ XK_U = 0x0055, /* U+0055 LATIN CAPITAL LETTER U */
+ XK_V = 0x0056, /* U+0056 LATIN CAPITAL LETTER V */
+ XK_W = 0x0057, /* U+0057 LATIN CAPITAL LETTER W */
+ XK_X = 0x0058, /* U+0058 LATIN CAPITAL LETTER X */
+ XK_Y = 0x0059, /* U+0059 LATIN CAPITAL LETTER Y */
+ XK_Z = 0x005a, /* U+005A LATIN CAPITAL LETTER Z */
+ XK_bracketleft = 0x005b, /* U+005B LEFT SQUARE BRACKET */
+ XK_backslash = 0x005c, /* U+005C REVERSE SOLIDUS */
+ XK_bracketright = 0x005d, /* U+005D RIGHT SQUARE BRACKET */
+ XK_asciicircum = 0x005e, /* U+005E CIRCUMFLEX ACCENT */
+ XK_underscore = 0x005f, /* U+005F LOW LINE */
+ XK_grave = 0x0060, /* U+0060 GRAVE ACCENT */
+ XK_quoteleft = 0x0060, /* deprecated */
+ XK_a = 0x0061, /* U+0061 LATIN SMALL LETTER A */
+ XK_b = 0x0062, /* U+0062 LATIN SMALL LETTER B */
+ XK_c = 0x0063, /* U+0063 LATIN SMALL LETTER C */
+ XK_d = 0x0064, /* U+0064 LATIN SMALL LETTER D */
+ XK_e = 0x0065, /* U+0065 LATIN SMALL LETTER E */
+ XK_f = 0x0066, /* U+0066 LATIN SMALL LETTER F */
+ XK_g = 0x0067, /* U+0067 LATIN SMALL LETTER G */
+ XK_h = 0x0068, /* U+0068 LATIN SMALL LETTER H */
+ XK_i = 0x0069, /* U+0069 LATIN SMALL LETTER I */
+ XK_j = 0x006a, /* U+006A LATIN SMALL LETTER J */
+ XK_k = 0x006b, /* U+006B LATIN SMALL LETTER K */
+ XK_l = 0x006c, /* U+006C LATIN SMALL LETTER L */
+ XK_m = 0x006d, /* U+006D LATIN SMALL LETTER M */
+ XK_n = 0x006e, /* U+006E LATIN SMALL LETTER N */
+ XK_o = 0x006f, /* U+006F LATIN SMALL LETTER O */
+ XK_p = 0x0070, /* U+0070 LATIN SMALL LETTER P */
+ XK_q = 0x0071, /* U+0071 LATIN SMALL LETTER Q */
+ XK_r = 0x0072, /* U+0072 LATIN SMALL LETTER R */
+ XK_s = 0x0073, /* U+0073 LATIN SMALL LETTER S */
+ XK_t = 0x0074, /* U+0074 LATIN SMALL LETTER T */
+ XK_u = 0x0075, /* U+0075 LATIN SMALL LETTER U */
+ XK_v = 0x0076, /* U+0076 LATIN SMALL LETTER V */
+ XK_w = 0x0077, /* U+0077 LATIN SMALL LETTER W */
+ XK_x = 0x0078, /* U+0078 LATIN SMALL LETTER X */
+ XK_y = 0x0079, /* U+0079 LATIN SMALL LETTER Y */
+ XK_z = 0x007a, /* U+007A LATIN SMALL LETTER Z */
+ XK_braceleft = 0x007b, /* U+007B LEFT CURLY BRACKET */
+ XK_bar = 0x007c, /* U+007C VERTICAL LINE */
+ XK_braceright = 0x007d, /* U+007D RIGHT CURLY BRACKET */
+ XK_asciitilde = 0x007e, /* U+007E TILDE */
+ XK_nobreakspace = 0x00a0, /* U+00A0 NO-BREAK SPACE */
+ XK_exclamdown = 0x00a1, /* U+00A1 INVERTED EXCLAMATION MARK */
+ XK_cent = 0x00a2, /* U+00A2 CENT SIGN */
+ XK_sterling = 0x00a3, /* U+00A3 POUND SIGN */
+ XK_currency = 0x00a4, /* U+00A4 CURRENCY SIGN */
+ XK_yen = 0x00a5, /* U+00A5 YEN SIGN */
+ XK_brokenbar = 0x00a6, /* U+00A6 BROKEN BAR */
+ XK_section = 0x00a7, /* U+00A7 SECTION SIGN */
+ XK_diaeresis = 0x00a8, /* U+00A8 DIAERESIS */
+ XK_copyright = 0x00a9, /* U+00A9 COPYRIGHT SIGN */
+ XK_ordfeminine = 0x00aa, /* U+00AA FEMININE ORDINAL INDICATOR */
+ XK_guillemotleft = 0x00ab, /* U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
+ XK_notsign = 0x00ac, /* U+00AC NOT SIGN */
+ XK_hyphen = 0x00ad, /* U+00AD SOFT HYPHEN */
+ XK_registered = 0x00ae, /* U+00AE REGISTERED SIGN */
+ XK_macron = 0x00af, /* U+00AF MACRON */
+ XK_degree = 0x00b0, /* U+00B0 DEGREE SIGN */
+ XK_plusminus = 0x00b1, /* U+00B1 PLUS-MINUS SIGN */
+ XK_twosuperior = 0x00b2, /* U+00B2 SUPERSCRIPT TWO */
+ XK_threesuperior = 0x00b3, /* U+00B3 SUPERSCRIPT THREE */
+ XK_acute = 0x00b4, /* U+00B4 ACUTE ACCENT */
+ XK_mu = 0x00b5, /* U+00B5 MICRO SIGN */
+ XK_paragraph = 0x00b6, /* U+00B6 PILCROW SIGN */
+ XK_periodcentered = 0x00b7, /* U+00B7 MIDDLE DOT */
+ XK_cedilla = 0x00b8, /* U+00B8 CEDILLA */
+ XK_onesuperior = 0x00b9, /* U+00B9 SUPERSCRIPT ONE */
+ XK_masculine = 0x00ba, /* U+00BA MASCULINE ORDINAL INDICATOR */
+ XK_guillemotright = 0x00bb, /* U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
+ XK_onequarter = 0x00bc, /* U+00BC VULGAR FRACTION ONE QUARTER */
+ XK_onehalf = 0x00bd, /* U+00BD VULGAR FRACTION ONE HALF */
+ XK_threequarters = 0x00be, /* U+00BE VULGAR FRACTION THREE QUARTERS */
+ XK_questiondown = 0x00bf, /* U+00BF INVERTED QUESTION MARK */
+ XK_Agrave = 0x00c0, /* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE */
+ XK_Aacute = 0x00c1, /* U+00C1 LATIN CAPITAL LETTER A WITH ACUTE */
+ XK_Acircumflex = 0x00c2, /* U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
+ XK_Atilde = 0x00c3, /* U+00C3 LATIN CAPITAL LETTER A WITH TILDE */
+ XK_Adiaeresis = 0x00c4, /* U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS */
+ XK_Aring = 0x00c5, /* U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE */
+ XK_AE = 0x00c6, /* U+00C6 LATIN CAPITAL LETTER AE */
+ XK_Ccedilla = 0x00c7, /* U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA */
+ XK_Egrave = 0x00c8, /* U+00C8 LATIN CAPITAL LETTER E WITH GRAVE */
+ XK_Eacute = 0x00c9, /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */
+ XK_Ecircumflex = 0x00ca, /* U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
+ XK_Ediaeresis = 0x00cb, /* U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS */
+ XK_Igrave = 0x00cc, /* U+00CC LATIN CAPITAL LETTER I WITH GRAVE */
+ XK_Iacute = 0x00cd, /* U+00CD LATIN CAPITAL LETTER I WITH ACUTE */
+ XK_Icircumflex = 0x00ce, /* U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
+ XK_Idiaeresis = 0x00cf, /* U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS */
+ XK_ETH = 0x00d0, /* U+00D0 LATIN CAPITAL LETTER ETH */
+ XK_Eth = 0x00d0, /* deprecated */
+ XK_Ntilde = 0x00d1, /* U+00D1 LATIN CAPITAL LETTER N WITH TILDE */
+ XK_Ograve = 0x00d2, /* U+00D2 LATIN CAPITAL LETTER O WITH GRAVE */
+ XK_Oacute = 0x00d3, /* U+00D3 LATIN CAPITAL LETTER O WITH ACUTE */
+ XK_Ocircumflex = 0x00d4, /* U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
+ XK_Otilde = 0x00d5, /* U+00D5 LATIN CAPITAL LETTER O WITH TILDE */
+ XK_Odiaeresis = 0x00d6, /* U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS */
+ XK_multiply = 0x00d7, /* U+00D7 MULTIPLICATION SIGN */
+ XK_Oslash = 0x00d8, /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */
+ XK_Ooblique = 0x00d8, /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */
+ XK_Ugrave = 0x00d9, /* U+00D9 LATIN CAPITAL LETTER U WITH GRAVE */
+ XK_Uacute = 0x00da, /* U+00DA LATIN CAPITAL LETTER U WITH ACUTE */
+ XK_Ucircumflex = 0x00db, /* U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
+ XK_Udiaeresis = 0x00dc, /* U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS */
+ XK_Yacute = 0x00dd, /* U+00DD LATIN CAPITAL LETTER Y WITH ACUTE */
+ XK_THORN = 0x00de, /* U+00DE LATIN CAPITAL LETTER THORN */
+ XK_Thorn = 0x00de, /* deprecated */
+ XK_ssharp = 0x00df, /* U+00DF LATIN SMALL LETTER SHARP S */
+ XK_agrave = 0x00e0, /* U+00E0 LATIN SMALL LETTER A WITH GRAVE */
+ XK_aacute = 0x00e1, /* U+00E1 LATIN SMALL LETTER A WITH ACUTE */
+ XK_acircumflex = 0x00e2, /* U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX */
+ XK_atilde = 0x00e3, /* U+00E3 LATIN SMALL LETTER A WITH TILDE */
+ XK_adiaeresis = 0x00e4, /* U+00E4 LATIN SMALL LETTER A WITH DIAERESIS */
+ XK_aring = 0x00e5, /* U+00E5 LATIN SMALL LETTER A WITH RING ABOVE */
+ XK_ae = 0x00e6, /* U+00E6 LATIN SMALL LETTER AE */
+ XK_ccedilla = 0x00e7, /* U+00E7 LATIN SMALL LETTER C WITH CEDILLA */
+ XK_egrave = 0x00e8, /* U+00E8 LATIN SMALL LETTER E WITH GRAVE */
+ XK_eacute = 0x00e9, /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */
+ XK_ecircumflex = 0x00ea, /* U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX */
+ XK_ediaeresis = 0x00eb, /* U+00EB LATIN SMALL LETTER E WITH DIAERESIS */
+ XK_igrave = 0x00ec, /* U+00EC LATIN SMALL LETTER I WITH GRAVE */
+ XK_iacute = 0x00ed, /* U+00ED LATIN SMALL LETTER I WITH ACUTE */
+ XK_icircumflex = 0x00ee, /* U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX */
+ XK_idiaeresis = 0x00ef, /* U+00EF LATIN SMALL LETTER I WITH DIAERESIS */
+ XK_eth = 0x00f0, /* U+00F0 LATIN SMALL LETTER ETH */
+ XK_ntilde = 0x00f1, /* U+00F1 LATIN SMALL LETTER N WITH TILDE */
+ XK_ograve = 0x00f2, /* U+00F2 LATIN SMALL LETTER O WITH GRAVE */
+ XK_oacute = 0x00f3, /* U+00F3 LATIN SMALL LETTER O WITH ACUTE */
+ XK_ocircumflex = 0x00f4, /* U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX */
+ XK_otilde = 0x00f5, /* U+00F5 LATIN SMALL LETTER O WITH TILDE */
+ XK_odiaeresis = 0x00f6, /* U+00F6 LATIN SMALL LETTER O WITH DIAERESIS */
+ XK_division = 0x00f7, /* U+00F7 DIVISION SIGN */
+ XK_oslash = 0x00f8, /* U+00F8 LATIN SMALL LETTER O WITH STROKE */
+ XK_ooblique = 0x00f8, /* U+00F8 LATIN SMALL LETTER O WITH STROKE */
+ XK_ugrave = 0x00f9, /* U+00F9 LATIN SMALL LETTER U WITH GRAVE */
+ XK_uacute = 0x00fa, /* U+00FA LATIN SMALL LETTER U WITH ACUTE */
+ XK_ucircumflex = 0x00fb, /* U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX */
+ XK_udiaeresis = 0x00fc, /* U+00FC LATIN SMALL LETTER U WITH DIAERESIS */
+ XK_yacute = 0x00fd, /* U+00FD LATIN SMALL LETTER Y WITH ACUTE */
+ XK_thorn = 0x00fe, /* U+00FE LATIN SMALL LETTER THORN */
+ XK_ydiaeresis = 0x00ff, /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */
+ XK_Aogonek = 0x01a1, /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */
+ XK_breve = 0x01a2, /* U+02D8 BREVE */
+ XK_Lstroke = 0x01a3, /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */
+ XK_Lcaron = 0x01a5, /* U+013D LATIN CAPITAL LETTER L WITH CARON */
+ XK_Sacute = 0x01a6, /* U+015A LATIN CAPITAL LETTER S WITH ACUTE */
+ XK_Scaron = 0x01a9, /* U+0160 LATIN CAPITAL LETTER S WITH CARON */
+ XK_Scedilla = 0x01aa, /* U+015E LATIN CAPITAL LETTER S WITH CEDILLA */
+ XK_Tcaron = 0x01ab, /* U+0164 LATIN CAPITAL LETTER T WITH CARON */
+ XK_Zacute = 0x01ac, /* U+0179 LATIN CAPITAL LETTER Z WITH ACUTE */
+ XK_Zcaron = 0x01ae, /* U+017D LATIN CAPITAL LETTER Z WITH CARON */
+ XK_Zabovedot = 0x01af, /* U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE */
+ XK_aogonek = 0x01b1, /* U+0105 LATIN SMALL LETTER A WITH OGONEK */
+ XK_ogonek = 0x01b2, /* U+02DB OGONEK */
+ XK_lstroke = 0x01b3, /* U+0142 LATIN SMALL LETTER L WITH STROKE */
+ XK_lcaron = 0x01b5, /* U+013E LATIN SMALL LETTER L WITH CARON */
+ XK_sacute = 0x01b6, /* U+015B LATIN SMALL LETTER S WITH ACUTE */
+ XK_caron = 0x01b7, /* U+02C7 CARON */
+ XK_scaron = 0x01b9, /* U+0161 LATIN SMALL LETTER S WITH CARON */
+ XK_scedilla = 0x01ba, /* U+015F LATIN SMALL LETTER S WITH CEDILLA */
+ XK_tcaron = 0x01bb, /* U+0165 LATIN SMALL LETTER T WITH CARON */
+ XK_zacute = 0x01bc, /* U+017A LATIN SMALL LETTER Z WITH ACUTE */
+ XK_doubleacute = 0x01bd, /* U+02DD DOUBLE ACUTE ACCENT */
+ XK_zcaron = 0x01be, /* U+017E LATIN SMALL LETTER Z WITH CARON */
+ XK_zabovedot = 0x01bf, /* U+017C LATIN SMALL LETTER Z WITH DOT ABOVE */
+ XK_Racute = 0x01c0, /* U+0154 LATIN CAPITAL LETTER R WITH ACUTE */
+ XK_Abreve = 0x01c3, /* U+0102 LATIN CAPITAL LETTER A WITH BREVE */
+ XK_Lacute = 0x01c5, /* U+0139 LATIN CAPITAL LETTER L WITH ACUTE */
+ XK_Cacute = 0x01c6, /* U+0106 LATIN CAPITAL LETTER C WITH ACUTE */
+ XK_Ccaron = 0x01c8, /* U+010C LATIN CAPITAL LETTER C WITH CARON */
+ XK_Eogonek = 0x01ca, /* U+0118 LATIN CAPITAL LETTER E WITH OGONEK */
+ XK_Ecaron = 0x01cc, /* U+011A LATIN CAPITAL LETTER E WITH CARON */
+ XK_Dcaron = 0x01cf, /* U+010E LATIN CAPITAL LETTER D WITH CARON */
+ XK_Dstroke = 0x01d0, /* U+0110 LATIN CAPITAL LETTER D WITH STROKE */
+ XK_Nacute = 0x01d1, /* U+0143 LATIN CAPITAL LETTER N WITH ACUTE */
+ XK_Ncaron = 0x01d2, /* U+0147 LATIN CAPITAL LETTER N WITH CARON */
+ XK_Odoubleacute = 0x01d5, /* U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
+ XK_Rcaron = 0x01d8, /* U+0158 LATIN CAPITAL LETTER R WITH CARON */
+ XK_Uring = 0x01d9, /* U+016E LATIN CAPITAL LETTER U WITH RING ABOVE */
+ XK_Udoubleacute = 0x01db, /* U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
+ XK_Tcedilla = 0x01de, /* U+0162 LATIN CAPITAL LETTER T WITH CEDILLA */
+ XK_racute = 0x01e0, /* U+0155 LATIN SMALL LETTER R WITH ACUTE */
+ XK_abreve = 0x01e3, /* U+0103 LATIN SMALL LETTER A WITH BREVE */
+ XK_lacute = 0x01e5, /* U+013A LATIN SMALL LETTER L WITH ACUTE */
+ XK_cacute = 0x01e6, /* U+0107 LATIN SMALL LETTER C WITH ACUTE */
+ XK_ccaron = 0x01e8, /* U+010D LATIN SMALL LETTER C WITH CARON */
+ XK_eogonek = 0x01ea, /* U+0119 LATIN SMALL LETTER E WITH OGONEK */
+ XK_ecaron = 0x01ec, /* U+011B LATIN SMALL LETTER E WITH CARON */
+ XK_dcaron = 0x01ef, /* U+010F LATIN SMALL LETTER D WITH CARON */
+ XK_dstroke = 0x01f0, /* U+0111 LATIN SMALL LETTER D WITH STROKE */
+ XK_nacute = 0x01f1, /* U+0144 LATIN SMALL LETTER N WITH ACUTE */
+ XK_ncaron = 0x01f2, /* U+0148 LATIN SMALL LETTER N WITH CARON */
+ XK_odoubleacute = 0x01f5, /* U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE */
+ XK_udoubleacute = 0x01fb, /* U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE */
+ XK_rcaron = 0x01f8, /* U+0159 LATIN SMALL LETTER R WITH CARON */
+ XK_uring = 0x01f9, /* U+016F LATIN SMALL LETTER U WITH RING ABOVE */
+ XK_tcedilla = 0x01fe, /* U+0163 LATIN SMALL LETTER T WITH CEDILLA */
+ XK_abovedot = 0x01ff, /* U+02D9 DOT ABOVE */
+ XK_Hstroke = 0x02a1, /* U+0126 LATIN CAPITAL LETTER H WITH STROKE */
+ XK_Hcircumflex = 0x02a6, /* U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
+ XK_Iabovedot = 0x02a9, /* U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE */
+ XK_Gbreve = 0x02ab, /* U+011E LATIN CAPITAL LETTER G WITH BREVE */
+ XK_Jcircumflex = 0x02ac, /* U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
+ XK_hstroke = 0x02b1, /* U+0127 LATIN SMALL LETTER H WITH STROKE */
+ XK_hcircumflex = 0x02b6, /* U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX */
+ XK_idotless = 0x02b9, /* U+0131 LATIN SMALL LETTER DOTLESS I */
+ XK_gbreve = 0x02bb, /* U+011F LATIN SMALL LETTER G WITH BREVE */
+ XK_jcircumflex = 0x02bc, /* U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX */
+ XK_Cabovedot = 0x02c5, /* U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE */
+ XK_Ccircumflex = 0x02c6, /* U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
+ XK_Gabovedot = 0x02d5, /* U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE */
+ XK_Gcircumflex = 0x02d8, /* U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
+ XK_Ubreve = 0x02dd, /* U+016C LATIN CAPITAL LETTER U WITH BREVE */
+ XK_Scircumflex = 0x02de, /* U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
+ XK_cabovedot = 0x02e5, /* U+010B LATIN SMALL LETTER C WITH DOT ABOVE */
+ XK_ccircumflex = 0x02e6, /* U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX */
+ XK_gabovedot = 0x02f5, /* U+0121 LATIN SMALL LETTER G WITH DOT ABOVE */
+ XK_gcircumflex = 0x02f8, /* U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX */
+ XK_ubreve = 0x02fd, /* U+016D LATIN SMALL LETTER U WITH BREVE */
+ XK_scircumflex = 0x02fe, /* U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX */
+ XK_kra = 0x03a2, /* U+0138 LATIN SMALL LETTER KRA */
+ XK_kappa = 0x03a2, /* deprecated */
+ XK_Rcedilla = 0x03a3, /* U+0156 LATIN CAPITAL LETTER R WITH CEDILLA */
+ XK_Itilde = 0x03a5, /* U+0128 LATIN CAPITAL LETTER I WITH TILDE */
+ XK_Lcedilla = 0x03a6, /* U+013B LATIN CAPITAL LETTER L WITH CEDILLA */
+ XK_Emacron = 0x03aa, /* U+0112 LATIN CAPITAL LETTER E WITH MACRON */
+ XK_Gcedilla = 0x03ab, /* U+0122 LATIN CAPITAL LETTER G WITH CEDILLA */
+ XK_Tslash = 0x03ac, /* U+0166 LATIN CAPITAL LETTER T WITH STROKE */
+ XK_rcedilla = 0x03b3, /* U+0157 LATIN SMALL LETTER R WITH CEDILLA */
+ XK_itilde = 0x03b5, /* U+0129 LATIN SMALL LETTER I WITH TILDE */
+ XK_lcedilla = 0x03b6, /* U+013C LATIN SMALL LETTER L WITH CEDILLA */
+ XK_emacron = 0x03ba, /* U+0113 LATIN SMALL LETTER E WITH MACRON */
+ XK_gcedilla = 0x03bb, /* U+0123 LATIN SMALL LETTER G WITH CEDILLA */
+ XK_tslash = 0x03bc, /* U+0167 LATIN SMALL LETTER T WITH STROKE */
+ XK_ENG = 0x03bd, /* U+014A LATIN CAPITAL LETTER ENG */
+ XK_eng = 0x03bf, /* U+014B LATIN SMALL LETTER ENG */
+ XK_Amacron = 0x03c0, /* U+0100 LATIN CAPITAL LETTER A WITH MACRON */
+ XK_Iogonek = 0x03c7, /* U+012E LATIN CAPITAL LETTER I WITH OGONEK */
+ XK_Eabovedot = 0x03cc, /* U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE */
+ XK_Imacron = 0x03cf, /* U+012A LATIN CAPITAL LETTER I WITH MACRON */
+ XK_Ncedilla = 0x03d1, /* U+0145 LATIN CAPITAL LETTER N WITH CEDILLA */
+ XK_Omacron = 0x03d2, /* U+014C LATIN CAPITAL LETTER O WITH MACRON */
+ XK_Kcedilla = 0x03d3, /* U+0136 LATIN CAPITAL LETTER K WITH CEDILLA */
+ XK_Uogonek = 0x03d9, /* U+0172 LATIN CAPITAL LETTER U WITH OGONEK */
+ XK_Utilde = 0x03dd, /* U+0168 LATIN CAPITAL LETTER U WITH TILDE */
+ XK_Umacron = 0x03de, /* U+016A LATIN CAPITAL LETTER U WITH MACRON */
+ XK_amacron = 0x03e0, /* U+0101 LATIN SMALL LETTER A WITH MACRON */
+ XK_iogonek = 0x03e7, /* U+012F LATIN SMALL LETTER I WITH OGONEK */
+ XK_eabovedot = 0x03ec, /* U+0117 LATIN SMALL LETTER E WITH DOT ABOVE */
+ XK_imacron = 0x03ef, /* U+012B LATIN SMALL LETTER I WITH MACRON */
+ XK_ncedilla = 0x03f1, /* U+0146 LATIN SMALL LETTER N WITH CEDILLA */
+ XK_omacron = 0x03f2, /* U+014D LATIN SMALL LETTER O WITH MACRON */
+ XK_kcedilla = 0x03f3, /* U+0137 LATIN SMALL LETTER K WITH CEDILLA */
+ XK_uogonek = 0x03f9, /* U+0173 LATIN SMALL LETTER U WITH OGONEK */
+ XK_utilde = 0x03fd, /* U+0169 LATIN SMALL LETTER U WITH TILDE */
+ XK_umacron = 0x03fe, /* U+016B LATIN SMALL LETTER U WITH MACRON */
+ XK_Babovedot = 0x1001e02, /* U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE */
+ XK_babovedot = 0x1001e03, /* U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE */
+ XK_Dabovedot = 0x1001e0a, /* U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE */
+ XK_Wgrave = 0x1001e80, /* U+1E80 LATIN CAPITAL LETTER W WITH GRAVE */
+ XK_Wacute = 0x1001e82, /* U+1E82 LATIN CAPITAL LETTER W WITH ACUTE */
+ XK_dabovedot = 0x1001e0b, /* U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE */
+ XK_Ygrave = 0x1001ef2, /* U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE */
+ XK_Fabovedot = 0x1001e1e, /* U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE */
+ XK_fabovedot = 0x1001e1f, /* U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE */
+ XK_Mabovedot = 0x1001e40, /* U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE */
+ XK_mabovedot = 0x1001e41, /* U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE */
+ XK_Pabovedot = 0x1001e56, /* U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE */
+ XK_wgrave = 0x1001e81, /* U+1E81 LATIN SMALL LETTER W WITH GRAVE */
+ XK_pabovedot = 0x1001e57, /* U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE */
+ XK_wacute = 0x1001e83, /* U+1E83 LATIN SMALL LETTER W WITH ACUTE */
+ XK_Sabovedot = 0x1001e60, /* U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE */
+ XK_ygrave = 0x1001ef3, /* U+1EF3 LATIN SMALL LETTER Y WITH GRAVE */
+ XK_Wdiaeresis = 0x1001e84, /* U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS */
+ XK_wdiaeresis = 0x1001e85, /* U+1E85 LATIN SMALL LETTER W WITH DIAERESIS */
+ XK_sabovedot = 0x1001e61, /* U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE */
+ XK_Wcircumflex = 0x1000174, /* U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
+ XK_Tabovedot = 0x1001e6a, /* U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE */
+ XK_Ycircumflex = 0x1000176, /* U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
+ XK_wcircumflex = 0x1000175, /* U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX */
+ XK_tabovedot = 0x1001e6b, /* U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE */
+ XK_ycircumflex = 0x1000177, /* U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX */
+ XK_OE = 0x13bc, /* U+0152 LATIN CAPITAL LIGATURE OE */
+ XK_oe = 0x13bd, /* U+0153 LATIN SMALL LIGATURE OE */
+ XK_Ydiaeresis = 0x13be, /* U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS */
+ XK_overline = 0x047e, /* U+203E OVERLINE */
+ XK_kana_fullstop = 0x04a1, /* U+3002 IDEOGRAPHIC FULL STOP */
+ XK_kana_openingbracket = 0x04a2, /* U+300C LEFT CORNER BRACKET */
+ XK_kana_closingbracket = 0x04a3, /* U+300D RIGHT CORNER BRACKET */
+ XK_kana_comma = 0x04a4, /* U+3001 IDEOGRAPHIC COMMA */
+ XK_kana_conjunctive = 0x04a5, /* U+30FB KATAKANA MIDDLE DOT */
+ XK_kana_middledot = 0x04a5, /* deprecated */
+ XK_kana_WO = 0x04a6, /* U+30F2 KATAKANA LETTER WO */
+ XK_kana_a = 0x04a7, /* U+30A1 KATAKANA LETTER SMALL A */
+ XK_kana_i = 0x04a8, /* U+30A3 KATAKANA LETTER SMALL I */
+ XK_kana_u = 0x04a9, /* U+30A5 KATAKANA LETTER SMALL U */
+ XK_kana_e = 0x04aa, /* U+30A7 KATAKANA LETTER SMALL E */
+ XK_kana_o = 0x04ab, /* U+30A9 KATAKANA LETTER SMALL O */
+ XK_kana_ya = 0x04ac, /* U+30E3 KATAKANA LETTER SMALL YA */
+ XK_kana_yu = 0x04ad, /* U+30E5 KATAKANA LETTER SMALL YU */
+ XK_kana_yo = 0x04ae, /* U+30E7 KATAKANA LETTER SMALL YO */
+ XK_kana_tsu = 0x04af, /* U+30C3 KATAKANA LETTER SMALL TU */
+ XK_kana_tu = 0x04af, /* deprecated */
+ XK_prolongedsound = 0x04b0, /* U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK */
+ XK_kana_A = 0x04b1, /* U+30A2 KATAKANA LETTER A */
+ XK_kana_I = 0x04b2, /* U+30A4 KATAKANA LETTER I */
+ XK_kana_U = 0x04b3, /* U+30A6 KATAKANA LETTER U */
+ XK_kana_E = 0x04b4, /* U+30A8 KATAKANA LETTER E */
+ XK_kana_O = 0x04b5, /* U+30AA KATAKANA LETTER O */
+ XK_kana_KA = 0x04b6, /* U+30AB KATAKANA LETTER KA */
+ XK_kana_KI = 0x04b7, /* U+30AD KATAKANA LETTER KI */
+ XK_kana_KU = 0x04b8, /* U+30AF KATAKANA LETTER KU */
+ XK_kana_KE = 0x04b9, /* U+30B1 KATAKANA LETTER KE */
+ XK_kana_KO = 0x04ba, /* U+30B3 KATAKANA LETTER KO */
+ XK_kana_SA = 0x04bb, /* U+30B5 KATAKANA LETTER SA */
+ XK_kana_SHI = 0x04bc, /* U+30B7 KATAKANA LETTER SI */
+ XK_kana_SU = 0x04bd, /* U+30B9 KATAKANA LETTER SU */
+ XK_kana_SE = 0x04be, /* U+30BB KATAKANA LETTER SE */
+ XK_kana_SO = 0x04bf, /* U+30BD KATAKANA LETTER SO */
+ XK_kana_TA = 0x04c0, /* U+30BF KATAKANA LETTER TA */
+ XK_kana_CHI = 0x04c1, /* U+30C1 KATAKANA LETTER TI */
+ XK_kana_TI = 0x04c1, /* deprecated */
+ XK_kana_TSU = 0x04c2, /* U+30C4 KATAKANA LETTER TU */
+ XK_kana_TU = 0x04c2, /* deprecated */
+ XK_kana_TE = 0x04c3, /* U+30C6 KATAKANA LETTER TE */
+ XK_kana_TO = 0x04c4, /* U+30C8 KATAKANA LETTER TO */
+ XK_kana_NA = 0x04c5, /* U+30CA KATAKANA LETTER NA */
+ XK_kana_NI = 0x04c6, /* U+30CB KATAKANA LETTER NI */
+ XK_kana_NU = 0x04c7, /* U+30CC KATAKANA LETTER NU */
+ XK_kana_NE = 0x04c8, /* U+30CD KATAKANA LETTER NE */
+ XK_kana_NO = 0x04c9, /* U+30CE KATAKANA LETTER NO */
+ XK_kana_HA = 0x04ca, /* U+30CF KATAKANA LETTER HA */
+ XK_kana_HI = 0x04cb, /* U+30D2 KATAKANA LETTER HI */
+ XK_kana_FU = 0x04cc, /* U+30D5 KATAKANA LETTER HU */
+ XK_kana_HU = 0x04cc, /* deprecated */
+ XK_kana_HE = 0x04cd, /* U+30D8 KATAKANA LETTER HE */
+ XK_kana_HO = 0x04ce, /* U+30DB KATAKANA LETTER HO */
+ XK_kana_MA = 0x04cf, /* U+30DE KATAKANA LETTER MA */
+ XK_kana_MI = 0x04d0, /* U+30DF KATAKANA LETTER MI */
+ XK_kana_MU = 0x04d1, /* U+30E0 KATAKANA LETTER MU */
+ XK_kana_ME = 0x04d2, /* U+30E1 KATAKANA LETTER ME */
+ XK_kana_MO = 0x04d3, /* U+30E2 KATAKANA LETTER MO */
+ XK_kana_YA = 0x04d4, /* U+30E4 KATAKANA LETTER YA */
+ XK_kana_YU = 0x04d5, /* U+30E6 KATAKANA LETTER YU */
+ XK_kana_YO = 0x04d6, /* U+30E8 KATAKANA LETTER YO */
+ XK_kana_RA = 0x04d7, /* U+30E9 KATAKANA LETTER RA */
+ XK_kana_RI = 0x04d8, /* U+30EA KATAKANA LETTER RI */
+ XK_kana_RU = 0x04d9, /* U+30EB KATAKANA LETTER RU */
+ XK_kana_RE = 0x04da, /* U+30EC KATAKANA LETTER RE */
+ XK_kana_RO = 0x04db, /* U+30ED KATAKANA LETTER RO */
+ XK_kana_WA = 0x04dc, /* U+30EF KATAKANA LETTER WA */
+ XK_kana_N = 0x04dd, /* U+30F3 KATAKANA LETTER N */
+ XK_voicedsound = 0x04de, /* U+309B KATAKANA-HIRAGANA VOICED SOUND MARK */
+ XK_semivoicedsound = 0x04df, /* U+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
+ XK_kana_switch = 0xff7e, /* Alias for mode_switch */
+ XK_Farsi_0 = 0x10006f0, /* U+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO */
+ XK_Farsi_1 = 0x10006f1, /* U+06F1 EXTENDED ARABIC-INDIC DIGIT ONE */
+ XK_Farsi_2 = 0x10006f2, /* U+06F2 EXTENDED ARABIC-INDIC DIGIT TWO */
+ XK_Farsi_3 = 0x10006f3, /* U+06F3 EXTENDED ARABIC-INDIC DIGIT THREE */
+ XK_Farsi_4 = 0x10006f4, /* U+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR */
+ XK_Farsi_5 = 0x10006f5, /* U+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE */
+ XK_Farsi_6 = 0x10006f6, /* U+06F6 EXTENDED ARABIC-INDIC DIGIT SIX */
+ XK_Farsi_7 = 0x10006f7, /* U+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN */
+ XK_Farsi_8 = 0x10006f8, /* U+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT */
+ XK_Farsi_9 = 0x10006f9, /* U+06F9 EXTENDED ARABIC-INDIC DIGIT NINE */
+ XK_Arabic_percent = 0x100066a, /* U+066A ARABIC PERCENT SIGN */
+ XK_Arabic_superscript_alef = 0x1000670, /* U+0670 ARABIC LETTER SUPERSCRIPT ALEF */
+ XK_Arabic_tteh = 0x1000679, /* U+0679 ARABIC LETTER TTEH */
+ XK_Arabic_peh = 0x100067e, /* U+067E ARABIC LETTER PEH */
+ XK_Arabic_tcheh = 0x1000686, /* U+0686 ARABIC LETTER TCHEH */
+ XK_Arabic_ddal = 0x1000688, /* U+0688 ARABIC LETTER DDAL */
+ XK_Arabic_rreh = 0x1000691, /* U+0691 ARABIC LETTER RREH */
+ XK_Arabic_comma = 0x05ac, /* U+060C ARABIC COMMA */
+ XK_Arabic_fullstop = 0x10006d4, /* U+06D4 ARABIC FULL STOP */
+ XK_Arabic_0 = 0x1000660, /* U+0660 ARABIC-INDIC DIGIT ZERO */
+ XK_Arabic_1 = 0x1000661, /* U+0661 ARABIC-INDIC DIGIT ONE */
+ XK_Arabic_2 = 0x1000662, /* U+0662 ARABIC-INDIC DIGIT TWO */
+ XK_Arabic_3 = 0x1000663, /* U+0663 ARABIC-INDIC DIGIT THREE */
+ XK_Arabic_4 = 0x1000664, /* U+0664 ARABIC-INDIC DIGIT FOUR */
+ XK_Arabic_5 = 0x1000665, /* U+0665 ARABIC-INDIC DIGIT FIVE */
+ XK_Arabic_6 = 0x1000666, /* U+0666 ARABIC-INDIC DIGIT SIX */
+ XK_Arabic_7 = 0x1000667, /* U+0667 ARABIC-INDIC DIGIT SEVEN */
+ XK_Arabic_8 = 0x1000668, /* U+0668 ARABIC-INDIC DIGIT EIGHT */
+ XK_Arabic_9 = 0x1000669, /* U+0669 ARABIC-INDIC DIGIT NINE */
+ XK_Arabic_semicolon = 0x05bb, /* U+061B ARABIC SEMICOLON */
+ XK_Arabic_question_mark = 0x05bf, /* U+061F ARABIC QUESTION MARK */
+ XK_Arabic_hamza = 0x05c1, /* U+0621 ARABIC LETTER HAMZA */
+ XK_Arabic_maddaonalef = 0x05c2, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
+ XK_Arabic_hamzaonalef = 0x05c3, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
+ XK_Arabic_hamzaonwaw = 0x05c4, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
+ XK_Arabic_hamzaunderalef = 0x05c5, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
+ XK_Arabic_hamzaonyeh = 0x05c6, /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */
+ XK_Arabic_alef = 0x05c7, /* U+0627 ARABIC LETTER ALEF */
+ XK_Arabic_beh = 0x05c8, /* U+0628 ARABIC LETTER BEH */
+ XK_Arabic_tehmarbuta = 0x05c9, /* U+0629 ARABIC LETTER TEH MARBUTA */
+ XK_Arabic_teh = 0x05ca, /* U+062A ARABIC LETTER TEH */
+ XK_Arabic_theh = 0x05cb, /* U+062B ARABIC LETTER THEH */
+ XK_Arabic_jeem = 0x05cc, /* U+062C ARABIC LETTER JEEM */
+ XK_Arabic_hah = 0x05cd, /* U+062D ARABIC LETTER HAH */
+ XK_Arabic_khah = 0x05ce, /* U+062E ARABIC LETTER KHAH */
+ XK_Arabic_dal = 0x05cf, /* U+062F ARABIC LETTER DAL */
+ XK_Arabic_thal = 0x05d0, /* U+0630 ARABIC LETTER THAL */
+ XK_Arabic_ra = 0x05d1, /* U+0631 ARABIC LETTER REH */
+ XK_Arabic_zain = 0x05d2, /* U+0632 ARABIC LETTER ZAIN */
+ XK_Arabic_seen = 0x05d3, /* U+0633 ARABIC LETTER SEEN */
+ XK_Arabic_sheen = 0x05d4, /* U+0634 ARABIC LETTER SHEEN */
+ XK_Arabic_sad = 0x05d5, /* U+0635 ARABIC LETTER SAD */
+ XK_Arabic_dad = 0x05d6, /* U+0636 ARABIC LETTER DAD */
+ XK_Arabic_tah = 0x05d7, /* U+0637 ARABIC LETTER TAH */
+ XK_Arabic_zah = 0x05d8, /* U+0638 ARABIC LETTER ZAH */
+ XK_Arabic_ain = 0x05d9, /* U+0639 ARABIC LETTER AIN */
+ XK_Arabic_ghain = 0x05da, /* U+063A ARABIC LETTER GHAIN */
+ XK_Arabic_tatweel = 0x05e0, /* U+0640 ARABIC TATWEEL */
+ XK_Arabic_feh = 0x05e1, /* U+0641 ARABIC LETTER FEH */
+ XK_Arabic_qaf = 0x05e2, /* U+0642 ARABIC LETTER QAF */
+ XK_Arabic_kaf = 0x05e3, /* U+0643 ARABIC LETTER KAF */
+ XK_Arabic_lam = 0x05e4, /* U+0644 ARABIC LETTER LAM */
+ XK_Arabic_meem = 0x05e5, /* U+0645 ARABIC LETTER MEEM */
+ XK_Arabic_noon = 0x05e6, /* U+0646 ARABIC LETTER NOON */
+ XK_Arabic_ha = 0x05e7, /* U+0647 ARABIC LETTER HEH */
+ XK_Arabic_heh = 0x05e7, /* deprecated */
+ XK_Arabic_waw = 0x05e8, /* U+0648 ARABIC LETTER WAW */
+ XK_Arabic_alefmaksura = 0x05e9, /* U+0649 ARABIC LETTER ALEF MAKSURA */
+ XK_Arabic_yeh = 0x05ea, /* U+064A ARABIC LETTER YEH */
+ XK_Arabic_fathatan = 0x05eb, /* U+064B ARABIC FATHATAN */
+ XK_Arabic_dammatan = 0x05ec, /* U+064C ARABIC DAMMATAN */
+ XK_Arabic_kasratan = 0x05ed, /* U+064D ARABIC KASRATAN */
+ XK_Arabic_fatha = 0x05ee, /* U+064E ARABIC FATHA */
+ XK_Arabic_damma = 0x05ef, /* U+064F ARABIC DAMMA */
+ XK_Arabic_kasra = 0x05f0, /* U+0650 ARABIC KASRA */
+ XK_Arabic_shadda = 0x05f1, /* U+0651 ARABIC SHADDA */
+ XK_Arabic_sukun = 0x05f2, /* U+0652 ARABIC SUKUN */
+ XK_Arabic_madda_above = 0x1000653, /* U+0653 ARABIC MADDAH ABOVE */
+ XK_Arabic_hamza_above = 0x1000654, /* U+0654 ARABIC HAMZA ABOVE */
+ XK_Arabic_hamza_below = 0x1000655, /* U+0655 ARABIC HAMZA BELOW */
+ XK_Arabic_jeh = 0x1000698, /* U+0698 ARABIC LETTER JEH */
+ XK_Arabic_veh = 0x10006a4, /* U+06A4 ARABIC LETTER VEH */
+ XK_Arabic_keheh = 0x10006a9, /* U+06A9 ARABIC LETTER KEHEH */
+ XK_Arabic_gaf = 0x10006af, /* U+06AF ARABIC LETTER GAF */
+ XK_Arabic_noon_ghunna = 0x10006ba, /* U+06BA ARABIC LETTER NOON GHUNNA */
+ XK_Arabic_heh_doachashmee = 0x10006be, /* U+06BE ARABIC LETTER HEH DOACHASHMEE */
+ XK_Farsi_yeh = 0x10006cc, /* U+06CC ARABIC LETTER FARSI YEH */
+ XK_Arabic_farsi_yeh = 0x10006cc, /* U+06CC ARABIC LETTER FARSI YEH */
+ XK_Arabic_yeh_baree = 0x10006d2, /* U+06D2 ARABIC LETTER YEH BARREE */
+ XK_Arabic_heh_goal = 0x10006c1, /* U+06C1 ARABIC LETTER HEH GOAL */
+ XK_Arabic_switch = 0xff7e, /* Alias for mode_switch */
+ XK_Cyrillic_GHE_bar = 0x1000492, /* U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE */
+ XK_Cyrillic_ghe_bar = 0x1000493, /* U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE */
+ XK_Cyrillic_ZHE_descender = 0x1000496, /* U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */
+ XK_Cyrillic_zhe_descender = 0x1000497, /* U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER */
+ XK_Cyrillic_KA_descender = 0x100049a, /* U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER */
+ XK_Cyrillic_ka_descender = 0x100049b, /* U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER */
+ XK_Cyrillic_KA_vertstroke = 0x100049c, /* U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */
+ XK_Cyrillic_ka_vertstroke = 0x100049d, /* U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */
+ XK_Cyrillic_EN_descender = 0x10004a2, /* U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER */
+ XK_Cyrillic_en_descender = 0x10004a3, /* U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER */
+ XK_Cyrillic_U_straight = 0x10004ae, /* U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U */
+ XK_Cyrillic_u_straight = 0x10004af, /* U+04AF CYRILLIC SMALL LETTER STRAIGHT U */
+ XK_Cyrillic_U_straight_bar = 0x10004b0, /* U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */
+ XK_Cyrillic_u_straight_bar = 0x10004b1, /* U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */
+ XK_Cyrillic_HA_descender = 0x10004b2, /* U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER */
+ XK_Cyrillic_ha_descender = 0x10004b3, /* U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER */
+ XK_Cyrillic_CHE_descender = 0x10004b6, /* U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */
+ XK_Cyrillic_che_descender = 0x10004b7, /* U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER */
+ XK_Cyrillic_CHE_vertstroke = 0x10004b8, /* U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */
+ XK_Cyrillic_che_vertstroke = 0x10004b9, /* U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */
+ XK_Cyrillic_SHHA = 0x10004ba, /* U+04BA CYRILLIC CAPITAL LETTER SHHA */
+ XK_Cyrillic_shha = 0x10004bb, /* U+04BB CYRILLIC SMALL LETTER SHHA */
+ XK_Cyrillic_SCHWA = 0x10004d8, /* U+04D8 CYRILLIC CAPITAL LETTER SCHWA */
+ XK_Cyrillic_schwa = 0x10004d9, /* U+04D9 CYRILLIC SMALL LETTER SCHWA */
+ XK_Cyrillic_I_macron = 0x10004e2, /* U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON */
+ XK_Cyrillic_i_macron = 0x10004e3, /* U+04E3 CYRILLIC SMALL LETTER I WITH MACRON */
+ XK_Cyrillic_O_bar = 0x10004e8, /* U+04E8 CYRILLIC CAPITAL LETTER BARRED O */
+ XK_Cyrillic_o_bar = 0x10004e9, /* U+04E9 CYRILLIC SMALL LETTER BARRED O */
+ XK_Cyrillic_U_macron = 0x10004ee, /* U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON */
+ XK_Cyrillic_u_macron = 0x10004ef, /* U+04EF CYRILLIC SMALL LETTER U WITH MACRON */
+ XK_Serbian_dje = 0x06a1, /* U+0452 CYRILLIC SMALL LETTER DJE */
+ XK_Macedonia_gje = 0x06a2, /* U+0453 CYRILLIC SMALL LETTER GJE */
+ XK_Cyrillic_io = 0x06a3, /* U+0451 CYRILLIC SMALL LETTER IO */
+ XK_Ukrainian_ie = 0x06a4, /* U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE */
+ XK_Ukranian_je = 0x06a4, /* deprecated */
+ XK_Macedonia_dse = 0x06a5, /* U+0455 CYRILLIC SMALL LETTER DZE */
+ XK_Ukrainian_i = 0x06a6, /* U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
+ XK_Ukranian_i = 0x06a6, /* deprecated */
+ XK_Ukrainian_yi = 0x06a7, /* U+0457 CYRILLIC SMALL LETTER YI */
+ XK_Ukranian_yi = 0x06a7, /* deprecated */
+ XK_Cyrillic_je = 0x06a8, /* U+0458 CYRILLIC SMALL LETTER JE */
+ XK_Serbian_je = 0x06a8, /* deprecated */
+ XK_Cyrillic_lje = 0x06a9, /* U+0459 CYRILLIC SMALL LETTER LJE */
+ XK_Serbian_lje = 0x06a9, /* deprecated */
+ XK_Cyrillic_nje = 0x06aa, /* U+045A CYRILLIC SMALL LETTER NJE */
+ XK_Serbian_nje = 0x06aa, /* deprecated */
+ XK_Serbian_tshe = 0x06ab, /* U+045B CYRILLIC SMALL LETTER TSHE */
+ XK_Macedonia_kje = 0x06ac, /* U+045C CYRILLIC SMALL LETTER KJE */
+ XK_Ukrainian_ghe_with_upturn = 0x06ad, /* U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN */
+ XK_Byelorussian_shortu = 0x06ae, /* U+045E CYRILLIC SMALL LETTER SHORT U */
+ XK_Cyrillic_dzhe = 0x06af, /* U+045F CYRILLIC SMALL LETTER DZHE */
+ XK_Serbian_dze = 0x06af, /* deprecated */
+ XK_numerosign = 0x06b0, /* U+2116 NUMERO SIGN */
+ XK_Serbian_DJE = 0x06b1, /* U+0402 CYRILLIC CAPITAL LETTER DJE */
+ XK_Macedonia_GJE = 0x06b2, /* U+0403 CYRILLIC CAPITAL LETTER GJE */
+ XK_Cyrillic_IO = 0x06b3, /* U+0401 CYRILLIC CAPITAL LETTER IO */
+ XK_Ukrainian_IE = 0x06b4, /* U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE */
+ XK_Ukranian_JE = 0x06b4, /* deprecated */
+ XK_Macedonia_DSE = 0x06b5, /* U+0405 CYRILLIC CAPITAL LETTER DZE */
+ XK_Ukrainian_I = 0x06b6, /* U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
+ XK_Ukranian_I = 0x06b6, /* deprecated */
+ XK_Ukrainian_YI = 0x06b7, /* U+0407 CYRILLIC CAPITAL LETTER YI */
+ XK_Ukranian_YI = 0x06b7, /* deprecated */
+ XK_Cyrillic_JE = 0x06b8, /* U+0408 CYRILLIC CAPITAL LETTER JE */
+ XK_Serbian_JE = 0x06b8, /* deprecated */
+ XK_Cyrillic_LJE = 0x06b9, /* U+0409 CYRILLIC CAPITAL LETTER LJE */
+ XK_Serbian_LJE = 0x06b9, /* deprecated */
+ XK_Cyrillic_NJE = 0x06ba, /* U+040A CYRILLIC CAPITAL LETTER NJE */
+ XK_Serbian_NJE = 0x06ba, /* deprecated */
+ XK_Serbian_TSHE = 0x06bb, /* U+040B CYRILLIC CAPITAL LETTER TSHE */
+ XK_Macedonia_KJE = 0x06bc, /* U+040C CYRILLIC CAPITAL LETTER KJE */
+ XK_Ukrainian_GHE_WITH_UPTURN = 0x06bd, /* U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
+ XK_Byelorussian_SHORTU = 0x06be, /* U+040E CYRILLIC CAPITAL LETTER SHORT U */
+ XK_Cyrillic_DZHE = 0x06bf, /* U+040F CYRILLIC CAPITAL LETTER DZHE */
+ XK_Serbian_DZE = 0x06bf, /* deprecated */
+ XK_Cyrillic_yu = 0x06c0, /* U+044E CYRILLIC SMALL LETTER YU */
+ XK_Cyrillic_a = 0x06c1, /* U+0430 CYRILLIC SMALL LETTER A */
+ XK_Cyrillic_be = 0x06c2, /* U+0431 CYRILLIC SMALL LETTER BE */
+ XK_Cyrillic_tse = 0x06c3, /* U+0446 CYRILLIC SMALL LETTER TSE */
+ XK_Cyrillic_de = 0x06c4, /* U+0434 CYRILLIC SMALL LETTER DE */
+ XK_Cyrillic_ie = 0x06c5, /* U+0435 CYRILLIC SMALL LETTER IE */
+ XK_Cyrillic_ef = 0x06c6, /* U+0444 CYRILLIC SMALL LETTER EF */
+ XK_Cyrillic_ghe = 0x06c7, /* U+0433 CYRILLIC SMALL LETTER GHE */
+ XK_Cyrillic_ha = 0x06c8, /* U+0445 CYRILLIC SMALL LETTER HA */
+ XK_Cyrillic_i = 0x06c9, /* U+0438 CYRILLIC SMALL LETTER I */
+ XK_Cyrillic_shorti = 0x06ca, /* U+0439 CYRILLIC SMALL LETTER SHORT I */
+ XK_Cyrillic_ka = 0x06cb, /* U+043A CYRILLIC SMALL LETTER KA */
+ XK_Cyrillic_el = 0x06cc, /* U+043B CYRILLIC SMALL LETTER EL */
+ XK_Cyrillic_em = 0x06cd, /* U+043C CYRILLIC SMALL LETTER EM */
+ XK_Cyrillic_en = 0x06ce, /* U+043D CYRILLIC SMALL LETTER EN */
+ XK_Cyrillic_o = 0x06cf, /* U+043E CYRILLIC SMALL LETTER O */
+ XK_Cyrillic_pe = 0x06d0, /* U+043F CYRILLIC SMALL LETTER PE */
+ XK_Cyrillic_ya = 0x06d1, /* U+044F CYRILLIC SMALL LETTER YA */
+ XK_Cyrillic_er = 0x06d2, /* U+0440 CYRILLIC SMALL LETTER ER */
+ XK_Cyrillic_es = 0x06d3, /* U+0441 CYRILLIC SMALL LETTER ES */
+ XK_Cyrillic_te = 0x06d4, /* U+0442 CYRILLIC SMALL LETTER TE */
+ XK_Cyrillic_u = 0x06d5, /* U+0443 CYRILLIC SMALL LETTER U */
+ XK_Cyrillic_zhe = 0x06d6, /* U+0436 CYRILLIC SMALL LETTER ZHE */
+ XK_Cyrillic_ve = 0x06d7, /* U+0432 CYRILLIC SMALL LETTER VE */
+ XK_Cyrillic_softsign = 0x06d8, /* U+044C CYRILLIC SMALL LETTER SOFT SIGN */
+ XK_Cyrillic_yeru = 0x06d9, /* U+044B CYRILLIC SMALL LETTER YERU */
+ XK_Cyrillic_ze = 0x06da, /* U+0437 CYRILLIC SMALL LETTER ZE */
+ XK_Cyrillic_sha = 0x06db, /* U+0448 CYRILLIC SMALL LETTER SHA */
+ XK_Cyrillic_e = 0x06dc, /* U+044D CYRILLIC SMALL LETTER E */
+ XK_Cyrillic_shcha = 0x06dd, /* U+0449 CYRILLIC SMALL LETTER SHCHA */
+ XK_Cyrillic_che = 0x06de, /* U+0447 CYRILLIC SMALL LETTER CHE */
+ XK_Cyrillic_hardsign = 0x06df, /* U+044A CYRILLIC SMALL LETTER HARD SIGN */
+ XK_Cyrillic_YU = 0x06e0, /* U+042E CYRILLIC CAPITAL LETTER YU */
+ XK_Cyrillic_A = 0x06e1, /* U+0410 CYRILLIC CAPITAL LETTER A */
+ XK_Cyrillic_BE = 0x06e2, /* U+0411 CYRILLIC CAPITAL LETTER BE */
+ XK_Cyrillic_TSE = 0x06e3, /* U+0426 CYRILLIC CAPITAL LETTER TSE */
+ XK_Cyrillic_DE = 0x06e4, /* U+0414 CYRILLIC CAPITAL LETTER DE */
+ XK_Cyrillic_IE = 0x06e5, /* U+0415 CYRILLIC CAPITAL LETTER IE */
+ XK_Cyrillic_EF = 0x06e6, /* U+0424 CYRILLIC CAPITAL LETTER EF */
+ XK_Cyrillic_GHE = 0x06e7, /* U+0413 CYRILLIC CAPITAL LETTER GHE */
+ XK_Cyrillic_HA = 0x06e8, /* U+0425 CYRILLIC CAPITAL LETTER HA */
+ XK_Cyrillic_I = 0x06e9, /* U+0418 CYRILLIC CAPITAL LETTER I */
+ XK_Cyrillic_SHORTI = 0x06ea, /* U+0419 CYRILLIC CAPITAL LETTER SHORT I */
+ XK_Cyrillic_KA = 0x06eb, /* U+041A CYRILLIC CAPITAL LETTER KA */
+ XK_Cyrillic_EL = 0x06ec, /* U+041B CYRILLIC CAPITAL LETTER EL */
+ XK_Cyrillic_EM = 0x06ed, /* U+041C CYRILLIC CAPITAL LETTER EM */
+ XK_Cyrillic_EN = 0x06ee, /* U+041D CYRILLIC CAPITAL LETTER EN */
+ XK_Cyrillic_O = 0x06ef, /* U+041E CYRILLIC CAPITAL LETTER O */
+ XK_Cyrillic_PE = 0x06f0, /* U+041F CYRILLIC CAPITAL LETTER PE */
+ XK_Cyrillic_YA = 0x06f1, /* U+042F CYRILLIC CAPITAL LETTER YA */
+ XK_Cyrillic_ER = 0x06f2, /* U+0420 CYRILLIC CAPITAL LETTER ER */
+ XK_Cyrillic_ES = 0x06f3, /* U+0421 CYRILLIC CAPITAL LETTER ES */
+ XK_Cyrillic_TE = 0x06f4, /* U+0422 CYRILLIC CAPITAL LETTER TE */
+ XK_Cyrillic_U = 0x06f5, /* U+0423 CYRILLIC CAPITAL LETTER U */
+ XK_Cyrillic_ZHE = 0x06f6, /* U+0416 CYRILLIC CAPITAL LETTER ZHE */
+ XK_Cyrillic_VE = 0x06f7, /* U+0412 CYRILLIC CAPITAL LETTER VE */
+ XK_Cyrillic_SOFTSIGN = 0x06f8, /* U+042C CYRILLIC CAPITAL LETTER SOFT SIGN */
+ XK_Cyrillic_YERU = 0x06f9, /* U+042B CYRILLIC CAPITAL LETTER YERU */
+ XK_Cyrillic_ZE = 0x06fa, /* U+0417 CYRILLIC CAPITAL LETTER ZE */
+ XK_Cyrillic_SHA = 0x06fb, /* U+0428 CYRILLIC CAPITAL LETTER SHA */
+ XK_Cyrillic_E = 0x06fc, /* U+042D CYRILLIC CAPITAL LETTER E */
+ XK_Cyrillic_SHCHA = 0x06fd, /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */
+ XK_Cyrillic_CHE = 0x06fe, /* U+0427 CYRILLIC CAPITAL LETTER CHE */
+ XK_Cyrillic_HARDSIGN = 0x06ff, /* U+042A CYRILLIC CAPITAL LETTER HARD SIGN */
+ XK_Greek_ALPHAaccent = 0x07a1, /* U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS */
+ XK_Greek_EPSILONaccent = 0x07a2, /* U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS */
+ XK_Greek_ETAaccent = 0x07a3, /* U+0389 GREEK CAPITAL LETTER ETA WITH TONOS */
+ XK_Greek_IOTAaccent = 0x07a4, /* U+038A GREEK CAPITAL LETTER IOTA WITH TONOS */
+ XK_Greek_IOTAdieresis = 0x07a5, /* U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
+ XK_Greek_IOTAdiaeresis = 0x07a5, /* old typo */
+ XK_Greek_OMICRONaccent = 0x07a7, /* U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS */
+ XK_Greek_UPSILONaccent = 0x07a8, /* U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS */
+ XK_Greek_UPSILONdieresis = 0x07a9, /* U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
+ XK_Greek_OMEGAaccent = 0x07ab, /* U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS */
+ XK_Greek_accentdieresis = 0x07ae, /* U+0385 GREEK DIALYTIKA TONOS */
+ XK_Greek_horizbar = 0x07af, /* U+2015 HORIZONTAL BAR */
+ XK_Greek_alphaaccent = 0x07b1, /* U+03AC GREEK SMALL LETTER ALPHA WITH TONOS */
+ XK_Greek_epsilonaccent = 0x07b2, /* U+03AD GREEK SMALL LETTER EPSILON WITH TONOS */
+ XK_Greek_etaaccent = 0x07b3, /* U+03AE GREEK SMALL LETTER ETA WITH TONOS */
+ XK_Greek_iotaaccent = 0x07b4, /* U+03AF GREEK SMALL LETTER IOTA WITH TONOS */
+ XK_Greek_iotadieresis = 0x07b5, /* U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA */
+ XK_Greek_iotaaccentdieresis = 0x07b6, /* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
+ XK_Greek_omicronaccent = 0x07b7, /* U+03CC GREEK SMALL LETTER OMICRON WITH TONOS */
+ XK_Greek_upsilonaccent = 0x07b8, /* U+03CD GREEK SMALL LETTER UPSILON WITH TONOS */
+ XK_Greek_upsilondieresis = 0x07b9, /* U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
+ XK_Greek_upsilonaccentdieresis = 0x07ba, /* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
+ XK_Greek_omegaaccent = 0x07bb, /* U+03CE GREEK SMALL LETTER OMEGA WITH TONOS */
+ XK_Greek_ALPHA = 0x07c1, /* U+0391 GREEK CAPITAL LETTER ALPHA */
+ XK_Greek_BETA = 0x07c2, /* U+0392 GREEK CAPITAL LETTER BETA */
+ XK_Greek_GAMMA = 0x07c3, /* U+0393 GREEK CAPITAL LETTER GAMMA */
+ XK_Greek_DELTA = 0x07c4, /* U+0394 GREEK CAPITAL LETTER DELTA */
+ XK_Greek_EPSILON = 0x07c5, /* U+0395 GREEK CAPITAL LETTER EPSILON */
+ XK_Greek_ZETA = 0x07c6, /* U+0396 GREEK CAPITAL LETTER ZETA */
+ XK_Greek_ETA = 0x07c7, /* U+0397 GREEK CAPITAL LETTER ETA */
+ XK_Greek_THETA = 0x07c8, /* U+0398 GREEK CAPITAL LETTER THETA */
+ XK_Greek_IOTA = 0x07c9, /* U+0399 GREEK CAPITAL LETTER IOTA */
+ XK_Greek_KAPPA = 0x07ca, /* U+039A GREEK CAPITAL LETTER KAPPA */
+ XK_Greek_LAMDA = 0x07cb, /* U+039B GREEK CAPITAL LETTER LAMDA */
+ XK_Greek_LAMBDA = 0x07cb, /* U+039B GREEK CAPITAL LETTER LAMDA */
+ XK_Greek_MU = 0x07cc, /* U+039C GREEK CAPITAL LETTER MU */
+ XK_Greek_NU = 0x07cd, /* U+039D GREEK CAPITAL LETTER NU */
+ XK_Greek_XI = 0x07ce, /* U+039E GREEK CAPITAL LETTER XI */
+ XK_Greek_OMICRON = 0x07cf, /* U+039F GREEK CAPITAL LETTER OMICRON */
+ XK_Greek_PI = 0x07d0, /* U+03A0 GREEK CAPITAL LETTER PI */
+ XK_Greek_RHO = 0x07d1, /* U+03A1 GREEK CAPITAL LETTER RHO */
+ XK_Greek_SIGMA = 0x07d2, /* U+03A3 GREEK CAPITAL LETTER SIGMA */
+ XK_Greek_TAU = 0x07d4, /* U+03A4 GREEK CAPITAL LETTER TAU */
+ XK_Greek_UPSILON = 0x07d5, /* U+03A5 GREEK CAPITAL LETTER UPSILON */
+ XK_Greek_PHI = 0x07d6, /* U+03A6 GREEK CAPITAL LETTER PHI */
+ XK_Greek_CHI = 0x07d7, /* U+03A7 GREEK CAPITAL LETTER CHI */
+ XK_Greek_PSI = 0x07d8, /* U+03A8 GREEK CAPITAL LETTER PSI */
+ XK_Greek_OMEGA = 0x07d9, /* U+03A9 GREEK CAPITAL LETTER OMEGA */
+ XK_Greek_alpha = 0x07e1, /* U+03B1 GREEK SMALL LETTER ALPHA */
+ XK_Greek_beta = 0x07e2, /* U+03B2 GREEK SMALL LETTER BETA */
+ XK_Greek_gamma = 0x07e3, /* U+03B3 GREEK SMALL LETTER GAMMA */
+ XK_Greek_delta = 0x07e4, /* U+03B4 GREEK SMALL LETTER DELTA */
+ XK_Greek_epsilon = 0x07e5, /* U+03B5 GREEK SMALL LETTER EPSILON */
+ XK_Greek_zeta = 0x07e6, /* U+03B6 GREEK SMALL LETTER ZETA */
+ XK_Greek_eta = 0x07e7, /* U+03B7 GREEK SMALL LETTER ETA */
+ XK_Greek_theta = 0x07e8, /* U+03B8 GREEK SMALL LETTER THETA */
+ XK_Greek_iota = 0x07e9, /* U+03B9 GREEK SMALL LETTER IOTA */
+ XK_Greek_kappa = 0x07ea, /* U+03BA GREEK SMALL LETTER KAPPA */
+ XK_Greek_lamda = 0x07eb, /* U+03BB GREEK SMALL LETTER LAMDA */
+ XK_Greek_lambda = 0x07eb, /* U+03BB GREEK SMALL LETTER LAMDA */
+ XK_Greek_mu = 0x07ec, /* U+03BC GREEK SMALL LETTER MU */
+ XK_Greek_nu = 0x07ed, /* U+03BD GREEK SMALL LETTER NU */
+ XK_Greek_xi = 0x07ee, /* U+03BE GREEK SMALL LETTER XI */
+ XK_Greek_omicron = 0x07ef, /* U+03BF GREEK SMALL LETTER OMICRON */
+ XK_Greek_pi = 0x07f0, /* U+03C0 GREEK SMALL LETTER PI */
+ XK_Greek_rho = 0x07f1, /* U+03C1 GREEK SMALL LETTER RHO */
+ XK_Greek_sigma = 0x07f2, /* U+03C3 GREEK SMALL LETTER SIGMA */
+ XK_Greek_finalsmallsigma = 0x07f3, /* U+03C2 GREEK SMALL LETTER FINAL SIGMA */
+ XK_Greek_tau = 0x07f4, /* U+03C4 GREEK SMALL LETTER TAU */
+ XK_Greek_upsilon = 0x07f5, /* U+03C5 GREEK SMALL LETTER UPSILON */
+ XK_Greek_phi = 0x07f6, /* U+03C6 GREEK SMALL LETTER PHI */
+ XK_Greek_chi = 0x07f7, /* U+03C7 GREEK SMALL LETTER CHI */
+ XK_Greek_psi = 0x07f8, /* U+03C8 GREEK SMALL LETTER PSI */
+ XK_Greek_omega = 0x07f9, /* U+03C9 GREEK SMALL LETTER OMEGA */
+ XK_Greek_switch = 0xff7e, /* Alias for mode_switch */
+ XK_leftradical = 0x08a1, /* U+23B7 RADICAL SYMBOL BOTTOM */
+ XK_topleftradical = 0x08a2, /*(U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT)*/
+ XK_horizconnector = 0x08a3, /*(U+2500 BOX DRAWINGS LIGHT HORIZONTAL)*/
+ XK_topintegral = 0x08a4, /* U+2320 TOP HALF INTEGRAL */
+ XK_botintegral = 0x08a5, /* U+2321 BOTTOM HALF INTEGRAL */
+ XK_vertconnector = 0x08a6, /*(U+2502 BOX DRAWINGS LIGHT VERTICAL)*/
+ XK_topleftsqbracket = 0x08a7, /* U+23A1 LEFT SQUARE BRACKET UPPER CORNER */
+ XK_botleftsqbracket = 0x08a8, /* U+23A3 LEFT SQUARE BRACKET LOWER CORNER */
+ XK_toprightsqbracket = 0x08a9, /* U+23A4 RIGHT SQUARE BRACKET UPPER CORNER */
+ XK_botrightsqbracket = 0x08aa, /* U+23A6 RIGHT SQUARE BRACKET LOWER CORNER */
+ XK_topleftparens = 0x08ab, /* U+239B LEFT PARENTHESIS UPPER HOOK */
+ XK_botleftparens = 0x08ac, /* U+239D LEFT PARENTHESIS LOWER HOOK */
+ XK_toprightparens = 0x08ad, /* U+239E RIGHT PARENTHESIS UPPER HOOK */
+ XK_botrightparens = 0x08ae, /* U+23A0 RIGHT PARENTHESIS LOWER HOOK */
+ XK_leftmiddlecurlybrace = 0x08af, /* U+23A8 LEFT CURLY BRACKET MIDDLE PIECE */
+ XK_rightmiddlecurlybrace = 0x08b0, /* U+23AC RIGHT CURLY BRACKET MIDDLE PIECE */
+ XK_topleftsummation = 0x08b1,
+ XK_botleftsummation = 0x08b2,
+ XK_topvertsummationconnector = 0x08b3,
+ XK_botvertsummationconnector = 0x08b4,
+ XK_toprightsummation = 0x08b5,
+ XK_botrightsummation = 0x08b6,
+ XK_rightmiddlesummation = 0x08b7,
+ XK_lessthanequal = 0x08bc, /* U+2264 LESS-THAN OR EQUAL TO */
+ XK_notequal = 0x08bd, /* U+2260 NOT EQUAL TO */
+ XK_greaterthanequal = 0x08be, /* U+2265 GREATER-THAN OR EQUAL TO */
+ XK_integral = 0x08bf, /* U+222B INTEGRAL */
+ XK_therefore = 0x08c0, /* U+2234 THEREFORE */
+ XK_variation = 0x08c1, /* U+221D PROPORTIONAL TO */
+ XK_infinity = 0x08c2, /* U+221E INFINITY */
+ XK_nabla = 0x08c5, /* U+2207 NABLA */
+ XK_approximate = 0x08c8, /* U+223C TILDE OPERATOR */
+ XK_similarequal = 0x08c9, /* U+2243 ASYMPTOTICALLY EQUAL TO */
+ XK_ifonlyif = 0x08cd, /* U+21D4 LEFT RIGHT DOUBLE ARROW */
+ XK_implies = 0x08ce, /* U+21D2 RIGHTWARDS DOUBLE ARROW */
+ XK_identical = 0x08cf, /* U+2261 IDENTICAL TO */
+ XK_radical = 0x08d6, /* U+221A SQUARE ROOT */
+ XK_includedin = 0x08da, /* U+2282 SUBSET OF */
+ XK_includes = 0x08db, /* U+2283 SUPERSET OF */
+ XK_intersection = 0x08dc, /* U+2229 INTERSECTION */
+ XK_union = 0x08dd, /* U+222A UNION */
+ XK_logicaland = 0x08de, /* U+2227 LOGICAL AND */
+ XK_logicalor = 0x08df, /* U+2228 LOGICAL OR */
+ XK_partialderivative = 0x08ef, /* U+2202 PARTIAL DIFFERENTIAL */
+ XK_function = 0x08f6, /* U+0192 LATIN SMALL LETTER F WITH HOOK */
+ XK_leftarrow = 0x08fb, /* U+2190 LEFTWARDS ARROW */
+ XK_uparrow = 0x08fc, /* U+2191 UPWARDS ARROW */
+ XK_rightarrow = 0x08fd, /* U+2192 RIGHTWARDS ARROW */
+ XK_downarrow = 0x08fe, /* U+2193 DOWNWARDS ARROW */
+ XK_blank = 0x09df,
+ XK_soliddiamond = 0x09e0, /* U+25C6 BLACK DIAMOND */
+ XK_checkerboard = 0x09e1, /* U+2592 MEDIUM SHADE */
+ XK_ht = 0x09e2, /* U+2409 SYMBOL FOR HORIZONTAL TABULATION */
+ XK_ff = 0x09e3, /* U+240C SYMBOL FOR FORM FEED */
+ XK_cr = 0x09e4, /* U+240D SYMBOL FOR CARRIAGE RETURN */
+ XK_lf = 0x09e5, /* U+240A SYMBOL FOR LINE FEED */
+ XK_nl = 0x09e8, /* U+2424 SYMBOL FOR NEWLINE */
+ XK_vt = 0x09e9, /* U+240B SYMBOL FOR VERTICAL TABULATION */
+ XK_lowrightcorner = 0x09ea, /* U+2518 BOX DRAWINGS LIGHT UP AND LEFT */
+ XK_uprightcorner = 0x09eb, /* U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT */
+ XK_upleftcorner = 0x09ec, /* U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT */
+ XK_lowleftcorner = 0x09ed, /* U+2514 BOX DRAWINGS LIGHT UP AND RIGHT */
+ XK_crossinglines = 0x09ee, /* U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
+ XK_horizlinescan1 = 0x09ef, /* U+23BA HORIZONTAL SCAN LINE-1 */
+ XK_horizlinescan3 = 0x09f0, /* U+23BB HORIZONTAL SCAN LINE-3 */
+ XK_horizlinescan5 = 0x09f1, /* U+2500 BOX DRAWINGS LIGHT HORIZONTAL */
+ XK_horizlinescan7 = 0x09f2, /* U+23BC HORIZONTAL SCAN LINE-7 */
+ XK_horizlinescan9 = 0x09f3, /* U+23BD HORIZONTAL SCAN LINE-9 */
+ XK_leftt = 0x09f4, /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
+ XK_rightt = 0x09f5, /* U+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT */
+ XK_bott = 0x09f6, /* U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL */
+ XK_topt = 0x09f7, /* U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
+ XK_vertbar = 0x09f8, /* U+2502 BOX DRAWINGS LIGHT VERTICAL */
+ XK_emspace = 0x0aa1, /* U+2003 EM SPACE */
+ XK_enspace = 0x0aa2, /* U+2002 EN SPACE */
+ XK_em3space = 0x0aa3, /* U+2004 THREE-PER-EM SPACE */
+ XK_em4space = 0x0aa4, /* U+2005 FOUR-PER-EM SPACE */
+ XK_digitspace = 0x0aa5, /* U+2007 FIGURE SPACE */
+ XK_punctspace = 0x0aa6, /* U+2008 PUNCTUATION SPACE */
+ XK_thinspace = 0x0aa7, /* U+2009 THIN SPACE */
+ XK_hairspace = 0x0aa8, /* U+200A HAIR SPACE */
+ XK_emdash = 0x0aa9, /* U+2014 EM DASH */
+ XK_endash = 0x0aaa, /* U+2013 EN DASH */
+ XK_signifblank = 0x0aac, /*(U+2423 OPEN BOX)*/
+ XK_ellipsis = 0x0aae, /* U+2026 HORIZONTAL ELLIPSIS */
+ XK_doubbaselinedot = 0x0aaf, /* U+2025 TWO DOT LEADER */
+ XK_onethird = 0x0ab0, /* U+2153 VULGAR FRACTION ONE THIRD */
+ XK_twothirds = 0x0ab1, /* U+2154 VULGAR FRACTION TWO THIRDS */
+ XK_onefifth = 0x0ab2, /* U+2155 VULGAR FRACTION ONE FIFTH */
+ XK_twofifths = 0x0ab3, /* U+2156 VULGAR FRACTION TWO FIFTHS */
+ XK_threefifths = 0x0ab4, /* U+2157 VULGAR FRACTION THREE FIFTHS */
+ XK_fourfifths = 0x0ab5, /* U+2158 VULGAR FRACTION FOUR FIFTHS */
+ XK_onesixth = 0x0ab6, /* U+2159 VULGAR FRACTION ONE SIXTH */
+ XK_fivesixths = 0x0ab7, /* U+215A VULGAR FRACTION FIVE SIXTHS */
+ XK_careof = 0x0ab8, /* U+2105 CARE OF */
+ XK_figdash = 0x0abb, /* U+2012 FIGURE DASH */
+ XK_leftanglebracket = 0x0abc, /*(U+27E8 MATHEMATICAL LEFT ANGLE BRACKET)*/
+ XK_decimalpoint = 0x0abd, /*(U+002E FULL STOP)*/
+ XK_rightanglebracket = 0x0abe, /*(U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET)*/
+ XK_marker = 0x0abf,
+ XK_oneeighth = 0x0ac3, /* U+215B VULGAR FRACTION ONE EIGHTH */
+ XK_threeeighths = 0x0ac4, /* U+215C VULGAR FRACTION THREE EIGHTHS */
+ XK_fiveeighths = 0x0ac5, /* U+215D VULGAR FRACTION FIVE EIGHTHS */
+ XK_seveneighths = 0x0ac6, /* U+215E VULGAR FRACTION SEVEN EIGHTHS */
+ XK_trademark = 0x0ac9, /* U+2122 TRADE MARK SIGN */
+ XK_signaturemark = 0x0aca, /*(U+2613 SALTIRE)*/
+ XK_trademarkincircle = 0x0acb,
+ XK_leftopentriangle = 0x0acc, /*(U+25C1 WHITE LEFT-POINTING TRIANGLE)*/
+ XK_rightopentriangle = 0x0acd, /*(U+25B7 WHITE RIGHT-POINTING TRIANGLE)*/
+ XK_emopencircle = 0x0ace, /*(U+25CB WHITE CIRCLE)*/
+ XK_emopenrectangle = 0x0acf, /*(U+25AF WHITE VERTICAL RECTANGLE)*/
+ XK_leftsinglequotemark = 0x0ad0, /* U+2018 LEFT SINGLE QUOTATION MARK */
+ XK_rightsinglequotemark = 0x0ad1, /* U+2019 RIGHT SINGLE QUOTATION MARK */
+ XK_leftdoublequotemark = 0x0ad2, /* U+201C LEFT DOUBLE QUOTATION MARK */
+ XK_rightdoublequotemark = 0x0ad3, /* U+201D RIGHT DOUBLE QUOTATION MARK */
+ XK_prescription = 0x0ad4, /* U+211E PRESCRIPTION TAKE */
+ XK_minutes = 0x0ad6, /* U+2032 PRIME */
+ XK_seconds = 0x0ad7, /* U+2033 DOUBLE PRIME */
+ XK_latincross = 0x0ad9, /* U+271D LATIN CROSS */
+ XK_hexagram = 0x0ada,
+ XK_filledrectbullet = 0x0adb, /*(U+25AC BLACK RECTANGLE)*/
+ XK_filledlefttribullet = 0x0adc, /*(U+25C0 BLACK LEFT-POINTING TRIANGLE)*/
+ XK_filledrighttribullet = 0x0add, /*(U+25B6 BLACK RIGHT-POINTING TRIANGLE)*/
+ XK_emfilledcircle = 0x0ade, /*(U+25CF BLACK CIRCLE)*/
+ XK_emfilledrect = 0x0adf, /*(U+25AE BLACK VERTICAL RECTANGLE)*/
+ XK_enopencircbullet = 0x0ae0, /*(U+25E6 WHITE BULLET)*/
+ XK_enopensquarebullet = 0x0ae1, /*(U+25AB WHITE SMALL SQUARE)*/
+ XK_openrectbullet = 0x0ae2, /*(U+25AD WHITE RECTANGLE)*/
+ XK_opentribulletup = 0x0ae3, /*(U+25B3 WHITE UP-POINTING TRIANGLE)*/
+ XK_opentribulletdown = 0x0ae4, /*(U+25BD WHITE DOWN-POINTING TRIANGLE)*/
+ XK_openstar = 0x0ae5, /*(U+2606 WHITE STAR)*/
+ XK_enfilledcircbullet = 0x0ae6, /*(U+2022 BULLET)*/
+ XK_enfilledsqbullet = 0x0ae7, /*(U+25AA BLACK SMALL SQUARE)*/
+ XK_filledtribulletup = 0x0ae8, /*(U+25B2 BLACK UP-POINTING TRIANGLE)*/
+ XK_filledtribulletdown = 0x0ae9, /*(U+25BC BLACK DOWN-POINTING TRIANGLE)*/
+ XK_leftpointer = 0x0aea, /*(U+261C WHITE LEFT POINTING INDEX)*/
+ XK_rightpointer = 0x0aeb, /*(U+261E WHITE RIGHT POINTING INDEX)*/
+ XK_club = 0x0aec, /* U+2663 BLACK CLUB SUIT */
+ XK_diamond = 0x0aed, /* U+2666 BLACK DIAMOND SUIT */
+ XK_heart = 0x0aee, /* U+2665 BLACK HEART SUIT */
+ XK_maltesecross = 0x0af0, /* U+2720 MALTESE CROSS */
+ XK_dagger = 0x0af1, /* U+2020 DAGGER */
+ XK_doubledagger = 0x0af2, /* U+2021 DOUBLE DAGGER */
+ XK_checkmark = 0x0af3, /* U+2713 CHECK MARK */
+ XK_ballotcross = 0x0af4, /* U+2717 BALLOT X */
+ XK_musicalsharp = 0x0af5, /* U+266F MUSIC SHARP SIGN */
+ XK_musicalflat = 0x0af6, /* U+266D MUSIC FLAT SIGN */
+ XK_malesymbol = 0x0af7, /* U+2642 MALE SIGN */
+ XK_femalesymbol = 0x0af8, /* U+2640 FEMALE SIGN */
+ XK_telephone = 0x0af9, /* U+260E BLACK TELEPHONE */
+ XK_telephonerecorder = 0x0afa, /* U+2315 TELEPHONE RECORDER */
+ XK_phonographcopyright = 0x0afb, /* U+2117 SOUND RECORDING COPYRIGHT */
+ XK_caret = 0x0afc, /* U+2038 CARET */
+ XK_singlelowquotemark = 0x0afd, /* U+201A SINGLE LOW-9 QUOTATION MARK */
+ XK_doublelowquotemark = 0x0afe, /* U+201E DOUBLE LOW-9 QUOTATION MARK */
+ XK_cursor = 0x0aff,
+ XK_leftcaret = 0x0ba3, /*(U+003C LESS-THAN SIGN)*/
+ XK_rightcaret = 0x0ba6, /*(U+003E GREATER-THAN SIGN)*/
+ XK_downcaret = 0x0ba8, /*(U+2228 LOGICAL OR)*/
+ XK_upcaret = 0x0ba9, /*(U+2227 LOGICAL AND)*/
+ XK_overbar = 0x0bc0, /*(U+00AF MACRON)*/
+ XK_downtack = 0x0bc2, /* U+22A5 UP TACK */
+ XK_upshoe = 0x0bc3, /*(U+2229 INTERSECTION)*/
+ XK_downstile = 0x0bc4, /* U+230A LEFT FLOOR */
+ XK_underbar = 0x0bc6, /*(U+005F LOW LINE)*/
+ XK_jot = 0x0bca, /* U+2218 RING OPERATOR */
+ XK_quad = 0x0bcc, /* U+2395 APL FUNCTIONAL SYMBOL QUAD */
+ XK_uptack = 0x0bce, /* U+22A4 DOWN TACK */
+ XK_circle = 0x0bcf, /* U+25CB WHITE CIRCLE */
+ XK_upstile = 0x0bd3, /* U+2308 LEFT CEILING */
+ XK_downshoe = 0x0bd6, /*(U+222A UNION)*/
+ XK_rightshoe = 0x0bd8, /*(U+2283 SUPERSET OF)*/
+ XK_leftshoe = 0x0bda, /*(U+2282 SUBSET OF)*/
+ XK_lefttack = 0x0bdc, /* U+22A2 RIGHT TACK */
+ XK_righttack = 0x0bfc, /* U+22A3 LEFT TACK */
+ XK_hebrew_doublelowline = 0x0cdf, /* U+2017 DOUBLE LOW LINE */
+ XK_hebrew_aleph = 0x0ce0, /* U+05D0 HEBREW LETTER ALEF */
+ XK_hebrew_bet = 0x0ce1, /* U+05D1 HEBREW LETTER BET */
+ XK_hebrew_beth = 0x0ce1, /* deprecated */
+ XK_hebrew_gimel = 0x0ce2, /* U+05D2 HEBREW LETTER GIMEL */
+ XK_hebrew_gimmel = 0x0ce2, /* deprecated */
+ XK_hebrew_dalet = 0x0ce3, /* U+05D3 HEBREW LETTER DALET */
+ XK_hebrew_daleth = 0x0ce3, /* deprecated */
+ XK_hebrew_he = 0x0ce4, /* U+05D4 HEBREW LETTER HE */
+ XK_hebrew_waw = 0x0ce5, /* U+05D5 HEBREW LETTER VAV */
+ XK_hebrew_zain = 0x0ce6, /* U+05D6 HEBREW LETTER ZAYIN */
+ XK_hebrew_zayin = 0x0ce6, /* deprecated */
+ XK_hebrew_chet = 0x0ce7, /* U+05D7 HEBREW LETTER HET */
+ XK_hebrew_het = 0x0ce7, /* deprecated */
+ XK_hebrew_tet = 0x0ce8, /* U+05D8 HEBREW LETTER TET */
+ XK_hebrew_teth = 0x0ce8, /* deprecated */
+ XK_hebrew_yod = 0x0ce9, /* U+05D9 HEBREW LETTER YOD */
+ XK_hebrew_finalkaph = 0x0cea, /* U+05DA HEBREW LETTER FINAL KAF */
+ XK_hebrew_kaph = 0x0ceb, /* U+05DB HEBREW LETTER KAF */
+ XK_hebrew_lamed = 0x0cec, /* U+05DC HEBREW LETTER LAMED */
+ XK_hebrew_finalmem = 0x0ced, /* U+05DD HEBREW LETTER FINAL MEM */
+ XK_hebrew_mem = 0x0cee, /* U+05DE HEBREW LETTER MEM */
+ XK_hebrew_finalnun = 0x0cef, /* U+05DF HEBREW LETTER FINAL NUN */
+ XK_hebrew_nun = 0x0cf0, /* U+05E0 HEBREW LETTER NUN */
+ XK_hebrew_samech = 0x0cf1, /* U+05E1 HEBREW LETTER SAMEKH */
+ XK_hebrew_samekh = 0x0cf1, /* deprecated */
+ XK_hebrew_ayin = 0x0cf2, /* U+05E2 HEBREW LETTER AYIN */
+ XK_hebrew_finalpe = 0x0cf3, /* U+05E3 HEBREW LETTER FINAL PE */
+ XK_hebrew_pe = 0x0cf4, /* U+05E4 HEBREW LETTER PE */
+ XK_hebrew_finalzade = 0x0cf5, /* U+05E5 HEBREW LETTER FINAL TSADI */
+ XK_hebrew_finalzadi = 0x0cf5, /* deprecated */
+ XK_hebrew_zade = 0x0cf6, /* U+05E6 HEBREW LETTER TSADI */
+ XK_hebrew_zadi = 0x0cf6, /* deprecated */
+ XK_hebrew_qoph = 0x0cf7, /* U+05E7 HEBREW LETTER QOF */
+ XK_hebrew_kuf = 0x0cf7, /* deprecated */
+ XK_hebrew_resh = 0x0cf8, /* U+05E8 HEBREW LETTER RESH */
+ XK_hebrew_shin = 0x0cf9, /* U+05E9 HEBREW LETTER SHIN */
+ XK_hebrew_taw = 0x0cfa, /* U+05EA HEBREW LETTER TAV */
+ XK_hebrew_taf = 0x0cfa, /* deprecated */
+ XK_Hebrew_switch = 0xff7e, /* Alias for mode_switch */
+ XK_Thai_kokai = 0x0da1, /* U+0E01 THAI CHARACTER KO KAI */
+ XK_Thai_khokhai = 0x0da2, /* U+0E02 THAI CHARACTER KHO KHAI */
+ XK_Thai_khokhuat = 0x0da3, /* U+0E03 THAI CHARACTER KHO KHUAT */
+ XK_Thai_khokhwai = 0x0da4, /* U+0E04 THAI CHARACTER KHO KHWAI */
+ XK_Thai_khokhon = 0x0da5, /* U+0E05 THAI CHARACTER KHO KHON */
+ XK_Thai_khorakhang = 0x0da6, /* U+0E06 THAI CHARACTER KHO RAKHANG */
+ XK_Thai_ngongu = 0x0da7, /* U+0E07 THAI CHARACTER NGO NGU */
+ XK_Thai_chochan = 0x0da8, /* U+0E08 THAI CHARACTER CHO CHAN */
+ XK_Thai_choching = 0x0da9, /* U+0E09 THAI CHARACTER CHO CHING */
+ XK_Thai_chochang = 0x0daa, /* U+0E0A THAI CHARACTER CHO CHANG */
+ XK_Thai_soso = 0x0dab, /* U+0E0B THAI CHARACTER SO SO */
+ XK_Thai_chochoe = 0x0dac, /* U+0E0C THAI CHARACTER CHO CHOE */
+ XK_Thai_yoying = 0x0dad, /* U+0E0D THAI CHARACTER YO YING */
+ XK_Thai_dochada = 0x0dae, /* U+0E0E THAI CHARACTER DO CHADA */
+ XK_Thai_topatak = 0x0daf, /* U+0E0F THAI CHARACTER TO PATAK */
+ XK_Thai_thothan = 0x0db0, /* U+0E10 THAI CHARACTER THO THAN */
+ XK_Thai_thonangmontho = 0x0db1, /* U+0E11 THAI CHARACTER THO NANGMONTHO */
+ XK_Thai_thophuthao = 0x0db2, /* U+0E12 THAI CHARACTER THO PHUTHAO */
+ XK_Thai_nonen = 0x0db3, /* U+0E13 THAI CHARACTER NO NEN */
+ XK_Thai_dodek = 0x0db4, /* U+0E14 THAI CHARACTER DO DEK */
+ XK_Thai_totao = 0x0db5, /* U+0E15 THAI CHARACTER TO TAO */
+ XK_Thai_thothung = 0x0db6, /* U+0E16 THAI CHARACTER THO THUNG */
+ XK_Thai_thothahan = 0x0db7, /* U+0E17 THAI CHARACTER THO THAHAN */
+ XK_Thai_thothong = 0x0db8, /* U+0E18 THAI CHARACTER THO THONG */
+ XK_Thai_nonu = 0x0db9, /* U+0E19 THAI CHARACTER NO NU */
+ XK_Thai_bobaimai = 0x0dba, /* U+0E1A THAI CHARACTER BO BAIMAI */
+ XK_Thai_popla = 0x0dbb, /* U+0E1B THAI CHARACTER PO PLA */
+ XK_Thai_phophung = 0x0dbc, /* U+0E1C THAI CHARACTER PHO PHUNG */
+ XK_Thai_fofa = 0x0dbd, /* U+0E1D THAI CHARACTER FO FA */
+ XK_Thai_phophan = 0x0dbe, /* U+0E1E THAI CHARACTER PHO PHAN */
+ XK_Thai_fofan = 0x0dbf, /* U+0E1F THAI CHARACTER FO FAN */
+ XK_Thai_phosamphao = 0x0dc0, /* U+0E20 THAI CHARACTER PHO SAMPHAO */
+ XK_Thai_moma = 0x0dc1, /* U+0E21 THAI CHARACTER MO MA */
+ XK_Thai_yoyak = 0x0dc2, /* U+0E22 THAI CHARACTER YO YAK */
+ XK_Thai_rorua = 0x0dc3, /* U+0E23 THAI CHARACTER RO RUA */
+ XK_Thai_ru = 0x0dc4, /* U+0E24 THAI CHARACTER RU */
+ XK_Thai_loling = 0x0dc5, /* U+0E25 THAI CHARACTER LO LING */
+ XK_Thai_lu = 0x0dc6, /* U+0E26 THAI CHARACTER LU */
+ XK_Thai_wowaen = 0x0dc7, /* U+0E27 THAI CHARACTER WO WAEN */
+ XK_Thai_sosala = 0x0dc8, /* U+0E28 THAI CHARACTER SO SALA */
+ XK_Thai_sorusi = 0x0dc9, /* U+0E29 THAI CHARACTER SO RUSI */
+ XK_Thai_sosua = 0x0dca, /* U+0E2A THAI CHARACTER SO SUA */
+ XK_Thai_hohip = 0x0dcb, /* U+0E2B THAI CHARACTER HO HIP */
+ XK_Thai_lochula = 0x0dcc, /* U+0E2C THAI CHARACTER LO CHULA */
+ XK_Thai_oang = 0x0dcd, /* U+0E2D THAI CHARACTER O ANG */
+ XK_Thai_honokhuk = 0x0dce, /* U+0E2E THAI CHARACTER HO NOKHUK */
+ XK_Thai_paiyannoi = 0x0dcf, /* U+0E2F THAI CHARACTER PAIYANNOI */
+ XK_Thai_saraa = 0x0dd0, /* U+0E30 THAI CHARACTER SARA A */
+ XK_Thai_maihanakat = 0x0dd1, /* U+0E31 THAI CHARACTER MAI HAN-AKAT */
+ XK_Thai_saraaa = 0x0dd2, /* U+0E32 THAI CHARACTER SARA AA */
+ XK_Thai_saraam = 0x0dd3, /* U+0E33 THAI CHARACTER SARA AM */
+ XK_Thai_sarai = 0x0dd4, /* U+0E34 THAI CHARACTER SARA I */
+ XK_Thai_saraii = 0x0dd5, /* U+0E35 THAI CHARACTER SARA II */
+ XK_Thai_saraue = 0x0dd6, /* U+0E36 THAI CHARACTER SARA UE */
+ XK_Thai_sarauee = 0x0dd7, /* U+0E37 THAI CHARACTER SARA UEE */
+ XK_Thai_sarau = 0x0dd8, /* U+0E38 THAI CHARACTER SARA U */
+ XK_Thai_sarauu = 0x0dd9, /* U+0E39 THAI CHARACTER SARA UU */
+ XK_Thai_phinthu = 0x0dda, /* U+0E3A THAI CHARACTER PHINTHU */
+ XK_Thai_maihanakat_maitho = 0x0dde,
+ XK_Thai_baht = 0x0ddf, /* U+0E3F THAI CURRENCY SYMBOL BAHT */
+ XK_Thai_sarae = 0x0de0, /* U+0E40 THAI CHARACTER SARA E */
+ XK_Thai_saraae = 0x0de1, /* U+0E41 THAI CHARACTER SARA AE */
+ XK_Thai_sarao = 0x0de2, /* U+0E42 THAI CHARACTER SARA O */
+ XK_Thai_saraaimaimuan = 0x0de3, /* U+0E43 THAI CHARACTER SARA AI MAIMUAN */
+ XK_Thai_saraaimaimalai = 0x0de4, /* U+0E44 THAI CHARACTER SARA AI MAIMALAI */
+ XK_Thai_lakkhangyao = 0x0de5, /* U+0E45 THAI CHARACTER LAKKHANGYAO */
+ XK_Thai_maiyamok = 0x0de6, /* U+0E46 THAI CHARACTER MAIYAMOK */
+ XK_Thai_maitaikhu = 0x0de7, /* U+0E47 THAI CHARACTER MAITAIKHU */
+ XK_Thai_maiek = 0x0de8, /* U+0E48 THAI CHARACTER MAI EK */
+ XK_Thai_maitho = 0x0de9, /* U+0E49 THAI CHARACTER MAI THO */
+ XK_Thai_maitri = 0x0dea, /* U+0E4A THAI CHARACTER MAI TRI */
+ XK_Thai_maichattawa = 0x0deb, /* U+0E4B THAI CHARACTER MAI CHATTAWA */
+ XK_Thai_thanthakhat = 0x0dec, /* U+0E4C THAI CHARACTER THANTHAKHAT */
+ XK_Thai_nikhahit = 0x0ded, /* U+0E4D THAI CHARACTER NIKHAHIT */
+ XK_Thai_leksun = 0x0df0, /* U+0E50 THAI DIGIT ZERO */
+ XK_Thai_leknung = 0x0df1, /* U+0E51 THAI DIGIT ONE */
+ XK_Thai_leksong = 0x0df2, /* U+0E52 THAI DIGIT TWO */
+ XK_Thai_leksam = 0x0df3, /* U+0E53 THAI DIGIT THREE */
+ XK_Thai_leksi = 0x0df4, /* U+0E54 THAI DIGIT FOUR */
+ XK_Thai_lekha = 0x0df5, /* U+0E55 THAI DIGIT FIVE */
+ XK_Thai_lekhok = 0x0df6, /* U+0E56 THAI DIGIT SIX */
+ XK_Thai_lekchet = 0x0df7, /* U+0E57 THAI DIGIT SEVEN */
+ XK_Thai_lekpaet = 0x0df8, /* U+0E58 THAI DIGIT EIGHT */
+ XK_Thai_lekkao = 0x0df9, /* U+0E59 THAI DIGIT NINE */
+ XK_Hangul = 0xff31, /* Hangul start/stop(toggle) */
+ XK_Hangul_Start = 0xff32, /* Hangul start */
+ XK_Hangul_End = 0xff33, /* Hangul end, English start */
+ XK_Hangul_Hanja = 0xff34, /* Start Hangul->Hanja Conversion */
+ XK_Hangul_Jamo = 0xff35, /* Hangul Jamo mode */
+ XK_Hangul_Romaja = 0xff36, /* Hangul Romaja mode */
+ XK_Hangul_Codeinput = 0xff37, /* Hangul code input mode */
+ XK_Hangul_Jeonja = 0xff38, /* Jeonja mode */
+ XK_Hangul_Banja = 0xff39, /* Banja mode */
+ XK_Hangul_PreHanja = 0xff3a, /* Pre Hanja conversion */
+ XK_Hangul_PostHanja = 0xff3b, /* Post Hanja conversion */
+ XK_Hangul_SingleCandidate = 0xff3c, /* Single candidate */
+ XK_Hangul_MultipleCandidate = 0xff3d, /* Multiple candidate */
+ XK_Hangul_PreviousCandidate = 0xff3e, /* Previous candidate */
+ XK_Hangul_Special = 0xff3f, /* Special symbols */
+ XK_Hangul_switch = 0xff7e, /* Alias for mode_switch */
+ XK_Hangul_Kiyeog = 0x0ea1,
+ XK_Hangul_SsangKiyeog = 0x0ea2,
+ XK_Hangul_KiyeogSios = 0x0ea3,
+ XK_Hangul_Nieun = 0x0ea4,
+ XK_Hangul_NieunJieuj = 0x0ea5,
+ XK_Hangul_NieunHieuh = 0x0ea6,
+ XK_Hangul_Dikeud = 0x0ea7,
+ XK_Hangul_SsangDikeud = 0x0ea8,
+ XK_Hangul_Rieul = 0x0ea9,
+ XK_Hangul_RieulKiyeog = 0x0eaa,
+ XK_Hangul_RieulMieum = 0x0eab,
+ XK_Hangul_RieulPieub = 0x0eac,
+ XK_Hangul_RieulSios = 0x0ead,
+ XK_Hangul_RieulTieut = 0x0eae,
+ XK_Hangul_RieulPhieuf = 0x0eaf,
+ XK_Hangul_RieulHieuh = 0x0eb0,
+ XK_Hangul_Mieum = 0x0eb1,
+ XK_Hangul_Pieub = 0x0eb2,
+ XK_Hangul_SsangPieub = 0x0eb3,
+ XK_Hangul_PieubSios = 0x0eb4,
+ XK_Hangul_Sios = 0x0eb5,
+ XK_Hangul_SsangSios = 0x0eb6,
+ XK_Hangul_Ieung = 0x0eb7,
+ XK_Hangul_Jieuj = 0x0eb8,
+ XK_Hangul_SsangJieuj = 0x0eb9,
+ XK_Hangul_Cieuc = 0x0eba,
+ XK_Hangul_Khieuq = 0x0ebb,
+ XK_Hangul_Tieut = 0x0ebc,
+ XK_Hangul_Phieuf = 0x0ebd,
+ XK_Hangul_Hieuh = 0x0ebe,
+ XK_Hangul_A = 0x0ebf,
+ XK_Hangul_AE = 0x0ec0,
+ XK_Hangul_YA = 0x0ec1,
+ XK_Hangul_YAE = 0x0ec2,
+ XK_Hangul_EO = 0x0ec3,
+ XK_Hangul_E = 0x0ec4,
+ XK_Hangul_YEO = 0x0ec5,
+ XK_Hangul_YE = 0x0ec6,
+ XK_Hangul_O = 0x0ec7,
+ XK_Hangul_WA = 0x0ec8,
+ XK_Hangul_WAE = 0x0ec9,
+ XK_Hangul_OE = 0x0eca,
+ XK_Hangul_YO = 0x0ecb,
+ XK_Hangul_U = 0x0ecc,
+ XK_Hangul_WEO = 0x0ecd,
+ XK_Hangul_WE = 0x0ece,
+ XK_Hangul_WI = 0x0ecf,
+ XK_Hangul_YU = 0x0ed0,
+ XK_Hangul_EU = 0x0ed1,
+ XK_Hangul_YI = 0x0ed2,
+ XK_Hangul_I = 0x0ed3,
+ XK_Hangul_J_Kiyeog = 0x0ed4,
+ XK_Hangul_J_SsangKiyeog = 0x0ed5,
+ XK_Hangul_J_KiyeogSios = 0x0ed6,
+ XK_Hangul_J_Nieun = 0x0ed7,
+ XK_Hangul_J_NieunJieuj = 0x0ed8,
+ XK_Hangul_J_NieunHieuh = 0x0ed9,
+ XK_Hangul_J_Dikeud = 0x0eda,
+ XK_Hangul_J_Rieul = 0x0edb,
+ XK_Hangul_J_RieulKiyeog = 0x0edc,
+ XK_Hangul_J_RieulMieum = 0x0edd,
+ XK_Hangul_J_RieulPieub = 0x0ede,
+ XK_Hangul_J_RieulSios = 0x0edf,
+ XK_Hangul_J_RieulTieut = 0x0ee0,
+ XK_Hangul_J_RieulPhieuf = 0x0ee1,
+ XK_Hangul_J_RieulHieuh = 0x0ee2,
+ XK_Hangul_J_Mieum = 0x0ee3,
+ XK_Hangul_J_Pieub = 0x0ee4,
+ XK_Hangul_J_PieubSios = 0x0ee5,
+ XK_Hangul_J_Sios = 0x0ee6,
+ XK_Hangul_J_SsangSios = 0x0ee7,
+ XK_Hangul_J_Ieung = 0x0ee8,
+ XK_Hangul_J_Jieuj = 0x0ee9,
+ XK_Hangul_J_Cieuc = 0x0eea,
+ XK_Hangul_J_Khieuq = 0x0eeb,
+ XK_Hangul_J_Tieut = 0x0eec,
+ XK_Hangul_J_Phieuf = 0x0eed,
+ XK_Hangul_J_Hieuh = 0x0eee,
+ XK_Hangul_RieulYeorinHieuh = 0x0eef,
+ XK_Hangul_SunkyeongeumMieum = 0x0ef0,
+ XK_Hangul_SunkyeongeumPieub = 0x0ef1,
+ XK_Hangul_PanSios = 0x0ef2,
+ XK_Hangul_KkogjiDalrinIeung = 0x0ef3,
+ XK_Hangul_SunkyeongeumPhieuf = 0x0ef4,
+ XK_Hangul_YeorinHieuh = 0x0ef5,
+ XK_Hangul_AraeA = 0x0ef6,
+ XK_Hangul_AraeAE = 0x0ef7,
+ XK_Hangul_J_PanSios = 0x0ef8,
+ XK_Hangul_J_KkogjiDalrinIeung = 0x0ef9,
+ XK_Hangul_J_YeorinHieuh = 0x0efa,
+ XK_Korean_Won = 0x0eff, /*(U+20A9 WON SIGN)*/
+ XK_Armenian_ligature_ew = 0x1000587, /* U+0587 ARMENIAN SMALL LIGATURE ECH YIWN */
+ XK_Armenian_full_stop = 0x1000589, /* U+0589 ARMENIAN FULL STOP */
+ XK_Armenian_verjaket = 0x1000589, /* U+0589 ARMENIAN FULL STOP */
+ XK_Armenian_separation_mark = 0x100055d, /* U+055D ARMENIAN COMMA */
+ XK_Armenian_but = 0x100055d, /* U+055D ARMENIAN COMMA */
+ XK_Armenian_hyphen = 0x100058a, /* U+058A ARMENIAN HYPHEN */
+ XK_Armenian_yentamna = 0x100058a, /* U+058A ARMENIAN HYPHEN */
+ XK_Armenian_exclam = 0x100055c, /* U+055C ARMENIAN EXCLAMATION MARK */
+ XK_Armenian_amanak = 0x100055c, /* U+055C ARMENIAN EXCLAMATION MARK */
+ XK_Armenian_accent = 0x100055b, /* U+055B ARMENIAN EMPHASIS MARK */
+ XK_Armenian_shesht = 0x100055b, /* U+055B ARMENIAN EMPHASIS MARK */
+ XK_Armenian_question = 0x100055e, /* U+055E ARMENIAN QUESTION MARK */
+ XK_Armenian_paruyk = 0x100055e, /* U+055E ARMENIAN QUESTION MARK */
+ XK_Armenian_AYB = 0x1000531, /* U+0531 ARMENIAN CAPITAL LETTER AYB */
+ XK_Armenian_ayb = 0x1000561, /* U+0561 ARMENIAN SMALL LETTER AYB */
+ XK_Armenian_BEN = 0x1000532, /* U+0532 ARMENIAN CAPITAL LETTER BEN */
+ XK_Armenian_ben = 0x1000562, /* U+0562 ARMENIAN SMALL LETTER BEN */
+ XK_Armenian_GIM = 0x1000533, /* U+0533 ARMENIAN CAPITAL LETTER GIM */
+ XK_Armenian_gim = 0x1000563, /* U+0563 ARMENIAN SMALL LETTER GIM */
+ XK_Armenian_DA = 0x1000534, /* U+0534 ARMENIAN CAPITAL LETTER DA */
+ XK_Armenian_da = 0x1000564, /* U+0564 ARMENIAN SMALL LETTER DA */
+ XK_Armenian_YECH = 0x1000535, /* U+0535 ARMENIAN CAPITAL LETTER ECH */
+ XK_Armenian_yech = 0x1000565, /* U+0565 ARMENIAN SMALL LETTER ECH */
+ XK_Armenian_ZA = 0x1000536, /* U+0536 ARMENIAN CAPITAL LETTER ZA */
+ XK_Armenian_za = 0x1000566, /* U+0566 ARMENIAN SMALL LETTER ZA */
+ XK_Armenian_E = 0x1000537, /* U+0537 ARMENIAN CAPITAL LETTER EH */
+ XK_Armenian_e = 0x1000567, /* U+0567 ARMENIAN SMALL LETTER EH */
+ XK_Armenian_AT = 0x1000538, /* U+0538 ARMENIAN CAPITAL LETTER ET */
+ XK_Armenian_at = 0x1000568, /* U+0568 ARMENIAN SMALL LETTER ET */
+ XK_Armenian_TO = 0x1000539, /* U+0539 ARMENIAN CAPITAL LETTER TO */
+ XK_Armenian_to = 0x1000569, /* U+0569 ARMENIAN SMALL LETTER TO */
+ XK_Armenian_ZHE = 0x100053a, /* U+053A ARMENIAN CAPITAL LETTER ZHE */
+ XK_Armenian_zhe = 0x100056a, /* U+056A ARMENIAN SMALL LETTER ZHE */
+ XK_Armenian_INI = 0x100053b, /* U+053B ARMENIAN CAPITAL LETTER INI */
+ XK_Armenian_ini = 0x100056b, /* U+056B ARMENIAN SMALL LETTER INI */
+ XK_Armenian_LYUN = 0x100053c, /* U+053C ARMENIAN CAPITAL LETTER LIWN */
+ XK_Armenian_lyun = 0x100056c, /* U+056C ARMENIAN SMALL LETTER LIWN */
+ XK_Armenian_KHE = 0x100053d, /* U+053D ARMENIAN CAPITAL LETTER XEH */
+ XK_Armenian_khe = 0x100056d, /* U+056D ARMENIAN SMALL LETTER XEH */
+ XK_Armenian_TSA = 0x100053e, /* U+053E ARMENIAN CAPITAL LETTER CA */
+ XK_Armenian_tsa = 0x100056e, /* U+056E ARMENIAN SMALL LETTER CA */
+ XK_Armenian_KEN = 0x100053f, /* U+053F ARMENIAN CAPITAL LETTER KEN */
+ XK_Armenian_ken = 0x100056f, /* U+056F ARMENIAN SMALL LETTER KEN */
+ XK_Armenian_HO = 0x1000540, /* U+0540 ARMENIAN CAPITAL LETTER HO */
+ XK_Armenian_ho = 0x1000570, /* U+0570 ARMENIAN SMALL LETTER HO */
+ XK_Armenian_DZA = 0x1000541, /* U+0541 ARMENIAN CAPITAL LETTER JA */
+ XK_Armenian_dza = 0x1000571, /* U+0571 ARMENIAN SMALL LETTER JA */
+ XK_Armenian_GHAT = 0x1000542, /* U+0542 ARMENIAN CAPITAL LETTER GHAD */
+ XK_Armenian_ghat = 0x1000572, /* U+0572 ARMENIAN SMALL LETTER GHAD */
+ XK_Armenian_TCHE = 0x1000543, /* U+0543 ARMENIAN CAPITAL LETTER CHEH */
+ XK_Armenian_tche = 0x1000573, /* U+0573 ARMENIAN SMALL LETTER CHEH */
+ XK_Armenian_MEN = 0x1000544, /* U+0544 ARMENIAN CAPITAL LETTER MEN */
+ XK_Armenian_men = 0x1000574, /* U+0574 ARMENIAN SMALL LETTER MEN */
+ XK_Armenian_HI = 0x1000545, /* U+0545 ARMENIAN CAPITAL LETTER YI */
+ XK_Armenian_hi = 0x1000575, /* U+0575 ARMENIAN SMALL LETTER YI */
+ XK_Armenian_NU = 0x1000546, /* U+0546 ARMENIAN CAPITAL LETTER NOW */
+ XK_Armenian_nu = 0x1000576, /* U+0576 ARMENIAN SMALL LETTER NOW */
+ XK_Armenian_SHA = 0x1000547, /* U+0547 ARMENIAN CAPITAL LETTER SHA */
+ XK_Armenian_sha = 0x1000577, /* U+0577 ARMENIAN SMALL LETTER SHA */
+ XK_Armenian_VO = 0x1000548, /* U+0548 ARMENIAN CAPITAL LETTER VO */
+ XK_Armenian_vo = 0x1000578, /* U+0578 ARMENIAN SMALL LETTER VO */
+ XK_Armenian_CHA = 0x1000549, /* U+0549 ARMENIAN CAPITAL LETTER CHA */
+ XK_Armenian_cha = 0x1000579, /* U+0579 ARMENIAN SMALL LETTER CHA */
+ XK_Armenian_PE = 0x100054a, /* U+054A ARMENIAN CAPITAL LETTER PEH */
+ XK_Armenian_pe = 0x100057a, /* U+057A ARMENIAN SMALL LETTER PEH */
+ XK_Armenian_JE = 0x100054b, /* U+054B ARMENIAN CAPITAL LETTER JHEH */
+ XK_Armenian_je = 0x100057b, /* U+057B ARMENIAN SMALL LETTER JHEH */
+ XK_Armenian_RA = 0x100054c, /* U+054C ARMENIAN CAPITAL LETTER RA */
+ XK_Armenian_ra = 0x100057c, /* U+057C ARMENIAN SMALL LETTER RA */
+ XK_Armenian_SE = 0x100054d, /* U+054D ARMENIAN CAPITAL LETTER SEH */
+ XK_Armenian_se = 0x100057d, /* U+057D ARMENIAN SMALL LETTER SEH */
+ XK_Armenian_VEV = 0x100054e, /* U+054E ARMENIAN CAPITAL LETTER VEW */
+ XK_Armenian_vev = 0x100057e, /* U+057E ARMENIAN SMALL LETTER VEW */
+ XK_Armenian_TYUN = 0x100054f, /* U+054F ARMENIAN CAPITAL LETTER TIWN */
+ XK_Armenian_tyun = 0x100057f, /* U+057F ARMENIAN SMALL LETTER TIWN */
+ XK_Armenian_RE = 0x1000550, /* U+0550 ARMENIAN CAPITAL LETTER REH */
+ XK_Armenian_re = 0x1000580, /* U+0580 ARMENIAN SMALL LETTER REH */
+ XK_Armenian_TSO = 0x1000551, /* U+0551 ARMENIAN CAPITAL LETTER CO */
+ XK_Armenian_tso = 0x1000581, /* U+0581 ARMENIAN SMALL LETTER CO */
+ XK_Armenian_VYUN = 0x1000552, /* U+0552 ARMENIAN CAPITAL LETTER YIWN */
+ XK_Armenian_vyun = 0x1000582, /* U+0582 ARMENIAN SMALL LETTER YIWN */
+ XK_Armenian_PYUR = 0x1000553, /* U+0553 ARMENIAN CAPITAL LETTER PIWR */
+ XK_Armenian_pyur = 0x1000583, /* U+0583 ARMENIAN SMALL LETTER PIWR */
+ XK_Armenian_KE = 0x1000554, /* U+0554 ARMENIAN CAPITAL LETTER KEH */
+ XK_Armenian_ke = 0x1000584, /* U+0584 ARMENIAN SMALL LETTER KEH */
+ XK_Armenian_O = 0x1000555, /* U+0555 ARMENIAN CAPITAL LETTER OH */
+ XK_Armenian_o = 0x1000585, /* U+0585 ARMENIAN SMALL LETTER OH */
+ XK_Armenian_FE = 0x1000556, /* U+0556 ARMENIAN CAPITAL LETTER FEH */
+ XK_Armenian_fe = 0x1000586, /* U+0586 ARMENIAN SMALL LETTER FEH */
+ XK_Armenian_apostrophe = 0x100055a, /* U+055A ARMENIAN APOSTROPHE */
+ XK_Georgian_an = 0x10010d0, /* U+10D0 GEORGIAN LETTER AN */
+ XK_Georgian_ban = 0x10010d1, /* U+10D1 GEORGIAN LETTER BAN */
+ XK_Georgian_gan = 0x10010d2, /* U+10D2 GEORGIAN LETTER GAN */
+ XK_Georgian_don = 0x10010d3, /* U+10D3 GEORGIAN LETTER DON */
+ XK_Georgian_en = 0x10010d4, /* U+10D4 GEORGIAN LETTER EN */
+ XK_Georgian_vin = 0x10010d5, /* U+10D5 GEORGIAN LETTER VIN */
+ XK_Georgian_zen = 0x10010d6, /* U+10D6 GEORGIAN LETTER ZEN */
+ XK_Georgian_tan = 0x10010d7, /* U+10D7 GEORGIAN LETTER TAN */
+ XK_Georgian_in = 0x10010d8, /* U+10D8 GEORGIAN LETTER IN */
+ XK_Georgian_kan = 0x10010d9, /* U+10D9 GEORGIAN LETTER KAN */
+ XK_Georgian_las = 0x10010da, /* U+10DA GEORGIAN LETTER LAS */
+ XK_Georgian_man = 0x10010db, /* U+10DB GEORGIAN LETTER MAN */
+ XK_Georgian_nar = 0x10010dc, /* U+10DC GEORGIAN LETTER NAR */
+ XK_Georgian_on = 0x10010dd, /* U+10DD GEORGIAN LETTER ON */
+ XK_Georgian_par = 0x10010de, /* U+10DE GEORGIAN LETTER PAR */
+ XK_Georgian_zhar = 0x10010df, /* U+10DF GEORGIAN LETTER ZHAR */
+ XK_Georgian_rae = 0x10010e0, /* U+10E0 GEORGIAN LETTER RAE */
+ XK_Georgian_san = 0x10010e1, /* U+10E1 GEORGIAN LETTER SAN */
+ XK_Georgian_tar = 0x10010e2, /* U+10E2 GEORGIAN LETTER TAR */
+ XK_Georgian_un = 0x10010e3, /* U+10E3 GEORGIAN LETTER UN */
+ XK_Georgian_phar = 0x10010e4, /* U+10E4 GEORGIAN LETTER PHAR */
+ XK_Georgian_khar = 0x10010e5, /* U+10E5 GEORGIAN LETTER KHAR */
+ XK_Georgian_ghan = 0x10010e6, /* U+10E6 GEORGIAN LETTER GHAN */
+ XK_Georgian_qar = 0x10010e7, /* U+10E7 GEORGIAN LETTER QAR */
+ XK_Georgian_shin = 0x10010e8, /* U+10E8 GEORGIAN LETTER SHIN */
+ XK_Georgian_chin = 0x10010e9, /* U+10E9 GEORGIAN LETTER CHIN */
+ XK_Georgian_can = 0x10010ea, /* U+10EA GEORGIAN LETTER CAN */
+ XK_Georgian_jil = 0x10010eb, /* U+10EB GEORGIAN LETTER JIL */
+ XK_Georgian_cil = 0x10010ec, /* U+10EC GEORGIAN LETTER CIL */
+ XK_Georgian_char = 0x10010ed, /* U+10ED GEORGIAN LETTER CHAR */
+ XK_Georgian_xan = 0x10010ee, /* U+10EE GEORGIAN LETTER XAN */
+ XK_Georgian_jhan = 0x10010ef, /* U+10EF GEORGIAN LETTER JHAN */
+ XK_Georgian_hae = 0x10010f0, /* U+10F0 GEORGIAN LETTER HAE */
+ XK_Georgian_he = 0x10010f1, /* U+10F1 GEORGIAN LETTER HE */
+ XK_Georgian_hie = 0x10010f2, /* U+10F2 GEORGIAN LETTER HIE */
+ XK_Georgian_we = 0x10010f3, /* U+10F3 GEORGIAN LETTER WE */
+ XK_Georgian_har = 0x10010f4, /* U+10F4 GEORGIAN LETTER HAR */
+ XK_Georgian_hoe = 0x10010f5, /* U+10F5 GEORGIAN LETTER HOE */
+ XK_Georgian_fi = 0x10010f6, /* U+10F6 GEORGIAN LETTER FI */
+ XK_Xabovedot = 0x1001e8a, /* U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE */
+ XK_Ibreve = 0x100012c, /* U+012C LATIN CAPITAL LETTER I WITH BREVE */
+ XK_Zstroke = 0x10001b5, /* U+01B5 LATIN CAPITAL LETTER Z WITH STROKE */
+ XK_Gcaron = 0x10001e6, /* U+01E6 LATIN CAPITAL LETTER G WITH CARON */
+ XK_Ocaron = 0x10001d1, /* U+01D2 LATIN CAPITAL LETTER O WITH CARON */
+ XK_Obarred = 0x100019f, /* U+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE */
+ XK_xabovedot = 0x1001e8b, /* U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE */
+ XK_ibreve = 0x100012d, /* U+012D LATIN SMALL LETTER I WITH BREVE */
+ XK_zstroke = 0x10001b6, /* U+01B6 LATIN SMALL LETTER Z WITH STROKE */
+ XK_gcaron = 0x10001e7, /* U+01E7 LATIN SMALL LETTER G WITH CARON */
+ XK_ocaron = 0x10001d2, /* U+01D2 LATIN SMALL LETTER O WITH CARON */
+ XK_obarred = 0x1000275, /* U+0275 LATIN SMALL LETTER BARRED O */
+ XK_SCHWA = 0x100018f, /* U+018F LATIN CAPITAL LETTER SCHWA */
+ XK_schwa = 0x1000259, /* U+0259 LATIN SMALL LETTER SCHWA */
+ XK_Lbelowdot = 0x1001e36, /* U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW */
+ XK_lbelowdot = 0x1001e37, /* U+1E37 LATIN SMALL LETTER L WITH DOT BELOW */
+ XK_Abelowdot = 0x1001ea0, /* U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW */
+ XK_abelowdot = 0x1001ea1, /* U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW */
+ XK_Ahook = 0x1001ea2, /* U+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE */
+ XK_ahook = 0x1001ea3, /* U+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE */
+ XK_Acircumflexacute = 0x1001ea4, /* U+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */
+ XK_acircumflexacute = 0x1001ea5, /* U+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */
+ XK_Acircumflexgrave = 0x1001ea6, /* U+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */
+ XK_acircumflexgrave = 0x1001ea7, /* U+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */
+ XK_Acircumflexhook = 0x1001ea8, /* U+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
+ XK_acircumflexhook = 0x1001ea9, /* U+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
+ XK_Acircumflextilde = 0x1001eaa, /* U+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */
+ XK_acircumflextilde = 0x1001eab, /* U+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */
+ XK_Acircumflexbelowdot = 0x1001eac, /* U+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
+ XK_acircumflexbelowdot = 0x1001ead, /* U+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
+ XK_Abreveacute = 0x1001eae, /* U+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */
+ XK_abreveacute = 0x1001eaf, /* U+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE */
+ XK_Abrevegrave = 0x1001eb0, /* U+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */
+ XK_abrevegrave = 0x1001eb1, /* U+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE */
+ XK_Abrevehook = 0x1001eb2, /* U+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */
+ XK_abrevehook = 0x1001eb3, /* U+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */
+ XK_Abrevetilde = 0x1001eb4, /* U+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE */
+ XK_abrevetilde = 0x1001eb5, /* U+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE */
+ XK_Abrevebelowdot = 0x1001eb6, /* U+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
+ XK_abrevebelowdot = 0x1001eb7, /* U+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */
+ XK_Ebelowdot = 0x1001eb8, /* U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW */
+ XK_ebelowdot = 0x1001eb9, /* U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW */
+ XK_Ehook = 0x1001eba, /* U+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE */
+ XK_ehook = 0x1001ebb, /* U+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE */
+ XK_Etilde = 0x1001ebc, /* U+1EBC LATIN CAPITAL LETTER E WITH TILDE */
+ XK_etilde = 0x1001ebd, /* U+1EBD LATIN SMALL LETTER E WITH TILDE */
+ XK_Ecircumflexacute = 0x1001ebe, /* U+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */
+ XK_ecircumflexacute = 0x1001ebf, /* U+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */
+ XK_Ecircumflexgrave = 0x1001ec0, /* U+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */
+ XK_ecircumflexgrave = 0x1001ec1, /* U+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */
+ XK_Ecircumflexhook = 0x1001ec2, /* U+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
+ XK_ecircumflexhook = 0x1001ec3, /* U+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
+ XK_Ecircumflextilde = 0x1001ec4, /* U+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */
+ XK_ecircumflextilde = 0x1001ec5, /* U+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */
+ XK_Ecircumflexbelowdot = 0x1001ec6, /* U+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
+ XK_ecircumflexbelowdot = 0x1001ec7, /* U+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
+ XK_Ihook = 0x1001ec8, /* U+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE */
+ XK_ihook = 0x1001ec9, /* U+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE */
+ XK_Ibelowdot = 0x1001eca, /* U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW */
+ XK_ibelowdot = 0x1001ecb, /* U+1ECB LATIN SMALL LETTER I WITH DOT BELOW */
+ XK_Obelowdot = 0x1001ecc, /* U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW */
+ XK_obelowdot = 0x1001ecd, /* U+1ECD LATIN SMALL LETTER O WITH DOT BELOW */
+ XK_Ohook = 0x1001ece, /* U+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE */
+ XK_ohook = 0x1001ecf, /* U+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE */
+ XK_Ocircumflexacute = 0x1001ed0, /* U+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
+ XK_ocircumflexacute = 0x1001ed1, /* U+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */
+ XK_Ocircumflexgrave = 0x1001ed2, /* U+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */
+ XK_ocircumflexgrave = 0x1001ed3, /* U+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */
+ XK_Ocircumflexhook = 0x1001ed4, /* U+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
+ XK_ocircumflexhook = 0x1001ed5, /* U+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
+ XK_Ocircumflextilde = 0x1001ed6, /* U+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */
+ XK_ocircumflextilde = 0x1001ed7, /* U+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */
+ XK_Ocircumflexbelowdot = 0x1001ed8, /* U+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
+ XK_ocircumflexbelowdot = 0x1001ed9, /* U+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
+ XK_Ohornacute = 0x1001eda, /* U+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE */
+ XK_ohornacute = 0x1001edb, /* U+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE */
+ XK_Ohorngrave = 0x1001edc, /* U+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE */
+ XK_ohorngrave = 0x1001edd, /* U+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE */
+ XK_Ohornhook = 0x1001ede, /* U+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */
+ XK_ohornhook = 0x1001edf, /* U+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */
+ XK_Ohorntilde = 0x1001ee0, /* U+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE */
+ XK_ohorntilde = 0x1001ee1, /* U+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE */
+ XK_Ohornbelowdot = 0x1001ee2, /* U+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */
+ XK_ohornbelowdot = 0x1001ee3, /* U+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW */
+ XK_Ubelowdot = 0x1001ee4, /* U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW */
+ XK_ubelowdot = 0x1001ee5, /* U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW */
+ XK_Uhook = 0x1001ee6, /* U+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE */
+ XK_uhook = 0x1001ee7, /* U+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE */
+ XK_Uhornacute = 0x1001ee8, /* U+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE */
+ XK_uhornacute = 0x1001ee9, /* U+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE */
+ XK_Uhorngrave = 0x1001eea, /* U+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE */
+ XK_uhorngrave = 0x1001eeb, /* U+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE */
+ XK_Uhornhook = 0x1001eec, /* U+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */
+ XK_uhornhook = 0x1001eed, /* U+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */
+ XK_Uhorntilde = 0x1001eee, /* U+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE */
+ XK_uhorntilde = 0x1001eef, /* U+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE */
+ XK_Uhornbelowdot = 0x1001ef0, /* U+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */
+ XK_uhornbelowdot = 0x1001ef1, /* U+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW */
+ XK_Ybelowdot = 0x1001ef4, /* U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW */
+ XK_ybelowdot = 0x1001ef5, /* U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW */
+ XK_Yhook = 0x1001ef6, /* U+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE */
+ XK_yhook = 0x1001ef7, /* U+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE */
+ XK_Ytilde = 0x1001ef8, /* U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE */
+ XK_ytilde = 0x1001ef9, /* U+1EF9 LATIN SMALL LETTER Y WITH TILDE */
+ XK_Ohorn = 0x10001a0, /* U+01A0 LATIN CAPITAL LETTER O WITH HORN */
+ XK_ohorn = 0x10001a1, /* U+01A1 LATIN SMALL LETTER O WITH HORN */
+ XK_Uhorn = 0x10001af, /* U+01AF LATIN CAPITAL LETTER U WITH HORN */
+ XK_uhorn = 0x10001b0, /* U+01B0 LATIN SMALL LETTER U WITH HORN */
+ XK_EcuSign = 0x10020a0, /* U+20A0 EURO-CURRENCY SIGN */
+ XK_ColonSign = 0x10020a1, /* U+20A1 COLON SIGN */
+ XK_CruzeiroSign = 0x10020a2, /* U+20A2 CRUZEIRO SIGN */
+ XK_FFrancSign = 0x10020a3, /* U+20A3 FRENCH FRANC SIGN */
+ XK_LiraSign = 0x10020a4, /* U+20A4 LIRA SIGN */
+ XK_MillSign = 0x10020a5, /* U+20A5 MILL SIGN */
+ XK_NairaSign = 0x10020a6, /* U+20A6 NAIRA SIGN */
+ XK_PesetaSign = 0x10020a7, /* U+20A7 PESETA SIGN */
+ XK_RupeeSign = 0x10020a8, /* U+20A8 RUPEE SIGN */
+ XK_WonSign = 0x10020a9, /* U+20A9 WON SIGN */
+ XK_NewSheqelSign = 0x10020aa, /* U+20AA NEW SHEQEL SIGN */
+ XK_DongSign = 0x10020ab, /* U+20AB DONG SIGN */
+ XK_EuroSign = 0x20ac, /* U+20AC EURO SIGN */
}
diff --git a/vendor/x11/xlib/xlib_types.odin b/vendor/x11/xlib/xlib_types.odin
index b5de824e9..5344d9aae 100644
--- a/vendor/x11/xlib/xlib_types.odin
+++ b/vendor/x11/xlib/xlib_types.odin
@@ -47,9 +47,9 @@ XExtCodes :: struct {
}
XPixmapFormatValues :: struct {
- depth: i32,
- bits_per_pixel: i32,
- scanline_pad: i32,
+ depth: i32,
+ bits_per_pixel: i32,
+ scanline_pad: i32,
}
XGCValues :: struct {
@@ -130,47 +130,47 @@ ScreenFormat :: struct {
}
XSetWindowAttributes :: struct {
- background_pixmap: Pixmap,
- background_pixel: uint,
- border_pixmap: Pixmap,
- border_pixel: uint,
- bit_gravity: Gravity,
- win_gravity: Gravity,
- backing_store: BackingStore,
- backing_planes: uint,
- backing_pixel: uint,
- save_under: b32,
- event_mask: EventMask,
- do_not_propagate_mask: EventMask,
- override_redirect: b32,
- colormap: Colormap,
- cursor: Cursor,
+ background_pixmap: Pixmap,
+ background_pixel: uint,
+ border_pixmap: Pixmap,
+ border_pixel: uint,
+ bit_gravity: Gravity,
+ win_gravity: Gravity,
+ backing_store: BackingStore,
+ backing_planes: uint,
+ backing_pixel: uint,
+ save_under: b32,
+ event_mask: EventMask,
+ do_not_propagate_mask: EventMask,
+ override_redirect: b32,
+ colormap: Colormap,
+ cursor: Cursor,
}
XWindowAttributes :: struct {
- x: i32,
- y: i32,
- width: i32,
- height: i32,
- border_width: i32,
- depth: i32,
- visual: ^Visual,
- root: Window,
- class: WindowClass,
- bit_gravity: Gravity,
- win_gravity: Gravity,
- backing_store: BackingStore,
- backing_planes: uint,
- backing_pixel: uint,
- save_under: b32,
- colormap: Colormap,
- map_installed: b32,
- map_state: WindowMapState,
- all_event_masks: EventMask,
- your_event_mask: EventMask,
- do_not_propagate_mask: EventMask,
- override_redirect: b32,
- screen: ^Screen,
+ x: i32,
+ y: i32,
+ width: i32,
+ height: i32,
+ border_width: i32,
+ depth: i32,
+ visual: ^Visual,
+ root: Window,
+ class: WindowClass,
+ bit_gravity: Gravity,
+ win_gravity: Gravity,
+ backing_store: BackingStore,
+ backing_planes: uint,
+ backing_pixel: uint,
+ save_under: b32,
+ colormap: Colormap,
+ map_installed: b32,
+ map_state: WindowMapState,
+ all_event_masks: EventMask,
+ your_event_mask: EventMask,
+ do_not_propagate_mask: EventMask,
+ override_redirect: b32,
+ screen: ^Screen,
}
XHostAddress :: struct {
@@ -187,50 +187,50 @@ XServerInterpretedAddress :: struct {
}
XImage :: struct {
- width: i32,
- height: i32,
- xoffset: i32,
- format: ImageFormat,
- data: rawptr,
- byte_order: i32,
- bitmap_unit: i32,
- bitmap_bit_order: ByteOrder,
- bitmap_pad: i32,
- depth: i32,
- bytes_per_line: i32,
- bits_per_pixel: i32,
- red_mask: uint,
- green_mask: uint,
- blue_mask: uint,
- obdata: rawptr,
- f: struct {
- create_image: proc "c" (
- display: ^Display,
- visual: ^Visual,
- depth: u32,
- format: i32,
- offset: i32,
- data: rawptr,
- width: u32,
- height: u32,
- pad: i32,
- stride: i32) -> ^XImage,
- destroy_image: proc "c" (image: ^XImage) -> i32,
- get_pixel: proc "c" (image: ^XImage) -> uint,
- put_pixel: proc "c" (image: ^XImage, x: i32, y: i32, pixel: uint) -> i32,
- sub_image: proc "c" (image: ^XImage, x: i32, y: i32, w: u32, h: u32) -> ^XImage,
- add_pixel: proc "c" (image: ^XImage, val: int) -> i32,
+ width: i32,
+ height: i32,
+ xoffset: i32,
+ format: ImageFormat,
+ data: rawptr,
+ byte_order: i32,
+ bitmap_unit: i32,
+ bitmap_bit_order: ByteOrder,
+ bitmap_pad: i32,
+ depth: i32,
+ bytes_per_line: i32,
+ bits_per_pixel: i32,
+ red_mask: uint,
+ green_mask: uint,
+ blue_mask: uint,
+ obdata: rawptr,
+ f: struct {
+ create_image: proc "c" (
+ display: ^Display,
+ visual: ^Visual,
+ depth: u32,
+ format: i32,
+ offset: i32,
+ data: rawptr,
+ width: u32,
+ height: u32,
+ pad: i32,
+ stride: i32) -> ^XImage,
+ destroy_image: proc "c" (image: ^XImage) -> i32,
+ get_pixel: proc "c" (image: ^XImage) -> uint,
+ put_pixel: proc "c" (image: ^XImage, x: i32, y: i32, pixel: uint) -> i32,
+ sub_image: proc "c" (image: ^XImage, x: i32, y: i32, w: u32, h: u32) -> ^XImage,
+ add_pixel: proc "c" (image: ^XImage, val: int) -> i32,
},
}
XWindowChanges :: struct {
- x: i32,
- y: i32,
- width: i32,
- height: i32,
- border_width: i32,
- sibling: Window,
- stack_mode: WindowStacking,
+ x: i32,
+ y: i32,
+ width: i32,
+ height: i32,
+ border_width: i32,
+ sibling: Window,
+ stack_mode: WindowStacking,
}
XColor :: struct {
@@ -243,42 +243,42 @@ XColor :: struct {
}
XSegment :: struct {
- x1: i16,
- y1: i16,
- x2: i16,
- y2: i16,
+ x1: i16,
+ y1: i16,
+ x2: i16,
+ y2: i16,
}
XPoint :: struct {
- x: i16,
- y: i16,
+ x: i16,
+ y: i16,
}
XRectangle :: struct {
- x: i16,
- y: i16,
- width: u16,
- height: u16,
+ x: i16,
+ y: i16,
+ width: u16,
+ height: u16,
}
XArc :: struct {
- x: i16,
- y: i16,
- width: u16,
- height: u16,
- angle1: i16,
- angle2: i16,
+ x: i16,
+ y: i16,
+ width: u16,
+ height: u16,
+ angle1: i16,
+ angle2: i16,
}
XKeyboardControl :: struct {
- key_click_percent: i32,
- bell_percent: i32,
- bell_pitch: i32,
- bell_duration: i32,
- led: i32,
- led_mode: KeyboardLedMode,
- key: i32,
- auto_repeat_mode: KeyboardAutoRepeatMode,
+ key_click_percent: i32,
+ bell_percent: i32,
+ bell_pitch: i32,
+ bell_duration: i32,
+ led: i32,
+ led_mode: KeyboardLedMode,
+ key: i32,
+ auto_repeat_mode: KeyboardAutoRepeatMode,
}
XKeyboardState :: struct {
@@ -700,23 +700,23 @@ XAnyEvent :: struct {
}
XGenericEvent :: struct {
- type: EventType,
- serial: uint,
- send_event: b32,
- display: ^Display,
- extension: i32,
- evtype: i32,
+ type: EventType,
+ serial: uint,
+ send_event: b32,
+ display: ^Display,
+ extension: i32,
+ evtype: i32,
}
XGenericEventCookie :: struct {
- type: EventType,
- serial: uint,
- send_event: b32,
- display: ^Display,
- extension: i32,
- evtype: i32,
- cookie: u32,
- data: rawptr,
+ type: EventType,
+ serial: uint,
+ send_event: b32,
+ display: ^Display,
+ extension: i32,
+ evtype: i32,
+ cookie: u32,
+ data: rawptr,
}
XEvent :: struct #raw_union {
@@ -758,55 +758,55 @@ XEvent :: struct #raw_union {
}
XCharStruct :: struct {
- lbearing: i16,
- rbearing: i16,
- width: i16,
- ascent: i16,
- descent: i16,
- attributes: u16,
+ lbearing: i16,
+ rbearing: i16,
+ width: i16,
+ ascent: i16,
+ descent: i16,
+ attributes: u16,
}
XFontProp :: struct {
- name: Atom,
- card32: uint,
+ name: Atom,
+ card32: uint,
}
XFontStruct :: struct {
- ext_data: ^XExtData,
- fid: Font,
- direction: u32,
- min_char_or_byte2: u32,
- max_char_or_byte2: u32,
- min_byte1: u32,
- max_byte1: u32,
- all_chars_exist: i32,
- default_char: u32,
- n_properties: i32,
- properties: ^XFontProp,
- min_bounds: XCharStruct,
- max_bounds: XCharStruct,
- per_char: ^XCharStruct,
- ascent: i32,
- descent: i32,
+ ext_data: ^XExtData,
+ fid: Font,
+ direction: u32,
+ min_char_or_byte2: u32,
+ max_char_or_byte2: u32,
+ min_byte1: u32,
+ max_byte1: u32,
+ all_chars_exist: i32,
+ default_char: u32,
+ n_properties: i32,
+ properties: ^XFontProp,
+ min_bounds: XCharStruct,
+ max_bounds: XCharStruct,
+ per_char: ^XCharStruct,
+ ascent: i32,
+ descent: i32,
}
XTextItem :: struct {
- chars: [^]u8,
- nchars: i32,
- delta: i32,
- font: Font,
+ chars: [^]u8,
+ nchars: i32,
+ delta: i32,
+ font: Font,
}
XChar2b :: struct {
- byte1: u8,
- byte2: u8,
+ byte1: u8,
+ byte2: u8,
}
XTextItem16 :: struct {
- chars: ^XChar2b,
- nchars: i32,
- delta: i32,
- font: Font,
+ chars: ^XChar2b,
+ nchars: i32,
+ delta: i32,
+ font: Font,
}
XEDataObject :: struct #raw_union {
@@ -819,8 +819,8 @@ XEDataObject :: struct #raw_union {
}
XFontSetExtents :: struct {
- max_ink_extent: XRectangle,
- max_logical_extent: XRectangle,
+ max_ink_extent: XRectangle,
+ max_logical_extent: XRectangle,
}
XOM :: distinct rawptr
@@ -828,41 +828,41 @@ XOC :: distinct rawptr
XFontSet :: XOC
XmbTextItem :: struct {
- chars: [^]u8,
- nchars: i32,
- delta: i32,
- font_set: XFontSet,
+ chars: [^]u8,
+ nchars: i32,
+ delta: i32,
+ font_set: XFontSet,
}
XwcTextItem :: struct {
- chars: [^]rune,
- nchars: i32,
- delta: i32,
- font_set: XFontSet,
+ chars: [^]rune,
+ nchars: i32,
+ delta: i32,
+ font_set: XFontSet,
}
XOMCharSetList :: struct {
- charset_count: i32,
- charset_list: [^]cstring,
+ charset_count: i32,
+ charset_list: [^]cstring,
}
XOrientation :: enum i32 {
- XOMOrientation_LTR_TTB = 0,
- XOMOrientation_RTL_TTB = 1,
- XOMOrientation_TTB_LTR = 2,
- XOMOrientation_TTB_RTL = 3,
- XOMOrientation_Context = 4,
+ XOMOrientation_LTR_TTB = 0,
+ XOMOrientation_RTL_TTB = 1,
+ XOMOrientation_TTB_LTR = 2,
+ XOMOrientation_TTB_RTL = 3,
+ XOMOrientation_Context = 4,
}
XOMOrientation :: struct {
- num_orientation: i32,
- orientation: [^]XOrientation,
+ num_orientation: i32,
+ orientation: [^]XOrientation,
}
XOMFontInfo :: struct {
- num_font: i32,
- font_struct_list: [^]^XFontStruct,
- font_name_list: [^]cstring,
+ num_font: i32,
+ font_struct_list: [^]^XFontStruct,
+ font_name_list: [^]cstring,
}
XIM :: distinct rawptr
@@ -875,38 +875,38 @@ XIDProc :: #type proc "c" (xim: XIM, client_data: rawptr, call_data: rawptr)
XIMStyle :: uint
XIMStyles :: struct {
- count_styles: u16,
- supported_styles: [^]XIMStyle,
+ count_styles: u16,
+ supported_styles: [^]XIMStyle,
}
XVaNestedList :: distinct rawptr
XIMCallback :: struct {
- client_data: rawptr,
- callback: XIMProc,
+ client_data: rawptr,
+ callback: XIMProc,
}
XICCallback :: struct {
- client_data: rawptr,
- callback: XICProc,
+ client_data: rawptr,
+ callback: XICProc,
}
XIMFeedback :: uint
XIMText :: struct {
- length: u16,
- feedback: ^XIMFeedback,
- encoding_is_wchar: b32,
- string: struct #raw_union {
+ length: u16,
+ feedback: ^XIMFeedback,
+ encoding_is_wchar: b32,
+ string: struct #raw_union {
multi_byte: [^]u8,
wide_char: [^]rune,
- },
+ },
}
XIMPreeditState :: uint
XIMPreeditStateNotifyCallbackStruct :: struct {
- state: XIMPreeditState,
+ state: XIMPreeditState,
}
XIMResetState :: uint
@@ -914,13 +914,13 @@ XIMResetState :: uint
XIMStringConversionFeedback :: uint
XIMStringConversionText :: struct {
- length: u16,
- feedback: ^XIMStringConversionFeedback,
- encoding_is_wchar: b32,
- string: struct #raw_union {
+ length: u16,
+ feedback: ^XIMStringConversionFeedback,
+ encoding_is_wchar: b32,
+ string: struct #raw_union {
mbs: [^]u8,
wcs: [^]rune,
- },
+ },
}
XIMStringConversionPosition :: u16
@@ -928,76 +928,76 @@ XIMStringConversionType :: u16
XIMStringConversionOperation :: u16
XIMCaretDirection :: enum i32 {
- XIMForwardChar = 0,
- XIMBackwardChar = 1,
- XIMForwardWord = 2,
- XIMBackwardWord = 3,
- XIMCaretUp = 4,
- XIMCaretDown = 5,
- XIMNextLine = 6,
- XIMPreviousLine = 7,
- XIMLineStart = 8,
- XIMLineEnd = 9,
- XIMAbsolutePosition = 10,
- XIMDontChang = 11,
+ XIMForwardChar = 0,
+ XIMBackwardChar = 1,
+ XIMForwardWord = 2,
+ XIMBackwardWord = 3,
+ XIMCaretUp = 4,
+ XIMCaretDown = 5,
+ XIMNextLine = 6,
+ XIMPreviousLine = 7,
+ XIMLineStart = 8,
+ XIMLineEnd = 9,
+ XIMAbsolutePosition = 10,
+ XIMDontChang = 11,
}
XIMStringConversionCallbackStruct :: struct {
- position: XIMStringConversionPosition,
- direction: XIMCaretDirection,
- operation: XIMStringConversionOperation,
- factor: u16,
- text: ^XIMStringConversionText,
+ position: XIMStringConversionPosition,
+ direction: XIMCaretDirection,
+ operation: XIMStringConversionOperation,
+ factor: u16,
+ text: ^XIMStringConversionText,
}
XIMPreeditDrawCallbackStruct :: struct {
- caret: i32,
- chg_first: i32,
- chg_length: i32,
- text: ^XIMText,
+ caret: i32,
+ chg_first: i32,
+ chg_length: i32,
+ text: ^XIMText,
}
XIMCaretStyle :: enum i32 {
- XIMIsInvisible,
- XIMIsPrimary,
- XIMIsSecondary,
+ XIMIsInvisible,
+ XIMIsPrimary,
+ XIMIsSecondary,
}
XIMPreeditCaretCallbackStruct :: struct {
- position: i32,
- direction: XIMCaretDirection,
- style: XIMCaretStyle,
+ position: i32,
+ direction: XIMCaretDirection,
+ style: XIMCaretStyle,
}
XIMStatusDataType :: enum {
- XIMTextType,
- XIMBitmapType,
+ XIMTextType,
+ XIMBitmapType,
}
XIMStatusDrawCallbackStruct :: struct {
- type: XIMStatusDataType,
- data: struct #raw_union {
+ type: XIMStatusDataType,
+ data: struct #raw_union {
text: ^XIMText,
bitmap: Pixmap,
- },
+ },
}
XIMHotKeyTrigger :: struct {
- keysym: KeySym,
- modifier: i32,
- modifier_mask: i32,
+ keysym: KeySym,
+ modifier: i32,
+ modifier_mask: i32,
}
XIMHotKeyTriggers :: struct {
- num_hot_key: i32,
- key: [^]XIMHotKeyTrigger,
+ num_hot_key: i32,
+ key: [^]XIMHotKeyTrigger,
}
XIMHotKeyState :: uint
XIMValuesList :: struct {
- count_values: u16,
- supported_values: [^]cstring,
+ count_values: u16,
+ supported_values: [^]cstring,
}
XConnectionWatchProc :: #type proc "c" (
@@ -1775,62 +1775,62 @@ XcmsColorFormat :: uint
XcmsFloat :: f64
XcmsRGB :: struct {
- red: u16,
- green: u16,
- blue: u16,
+ red: u16,
+ green: u16,
+ blue: u16,
}
XcmsRGBi :: struct {
- red: XcmsFloat,
- green: XcmsFloat,
- blue: XcmsFloat,
+ red: XcmsFloat,
+ green: XcmsFloat,
+ blue: XcmsFloat,
}
XcmsCIEXYZ :: struct {
- X: XcmsFloat,
- Y: XcmsFloat,
- Z: XcmsFloat,
+ X: XcmsFloat,
+ Y: XcmsFloat,
+ Z: XcmsFloat,
}
XcmsCIEuvY :: struct {
- u_prime: XcmsFloat,
- v_prime: XcmsFloat,
- Y: XcmsFloat,
+ u_prime: XcmsFloat,
+ v_prime: XcmsFloat,
+ Y: XcmsFloat,
}
XcmsCIExyY :: struct {
- x: XcmsFloat,
- y: XcmsFloat,
- Y: XcmsFloat,
+ x: XcmsFloat,
+ y: XcmsFloat,
+ Y: XcmsFloat,
}
XcmsCIELab :: struct {
- L_star: XcmsFloat,
- a_star: XcmsFloat,
- b_star: XcmsFloat,
+ L_star: XcmsFloat,
+ a_star: XcmsFloat,
+ b_star: XcmsFloat,
}
XcmsCIELuv :: struct {
- L_star: XcmsFloat,
- u_star: XcmsFloat,
- v_star: XcmsFloat,
+ L_star: XcmsFloat,
+ u_star: XcmsFloat,
+ v_star: XcmsFloat,
}
XcmsTekHVC :: struct {
- H: XcmsFloat,
- V: XcmsFloat,
- C: XcmsFloat,
+ H: XcmsFloat,
+ V: XcmsFloat,
+ C: XcmsFloat,
}
XcmsPad :: struct {
- _: XcmsFloat,
- _: XcmsFloat,
- _: XcmsFloat,
- _: XcmsFloat,
+ _: XcmsFloat,
+ _: XcmsFloat,
+ _: XcmsFloat,
+ _: XcmsFloat,
}
XcmsColor :: struct {
- spec: struct #raw_union {
+ spec: struct #raw_union {
RGB: XcmsRGB,
RGBi: XcmsRGBi,
CIEXYZ: XcmsCIEXYZ,
@@ -1840,17 +1840,17 @@ XcmsColor :: struct {
CIELuv: XcmsCIELuv,
TekHVC: XcmsTekHVC,
_: XcmsPad,
- },
- pixel: uint,
- format: XcmsColorFormat,
+ },
+ pixel: uint,
+ format: XcmsColorFormat,
}
XcmsPerScrnInfo :: struct {
- screenWhitePt: XcmsColor,
- functionSet: rawptr,
- screenData: rawptr,
- state: u8,
- _: [3]u8,
+ screenWhitePt: XcmsColor,
+ functionSet: rawptr,
+ screenData: rawptr,
+ state: u8,
+ _: [3]u8,
}
XcmsCCC :: distinct rawptr
@@ -1872,15 +1872,15 @@ XcmsWhiteAdjustProc :: #type proc "c" (
compression: [^]b32) -> Status
XcmsCCCRec :: struct {
- dpy: ^Display,
- screenNumber: i32,
- visual: ^Visual,
- clientWhitePt: XcmsColor,
- gamutCompProc: XcmsCompressionProc,
- gamutCompClientData: rawptr,
- whitePtAdjProc: XcmsWhiteAdjustProc,
- whitePtAdjClientData: rawptr,
- pPerScrnInfo: ^XcmsPerScrnInfo,
+ dpy: ^Display,
+ screenNumber: i32,
+ visual: ^Visual,
+ clientWhitePt: XcmsColor,
+ gamutCompProc: XcmsCompressionProc,
+ gamutCompClientData: rawptr,
+ whitePtAdjProc: XcmsWhiteAdjustProc,
+ whitePtAdjClientData: rawptr,
+ pPerScrnInfo: ^XcmsPerScrnInfo,
}
XcmsScreenInitProc :: #type proc "c" (
@@ -1909,18 +1909,18 @@ XcmsFuncListPtr :: [^]XcmsConversionProc
XcmsParseStringProc :: #type proc "c" (color_string: cstring, color: ^XcmsColor) -> i32
XcmsColorSpace :: struct {
- prefix: cstring,
- id: XcmsColorFormat,
- parseString: XcmsParseStringProc,
- to_CIEXYZ: XcmsFuncListPtr,
- from_CIEXYZ: XcmsFuncListPtr,
- inverse_flag: i32,
+ prefix: cstring,
+ id: XcmsColorFormat,
+ parseString: XcmsParseStringProc,
+ to_CIEXYZ: XcmsFuncListPtr,
+ from_CIEXYZ: XcmsFuncListPtr,
+ inverse_flag: i32,
}
XcmsFunctionSet :: struct {
- DDColorSpaces: [^]^XcmsColorSpace,
- screenInitProc: XcmsScreenInitProc,
- screenFreeProc: XcmsScreenFreeProc,
+ DDColorSpaces: [^]^XcmsColorSpace,
+ screenInitProc: XcmsScreenInitProc,
+ screenFreeProc: XcmsScreenFreeProc,
}
@@ -1958,18 +1958,18 @@ XWMHints :: struct {
}
XTextProperty :: struct {
- value: [^]u8,
- encoding: Atom,
- format: int,
- nitems: uint,
+ value: [^]u8,
+ encoding: Atom,
+ format: int,
+ nitems: uint,
}
XICCEncodingStyle :: enum i32 {
- XStringStyle,
- XCompoundTextStyle,
- XTextStyle,
- XStdICCTextStyle,
- XUTF8StringStyle,
+ XStringStyle,
+ XCompoundTextStyle,
+ XTextStyle,
+ XStdICCTextStyle,
+ XUTF8StringStyle,
}
XIconSize :: struct {
@@ -1987,8 +1987,8 @@ XClassHint :: struct {
}
XComposeStatus :: struct {
- compose_ptr: rawptr,
- chars_matched: i32,
+ compose_ptr: rawptr,
+ chars_matched: i32,
}
Region :: distinct rawptr
@@ -2041,8 +2041,8 @@ XrmClassList :: XrmQuarkList
XrmRepresentation :: XrmQuark
XrmValue :: struct {
- size: u32,
- addr: rawptr,
+ size: u32,
+ addr: rawptr,
}
XrmValuePtr :: [^]XrmValue
@@ -2052,21 +2052,21 @@ XrmSearchList :: [^]XrmHashTable
XrmDatabase :: distinct rawptr
XrmOptionKind :: enum {
- XrmoptionNoArg,
- XrmoptionIsArg,
- XrmoptionStickyArg,
- XrmoptionSepArg,
- XrmoptionResArg,
- XrmoptionSkipArg,
- XrmoptionSkipLine,
- XrmoptionSkipNArgs,
+ XrmoptionNoArg,
+ XrmoptionIsArg,
+ XrmoptionStickyArg,
+ XrmoptionSepArg,
+ XrmoptionResArg,
+ XrmoptionSkipArg,
+ XrmoptionSkipLine,
+ XrmoptionSkipNArgs,
}
XrmOptionDescRec :: struct {
- option: cstring,
- specifier: cstring,
- argKind: XrmOptionKind,
- value: rawptr,
+ option: cstring,
+ specifier: cstring,
+ argKind: XrmOptionKind,
+ value: rawptr,
}
XrmOptionDescList :: [^]XrmOptionDescRec