annotate miscellany/mem/promptdate.c @ 0:bce86c4163a3

Initial revision
author kono
date Mon, 18 Apr 2005 23:46:02 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 #include <stdio.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #include <sys/time.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3 #include <ctype.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 ** promptdate
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 ** prompt user for a date specification which can be quite minimal
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 ** and print it in a form suitable for parsing by MH
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 #define MAXLINE 128
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 char *mname[12] ={
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 "Jan","Feb","Mar","Apr","May","Jun",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 "Jul","Aug","Sep","Oct","Nov","Dec"};
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 char *dname[7] ={
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 "Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 struct tm now;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 int dayspast = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 int monthlen[2][12] ={
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 31,28,31,30,31,30,31,31,30,31,30,31,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 31,29,31,30,31,30,31,31,30,31,30,31};
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 char *defaultformat = "%d %N %y 00:00";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 main(argc, argv)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26 int argc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 char **argv;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 register int c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 struct tm then;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 extern int optind; /* defined in getopt */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 extern char *optarg; /* defined in getopt */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 int getopt();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 long secsfr70();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 while ((c = getopt (argc, argv, "f:")) != EOF)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 switch (c)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 case 'f':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 defaultformat = optarg;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 fprintf(stderr, "usage: %s [-f format] [datespec]\n", argv[0]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45 exit (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 argc -= optind;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 argv += optind;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 finddate(&now, dayspast = (int)(secsfr70()/86400L));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 if (argc <= 0) /* get from user */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55 if (!promptdate(&then))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56 exit(1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57 printdate(&then, defaultformat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59 else /* get from command line */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61 if (!decodedate(argv[0], &then))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62 exit(1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 printdate(&then, defaultformat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 exit(0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 int promptdate(when)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 struct tm *when;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 char line[MAXLINE];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72 int decodedate();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73 char *gets();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75 for (;;)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77 fprintf(stderr, "When? ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 if (gets(line) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80 fprintf(stderr, "\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 return (0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83 if (decodedate(line, when))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 return (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 /*NOTREACHED*/
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 int decodedate(line, when)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90 char *line;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 struct tm *when;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93 ** accept spec for date in several forms
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 ** legal are: sun,mon,tue,wed,thu,fri,sat,today,tomorrow,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95 ** <date><month>,+<relative number of days>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
96 ** <month> should be alpha
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97 ** upper case accepted too
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100 char s[4];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101 register int i,targetdate;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102 int tem;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103 register char *lptr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105 when->tm_year = now.tm_year;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106 when->tm_mon = now.tm_mon;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107 targetdate = dayspast;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108 for (lptr = line; isspace(*lptr); lptr++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109 ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110 if (isdigit(*lptr))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112 i = sscanf(lptr, "%d%3s%d", &when->tm_mday, s, &tem);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113 switch(i)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115 case 3:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116 when->tm_year = tem;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117 case 2:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118 fold(s);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
119 when->tm_mon = monthofyear(s);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
120 if (i == 3)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
121 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
122 if (when->tm_mday != 0 && when->tm_mon != 0 && daysfr70(when) < dayspast)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
123 when->tm_year++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
125 case 1:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
126 if (when->tm_mday != 0 && when->tm_mday < now.tm_mday)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
127 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
128 if (++when->tm_mon > 12)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 when->tm_mon = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131 when->tm_year++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135 return (validate(when));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137 if (isalpha(*lptr))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139 sscanf(lptr, "%3s", s);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140 fold(s);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141 if ((tem = dayofweek(s)) >= 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142 targetdate += (tem -= now.tm_wday) <= 0 ? tem + 7 : tem;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143 else if (strcmp(s, "Tom") == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144 targetdate++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145 else if (strcmp(s, "Tod") == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 else /* mistake */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148 return (0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150 else if (*lptr == '+')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 if (sscanf(++lptr, "%d", &tem) == 0 || tem < 0) /* mistake */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153 return (0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
154 targetdate += tem;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
155 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
156 else /* mistake by default */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
157 return (0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
158 finddate(when, targetdate);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
159 return (when->tm_mday != 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
160 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
161
bce86c4163a3 Initial revision
kono
parents:
diff changeset
162 int validate(datetm)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
163 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
164 ** check that a given date and month combination is legal
bce86c4163a3 Initial revision
kono
parents:
diff changeset
165 ** datetm->tm_year must hold the year in question
bce86c4163a3 Initial revision
kono
parents:
diff changeset
166 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
167 register struct tm *datetm;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
168 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
169
bce86c4163a3 Initial revision
kono
parents:
diff changeset
170 return (datetm->tm_mday <= monthlen[leapyear(datetm->tm_year)]
bce86c4163a3 Initial revision
kono
parents:
diff changeset
171 [datetm->tm_mon] && datetm->tm_mday > 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
172 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
173
bce86c4163a3 Initial revision
kono
parents:
diff changeset
174 finddate(datetm, df70)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
175 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
176 ** convert days from 1 jan 1970 to a date in struct datetm
bce86c4163a3 Initial revision
kono
parents:
diff changeset
177 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
178 register int df70;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
179 register struct tm *datetm;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
180 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
181 register struct tm *tdtm;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
182 long longtime;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
183 struct tm *gmtime();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
184
bce86c4163a3 Initial revision
kono
parents:
diff changeset
185 longtime = df70 * 86400L;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
186 tdtm = gmtime(&longtime);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
187 datetm->tm_yday = tdtm->tm_yday;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
188 datetm->tm_wday = tdtm->tm_wday;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
189 datetm->tm_year = tdtm->tm_year + 1900;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
190 datetm->tm_mon = tdtm->tm_mon;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
191 datetm->tm_mday = tdtm->tm_mday;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
192 datetm->tm_hour = tdtm->tm_hour;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
193 datetm->tm_min = tdtm->tm_min;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
194 datetm->tm_sec = tdtm->tm_sec;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
195 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
196
bce86c4163a3 Initial revision
kono
parents:
diff changeset
197 fold(s)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
198 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
199 ** convert first character to uppercase
bce86c4163a3 Initial revision
kono
parents:
diff changeset
200 ** convert rest of string from uppercase to lower case
bce86c4163a3 Initial revision
kono
parents:
diff changeset
201 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
202 register char *s;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
203 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
204 register char c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
205
bce86c4163a3 Initial revision
kono
parents:
diff changeset
206 if ((c = *s) != '\0')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
207 *s++ += islower(c) ? 'A' - 'a' : 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
208 while ((c = *s) != '\0')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
209 *s++ += isupper(c) ? 'a' - 'A' : 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
210 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
211
bce86c4163a3 Initial revision
kono
parents:
diff changeset
212 int leapyear(y)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
213 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
214 ** returns 1 if leapyear 0 otherwise
bce86c4163a3 Initial revision
kono
parents:
diff changeset
215 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
216 register int y;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
217 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
218
bce86c4163a3 Initial revision
kono
parents:
diff changeset
219 return (((y % 4) == 0 && (y % 100) != 0) || (y % 400) == 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
220 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
221
bce86c4163a3 Initial revision
kono
parents:
diff changeset
222 int daysfr70(datetm)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
223 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
224 ** returns the number of days from 1 Jan 1970
bce86c4163a3 Initial revision
kono
parents:
diff changeset
225 ** no checking for illegal date at all
bce86c4163a3 Initial revision
kono
parents:
diff changeset
226 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
227 register struct tm *datetm;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
228 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
229 register int i, totdays;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
230
bce86c4163a3 Initial revision
kono
parents:
diff changeset
231
bce86c4163a3 Initial revision
kono
parents:
diff changeset
232 totdays = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
233 for (i = 1970; i <= 2050 && i < datetm->tm_year; i++) /* prevent overflow */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
234 totdays += 365 + leapyear(i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
235 for (i = 0; i < 12 && i < datetm->tm_mon; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
236 totdays += monthlen[leapyear(datetm->tm_year)][i];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
237 totdays += datetm->tm_mday - 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
238 return (totdays);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
239 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
240
bce86c4163a3 Initial revision
kono
parents:
diff changeset
241 int monthofyear(s)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
242 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
243 ** returns month of year in numeric form when given
bce86c4163a3 Initial revision
kono
parents:
diff changeset
244 ** the first three letters
bce86c4163a3 Initial revision
kono
parents:
diff changeset
245 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
246 register char *s;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
247 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
248 register int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
249
bce86c4163a3 Initial revision
kono
parents:
diff changeset
250 fold(s);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
251 for (i = 12; i-- && strcmp(s,mname[i]); )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
252 ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
253 return (i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
254 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
255
bce86c4163a3 Initial revision
kono
parents:
diff changeset
256 int dayofweek(s)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
257 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
258 ** sunday = 0,...,saturday = 6, nomatch = -1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
259 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
260 register char *s;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
261 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
262 register int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
263
bce86c4163a3 Initial revision
kono
parents:
diff changeset
264 fold(s);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
265 for (i = 7; i-- && strcmp(s,dname[i]); )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
266 ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
267 return (i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
268 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
269
bce86c4163a3 Initial revision
kono
parents:
diff changeset
270 printdate(date, format)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
271 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
272 ** print date in MH acceptable format
bce86c4163a3 Initial revision
kono
parents:
diff changeset
273 ** kludge - general formats are not implemented
bce86c4163a3 Initial revision
kono
parents:
diff changeset
274 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
275 struct tm *date;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
276 char *format;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
277 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
278 printf("%d %s %d 00:00\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
279 date->tm_mday, mname[date->tm_mon], date->tm_year);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
280 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
281
bce86c4163a3 Initial revision
kono
parents:
diff changeset
282 long secsfr70()
bce86c4163a3 Initial revision
kono
parents:
diff changeset
283 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
284 ** This is system dependent
bce86c4163a3 Initial revision
kono
parents:
diff changeset
285 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
286 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
287 register int dst;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
288 struct timeval tv;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
289 struct timezone tz;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
290 struct tm *localtime();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
291
bce86c4163a3 Initial revision
kono
parents:
diff changeset
292 gettimeofday(&tv, &tz);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
293 dst = localtime(&tv.tv_sec)->tm_isdst;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
294 return (tv.tv_sec - tz.tz_minuteswest * 60 + (dst ? 3600 : 0));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
295 }