mbgtools-lx  4.2.8
cnv_wday.h
Go to the documentation of this file.
1 
2 /***************************************************************************/
3 /* */
4 /* File: CNV_WDAY.H $Revision: 1.2 $ */
5 /* */
6 /* Project: Common C Library */
7 /* */
8 /* Compiler: Borland C++ and others */
9 /* */
10 /* Author: M. Burnicki, Meinberg Funkuhren */
11 /* */
12 /* */
13 /* Description: */
14 /* This header provides macros which can be used to convert */
15 /* day-of-week codes from one convention to another. */
16 /* */
17 /* The conventions supported yet have been named as describrd below: */
18 /* */
19 /* name range assignment used with ... */
20 /* ---------------------------------------------------------------- */
21 /* sun06 0..6 0 = Sunday RTC72421, DOS1.10+, Novell */
22 /* sun17 1..7 1 = Sunday RTC146818 */
23 /* mon17 1..7 1 = Monday DCF77 */
24 /* */
25 /***************************************************************************/
26 
27 #ifndef _CNV_WDAY_H
28 
29 /* Other headers to be included */
30 
31 #ifdef _CNV_WDAY
32  #define _ext
33 #else
34  #define _ext extern
35 #endif
36 
37 
38 /* Start of header body */
39 
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43 
44 
45 /* use the following macros if sure that the source value is in range */
46 
47 #define _wday_mon17_to_mon06( d ) ( ( d ) - 1 )
48 #define _wday_mon06_to_mon17( d ) ( ( d ) + 1 )
49 
50 #define _wday_mon17_to_sun17( d ) ( ( (d) >= 7 ) ? 1 : ( (d) + 1 ) )
51 #define _wday_sun17_to_mon17( d ) ( ( (d) < 2 ) ? 7 : ( (d) - 1 ) )
52 
53 #define _wday_mon17_to_sun06( d ) ( ( (d) >= 7 ) ? 0 : (d) )
54 #define _wday_sun06_to_mon17( d ) ( ( (d) < 1 ) ? 7 : (d) )
55 
56 #define _wday_sun17_to_sun06( d ) ( (d) - 1 )
57 #define _wday_sun06_to_sun17( d ) ( (d) + 1 )
58 
59 
60 /* use the macros below to check for valid ranges */
61 
62 #define _inrng( d, what, min, lt, max, gt ) ( ( (d) < (min) ) ? (lt) : ( ( (d) > (max) ) ? (gt) : (what) ) )
63  /* _inrng is a local macro which does the boundary check */
64  /* d the day code to be converted */
65  /* what the conversion algorithm if in range */
66  /* min, lt if (d) is below (min), the macro returns (lt) */
67  /* max, gt if (d) is above (max), the macro returns (gt) */
68 
69 #define _wday_chk_mon17_to_sun17( d ) _inrng( (d), _wday_mon17_to_sun17( (d) ), 1, 7, 7, 6 )
70 #define _wday_chk_sun17_to_mon17( d ) _inrng( (d), _wday_sun17_to_mon17( (d) ), 1, 7, 7, 6 )
71 
72 
73 #define _wday_chk_mon17_to_sun06( d ) _inrng( (d), _wday_mon17_to_sun06( (d) ), 1, 1, 7, 0 )
74 #define _wday_chk_sun06_to_mon17( d ) _inrng( (d), _wday_sun06_to_mon17( (d) ), 0, 1, 6, 6 )
75 
76 #define _wday_chk_sun17_to_sun06( d ) _inrng( (d), _wday_sun17_to_sun06( (d) ), 1, 0, 7, 6 )
77 #define _wday_chk_sun06_to_sun17( d ) _inrng( (d), _wday_sun06_to_sun17( (d) ), 0, 1, 6, 7 )
78 
79 /* End of header body */
80 
81 
82 #undef _ext
83 
84 #ifdef __cplusplus
85 }
86 #endif
87 
88 #define _CNV_WDAY_H
89 
90 #endif /* _CNV_WDAY_H */
91