summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/m2/gm2-libs-coroutines/TimerHandler.mod37
-rw-r--r--libgm2/libm2cor/KeyBoardLEDs.cc31
2 files changed, 41 insertions, 27 deletions
diff --git a/gcc/m2/gm2-libs-coroutines/TimerHandler.mod b/gcc/m2/gm2-libs-coroutines/TimerHandler.mod
index d3dee319ca1..1285873486d 100644
--- a/gcc/m2/gm2-libs-coroutines/TimerHandler.mod
+++ b/gcc/m2/gm2-libs-coroutines/TimerHandler.mod
@@ -41,8 +41,9 @@ CONST
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
@@ -328,21 +329,23 @@ BEGIN
(* 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 ;
diff --git a/libgm2/libm2cor/KeyBoardLEDs.cc b/libgm2/libm2cor/KeyBoardLEDs.cc
index 8d2b50bf99e..32f4c0ce711 100644
--- a/libgm2/libm2cor/KeyBoardLEDs.cc
+++ b/libgm2/libm2cor/KeyBoardLEDs.cc
@@ -46,10 +46,27 @@ static int fd;
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;
@@ -62,6 +79,8 @@ extern "C" void
EXPORT(SwitchNum) (int numlock)
{
unsigned char leds;
+
+ initialize_module ();
int r = ioctl (fd, KDGETLED, &leds);
if (numlock)
leds = leds | LED_NUM;
@@ -74,6 +93,8 @@ extern "C" void
EXPORT(SwitchCaps) (int capslock)
{
unsigned char leds;
+
+ initialize_module ();
int r = ioctl (fd, KDGETLED, &leds);
if (capslock)
leds = leds | LED_CAP;
@@ -93,16 +114,6 @@ EXPORT(SwitchLeds) (int numlock, int capslock, int scrolllock)
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