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