{{DISPLAYTITLE:_DEVICEINPUT}} The '''_DEVICEINPUT''' function returns the device number when a controller device button, wheel or axis event occurs. {{PageSyntax}} : {{Parameter|device%}} = [[_DEVICEINPUT]] : {{Parameter|device_active%}} = [[_DEVICEINPUT]]({{Parameter|device_number%}}) {{Parameters}} * Use the _DEVICEINPUT {{Parameter|device%}} [[INTEGER]] returned to find the number of the controller device being used. * A literal specific {{Parameter|device_number%}} parameter can be used to return -1 if active or 0 if inactive. {{text|EX: '''WHILE _DEVICEINPUT(2)'''|green}} {{PageDescription}} * Use [[_DEVICES]] to find the number of controller devices available BEFORE using this function. * [[_DEVICE$]] can be used to list the device names and control types using valid [[_DEVICES]] numbers. * When a device button is pressed or a scroll wheel or axis is moved, the device number will be returned. * Devices are numbered as 1 for keyboard and 2 for mouse. Other controller devices will be numbered 3 or higher if installed. * [[_LASTBUTTON]], [[_LASTAXIS]], or [[_LASTWHEEL]] will indicate the number of functions available with the specified ''device'' number. * User input events can be monitored reading valid numbered [[_AXIS]], [[_BUTTON]], [[_BUTTONCHANGE]] or [[_WHEEL]] functions. * ''Note:'' [[ON...GOSUB|ON _DEVICEINPUT GOSUB]] keyboard, mouse, gamecontrol can be used to control the devices 1,2 and 3, etc. {{PageExamples}} ''Example 1:'' Checking device controller interfaces and finding out what devices are being used. {{CodeStart}} '' '' {{Cl|FOR...NEXT|FOR}} i = 1 {{Cl|TO}} {{Cl|_DEVICES}} {{Cl|PRINT}} {{Cl|STR$}}(i) + ") " + {{Cl|_DEVICE$}}(i) {{Cl|PRINT}} "Button:"; {{Cl|_LASTBUTTON}}(i); ",Axis:"; {{Cl|_LASTAXIS}}(i); ",Wheel:"; {{Cl|_LASTWHEEL}}(i) {{Cl|NEXT}} {{Cl|PRINT}} DO x = {{Cl|_DEVICEINPUT}} {{Cl|IF...THEN|IF}} x {{Cl|THEN}} {{Cl|PRINT}} "Device ="; x; {{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}(27) 'escape key exit {{Cl|END}} '' '' {{CodeEnd}} {{OutputStart}}[KEYBOARD][BUTTON] Buttons: 512 Axis: 0 Wheels: 0 [MOUSE][BUTTON][AXIS][WHEEL] Buttons: 3 Axis: 2 Wheels: 3 [CONTROLLER][[NAME][Microsoft Sidewinder Precision Pro (USB)]][BUTTON][AXIS] Buttons: 9 Axis: 6 Wheels: 0 Device = 2 Device = 2 {{OutputEnd}} : ''Note:'' Mouse events must be within the program screen area. Keyboard presses are registered only when program is in focus. ''Example 2:'' Why does a mouse have 3 wheels? Relative x and y movements can be read using the first 2 [[_WHEEL]] reads. {{CodeStart}} '' '' ignore = {{Cl|_MOUSEMOVEMENTX}} 'dummy call to put mouse into relative movement mode {{Cl|PRINT}} "Move your mouse and/or your mouse wheel (ESC to exit)" d = {{Cl|_DEVICES}} ' always read number of devices to enable device input DO: {{Cl|_LIMIT}} 30 'main loop {{Cl|DO...LOOP|DO}} {{Cl|WHILE}} {{Cl|_DEVICEINPUT}}(2) 'loop only runs during a device 2 mouse event {{Cl|PRINT}} {{Cl|_WHEEL}}(1), {{Cl|_WHEEL}}(2), {{Cl|_WHEEL}}(3) {{Cl|LOOP}} {{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}(27) '' '' {{CodeEnd}} : ''Explanation:'' Referencing the [[_MOUSEMOVEMENTX]] function hides the mouse and sets the mouse to a relative movement mode which can be read by [[_WHEEL]]. [[_DEVICEINPUT]](2) returns -1 (true) only when the mouse is moved, scrolled or clicked. ''Example 3:'' Using [[ON...GOSUB]] with the [[_DEVICEINPUT]] number to add keyboard, mouse and game controller event procedures. {{CodeStart}} '' '' n = {{Cl|_DEVICES}} 'required when reading devices {{Cl|PRINT}} "Number of devices found ="; n {{Cl|FOR...NEXT|FOR}} i = 1 TO n PRINT i; _DEVICE$(i) ' 1 = keyboard, 2 = mouse, 3 = other controller, etc. {{Cl|NEXT}} {{Cl|PRINT}} {{Cl|DO...LOOP|DO}}: device = {{Cl|_DEVICEINPUT}} {{Cl|ON...GOSUB|ON device GOSUB}} keyboard, mouse, controller 'must be inside program loop {{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}(27) {{Cl|END}} keyboard: {{Cl|PRINT}} device; "Keyboard"; {{Cl|RETURN}} mouse: {{Cl|PRINT}} device; "Mouse "; {{Cl|RETURN}} controller: {{Cl|PRINT}} device; "Game control "; {{Cl|RETURN}} '' '' {{CodeEnd}} {{small|Code by Ted Weissgerber}} : ''Note:'' [[ON...GOSUB]] and [[ON...GOTO]] events require numerical values to match the order of line labels listed in the event used inside loops. {{PageSeeAlso}} * [[_DEVICES]], [[_DEVICE$]] * [[_LASTBUTTON]], [[_LASTAXIS]], [[_LASTWHEEL]] * [[_BUTTON]], [[_AXIS]], [[_WHEEL]] * [[STRIG]], [[STICK]] * [[ON...GOSUB]] {{text|(numerical events)}} * [[Controller Devices]] {{PageNavigation}} <