1293Seric # include <time.h>
2*2897Seric # ifndef V6
3*2897Seric # include <sys/types.h>
4*2897Seric # include <sys/timeb.h>
5*2897Seric # endif
6293Seric 
7*2897Seric static char SccsId[] = "@(#)arpadate.c	3.1	03/04/81";
8403Seric 
9293Seric /*
10293Seric **  ARPADATE -- Create date in ARPANET format
11293Seric **
12293Seric **	Parameters:
13*2897Seric **		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 
26*2897Seric # ifdef V6
27*2897Seric # define DST_NAME	"PDT"
28*2897Seric # define STD_NAME	"PST"
29*2897Seric # endif
30*2897Seric 
31*2897Seric # define NULL		0
32*2897Seric 
331586Seric char *
34*2897Seric arpadate(ud)
35*2897Seric 	register char *ud;
36293Seric {
37293Seric 	register char *p;
38*2897Seric 	register char *q;
39293Seric 	static char b[40];
401586Seric 	extern char *ctime();
41*2897Seric 	register int i;
42*2897Seric 	extern struct tm *localtime();
43*2897Seric # ifdef V6
44*2897Seric 	long t;
45*2897Seric # else
46*2897Seric 	struct timeb t;
47*2897Seric 	extern struct timeb *ftime();
48*2897Seric 	extern char *timezone();
49*2897Seric # endif
50293Seric 
51*2897Seric # ifdef V6
52293Seric 	time(&t);
53*2897Seric 	if (ud == NULL)
54*2897Seric 		ud = ctime(&t);
55*2897Seric # else
56*2897Seric 	ftime(&t);
57*2897Seric 	if (ud == NULL)
58*2897Seric 		ud = ctime(&t.time);
59*2897Seric # endif
60293Seric 
61*2897Seric 	q = b;
62*2897Seric 
63*2897Seric 	p = &ud[0];		/* Mon */
64*2897Seric 	*q++ = *p++;
65*2897Seric 	*q++ = *p++;
66*2897Seric 	*q++ = *p++;
67*2897Seric 	*q++ = ',';
68*2897Seric 	*q++ = ' ';
69*2897Seric 
70293Seric 	p = &ud[8];		/* 16 */
71293Seric 	if (*p == ' ')
72293Seric 		p++;
73*2897Seric 	else
74*2897Seric 		*q++ = *p++;
75*2897Seric 	*q++ = *p++;
76*2897Seric 	*q++ = '-';
77*2897Seric 
78*2897Seric 	p = &ud[4];		/* Sep */
79*2897Seric 	*q++ = *p++;
80*2897Seric 	*q++ = *p++;
81*2897Seric 	*q++ = *p++;
82*2897Seric 	*q++ = '-';
83*2897Seric 
84*2897Seric 	p = &ud[20];		/* 1979 */
85*2897Seric 	for (i = 4; i > 0; i--)
86*2897Seric 		*q++ = *p++;
87*2897Seric 	*q++ = ' ';
88*2897Seric 
89*2897Seric 	p = &ud[11];		/* 01:03:52 */
90*2897Seric 	for (i = 8; i > 0; i--)
91*2897Seric 		*q++ = *p++;
92*2897Seric 
93*2897Seric 				/* -PST or -PDT */
94*2897Seric # ifdef V6
95293Seric 	if (localtime(&t)->tm_isdst)
96*2897Seric 		p = DST_NAME;
97293Seric 	else
98*2897Seric 		p = STD_NAME;
99*2897Seric # else
100*2897Seric 	p = timezone(t.timezone, localtime(&t.time)->tm_isdst);
101*2897Seric # endif V6
102*2897Seric 	if (p[3] != '\0')
103*2897Seric 	{
104*2897Seric 		/* hours from GMT */
105*2897Seric 		p += 3;
106*2897Seric 		*q++ = *p++;
107*2897Seric 		if (p[1] == ':')
108*2897Seric 			*q++ = '0';
109*2897Seric 		else
110*2897Seric 			*q++ = *p++;
111*2897Seric 		*q++ = *p++;
112*2897Seric 		p++;		/* skip ``:'' */
113*2897Seric 		*q++ = *p++;
114*2897Seric 		*q++ = *p++;
115*2897Seric 	}
116*2897Seric 	else
117*2897Seric 	{
118*2897Seric 		*q++ = '-';
119*2897Seric 		*q++ = *p++;
120*2897Seric 		*q++ = *p++;
121*2897Seric 		*q++ = *p++;
122*2897Seric 	}
123*2897Seric 
124*2897Seric 	*q = '\0';
125*2897Seric 
126293Seric 	return (b);
127293Seric }
128