Well I implemented and finished up XInput and DirectInput extensions for Windows.
The constants...
http://enigma-dev.org/docs/Wiki/Gamepad_constantsThe functions...
http://enigma-dev.org/docs/Wiki/Input_FunctionsGreg has tested them already and we know they work, even from an emulator or virtual machine. Gamepads currently only support Xbox 360 controllers and only on Windows when you enable the XInput extension. You may connect up to 4 devices at any given time, but you should query xinput using the gamepad function provided to see the max number of gamepads you actually can connect. Everything is well documented for you guys, happy programming!
Also, here is a map of the control constants (right click->View Image to enlarge)...

Here is a simple little code example that you can move an object around with the left axis and run with the letter 'A' using.
// demonstrates using the 'A' button on player 1's Xbox 360 controller to move a player around the screen
var spd, lhaxis, lvaxis;
lhaxis = gamepad_axis_value(0, gp_axislh);
lvaxis = gamepad_axis_value(0, gp_axislv);
spd = sqrt(lhaxis * lhaxis + lvaxis * lvaxis) * 5; // calculate the magnitude
spd += gamepad_button_check(0, gp_face1) * 15; // when player is pressing 'A' speed will increase 15
direction = point_direction(0, 0, lhaxis, lvaxis); // use the value of the left axis to determine the player direction
x += lengthdir_x(spd, direction); // use the horizontal position of the left axis to throttle horizontal speed
y -= lengthdir_y(spd, direction); // use the vertical position of the left axis to throttle vertical speed