]> skyeroc.xyz Git - dgamelaunch/commitdiff
Add code to test simplemail.
authorJilles Tjoelker <jilles@stack.nl>
Tue, 6 Jan 2004 13:33:36 +0000 (13:33 +0000)
committerJilles Tjoelker <jilles@stack.nl>
Tue, 6 Jan 2004 13:33:36 +0000 (13:33 +0000)
(nitpick) #include lines style(9) compliant again.

git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@106 db0b04b0-f4d1-0310-9a6d-de3e77497b0e

nethackstub.c

index 4ce8b56bf7dc7476f02d2b2b37ccfa7073886978..1ad6baba99b986202db1a9f2d31776607a82dde8 100644 (file)
  * This program can be used instead of nethack to test dgamelaunch.
  */
 
-static const char rcsid[] = "$Id: nethackstub.c,v 1.3 2004/01/05 17:44:30 joshk Exp $";
+static const char rcsid[] = "$Id: nethackstub.c,v 1.4 2004/01/06 13:33:36 jilles Exp $";
 
 #include <sys/types.h>
-#include <string.h>
+
 #include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
 #include <signal.h>
+#include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 
 void
@@ -46,6 +50,61 @@ sigterm(int sig)
 #undef S
 }
 
+void
+checkmail()
+{
+    char *mailfile;
+    char buf[256];
+    int in, n;
+    struct flock fl;
+    
+    mailfile = getenv("MAIL");
+    if (getenv("SIMPLEMAIL"))
+    {
+       in = open(mailfile, O_RDWR);
+       if (in != -1)
+       {
+           fl.l_start = 0;
+           fl.l_len = 0;
+           fl.l_pid = getpid();
+           fl.l_type = F_WRLCK;
+           fl.l_whence = SEEK_SET;
+           if (fcntl(in, F_SETLK, &fl) != -1)
+           {
+               while ((n = read(in, buf, sizeof buf)) > 0)
+               {
+                   write(STDOUT_FILENO, buf, n);
+               }
+#define S "End of mail - press return to unlock mailfile\n"
+               write(STDOUT_FILENO, S, -1 + sizeof S);
+#undef S
+               read(STDIN_FILENO, buf, sizeof buf);
+               ftruncate(in, (off_t)0);
+               /* File will be unlocked automatically when closed */
+           }
+           else
+           {
+#define S "Cannot lock mailfile\n"
+               write(STDOUT_FILENO, S, -1 + sizeof S);
+#undef S
+           }
+           close(in);
+       }
+       else
+       {
+#define S "Cannot open mailfile\n"
+    write(STDOUT_FILENO, S, -1 + sizeof S);
+#undef S
+       }
+    }
+    else
+    {
+#define S "No SIMPLEMAIL\n"
+    write(STDOUT_FILENO, S, -1 + sizeof S);
+#undef S
+    }
+}
+
 int
 main(int argc, char *argv[])
 {
@@ -53,7 +112,8 @@ main(int argc, char *argv[])
     int showusage = 1, n, i;
     struct sigaction SA;
 
-#define S "nethackstub started with arguments:\n"
+    /* Clear the screen for the benefit of dgamelaunch's check. */
+#define S " \033[H\033[Jnethackstub started with arguments:\n"
     write(STDOUT_FILENO, S, -1 + sizeof S);
 #undef S
     for (i = 1; i < argc; i++)
@@ -75,11 +135,13 @@ main(int argc, char *argv[])
     {
        if (showusage)
        {
-#define S "i: close stdin - o: close stdout/stderr - q: quit\n"
+#define S "i: close stdin - o: close stdout/stderr - m: check mail - q: quit\n"
            write(STDOUT_FILENO, S, -1 + sizeof S);
 #undef S
        }
        n = read(STDIN_FILENO, buf, sizeof buf);
+       if (n == -1 && errno == EINTR)
+           continue;
        if (n <= 0)
            break;
        for (i = 0; i < n; i++)
@@ -93,6 +155,9 @@ main(int argc, char *argv[])
                    close(STDOUT_FILENO);
                    close(STDERR_FILENO);
                    break;
+               case 'm':
+                   checkmail();
+                   break;
                case 'q':
                    return 0;
                    break;