1 # include <time.h>
2 # ifndef V6
3 # include <sys/types.h>
4 # include <sys/timeb.h>
5 # endif
6 
7 static char SccsId[] = "@(#)arpadate.c	3.1	03/04/81";
8 
9 /*
10 **  ARPADATE -- Create date in ARPANET format
11 **
12 **	Parameters:
13 **		ud -- unix style date string.  if NULL, one is created.
14 **
15 **	Returns:
16 **		pointer to an ARPANET date field
17 **
18 **	Side Effects:
19 **		none
20 **
21 **	WARNING:
22 **		date is stored in a local buffer -- subsequent
23 **		calls will overwrite.
24 */
25 
26 # ifdef V6
27 # define DST_NAME	"PDT"
28 # define STD_NAME	"PST"
29 # endif
30 
31 # define NULL		0
32 
33 char *
34 arpadate(ud)
35 	register char *ud;
36 {
37 	register char *p;
38 	register char *q;
39 	static char b[40];
40 	extern char *ctime();
41 	register int i;
42 	extern struct tm *localtime();
43 # ifdef V6
44 	long t;
45 # else
46 	struct timeb t;
47 	extern struct timeb *ftime();
48 	extern char *timezone();
49 # endif
50 
51 # ifdef V6
52 	time(&t);
53 	if (ud == NULL)
54 		ud = ctime(&t);
55 # else
56 	ftime(&t);
57 	if (ud == NULL)
58 		ud = ctime(&t.time);
59 # endif
60 
61 	q = b;
62 
63 	p = &ud[0];		/* Mon */
64 	*q++ = *p++;
65 	*q++ = *p++;
66 	*q++ = *p++;
67 	*q++ = ',';
68 	*q++ = ' ';
69 
70 	p = &ud[8];		/* 16 */
71 	if (*p == ' ')
72 		p++;
73 	else
74 		*q++ = *p++;
75 	*q++ = *p++;
76 	*q++ = '-';
77 
78 	p = &ud[4];		/* Sep */
79 	*q++ = *p++;
80 	*q++ = *p++;
81 	*q++ = *p++;
82 	*q++ = '-';
83 
84 	p = &ud[20];		/* 1979 */
85 	for (i = 4; i > 0; i--)
86 		*q++ = *p++;
87 	*q++ = ' ';
88 
89 	p = &ud[11];		/* 01:03:52 */
90 	for (i = 8; i > 0; i--)
91 		*q++ = *p++;
92 
93 				/* -PST or -PDT */
94 # ifdef V6
95 	if (localtime(&t)->tm_isdst)
96 		p = DST_NAME;
97 	else
98 		p = STD_NAME;
99 # else
100 	p = timezone(t.timezone, localtime(&t.time)->tm_isdst);
101 # endif V6
102 	if (p[3] != '\0')
103 	{
104 		/* hours from GMT */
105 		p += 3;
106 		*q++ = *p++;
107 		if (p[1] == ':')
108 			*q++ = '0';
109 		else
110 			*q++ = *p++;
111 		*q++ = *p++;
112 		p++;		/* skip ``:'' */
113 		*q++ = *p++;
114 		*q++ = *p++;
115 	}
116 	else
117 	{
118 		*q++ = '-';
119 		*q++ = *p++;
120 		*q++ = *p++;
121 		*q++ = *p++;
122 	}
123 
124 	*q = '\0';
125 
126 	return (b);
127 }
128