|
|
1.1 ! root 1: #include <whoami.h> ! 2: /* ! 3: * leave - reminds you when you have to leave. ! 4: * leave prompts for input and goes away if you hit return. ! 5: * it nags you like a mother hen. ! 6: */ ! 7: char origlogin[20], thislogin[20]; ! 8: char *getlogin(); ! 9: char *whenleave; ! 10: char *ctime(); ! 11: char buff[100]; ! 12: ! 13: main(argc,argv) char **argv; { ! 14: long when, tod, now, diff, hours, minutes; ! 15: int *nv; ! 16: int atoi(); ! 17: int *localtime(); ! 18: ! 19: if (argc < 2) { ! 20: printf("When do you have to leave? "); ! 21: buff[read(0,buff,sizeof buff)] = 0; ! 22: } else { ! 23: strcpy(buff,argv[1]); ! 24: } ! 25: if (buff[0] == '\n') exit(0); ! 26: if (buff[0] == '+') { ! 27: diff = atoi(buff+1); ! 28: doalarm(diff); ! 29: } ! 30: if (buff[0] < '0' || buff[0] > '9') { ! 31: printf("usage: %s [hhmm]\n",argv[0]); ! 32: exit(1); ! 33: } ! 34: strcpy(origlogin,getlogin()); ! 35: ! 36: tod = atoi(buff); ! 37: hours = tod / 100; ! 38: if (hours > 12) hours -= 12; ! 39: if (hours == 12) hours = 0; ! 40: minutes = tod % 100; ! 41: ! 42: if (hours < 0 || hours > 12 || minutes < 0 || minutes > 59) { ! 43: printf("usage: %s [hhmm]\n",argv[0]); ! 44: exit(1); ! 45: } ! 46: ! 47: setexit(); /* refigure time if killed */ ! 48: time(&now); ! 49: nv = localtime(&now); ! 50: when = 60*hours+minutes; ! 51: if (nv[2] > 12) nv[2] -= 12; /* do am/pm bit */ ! 52: now = 60*nv[2] + nv[1]; ! 53: diff = when - now; ! 54: while (diff < 0) ! 55: diff += 12*60; ! 56: if (diff > 11*60) printf("That time has already passed!\n"); ! 57: doalarm(diff); ! 58: exit(0); ! 59: } ! 60: ! 61: ! 62: doalarm(nmins) long nmins; { ! 63: char *msg1, *msg2, *msg3, *msg4; ! 64: register int i; ! 65: int slp1, slp2, slp3, slp4; ! 66: int seconds, gseconds; ! 67: long daytime; ! 68: ! 69: seconds = 60 * nmins; ! 70: if (seconds <= 0) seconds = 1; ! 71: gseconds = seconds; ! 72: ! 73: msg1 = "You have to leave in 5 minutes"; ! 74: if (seconds <= 60*5) { ! 75: slp1 = 0; ! 76: } else { ! 77: slp1 = seconds - 60*5; ! 78: seconds = 60*5; ! 79: } ! 80: ! 81: msg2 = "Just one more minute!"; ! 82: if (seconds <= 60) { ! 83: slp2 = 0; ! 84: } else { ! 85: slp2 = seconds - 60; ! 86: seconds = 60; ! 87: } ! 88: ! 89: msg3 = "Time to leave!"; ! 90: slp3 = seconds; ! 91: ! 92: msg4 = "You're going to be late!"; ! 93: slp4 = 60; ! 94: ! 95: time(&daytime); ! 96: daytime += gseconds; ! 97: whenleave = ctime(&daytime); ! 98: printf("Alarm set for %s\n",whenleave); ! 99: if (fork()) exit(0); ! 100: signal(2,1); ! 101: signal(3,1); ! 102: signal(15,1/*nag*/); ! 103: ! 104: if (slp1) ! 105: bother(slp1,msg1); ! 106: if (slp2) ! 107: bother(slp2,msg2); ! 108: bother(slp3,msg3); ! 109: for (;;) { ! 110: bother(slp4,msg4); ! 111: } ! 112: } ! 113: ! 114: bother(slp,msg) int slp; char *msg; { ! 115: ! 116: delay(slp); ! 117: printf("\7\7\7"); ! 118: printf("%s\n",msg); ! 119: } ! 120: ! 121: /* ! 122: * delay is like sleep but does it in 100 sec pieces and ! 123: * knows what zero means. ! 124: */ ! 125: delay(secs) int secs; { ! 126: int n; ! 127: ! 128: while(secs>0) { ! 129: n = 100; ! 130: secs = secs - 100; ! 131: if (secs < 0) { ! 132: n = n + secs; ! 133: } ! 134: if (n > 0) sleep(n); ! 135: strcpy(thislogin,getlogin()); ! 136: if (strcmp(origlogin, thislogin)) exit(0); ! 137: } ! 138: } ! 139: ! 140: #ifndef VAX ! 141: char *getlogin() { ! 142: #include <utmp.h> ! 143: static struct utmp ubuf; ! 144: int ufd; ! 145: ! 146: ufd = open("/etc/utmp",0); ! 147: seek(ufd, ttyn(0)*sizeof(ubuf), 0); ! 148: read(ufd, &ubuf, sizeof(ubuf)); ! 149: ubuf.ut_name[8] = 0; ! 150: return(&ubuf.ut_name); ! 151: } ! 152: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.