Annotation of 43BSD/ingres/source/dbu/save.c, revision 1.1

1.1     ! root        1: # include      <pv.h>
        !             2: # include      <ingres.h>
        !             3: # include      <aux.h>
        !             4: # include      <func.h>
        !             5: # include      <opsys.h>
        !             6: # ifdef xV7_UNIX
        !             7: # include      <sys/timeb.h>
        !             8: # endif xV7_UNIX
        !             9: # include      <sccs.h>
        !            10: # include      <errors.h>
        !            11: 
        !            12: SCCSID(@(#)save.c      8.3     2/8/85)
        !            13: 
        !            14: extern short   tTdbu[];
        !            15: extern int     save();
        !            16: extern int     null_fn();
        !            17: 
        !            18: struct fn_def SaveFn =
        !            19: {
        !            20:        "SAVE",
        !            21:        save,
        !            22:        null_fn,                /* initialization function */
        !            23:        null_fn,
        !            24:        NULL,
        !            25:        0,
        !            26:        tTdbu,
        !            27:        100,
        !            28:        'Z',
        !            29:        0
        !            30: };
        !            31: /*
        !            32: **  SAVE RELATION UNTIL DATE
        !            33: **
        !            34: **     This function arranges to save a named relation until a
        !            35: **     specified date.
        !            36: **
        !            37: **     Parameters:             (pv_type is PV_STR for all of them)
        !            38: **     0 -- relation name
        !            39: **     1 -- month (1 -> 12 or "jan" -> "dec" or a variety of other codes)
        !            40: **     2 -- day (1 -> 31)
        !            41: **     3 -- year (1970 -> ?)
        !            42: **
        !            43: **     Uses trace flag 44
        !            44: **     Uses error messages 56xx
        !            45: */
        !            46: 
        !            47: int    DmSize[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        !            48: 
        !            49: save(parmc, parmv)
        !            50: int    parmc;
        !            51: PARM   parmv[];
        !            52: {
        !            53:        long            date;
        !            54:        register int    i;
        !            55:        extern DESC     Reldes;
        !            56:        TID             tid;
        !            57:        extern char     *Usercode;
        !            58:        struct relation relk, relt;
        !            59:        int             day, month, year;
        !            60: # ifdef xV7_UNIX
        !            61:        struct timeb    timeb;
        !            62: # else xV7_UNIX
        !            63:        extern int      timezone;       /* defined by ctime(3) */
        !            64: # endif xV7_UNIX
        !            65:        extern int      dysize();       /* ditto */
        !            66: 
        !            67:        /*
        !            68:        **  Validate parameters.
        !            69:        **
        !            70:        **      According to my pocket calculator, a 31 bit number will
        !            71:        **      hold 70 years of accuracy -- hence the 2035 cutoff.  If
        !            72:        **      this code is still around in 2035, I apologize in
        !            73:        **      advance.
        !            74:        */
        !            75: 
        !            76:        year = atoi(parmv[3].pv_val.pv_str);
        !            77:        if (year < 1970 || year > 2035)
        !            78:                return (error(BADYEAR, parmv[3].pv_val.pv_str, 0));     /* bad year */
        !            79:        if (monthcheck(parmv[1].pv_val.pv_str, &month))
        !            80:                return (error(BADMONTH, parmv[1].pv_val.pv_str, 0));    /* bad month */
        !            81:        day = atoi(parmv[2].pv_val.pv_str);
        !            82:        if (day < 1 || day > monthsize(--month, year))
        !            83:                return (error(BADDAY, parmv[2].pv_val.pv_str, 0));      /* bad day */
        !            84: 
        !            85:        /* convert date */
        !            86:        /* "date" will be # of days from 1970 for a while */
        !            87:        date = 0;
        !            88: 
        !            89:        /* do year conversion */
        !            90:        for (i = 1970; i < year; i++)
        !            91:        {
        !            92:                date += dysize(i);
        !            93:        }
        !            94: 
        !            95:        /* do month conversion */
        !            96:        for (i = 0; i < month; i++)
        !            97:                date += DmSize[i];
        !            98:        /* once again, allow for leapyears */
        !            99:        if (month >= 2 && year % 4 == 0 && year % 100 != 0)
        !           100:                date += 1;
        !           101: 
        !           102:        /* do day conversion */
        !           103:        date += day - 1;
        !           104: 
        !           105:        /* we now convert date to be the # of hours since 1970 */
        !           106:        date *= 24;
        !           107: 
        !           108:        /* do daylight savings computations */
        !           109:        /*  <<<<< none now >>>>> */
        !           110: 
        !           111:        /* convert to seconds */
        !           112:        date *= 60 * 60;
        !           113: 
        !           114:        /* adjust to local time */
        !           115: # ifdef xV7_UNIX
        !           116:        ftime(&timeb);
        !           117:        date += ((long) timeb.timezone) * 60;
        !           118: # else xV7_UNIX
        !           119:        date += timezone;
        !           120: # endif xV7_UNIX
        !           121: 
        !           122: #      ifdef xZTR1
        !           123:        if (tTf(45, 1))
        !           124:                printf("%s", ctime(&date));
        !           125: #      endif
        !           126: 
        !           127:        /* let's check and see if the relation exists */
        !           128:        opencatalog("relation", OR_WRITE);
        !           129:        clearkeys(&Reldes);
        !           130:        setkey(&Reldes, &relk, parmv[0].pv_val.pv_str, RELID);
        !           131:        setkey(&Reldes, &relk, Usercode, RELOWNER);
        !           132:        if (getequal(&Reldes, &relk, &relt, &tid))
        !           133:        {
        !           134:                return (error(RELNOTFOUND, parmv[0].pv_val.pv_str, 0)); /* relation not found */
        !           135:        }
        !           136: 
        !           137:        /* check that it is not a system catalog */
        !           138:        if (relt.relstat & S_CATALOG)
        !           139:                return (error(NOSAVESYSREL, parmv[0].pv_val.pv_str, 0));        /* cannot save sys rel */
        !           140:        /* got it; lets change the date */
        !           141:        relt.relsave = date;
        !           142: 
        !           143: #      ifdef xZTR2
        !           144:        if (tTf(45, 2))
        !           145:        {
        !           146:                printup(&Reldes, &relt);
        !           147:        }
        !           148: #      endif
        !           149: 
        !           150:        if ((i = replace(&Reldes, &tid, &relt, 0)) < 0)
        !           151:                syserr("SAVE: replace %d", i);
        !           152: 
        !           153:        /* that's all folks.... */
        !           154:        return (0);
        !           155: }
        !           156: /*
        !           157: **  MONTHCHECK
        !           158: */
        !           159: 
        !           160: struct monthtab
        !           161: {
        !           162:        char    *code;
        !           163:        int     month;
        !           164: };
        !           165: 
        !           166: struct monthtab        Monthtab[] =
        !           167: {
        !           168:        "jan",          1,
        !           169:        "feb",          2,
        !           170:        "mar",          3,
        !           171:        "apr",          4,
        !           172:        "may",          5,
        !           173:        "jun",          6,
        !           174:        "jul",          7,
        !           175:        "aug",          8,
        !           176:        "sep",          9,
        !           177:        "oct",          10,
        !           178:        "nov",          11,
        !           179:        "dec",          12,
        !           180:        "january",      1,
        !           181:        "february",     2,
        !           182:        "march",        3,
        !           183:        "april",        4,
        !           184:        "june",         6,
        !           185:        "july",         7,
        !           186:        "august",       8,
        !           187:        "september",    9,
        !           188:        "october",      10,
        !           189:        "november",     11,
        !           190:        "december",     12,
        !           191:        0
        !           192: };
        !           193: 
        !           194: monthcheck(input, output)
        !           195: char   *input;
        !           196: int    *output;
        !           197: {
        !           198:        register struct monthtab        *p;
        !           199:        int                             month;
        !           200: 
        !           201:        /* month can be an integer, or an alphanumeric code */
        !           202:        month = atoi(input);
        !           203:        if (month != 0)
        !           204:        {
        !           205:                *output = month;
        !           206:                return (month < 1 || month > 12);
        !           207:        }
        !           208:        for (p = Monthtab; p->code; p++)
        !           209:        {
        !           210:                if (sequal(input, p->code))
        !           211:                {
        !           212:                        *output = p->month;
        !           213:                        return (0);
        !           214:                }
        !           215:        }
        !           216:        return (1);
        !           217: }
        !           218: /*
        !           219: **  MONTHSIZE -- determine size of a particular month
        !           220: */
        !           221: 
        !           222: monthsize(month, year)
        !           223: int    month;
        !           224: int    year;
        !           225: {
        !           226:        register int    size;
        !           227:        extern int      dysize();       /* defined in ctime */
        !           228: 
        !           229:        size = DmSize[month];
        !           230:        if (month == 1 && dysize(year) == 366)
        !           231:                /* This is February of a leap year */
        !           232:                size++;
        !           233: 
        !           234:        return (size);
        !           235: 
        !           236: }

unix.superglobalmegacorp.com

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