Annotation of coherent/f/tmp/inst2/setdate.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * setdate: used in post processing of install to setup /etc/timezone
                      3:  */
                      4: 
                      5: /*
                      6:  * includes
                      7:  */
                      8: 
                      9: #include <stdio.h>
                     10: #include <time.h>
                     11: #include "build0.h"
                     12: 
                     13: 
                     14: /*
                     15:  * declarations
                     16:  */
                     17: 
                     18: char   tzone[NBUF];                    /* timezone             */
                     19: char   tzone5[NBUF];                   /* timezone for Sys V   */
                     20: 
                     21: /*
                     22:  * Set up a nonstandard timezone.
                     23:  */
                     24: void
                     25: get_timezone(dstflag)
                     26: int dstflag;
                     27: {
                     28:        register char *s;
                     29:        int diff;
                     30:        char std_abbr[20], dst_abbr[20];
                     31:        int east_of_gr;
                     32: 
                     33:        /* tzone5 is like tzone except no colons and number is in hours */
                     34: 
                     35:        printf(
                     36: "You need to specify an abbreviation for your timezone,\n"
                     37: "whether you are east or west of Greenwich, England,\n"
                     38: "and the difference in minutes between your timezone\n"
                     39: "and Greenwich Time (called UT or GMT).  For example,\n"
                     40: "Germany is 60 minutes of time east of Greenwich.\n"
                     41:                );
                     42:        s = get_line("Abbreviation for your timezone:");
                     43:        strcpy(std_abbr, s);
                     44:        east_of_gr = yes_no("Is your timezone east of Greenwich");
                     45:        s = get_line("Difference in minutes from GMT:");
                     46:        diff = atoi(s);
                     47:        if (east_of_gr)
                     48:                diff = -diff;
                     49:        if (dstflag) {
                     50:                s = get_line("Abbreviation for your daylight savings timezone:");
                     51:                strcpy(dst_abbr, s);
                     52:                sprintf(tzone, "%s:%d:%s:1.1.4", std_abbr, diff, dst_abbr);
                     53:                sprintf(tzone5, "%s%d%s", std_abbr, diff/60, dst_abbr);
                     54:        } else {
                     55:                sprintf(tzone, "%s:%d:", std_abbr, diff);
                     56:                sprintf(tzone5, "%s%d", std_abbr, diff/60);
                     57:        }
                     58: }
                     59: 
                     60: 
                     61: /*
                     62:  * Date and time.
                     63:  */
                     64: 
                     65: main()
                     66: {
                     67:        register char *s;
                     68:        int dst_conv;           /* 1 if DST conversion will be used */
                     69:        int dst_now;            /* 1 if DST in effect today */
                     70:        int n;
                     71:        char *tz;
                     72:        time_t now;
                     73:        struct tm *tmp;
                     74:        char *timestr;
                     75: 
                     76: again:
                     77:        /* new set_date */
                     78: 
                     79:        /*
                     80:         * yyy:
                     81:         *
                     82:         * dst_conv = FALSE
                     83:         * dst_now = FALSE
                     84:         *
                     85:         * if using DST conversion
                     86:         *      dst_conv = TRUE
                     87:         *      if DST in effect today
                     88:         *              dst_now = TRUE
                     89:         * get date from system clock
                     90:         * if dst_conv and dst_now
                     91:         *      add 1 hour to date fetched
                     92:         * display date
                     93:         * while date not correct
                     94:         *      if proceed without setting clock
                     95:         *              goto xxx
                     96:         *      read date from kb
                     97:         *      write date to CMOS clock and RAM clock
                     98:         *      if dst_conv and dst_now
                     99:         *              subtract 1 hour from date entered
                    100:         *              write adjusted date to CMOS clock
                    101:         * xxx:
                    102:         * set TIMEZONE and TZ variables
                    103:         * if date, TIMEZONE, and TZ not all correct
                    104:         *      goto yyy
                    105:         */
                    106:        cls(0);
                    107:        dst_conv = 0;
                    108:        dst_now = 0;
                    109:        printf(
                    110: "You can run COHERENT with or without conversion for daylight savings time\n"
                    111: "(summer time).  You should normally run with daylight savings time\n"
                    112: "conversion.  However, if you are going to use both COHERENT and MS-DOS\n"
                    113: "and you choose to run with daylight savings time conversion,\n"
                    114: "your time will be wrong (by one hour) during daylight savings time\n"
                    115: "while you are running under MS-DOS.\n"
                    116: "\n"
                    117:                );
                    118:        if (yes_no(
                    119:          "Do you want COHERENT to use daylight savings time conversion")) {
                    120:                dst_conv = 1;
                    121:                printf(
                    122: "\n"
                    123: "By default, COHERENT assumes daylight savings time begins on the\n"
                    124: "first Sunday in April and ends on the last Sunday in October.\n"
                    125: "If you want to change the defaults, edit the file \"/etc/timezone\"\n"
                    126: "after you finish installing COHERENT.\n"
                    127: "\n"
                    128:                );
                    129:                if (yes_no("Is daylight savings time currently in effect"))
                    130:                        dst_now = 1;
                    131:        }
                    132:        system("/bin/date `/etc/ATclock` > /dev/null");
                    133:        now = time(0);
                    134:        if (dst_conv && dst_now)
                    135:                now += 3600;
                    136:        timestr = ctime(&now);
                    137:        printf(
                    138: "\nAccording to your system clock, your local date and time are:\n"
                    139:        );
                    140:        printf("%s\n", timestr);
                    141:        if (!yes_no("Is this correct")) {
                    142:                n = 0;
                    143:                do {
                    144:                        if (++n > 3) {
                    145:                                printf(
                    146: "The command which sets the internal real-time clock of your system is\n"
                    147: "failing repeatedly.  Either you are entering the date and time incorrectly\n"
                    148: "or your clock hardware is not completely AT-compatible.  If your clock\n"
                    149: "hardware is incompatible, you can continue with the installation without\n"
                    150: "setting the clock correctly.  However, if you do so, subsequent clock\n"
                    151: "references (including file access and modification time information) will be\n"
                    152: "incorrect and some commands (such as \"date\") will not function correctly.\n"
                    153:                                        );
                    154:                                if (yes_no("Do you want to proceed without setting the clock correctly"))
                    155:                                        break;
                    156:                                n = 0;
                    157:                        }
                    158:                        s = get_line(
                    159: "\nEnter the correct date and time in the form YYMMDDHHMM.SS:"
                    160:                                );
                    161:                        sprintf(cmd, "/etc/ATclock %s >/dev/null", s);
                    162:                } while (sys(cmd, S_NONFATAL) != 0);
                    163:                sys("/bin/date `/etc/ATclock` >/dev/null", S_NONFATAL);
                    164: 
                    165:                if (dst_conv && dst_now) {
                    166:                        /* Adjust for DST: set hardware clock back one hour. */
                    167:                        now = time(0) - 3600;
                    168:                        tmp = localtime(&now);
                    169:                        sprintf(cmd,
                    170:                          "/etc/ATclock %02d%02d%02d%02d%02d.%02d >/dev/null",
                    171:                          tmp->tm_year, tmp->tm_mon + 1, tmp->tm_mday,
                    172:                          tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
                    173:                        sys(cmd, S_NONFATAL);
                    174:                }
                    175: 
                    176:        }
                    177: 
                    178:        /* Timezone. */
                    179:        cls(0);
                    180:        printf(
                    181: "Please choose one of the following timezones:\n"
                    182: "\t0\tCentral European\n"
                    183: "\t1\tGreenwich\n"
                    184: "\t2\tNewfoundland\n"
                    185: "\t3\tAtlantic\n"
                    186: "\t4\tEastern\n"
                    187: "\t5\tCentral\n"
                    188: "\t6\tMountain\n"
                    189: "\t7\tPacific\n"
                    190: "\t8\tYukon\n"
                    191: "\t9\tAlaska\n"
                    192: "\t10\tBering\n"
                    193: "\t11\tHawaii\n"
                    194: "\t12\tOther\n"
                    195:                );
                    196:        do {
                    197:                s = get_line("Timezone code:");
                    198:        } while ((n = atoi(s)) < 0 || n > 12);
                    199:        switch (n) {
                    200:        /* N.B. entries truncated at tz[8] below if !dst_conv. */
                    201:        case 0:         tz = "EST:-60:EDT:1.1.4";       break;
                    202:        case 1:         tz = "GMT:000:GDT:1.1.4";       break;
                    203:        case 2:         tz = "NST:210:NDT:1.1.4";       break;
                    204:        case 3:         tz = "AST:240:ADT:1.1.4";       break;
                    205:        case 4:         tz = "EST:300:EDT:1.1.4";       break;
                    206:        case 5:         tz = "CST:360:CDT:1.1.4";       break;
                    207:        case 6:         tz = "MST:420:MDT:1.1.4";       break;
                    208:        case 7:         tz = "PST:480:PDT:1.1.4";       break;
                    209:        case 8:         tz = "YST:540:YDT:1.1.4";       break;
                    210:        case 9:         tz = "AST:600:ADT:1.1.4";       break;
                    211:        case 10:        tz = "BST:660:BDT:1.1.4";       break;
                    212:        case 11:        tz = "HST:600:HDT:1.1.4";       break;
                    213:        case 12:        tz = NULL;                      break;
                    214:        }
                    215: 
                    216:        if (tz == NULL)
                    217:                get_timezone(dst_conv);
                    218:        else {
                    219:                strcpy(tzone, tz);
                    220:                if (dst_conv) {
                    221:                        /* for TZ, AST:240:ADT becomes AST4ADT */
                    222:                        sprintf(tzone5, "%.3s%d%cDT",
                    223:                          tz, atoi(tzone + 4)/60, tz[0]);
                    224:                } else {
                    225:                        /* for TZ, AST:240 becomes AST4 */
                    226:                        sprintf(tzone5, "%.3s%d", tz, atoi(tzone + 4)/60);
                    227:                        tzone[8] = '\0';
                    228:                }
                    229:        }
                    230:        /* Done, print current time and retry if user botched it. */
                    231:        printf("\nYour current local date and time are now:\n");
                    232:        sprintf(cmd, "TIMEZONE='%s' /bin/date -s `/etc/ATclock`", tzone);
                    233:        sys(cmd, S_NONFATAL);
                    234: 
                    235:        /* Write the timezone to /tmp/timezone for debug */
                    236:        sprintf(cmd, "/bin/echo export TIMEZONE=\\\"%s\\\" >/tmp/timezone", tzone);
                    237:        sys(cmd, S_NONFATAL);
                    238:        sprintf(cmd, "/bin/echo export TZ=\\\"%s\\\" >>/tmp/timezone", tzone5);
                    239:        sys(cmd, S_NONFATAL);
                    240:        if (!yes_no("Is this correct"))
                    241:                goto again;
                    242:        system("/bin/cp /tmp/timezone /etc/timezone");
                    243:        system("/bin/chmog 644 bin bin /etc/timezone");
                    244:        exit(0);
                    245: }
                    246: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.