source: buchla-68k/orig/DATE/ARPATIME.C@ 6888aa2

Last change on this file since 6888aa2 was 3ae31e9, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Imported original source code.

  • Property mode set to 100755
File size: 3.6 KB
RevLine 
[3ae31e9]1/* arpatime.c - routines to do ``ARPA-style'' time structures */
2/* requires the "notorious" timeb.h ... */
3
4#include "tws.h"
5#include <stdio.h>
6#include <sys/types.h>
7
8#include "timeb.h"
9
10#ifndef BSD42
11#include <time.h>
12#else BSD42
13#include <sys/time.h>
14#endif BSD42
15
16#ifdef MAIN
17main()
18{
19
20printf("%s\n",dtimenow());
21
22}
23#endif
24
25#define abs(a) (a >= 0 ? a : -a)
26
27static char *month[] = {
28 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
29 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
30};
31
32static char *day[] = {
33 "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
34};
35
36struct keywd {
37 char *key;
38 int value;
39};
40
41#define NZONES (sizeof (zones)/sizeof (struct keywd))
42
43static struct keywd zones[] = { /* order sensitive */
44 "UT", 0,
45 "EST", -5, "CST", -6, "MST", -7, "PST", -8, "PDT", -9,
46 "A", -1, "B", -2, "C", -3, "D", -4,
47 "E", -5, "F", -6, "G", -7, "H", -8,
48 "I", -9, "K", -10, "L", -11, "M", -12,
49 "N", 1, "O", 2, "P", 3, "Q", 4,
50 "R", 5, "S", 6, "T", 7, "U", 8,
51 "V", 9, "W", 10, "X", 11, "Y", 12
52};
53
54
55long time ();
56struct tm *localtime ();
57
58char *dtime (clock)
59long *clock;
60{
61 return dasctime (dlocaltime (clock));
62}
63
64
65char *dtimenow()
66{
67 long clock;
68
69 time (&clock);
70 return dtime (&clock);
71}
72
73
74char *dctime (tw)
75struct tws *tw;
76{
77 static char buffer[25];
78
79 if (!tw)
80 return NULL;
81
82 sprintf (buffer, "%.3s %.3s %02d %02d:%02d:%02d %.4d\n",
83 day[tw -> tw_wday], month[tw -> tw_mon], tw -> tw_mday,
84 tw -> tw_hour, tw -> tw_min, tw -> tw_sec,
85 tw -> tw_year >= 100 ? tw -> tw_year : 1900 + tw -> tw_year);
86
87 return buffer;
88}
89
90struct tws *dlocaltime (clock)
91long *clock;
92{
93 struct tm *tm;
94 struct timeb tb;
95 static struct tws tw;
96
97 if (!clock)
98 return NULL;
99
100 tm = localtime (clock);
101 tw.tw_sec = tm -> tm_sec;
102 tw.tw_min = tm -> tm_min;
103 tw.tw_hour = tm -> tm_hour;
104 tw.tw_mday = tm -> tm_mday;
105 tw.tw_mon = tm -> tm_mon;
106 tw.tw_year = tm -> tm_year;
107 tw.tw_wday = tm -> tm_wday;
108 tw.tw_yday = tm -> tm_yday;
109 tw.tw_isdst = tm -> tm_isdst;
110
111 ftime (&tb);
112 tw.tw_zone = -tb.timezone;
113 tw.tw_sday = 0;
114
115 return (&tw);
116}
117
118char *dasctime (tw)
119struct tws *tw;
120{
121 static char buffer[80],
122 result[80];
123
124 if (!tw)
125 return NULL;
126
127 sprintf (buffer, "%02d %s %02d %02d:%02d:%02d %s",
128 tw -> tw_mday, month[tw -> tw_mon], tw -> tw_year,
129 tw -> tw_hour, tw -> tw_min, tw -> tw_sec,
130 dtimezone (tw -> tw_zone, tw -> tw_isdst));
131
132 if (tw -> tw_sday > 0)
133 sprintf (result, "%s, %s", day[tw -> tw_wday], buffer);
134 else
135 if (tw -> tw_sday < 0)
136 strcpy (result, buffer);
137 else
138/* sprintf (result, "%s (%s)", buffer, day[tw -> tw_wday]);*/
139 sprintf (result, "%s, %s", day[tw -> tw_wday], buffer);
140 return result;
141}
142
143char *dtimezone (zone, dst)
144int zone,
145 dst;
146{
147 int i,
148 j,
149 hours,
150 mins;
151 static char buffer[10];
152
153 if (zone < 0) {
154 mins = -((-zone) % 60);
155 hours = -((-zone) / 60);
156 }
157 else {
158 mins = zone % 60;
159 hours = zone / 60;
160 }
161
162 if (dst)
163 hours -= 1;
164
165 if (mins == 0)
166 for (i = 0, j = NZONES; i < j; i++)
167 if (zones[i].value == hours) {
168 strcpy (buffer, zones[i].key);
169 if (dst && buffer[1] == 'S')
170 buffer[1] = 'D';
171 return buffer;
172 }
173
174 sprintf (buffer, "%s%02d%02d",
175 zone < 0 ? "-" : "+", abs (hours), abs (mins));
176 return buffer;
177}
178
Note: See TracBrowser for help on using the repository browser.