|
|
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.