head 1.1; access; symbols; locks; strict; comment @ * @; 1.1 date 2001.02.04.16.28.12; author alexis; state Exp; branches; next ; desc @LEAVE(1) FOR SYSTEMS WITHOUT LEAVE / @ 1.1 log @Initial revision @ text @#include #include #define TRUE (0==0) #define FALSE (1==0) long mytime(); extern FILE *popen(); char *progname; int optsil = FALSE; main(argc, argv) int argc; char *argv[]; { int leave_time; long leave_sec; long now_sec; int sleep_sec; int f; progname = argv[0]; while (argc > 1 && argv[1][0] == '-') { switch (argv[1][1]) { case 's': /* silent - no beeps */ if (optsil) usage(); optsil = TRUE; break; default: usage(); } argv++; argc--; } if (argc != 2 || (strlen(argv[1]) != 4) || sscanf(argv[1], "%d", &leave_time) != 1 || leave_time < 0 || leave_time/100 > 23 || leave_time%100 > 59) usage(); leave_sec = leave_time/100 * 3600L + leave_time%100 * 60L; if ((now_sec = mytime(NULL)%(3600L*24)) < 0) { fprintf(stderr, "%s: can't get date\n", progname); exit(1); } if ((sleep_sec = leave_sec - now_sec) < 0) sleep_sec += 3600*24; if ((f = fork()) < 0) { fprintf(stderr, "%s: unable to fork\n", progname); exit(1); } if (f != 0) /* parent returns to caller */ exit(0); signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); if (sleep_sec > 300) { sleep(sleep_sec - 300); fprintf(stderr, "%sYou must leave in 5 minutes!\n", (optsil) ? "" : ""); sleep_sec = 300; } sleep(sleep_sec); fprintf(stderr, "%sYou must leave NOW!\n", (optsil) ? "" : ""); while (TRUE) { sleep(60); fprintf(stderr, "%sYou are going to be late!\n", (optsil) ? "" : ""); } } usage() { fprintf(stderr, "Usage: %s [ -s ] hhmm\n", progname); exit(1); } long mytime(l) long *l; { FILE *pipe; char buf[80]; long mday, hour, min, sec, year; char day[5], mon[4], gmt[12]; long total; if ((pipe = popen("date", "r")) == NULL) return(-1); fgets(buf, sizeof(buf), pipe); pclose(pipe); if (sscanf(buf, "%s %s %ld %ld:%ld:%ld %s %ld", day, mon, &mday, &hour, &min, &sec, gmt, &year) != 8) return(-1); total = ((hour * 60) + min) * 60 + sec; if (l != NULL) *l = total; return(total); } @