]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR modula2/108344 disable default opening of /dev/tty
authorGaius Mulley <gaiusmod2@gmail.com>
Tue, 16 May 2023 14:51:53 +0000 (15:51 +0100)
committerGaius Mulley <gaiusmod2@gmail.com>
Tue, 16 May 2023 14:51:53 +0000 (15:51 +0100)
This patch changes removes the static initialisation code for KeyBoardLEDs.cc.
The module is only initialised if one of the exported functions is called.
This is useful as the module will access /dev/tty which might not be
available.  TimerHandler.mod has also been changed to disable the scroll
lock LED as a sign of life.

gcc/m2/ChangeLog:

PR modula2/108344
* gm2-libs-coroutines/TimerHandler.mod (EnableLED): New constant.
(Timer): Test EnableLED before switching on the scroll LED.

libgm2/ChangeLog:

PR modula2/108344
* libm2cor/KeyBoardLEDs.cc (initialize_module): New function.
(SwitchScroll): Call initialize_module.
(SwitchNum): Call initialize_module.
(SwitchCaps): Call initialize_module.
(SwitchLEDs): Call initialize_module.
(M2EXPORT): Remove initialization code.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
gcc/m2/gm2-libs-coroutines/TimerHandler.mod
libgm2/libm2cor/KeyBoardLEDs.cc

index d3dee319ca163a75400870635a0af73aafdab58e..1285873486d6a22d8c22d0a1f7fc6c4df6886bb3 100644 (file)
@@ -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 ;
 
index 8d2b50bf99ee1a8547be2434418970a406756d5b..32f4c0ce711a772c07cd74ece2377ec383a9c73c 100644 (file)
@@ -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