7212ba54f3349e999995c81aaa2c0330369102f1
[platform/upstream/coreutils.git] / src / sleep.c
1 /* sleep - delay for a specified amount of time.
2    Copyright (C) 1984, 1991 Free Software Foundation, Inc.
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2, or (at your option)
7    any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
17
18 #include <stdio.h>
19 #include <sys/types.h>
20 #include "system.h"
21
22 long argdecode ();
23 void error ();
24
25 /* The name by which this program was run. */
26 char *program_name;
27
28 void
29 main (argc, argv)
30      int argc;
31      char **argv;
32 {
33   int i;
34   unsigned seconds = 0;
35
36   program_name = argv[0];
37
38   if (argc == 1)
39     {
40       fprintf (stderr, "Usage: %s number[smhd]...\n", argv[0]);
41       exit (1);
42     }
43
44   for (i = 1; i < argc; i++)
45     seconds += argdecode (argv[i]);
46
47   sleep (seconds);
48
49   exit (0);
50 }
51
52 long
53 argdecode (s)
54      char *s;
55 {
56   long value;
57   register char *p = s;
58   register char c;
59
60   value = 0;
61   while ((c = *p++) >= '0' && c <= '9')
62     value = value * 10 + c - '0';
63
64   switch (c)
65     {
66     case 's':
67       break;
68     case 'm':
69       value *= 60;
70       break;
71     case 'h':
72       value *= 60 * 60;
73       break;
74     case 'd':
75       value *= 60 * 60 * 24;
76       break;
77     default:
78       p--;
79     }
80
81   if (*p)
82     error (1, 0, "invalid time interval `%s'", s);
83   return value;
84 }