package evdev

IOC_NRBITS :: 8
IOC_TYPEBITS :: 8
IOC_SIZEBITS :: 14
IOC_DIRBITS :: 2

IOC_NRSHIFT :: 0
IOC_TYPESHIFT :: IOC_NRSHIFT + IOC_NRBITS
IOC_SIZESHIFT :: IOC_TYPESHIFT + IOC_TYPEBITS
IOC_DIRSHIFT :: IOC_SIZESHIFT + IOC_SIZEBITS

IOC_NONE: uint : 0
IOC_WRITE: uint : 1
IOC_READ: uint : 2

EVIOCGABS ::
	((IOC_READ << IOC_DIRSHIFT) |
		('E' << IOC_TYPESHIFT) |
		((0x40 + ( /* AXIS */0)) << IOC_NRSHIFT) |
		(size_of(InputAbsinfo) << IOC_SIZESHIFT))

EVIOCGKEY ::
	((IOC_READ << IOC_DIRSHIFT) |
		('E' << IOC_TYPESHIFT) |
		(0x18 << IOC_NRSHIFT) |
		(((0x2ff + 7) / 8) << IOC_SIZESHIFT))

foreign import stdc "system:c"
@(default_calling_convention = "c")
foreign stdc {
	strerror :: proc(errnum: int) -> cstring ---
}

/*
#define EVIOCGKEYCODE_V2
	_IOR('E', 0x04, struct input_keymap_entry)

#define EVIOCGKEY(len)
  _IOC(_IOC_READ, 'E', 0x18, len)		/* get global key state */

#define EVIOCGBIT(ev,len)
  _IOC(_IOC_READ, 'E', 0x20 + (ev), len)	/* get event bits */

#define EVIOCGABS(abs)
  _IOR('E', 0x40 + (abs), struct input_absinfo)	/* get abs value/limits */
#define EVIOCSABS(abs)
  _IOW('E', 0xc0 + (abs), struct input_absinfo)	/* set abs value/limits */
*/