Initial import of the CDE 2.1.30 sources from the Open Group.
[oweals/cde.git] / cde / lib / csa / rerule.h
1 /* $XConsortium: rerule.h /main/1 1996/04/21 19:24:15 drk $ */
2 /*
3  *  (c) Copyright 1993, 1994 Hewlett-Packard Company
4  *  (c) Copyright 1993, 1994 International Business Machines Corp.
5  *  (c) Copyright 1993, 1994 Novell, Inc.
6  *  (c) Copyright 1993, 1994 Sun Microsystems, Inc.
7  */
8
9 #ifndef _RERULE_H
10 #define _RERULE_H
11
12 typedef unsigned long   Time;
13 typedef unsigned int    Interval;
14 typedef int             Duration;
15
16 #define RE_INFINITY             -1
17 #define RE_NOTSET               -2
18 #define RE_ERROR                -3
19 #define RE_LASTDAY              32
20
21 #define RE_STOP_FLAG                    0x80000000
22 #define RE_SET_FLAG(data)               (data |= RE_STOP_FLAG)
23 #define RE_STOP_IS_SET(data)            (data & RE_STOP_FLAG)
24 #define RE_MASK_STOP(data)              (data & ~RE_STOP_FLAG)
25
26 #ifndef TRUE
27 #define TRUE  1
28 #define FALSE 0
29 #endif
30
31 typedef enum {
32         WD_SUN          = 0,
33         WD_MON,
34         WD_TUE,
35         WD_WED,
36         WD_THU,
37         WD_FRI,
38         WD_SAT
39 } WeekDay;
40
41 typedef enum {
42         WK_F1           = 0,
43         WK_F2,
44         WK_F3,
45         WK_F4,
46         WK_F5,
47         WK_L1,
48         WK_L2,
49         WK_L3,
50         WK_L4,
51         WK_L5
52 } WeekNumber;
53
54 typedef enum {
55         RT_MINUTE,
56         RT_DAILY,
57         RT_WEEKLY,
58         RT_MONTHLY_POSITION,
59         RT_MONTHLY_DAY,
60         RT_YEARLY_MONTH,
61         RT_YEARLY_DAY
62 } RepeatType;
63
64 typedef struct _NumberList {
65         struct _NumberList      *nl_next;
66         unsigned int             nl_number;
67 } NumberList;
68
69 typedef struct _DayTime {
70         WeekDay          dt_day;
71         unsigned int     dt_ntime;
72         Time            *dt_time;
73 } DayTime;
74
75 typedef struct _DayTimeList {
76         struct _DayTimeList     *dtl_next;
77         DayTime                 *dtl_daytime;
78 } DayTimeList;
79
80 typedef struct _WeekDayTime {
81         unsigned int     wdt_nday;
82         WeekDay         *wdt_day;
83         unsigned int     wdt_ntime;
84         Time            *wdt_time;
85         unsigned int     wdt_nweek;
86         WeekNumber      *wdt_week;
87 } WeekDayTime;
88
89 typedef struct _WeekDayTimeList {
90         struct _WeekDayTimeList *wdtl_next;
91         WeekDayTime             *wdtl_weektime;
92 } WeekDayTimeList;
93
94 typedef struct _DailyData {
95         unsigned int     dd_ntime;
96         Time            *dd_time;
97 } DailyData;
98
99 typedef struct _WeeklyData {
100         unsigned int     wd_ndaytime;
101         DayTime         *wd_daytime;
102 } WeeklyData;
103
104 typedef struct _MonthlyData {
105         unsigned int     md_nitems;     /* # of md_weektime or md_days */
106         WeekDayTime     *md_weektime;   /* Used in MP command */
107         unsigned int    *md_days;       /* Array of days for MD command */
108 } MonthlyData;
109
110 typedef struct _YearlyData {
111         unsigned int     yd_nitems;
112         unsigned int    *yd_items;      /* Array of days/months event occurs */
113 } YearlyData;
114
115 typedef struct _RepeatEvent {
116         struct _RepeatEvent     *re_next;
117         struct _RepeatEvent     *re_prev;
118         Interval                 re_interval;
119         Duration                 re_duration;
120         time_t                   re_end_date;
121         RepeatType               re_type;
122         union {
123                 DailyData       *re_daily;
124                 WeeklyData      *re_weekly;
125                 MonthlyData     *re_monthly;
126                 YearlyData      *re_yearly;
127         } re_data;
128 } RepeatEvent;
129
130 typedef struct _RepeatEventState {
131         struct _RepeatEventState        *res_next;
132         const RepeatEvent               *res_re;
133         Duration                         res_duration; /* # events remaining */
134         union {
135                 struct _DailyState {
136                         unsigned int    res_time;
137                 } ds;
138                 struct _WeeklyState {
139                         unsigned int    res_daytime;
140                         unsigned int    res_time;
141                 } ws;
142                 struct _MonthlyState {
143                         unsigned int    res_day;
144                         unsigned int    res_weektime;
145                         unsigned int    res_wday;
146                         unsigned int    res_wtime;
147                         unsigned int    res_wweek;
148                 } ms;
149                 struct _YearlyState {
150                         unsigned int    res_daymonth;
151                 } ys;
152         } res_data;
153 } RepeatEventState;
154
155 extern void _DtCm_free_re(RepeatEvent *);
156 extern void _DtCm_free_re_state(RepeatEventState *);
157
158 #endif /* _RERULE_H */