Version 1.2.1

- Fixed OSD access in case none of the devices provides one (thanks to Axel
  Gruber for reporting this one).
- Fixed editing channels ('timers.conf' was not written after a channel has
  been modified, which could result in errors upon the next start of VDR).
- Fixed a crash when canceling a newly created timer (thanks to Thomas Schmidt
  for reporting this one).
- Completed Hungarian language texts (thanks to Istvan Koenigsberger and Guido
  Josten).
- Fixed device handling in the CICAM menu in case a VDR instance was started
  with a specific device using the -D option (thanks to Gerald Raaf for reporting
  ths one).
- Initializing the current channel to '1' to avoid a crash in creating a new
  timer in case there is no device in the system that can actually receive any
  channel (thanks to Malcolm Caldwell for reporting this one).
- Some corrections to the Finnish OSD texts (thanks to Niko Tarnanen and Rolf
  Ahrenberg).
This commit is contained in:
Klaus Schmidinger
2003-06-09 18:00:00 +02:00
parent 40334f3e09
commit 64ddfca3b0
8 changed files with 110 additions and 90 deletions

View File

@@ -90,6 +90,7 @@ Peter Hofmann <software@pxh.de>
Axel Gruber <axel@agm.de>
for his support in keeping the Premiere World channels up to date in 'channels.conf'
for helping to debug support for Viaccess CAMs
for reporting a problem in case none of the devices provides an OSD
Arnold Niessen <niessen@iae.nl> <arnold.niessen@philips.com>
for translating OSD texts to the Dutch language
@@ -370,6 +371,8 @@ Gerald Raaf <graaf@attglobal.net>
for helping to fix the still picture workaround in case the progress display
is active
for his support in keeping the Premiere World channels up to date in 'channels.conf'
for reporting a problem in device handling in the CICAM menu in case a VDR
instance was started with a specific device using the -D option
Andreas Roedl <flood@flood-net.de>
for adding some DVB-T channels for Berlin (Germany) to channels.conf.terr
@@ -617,6 +620,8 @@ Sascha Volkenandt <sascha@akv-soft.de>
Malcolm Caldwell <malcolm.caldwell@ntu.edu.au>
for modifying LOF handling to allow for C-band reception
for reporting a crash in creating a new timer in case there is no device in the
system that can actually receive any channel
Ludwig Nussel <ludwig.nussel@web.de>
for making the LIRC thread avoid high CPU load in case the connection to LIRC gets lost
@@ -711,3 +716,6 @@ Karim Afifi <karim.afifi@free.fr>
Jon Burgess <mplayer@jburgess.uklinux.net>
for pointing out a problem with NPTL ("Native Posix Thread Library")
Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
for reporting a crash when cancelling a newly created timer

19
HISTORY
View File

@@ -2234,3 +2234,22 @@ Video Disk Recorder Revision History
(thanks to Jon Burgess for pointing this out).
- Some corrections to the Finnish OSD texts (thanks to Jaakko Hyv<79>tti).
- Officially released as version 1.2.0.
2003-06-09: Version 1.2.1
- Fixed OSD access in case none of the devices provides one (thanks to Axel
Gruber for reporting this one).
- Fixed editing channels ('timers.conf' was not written after a channel has
been modified, which could result in errors upon the next start of VDR).
- Fixed a crash when cancelling a newly created timer (thanks to Thomas Schmidt
for reporting this one).
- Completed Hungarian language texts (thanks to Istvan Koenigsberger and Guido
Josten).
- Fixed device handling in the CICAM menu in case a VDR instance was started
with a specific device using the -D option (thanks to Gerald Raaf for reporting
ths one).
- Initializing the current channel to '1' to avoid a crash in creating a new
timer in case there is no device in the system that can actually receive any
channel (thanks to Malcolm Caldwell for reporting this one).
- Some corrections to the Finnish OSD texts (thanks to Niko Tarnanen and Rolf
Ahrenberg).

View File

@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.h 1.163 2003/05/31 09:10:58 kls Exp $
* $Id: config.h 1.164 2003/06/06 12:28:20 kls Exp $
*/
#ifndef __CONFIG_H
@@ -19,8 +19,8 @@
#include "device.h"
#include "tools.h"
#define VDRVERSION "1.2.0"
#define VDRVERSNUM 10200 // Version * 10000 + Major * 100 + Minor
#define VDRVERSION "1.2.1"
#define VDRVERSNUM 10201 // Version * 10000 + Major * 100 + Minor
#define MAXPRIORITY 99
#define MAXLIFETIME 99

View File

@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: device.c 1.44 2003/05/25 10:57:59 kls Exp $
* $Id: device.c 1.45 2003/06/08 09:19:59 kls Exp $
*/
#include "device.h"
@@ -28,7 +28,7 @@
int cDevice::numDevices = 0;
int cDevice::useDevice = 0;
int cDevice::nextCardIndex = 0;
int cDevice::currentChannel = 0;
int cDevice::currentChannel = 1;
cDevice *cDevice::device[MAXDEVICES] = { NULL };
cDevice *cDevice::primaryDevice = NULL;

60
i18n.c
View File

@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: i18n.c 1.125 2003/06/01 08:49:47 kls Exp $
* $Id: i18n.c 1.128 2003/06/09 09:49:29 kls Exp $
*
* Translations provided by:
*
@@ -222,7 +222,7 @@ const tI18nPhrase Phrases[] = {
"Entoles gia egrafes",
"Inspelningskommandon",
"",// TODO
"",// TODO
"Parancsok a felvett filmekhez",
"Ordres de gravaci<63>",
},
{ "Edit channel",
@@ -733,7 +733,7 @@ const tI18nPhrase Phrases[] = {
"Epanafora",
"<EFBFBD>terst<EFBFBD>ll",
"",//TODO
"",//TODO
"Reset",
"Reiniciar",
},
// Confirmations:
@@ -932,7 +932,7 @@ const tI18nPhrase Phrases[] = {
"Pressione qualquer tecla para cancelar",
"Appuyez sur une touche pour annuler l'arr<72>t",
"Trykk en tast for ikke <20> sl<73> av",
"Peru sammutus painamalla jotain n<>pp<70>int<6E>",
"Peru sammutus painamalla mit<EFBFBD> tahansa n<>pp<70>int<6E>",
"Dowolny przycisk zatrzyma wylaczanie",
"Pulse una tecla para interrumpir apagar",
"Piese ena pliktro na akirothei o termatismos",
@@ -1007,7 +1007,7 @@ const tI18nPhrase Phrases[] = {
"Pigi",
"K<EFBFBD>lla",
"",//TODO
"",//TODO
"Forr<EFBFBD>s",
"Origen",
},
{ "Srate",
@@ -1587,7 +1587,7 @@ const tI18nPhrase Phrases[] = {
"To kanali den ine diathesimo",
"Kanalen ej tillg<6C>nglig!",
"",//TODO
"",//TODO
"A csatorna nem el<65>rhet<65>",
"Canal no disponible!",
},
{ "Channel settings are not unique!",
@@ -1604,7 +1604,7 @@ const tI18nPhrase Phrases[] = {
"Oi rithmiseis tou kanaliou simpiptoun me allo!",
"Kanalinst<EFBFBD>llningarna <20>r ej unika!",
"",//TODO
"",//TODO
"A csatornabe<62>ll<6C>t<EFBFBD>sok nem egy<67>rtelm<6C>ek",
"Propietats del canal duplicades!",
},
{ "Channel locked (recording)!",
@@ -1655,7 +1655,7 @@ const tI18nPhrase Phrases[] = {
"Den exoun oristei simeia gia epexsergasia",
"Det finns inga redigeringsm<73>rken",//TODO
"",//TODO
"",//TODO
"A v<>g<EFBFBD>pont nincs kijel<65>lve",//TODO
"No hi ha marques d'edici<63> definides",
},
{ "Can't start editing process!",
@@ -1740,7 +1740,7 @@ const tI18nPhrase Phrases[] = {
"Den mpori na aniksi to CAM menou!",
"Det g<>r inte att <20>ppna CAM menyn!",
"",//TODO
"",//TODO
"A CAM-Men<65> nem nyithat<61>",
"No puc obrir el men<65> de la CAM!",
},
{ "Can't reset CAM!",
@@ -1757,7 +1757,7 @@ const tI18nPhrase Phrases[] = {
"Adinato na gini epanafora sto CAM",
"Kan inte <20>terst<73>lla CAM!",
"",//TODO
"",//TODO
"A CAM-Reset nem siker<65>lt",
"No puc reiniciar la CAM!",
},
{ "CAM has been reset",
@@ -1774,7 +1774,7 @@ const tI18nPhrase Phrases[] = {
"Sto CAM egine apanafora",
"CA modulen har <20>terst<73>llts",
"",//TODO
"",//TODO
"A CAM vissza lett <20>ll<6C>tva",
"CAM reiniciada",
},
// Setup pages:
@@ -2405,7 +2405,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"Prioritet f<>r direktinspelning",
"",// TODO
"",// TODO
"Sz<EFBFBD>net priorit<69>s",
"Prioritat de la pausa",
},
{ "Setup.Recording$Pause lifetime (d)",
@@ -2422,7 +2422,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"Livstid f<>r direktinspelning (dagar)",
"",// TODO
"",// TODO
"Sz<EFBFBD>net <20>lettartama",
"Durada de la pausa (d)",
},
{ "Setup.Recording$Use episode name",
@@ -2592,7 +2592,7 @@ const tI18nPhrase Phrases[] = {
"Resume ID",// TODO
"<EFBFBD>teruppta ID",
"Resume ID",// TODO
"Resume ID",// TODO
"Lej<EFBFBD>tsz<EFBFBD>s ID",
"ID de Continuar",
},
{ "Setup.Miscellaneous$Min. event timeout (min)",
@@ -2696,7 +2696,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
" abcdefghijklmnopqrstuvxyz<79><7A><EFBFBD>0123456789-.#~",
" abcdefghijklmnopqrstuvwxyz0123456789-.#~",
" a<>bcde<64>fghijklmno<6E><6F>pqrstu<74><75>vwxyz0123456789-.,#~",
" a<>bcde<64>fghi<EFBFBD>jklmno<EFBFBD><EFBFBD>pqrstu<EFBFBD><EFBFBD>vwxyz0123456789-.,#~",
" a<>bc<62>de<64><65>fghi<68>jklmno<6E>pqrstu<74>vwxyz0123456789-.,#~_<>",
},
// Learning keys:
@@ -2742,7 +2742,7 @@ const tI18nPhrase Phrases[] = {
"Pressione qualquer tecla do telecomando",
"Appuyer sur une touche de la t<>l<EFBFBD>commande",
"Trykk en av tastene p<> fjernkontrollen",
"Paina jotain kaukos<6F><73>timen n<>pp<70>int<6E>",
"Paina mit<EFBFBD> tahansa kaukos<6F><73>timen n<>pp<70>int<6E>",
"Nacisnac klawisz pilota",
"Pulse una tecla en el telemando",
"Piese ena pliktro sto tilexiristirio",
@@ -2901,7 +2901,7 @@ const tI18nPhrase Phrases[] = {
"Pata 'Menou' gia prosperasi aftou tou pliktrou",
"Tryck 'Meny' f<>r att hoppa <20>ver denna knapp.",
"",// TODO
"",// TODO
"A Men<65> gombot nyomni ennek a gombnak a kihagy<67>s<EFBFBD>hoz",
"Premeu 'Men<65>' per obviar aquesta tecla",
},
{ "Phase 3: Saving key codes",
@@ -3140,7 +3140,7 @@ const tI18nPhrase Phrases[] = {
"Anametadosi",
"Spela upp",
"",// TODO
"",// TODO
"Lej<EFBFBD>tsz<EFBFBD>s",
"Reproduir",
},
{ "Pause",
@@ -3157,7 +3157,7 @@ const tI18nPhrase Phrases[] = {
"Dialima",
"Pausa",
"",// TODO
"",// TODO
"Sz<EFBFBD>net",
"Pausa",
},
{ "Stop",
@@ -3174,7 +3174,7 @@ const tI18nPhrase Phrases[] = {
"Terma",
"Stoppa",
"",// TODO
"",// TODO
"Stop",
"Aturar",
},
{ "Record",
@@ -3191,7 +3191,7 @@ const tI18nPhrase Phrases[] = {
"Egrafi",
"Spela in",
"",// TODO
"",// TODO
"Felvenni",
"Gravar",
},
{ "FastFwd",
@@ -3208,7 +3208,7 @@ const tI18nPhrase Phrases[] = {
"Girisma mprosta",
"Snabbspolning fram<61>t",
"",// TODO
"",// TODO
"El<EFBFBD>re p<>rgetni",
"Endavant r<>pidament",
},
{ "FastRew",
@@ -3225,7 +3225,7 @@ const tI18nPhrase Phrases[] = {
"Girisma piso",
"Snabbspolning bak<61>t",
"",// TODO
"",// TODO
"Vissza p<>rgetni",
"Enrera r<>pidament",
},
{ "Power",
@@ -3259,7 +3259,7 @@ const tI18nPhrase Phrases[] = {
"Kanali+",
"Kanal+",
"",// TODO
"",// TODO
"Csatorna+",
"Canal +",
},
{ "Channel-",
@@ -3276,7 +3276,7 @@ const tI18nPhrase Phrases[] = {
"Kanali-",
"Kanal-",
"",// TODO
"",// TODO
"Csatorna-",
"Canal -",
},
{ "Volume+",
@@ -3379,7 +3379,7 @@ const tI18nPhrase Phrases[] = {
"klisto",
"av",
"",// TODO
"",// TODO
"ki",
"off",
},
{ "none",
@@ -3396,7 +3396,7 @@ const tI18nPhrase Phrases[] = {
"kanena",
"ingen",
"",// TODO
"",// TODO
"semmi",
"cap",
},
{ "auto",
@@ -3413,7 +3413,7 @@ const tI18nPhrase Phrases[] = {
"aftomato",
"automatisk",
"",// TODO
"",// TODO
"auto",
"auto",
},
{ "top",
@@ -3685,7 +3685,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"Pausar direktinspelningen",
"",// TODO
"",// TODO
"Az <20>l<EFBFBD> ad<61>s meg<65>ll<6C>tva...",
"Pausa d'emissi<73> en directe...",
},
{ "This plugin has no setup parameters!",
@@ -3702,7 +3702,7 @@ const tI18nPhrase Phrases[] = {
"Afto to plugin den exi parametrous",
"Den h<>r modulen har inga parametrar",
"",// TODO
"",// TODO
"Ennek a plugin-nak nincs setup-parametere!",
"Aquest plugin no admet configuraci<63>!",
},
{ NULL }

74
menu.c
View File

@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 1.253 2003/05/30 09:53:57 kls Exp $
* $Id: menu.c 1.256 2003/06/07 12:31:57 kls Exp $
*/
#include "menu.h"
@@ -615,6 +615,7 @@ eOSState cMenuEditChannel::ProcessKey(eKeys Key)
if (channel) {
*channel = data;
isyslog("edited channel %d %s", channel->Number(), data.ToText());
Timers.Save();
state = osBack;
}
else {
@@ -834,21 +835,21 @@ private:
cTimer *timer;
cTimer data;
int channel;
bool deleteIfCancelled;
bool addIfConfirmed;
cMenuEditDateItem *firstday;
void SetFirstDayItem(void);
public:
cMenuEditTimer(int Index, bool New = false);
cMenuEditTimer(cTimer *Timer, bool New = false);
virtual ~cMenuEditTimer();
virtual eOSState ProcessKey(eKeys Key);
};
cMenuEditTimer::cMenuEditTimer(int Index, bool New)
cMenuEditTimer::cMenuEditTimer(cTimer *Timer, bool New)
:cOsdMenu(tr("Edit timer"), 12)
{
firstday = NULL;
timer = Timers.Get(Index);
deleteIfCancelled = New;
timer = Timer;
addIfConfirmed = New;
if (timer) {
data = *timer;
if (New)
@@ -869,12 +870,8 @@ cMenuEditTimer::cMenuEditTimer(int Index, bool New)
cMenuEditTimer::~cMenuEditTimer()
{
if (timer && deleteIfCancelled) {
int Index = timer->Index();
Timers.Del(timer);
Timers.Save();
isyslog("timer %d deleted", Index + 1);
}
if (timer && addIfConfirmed)
delete timer; // apparently it wasn't confirmed
Timers.DecBeingEdited();
}
@@ -908,14 +905,18 @@ eOSState cMenuEditTimer::ProcessKey(eKeys Key)
}
if (!*data.file)
strcpy(data.file, data.Channel()->Name());
if (timer && memcmp(timer, &data, sizeof(data)) != 0) {
if (timer) {
if (memcmp(timer, &data, sizeof(data)) != 0) {
*timer = data;
if (timer->active)
timer->active = 1; // allows external programs to mark active timers with values > 1 and recognize if the user has modified them
Timers.Save();
isyslog("timer %d modified (%s)", timer->Index() + 1, timer->active ? "active" : "inactive");
}
deleteIfCancelled = false;
if (addIfConfirmed)
Timers.Add(timer);
Timers.Save();
isyslog("timer %d %s (%s)", timer->Index() + 1, addIfConfirmed ? "added" : "modified", timer->active ? "active" : "inactive");
addIfConfirmed = false;
}
}
return osBack;
case kRed:
@@ -1033,19 +1034,14 @@ eOSState cMenuTimers::Edit(void)
if (HasSubMenu() || Count() == 0)
return osContinue;
isyslog("editing timer %d", CurrentTimer()->Index() + 1);
return AddSubMenu(new cMenuEditTimer(CurrentTimer()->Index()));
return AddSubMenu(new cMenuEditTimer(CurrentTimer()));
}
eOSState cMenuTimers::New(void)
{
if (HasSubMenu())
return osContinue;
cTimer *timer = new cTimer;
Timers.Add(timer);
Add(new cMenuTimerItem(timer), true);
Timers.Save();
isyslog("timer %d added", timer->Index() + 1);
return AddSubMenu(new cMenuEditTimer(timer->Index(), true));
return AddSubMenu(new cMenuEditTimer(new cTimer, true));
}
eOSState cMenuTimers::Delete(void)
@@ -1094,8 +1090,7 @@ eOSState cMenuTimers::Summary(void)
eOSState cMenuTimers::ProcessKey(eKeys Key)
{
cTimer *ti = HasSubMenu() ? CurrentTimer() : NULL;
int TimerNumber = ti ? ti->Index() : -1;
int TimerNumber = HasSubMenu() ? Count() : -1;
eOSState state = cOsdMenu::ProcessKey(Key);
if (state == osUnknown) {
@@ -1112,9 +1107,9 @@ eOSState cMenuTimers::ProcessKey(eKeys Key)
default: break;
}
}
if (TimerNumber >= 0 && !HasSubMenu() && !Timers.Get(TimerNumber)) {
// a newly created timer wasn't confirmed with Ok
cOsdMenu::Del(Current());
if (TimerNumber >= 0 && !HasSubMenu() && Timers.Get(TimerNumber)) {
// a newly created timer was confirmed with Ok
Add(new cMenuTimerItem(Timers.Get(TimerNumber)), true);
Display();
}
return state;
@@ -1274,16 +1269,11 @@ eOSState cMenuWhatsOn::Record(void)
if (item) {
cTimer *timer = new cTimer(item->eventInfo);
cTimer *t = Timers.GetTimer(timer);
if (!t) {
Timers.Add(timer);
Timers.Save();
isyslog("timer %d added", timer->Index() + 1);
}
else {
if (t) {
delete timer;
timer = t;
}
return AddSubMenu(new cMenuEditTimer(timer->Index(), !t));
return AddSubMenu(new cMenuEditTimer(timer, !t));
}
return osContinue;
}
@@ -1408,16 +1398,11 @@ eOSState cMenuSchedule::Record(void)
if (item) {
cTimer *timer = new cTimer(item->eventInfo);
cTimer *t = Timers.GetTimer(timer);
if (!t) {
Timers.Add(timer);
Timers.Save();
isyslog("timer %d added", timer->Index() + 1);
}
else {
if (t) {
delete timer;
timer = t;
}
return AddSubMenu(new cMenuEditTimer(timer->Index(), !t));
return AddSubMenu(new cMenuEditTimer(timer, !t));
}
return osContinue;
}
@@ -2124,8 +2109,9 @@ cMenuSetupCICAM::cMenuSetupCICAM(void)
for (int d = 0; d < cDevice::NumDevices(); d++) {
for (int i = 0; i < 2; i++) {
char buffer[32];
snprintf(buffer, sizeof(buffer), "%s%d %d", tr("Setup.CICAM$CICAM DVB"), d + 1, i + 1);
Add(new cMenuEditCaItem(buffer, &data.CaCaps[d][i]));
int CardIndex = cDevice::GetDevice(d)->CardIndex();
snprintf(buffer, sizeof(buffer), "%s%d %d", tr("Setup.CICAM$CICAM DVB"), CardIndex + 1, i + 1);
Add(new cMenuEditCaItem(buffer, &data.CaCaps[CardIndex][i]));
}
}
SetHelpKeys();

14
osd.c
View File

@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: osd.c 1.42 2003/05/03 14:46:38 kls Exp $
* $Id: osd.c 1.43 2003/06/04 16:13:00 kls Exp $
*/
#include "osd.h"
@@ -99,6 +99,8 @@ void cOsd::Open(int w, int h)
//XXX
osd = OpenRaw(x, y);
//XXX TODO this should be transferred to the places where the individual windows are requested (there's too much detailed knowledge here!)
if (!osd)
return;
if (h / lineHeight == 5) { //XXX channel display
osd->Create(0, 0, w, h, 4);
}
@@ -145,6 +147,7 @@ void cOsd::Clear(void)
Fill(0, 0, cols, rows, clrBackground);
refresh();
#else
if (osd)
osd->Clear();
#endif
}
@@ -161,6 +164,7 @@ void cOsd::Fill(int x, int y, int w, int h, eDvbColor color)
}
wsyncup(window); // shouldn't be necessary because of 'syncok()', but w/o it doesn't work
#else
if (osd)
osd->Fill(x * charWidth, y * lineHeight, (x + w) * charWidth - 1, (y + h) * lineHeight - 1, color);
#endif
}
@@ -168,6 +172,7 @@ void cOsd::Fill(int x, int y, int w, int h, eDvbColor color)
void cOsd::SetBitmap(int x, int y, const cBitmap &Bitmap)
{
#ifndef DEBUG_OSD
if (osd)
osd->SetBitmap(x, y, Bitmap);
#endif
}
@@ -200,7 +205,7 @@ int cOsd::Width(unsigned char c)
#ifdef DEBUG_OSD
return 1;
#else
return osd->Width(c);
return osd ? osd->Width(c) : 1;
#endif
}
@@ -209,7 +214,7 @@ int cOsd::WidthInCells(const char *s)
#ifdef DEBUG_OSD
return strlen(s);
#else
return (osd->Width(s) + charWidth - 1) / charWidth;
return osd ? (osd->Width(s) + charWidth - 1) / charWidth : strlen(s);
#endif
}
@@ -218,7 +223,7 @@ eDvbFont cOsd::SetFont(eDvbFont Font)
#ifdef DEBUG_OSD
return Font;
#else
return osd->SetFont(Font);
return osd ? osd->SetFont(Font) : Font;
#endif
}
@@ -231,6 +236,7 @@ void cOsd::Text(int x, int y, const char *s, eDvbColor colorFg, eDvbColor colorB
wmove(window, y, x); // ncurses wants 'y' before 'x'!
waddnstr(window, s, cols - x);
#else
if (osd)
osd->Text(x * charWidth, y * lineHeight, s, colorFg, colorBg);
#endif
}

View File

@@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
* $Id: svdrp.c 1.51 2003/04/27 14:21:07 kls Exp $
* $Id: svdrp.c 1.52 2003/06/06 13:30:52 kls Exp $
*/
#include "svdrp.h"
@@ -790,6 +790,7 @@ void cSVDRP::CmdMODC(const char *Option)
Channels.ReNumber();
Channels.Save();
isyslog("modifed channel %d %s", channel->Number(), channel->ToText());
Timers.Save();
Reply(250, "%d %s", channel->Number(), channel->ToText());
}
else