1293Seric # include <time.h>
22897Seric # ifndef V6
32897Seric # include <sys/types.h>
42897Seric # include <sys/timeb.h>
52897Seric # endif
6293Seric 
7*3185Seric static char SccsId[] = "@(#)arpadate.c	3.3	03/11/81";
8403Seric 
9293Seric /*
10293Seric **  ARPADATE -- Create date in ARPANET format
11293Seric **
12293Seric **	Parameters:
132897Seric **		ud -- unix style date string.  if NULL, one is created.
14293Seric **
15293Seric **	Returns:
16293Seric **		pointer to an ARPANET date field
17293Seric **
18293Seric **	Side Effects:
19293Seric **		none
20293Seric **
21293Seric **	WARNING:
22293Seric **		date is stored in a local buffer -- subsequent
23293Seric **		calls will overwrite.
24*3185Seric **
25*3185Seric **	Bugs:
26*3185Seric **		Timezone is computed from local time, rather than
27*3185Seric **		from whereever (and whenever) the message was sent.
28*3185Seric **		To do better is very hard.
29293Seric */
30293Seric 
312897Seric # ifdef V6
322897Seric # define DST_NAME	"PDT"
332897Seric # define STD_NAME	"PST"
342897Seric # endif
352897Seric 
362897Seric # define NULL		0
372897Seric 
381586Seric char *
392897Seric arpadate(ud)
402897Seric 	register char *ud;
41293Seric {
42293Seric 	register char *p;
432897Seric 	register char *q;
44293Seric 	static char b[40];
451586Seric 	extern char *ctime();
462897Seric 	register int i;
472897Seric 	extern struct tm *localtime();
482897Seric # ifdef V6
492897Seric 	long t;
502897Seric # else
512897Seric 	struct timeb t;
522897Seric 	extern struct timeb *ftime();
532897Seric 	extern char *timezone();
542897Seric # endif
55293Seric 
562897Seric # ifdef V6
57293Seric 	time(&t);
582897Seric 	if (ud == NULL)
592897Seric 		ud = ctime(&t);
602897Seric # else
612897Seric 	ftime(&t);
622897Seric 	if (ud == NULL)
632897Seric 		ud = ctime(&t.time);
642897Seric # endif
65293Seric 
662897Seric 	q = b;
672897Seric 
682897Seric 	p = &ud[0];		/* Mon */
692897Seric 	*q++ = *p++;
702897Seric 	*q++ = *p++;
712897Seric 	*q++ = *p++;
722897Seric 	*q++ = ',';
732897Seric 	*q++ = ' ';
742897Seric 
75293Seric 	p = &ud[8];		/* 16 */
76293Seric 	if (*p == ' ')
77293Seric 		p++;
782897Seric 	else
792897Seric 		*q++ = *p++;
802897Seric 	*q++ = *p++;
812966Seric 	*q++ = ' ';
822897Seric 
832897Seric 	p = &ud[4];		/* Sep */
842897Seric 	*q++ = *p++;
852897Seric 	*q++ = *p++;
862897Seric 	*q++ = *p++;
872966Seric 	*q++ = ' ';
882897Seric 
892897Seric 	p = &ud[20];		/* 1979 */
902897Seric 	for (i = 4; i > 0; i--)
912897Seric 		*q++ = *p++;
922897Seric 	*q++ = ' ';
932897Seric 
942897Seric 	p = &ud[11];		/* 01:03:52 */
952897Seric 	for (i = 8; i > 0; i--)
962897Seric 		*q++ = *p++;
972897Seric 
982897Seric 				/* -PST or -PDT */
992897Seric # ifdef V6
100293Seric 	if (localtime(&t)->tm_isdst)
1012897Seric 		p = DST_NAME;
102293Seric 	else
1032897Seric 		p = STD_NAME;
1042897Seric # else
1052897Seric 	p = timezone(t.timezone, localtime(&t.time)->tm_isdst);
1062897Seric # endif V6
1072897Seric 	if (p[3] != '\0')
1082897Seric 	{
1092897Seric 		/* hours from GMT */
1102897Seric 		p += 3;
1112897Seric 		*q++ = *p++;
1122897Seric 		if (p[1] == ':')
1132897Seric 			*q++ = '0';
1142897Seric 		else
1152897Seric 			*q++ = *p++;
1162897Seric 		*q++ = *p++;
1172897Seric 		p++;		/* skip ``:'' */
1182897Seric 		*q++ = *p++;
1192897Seric 		*q++ = *p++;
1202897Seric 	}
1212897Seric 	else
1222897Seric 	{
1232897Seric 		*q++ = '-';
1242897Seric 		*q++ = *p++;
1252897Seric 		*q++ = *p++;
1262897Seric 		*q++ = *p++;
1272897Seric 	}
1282897Seric 
1292897Seric 	*q = '\0';
1302897Seric 
131293Seric 	return (b);
132293Seric }
133