--- magazine.c.orig Sun Aug 27 12:40:30 2006 +++ magazine.c Sun Sep 10 00:45:27 2006 @@ -458,6 +458,9 @@ } const cEvent *magazine::getNext(const cSchedule *s,const cEvent *e) { + if (e == NULL) + return NULL; + const cEvent *pe = NULL; time_t ref = e->StartTime(); @@ -480,6 +483,9 @@ } const cEvent *magazine::getPrev(const cSchedule *s,const cEvent *e) { + if (e == NULL) + return NULL; + const cEvent *pe = NULL; time_t ref = e->StartTime(); time_t delta = INT_MAX; @@ -1077,9 +1083,9 @@ { state = cOsdObject::ProcessKey(Key); - if (state == osUnknown) + if (state == osUnknown && schedArrayNum>currentFirst) { - if (curmode==SHOW && schedArrayNum>currentFirst) + if (curmode==SHOW) { switch (Key & ~k_Repeat) { @@ -1111,6 +1117,8 @@ currentFirst++; if (currentFirst>schedArrayNum-3) currentFirst=schedArrayNum-3; + if (currentFirst<0) + currentFirst=0; output(); break; case kUp: @@ -1145,6 +1153,8 @@ currentFirst+=3; if (currentFirst>schedArrayNum-3) currentFirst=schedArrayNum-3; + if (currentFirst<0) + currentFirst=0; output(); break; case k8: // zum aktuellen Sender @@ -1206,14 +1216,17 @@ { case kOk: { - delete osd; - osd=NULL; cEvent **ev=ev4ch(EDIT_curChannel); - me=new tvOcMenuEvent(ev[EDIT_curEVI]); - me->Display(); - curmode=SHOW; - EDIT_curEvent=0; - return osContinue; + if (ev[EDIT_curEVI] != NULL) + { + delete osd; + osd=NULL; + me=new tvOcMenuEvent(ev[EDIT_curEVI]); + me->Display(); + curmode=SHOW; + EDIT_curEvent=0; + return osContinue; + } } break; case kBack: @@ -1238,11 +1251,15 @@ EDIT_curChannel++; if (EDIT_curChannel>schedArrayNum-1) EDIT_curChannel=schedArrayNum-1; + if (EDIT_curChannel<0) + EDIT_curChannel=0; if (EDIT_curChannel>currentFirst+2) { currentFirst++; if (currentFirst>schedArrayNum-3) currentFirst=schedArrayNum-3; + if (currentFirst<0) + currentFirst=0; EDIT_curChannel=currentFirst+2; } outputLR(); @@ -1343,17 +1360,20 @@ break; */ case kRecord: { - delete osd; - osd=NULL; cEvent **ev=ev4ch(EDIT_curChannel); - cTimer *timer = new cTimer(ev[EDIT_curEVI]); - cTimer *t = Timers.GetTimer(timer); - if (t) + if (ev[EDIT_curEVI] != NULL) { - delete timer; - timer = t; + delete osd; + osd=NULL; + cTimer *timer = new cTimer(ev[EDIT_curEVI]); + cTimer *t = Timers.GetTimer(timer); + if (t) + { + delete timer; + timer = t; + } + met=new cMenuEditTimer(timer, !t); } - met=new cMenuEditTimer(timer, !t); } break; default: