00001 #ifndef _SCHEDULE_H_
00002 #define _SCHEDULE_H_
00003 #include <stdio.h>
00004 #include <stdlib.h>
00005 #include <time.h>
00006
00007
00018 enum ActionType {ON_DEMAND, DEFAULT, ALWAYS, PRIVATE};
00019
00023 typedef struct _actionStruct {
00024 char * name;
00025 char * command;
00026 enum ActionType type;
00027 } actionDef;
00028
00032 typedef struct _actionNode {
00033 actionDef * action;
00034 struct _actionNode * next;
00035 } actionNode;
00036
00045 enum ValType {WILDCARD, SINGLE, LIST, RANGE};
00046
00054 typedef struct _valStruct {
00055 enum ValType type;
00056 union {
00057 int value;
00058 int range[3];
00059 struct {
00060 struct _valStruct * element;
00061 struct _valStruct * next;
00062 } listNode;
00063 };
00064 } valueStruct;
00065
00073 typedef struct _scheduleStruct {
00074 valueStruct year;
00075 valueStruct monOfYear;
00076 valueStruct dayOfMonth;
00077 valueStruct dayOfWeek;
00078 valueStruct hour;
00079 valueStruct minute;
00080 int durationInMin;
00081 char * task;
00082 char * reminderMessage;
00083 actionNode * actionSet;
00084 } scheduleEntry;
00085
00089 typedef struct _scheduleNode {
00090 struct _scheduleStruct * entry;
00091 struct _scheduleNode * next;
00092 } scheduleNode;
00093
00094
00095
00096
00097
00098 typedef struct _eventStruct {
00099 time_t nextTime;
00100 int durationInMin;
00101 char * task;
00102 char * reminderMessage;
00103 actionNode * actionSet;
00104 } eventEntry;
00105
00106
00107
00108
00109
00110 typedef struct _scheduledExec {
00111 time_t absTime;
00112 scheduleNode * taskHead;
00113 } scheduledExec;
00114
00115
00116
00117 enum BoolEnum {False, True};
00118 typedef enum BoolEnum Bool;
00119
00120
00121
00122
00123 void displaySchedule(FILE * out);
00124 void displayTodaysSchedule(FILE * out);
00125 void runNotifications();
00126
00127 time_t calcNextTimeForTask(scheduleEntry *entry);
00128
00129 scheduledExec * calcNextTaskAlarm();
00130
00149 int addScheduleEntry(int year, int month, int dayOfMonth,
00150 int dayOfWeek, int hour, int minute, int duration,
00151 const char * task, const char * reminder,
00152 actionNode * actionSet);
00153
00172 int addScheduleEntryAdv(valueStruct * year, valueStruct * month,
00173 valueStruct * dayOfMonth, valueStruct * dayOfWeek, valueStruct * hour,
00174 valueStruct * minute, int duration,
00175 const char * task, const char * reminder);
00176
00196 int addScheduleEntryNormalize(valueStruct * year, valueStruct * month,
00197 valueStruct * dayOfMonth, valueStruct * dayOfWeek, valueStruct * hour,
00198 valueStruct * minute, int duration,
00199 const char * task, const char * reminder,
00200 actionNode * actionSet);
00201
00220 scheduleEntry * createScheduleEntry(int year, int month, int dayOfMonth,
00221 int dayOfWeek, int hour, int minute, int duration,
00222 const char * task, const char * reminder);
00223
00246 scheduleEntry * createScheduleEntryAdv(valueStruct * year, valueStruct * month,
00247 valueStruct * dayOfMonth, valueStruct * dayOfWeek, valueStruct * hour,
00248 valueStruct * minute, int duration,
00249 const char * task, const char * reminder);
00253 void freeScheduleEntry(scheduleEntry *entry);
00254
00258 void setTestTime(time_t time);
00259
00264 valueStruct * createSingleValue(int value);
00269 valueStruct * createRangeValue(int begin, int end, int step);
00274 valueStruct * createWildcardValue();
00279 valueStruct * createListValue(valueStruct * value);
00283 void addListValue(valueStruct * list, valueStruct * value);
00287 void freeValueStruct(valueStruct * value);
00292 void freeValueStructList(valueStruct * value);
00293
00297 actionDef * createActionCommand(char * commandName, char * commandStr,
00298 enum ActionType type);
00299
00303 actionDef * findActionCommand(char * commandName);
00304
00308 void addActionCommand(char * commandName, char * commandStr,
00309 enum ActionType type);
00310
00314 actionNode * createActionSet(actionDef * action);
00315
00319 void addActionToActionSet(actionNode * node, actionDef * action);
00320
00324 void executeScheduledEntry(scheduledExec *task);
00325 #endif //_SCHEDULE_H_