summaryrefslogtreecommitdiff
path: root/misc/libmcal/files/patch-ag
blob: f73288c5191c40d95befc5123fc9111e3b608083 (plain) (blame)
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;
+    }
 }