/* mailwatch.c by Michael Thorpe 2000-04-28 */ #include #include #include #include #include #include #include #include #define TTY "/dev/tty63" #define SLEEP 5 #define USAGE "usage: mailwatch [-d] [<# beeps>] \n" int main(int argc,char **argv) { int d=0,in,io,n=3,t,u; struct stat ss; off_t os=0; char *s; DIR *dir; struct dirent *sd; if(argc>=2 && argv[1][0]=='-') { if(argv[1][1] != 'd' || argv[1][2] != '\0') { write(2,USAGE,strlen(USAGE)); return(1); } d=1; argv++; argc--; } if(argc>2 && isdigit(argv[1][0])) { for(t=0;argv[1][t];t++) if(!isdigit(argv[1][t])) break; if(0==argv[1][t]) { n=atoi(argv[1]); argv++; argc--; } } if(argc != 2) { write(2,USAGE,strlen(USAGE)); return(1); } s=argv[1]; close(0); if(d) { close(1); if(fork()) return(0); setsid(); if(0>(t=open(TTY,O_WRONLY|O_NOCTTY))) { write(2,"Couldn't open "TTY"\n",15+strlen(TTY)); return(-1); } } else t=1; close(2); nice(20); d=strlen(s); if(s[d-1]=='/') { io=0; while(1) { if(0==(dir=opendir(s))) { if(mkdir(s,0700)) { write(t,"\07Failed to create maildir\n",26); return(-1); } in=0; } else { in=0; while((sd=readdir(dir))) if(strcmp(sd->d_name,".") && strcmp(sd->d_name,"..")) in++; closedir(dir); } if(in>io) { for(d=n;d;d--) { write(t,"\07",1); if(d) usleep(150000); } } io=in; sleep(SLEEP); } } else { while(1) { if(0 != stat(s,&ss)) { if(0>(u=creat(s,0600))) { write(t,"\07Failed to create mailbox\n",26); return(-1); } else close(u); ss.st_size=0; } if(os