* Copyright (c) 1980, 1988 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
"@(#) Copyright (c) 1980, 1988 Regents of the University of California.\n\
static char sccsid
[] = "@(#)leave.c 5.6 (Berkeley) 3/1/91";
* Reminds you when you have to leave.
* Leave prompts for input and goes away if you hit return.
* It nags you like a mother hen.
register int hours
, minutes
;
struct tm
*t
, *localtime();
#define MSG1 "When do you have to leave? "
(void)write(1, MSG1
, sizeof(MSG1
) - 1);
cp
= fgets(buf
, sizeof(buf
), stdin
);
for (hours
= 0; (c
= *cp
) && c
!= '\n'; ++cp
) {
hours
= hours
* 10 + (c
- '0');
if (minutes
< 0 || minutes
> 59)
secs
= hours
* 60 * 60 + minutes
* 60;
if (hours
> 23 || t
->tm_hour
> hours
||
t
->tm_hour
== hours
&& minutes
<= t
->tm_min
)
secs
= (hours
- t
->tm_hour
) * 60 * 60;
secs
+= (minutes
- t
->tm_min
) * 60;
printf("Alarm set for %.16s. (pid %d)\n",
sleep((u_int
)2); /* let parent print set message */
* if write fails, we've lost the terminal through someone else
* causing a vhangup by logging in.
#define MSG2 "\07\07You have to leave in 5 minutes.\n"
if (write(1, MSG2
, sizeof(MSG2
) - 1) != sizeof(MSG2
) - 1)
#define MSG3 "\07\07Just one more minute!\n"
if (write(1, MSG3
, sizeof(MSG3
) - 1) != sizeof(MSG3
) - 1)
#define MSG4 "\07\07Time to leave!\n"
for (bother
= 10; bother
--;) {
if (write(1, MSG4
, sizeof(MSG4
) - 1) != sizeof(MSG4
) - 1)
#define MSG5 "\07\07That was the last time I'll tell you. Bye.\n"
(void)write(1, MSG5
, sizeof(MSG5
) - 1);
fprintf(stderr
, "usage: leave [[+]hhmm]\n");