diff options
author | Midas <vdrportal_midas@gmx.de> | 2010-04-22 12:49:36 +0200 |
---|---|---|
committer | Midas <vdrportal_midas@gmx.de> | 2010-04-22 12:49:36 +0200 |
commit | d8df53ab68aa2031da1d49a8eb8897aa52ae0b2d (patch) | |
tree | c8c569ac7c94f6636c510382d4ba22d639aaa7dd /event.c | |
parent | 4921cf32c8bda089a21dc4a14ce191ed477f80ff (diff) | |
download | vdr-plugin-block-d8df53ab68aa2031da1d49a8eb8897aa52ae0b2d.tar.gz vdr-plugin-block-d8df53ab68aa2031da1d49a8eb8897aa52ae0b2d.tar.bz2 |
Changed source directory structure.
Diffstat (limited to 'event.c')
-rw-r--r-- | event.c | 127 |
1 files changed, 127 insertions, 0 deletions
@@ -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; +} |