1: # include "conf.h"
   2: # include <time.h>
   3: # ifndef V6
   4: # include <sys/types.h>
   5: # include <sys/timeb.h>
   6: # endif
   7: # include "useful.h"
   8: 
   9: SCCSID(@(#)arpadate.c	4.1		7/25/83);
  10: 
  11: /*
  12: **  ARPADATE -- Create date in ARPANET format
  13: **
  14: **	Parameters:
  15: **		ud -- unix style date string.  if NULL, one is created.
  16: **
  17: **	Returns:
  18: **		pointer to an ARPANET date field
  19: **
  20: **	Side Effects:
  21: **		none
  22: **
  23: **	WARNING:
  24: **		date is stored in a local buffer -- subsequent
  25: **		calls will overwrite.
  26: **
  27: **	Bugs:
  28: **		Timezone is computed from local time, rather than
  29: **		from whereever (and whenever) the message was sent.
  30: **		To do better is very hard.
  31: **
  32: **		Some sites are now inserting the timezone into the
  33: **		local date.  This routine should figure out what
  34: **		the format is and work appropriately.
  35: */
  36: 
  37: char *
  38: arpadate(ud)
  39:     register char *ud;
  40: {
  41:     register char *p;
  42:     register char *q;
  43:     static char b[40];
  44:     extern char *ctime();
  45:     register int i;
  46:     extern struct tm *localtime();
  47: # ifdef V6
  48:     long t;
  49:     extern char *StdTimezone, *DstTimezone;
  50:     extern long time();
  51: # else
  52:     struct timeb t;
  53:     extern struct timeb *ftime();
  54:     extern char *timezone();
  55: # endif
  56: 
  57:     /*
  58: 	**  Get current time.
  59: 	**	This will be used if a null argument is passed and
  60: 	**	to resolve the timezone.
  61: 	*/
  62: 
  63: # ifdef V6
  64:     (void) time(&t);
  65:     if (ud == NULL)
  66:         ud = ctime(&t);
  67: # else
  68:     ftime(&t);
  69:     if (ud == NULL)
  70:         ud = ctime(&t.time);
  71: # endif
  72: 
  73:     /*
  74: 	**  Crack the UNIX date line in a singularly unoriginal way.
  75: 	*/
  76: 
  77:     q = b;
  78: 
  79:     p = &ud[0];     /* Mon */
  80:     *q++ = *p++;
  81:     *q++ = *p++;
  82:     *q++ = *p++;
  83:     *q++ = ',';
  84:     *q++ = ' ';
  85: 
  86:     p = &ud[8];     /* 16 */
  87:     if (*p == ' ')
  88:         p++;
  89:     else
  90:         *q++ = *p++;
  91:     *q++ = *p++;
  92:     *q++ = ' ';
  93: 
  94:     p = &ud[4];     /* Sep */
  95:     *q++ = *p++;
  96:     *q++ = *p++;
  97:     *q++ = *p++;
  98:     *q++ = ' ';
  99: 
 100:     p = &ud[22];        /* 79 */
 101:     *q++ = *p++;
 102:     *q++ = *p++;
 103:     *q++ = ' ';
 104: 
 105:     p = &ud[11];        /* 01:03:52 */
 106:     for (i = 8; i > 0; i--)
 107:         *q++ = *p++;
 108: 
 109:                 /* -PST or -PDT */
 110: # ifdef V6
 111:     if (localtime(&t)->tm_isdst)
 112:         p = DstTimezone;
 113:     else
 114:         p = StdTimezone;
 115: # else
 116:     p = timezone(t.timezone, localtime(&t.time)->tm_isdst);
 117: # endif V6
 118:     if (p[3] != '\0')
 119:     {
 120:         /* hours from GMT */
 121:         p += 3;
 122:         *q++ = *p++;
 123:         if (p[1] == ':')
 124:             *q++ = '0';
 125:         else
 126:             *q++ = *p++;
 127:         *q++ = *p++;
 128:         p++;        /* skip ``:'' */
 129:         *q++ = *p++;
 130:         *q++ = *p++;
 131:     }
 132:     else
 133:     {
 134:         *q++ = ' ';
 135:         *q++ = *p++;
 136:         *q++ = *p++;
 137:         *q++ = *p++;
 138:     }
 139: 
 140:     *q = '\0';
 141:     return (b);
 142: }
Last modified: 1983-12-09
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 740
Valid CSS Valid XHTML 1.0 Strict