# 2.11BSD#431 - /usr/ingres/source/dbu/save.c

##### Functions

    monthcheck        X
    monthsize         X
    save              X

##### Variables

    Monthtab          X

##### Macros

    Dmsize            X

##### struct's

    monthtab          X

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

#### Defined functions

monthcheck defined in line 185; used 1 times

- in line 72

monthsize defined in line 215; used 1 times

- in line 74

save defined in line 50; used 4 times

- in /usr/ingres/source/dbu/overlayc.c line 2-7(2)
- in /usr/ingres/source/dbu/overlayg.c line 8, 23

#### Defined variables

Dmsize declared in line 46; defined in line 38; never used
Monthtab defined in line 157; used 1 times

- in line 198

#### Defined struct's

monthtab defined in line 151; used 4 times

- in line 157(2), 189(2)

#### Defined macros

Dmsize defined in line 45; used 3 times

- in line 89, 220-223(2)

Last modified: 1995-02-04 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 875 |