* actually used values are returned */
struct kbd_repeat {
int delay; /* in msec; <= 0: don't change */
+#ifdef __sparc__
+ int rate; /* in msec; <= 0: don't change */
+#else
int period; /* in msec; <= 0: don't change */
+#endif
};
+#endif /* KDKBDREP */
+
+#ifdef __sparc__
+#define KBD_PERIOD(var) var.rate
+#else
+#define KBD_PERIOD(var) var.period
#endif
#include <signal.h>
struct kbd_repeat kbdrep_s;
/* don't change, just test */
- kbdrep_s.period = -1;
+ KBD_PERIOD(kbdrep_s) = -1;
kbdrep_s.delay = -1;
if (ioctl( 0, KDKBDREP, &kbdrep_s )) {
if (errno == EINVAL || errno == ENOTTY)
#if 0
printf("old delay %d, period %d\n",
- kbdrep_s.delay, kbdrep_s.period);
+ kbdrep_s.delay, KBD_PERIOD(kbdrep_s));
#endif
/* do the change */
if (rate == 0) /* switch repeat off */
- kbdrep_s.period = 0;
+ KBD_PERIOD(kbdrep_s) = 0;
else
- kbdrep_s.period = 1000.0 / rate; /* convert cps to msec */
- if (kbdrep_s.period < 1)
- kbdrep_s.period = 1;
+ KBD_PERIOD(kbdrep_s) = 1000.0 / rate; /* convert cps to msec */
+ if (KBD_PERIOD(kbdrep_s) < 1)
+ KBD_PERIOD(kbdrep_s) = 1;
kbdrep_s.delay = delay;
if (kbdrep_s.delay < 1)
kbdrep_s.delay = 1;
}
/* report */
- if (kbdrep_s.period == 0)
+ if (KBD_PERIOD(kbdrep_s) == 0)
rate = 0;
else
- rate = 1000.0 / (double) kbdrep_s.period;
+ rate = 1000.0 / (double) KBD_PERIOD(kbdrep_s);
if (!silent)
printf( _("Typematic Rate set to %.1f cps (delay = %d ms)\n"),
exit( 1 );
}
- kbdrate_s.period = (int) (rate + 0.5); /* round up */
+ KBD_PERIOD(kbdrate_s) = (int) (rate + 0.5); /* round up */
kbdrate_s.delay = delay * HZ / 1000; /* convert ms to Hz */
- if (kbdrate_s.period > 50)
- kbdrate_s.period = 50;
+ if (KBD_PERIOD(kbdrate_s) > 50)
+ KBD_PERIOD(kbdrate_s) = 50;
if (ioctl( fd, KIOCSRATE, &kbdrate_s )) {
perror( "ioctl(KIOCSRATE)" );
if (!silent)
printf( "Typematic Rate set to %d cps (delay = %d ms)\n",
- kbdrate_s.period, kbdrate_s.delay * 1000 / HZ );
+ KBD_PERIOD(kbdrate_s), kbdrate_s.delay * 1000 / HZ );
return 1;
#else /* no KIOCSRATE */