1293Seric # include <time.h>
22897Seric # ifndef V6
32897Seric # include <sys/types.h>
42897Seric # include <sys/timeb.h>
52897Seric # endif
6293Seric 
7*2966Seric static char SccsId[] = "@(#)arpadate.c	3.2	03/07/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.
24293Seric */
25293Seric 
262897Seric # ifdef V6
272897Seric # define DST_NAME	"PDT"
282897Seric # define STD_NAME	"PST"
292897Seric # endif
302897Seric 
312897Seric # define NULL		0
322897Seric 
331586Seric char *
342897Seric arpadate(ud)
352897Seric 	register char *ud;
36293Seric {
37293Seric 	register char *p;
382897Seric 	register char *q;
39293Seric 	static char b[40];
401586Seric 	extern char *ctime();
412897Seric 	register int i;
422897Seric 	extern struct tm *localtime();
432897Seric # ifdef V6
442897Seric 	long t;
452897Seric # else
462897Seric 	struct timeb t;
472897Seric 	extern struct timeb *ftime();
482897Seric 	extern char *timezone();
492897Seric # endif
50293Seric 
512897Seric # ifdef V6
52293Seric 	time(&t);
532897Seric 	if (ud == NULL)
542897Seric 		ud = ctime(&t);
552897Seric # else
562897Seric 	ftime(&t);
572897Seric 	if (ud == NULL)
582897Seric 		ud = ctime(&t.time);
592897Seric # endif
60293Seric 
612897Seric 	q = b;
622897Seric 
632897Seric 	p = &ud[0];		/* Mon */
642897Seric 	*q++ = *p++;
652897Seric 	*q++ = *p++;
662897Seric 	*q++ = *p++;
672897Seric 	*q++ = ',';
682897Seric 	*q++ = ' ';
692897Seric 
70293Seric 	p = &ud[8];		/* 16 */
71293Seric 	if (*p == ' ')
72293Seric 		p++;
732897Seric 	else
742897Seric 		*q++ = *p++;
752897Seric 	*q++ = *p++;
76*2966Seric 	*q++ = ' ';
772897Seric 
782897Seric 	p = &ud[4];		/* Sep */
792897Seric 	*q++ = *p++;
802897Seric 	*q++ = *p++;
812897Seric 	*q++ = *p++;
82*2966Seric 	*q++ = ' ';
832897Seric 
842897Seric 	p = &ud[20];		/* 1979 */
852897Seric 	for (i = 4; i > 0; i--)
862897Seric 		*q++ = *p++;
872897Seric 	*q++ = ' ';
882897Seric 
892897Seric 	p = &ud[11];		/* 01:03:52 */
902897Seric 	for (i = 8; i > 0; i--)
912897Seric 		*q++ = *p++;
922897Seric 
932897Seric 				/* -PST or -PDT */
942897Seric # ifdef V6
95293Seric 	if (localtime(&t)->tm_isdst)
962897Seric 		p = DST_NAME;
97293Seric 	else
982897Seric 		p = STD_NAME;
992897Seric # else
1002897Seric 	p = timezone(t.timezone, localtime(&t.time)->tm_isdst);
1012897Seric # endif V6
1022897Seric 	if (p[3] != '\0')
1032897Seric 	{
1042897Seric 		/* hours from GMT */
1052897Seric 		p += 3;
1062897Seric 		*q++ = *p++;
1072897Seric 		if (p[1] == ':')
1082897Seric 			*q++ = '0';
1092897Seric 		else
1102897Seric 			*q++ = *p++;
1112897Seric 		*q++ = *p++;
1122897Seric 		p++;		/* skip ``:'' */
1132897Seric 		*q++ = *p++;
1142897Seric 		*q++ = *p++;
1152897Seric 	}
1162897Seric 	else
1172897Seric 	{
1182897Seric 		*q++ = '-';
1192897Seric 		*q++ = *p++;
1202897Seric 		*q++ = *p++;
1212897Seric 		*q++ = *p++;
1222897Seric 	}
1232897Seric 
1242897Seric 	*q = '\0';
1252897Seric 
126293Seric 	return (b);
127293Seric }
128