summaryrefslogtreecommitdiff
path: root/event.c
diff options
context:
space:
mode:
authorMidas <vdrportal_midas@gmx.de>2010-04-22 12:49:36 +0200
committerMidas <vdrportal_midas@gmx.de>2010-04-22 12:49:36 +0200
commitd8df53ab68aa2031da1d49a8eb8897aa52ae0b2d (patch)
treec8c569ac7c94f6636c510382d4ba22d639aaa7dd /event.c
parent4921cf32c8bda089a21dc4a14ce191ed477f80ff (diff)
downloadvdr-plugin-block-d8df53ab68aa2031da1d49a8eb8897aa52ae0b2d.tar.gz
vdr-plugin-block-d8df53ab68aa2031da1d49a8eb8897aa52ae0b2d.tar.bz2
Changed source directory structure.
Diffstat (limited to 'event.c')
-rw-r--r--event.c127
1 files changed, 127 insertions, 0 deletions
diff --git a/event.c b/event.c
new file mode 100644
index 0000000..d06040a
--- /dev/null
+++ b/event.c
@@ -0,0 +1,127 @@
+/**
+ * based on event.c,v 1.1.1.1 2006/02/26 14:11:02 lordjaxom
+ *
+ * version by Midas
+ *
+ */
+
+#include "event.h"
+
+#include <ctype.h>
+
+static char *duptolower(const char *s) {
+ char *c = strdup(s);
+ char *p = c;
+ for (; *p; ++p)
+ *p = tolower(*p);
+ return c;
+}
+
+cEventsBlock EventsBlock;
+
+cEventBlock::cEventBlock(void):
+ mRegularExp(false),
+ mIgnoreCase(false),
+ mCompiled(false)
+{
+ strncpy(mPattern, tr("New Entry"), sizeof(mPattern));
+}
+
+cEventBlock::cEventBlock(const char *Pattern):
+ mRegularExp(false),
+ mIgnoreCase(false),
+ mCompiled(false)
+{
+ strncpy(mPattern, Pattern, sizeof(mPattern));
+}
+
+cEventBlock::cEventBlock(const cEventBlock &Src)
+{
+ operator=(Src);
+}
+
+cEventBlock &cEventBlock::operator=(const cEventBlock &Src)
+{
+ printf("copy construct\n");
+ strcpy(mPattern, Src.mPattern);
+ mRegularExp = Src.mRegularExp;
+ mIgnoreCase = Src.mIgnoreCase;
+ mCompiled = false;
+ Compile();
+ return *this;
+}
+
+cEventBlock::~cEventBlock()
+{
+ if (mRegularExp)
+ regfree(&mExpression);
+}
+
+bool cEventBlock::Acceptable(const char *Event) const
+{
+ if (mRegularExp)
+ return regexec(&mExpression, Event, 0, NULL, 0) != 0;
+ else if (mIgnoreCase) {
+ char *ev = duptolower(Event);
+ char *pa = duptolower(mPattern);
+ printf("check for %s in %s\n", pa, ev);
+ bool res = strstr(ev, pa) == NULL;
+ free(ev); free(pa);
+ return res;
+ } else
+ return strstr(Event, mPattern) == NULL;
+}
+
+bool cEventBlock::Parse(char *s) {
+ char *patternbuf = NULL;
+ int fields = sscanf(s, "%d:%d:%a[^\n]", &mRegularExp, &mIgnoreCase, &patternbuf);
+
+ if (fields == 3) {
+ strncpy(mPattern, skipspace(stripspace(patternbuf)), sizeof(mPattern));
+ free(patternbuf);
+ } else { // backward compatibility
+ strncpy(mPattern, skipspace(stripspace(s)), sizeof(mPattern));
+ mRegularExp = false;
+ mIgnoreCase = false;
+ }
+
+ return Compile();
+}
+
+bool cEventBlock::Compile(void) {
+ mCompiled = false;
+ if (mRegularExp) {
+ if (regcomp(&mExpression, mPattern, REG_EXTENDED | (mIgnoreCase ? REG_ICASE : 0)) != 0) {
+ esyslog("ERROR: malformed regular expression: %s", mPattern);
+ return false;
+ } else
+ mCompiled = true;
+ }
+ return true;
+}
+
+bool cEventBlock::Save(FILE *f) {
+ return fprintf(f, "%d:%d:%s\n", mRegularExp, mIgnoreCase, mPattern) > 0;
+}
+
+bool cEventsBlock::Acceptable(const char *Event) {
+ const cEventBlock *event = First();
+ while (event != NULL) {
+ if (!event->Acceptable(Event))
+ return false;
+ event = Next(event);
+ }
+ return true;
+}
+
+cEventsBlock &cEventsBlock::operator=(const cEventsBlock &Source) {
+ cList<cEventBlock>::Clear();
+
+ const cEventBlock *event = Source.First();
+ while (event != NULL) {
+ printf("transfering %p\n", event);
+ Add(new cEventBlock(*event));
+ event = Source.Next(event);
+ }
+ return *this;
+}