1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
--- icalroutines.c.orig Tue Jan 25 04:08:10 2000
+++ icalroutines.c Sun Jan 20 13:21:22 2002
@@ -1,5 +1,5 @@
/*
- * #$Id: icalroutines.c,v 1.1 2000/01/25 03:08:10 markie Exp $
+ * #$Id: icalroutines.c,v 1.3 2001/12/10 03:16:41 chuck Exp $
*
* Libmcal - Modular Calendar Access Library
* Copyright (C) 1999 Mark Musone and Andrew Skalski
@@ -593,4 +593,111 @@
}
putc(pad, out);
}
+}
+
+#define MAX(a,b) (a)>(b) ? (a) :(b)
+void
+ical_set_byday ( char *output, const byday_t *input ) {
+ int i;
+ char temp_string[50];
+
+ strcpy (output, "");
+
+ for (i=0; i<=6; i++) {
+ /* wdays is a bit field corresponding to days of the week */
+ if ((input->weekdays) & (0x1 <<i) ) {
+ if (input->ordwk[i] != 0) {
+ sprintf( temp_string, "%d", input->ordwk[i] );
+ strcat ( output, temp_string );
+ }
+ switch (i) {
+ case 0:
+ strcat ( output, "SU, ");
+ break;
+ case 1:
+ strcat ( output, "MO, ");
+ break;
+ case 2:
+ strcat ( output, "TU, ");
+ break;
+ case 3:
+ strcat ( output, "WE, ");
+ break;
+ case 4:
+ strcat ( output, "TH, ");
+ break;
+ case 5:
+ strcat ( output, "FR, ");
+ break;
+ case 6:
+ strcat ( output, "SA, ");
+ break;
+ }
+ }
+ }
+ output[MAX(strlen(output)-2,0)] = '\0';
+
+}
+#undef MAX
+
+void
+ical_get_byday ( byday_t *output, const char *input ) {
+ char *temp_string;
+ char *token;
+ char *day_start;
+ int interval;
+ int day_index;
+ temp_string = strdup(input);
+
+ token = strtok (temp_string, ",");
+ while ( token != NULL ) {
+ day_start = token + strlen(token) - 2;
+ if (strcasecmp (day_start, "SU")==0) {
+ output->weekdays |= M_SUNDAY;
+ day_index = 0;
+ } else if (strcasecmp (day_start, "MO")==0) {
+ output->weekdays |= M_MONDAY;
+ day_index = 1;
+ } else if (strcasecmp (day_start, "TU")==0) {
+ output->weekdays |= M_TUESDAY;
+ day_index = 2;
+ } else if (strcasecmp (day_start, "WE")==0) {
+ output->weekdays |= M_WEDNESDAY;
+ day_index = 3;
+ } else if (strcasecmp (day_start, "TH")==0) {
+ output->weekdays |= M_THURSDAY;
+ day_index = 4;
+ } else if (strcasecmp (day_start, "FR")==0) {
+ output->weekdays |= M_FRIDAY;
+ day_index = 5;
+ } else if (strcasecmp (day_start, "SA")==0) {
+ output->weekdays |= M_SATURDAY;
+ day_index = 6;
+ }
+ *day_start = '\0';
+ interval = atoi (token);
+ output->ordwk[day_index] = interval;
+ }
+
+ free( token );
+ free( temp_string );
+}
+
+void
+ical_get_recur_freq( recur_t *output, const char *input, const char *byday) {
+ if (strncmp (input, "D",1)==0) {
+ *output = RECUR_DAILY;
+ } else if (strncmp (input, "W",1)==0) {
+ *output = RECUR_WEEKLY;
+ } else if (strncmp (input, "M",1)==0) {
+ if (strlen(byday) == 0) {
+ *output = RECUR_MONTHLY_MDAY;
+ } else {
+ *output = RECUR_MONTHLY_WDAY;
+ }
+ } else if (strncmp (input, "Y",1)==0) {
+ *output = RECUR_YEARLY;
+ } else {
+ *output = RECUR_NONE;
+ }
}
|