[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH 1/4] getterm: --once und --auto



+ getterm: Mit --once wird das Programm nicht neugestartet, nachdem es
  sich beendet hat
+ getterm: Mit --auto wird nicht darauf gewartet, dass der Benutzer
  Enter drueckt

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/modules/c/getterm/main.c |   35 +++++++++++++++++++++++++++--------
 1 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/src/modules/c/getterm/main.c b/src/modules/c/getterm/main.c
index 4218f30..aa210e6 100644
--- a/src/modules/c/getterm/main.c
+++ b/src/modules/c/getterm/main.c
@@ -84,10 +84,27 @@ static void console_set_handle(console_handle_t handle, const char* path)
 int main(int argc, char* argv[])
 {
     const char* program;
+    int respawn = 1;
+    int wait_for_key = 1;
+
+    // Mit --once wird das Programm nicht neugestartet
+    // Mit --auto wird nicht auf einen Tastendruck gewartet
+    while (argc > 2) {
+        if (!strcmp(argv[1], "--once")) {
+            respawn = 0;
+        } else if (!strcmp(argv[1], "--auto")) {
+            wait_for_key = 0;
+        } else {
+            break;
+        }
+        argv++;
+        argc--;
+    }
 
     // Wenn die Anzahl der Argumente nicht stimmt wird abgebrochen
     if (argc != 5) {
-        puts("Aufruf: getterm <stdin> <stdout> <stderr> <Programm>");
+        puts("Aufruf: getterm [--once] [--auto] "
+            "<stdin> <stdout> <stderr> <Programm>");
         return -1;
     }
     program = argv[4];
@@ -100,12 +117,14 @@ int main(int argc, char* argv[])
     // Lokale Ein- und Ausgabehandles auch anpassen
     stdio_init();
 
-    while (TRUE) {
-        char input = 0;
-        printf("\n\nEingabetaste druecken um %s zu starten...\n", program);
-        // Auf Druecken der Eingabetaste warten
-        while((fread(&input, 1, 1, stdin) != 1) || (input != '\n')) {
-            yield();
+    do {
+        if (wait_for_key) {
+            char input = 0;
+            printf("\n\nEingabetaste druecken um %s zu starten...\n", program);
+            // Auf Druecken der Eingabetaste warten
+            while((fread(&input, 1, 1, stdin) != 1) || (input != '\n')) {
+                yield();
+            }
         }
 
         pid_t pid = init_execute(program);
@@ -118,7 +137,7 @@ int main(int argc, char* argv[])
 
         // Jetzt wird gewartet, bis der Prozess terminiert
         waitpid(pid, NULL, 0);
-    }
+    } while (respawn);
 
     return 0;
 }
-- 
1.6.0.2