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("", 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 *) + INC (TotalTicks) ; (* (iii) *) + IF EnableLED + THEN + (* now pulse scroll LED *) + IF (TotalTicks MOD TicksPerSecond) = 0 + THEN + ScrollLED := NOT ScrollLED ; + (* r := printf("", TotalTicks); *) + SwitchScroll(ScrollLED) (* (iv) *) + END + END ; + IF (TotalTicks MOD MaxQuantum) = 0 + THEN + RotateRunQueue (* (ii) *) + END ; - CheckActiveQueue (* (i) *) (* remove for student *) + 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