|
|
1.1 root 1: #ifndef lint
2: static char *sccsid = "@(#)timezone.c 1.0 (Power 6 Unix) 11/30/1984";
3: #endif
4:
5: /*
6: * Date - print and set date
7: */
8:
9: #include <stdio.h>
10: #include <sys/time.h>
11: #include <utmp.h>
12: #define WTMP "/usr/adm/wtmp"
13:
14:
15: struct utmp wtmp[2] = {
16: { "|", "", "", 0 },
17: { "{", "", "", 0 }
18: };
19: struct timeval tv;
20: struct timezone tz, newtz;
21: /*
22: * The folowing definitions and zone_table HAVE to agree with
23: * what's defined in /usr/src/lib/libc/gen/timezone.c !
24: */
25: #define DST_NONE 0 /* not on dst */
26: #define DST_USA 1 /* USA style dst */
27: #define DST_AUST 2 /* Australian style dst */
28: #define DST_WET 3 /* Western European dst */
29: #define DST_MET 4 /* Middle European dst */
30: #define DST_EET 5 /* Eastern European dst */
31:
32: struct zone_table {
33: char *zone_name;
34: struct timezone this_zone;
35: } zone_table[] = {
36: "ADT", {4*60, DST_USA}, /* Atlantic */
37: "AST", {4*60, DST_NONE}, /* Atlantic */
38: "CADT", {-10*60+30, DST_AUST}, /* Aust: Central */
39: "CAST", {-10*60+30, DST_NONE}, /* Aust: Central */
40: "CDT", {6*60, DST_USA}, /* Central */
41: "CST", {6*60, DST_NONE}, /* Central */
42: "EADT", {-10*60, DST_AUST}, /* Aust: Eastern */
43: "EAST", {-10*60, DST_NONE}, /* Aust: Eastern */
44: "EDT", {5*60, DST_USA}, /* Eastern */
45: "EEDT", {-2*60, DST_EET}, /* Eastern European */
46: "EEST", {-2*60, DST_NONE}, /* Eastern European */
47: "EST", {5*60, DST_NONE}, /* Eastern */
48: "MDT", {7*60, DST_USA}, /* Mountain */
49: "MEDT", {-1*60, DST_MET}, /* Middle European */
50: "MEST", {-1*60, DST_NONE}, /* Middle European */
51: "MST", {7*60, DST_NONE}, /* Mountain */
52: "PDT", {8*60, DST_USA}, /* Pacific */
53: "PST", {8*60, DST_NONE}, /* Pacific */
54: "WADT", {-8*60, DST_AUST}, /* Aust: Western */
55: "WAST", {-8*60, DST_NONE}, /* Aust: Western */
56: "WEDT", {0*60, DST_WET}, /* Western European */
57: "WEST", {0*60, DST_NONE}, /* Western European */
58: 0, {0, 0},
59: };
60:
61:
62: main(argc, argv)
63: int argc;
64: char *argv[];
65: {
66: int wf;
67:
68: if (argc != 2) {
69: printf("Usage : timezone zone-name\n");
70: exit(0);
71: }
72: if ( !identified(argv[1]) ) {
73: printf("Unknown time zone name : %s\n", argv[1]);
74: exit(0);
75: }
76: gettimeofday(&tv, &tz);
77: if (settimeofday(&tv, &newtz) < 0) {
78: perror("Failed to set new time zone");
79: } else if ((wf = open(WTMP, 1)) >= 0) {
80: time(&wtmp[1].ut_time);
81: lseek(wf, 0L, 2);
82: write(wf, (char *)wtmp, sizeof(wtmp));
83: close(wf);
84: }
85: }
86:
87: int
88: identified (name)
89: char *name;
90: {
91: register int i;
92:
93: for (i=0; zone_table[i].zone_name; i++) {
94: if ( strcmp (name, zone_table[i].zone_name) == 0 ) {
95: newtz = zone_table[i].this_zone;
96: return (1);
97: }
98: }
99: return (0);
100: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.