]> skyeroc.xyz Git - dgamelaunch/commitdiff
Add config file 'sleep' command.
authork21971 <keith.simpson1971@gmail.com>
Tue, 12 Nov 2024 22:08:18 +0000 (17:08 -0500)
committerk21971 <keith.simpson1971@gmail.com>
Tue, 12 Nov 2024 22:08:18 +0000 (17:08 -0500)
Allows adding a delay in seconds where needed.

Co-authored-by: entrez <me@entrez.cc>
config.l
dgamelaunch.h
dgl-common.c

index 01e71f21d79d6a83b8fb52598d35d2a0526d9f1e..bc06d2961c7a8a14b0e79b7fb115e10e8224f0e3 100644 (file)
--- a/config.l
+++ b/config.l
@@ -141,6 +141,7 @@ submenu             { yylval.i = DGLCMD_SUBMENU;     return TYPE_DGLCMD1; }
 return         { yylval.i = DGLCMD_RETURN;      return TYPE_DGLCMD0; }
 redraw         { yylval.i = DGLCMD_REDRAW;     return TYPE_DGLCMD0; }
 rawprint       { yylval.i = DGLCMD_RAWPRINT;    return TYPE_DGLCMD1; }
+sleep          { yylval.i = DGLCMD_SLEEP;       return TYPE_DGLCMD1; }
 DEFINE         { return TYPE_DEFINE_GAME; }
 
 
index a4695cbab43491c5f3d4e2e7db7b2943bcf89fdb..2efebee08a42f0b87d370ee0bd459fc1d0d656f5 100644 (file)
@@ -82,7 +82,8 @@ typedef enum
     DGLCMD_PLAY_IF_EXIST,      /* play_if_exist "game" "file" */
     DGLCMD_SUBMENU,    /* submenu "foo" */
     DGLCMD_REDRAW,     /* redraw */
-    DGLCMD_RETURN      /* return */
+    DGLCMD_RETURN,     /* return */
+    DGLCMD_SLEEP        /* sleep */
 } dglcmd_actions;
 
 typedef enum
index 404382e831161ef92a289e46b51365deb9d06082..89a342f0ed51a89e5b1ab2f40412c5795f29b42d 100644 (file)
@@ -15,6 +15,7 @@
 #include <pwd.h>
 #include <grp.h>
 #include <curses.h>
+#include <sys/errno.h>
 
 extern FILE* yyin;
 extern int yyparse ();
@@ -462,6 +463,19 @@ dgl_exec_cmdqueue_w(struct dg_cmdpart *queue, int game, struct dg_user *me, char
        case DGLCMD_RETURN:
            return_from_submenu = 1;
            break;
+       case DGLCMD_SLEEP:
+           if (p1) {
+               char *end;
+               long time = strtol(p1, &end, 10);
+               if (errno == EINVAL) {
+                   printf("Error computing sleep value '%s'\n", p1);
+                   break;
+               } else if (errno == ERANGE) {
+                   printf("Sleep value out of range: '%s'\n", p1);
+               }
+               sleep((unsigned int) time);
+           }
+           break;
        case DGLCMD_PLAY_IF_EXIST:
            if (!(loggedin && me && p1 && p2)) break;
            {