summaryrefslogtreecommitdiffstats
path: root/loader/kon2/kbiff/kbiff.c
diff options
context:
space:
mode:
Diffstat (limited to 'loader/kon2/kbiff/kbiff.c')
-rw-r--r--loader/kon2/kbiff/kbiff.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/loader/kon2/kbiff/kbiff.c b/loader/kon2/kbiff/kbiff.c
new file mode 100644
index 000000000..d1c8ea1b7
--- /dev/null
+++ b/loader/kon2/kbiff/kbiff.c
@@ -0,0 +1,68 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <curses.h>
+#include <term.h>
+#include <signal.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+
+void
+cleanup()
+{
+ putp(from_status_line);
+ putp(dis_status_line);
+ exit(0);
+}
+
+void
+main(int argc, char *argv[])
+{
+ char *term, *mail, *p, *buff;
+ time_t interval=10000000;
+ time_t old_mtime=0;
+ int n, update=1;
+ struct stat st;
+
+ if ((term = getenv("TERM")) == NULL
+ || (mail = getenv("MAIL")) == NULL) exit(1);
+ setupterm(term, 1, &n);
+ if (n != 1) exit(1);
+ if (!has_status_line) exit(1);
+ if ((buff = calloc(columns + 1, 1)) == NULL) exit(1);
+ putp(tparm(to_status_line, 0, 0));
+ putp(from_status_line);
+ fflush(stdout);
+ signal(SIGINT, cleanup);
+ signal(SIGKILL, cleanup);
+ while (1) {
+ if (!stat(mail, &st) && st.st_size) {
+ if (st.st_mtime > old_mtime) {
+ sprintf(buff, "New mail received %s",
+ ctime(&st.st_mtime));
+ update = 1;
+ old_mtime = st.st_mtime;
+ }
+ } else {
+ if (st.st_mtime > old_mtime) {
+ sprintf(buff, "No mail");
+ update = 1;
+ old_mtime = st.st_mtime;
+ }
+ }
+ if (update) {
+ if ((p = strchr(buff, '\n')) != NULL) *p = 0;
+ printf("%s%s\n%*s%s%s",
+ tparm(to_status_line, 0, 0),
+ enter_standout_mode,
+ columns, buff,
+ exit_standout_mode,
+ from_status_line);
+ fflush(stdout);
+ update = 0;
+ }
+ usleep(interval);
+ }
+ cleanup();
+}