MaxQuantum = 4 ; (* Maximum ticks a process may consume *)
(* before being rescheduled. *)
BaseTicks = 1000000 ; (* Max resolution of clock ticks per sec *)
- TimerStackSize = 100000H ; (* Reasonable sized stack for a process *)
- Debugging = FALSE ; (* Do you want lots of debugging info? *)
+ TimerStackSize = 100000H ; (* Reasonable sized stack for a process *)
+ Debugging = FALSE ; (* Do you want lots of debugging info? *)
+ EnableLED = FALSE ; (* Should the scroll LED be pulsed? *)
TYPE
EVENT = POINTER TO RECORD
(* Now compenstate for lost ticks *)
StartClock (TimerIntNo, CurrentCount + (BaseTicks DIV TicksPerSecond)) ;
- (* your code needs to go here *)
- INC (TotalTicks) ; (* (iii) *) (* remove for student *)
- (* now pulse scroll LED *) (* remove for student *)
- IF (TotalTicks MOD TicksPerSecond) = 0 (* remove for student *)
- THEN (* remove for student *)
- ScrollLED := NOT ScrollLED ; (* remove for student *)
- (* r := printf("<scroll %d>", TotalTicks); *)
- SwitchScroll(ScrollLED) (* (iv) *) (* remove for student *)
- END ; (* remove for student *)
- IF (TotalTicks MOD MaxQuantum) = 0 (* remove for student *)
- THEN (* remove for student *)
- RotateRunQueue (* (ii) *) (* remove for student *)
- END ; (* remove for student *)
-
- CheckActiveQueue (* (i) *) (* remove for student *)
+ INC (TotalTicks) ; (* (iii) *)
+ IF EnableLED
+ THEN
+ (* now pulse scroll LED *)
+ IF (TotalTicks MOD TicksPerSecond) = 0
+ THEN
+ ScrollLED := NOT ScrollLED ;
+ (* r := printf("<scroll %d>", TotalTicks); *)
+ SwitchScroll(ScrollLED) (* (iv) *)
+ END
+ END ;
+ IF (TotalTicks MOD MaxQuantum) = 0
+ THEN
+ RotateRunQueue (* (ii) *)
+ END ;
+
+ CheckActiveQueue (* (i) *)
END
END Timer ;
static bool initialized = false;
+void
+initialize_module (void)
+{
+ if (! initialized)
+ {
+ initialized = true;
+ fd = open ("/dev/tty", O_RDONLY);
+ if (fd == -1)
+ {
+ perror ("unable to open /dev/tty");
+ exit (1);
+ }
+ }
+}
+
extern "C" void
EXPORT(SwitchScroll) (int scrolllock)
{
unsigned char leds;
+
+ initialize_module ();
int r = ioctl (fd, KDGETLED, &leds);
if (scrolllock)
leds = leds | LED_SCR;
EXPORT(SwitchNum) (int numlock)
{
unsigned char leds;
+
+ initialize_module ();
int r = ioctl (fd, KDGETLED, &leds);
if (numlock)
leds = leds | LED_NUM;
EXPORT(SwitchCaps) (int capslock)
{
unsigned char leds;
+
+ initialize_module ();
int r = ioctl (fd, KDGETLED, &leds);
if (capslock)
leds = leds | LED_CAP;
extern "C" void
M2EXPORT(init) (int, char **, char **)
{
- if (! initialized)
- {
- initialized = true;
- fd = open ("/dev/tty", O_RDONLY);
- if (fd == -1)
- {
- perror ("unable to open /dev/tty");
- exit (1);
- }
- }
}
#else