1: /*
   2:  * date : print date
   3:  * date YYMMDDHHMM[.SS] : set date, if allowed
   4:  * date -u ... : date in GMT
   5:  */
   6: #include <time.h>
   7: #include <sys/types.h>
   8: #include <sys/timeb.h>
   9: #include <utmp.h>
  10: long    timbuf;
  11: char    *ap, *ep, *sp;
  12: int uflag;
  13: 
  14: char    *timezone();
  15: static  int dmsize[12] =
  16: {
  17:     31,
  18:     28,
  19:     31,
  20:     30,
  21:     31,
  22:     30,
  23:     31,
  24:     31,
  25:     30,
  26:     31,
  27:     30,
  28:     31
  29: };
  30: 
  31: struct utmp wtmp[2] = { {"|", "", 0}, {"{", "", 0}};
  32: 
  33: char    *ctime();
  34: char    *asctime();
  35: struct  tm *localtime();
  36: struct  tm *gmtime();
  37: 
  38: main(argc, argv)
  39: char *argv[];
  40: {
  41:     register char *tzn;
  42:     struct timeb info;
  43:     int wf, rc;
  44: 
  45:     rc = 0;
  46:     ftime(&info);
  47:     if (argc>1 && argv[1][0]=='-' && argv[1][1]=='u') {
  48:         argc--;
  49:         argv++;
  50:         uflag++;
  51:     }
  52:     if(argc > 1) {
  53:         ap = argv[1];
  54:         if (gtime()) {
  55:             printf("date: bad conversion\n");
  56:             exit(1);
  57:         }
  58:         /* convert to GMT assuming local time */
  59:         if (uflag==0) {
  60:             timbuf += (long)info.timezone*60;
  61:             /* now fix up local daylight time */
  62:             if(localtime(&timbuf)->tm_isdst)
  63:                 timbuf -= 60*60;
  64:         }
  65:         time(&wtmp[0].ut_time);
  66:         if(stime(&timbuf) < 0) {
  67:             rc++;
  68:             printf("date: no permission\n");
  69:         } else if ((wf = open("/usr/adm/wtmp", 1)) >= 0) {
  70:             time(&wtmp[1].ut_time);
  71:             lseek(wf, 0L, 2);
  72:             write(wf, (char *)wtmp, sizeof(wtmp));
  73:             close(wf);
  74:         }
  75:     }
  76:     if (rc==0)
  77:         time(&timbuf);
  78:     if(uflag) {
  79:         ap = asctime(gmtime(&timbuf));
  80:         tzn = "GMT";
  81:     } else {
  82:         struct tm *tp;
  83:         tp = localtime(&timbuf);
  84:         ap = asctime(tp);
  85:         tzn = timezone(info.timezone, tp->tm_isdst);
  86:     }
  87:     printf("%.20s", ap);
  88:     if (tzn)
  89:         printf("%s", tzn);
  90:     printf("%s", ap+19);
  91:     exit(rc);
  92: }
  93: 
  94: gtime()
  95: {
  96:     register int i, year, month;
  97:     int day, hour, mins, secs;
  98:     struct tm *L;
  99:     char x;
 100: 
 101:     ep=ap;
 102:     while(*ep) ep++;
 103:     sp=ap;
 104:     while(sp<ep) {
 105:         x = *sp;
 106:         *sp++ = *--ep;
 107:         *ep = x;
 108:     }
 109:     sp=ap;
 110:     time(&timbuf);
 111:     L=localtime(&timbuf);
 112:     secs = gp(-1);
 113:     if(*sp!='.') {
 114:         mins=secs;
 115:         secs=0;
 116:     } else {sp++;
 117:         mins = gp(-1);
 118:     }
 119:     hour = gp(-1);
 120:     day = gp(L->tm_mday);
 121:     month = gp(L->tm_mon+1);
 122:     year = gp(L->tm_year);
 123:     if(*sp)
 124:         return(1);
 125:     if( month<1 || month>12 ||
 126:         day<1 || day>31 ||
 127:         mins<0 || mins>59 ||
 128:         secs<0 || secs>59)
 129:         return(1);
 130:     if (hour==24) {
 131:         hour=0; day++;
 132:     }
 133:     if (hour<0 || hour>23)
 134:         return(1);
 135:     timbuf = 0;
 136:     year += 1900;
 137:     for(i=1970; i<year; i++)
 138:         timbuf += dysize(i);
 139:     /* Leap year */
 140:     if (dysize(year)==366 && month >= 3)
 141:         timbuf++;
 142:     while(--month)
 143:         timbuf += dmsize[month-1];
 144:     timbuf += day-1;
 145:     timbuf = 24*timbuf + hour;
 146:     timbuf = 60*timbuf + mins;
 147:     timbuf = 60*timbuf + secs;
 148:     return(0);
 149: 
 150: }
 151: 
 152: gp(dfault)
 153: {
 154:     register int c, d;
 155: 
 156:     if(*sp==0)
 157:         return(dfault);
 158:     c = (*sp++)-'0';
 159:     d = (*sp ? (*sp++)-'0' : 0);
 160:     if(c<0 || c>9 || d<0 || d>9)
 161:         return(-1);
 162:     return(c+10*d);
 163: }

Defined functions

gp defined in line 152; used 6 times
gtime defined in line 94; used 1 times
  • in line 54
main defined in line 38; never used

Defined variables

ap defined in line 11; used 8 times
dmsize defined in line 15; used 1 times
ep defined in line 11; used 6 times
sp defined in line 11; used 12 times
timbuf defined in line 10; used 20 times
uflag defined in line 12; used 3 times
wtmp defined in line 31; used 4 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 757
Valid CSS Valid XHTML 1.0 Strict