|
|
1.1 root 1: /* time.c - */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/time.c,v 7.0 89/11/23 21:44:38 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/dsap/common/RCS/time.c,v 7.0 89/11/23 21:44:38 mrose Rel $
9: *
10: *
11: * $Log: time.c,v $
12: * Revision 7.0 89/11/23 21:44:38 mrose
13: * Release 6.0
14: *
15: */
16:
17: /*
18: * NOTICE
19: *
20: * Acquisition, use, and distribution of this module and related
21: * materials are subject to the restrictions of a license agreement.
22: * Consult the Preface in the User's Manual for the full terms of
23: * this agreement.
24: *
25: */
26:
27:
28: /* SYNTAX
29:
30: time ::= 'yymmddhhmmssz'
31:
32: where yy = year
33: mm = month
34: dd = day
35: hh = hours
36: mm = minutes
37: ss = seconds
38: z = timezone
39:
40: EXAMPLE
41: 890602093221Z -> 09:32:21 GMT, on June 2nd 1989.
42:
43: */
44:
45: #include "quipu/util.h"
46: #include "quipu/attr.h"
47: #include "psap.h"
48:
49: strprint ();
50: sfree ();
51: pstrcmp();
52:
53: static UTC qstr2utct (s, len)
54: char *s;
55: int len;
56: {
57: UTC ut;
58:
59: if (len > 14
60: && strncmp (s, "1989", 4) == 0
61: && (ut = str2utct (s + 2, len - 2)))
62: return ut;
63:
64: return str2utct (s, len);
65: }
66:
67: #define str2utct qstr2utct
68:
69:
70: static PE timeenc (x)
71: char *x;
72: {
73: PE ret_pe = NULLPE;
74:
75: (void) build_UNIV_UTCTime (&ret_pe,0,0,x,NULL);
76: return (ret_pe);
77: }
78:
79: static char * timedec (pe)
80: PE pe;
81: {
82: char * x;
83: if (parse_UNIV_UTCTime (pe,0,0,&x,NULL) == NOTOK)
84: return (NULLCP);
85: return (x);
86: }
87:
88: utcprint (ps,time,format)
89: PS ps;
90: char *time;
91: int format;
92: {
93: UTC ut;
94:
95: if (format == READOUT && (ut = str2utct (time, strlen (time)))) {
96: long mtime;
97:
98: mtime = gtime (ut2tm (ut));
99:
100: ps_printf (ps, "%-24.24s", ctime (&mtime));
101: }
102: else
103: ps_printf (ps, "%s", time);
104: }
105:
106:
107: static utccmp (a, b)
108: char *a, *b;
109: {
110: long a_time,
111: mdiff;
112: UTC ut;
113:
114: if ((ut = str2utct (a, strlen (a))) == NULL)
115: return pstrcmp (a, b);
116: a_time = gtime (ut2tm (ut));
117:
118: if ((ut = str2utct (b, strlen (b))) == NULL)
119: return pstrcmp (a, b);
120:
121: return ((mdiff = a_time - gtime (ut2tm (ut))) == 0L ? 0
122: : mdiff > 0L ? 1 : -1);
123: }
124:
125:
126: time_syntax ()
127: {
128: (void) add_attribute_syntax ("UTCTime",
129: (IFP) timeenc, (IFP) timedec,
130: (IFP) strdup, utcprint,
131: (IFP) strdup, utccmp,
132: sfree, NULLCP,
133: NULLIFP, FALSE);
134: }
135:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.