+ } else if ( ret == 0 ) { // select returned with timeout (no fd)
+
+ // timeout occurred; should only happen when 1 or more keys are being held down and
+ // they're "maxhold" keys, so we have to see if their timer has passed
+ unsigned int now = time ( NULL );
+
+ for ( i = i; i < g_evmap_max; i++ ) {
+
+ if ( g_evmap [ i ].keydown_time &&
+ g_evmap [ i ].maxhold &&
+ now - g_evmap [ i ].keydown_time >= g_evmap [ i ].maxhold )
+ {
+ keycode_t *k = (keycode_t*) g_evmap [ i ].reqs;
+ dispatch_key ( k -> keycode, 0 /* key up */ );
+ }
+
+ } // for
+