mirror of
https://github.com/Ed94/Odin.git
synced 2026-07-30 19:30:06 +00:00
Merge branch 'master' into netbsd
This commit is contained in:
@@ -469,12 +469,15 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
|
||||
case: panic("Invalid union tag type")
|
||||
}
|
||||
|
||||
if v.data == nil || tag == 0 {
|
||||
io.write_string(w, "null") or_return
|
||||
} else {
|
||||
id := info.variants[tag-1].id
|
||||
return marshal_to_writer(w, any{v.data, id}, opt)
|
||||
if !info.no_nil {
|
||||
if tag == 0 {
|
||||
io.write_string(w, "null") or_return
|
||||
return nil
|
||||
}
|
||||
tag -= 1
|
||||
}
|
||||
id := info.variants[tag].id
|
||||
return marshal_to_writer(w, any{v.data, id}, opt)
|
||||
|
||||
case runtime.Type_Info_Enum:
|
||||
if !opt.use_enum_names || len(info.names) == 0 {
|
||||
|
||||
+18
-15
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
package fmt implemented formatted I/O with procedures similar to C's printf and Python's format.
|
||||
package fmt implements formatted I/O with procedures similar to C's printf and Python's format.
|
||||
The format 'verbs' are derived from C's but simpler.
|
||||
|
||||
Printing
|
||||
@@ -33,6 +33,8 @@ Floating-point, complex numbers, and quaternions:
|
||||
%E scientific notation, e.g. -1.23456E+78
|
||||
%f decimal point but no exponent, e.g. 123.456
|
||||
%F synonym for %f
|
||||
%g synonym for %f with default maximum precision
|
||||
%G synonym for %g
|
||||
%h hexadecimal (lower-case) representation with 0h prefix (0h01234abcd)
|
||||
%H hexadecimal (upper-case) representation with 0H prefix (0h01234ABCD)
|
||||
%m number of bytes in the best unit of measurement, e.g. 123.45mib
|
||||
@@ -61,9 +63,9 @@ For compound values, the elements are printed using these rules recursively; lai
|
||||
bit sets {key0 = elem0, key1 = elem1, ...}
|
||||
pointer to above: &{}, &[], &map[]
|
||||
|
||||
Width is specified by an optional decimal number immediately preceding the verb.
|
||||
Width is specified by an optional decimal number immediately after the '%'.
|
||||
If not present, the width is whatever is necessary to represent the value.
|
||||
Precision is specified after the (optional) width followed by a period followed by a decimal number.
|
||||
Precision is specified after the (optional) width by a period followed by a decimal number.
|
||||
If no period is present, a default precision is used.
|
||||
A period with no following number specifies a precision of 0.
|
||||
|
||||
@@ -75,7 +77,7 @@ Examples:
|
||||
%8.f width 8, precision 0
|
||||
|
||||
Width and precision are measured in units of Unicode code points (runes).
|
||||
n.b. C's printf uses units of bytes
|
||||
n.b. C's printf uses units of bytes.
|
||||
|
||||
|
||||
Other flags:
|
||||
@@ -92,7 +94,7 @@ Other flags:
|
||||
0 pad with leading zeros rather than spaces
|
||||
|
||||
|
||||
Flags are ignored by verbs that don't expect them
|
||||
Flags are ignored by verbs that don't expect them.
|
||||
|
||||
|
||||
For each printf-like procedure, there is a print function that takes no
|
||||
@@ -105,19 +107,20 @@ Explicit argument indices:
|
||||
In printf-like procedures, the default behaviour is for each formatting verb to format successive
|
||||
arguments passed in the call. However, the notation [n] immediately before the verb indicates that
|
||||
the nth zero-index argument is to be formatted instead.
|
||||
The same notation before an '*' for a width or precision selecting the argument index holding the value.
|
||||
Python-like syntax with argument indices differs for the selecting the argument index: {N:v}
|
||||
The same notation before an '*' for a width or precision specifier selects the argument index
|
||||
holding the value.
|
||||
Python-like syntax with argument indices differs for selecting the argument index: {n:v}
|
||||
|
||||
Examples:
|
||||
fmt.printf("%[1]d %[0]d\n", 13, 37); // C-like syntax
|
||||
fmt.printf("{1:d} {0:d}\n", 13, 37); // Python-like syntax
|
||||
fmt.printfln("%[1]d %[0]d", 13, 37) // C-like syntax
|
||||
fmt.printfln("{1:d} {0:d}", 13, 37) // Python-like syntax
|
||||
prints "37 13", whilst:
|
||||
fmt.printf("%[2]*.[1]*[0]f\n", 17.0, 2, 6); // C-like syntax
|
||||
fmt.printf("%{0:[2]*.[1]*f}\n", 17.0, 2, 6); // Python-like syntax
|
||||
equivalent to:
|
||||
fmt.printf("%6.2f\n", 17.0, 2, 6); // C-like syntax
|
||||
fmt.printf("{:6.2f}\n", 17.0, 2, 6); // Python-like syntax
|
||||
prints "17.00"
|
||||
fmt.printfln("%*[2].*[1][0]f", 17.0, 2, 6) // C-like syntax
|
||||
fmt.printfln("{0:*[2].*[1]f}", 17.0, 2, 6) // Python-like syntax
|
||||
is equivalent to:
|
||||
fmt.printfln("%6.2f", 17.0) // C-like syntax
|
||||
fmt.printfln("{:6.2f}", 17.0) // Python-like syntax
|
||||
and prints "17.00".
|
||||
|
||||
Format errors:
|
||||
|
||||
|
||||
+156
-191
@@ -25,8 +25,6 @@ Info :: struct {
|
||||
prec: int,
|
||||
indent: int,
|
||||
|
||||
reordered: bool,
|
||||
good_arg_index: bool,
|
||||
ignore_user_formatters: bool,
|
||||
in_bad: bool,
|
||||
|
||||
@@ -527,13 +525,107 @@ wprintln :: proc(w: io.Writer, args: ..any, sep := " ", flush := true) -> int {
|
||||
// Returns: The number of bytes written
|
||||
//
|
||||
wprintf :: proc(w: io.Writer, fmt: string, args: ..any, flush := true, newline := false) -> int {
|
||||
MAX_CHECKED_ARGS :: 64
|
||||
assert(len(args) <= MAX_CHECKED_ARGS, "number of args > 64 is unsupported")
|
||||
|
||||
parse_options :: proc(fi: ^Info, fmt: string, index, end: int, unused_args: ^bit_set[0 ..< MAX_CHECKED_ARGS], args: ..any) -> int {
|
||||
i := index
|
||||
|
||||
// Prefix
|
||||
prefix_loop: for ; i < end; i += 1 {
|
||||
switch fmt[i] {
|
||||
case '+':
|
||||
fi.plus = true
|
||||
case '-':
|
||||
fi.minus = true
|
||||
fi.zero = false
|
||||
case ' ':
|
||||
fi.space = true
|
||||
case '#':
|
||||
fi.hash = true
|
||||
case '0':
|
||||
fi.zero = !fi.minus
|
||||
case:
|
||||
break prefix_loop
|
||||
}
|
||||
}
|
||||
|
||||
// Width
|
||||
if i < end && fmt[i] == '*' {
|
||||
i += 1
|
||||
width_index, _, index_ok := _arg_number(fmt, &i, len(args))
|
||||
|
||||
if index_ok {
|
||||
unused_args^ -= {width_index}
|
||||
|
||||
fi.width, _, fi.width_set = int_from_arg(args, width_index)
|
||||
if !fi.width_set {
|
||||
io.write_string(fi.writer, "%!(BAD WIDTH)", &fi.n)
|
||||
}
|
||||
|
||||
if fi.width < 0 {
|
||||
fi.width = -fi.width
|
||||
fi.minus = true
|
||||
fi.zero = false
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fi.width, i, fi.width_set = _parse_int(fmt, i)
|
||||
}
|
||||
|
||||
// Precision
|
||||
if i < end && fmt[i] == '.' {
|
||||
i += 1
|
||||
if i < end && fmt[i] == '*' {
|
||||
i += 1
|
||||
precision_index, _, index_ok := _arg_number(fmt, &i, len(args))
|
||||
|
||||
if index_ok {
|
||||
unused_args^ -= {precision_index}
|
||||
fi.prec, _, fi.prec_set = int_from_arg(args, precision_index)
|
||||
if fi.prec < 0 {
|
||||
fi.prec = 0
|
||||
fi.prec_set = false
|
||||
}
|
||||
if !fi.prec_set {
|
||||
io.write_string(fi.writer, "%!(BAD PRECISION)", &fi.n)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
prev_i := i
|
||||
fi.prec, i, fi.prec_set = _parse_int(fmt, i)
|
||||
if i == prev_i {
|
||||
fi.prec = 0
|
||||
fi.prec_set = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return i
|
||||
}
|
||||
|
||||
error_check_arg :: proc(fi: ^Info, arg_parsed: bool, unused_args: bit_set[0 ..< MAX_CHECKED_ARGS]) -> (int, bool) {
|
||||
if !arg_parsed {
|
||||
for index in unused_args {
|
||||
return index, true
|
||||
}
|
||||
io.write_string(fi.writer, "%!(MISSING ARGUMENT)", &fi.n)
|
||||
} else {
|
||||
io.write_string(fi.writer, "%!(BAD ARGUMENT NUMBER)", &fi.n)
|
||||
}
|
||||
|
||||
return 0, false
|
||||
}
|
||||
|
||||
fi: Info
|
||||
arg_index: int = 0
|
||||
end := len(fmt)
|
||||
was_prev_index := false
|
||||
unused_args: bit_set[0 ..< MAX_CHECKED_ARGS]
|
||||
for i in 0 ..< len(args) {
|
||||
unused_args += {i}
|
||||
}
|
||||
|
||||
loop: for i := 0; i < end; /**/ {
|
||||
fi = Info{writer = w, good_arg_index = true, reordered = fi.reordered, n = fi.n}
|
||||
fi = Info{writer = w, n = fi.n}
|
||||
|
||||
prev_i := i
|
||||
for i < end && !(fmt[i] == '%' || fmt[i] == '{' || fmt[i] == '}') {
|
||||
@@ -567,191 +659,65 @@ wprintf :: proc(w: io.Writer, fmt: string, args: ..any, flush := true, newline :
|
||||
}
|
||||
|
||||
if char == '%' {
|
||||
prefix_loop: for ; i < end; i += 1 {
|
||||
switch fmt[i] {
|
||||
case '+':
|
||||
fi.plus = true
|
||||
case '-':
|
||||
fi.minus = true
|
||||
fi.zero = false
|
||||
case ' ':
|
||||
fi.space = true
|
||||
case '#':
|
||||
fi.hash = true
|
||||
case '0':
|
||||
fi.zero = !fi.minus
|
||||
case:
|
||||
break prefix_loop
|
||||
}
|
||||
}
|
||||
|
||||
arg_index, i, was_prev_index = _arg_number(&fi, arg_index, fmt, i, len(args))
|
||||
|
||||
// Width
|
||||
if i < end && fmt[i] == '*' {
|
||||
if i < end && fmt[i] == '%' {
|
||||
io.write_byte(fi.writer, '%', &fi.n)
|
||||
i += 1
|
||||
fi.width, arg_index, fi.width_set = int_from_arg(args, arg_index)
|
||||
if !fi.width_set {
|
||||
io.write_string(w, "%!(BAD WIDTH)", &fi.n)
|
||||
}
|
||||
|
||||
if fi.width < 0 {
|
||||
fi.width = -fi.width
|
||||
fi.minus = true
|
||||
fi.zero = false
|
||||
}
|
||||
was_prev_index = false
|
||||
} else {
|
||||
fi.width, i, fi.width_set = _parse_int(fmt, i)
|
||||
if was_prev_index && fi.width_set { // %[6]2d
|
||||
fi.good_arg_index = false
|
||||
}
|
||||
continue loop
|
||||
}
|
||||
|
||||
// Precision
|
||||
if i < end && fmt[i] == '.' {
|
||||
i += 1
|
||||
if was_prev_index { // %[6].2d
|
||||
fi.good_arg_index = false
|
||||
}
|
||||
if i < end && fmt[i] == '*' {
|
||||
arg_index, i, was_prev_index = _arg_number(&fi, arg_index, fmt, i, len(args))
|
||||
i += 1
|
||||
fi.prec, arg_index, fi.prec_set = int_from_arg(args, arg_index)
|
||||
if fi.prec < 0 {
|
||||
fi.prec = 0
|
||||
fi.prec_set = false
|
||||
}
|
||||
if !fi.prec_set {
|
||||
io.write_string(fi.writer, "%!(BAD PRECISION)", &fi.n)
|
||||
}
|
||||
was_prev_index = false
|
||||
} else {
|
||||
fi.prec, i, fi.prec_set = _parse_int(fmt, i)
|
||||
}
|
||||
}
|
||||
i = parse_options(&fi, fmt, i, end, &unused_args, ..args)
|
||||
|
||||
if !was_prev_index {
|
||||
arg_index, i, was_prev_index = _arg_number(&fi, arg_index, fmt, i, len(args))
|
||||
arg_index, arg_parsed, index_ok := _arg_number(fmt, &i, len(args))
|
||||
|
||||
if !index_ok {
|
||||
arg_index, index_ok = error_check_arg(&fi, arg_parsed, unused_args)
|
||||
}
|
||||
|
||||
if i >= end {
|
||||
io.write_string(fi.writer, "%!(NO VERB)", &fi.n)
|
||||
break loop
|
||||
} else if fmt[i] == ' ' {
|
||||
io.write_string(fi.writer, "%!(NO VERB)", &fi.n)
|
||||
continue loop
|
||||
}
|
||||
|
||||
verb, w := utf8.decode_rune_in_string(fmt[i:])
|
||||
i += w
|
||||
|
||||
switch {
|
||||
case verb == '%':
|
||||
io.write_byte(fi.writer, '%', &fi.n)
|
||||
case !fi.good_arg_index:
|
||||
io.write_string(fi.writer, "%!(BAD ARGUMENT NUMBER)", &fi.n)
|
||||
case arg_index >= len(args):
|
||||
io.write_string(fi.writer, "%!(MISSING ARGUMENT)", &fi.n)
|
||||
case:
|
||||
if index_ok {
|
||||
unused_args -= {arg_index}
|
||||
fmt_arg(&fi, args[arg_index], verb)
|
||||
arg_index += 1
|
||||
}
|
||||
|
||||
|
||||
} else if char == '{' {
|
||||
arg_index: int
|
||||
arg_parsed, index_ok: bool
|
||||
|
||||
if i < end && fmt[i] != '}' && fmt[i] != ':' {
|
||||
new_arg_index, new_i, ok := _parse_int(fmt, i)
|
||||
if ok {
|
||||
fi.reordered = true
|
||||
was_prev_index = true
|
||||
arg_index = new_arg_index
|
||||
i = new_i
|
||||
} else {
|
||||
io.write_string(fi.writer, "%!(BAD ARGUMENT NUMBER ", &fi.n)
|
||||
// Skip over the bad argument
|
||||
start_index := i
|
||||
for i < end && fmt[i] != '}' && fmt[i] != ':' {
|
||||
i += 1
|
||||
}
|
||||
fmt_arg(&fi, fmt[start_index:i], 'v')
|
||||
io.write_string(fi.writer, ")", &fi.n)
|
||||
arg_index, i, arg_parsed = _parse_int(fmt, i)
|
||||
if arg_parsed {
|
||||
index_ok = 0 <= arg_index && arg_index < len(args)
|
||||
}
|
||||
}
|
||||
|
||||
if !index_ok {
|
||||
arg_index, index_ok = error_check_arg(&fi, arg_parsed, unused_args)
|
||||
}
|
||||
|
||||
verb: rune = 'v'
|
||||
|
||||
if i < end && fmt[i] == ':' {
|
||||
i += 1
|
||||
prefix_loop_percent: for ; i < end; i += 1 {
|
||||
switch fmt[i] {
|
||||
case '+':
|
||||
fi.plus = true
|
||||
case '-':
|
||||
fi.minus = true
|
||||
fi.zero = false
|
||||
case ' ':
|
||||
fi.space = true
|
||||
case '#':
|
||||
fi.hash = true
|
||||
case '0':
|
||||
fi.zero = !fi.minus
|
||||
case:
|
||||
break prefix_loop_percent
|
||||
}
|
||||
}
|
||||
|
||||
arg_index, i, was_prev_index = _arg_number(&fi, arg_index, fmt, i, len(args))
|
||||
|
||||
// Width
|
||||
if i < end && fmt[i] == '*' {
|
||||
i += 1
|
||||
fi.width, arg_index, fi.width_set = int_from_arg(args, arg_index)
|
||||
if !fi.width_set {
|
||||
io.write_string(fi.writer, "%!(BAD WIDTH)", &fi.n)
|
||||
}
|
||||
|
||||
if fi.width < 0 {
|
||||
fi.width = -fi.width
|
||||
fi.minus = true
|
||||
fi.zero = false
|
||||
}
|
||||
was_prev_index = false
|
||||
} else {
|
||||
fi.width, i, fi.width_set = _parse_int(fmt, i)
|
||||
if was_prev_index && fi.width_set { // %[6]2d
|
||||
fi.good_arg_index = false
|
||||
}
|
||||
}
|
||||
|
||||
// Precision
|
||||
if i < end && fmt[i] == '.' {
|
||||
i += 1
|
||||
if was_prev_index { // %[6].2d
|
||||
fi.good_arg_index = false
|
||||
}
|
||||
if i < end && fmt[i] == '*' {
|
||||
arg_index, i, was_prev_index = _arg_number(&fi, arg_index, fmt, i, len(args))
|
||||
i += 1
|
||||
fi.prec, arg_index, fi.prec_set = int_from_arg(args, arg_index)
|
||||
if fi.prec < 0 {
|
||||
fi.prec = 0
|
||||
fi.prec_set = false
|
||||
}
|
||||
if !fi.prec_set {
|
||||
io.write_string(fi.writer, "%!(BAD PRECISION)", &fi.n)
|
||||
}
|
||||
was_prev_index = false
|
||||
} else {
|
||||
fi.prec, i, fi.prec_set = _parse_int(fmt, i)
|
||||
}
|
||||
}
|
||||
|
||||
if !was_prev_index {
|
||||
arg_index, i, was_prev_index = _arg_number(&fi, arg_index, fmt, i, len(args))
|
||||
}
|
||||
|
||||
i = parse_options(&fi, fmt, i, end, &unused_args, ..args)
|
||||
|
||||
if i >= end {
|
||||
io.write_string(fi.writer, "%!(NO VERB)", &fi.n)
|
||||
break loop
|
||||
} else if fmt[i] == '}' {
|
||||
i += 1
|
||||
io.write_string(fi.writer, "%!(NO VERB)", &fi.n)
|
||||
continue
|
||||
}
|
||||
|
||||
w: int = 1
|
||||
@@ -770,31 +736,35 @@ wprintf :: proc(w: io.Writer, fmt: string, args: ..any, flush := true, newline :
|
||||
switch {
|
||||
case brace != '}':
|
||||
io.write_string(fi.writer, "%!(MISSING CLOSE BRACE)", &fi.n)
|
||||
case !fi.good_arg_index:
|
||||
io.write_string(fi.writer, "%!(BAD ARGUMENT NUMBER)", &fi.n)
|
||||
case arg_index >= len(args):
|
||||
io.write_string(fi.writer, "%!(MISSING ARGUMENT)", &fi.n)
|
||||
case:
|
||||
case index_ok:
|
||||
fmt_arg(&fi, args[arg_index], verb)
|
||||
arg_index += 1
|
||||
unused_args -= {arg_index}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if !fi.reordered && arg_index < len(args) {
|
||||
io.write_string(fi.writer, "%!(EXTRA ", &fi.n)
|
||||
for arg, index in args[arg_index:] {
|
||||
if index > 0 {
|
||||
io.write_string(fi.writer, ", ", &fi.n)
|
||||
if unused_args != {} {
|
||||
// Use default options when formatting extra arguments.
|
||||
extra_fi := Info { writer = fi.writer, n = fi.n }
|
||||
|
||||
io.write_string(extra_fi.writer, "%!(EXTRA ", &extra_fi.n)
|
||||
first_printed := false
|
||||
for index in unused_args {
|
||||
if first_printed {
|
||||
io.write_string(extra_fi.writer, ", ", &extra_fi.n)
|
||||
}
|
||||
|
||||
arg := args[index]
|
||||
if arg == nil {
|
||||
io.write_string(fi.writer, "<nil>", &fi.n)
|
||||
io.write_string(extra_fi.writer, "<nil>", &extra_fi.n)
|
||||
} else {
|
||||
fmt_arg(&fi, args[index], 'v')
|
||||
fmt_arg(&extra_fi, arg, 'v')
|
||||
}
|
||||
first_printed = true
|
||||
}
|
||||
io.write_string(fi.writer, ")", &fi.n)
|
||||
io.write_byte(extra_fi.writer, ')', &extra_fi.n)
|
||||
|
||||
fi.n = extra_fi.n
|
||||
}
|
||||
|
||||
if newline {
|
||||
@@ -877,18 +847,16 @@ _parse_int :: proc(s: string, offset: int) -> (result: int, new_offset: int, ok:
|
||||
// Parses an argument number from a format string and determines if it's valid
|
||||
//
|
||||
// Inputs:
|
||||
// - fi: A pointer to an Info structure
|
||||
// - arg_index: The current argument index
|
||||
// - format: The format string to parse
|
||||
// - offset: The current position in the format string
|
||||
// - offset: A pointer to the current position in the format string
|
||||
// - arg_count: The total number of arguments
|
||||
//
|
||||
// Returns:
|
||||
// - index: The parsed argument index
|
||||
// - new_offset: The new position in the format string
|
||||
// - ok: A boolean indicating if the parsed argument number is valid
|
||||
// - parsed: A boolean indicating if an argument number was parsed
|
||||
// - ok: A boolean indicating if the parsed argument number is within arg_count
|
||||
//
|
||||
_arg_number :: proc(fi: ^Info, arg_index: int, format: string, offset, arg_count: int) -> (index, new_offset: int, ok: bool) {
|
||||
_arg_number :: proc(format: string, offset: ^int, arg_count: int) -> (index: int, parsed, ok: bool) {
|
||||
parse_arg_number :: proc(format: string) -> (int, int, bool) {
|
||||
if len(format) < 3 {
|
||||
return 0, 1, false
|
||||
@@ -896,30 +864,28 @@ _arg_number :: proc(fi: ^Info, arg_index: int, format: string, offset, arg_count
|
||||
|
||||
for i in 1..<len(format) {
|
||||
if format[i] == ']' {
|
||||
width, new_index, ok := _parse_int(format, 1)
|
||||
value, new_index, ok := _parse_int(format, 1)
|
||||
if !ok || new_index != i {
|
||||
return 0, i+1, false
|
||||
}
|
||||
return width-1, i+1, true
|
||||
return value, i+1, true
|
||||
}
|
||||
}
|
||||
|
||||
return 0, 1, false
|
||||
}
|
||||
|
||||
i := offset^
|
||||
|
||||
if len(format) <= offset || format[offset] != '[' {
|
||||
return arg_index, offset, false
|
||||
if len(format) <= i || format[i] != '[' {
|
||||
return 0, false, false
|
||||
}
|
||||
fi.reordered = true
|
||||
|
||||
width: int
|
||||
index, width, ok = parse_arg_number(format[offset:])
|
||||
if ok && 0 <= index && index < arg_count {
|
||||
return index, offset+width, true
|
||||
}
|
||||
fi.good_arg_index = false
|
||||
return arg_index, offset+width, false
|
||||
index, width, parsed = parse_arg_number(format[i:])
|
||||
offset^ = i + width
|
||||
ok = parsed && 0 <= index && index < arg_count
|
||||
return
|
||||
}
|
||||
// Retrieves an integer from a list of any type at the specified index
|
||||
//
|
||||
@@ -2570,7 +2536,6 @@ fmt_value :: proc(fi: ^Info, v: any, verb: rune) {
|
||||
if _user_formatters != nil && !fi.ignore_user_formatters {
|
||||
formatter := _user_formatters[v.id]
|
||||
if formatter != nil {
|
||||
fi.ignore_user_formatters = false
|
||||
if ok := formatter(fi, v, verb); !ok {
|
||||
fi.ignore_user_formatters = true
|
||||
fmt_bad_verb(fi, verb)
|
||||
|
||||
@@ -6,6 +6,7 @@ import "core:path/filepath"
|
||||
import "core:fmt"
|
||||
import "core:os"
|
||||
import "core:slice"
|
||||
import "core:strings"
|
||||
|
||||
collect_package :: proc(path: string) -> (pkg: ^ast.Package, success: bool) {
|
||||
NO_POS :: tokenizer.Pos{}
|
||||
@@ -32,11 +33,18 @@ collect_package :: proc(path: string) -> (pkg: ^ast.Package, success: bool) {
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
src, ok = os.read_entire_file(fullpath)
|
||||
if !ok {
|
||||
delete(fullpath)
|
||||
return
|
||||
}
|
||||
if strings.trim_space(string(src)) == "" {
|
||||
delete(fullpath)
|
||||
delete(src)
|
||||
continue
|
||||
}
|
||||
|
||||
file := ast.new(ast.File, NO_POS, NO_POS)
|
||||
file.pkg = pkg
|
||||
file.src = string(src)
|
||||
@@ -69,7 +77,9 @@ parse_package :: proc(pkg: ^ast.Package, p: ^Parser = nil) -> bool {
|
||||
if !parse_file(p, file) {
|
||||
ok = false
|
||||
}
|
||||
if pkg.name == "" {
|
||||
if file.pkg_decl == nil {
|
||||
error(p, p.curr_tok.pos, "Expected a package declaration at the start of the file")
|
||||
} else if pkg.name == "" {
|
||||
pkg.name = file.pkg_decl.name
|
||||
} else if pkg.name != file.pkg_decl.name {
|
||||
error(p, file.pkg_decl.pos, "different package name, expected '%s', got '%s'", pkg.name, file.pkg_decl.name)
|
||||
|
||||
@@ -2117,7 +2117,9 @@ parse_proc_type :: proc(p: ^Parser, tok: tokenizer.Token) -> ^ast.Proc_Type {
|
||||
}
|
||||
|
||||
expect_token(p, .Open_Paren)
|
||||
p.expr_level += 1
|
||||
params, _ := parse_field_list(p, .Close_Paren, ast.Field_Flags_Signature_Params)
|
||||
p.expr_level -= 1
|
||||
expect_closing_parentheses_of_field_list(p)
|
||||
results, diverging := parse_results(p)
|
||||
|
||||
|
||||
@@ -104,8 +104,7 @@ generic_ftoa :: proc(buf: []byte, val: f64, fmt: byte, precision, bit_size: int)
|
||||
} else {
|
||||
switch fmt {
|
||||
case 'e', 'E':
|
||||
prec += 1
|
||||
decimal.round(d, prec)
|
||||
decimal.round(d, prec + 1)
|
||||
case 'f', 'F':
|
||||
decimal.round(d, d.decimal_point+prec)
|
||||
case 'g', 'G':
|
||||
|
||||
@@ -727,10 +727,10 @@ Example:
|
||||
import "core:strconv"
|
||||
parse_f32_example :: proc() {
|
||||
n, ok := strconv.parse_f32("1234eee")
|
||||
fmt.println(n, ok)
|
||||
fmt.printfln("%.3f %v", n, ok)
|
||||
|
||||
n, ok = strconv.parse_f32("5678e2")
|
||||
fmt.println(n, ok)
|
||||
fmt.printfln("%.3f %v", n, ok)
|
||||
}
|
||||
|
||||
Output:
|
||||
@@ -760,10 +760,10 @@ Example:
|
||||
import "core:strconv"
|
||||
parse_f64_example :: proc() {
|
||||
n, ok := strconv.parse_f64("1234eee")
|
||||
fmt.println(n, ok)
|
||||
fmt.printfln("%.3f %v", n, ok)
|
||||
|
||||
n, ok = strconv.parse_f64("5678e2")
|
||||
fmt.println(n, ok)
|
||||
fmt.printfln("%.3f %v", n, ok)
|
||||
}
|
||||
|
||||
Output:
|
||||
@@ -796,10 +796,10 @@ Example:
|
||||
import "core:strconv"
|
||||
parse_f32_prefix_example :: proc() {
|
||||
n, _, ok := strconv.parse_f32_prefix("1234eee")
|
||||
fmt.println(n, ok)
|
||||
fmt.printfln("%.3f %v", n, ok)
|
||||
|
||||
n, _, ok = strconv.parse_f32_prefix("5678e2")
|
||||
fmt.println(n, ok)
|
||||
fmt.printfln("%.3f %v", n, ok)
|
||||
}
|
||||
|
||||
Output:
|
||||
@@ -831,10 +831,10 @@ Example:
|
||||
import "core:strconv"
|
||||
parse_f64_prefix_example :: proc() {
|
||||
n, _, ok := strconv.parse_f64_prefix("12.34eee")
|
||||
fmt.println(n, ok)
|
||||
fmt.printfln("%.3f %v", n, ok)
|
||||
|
||||
n, _, ok = strconv.parse_f64_prefix("12.34e2")
|
||||
fmt.println(n, ok)
|
||||
fmt.printfln("%.3f %v", n, ok)
|
||||
}
|
||||
|
||||
Output:
|
||||
@@ -1283,7 +1283,7 @@ Example:
|
||||
import "core:fmt"
|
||||
import "core:strconv"
|
||||
atof_example :: proc() {
|
||||
fmt.println(strconv.atof("3.14"))
|
||||
fmt.printfln("%.3f", strconv.atof("3.14"))
|
||||
}
|
||||
|
||||
Output:
|
||||
|
||||
@@ -2,8 +2,20 @@
|
||||
package sys_windows
|
||||
import "core:c"
|
||||
|
||||
USAGE :: distinct USHORT
|
||||
PUSAGE :: ^USAGE
|
||||
HIDD_CONFIGURATION :: struct {
|
||||
cookie: PVOID,
|
||||
size: ULONG,
|
||||
RingBufferSize: ULONG,
|
||||
}
|
||||
PHIDD_CONFIGURATION :: ^HIDD_CONFIGURATION
|
||||
|
||||
HIDD_ATTRIBUTES :: struct {
|
||||
Size: ULONG,
|
||||
VendorID: USHORT,
|
||||
ProductID: USHORT,
|
||||
VersionNumber: USHORT,
|
||||
}
|
||||
PHIDD_ATTRIBUTES :: ^HIDD_ATTRIBUTES
|
||||
|
||||
HIDP_CAPS :: struct {
|
||||
Usage: USAGE,
|
||||
@@ -113,7 +125,32 @@ HIDP_VALUE_CAPS :: struct {
|
||||
}
|
||||
PHIDP_VALUE_CAPS :: ^HIDP_VALUE_CAPS
|
||||
|
||||
PHIDP_PREPARSED_DATA :: rawptr
|
||||
HIDP_DATA :: struct {
|
||||
DataIndex: USHORT,
|
||||
Reserved: USHORT,
|
||||
using _ : struct #raw_union {
|
||||
RawValue: ULONG,
|
||||
On: BOOLEAN,
|
||||
},
|
||||
}
|
||||
PHIDP_DATA :: ^HIDP_DATA
|
||||
|
||||
HIDP_LINK_COLLECTION_NODE :: struct {
|
||||
LinkUsage: USAGE,
|
||||
LinkUsagePage: USAGE,
|
||||
Parent: USHORT,
|
||||
NumberOfChildren: USHORT,
|
||||
NextSibling: USHORT,
|
||||
FirstChild: USHORT,
|
||||
CollectionType: [8]ULONG,
|
||||
IsAlias: [1]ULONG,
|
||||
Reserved: [23]ULONG,
|
||||
UserContext: PVOID,
|
||||
}
|
||||
PHIDP_LINK_COLLECTION_NODE :: ^HIDP_LINK_COLLECTION_NODE
|
||||
|
||||
HIDP_PREPARSED_DATA :: rawptr
|
||||
PHIDP_PREPARSED_DATA :: ^HIDP_PREPARSED_DATA
|
||||
|
||||
HIDP_REPORT_TYPE :: enum c.int {
|
||||
Input,
|
||||
@@ -122,6 +159,26 @@ HIDP_REPORT_TYPE :: enum c.int {
|
||||
}
|
||||
|
||||
HIDP_STATUS_SUCCESS : NTSTATUS : 0x110000
|
||||
HIDP_STATUS_NULL : NTSTATUS : -2146369535 //0x80110001
|
||||
HIDP_STATUS_INVALID_PREPARSED_DATA : NTSTATUS : -1072627711 //0xC0110001
|
||||
HIDP_STATUS_INVALID_REPORT_TYPE : NTSTATUS : -1072627710 //0xC0110002
|
||||
HIDP_STATUS_INVALID_REPORT_LENGTH : NTSTATUS : -1072627709 //0xC0110003
|
||||
HIDP_STATUS_USAGE_NOT_FOUND : NTSTATUS : -1072627708 //0xC0110004
|
||||
HIDP_STATUS_VALUE_OUT_OF_RANGE : NTSTATUS : -1072627707 //0xC0110005
|
||||
HIDP_STATUS_BAD_LOG_PHY_VALUES : NTSTATUS : -1072627706 //0xC0100006
|
||||
HIDP_STATUS_BUFFER_TOO_SMALL : NTSTATUS : -1072627705 //0xC0110007
|
||||
HIDP_STATUS_INTERNAL_ERROR : NTSTATUS : -1072627704 //0xC0110008
|
||||
HIDP_STATUS_I8042_TRANS_UNKNOWN : NTSTATUS : -1072627703 //0xC0110009
|
||||
HIDP_STATUS_INCOMPATIBLE_REPORT_ID : NTSTATUS : -1072627702 //0xC011000A
|
||||
HIDP_STATUS_NOT_VALUE_ARRAY : NTSTATUS : -1072627701 //0xC011000B
|
||||
HIDP_STATUS_IS_VALUE_ARRAY : NTSTATUS : -1072627700 //0xC011000C
|
||||
HIDP_STATUS_DATA_INDEX_NOT_FOUND : NTSTATUS : -1072627699 //0xC011000D
|
||||
HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE : NTSTATUS : -1072627698 //0xC011000E
|
||||
HIDP_STATUS_BUTTON_NOT_PRESSED : NTSTATUS : -1072627697 //0xC011000F
|
||||
HIDP_STATUS_REPORT_DOES_NOT_EXIST : NTSTATUS : -1072627696 //0xC0110010
|
||||
HIDP_STATUS_NOT_IMPLEMENTED : NTSTATUS : -1072627680 //0xC0110020
|
||||
HIDP_STATUS_NOT_BUTTON_ARRAY : NTSTATUS : -1072627679 //0xC0110021
|
||||
HIDP_STATUS_I8242_TRANS_UNKNOWN :: HIDP_STATUS_I8042_TRANS_UNKNOWN
|
||||
|
||||
foreign import hid "system:hid.lib"
|
||||
@(default_calling_convention="system")
|
||||
@@ -131,4 +188,26 @@ foreign hid {
|
||||
HidP_GetValueCaps :: proc(ReportType: HIDP_REPORT_TYPE, ValueCaps: PHIDP_VALUE_CAPS, ValueCapsLength: PUSHORT, PreparsedData: PHIDP_PREPARSED_DATA) -> NTSTATUS ---
|
||||
HidP_GetUsages :: proc(ReportType: HIDP_REPORT_TYPE, UsagePage: USAGE, LinkCollection: USHORT, UsageList: PUSAGE, UsageLength: PULONG, PreparsedData: PHIDP_PREPARSED_DATA, Report: PCHAR, ReportLength: ULONG) -> NTSTATUS ---
|
||||
HidP_GetUsageValue :: proc(ReportType: HIDP_REPORT_TYPE, UsagePage: USAGE, LinkCollection: USHORT, Usage: USAGE, UsageValue: PULONG, PreparsedData: PHIDP_PREPARSED_DATA, Report: PCHAR, ReportLength: ULONG) -> NTSTATUS ---
|
||||
HidP_GetData :: proc(ReportType: HIDP_REPORT_TYPE, DataList: PHIDP_DATA, DataLength: PULONG, PreparsedData: PHIDP_PREPARSED_DATA, Report: PCHAR, ReportLength: ULONG) -> NTSTATUS ---
|
||||
HidP_GetLinkCollectionNodes :: proc(LinkCollectionNodes: PHIDP_LINK_COLLECTION_NODE, LinkCollectionNodesLength: PULONG, PreparsedData: PHIDP_PREPARSED_DATA) -> NTSTATUS ---
|
||||
|
||||
HidD_GetAttributes :: proc(HidDeviceObject: HANDLE, Attributes: PHIDD_ATTRIBUTES) -> BOOLEAN ---
|
||||
HidD_GetHidGuid :: proc(HidGuid: LPGUID) ---
|
||||
HidD_GetPreparsedData :: proc(HidDeviceObject: HANDLE, PreparsedData: ^PHIDP_PREPARSED_DATA) -> BOOLEAN ---
|
||||
HidD_FreePreparsedData :: proc(PreparsedData: PHIDP_PREPARSED_DATA) -> BOOLEAN ---
|
||||
HidD_FlushQueue :: proc(HidDeviceObject: HANDLE) -> BOOLEAN ---
|
||||
HidD_GetConfiguration :: proc(HidDeviceObject: HANDLE, Configuration: PHIDD_CONFIGURATION, ConfigurationLength: ULONG) -> BOOLEAN ---
|
||||
HidD_SetConfiguration :: proc(HidDeviceObject: HANDLE, Configuration: PHIDD_CONFIGURATION, ConfigurationLength: ULONG) -> BOOLEAN ---
|
||||
HidD_GetFeature :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN ---
|
||||
HidD_SetFeature :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN ---
|
||||
HidD_GetInputReport :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN ---
|
||||
HidD_SetOutputReport :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN ---
|
||||
HidD_GetNumInputBuffers :: proc(HidDeviceObject: HANDLE, NumberBuffers: PULONG) -> BOOLEAN ---
|
||||
HidD_SetNumInputBuffers :: proc(HidDeviceObject: HANDLE, NumberBuffers: ULONG) -> BOOLEAN ---
|
||||
HidD_GetPhysicalDescriptor :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN ---
|
||||
HidD_GetManufacturerString :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN ---
|
||||
HidD_GetProductString :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN ---
|
||||
HidD_GetIndexedString :: proc(HidDeviceObject: HANDLE, StringIndex: ULONG, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN ---
|
||||
HidD_GetSerialNumberString :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN ---
|
||||
HidD_GetMsGenreDescriptor :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN ---
|
||||
}
|
||||
|
||||
@@ -0,0 +1,690 @@
|
||||
// +build windows
|
||||
package sys_windows
|
||||
|
||||
USAGE :: distinct USHORT
|
||||
PUSAGE :: ^USAGE
|
||||
|
||||
HID_USAGE_PAGE_UNDEFINED :: 0x00
|
||||
HID_USAGE_PAGE_GENERIC :: 0x01
|
||||
HID_USAGE_PAGE_SIMULATION :: 0x02
|
||||
HID_USAGE_PAGE_VR :: 0x03
|
||||
HID_USAGE_PAGE_SPORT :: 0x04
|
||||
HID_USAGE_PAGE_GAME :: 0x05
|
||||
HID_USAGE_PAGE_GENERIC_DEVICE :: 0x06
|
||||
HID_USAGE_PAGE_KEYBOARD :: 0x07
|
||||
HID_USAGE_PAGE_LED :: 0x08
|
||||
HID_USAGE_PAGE_BUTTON :: 0x09
|
||||
HID_USAGE_PAGE_ORDINAL :: 0x0A
|
||||
HID_USAGE_PAGE_TELEPHONY :: 0x0B
|
||||
HID_USAGE_PAGE_CONSUMER :: 0x0C
|
||||
HID_USAGE_PAGE_DIGITIZER :: 0x0D
|
||||
HID_USAGE_PAGE_HAPTICS :: 0x0E
|
||||
HID_USAGE_PAGE_PID :: 0x0F
|
||||
HID_USAGE_PAGE_UNICODE :: 0x10
|
||||
HID_USAGE_PAGE_ALPHANUMERIC :: 0x14
|
||||
HID_USAGE_PAGE_SENSOR :: 0x20
|
||||
HID_USAGE_PAGE_LIGHTING_ILLUMINATION :: 0x59
|
||||
HID_USAGE_PAGE_BARCODE_SCANNER :: 0x8C
|
||||
HID_USAGE_PAGE_WEIGHING_DEVICE :: 0x8D
|
||||
HID_USAGE_PAGE_MAGNETIC_STRIPE_READER :: 0x8E
|
||||
HID_USAGE_PAGE_CAMERA_CONTROL :: 0x90
|
||||
HID_USAGE_PAGE_ARCADE :: 0x91
|
||||
HID_USAGE_PAGE_MICROSOFT_BLUETOOTH_HANDSFREE :: 0xFFF3
|
||||
HID_USAGE_PAGE_VENDOR_DEFINED_BEGIN :: 0xFF00
|
||||
HID_USAGE_PAGE_VENDOR_DEFINED_END :: 0xFFFF
|
||||
|
||||
HID_USAGE_GENERIC_POINTER :: 0x01
|
||||
HID_USAGE_GENERIC_MOUSE :: 0x02
|
||||
HID_USAGE_GENERIC_JOYSTICK :: 0x04
|
||||
HID_USAGE_GENERIC_GAMEPAD :: 0x05
|
||||
HID_USAGE_GENERIC_KEYBOARD :: 0x06
|
||||
HID_USAGE_GENERIC_KEYPAD :: 0x07
|
||||
HID_USAGE_GENERIC_MULTI_AXIS_CONTROLLER :: 0x08
|
||||
HID_USAGE_GENERIC_TABLET_PC_SYSTEM_CTL :: 0x09
|
||||
HID_USAGE_GENERIC_PORTABLE_DEVICE_CONTROL :: 0x0D
|
||||
HID_USAGE_GENERIC_INTERACTIVE_CONTROL :: 0x0E
|
||||
HID_USAGE_GENERIC_SYSTEM_CTL :: 0x80
|
||||
|
||||
HID_USAGE_GENERIC_X :: 0x30
|
||||
HID_USAGE_GENERIC_Y :: 0x31
|
||||
HID_USAGE_GENERIC_Z :: 0x32
|
||||
HID_USAGE_GENERIC_RX :: 0x33
|
||||
HID_USAGE_GENERIC_RY :: 0x34
|
||||
HID_USAGE_GENERIC_RZ :: 0x35
|
||||
HID_USAGE_GENERIC_SLIDER :: 0x36
|
||||
HID_USAGE_GENERIC_DIAL :: 0x37
|
||||
HID_USAGE_GENERIC_WHEEL :: 0x38
|
||||
HID_USAGE_GENERIC_HATSWITCH :: 0x39
|
||||
HID_USAGE_GENERIC_COUNTED_BUFFER :: 0x3A
|
||||
HID_USAGE_GENERIC_BYTE_COUNT :: 0x3B
|
||||
HID_USAGE_GENERIC_MOTION_WAKEUP :: 0x3C
|
||||
HID_USAGE_GENERIC_START :: 0x3D
|
||||
HID_USAGE_GENERIC_SELECT :: 0x3E
|
||||
HID_USAGE_GENERIC_VX :: 0x40
|
||||
HID_USAGE_GENERIC_VY :: 0x41
|
||||
HID_USAGE_GENERIC_VZ :: 0x42
|
||||
HID_USAGE_GENERIC_VBRX :: 0x43
|
||||
HID_USAGE_GENERIC_VBRY :: 0x44
|
||||
HID_USAGE_GENERIC_VBRZ :: 0x45
|
||||
HID_USAGE_GENERIC_VNO :: 0x46
|
||||
HID_USAGE_GENERIC_FEATURE_NOTIFICATION :: 0x47
|
||||
HID_USAGE_GENERIC_RESOLUTION_MULTIPLIER :: 0x48
|
||||
HID_USAGE_GENERIC_SYSCTL_POWER :: 0x81
|
||||
HID_USAGE_GENERIC_SYSCTL_SLEEP :: 0x82
|
||||
HID_USAGE_GENERIC_SYSCTL_WAKE :: 0x83
|
||||
HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU :: 0x84
|
||||
HID_USAGE_GENERIC_SYSCTL_MAIN_MENU :: 0x85
|
||||
HID_USAGE_GENERIC_SYSCTL_APP_MENU :: 0x86
|
||||
HID_USAGE_GENERIC_SYSCTL_HELP_MENU :: 0x87
|
||||
HID_USAGE_GENERIC_SYSCTL_MENU_EXIT :: 0x88
|
||||
HID_USAGE_GENERIC_SYSCTL_MENU_SELECT :: 0x89
|
||||
HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT :: 0x8A
|
||||
HID_USAGE_GENERIC_SYSCTL_MENU_LEFT :: 0x8B
|
||||
HID_USAGE_GENERIC_SYSCTL_MENU_UP :: 0x8C
|
||||
HID_USAGE_GENERIC_SYSCTL_MENU_DOWN :: 0x8D
|
||||
HID_USAGE_GENERIC_SYSCTL_COLD_RESTART :: 0x8E
|
||||
HID_USAGE_GENERIC_SYSCTL_WARM_RESTART :: 0x8F
|
||||
HID_USAGE_GENERIC_DPAD_UP :: 0x90
|
||||
HID_USAGE_GENERIC_DPAD_DOWN :: 0x91
|
||||
HID_USAGE_GENERIC_DPAD_RIGHT :: 0x92
|
||||
HID_USAGE_GENERIC_DPAD_LEFT :: 0x93
|
||||
HID_USAGE_GENERIC_SYSCTL_FN :: 0x97
|
||||
HID_USAGE_GENERIC_SYSCTL_FN_LOCK :: 0x98
|
||||
HID_USAGE_GENERIC_SYSCTL_FN_LOCK_INDICATOR :: 0x99
|
||||
HID_USAGE_GENERIC_SYSCTL_DISMISS_NOTIFICATION :: 0x9A
|
||||
HID_USAGE_GENERIC_SYSCTL_DOCK :: 0xA0
|
||||
HID_USAGE_GENERIC_SYSCTL_UNDOCK :: 0xA1
|
||||
HID_USAGE_GENERIC_SYSCTL_SETUP :: 0xA2
|
||||
HID_USAGE_GENERIC_SYSCTL_SYS_BREAK :: 0xA3
|
||||
HID_USAGE_GENERIC_SYSCTL_SYS_DBG_BREAK :: 0xA4
|
||||
HID_USAGE_GENERIC_SYSCTL_APP_BREAK :: 0xA5
|
||||
HID_USAGE_GENERIC_SYSCTL_APP_DBG_BREAK :: 0xA6
|
||||
HID_USAGE_GENERIC_SYSCTL_MUTE :: 0xA7
|
||||
HID_USAGE_GENERIC_SYSCTL_HIBERNATE :: 0xA8
|
||||
HID_USAGE_GENERIC_SYSCTL_DISP_INVERT :: 0xB0
|
||||
HID_USAGE_GENERIC_SYSCTL_DISP_INTERNAL :: 0xB1
|
||||
HID_USAGE_GENERIC_SYSCTL_DISP_EXTERNAL :: 0xB2
|
||||
HID_USAGE_GENERIC_SYSCTL_DISP_BOTH :: 0xB3
|
||||
HID_USAGE_GENERIC_SYSCTL_DISP_DUAL :: 0xB4
|
||||
HID_USAGE_GENERIC_SYSCTL_DISP_TOGGLE :: 0xB5
|
||||
HID_USAGE_GENERIC_SYSCTL_DISP_SWAP :: 0xB6
|
||||
HID_USAGE_GENERIC_SYSCTL_DISP_AUTOSCALE :: 0xB7
|
||||
HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_BUTTON :: 0xC9
|
||||
HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_SLIDER_SWITCH :: 0xCA
|
||||
HID_USAGE_GENERIC_CONTROL_ENABLE :: 0xCB
|
||||
|
||||
HID_USAGE_SIMULATION_FLIGHT_SIMULATION_DEVICE :: 0x01
|
||||
HID_USAGE_SIMULATION_AUTOMOBILE_SIMULATION_DEVICE :: 0x02
|
||||
HID_USAGE_SIMULATION_TANK_SIMULATION_DEVICE :: 0x03
|
||||
HID_USAGE_SIMULATION_SPACESHIP_SIMULATION_DEVICE :: 0x04
|
||||
HID_USAGE_SIMULATION_SUBMARINE_SIMULATION_DEVICE :: 0x05
|
||||
HID_USAGE_SIMULATION_SAILING_SIMULATION_DEVICE :: 0x06
|
||||
HID_USAGE_SIMULATION_MOTORCYCLE_SIMULATION_DEVICE :: 0x07
|
||||
HID_USAGE_SIMULATION_SPORTS_SIMULATION_DEVICE :: 0x08
|
||||
HID_USAGE_SIMULATION_AIRPLANE_SIMULATION_DEVICE :: 0x09
|
||||
HID_USAGE_SIMULATION_HELICOPTER_SIMULATION_DEVICE :: 0x0A
|
||||
HID_USAGE_SIMULATION_MAGIC_CARPET_SIMULATION_DEVICE :: 0x0B
|
||||
HID_USAGE_SIMULATION_BICYCLE_SIMULATION_DEVICE :: 0x0C
|
||||
HID_USAGE_SIMULATION_FLIGHT_CONTROL_STICK :: 0x20
|
||||
HID_USAGE_SIMULATION_FLIGHT_STICK :: 0x21
|
||||
HID_USAGE_SIMULATION_CYCLIC_CONTROL :: 0x22
|
||||
HID_USAGE_SIMULATION_CYCLIC_TRIM :: 0x23
|
||||
HID_USAGE_SIMULATION_FLIGHT_YOKE :: 0x24
|
||||
HID_USAGE_SIMULATION_TRACK_CONTROL :: 0x25
|
||||
|
||||
HID_USAGE_SIMULATION_AILERON :: 0xB0
|
||||
HID_USAGE_SIMULATION_AILERON_TRIM :: 0xB1
|
||||
HID_USAGE_SIMULATION_ANTI_TORQUE_CONTROL :: 0xB2
|
||||
HID_USAGE_SIMULATION_AUTOPIOLOT_ENABLE :: 0xB3
|
||||
HID_USAGE_SIMULATION_CHAFF_RELEASE :: 0xB4
|
||||
HID_USAGE_SIMULATION_COLLECTIVE_CONTROL :: 0xB5
|
||||
HID_USAGE_SIMULATION_DIVE_BRAKE :: 0xB6
|
||||
HID_USAGE_SIMULATION_ELECTRONIC_COUNTERMEASURES :: 0xB7
|
||||
HID_USAGE_SIMULATION_ELEVATOR :: 0xB8
|
||||
HID_USAGE_SIMULATION_ELEVATOR_TRIM :: 0xB9
|
||||
HID_USAGE_SIMULATION_RUDDER :: 0xBA
|
||||
HID_USAGE_SIMULATION_THROTTLE :: 0xBB
|
||||
HID_USAGE_SIMULATION_FLIGHT_COMMUNICATIONS :: 0xBC
|
||||
HID_USAGE_SIMULATION_FLARE_RELEASE :: 0xBD
|
||||
HID_USAGE_SIMULATION_LANDING_GEAR :: 0xBE
|
||||
HID_USAGE_SIMULATION_TOE_BRAKE :: 0xBF
|
||||
HID_USAGE_SIMULATION_TRIGGER :: 0xC0
|
||||
HID_USAGE_SIMULATION_WEAPONS_ARM :: 0xC1
|
||||
HID_USAGE_SIMULATION_WEAPONS_SELECT :: 0xC2
|
||||
HID_USAGE_SIMULATION_WING_FLAPS :: 0xC3
|
||||
HID_USAGE_SIMULATION_ACCELLERATOR :: 0xC4
|
||||
HID_USAGE_SIMULATION_BRAKE :: 0xC5
|
||||
HID_USAGE_SIMULATION_CLUTCH :: 0xC6
|
||||
HID_USAGE_SIMULATION_SHIFTER :: 0xC7
|
||||
HID_USAGE_SIMULATION_STEERING :: 0xC8
|
||||
HID_USAGE_SIMULATION_TURRET_DIRECTION :: 0xC9
|
||||
HID_USAGE_SIMULATION_BARREL_ELEVATION :: 0xCA
|
||||
HID_USAGE_SIMULATION_DIVE_PLANE :: 0xCB
|
||||
HID_USAGE_SIMULATION_BALLAST :: 0xCC
|
||||
HID_USAGE_SIMULATION_BICYCLE_CRANK :: 0xCD
|
||||
HID_USAGE_SIMULATION_HANDLE_BARS :: 0xCE
|
||||
HID_USAGE_SIMULATION_FRONT_BRAKE :: 0xCF
|
||||
HID_USAGE_SIMULATION_REAR_BRAKE :: 0xD0
|
||||
|
||||
HID_USAGE_VR_BELT :: 0x01
|
||||
HID_USAGE_VR_BODY_SUIT :: 0x02
|
||||
HID_USAGE_VR_FLEXOR :: 0x03
|
||||
HID_USAGE_VR_GLOVE :: 0x04
|
||||
HID_USAGE_VR_HEAD_TRACKER :: 0x05
|
||||
HID_USAGE_VR_HEAD_MOUNTED_DISPLAY :: 0x06
|
||||
HID_USAGE_VR_HAND_TRACKER :: 0x07
|
||||
HID_USAGE_VR_OCULOMETER :: 0x08
|
||||
HID_USAGE_VR_VEST :: 0x09
|
||||
HID_USAGE_VR_ANIMATRONIC_DEVICE :: 0x0A
|
||||
|
||||
HID_USAGE_VR_STEREO_ENABLE :: 0x20
|
||||
HID_USAGE_VR_DISPLAY_ENABLE :: 0x21
|
||||
|
||||
HID_USAGE_SPORT_BASEBALL_BAT :: 0x01
|
||||
HID_USAGE_SPORT_GOLF_CLUB :: 0x02
|
||||
HID_USAGE_SPORT_ROWING_MACHINE :: 0x03
|
||||
HID_USAGE_SPORT_TREADMILL :: 0x04
|
||||
HID_USAGE_SPORT_STICK_TYPE :: 0x38
|
||||
|
||||
HID_USAGE_SPORT_OAR :: 0x30
|
||||
HID_USAGE_SPORT_SLOPE :: 0x31
|
||||
HID_USAGE_SPORT_RATE :: 0x32
|
||||
HID_USAGE_SPORT_STICK_SPEED :: 0x33
|
||||
HID_USAGE_SPORT_STICK_FACE_ANGLE :: 0x34
|
||||
HID_USAGE_SPORT_HEEL_TOE :: 0x35
|
||||
HID_USAGE_SPORT_FOLLOW_THROUGH :: 0x36
|
||||
HID_USAGE_SPORT_TEMPO :: 0x37
|
||||
HID_USAGE_SPORT_HEIGHT :: 0x39
|
||||
HID_USAGE_SPORT_PUTTER :: 0x50
|
||||
HID_USAGE_SPORT_1_IRON :: 0x51
|
||||
HID_USAGE_SPORT_2_IRON :: 0x52
|
||||
HID_USAGE_SPORT_3_IRON :: 0x53
|
||||
HID_USAGE_SPORT_4_IRON :: 0x54
|
||||
HID_USAGE_SPORT_5_IRON :: 0x55
|
||||
HID_USAGE_SPORT_6_IRON :: 0x56
|
||||
HID_USAGE_SPORT_7_IRON :: 0x57
|
||||
HID_USAGE_SPORT_8_IRON :: 0x58
|
||||
HID_USAGE_SPORT_9_IRON :: 0x59
|
||||
HID_USAGE_SPORT_10_IRON :: 0x5A
|
||||
HID_USAGE_SPORT_11_IRON :: 0x5B
|
||||
HID_USAGE_SPORT_SAND_WEDGE :: 0x5C
|
||||
HID_USAGE_SPORT_LOFT_WEDGE :: 0x5D
|
||||
HID_USAGE_SPORT_POWER_WEDGE :: 0x5E
|
||||
HID_USAGE_SPORT_1_WOOD :: 0x5F
|
||||
HID_USAGE_SPORT_3_WOOD :: 0x60
|
||||
HID_USAGE_SPORT_5_WOOD :: 0x61
|
||||
HID_USAGE_SPORT_7_WOOD :: 0x62
|
||||
HID_USAGE_SPORT_9_WOOD :: 0x63
|
||||
|
||||
HID_USAGE_GAME_3D_GAME_CONTROLLER :: 0x01
|
||||
HID_USAGE_GAME_PINBALL_DEVICE :: 0x02
|
||||
HID_USAGE_GAME_GUN_DEVICE :: 0x03
|
||||
HID_USAGE_GAME_POINT_OF_VIEW :: 0x20
|
||||
HID_USAGE_GAME_GUN_SELECTOR :: 0x32
|
||||
HID_USAGE_GAME_GAMEPAD_FIRE_JUMP :: 0x37
|
||||
HID_USAGE_GAME_GAMEPAD_TRIGGER :: 0x39
|
||||
|
||||
HID_USAGE_GAME_TURN_RIGHT_LEFT :: 0x21
|
||||
HID_USAGE_GAME_PITCH_FORWARD_BACK :: 0x22
|
||||
HID_USAGE_GAME_ROLL_RIGHT_LEFT :: 0x23
|
||||
HID_USAGE_GAME_MOVE_RIGHT_LEFT :: 0x24
|
||||
HID_USAGE_GAME_MOVE_FORWARD_BACK :: 0x25
|
||||
HID_USAGE_GAME_MOVE_UP_DOWN :: 0x26
|
||||
HID_USAGE_GAME_LEAN_RIGHT_LEFT :: 0x27
|
||||
HID_USAGE_GAME_LEAN_FORWARD_BACK :: 0x28
|
||||
HID_USAGE_GAME_POV_HEIGHT :: 0x29
|
||||
HID_USAGE_GAME_FLIPPER :: 0x2A
|
||||
HID_USAGE_GAME_SECONDARY_FLIPPER :: 0x2B
|
||||
HID_USAGE_GAME_BUMP :: 0x2C
|
||||
HID_USAGE_GAME_NEW_GAME :: 0x2D
|
||||
HID_USAGE_GAME_SHOOT_BALL :: 0x2E
|
||||
HID_USAGE_GAME_PLAYER :: 0x2F
|
||||
HID_USAGE_GAME_GUN_BOLT :: 0x30
|
||||
HID_USAGE_GAME_GUN_CLIP :: 0x31
|
||||
HID_USAGE_GAME_GUN_SINGLE_SHOT :: 0x33
|
||||
HID_USAGE_GAME_GUN_BURST :: 0x34
|
||||
HID_USAGE_GAME_GUN_AUTOMATIC :: 0x35
|
||||
HID_USAGE_GAME_GUN_SAFETY :: 0x36
|
||||
|
||||
HID_USAGE_GENERIC_DEVICE_BATTERY_STRENGTH :: 0x20
|
||||
HID_USAGE_GENERIC_DEVICE_WIRELESS_CHANNEL :: 0x21
|
||||
HID_USAGE_GENERIC_DEVICE_WIRELESS_ID :: 0x22
|
||||
HID_USAGE_GENERIC_DEVICE_DISCOVER_WIRELESS_CONTROL :: 0x23
|
||||
HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ENTERED :: 0x24
|
||||
HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ERASED :: 0x25
|
||||
HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CLEARED :: 0x26
|
||||
|
||||
// Error "keys"
|
||||
HID_USAGE_KEYBOARD_NOEVENT :: 0x00
|
||||
HID_USAGE_KEYBOARD_ROLLOVER :: 0x01
|
||||
HID_USAGE_KEYBOARD_POSTFAIL :: 0x02
|
||||
HID_USAGE_KEYBOARD_UNDEFINED :: 0x03
|
||||
|
||||
// Letters
|
||||
HID_USAGE_KEYBOARD_aA :: 0x04
|
||||
HID_USAGE_KEYBOARD_zZ :: 0x1D
|
||||
|
||||
// Numbers
|
||||
HID_USAGE_KEYBOARD_ONE :: 0x1E
|
||||
HID_USAGE_KEYBOARD_ZERO :: 0x27
|
||||
|
||||
// Modifier Keys
|
||||
HID_USAGE_KEYBOARD_LCTRL :: 0xE0
|
||||
HID_USAGE_KEYBOARD_LSHFT :: 0xE1
|
||||
HID_USAGE_KEYBOARD_LALT :: 0xE2
|
||||
HID_USAGE_KEYBOARD_LGUI :: 0xE3
|
||||
HID_USAGE_KEYBOARD_RCTRL :: 0xE4
|
||||
HID_USAGE_KEYBOARD_RSHFT :: 0xE5
|
||||
HID_USAGE_KEYBOARD_RALT :: 0xE6
|
||||
HID_USAGE_KEYBOARD_RGUI :: 0xE7
|
||||
HID_USAGE_KEYBOARD_SCROLL_LOCK :: 0x47
|
||||
HID_USAGE_KEYBOARD_NUM_LOCK :: 0x53
|
||||
HID_USAGE_KEYBOARD_CAPS_LOCK :: 0x39
|
||||
|
||||
// Function keys
|
||||
HID_USAGE_KEYBOARD_F1 :: 0x3A
|
||||
HID_USAGE_KEYBOARD_F2 :: 0x3B
|
||||
HID_USAGE_KEYBOARD_F3 :: 0x3C
|
||||
HID_USAGE_KEYBOARD_F4 :: 0x3D
|
||||
HID_USAGE_KEYBOARD_F5 :: 0x3E
|
||||
HID_USAGE_KEYBOARD_F6 :: 0x3F
|
||||
HID_USAGE_KEYBOARD_F7 :: 0x40
|
||||
HID_USAGE_KEYBOARD_F8 :: 0x41
|
||||
HID_USAGE_KEYBOARD_F9 :: 0x42
|
||||
HID_USAGE_KEYBOARD_F10 :: 0x43
|
||||
HID_USAGE_KEYBOARD_F11 :: 0x44
|
||||
HID_USAGE_KEYBOARD_F12 :: 0x45
|
||||
HID_USAGE_KEYBOARD_F13 :: 0x68
|
||||
HID_USAGE_KEYBOARD_F14 :: 0x69
|
||||
HID_USAGE_KEYBOARD_F15 :: 0x6A
|
||||
HID_USAGE_KEYBOARD_F16 :: 0x6B
|
||||
HID_USAGE_KEYBOARD_F17 :: 0x6C
|
||||
HID_USAGE_KEYBOARD_F18 :: 0x6D
|
||||
HID_USAGE_KEYBOARD_F19 :: 0x6E
|
||||
HID_USAGE_KEYBOARD_F20 :: 0x6F
|
||||
HID_USAGE_KEYBOARD_F21 :: 0x70
|
||||
HID_USAGE_KEYBOARD_F22 :: 0x71
|
||||
HID_USAGE_KEYBOARD_F23 :: 0x72
|
||||
HID_USAGE_KEYBOARD_F24 :: 0x73
|
||||
|
||||
HID_USAGE_KEYBOARD_RETURN :: 0x28
|
||||
HID_USAGE_KEYBOARD_ESCAPE :: 0x29
|
||||
HID_USAGE_KEYBOARD_DELETE :: 0x2A
|
||||
|
||||
HID_USAGE_KEYBOARD_PRINT_SCREEN :: 0x46
|
||||
HID_USAGE_KEYBOARD_DELETE_FORWARD :: 0x4C
|
||||
|
||||
// Numeric Keypad
|
||||
HID_USAGE_KEYBOARD_KEYPAD_1_AND_END :: 0x59
|
||||
HID_USAGE_KEYBOARD_KEYPAD_0_AND_INSERT :: 0x62
|
||||
|
||||
HID_USAGE_LED_NUM_LOCK :: 0x01
|
||||
HID_USAGE_LED_CAPS_LOCK :: 0x02
|
||||
HID_USAGE_LED_SCROLL_LOCK :: 0x03
|
||||
HID_USAGE_LED_COMPOSE :: 0x04
|
||||
HID_USAGE_LED_KANA :: 0x05
|
||||
HID_USAGE_LED_POWER :: 0x06
|
||||
HID_USAGE_LED_SHIFT :: 0x07
|
||||
HID_USAGE_LED_DO_NOT_DISTURB :: 0x08
|
||||
HID_USAGE_LED_MUTE :: 0x09
|
||||
HID_USAGE_LED_TONE_ENABLE :: 0x0A
|
||||
HID_USAGE_LED_HIGH_CUT_FILTER :: 0x0B
|
||||
HID_USAGE_LED_LOW_CUT_FILTER :: 0x0C
|
||||
HID_USAGE_LED_EQUALIZER_ENABLE :: 0x0D
|
||||
HID_USAGE_LED_SOUND_FIELD_ON :: 0x0E
|
||||
HID_USAGE_LED_SURROUND_FIELD_ON :: 0x0F
|
||||
HID_USAGE_LED_REPEAT :: 0x10
|
||||
HID_USAGE_LED_STEREO :: 0x11
|
||||
HID_USAGE_LED_SAMPLING_RATE_DETECT :: 0x12
|
||||
HID_USAGE_LED_SPINNING :: 0x13
|
||||
HID_USAGE_LED_CAV :: 0x14
|
||||
HID_USAGE_LED_CLV :: 0x15
|
||||
HID_USAGE_LED_RECORDING_FORMAT_DET :: 0x16
|
||||
HID_USAGE_LED_OFF_HOOK :: 0x17
|
||||
HID_USAGE_LED_RING :: 0x18
|
||||
HID_USAGE_LED_MESSAGE_WAITING :: 0x19
|
||||
HID_USAGE_LED_DATA_MODE :: 0x1A
|
||||
HID_USAGE_LED_BATTERY_OPERATION :: 0x1B
|
||||
HID_USAGE_LED_BATTERY_OK :: 0x1C
|
||||
HID_USAGE_LED_BATTERY_LOW :: 0x1D
|
||||
HID_USAGE_LED_SPEAKER :: 0x1E
|
||||
HID_USAGE_LED_HEAD_SET :: 0x1F
|
||||
HID_USAGE_LED_HOLD :: 0x20
|
||||
HID_USAGE_LED_MICROPHONE :: 0x21
|
||||
HID_USAGE_LED_COVERAGE :: 0x22
|
||||
HID_USAGE_LED_NIGHT_MODE :: 0x23
|
||||
HID_USAGE_LED_SEND_CALLS :: 0x24
|
||||
HID_USAGE_LED_CALL_PICKUP :: 0x25
|
||||
HID_USAGE_LED_CONFERENCE :: 0x26
|
||||
HID_USAGE_LED_STAND_BY :: 0x27
|
||||
HID_USAGE_LED_CAMERA_ON :: 0x28
|
||||
HID_USAGE_LED_CAMERA_OFF :: 0x29
|
||||
HID_USAGE_LED_ON_LINE :: 0x2A
|
||||
HID_USAGE_LED_OFF_LINE :: 0x2B
|
||||
HID_USAGE_LED_BUSY :: 0x2C
|
||||
HID_USAGE_LED_READY :: 0x2D
|
||||
HID_USAGE_LED_PAPER_OUT :: 0x2E
|
||||
HID_USAGE_LED_PAPER_JAM :: 0x2F
|
||||
HID_USAGE_LED_REMOTE :: 0x30
|
||||
HID_USAGE_LED_FORWARD :: 0x31
|
||||
HID_USAGE_LED_REVERSE :: 0x32
|
||||
HID_USAGE_LED_STOP :: 0x33
|
||||
HID_USAGE_LED_REWIND :: 0x34
|
||||
HID_USAGE_LED_FAST_FORWARD :: 0x35
|
||||
HID_USAGE_LED_PLAY :: 0x36
|
||||
HID_USAGE_LED_PAUSE :: 0x37
|
||||
HID_USAGE_LED_RECORD :: 0x38
|
||||
HID_USAGE_LED_ERROR :: 0x39
|
||||
HID_USAGE_LED_SELECTED_INDICATOR :: 0x3A
|
||||
HID_USAGE_LED_IN_USE_INDICATOR :: 0x3B
|
||||
HID_USAGE_LED_MULTI_MODE_INDICATOR :: 0x3C
|
||||
HID_USAGE_LED_INDICATOR_ON :: 0x3D
|
||||
HID_USAGE_LED_INDICATOR_FLASH :: 0x3E
|
||||
HID_USAGE_LED_INDICATOR_SLOW_BLINK :: 0x3F
|
||||
HID_USAGE_LED_INDICATOR_FAST_BLINK :: 0x40
|
||||
HID_USAGE_LED_INDICATOR_OFF :: 0x41
|
||||
HID_USAGE_LED_FLASH_ON_TIME :: 0x42
|
||||
HID_USAGE_LED_SLOW_BLINK_ON_TIME :: 0x43
|
||||
HID_USAGE_LED_SLOW_BLINK_OFF_TIME :: 0x44
|
||||
HID_USAGE_LED_FAST_BLINK_ON_TIME :: 0x45
|
||||
HID_USAGE_LED_FAST_BLINK_OFF_TIME :: 0x46
|
||||
HID_USAGE_LED_INDICATOR_COLOR :: 0x47
|
||||
HID_USAGE_LED_RED :: 0x48
|
||||
HID_USAGE_LED_GREEN :: 0x49
|
||||
HID_USAGE_LED_AMBER :: 0x4A
|
||||
HID_USAGE_LED_GENERIC_INDICATOR :: 0x4B
|
||||
HID_USAGE_LED_SYSTEM_SUSPEND :: 0x4C
|
||||
HID_USAGE_LED_EXTERNAL_POWER :: 0x4D
|
||||
|
||||
HID_USAGE_TELEPHONY_PHONE :: 0x01
|
||||
HID_USAGE_TELEPHONY_ANSWERING_MACHINE :: 0x02
|
||||
HID_USAGE_TELEPHONY_MESSAGE_CONTROLS :: 0x03
|
||||
HID_USAGE_TELEPHONY_HANDSET :: 0x04
|
||||
HID_USAGE_TELEPHONY_HEADSET :: 0x05
|
||||
HID_USAGE_TELEPHONY_KEYPAD :: 0x06
|
||||
HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON :: 0x07
|
||||
HID_USAGE_TELEPHONY_REDIAL :: 0x24
|
||||
HID_USAGE_TELEPHONY_TRANSFER :: 0x25
|
||||
HID_USAGE_TELEPHONY_DROP :: 0x26
|
||||
HID_USAGE_TELEPHONY_LINE :: 0x2A
|
||||
HID_USAGE_TELEPHONY_RING_ENABLE :: 0x2D
|
||||
HID_USAGE_TELEPHONY_SEND :: 0x31
|
||||
HID_USAGE_TELEPHONY_KEYPAD_0 :: 0xB0
|
||||
HID_USAGE_TELEPHONY_KEYPAD_D :: 0xBF
|
||||
HID_USAGE_TELEPHONY_HOST_AVAILABLE :: 0xF1
|
||||
|
||||
HID_USAGE_CONSUMERCTRL :: 0x01
|
||||
|
||||
// channel
|
||||
HID_USAGE_CONSUMER_CHANNEL_INCREMENT :: 0x9C
|
||||
HID_USAGE_CONSUMER_CHANNEL_DECREMENT :: 0x9D
|
||||
|
||||
// transport control
|
||||
HID_USAGE_CONSUMER_PLAY :: 0xB0
|
||||
HID_USAGE_CONSUMER_PAUSE :: 0xB1
|
||||
HID_USAGE_CONSUMER_RECORD :: 0xB2
|
||||
HID_USAGE_CONSUMER_FAST_FORWARD :: 0xB3
|
||||
HID_USAGE_CONSUMER_REWIND :: 0xB4
|
||||
HID_USAGE_CONSUMER_SCAN_NEXT_TRACK :: 0xB5
|
||||
HID_USAGE_CONSUMER_SCAN_PREV_TRACK :: 0xB6
|
||||
HID_USAGE_CONSUMER_STOP :: 0xB7
|
||||
HID_USAGE_CONSUMER_PLAY_PAUSE :: 0xCD
|
||||
|
||||
// GameDVR
|
||||
HID_USAGE_CONSUMER_GAMEDVR_OPEN_GAMEBAR :: 0xD0
|
||||
HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_RECORD :: 0xD1
|
||||
HID_USAGE_CONSUMER_GAMEDVR_RECORD_CLIP :: 0xD2
|
||||
HID_USAGE_CONSUMER_GAMEDVR_SCREENSHOT :: 0xD3
|
||||
HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_INDICATOR :: 0xD4
|
||||
HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_MICROPHONE :: 0xD5
|
||||
HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_CAMERA :: 0xD6
|
||||
HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_BROADCAST :: 0xD7
|
||||
|
||||
// audio
|
||||
HID_USAGE_CONSUMER_VOLUME :: 0xE0
|
||||
HID_USAGE_CONSUMER_BALANCE :: 0xE1
|
||||
HID_USAGE_CONSUMER_MUTE :: 0xE2
|
||||
HID_USAGE_CONSUMER_BASS :: 0xE3
|
||||
HID_USAGE_CONSUMER_TREBLE :: 0xE4
|
||||
HID_USAGE_CONSUMER_BASS_BOOST :: 0xE5
|
||||
HID_USAGE_CONSUMER_SURROUND_MODE :: 0xE6
|
||||
HID_USAGE_CONSUMER_LOUDNESS :: 0xE7
|
||||
HID_USAGE_CONSUMER_MPX :: 0xE8
|
||||
HID_USAGE_CONSUMER_VOLUME_INCREMENT :: 0xE9
|
||||
HID_USAGE_CONSUMER_VOLUME_DECREMENT :: 0xEA
|
||||
|
||||
// supplementary audio
|
||||
HID_USAGE_CONSUMER_BASS_INCREMENT :: 0x152
|
||||
HID_USAGE_CONSUMER_BASS_DECREMENT :: 0x153
|
||||
HID_USAGE_CONSUMER_TREBLE_INCREMENT :: 0x154
|
||||
HID_USAGE_CONSUMER_TREBLE_DECREMENT :: 0x155
|
||||
|
||||
// Application Launch
|
||||
HID_USAGE_CONSUMER_AL_CONFIGURATION :: 0x183
|
||||
HID_USAGE_CONSUMER_AL_EMAIL :: 0x18A
|
||||
HID_USAGE_CONSUMER_AL_CALCULATOR :: 0x192
|
||||
HID_USAGE_CONSUMER_AL_BROWSER :: 0x194
|
||||
HID_USAGE_CONSUMER_AL_SEARCH :: 0x1C6
|
||||
|
||||
// Application Control
|
||||
HID_USAGE_CONSUMER_AC_SEARCH :: 0x221
|
||||
HID_USAGE_CONSUMER_AC_GOTO :: 0x222
|
||||
HID_USAGE_CONSUMER_AC_HOME :: 0x223
|
||||
HID_USAGE_CONSUMER_AC_BACK :: 0x224
|
||||
HID_USAGE_CONSUMER_AC_FORWARD :: 0x225
|
||||
HID_USAGE_CONSUMER_AC_STOP :: 0x226
|
||||
HID_USAGE_CONSUMER_AC_REFRESH :: 0x227
|
||||
HID_USAGE_CONSUMER_AC_PREVIOUS :: 0x228
|
||||
HID_USAGE_CONSUMER_AC_NEXT :: 0x229
|
||||
HID_USAGE_CONSUMER_AC_BOOKMARKS :: 0x22A
|
||||
HID_USAGE_CONSUMER_AC_PAN :: 0x238
|
||||
|
||||
// Keyboard Extended Attributes (defined on consumer page in HUTRR42)
|
||||
HID_USAGE_CONSUMER_EXTENDED_KEYBOARD_ATTRIBUTES_COLLECTION :: 0x2C0
|
||||
HID_USAGE_CONSUMER_KEYBOARD_FORM_FACTOR :: 0x2C1
|
||||
HID_USAGE_CONSUMER_KEYBOARD_KEY_TYPE :: 0x2C2
|
||||
HID_USAGE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT :: 0x2C3
|
||||
HID_USAGE_CONSUMER_VENDOR_SPECIFIC_KEYBOARD_PHYSICAL_LAYOUT :: 0x2C4
|
||||
HID_USAGE_CONSUMER_KEYBOARD_IETF_LANGUAGE_TAG_INDEX :: 0x2C5
|
||||
HID_USAGE_CONSUMER_IMPLEMENTED_KEYBOARD_INPUT_ASSIST_CONTROLS :: 0x2C6
|
||||
|
||||
HID_USAGE_DIGITIZER_DIGITIZER :: 0x01
|
||||
HID_USAGE_DIGITIZER_PEN :: 0x02
|
||||
HID_USAGE_DIGITIZER_LIGHT_PEN :: 0x03
|
||||
HID_USAGE_DIGITIZER_TOUCH_SCREEN :: 0x04
|
||||
HID_USAGE_DIGITIZER_TOUCH_PAD :: 0x05
|
||||
HID_USAGE_DIGITIZER_WHITE_BOARD :: 0x06
|
||||
HID_USAGE_DIGITIZER_COORD_MEASURING :: 0x07
|
||||
HID_USAGE_DIGITIZER_3D_DIGITIZER :: 0x08
|
||||
HID_USAGE_DIGITIZER_STEREO_PLOTTER :: 0x09
|
||||
HID_USAGE_DIGITIZER_ARTICULATED_ARM :: 0x0A
|
||||
HID_USAGE_DIGITIZER_ARMATURE :: 0x0B
|
||||
HID_USAGE_DIGITIZER_MULTI_POINT :: 0x0C
|
||||
HID_USAGE_DIGITIZER_FREE_SPACE_WAND :: 0x0D
|
||||
HID_USAGE_DIGITIZER_HEAT_MAP :: 0x0F
|
||||
HID_USAGE_DIGITIZER_STYLUS :: 0x20
|
||||
HID_USAGE_DIGITIZER_PUCK :: 0x21
|
||||
HID_USAGE_DIGITIZER_FINGER :: 0x22
|
||||
HID_USAGE_DIGITIZER_TABLET_FUNC_KEYS :: 0x39
|
||||
HID_USAGE_DIGITIZER_PROG_CHANGE_KEYS :: 0x3A
|
||||
|
||||
HID_USAGE_DIGITIZER_TIP_PRESSURE :: 0x30
|
||||
HID_USAGE_DIGITIZER_BARREL_PRESSURE :: 0x31
|
||||
HID_USAGE_DIGITIZER_IN_RANGE :: 0x32
|
||||
HID_USAGE_DIGITIZER_TOUCH :: 0x33
|
||||
HID_USAGE_DIGITIZER_UNTOUCH :: 0x34
|
||||
HID_USAGE_DIGITIZER_TAP :: 0x35
|
||||
HID_USAGE_DIGITIZER_QUALITY :: 0x36
|
||||
HID_USAGE_DIGITIZER_DATA_VALID :: 0x37
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_INDEX :: 0x38
|
||||
HID_USAGE_DIGITIZER_BATTERY_STRENGTH :: 0x3B
|
||||
HID_USAGE_DIGITIZER_INVERT :: 0x3C
|
||||
HID_USAGE_DIGITIZER_X_TILT :: 0x3D
|
||||
HID_USAGE_DIGITIZER_Y_TILT :: 0x3E
|
||||
HID_USAGE_DIGITIZER_AZIMUTH :: 0x3F
|
||||
HID_USAGE_DIGITIZER_ALTITUDE :: 0x40
|
||||
HID_USAGE_DIGITIZER_TWIST :: 0x41
|
||||
HID_USAGE_DIGITIZER_TIP_SWITCH :: 0x42
|
||||
HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH :: 0x43
|
||||
HID_USAGE_DIGITIZER_BARREL_SWITCH :: 0x44
|
||||
HID_USAGE_DIGITIZER_ERASER :: 0x45
|
||||
HID_USAGE_DIGITIZER_TABLET_PICK :: 0x46
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL :: 0x5B
|
||||
HID_USAGE_DIGITIZER_HEAT_MAP_PROTOCOL_VENDOR_ID :: 0x6A
|
||||
HID_USAGE_DIGITIZER_HEAT_MAP_PROTOCOL_VERSION :: 0x6B
|
||||
HID_USAGE_DIGITIZER_HEAT_MAP_FRAME_DATA :: 0x6C
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_PART2 :: 0x6E
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_VENDOR :: 0x91
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_PRODUCT :: 0x92
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_CONNECTED :: 0xA2
|
||||
|
||||
HID_USAGE_HAPTICS_SIMPLE_CONTROLLER :: 0x01
|
||||
|
||||
HID_USAGE_HAPTICS_WAVEFORM_LIST :: 0x10
|
||||
HID_USAGE_HAPTICS_DURATION_LIST :: 0x11
|
||||
|
||||
HID_USAGE_HAPTICS_AUTO_TRIGGER :: 0x20
|
||||
HID_USAGE_HAPTICS_MANUAL_TRIGGER :: 0x21
|
||||
HID_USAGE_HAPTICS_AUTO_ASSOCIATED_CONTROL :: 0x22
|
||||
HID_USAGE_HAPTICS_INTENSITY :: 0x23
|
||||
HID_USAGE_HAPTICS_REPEAT_COUNT :: 0x24
|
||||
HID_USAGE_HAPTICS_RETRIGGER_PERIOD :: 0x25
|
||||
HID_USAGE_HAPTICS_WAVEFORM_VENDOR_PAGE :: 0x26
|
||||
HID_USAGE_HAPTICS_WAVEFORM_VENDOR_ID :: 0x27
|
||||
HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME :: 0x28
|
||||
|
||||
// Waveform types
|
||||
HID_USAGE_HAPTICS_WAVEFORM_BEGIN :: 0x1000
|
||||
HID_USAGE_HAPTICS_WAVEFORM_STOP :: 0x1001
|
||||
HID_USAGE_HAPTICS_WAVEFORM_NULL :: 0x1002
|
||||
HID_USAGE_HAPTICS_WAVEFORM_CLICK :: 0x1003
|
||||
HID_USAGE_HAPTICS_WAVEFORM_BUZZ :: 0x1004
|
||||
HID_USAGE_HAPTICS_WAVEFORM_RUMBLE :: 0x1005
|
||||
HID_USAGE_HAPTICS_WAVEFORM_PRESS :: 0x1006
|
||||
HID_USAGE_HAPTICS_WAVEFORM_RELEASE :: 0x1007
|
||||
HID_USAGE_HAPTICS_WAVEFORM_END :: 0x1FFF
|
||||
|
||||
HID_USAGE_HAPTICS_WAVEFORM_VENDOR_BEGIN :: 0x2000
|
||||
HID_USAGE_HAPTICS_WAVEFORM_VENDOR_END :: 0x2FFF
|
||||
|
||||
HID_USAGE_ALPHANUMERIC_ALPHANUMERIC_DISPLAY :: 0x01
|
||||
HID_USAGE_ALPHANUMERIC_BITMAPPED_DISPLAY :: 0x02
|
||||
HID_USAGE_ALPHANUMERIC_DISPLAY_ATTRIBUTES_REPORT :: 0x20
|
||||
HID_USAGE_ALPHANUMERIC_DISPLAY_CONTROL_REPORT :: 0x24
|
||||
HID_USAGE_ALPHANUMERIC_CHARACTER_REPORT :: 0x2B
|
||||
HID_USAGE_ALPHANUMERIC_DISPLAY_STATUS :: 0x2D
|
||||
HID_USAGE_ALPHANUMERIC_CURSOR_POSITION_REPORT :: 0x32
|
||||
HID_USAGE_ALPHANUMERIC_FONT_REPORT :: 0x3B
|
||||
HID_USAGE_ALPHANUMERIC_FONT_DATA :: 0x3C
|
||||
HID_USAGE_ALPHANUMERIC_CHARACTER_ATTRIBUTE :: 0x48
|
||||
HID_USAGE_ALPHANUMERIC_PALETTE_REPORT :: 0x85
|
||||
HID_USAGE_ALPHANUMERIC_PALETTE_DATA :: 0x88
|
||||
HID_USAGE_ALPHANUMERIC_BLIT_REPORT :: 0x8A
|
||||
HID_USAGE_ALPHANUMERIC_BLIT_DATA :: 0x8F
|
||||
HID_USAGE_ALPHANUMERIC_SOFT_BUTTON :: 0x90
|
||||
|
||||
HID_USAGE_ALPHANUMERIC_ASCII_CHARACTER_SET :: 0x21
|
||||
HID_USAGE_ALPHANUMERIC_DATA_READ_BACK :: 0x22
|
||||
HID_USAGE_ALPHANUMERIC_FONT_READ_BACK :: 0x23
|
||||
HID_USAGE_ALPHANUMERIC_CLEAR_DISPLAY :: 0x25
|
||||
HID_USAGE_ALPHANUMERIC_DISPLAY_ENABLE :: 0x26
|
||||
HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_DELAY :: 0x27
|
||||
HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_ENABLE :: 0x28
|
||||
HID_USAGE_ALPHANUMERIC_VERTICAL_SCROLL :: 0x29
|
||||
HID_USAGE_ALPHANUMERIC_HORIZONTAL_SCROLL :: 0x2A
|
||||
HID_USAGE_ALPHANUMERIC_DISPLAY_DATA :: 0x2C
|
||||
HID_USAGE_ALPHANUMERIC_STATUS_NOT_READY :: 0x2E
|
||||
HID_USAGE_ALPHANUMERIC_STATUS_READY :: 0x2F
|
||||
HID_USAGE_ALPHANUMERIC_ERR_NOT_A_LOADABLE_CHARACTER :: 0x30
|
||||
HID_USAGE_ALPHANUMERIC_ERR_FONT_DATA_CANNOT_BE_READ :: 0x31
|
||||
HID_USAGE_ALPHANUMERIC_ROW :: 0x33
|
||||
HID_USAGE_ALPHANUMERIC_COLUMN :: 0x34
|
||||
HID_USAGE_ALPHANUMERIC_ROWS :: 0x35
|
||||
HID_USAGE_ALPHANUMERIC_COLUMNS :: 0x36
|
||||
HID_USAGE_ALPHANUMERIC_CURSOR_PIXEL_POSITIONING :: 0x37
|
||||
HID_USAGE_ALPHANUMERIC_CURSOR_MODE :: 0x38
|
||||
HID_USAGE_ALPHANUMERIC_CURSOR_ENABLE :: 0x39
|
||||
HID_USAGE_ALPHANUMERIC_CURSOR_BLINK :: 0x3A
|
||||
HID_USAGE_ALPHANUMERIC_CHAR_WIDTH :: 0x3D
|
||||
HID_USAGE_ALPHANUMERIC_CHAR_HEIGHT :: 0x3E
|
||||
HID_USAGE_ALPHANUMERIC_CHAR_SPACING_HORIZONTAL :: 0x3F
|
||||
HID_USAGE_ALPHANUMERIC_CHAR_SPACING_VERTICAL :: 0x40
|
||||
HID_USAGE_ALPHANUMERIC_UNICODE_CHAR_SET :: 0x41
|
||||
HID_USAGE_ALPHANUMERIC_FONT_7_SEGMENT :: 0x42
|
||||
HID_USAGE_ALPHANUMERIC_7_SEGMENT_DIRECT_MAP :: 0x43
|
||||
HID_USAGE_ALPHANUMERIC_FONT_14_SEGMENT :: 0x44
|
||||
HID_USAGE_ALPHANUMERIC_14_SEGMENT_DIRECT_MAP :: 0x45
|
||||
HID_USAGE_ALPHANUMERIC_DISPLAY_BRIGHTNESS :: 0x46
|
||||
HID_USAGE_ALPHANUMERIC_DISPLAY_CONTRAST :: 0x47
|
||||
HID_USAGE_ALPHANUMERIC_ATTRIBUTE_READBACK :: 0x49
|
||||
HID_USAGE_ALPHANUMERIC_ATTRIBUTE_DATA :: 0x4A
|
||||
HID_USAGE_ALPHANUMERIC_CHAR_ATTR_ENHANCE :: 0x4B
|
||||
HID_USAGE_ALPHANUMERIC_CHAR_ATTR_UNDERLINE :: 0x4C
|
||||
HID_USAGE_ALPHANUMERIC_CHAR_ATTR_BLINK :: 0x4D
|
||||
HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_X :: 0x80
|
||||
HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_Y :: 0x81
|
||||
HID_USAGE_ALPHANUMERIC_BIT_DEPTH_FORMAT :: 0x83
|
||||
HID_USAGE_ALPHANUMERIC_DISPLAY_ORIENTATION :: 0x84
|
||||
HID_USAGE_ALPHANUMERIC_PALETTE_DATA_SIZE :: 0x86
|
||||
HID_USAGE_ALPHANUMERIC_PALETTE_DATA_OFFSET :: 0x87
|
||||
HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X1 :: 0x8B
|
||||
HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y1 :: 0x8C
|
||||
HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X2 :: 0x8D
|
||||
HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y2 :: 0x8E
|
||||
HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_ID :: 0x91
|
||||
HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_SIDE :: 0x92
|
||||
HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET1 :: 0x93
|
||||
HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET2 :: 0x94
|
||||
HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_REPORT :: 0x95
|
||||
|
||||
HID_USAGE_LAMPARRAY :: 0x01
|
||||
HID_USAGE_LAMPARRAY_ATTRBIUTES_REPORT :: 0x02
|
||||
HID_USAGE_LAMPARRAY_LAMP_COUNT :: 0x03
|
||||
HID_USAGE_LAMPARRAY_BOUNDING_BOX_WIDTH_IN_MICROMETERS :: 0x04
|
||||
HID_USAGE_LAMPARRAY_BOUNDING_BOX_HEIGHT_IN_MICROMETERS :: 0x05
|
||||
HID_USAGE_LAMPARRAY_BOUNDING_BOX_DEPTH_IN_MICROMETERS :: 0x06
|
||||
HID_USAGE_LAMPARRAY_KIND :: 0x07
|
||||
HID_USAGE_LAMPARRAY_MIN_UPDATE_INTERVAL_IN_MICROSECONDS :: 0x08
|
||||
|
||||
// 0x09 - 0x1F Reserved
|
||||
|
||||
HID_USAGE_LAMPARRAY_LAMP_ATTRIBUTES_REQUEST_REPORT :: 0x20
|
||||
HID_USAGE_LAMPARRAY_LAMP_ID :: 0x21
|
||||
HID_USAGE_LAMPARRAY_LAMP_ATTRIBUTES_RESPONSE_REPORT :: 0x22
|
||||
HID_USAGE_LAMPARRAY_POSITION_X_IN_MICROMETERS :: 0x23
|
||||
HID_USAGE_LAMPARRAY_POSITION_Y_IN_MICROMETERS :: 0x24
|
||||
HID_USAGE_LAMPARRAY_POSITION_Z_IN_MICROMETERS :: 0x25
|
||||
HID_USAGE_LAMPARRAY_LAMP_PURPOSES :: 0x26
|
||||
HID_USAGE_LAMPARRAY_UPDATE_LATENCY_IN_MICROSECONDS :: 0x27
|
||||
HID_USAGE_LAMPARRAY_RED_LEVEL_COUNT :: 0x28
|
||||
HID_USAGE_LAMPARRAY_GREEN_LEVEL_COUNT :: 0x29
|
||||
HID_USAGE_LAMPARRAY_BLUE_LEVEL_COUNT :: 0x2A
|
||||
HID_USAGE_LAMPARRAY_INTENSITY_LEVEL_COUNT :: 0x2B
|
||||
HID_USAGE_LAMPARRAY_IS_PROGRAMMABLE :: 0x2C
|
||||
HID_USAGE_LAMPARRAY_INPUT_BINDING :: 0x2D
|
||||
|
||||
// 0x2E - 0x4F Reserved
|
||||
|
||||
HID_USAGE_LAMPARRAY_LAMP_MULTI_UPDATE_REPORT :: 0x50
|
||||
HID_USAGE_LAMPARRAY_LAMP_RED_UPDATE_CHANNEL :: 0x51
|
||||
HID_USAGE_LAMPARRAY_LAMP_GREEN_UPDATE_CHANNEL :: 0x52
|
||||
HID_USAGE_LAMPARRAY_LAMP_BLUE_UPDATE_CHANNEL :: 0x53
|
||||
HID_USAGE_LAMPARRAY_LAMP_INTENSITY_UPDATE_CHANNEL :: 0x54
|
||||
HID_USAGE_LAMPARRAY_LAMP_UPDATE_FLAGS :: 0x55
|
||||
|
||||
// 0x55 - 0x5F Reserved
|
||||
|
||||
HID_USAGE_LAMPARRAY_LAMP_RANGE_UPDATE_REPORT :: 0x60
|
||||
HID_USAGE_LAMPARRAY_LAMP_ID_START :: 0x61
|
||||
HID_USAGE_LAMPARRAY_LAMP_ID_END :: 0x62
|
||||
|
||||
// 0x63 - 0x6F Reserved
|
||||
|
||||
HID_USAGE_LAMPARRAY_CONTROL_REPORT :: 0x70
|
||||
HID_USAGE_LAMPARRAY_AUTONOMOUS_MODE :: 0x71
|
||||
|
||||
HID_USAGE_CAMERA_AUTO_FOCUS :: 0x20
|
||||
HID_USAGE_CAMERA_SHUTTER :: 0x21
|
||||
|
||||
HID_USAGE_MS_BTH_HF_DIALNUMBER :: 0x21
|
||||
HID_USAGE_MS_BTH_HF_DIALMEMORY :: 0x22
|
||||
@@ -429,6 +429,8 @@ foreign kernel32 {
|
||||
DisconnectNamedPipe :: proc(hNamedPipe: HANDLE) -> BOOL ---
|
||||
WaitNamedPipeW :: proc(lpNamedPipeName: LPCWSTR, nTimeOut: DWORD) -> BOOL ---
|
||||
|
||||
AllocConsole :: proc() -> BOOL ---
|
||||
AttachConsole :: proc(dwProcessId: DWORD) -> BOOL ---
|
||||
SetConsoleCtrlHandler :: proc(HandlerRoutine: PHANDLER_ROUTINE, Add: BOOL) -> BOOL ---
|
||||
GenerateConsoleCtrlEvent :: proc(dwCtrlEvent: DWORD, dwProcessGroupId: DWORD) -> BOOL ---
|
||||
FreeConsole :: proc() -> BOOL ---
|
||||
|
||||
@@ -356,9 +356,9 @@ RAWHID :: struct {
|
||||
|
||||
RAWMOUSE :: struct {
|
||||
usFlags: USHORT,
|
||||
DUMMYUNIONNAME: struct #raw_union {
|
||||
using DUMMYUNIONNAME: struct #raw_union {
|
||||
ulButtons: ULONG,
|
||||
DUMMYSTRUCTNAME: struct {
|
||||
using DUMMYSTRUCTNAME: struct {
|
||||
usButtonFlags: USHORT,
|
||||
usButtonData: USHORT,
|
||||
},
|
||||
@@ -434,7 +434,7 @@ RID_DEVICE_INFO_MOUSE :: struct {
|
||||
RID_DEVICE_INFO :: struct {
|
||||
cbSize: DWORD,
|
||||
dwType: DWORD,
|
||||
DUMMYUNIONNAME: struct #raw_union {
|
||||
using DUMMYUNIONNAME: struct #raw_union {
|
||||
mouse: RID_DEVICE_INFO_MOUSE,
|
||||
keyboard: RID_DEVICE_INFO_KEYBOARD,
|
||||
hid: RID_DEVICE_INFO_HID,
|
||||
@@ -455,10 +455,21 @@ RIDEV_DEVNOTIFY :: 0x00002000
|
||||
RID_HEADER :: 0x10000005
|
||||
RID_INPUT :: 0x10000003
|
||||
|
||||
RIDI_PREPARSEDDATA :: 0x20000005
|
||||
RIDI_DEVICENAME :: 0x20000007
|
||||
RIDI_DEVICEINFO :: 0x2000000b
|
||||
|
||||
RIM_TYPEMOUSE :: 0
|
||||
RIM_TYPEKEYBOARD :: 1
|
||||
RIM_TYPEHID :: 2
|
||||
|
||||
RI_KEY_MAKE :: 0
|
||||
RI_KEY_BREAK :: 1
|
||||
RI_KEY_E0 :: 2
|
||||
RI_KEY_E1 :: 4
|
||||
RI_KEY_TERMSRV_SET_LED :: 8
|
||||
RI_KEY_TERMSRV_SHADOW :: 0x10
|
||||
|
||||
MOUSE_MOVE_RELATIVE :: 0x00
|
||||
MOUSE_MOVE_ABSOLUTE :: 0x01
|
||||
MOUSE_VIRTUAL_DESKTOP :: 0x02
|
||||
@@ -484,19 +495,6 @@ RI_MOUSE_BUTTON_5_UP :: 0x0200
|
||||
RI_MOUSE_WHEEL :: 0x0400
|
||||
RI_MOUSE_HWHEEL :: 0x0800
|
||||
|
||||
HID_USAGE_PAGE_GENERIC :: 0x01
|
||||
HID_USAGE_PAGE_GAME :: 0x05
|
||||
HID_USAGE_PAGE_LED :: 0x08
|
||||
HID_USAGE_PAGE_BUTTON :: 0x09
|
||||
|
||||
HID_USAGE_GENERIC_POINTER :: 0x01
|
||||
HID_USAGE_GENERIC_MOUSE :: 0x02
|
||||
HID_USAGE_GENERIC_JOYSTICK :: 0x04
|
||||
HID_USAGE_GENERIC_GAMEPAD :: 0x05
|
||||
HID_USAGE_GENERIC_KEYBOARD :: 0x06
|
||||
HID_USAGE_GENERIC_KEYPAD :: 0x07
|
||||
HID_USAGE_GENERIC_MULTI_AXIS_CONTROLLER :: 0x08
|
||||
|
||||
WINDOWPLACEMENT :: struct {
|
||||
length: UINT,
|
||||
flags: UINT,
|
||||
@@ -521,11 +519,11 @@ WINDOWINFO :: struct {
|
||||
PWINDOWINFO :: ^WINDOWINFO
|
||||
|
||||
DRAWTEXTPARAMS :: struct {
|
||||
cbSize : UINT ,
|
||||
iTabLength: int ,
|
||||
iLeftMargin: int ,
|
||||
iRightMargin: int ,
|
||||
uiLengthDrawn: UINT ,
|
||||
cbSize: UINT,
|
||||
iTabLength: int,
|
||||
iLeftMargin: int,
|
||||
iRightMargin: int,
|
||||
uiLengthDrawn: UINT,
|
||||
}
|
||||
PDRAWTEXTPARAMS :: ^DRAWTEXTPARAMS
|
||||
|
||||
|
||||
Reference in New Issue
Block a user