Add code to test simplemail.
(nitpick) #include lines style(9) compliant again. git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@106 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
This commit is contained in:
parent
488c628565
commit
c250d038e9
|
@ -20,12 +20,16 @@
|
||||||
* This program can be used instead of nethack to test dgamelaunch.
|
* 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 <sys/types.h>
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -46,6 +50,61 @@ sigterm(int sig)
|
||||||
#undef S
|
#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
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -53,7 +112,8 @@ main(int argc, char *argv[])
|
||||||
int showusage = 1, n, i;
|
int showusage = 1, n, i;
|
||||||
struct sigaction SA;
|
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);
|
write(STDOUT_FILENO, S, -1 + sizeof S);
|
||||||
#undef S
|
#undef S
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
|
@ -75,11 +135,13 @@ main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
if (showusage)
|
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);
|
write(STDOUT_FILENO, S, -1 + sizeof S);
|
||||||
#undef S
|
#undef S
|
||||||
}
|
}
|
||||||
n = read(STDIN_FILENO, buf, sizeof buf);
|
n = read(STDIN_FILENO, buf, sizeof buf);
|
||||||
|
if (n == -1 && errno == EINTR)
|
||||||
|
continue;
|
||||||
if (n <= 0)
|
if (n <= 0)
|
||||||
break;
|
break;
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
|
@ -93,6 +155,9 @@ main(int argc, char *argv[])
|
||||||
close(STDOUT_FILENO);
|
close(STDOUT_FILENO);
|
||||||
close(STDERR_FILENO);
|
close(STDERR_FILENO);
|
||||||
break;
|
break;
|
||||||
|
case 'm':
|
||||||
|
checkmail();
|
||||||
|
break;
|
||||||
case 'q':
|
case 'q':
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue