Sophie

Sophie

distrib > Mandriva > 2007.1 > x86_64 > by-pkgid > fdddaca718fdaac56c6bff726f3554dd > files > 19

vdr-1.4.7-9mdv2007.1.src.rpm

diff -Nru vdr-1.4.7-vanilla/channels.c vdr-1.4.7-pluginparam/channels.c
--- vdr-1.4.7-vanilla/channels.c	2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/channels.c	2007-10-27 01:09:05.000000000 +0300
@@ -166,6 +166,7 @@
   shortName = strdup("");
   provider = strdup("");
   portalName = strdup("");
+  pluginParam = strdup("");
   memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
   inversion    = INVERSION_AUTO;
   bandwidth    = BANDWIDTH_AUTO;
@@ -187,6 +188,7 @@
   shortName = NULL;
   provider = NULL;
   portalName = NULL;
+  pluginParam = NULL;
   schedule     = NULL;
   linkChannels = NULL;
   refChannel   = NULL;
@@ -215,6 +217,7 @@
   free(shortName);
   free(provider);
   free(portalName);
+  free(pluginParam);
 }
 
 cChannel& cChannel::operator= (const cChannel &Channel)
@@ -223,6 +226,7 @@
   shortName = strcpyrealloc(shortName, Channel.shortName);
   provider = strcpyrealloc(provider, Channel.provider);
   portalName = strcpyrealloc(portalName, Channel.portalName);
+  pluginParam = strcpyrealloc(pluginParam, Channel.pluginParam);
   memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
   return *this;
 }
@@ -280,9 +284,26 @@
      transmission = Channel->transmission;
      guard        = Channel->guard;
      hierarchy    = Channel->hierarchy;
+     if (IsPlug())  pluginParam = strcpyrealloc(pluginParam, Channel->pluginParam);
      }
 }
 
+bool cChannel::SetPlugTransponderData(int Source, int Frequency, const char *PluginParam)
+{
+  if (source != Source || frequency != Frequency || (strcmp(pluginParam, PluginParam) != 0)) {
+       if (Number()) {
+          dsyslog("changing transponder data of channel %d from %s:%d:%s to %s:%d:%s", Number(), *cSource::ToString(source), frequency, pluginParam, *cSource::ToString(Source), Frequency, PluginParam);
+          modification |= CHANNELMOD_TRANSP;
+          Channels.SetModified();
+          }
+       source = Source;
+       frequency = Frequency;
+       pluginParam = strcpyrealloc(pluginParam, PluginParam);
+       schedule = NULL;
+       }
+    return true;
+}
+
 bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH)
 {
   // Workarounds for broadcaster stupidity:
@@ -407,6 +428,18 @@
      }
 }
 
+void cChannel::SetPluginParam(const char *PluginParam)
+{
+  if (!isempty(PluginParam) && strcmp(pluginParam, PluginParam) != 0) {
+     if (Number()) {
+        dsyslog("changing plugin parameters of channel %d from '%s' to '%s'", Number(), pluginParam, PluginParam);
+        modification |= CHANNELMOD_TRANSP;
+        Channels.SetModified();
+        }
+     pluginParam = strcpyrealloc(pluginParam, PluginParam);
+     }
+}
+
 #define STRDIFF 0x01
 #define VALDIFF 0x02
 
@@ -579,7 +612,7 @@
   if (isdigit(type))
      type = 'S';
 #define ST(s) if (strchr(s, type))
-  char buffer[64];
+  char buffer[256];
   char *q = buffer;
   *q = 0;
   ST(" S ")  q += sprintf(q, "%c", polarization);
@@ -591,6 +624,7 @@
   ST("  T")  q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
   ST("  T")  q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
   ST("  T")  q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
+  ST("P  ")  snprintf(buffer, sizeof(buffer), "%s", pluginParam);
   return buffer;
 }
 
@@ -612,7 +646,7 @@
 
 bool cChannel::StringToParameters(const char *s)
 {
-  while (s && *s) {
+  while (s && *s && !IsPlug()) {
         switch (toupper(*s)) {
           case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break;
           case 'C': s = ParseParameter(s, coderateH, CoderateValues); break;
@@ -722,7 +756,7 @@
         dpids[0] = 0;
         ok = false;
         if (parambuf && sourcebuf && vpidbuf && apidbuf) {
-           ok = StringToParameters(parambuf) && (source = cSource::FromString(sourcebuf)) >= 0;
+           ok = ((source = cSource::FromString(sourcebuf)) >= 0) && StringToParameters(parambuf);
 
            char *p = strchr(vpidbuf, '+');
            if (p)
@@ -813,6 +847,7 @@
            shortName = strcpyrealloc(shortName, p);
            }
         name = strcpyrealloc(name, namebuf);
+        if (IsPlug()) pluginParam = strcpyrealloc(pluginParam, parambuf);
 
         free(parambuf);
         free(sourcebuf);
diff -Nru vdr-1.4.7-vanilla/channels.h vdr-1.4.7-pluginparam/channels.h
--- vdr-1.4.7-vanilla/channels.h	2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/channels.h	2007-10-27 01:12:37.000000000 +0300
@@ -114,6 +114,7 @@
   char *shortName;
   char *provider;
   char *portalName;
+  char *pluginParam;
   int __BeginData__;
   int frequency; // MHz
   int source;
@@ -165,6 +166,7 @@
   int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
   int Transponder(void) const;                    ///< Returns the transponder frequency in MHz, plus the polarization in case of sat
   static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization
+  const char *PluginParam(void) const { return pluginParam; }
   int Source(void) const { return source; }
   int Srate(void) const { return srate; }
   int Vpid(void) const { return vpid; }
@@ -198,6 +200,7 @@
   int Hierarchy(void) const { return hierarchy; }
   const cLinkChannels* LinkChannels(void) const { return linkChannels; }
   const cChannel *RefChannel(void) const { return refChannel; }
+  bool IsPlug(void) const { return cSource::IsPlug(source); }
   bool IsCable(void) const { return cSource::IsCable(source); }
   bool IsSat(void) const { return cSource::IsSat(source); }
   bool IsTerr(void) const { return cSource::IsTerr(source); }
@@ -205,12 +208,14 @@
   bool HasTimer(void) const;
   int Modification(int Mask = CHANNELMOD_ALL);
   void CopyTransponderData(const cChannel *Channel);
+  bool SetPlugTransponderData(int Source, int Frequency, const char *PluginParam);
   bool SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH);
   bool SetCableTransponderData(int Source, int Frequency, int Modulation, int Srate, int CoderateH);
   bool SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CodeRateH, int CodeRateL, int Guard, int Transmission);
   void SetId(int Nid, int Tid, int Sid, int Rid = 0);
   void SetName(const char *Name, const char *ShortName, const char *Provider);
   void SetPortalName(const char *PortalName);
+  void SetPluginParam(const char *PluginParam);
   void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int Tpid);
   void SetCaIds(const int *CaIds); // list must be zero-terminated
   void SetCaDescriptors(int Level);
diff -Nru vdr-1.4.7-vanilla/config.h vdr-1.4.7-pluginparam/config.h
--- vdr-1.4.7-vanilla/config.h	2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/config.h	2007-10-27 01:14:39.000000000 +0300
@@ -29,6 +29,8 @@
 #define APIVERSION  "1.4.5"
 #define APIVERSNUM   10405  // Version * 10000 + Major * 100 + Minor
 
+#define PLUGINPARAMPATCHVERSNUM 1
+
 // When loading plugins, VDR searches them by their APIVERSION, which
 // may be smaller than VDRVERSION in case there have been no changes to
 // VDR header files since the last APIVERSION. This allows compiled
diff -Nru vdr-1.4.7-vanilla/i18n.c vdr-1.4.7-pluginparam/i18n.c
--- vdr-1.4.7-vanilla/i18n.c	2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/i18n.c	2007-10-27 01:11:38.000000000 +0300
@@ -6126,6 +6126,28 @@
     "Ingen titel",
     "Bez názvu",
   },
+  { "Parameters",
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "Parametrit",
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+    "",// TODO
+  },
   { NULL }
   };
 
diff -Nru vdr-1.4.7-vanilla/menu.c vdr-1.4.7-pluginparam/menu.c
--- vdr-1.4.7-vanilla/menu.c	2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/menu.c	2007-10-27 01:09:05.000000000 +0300
@@ -216,6 +216,7 @@
   cChannel *channel;
   cChannel data;
   char name[256];
+  char pluginParam[256];
   void Setup(void);
 public:
   cMenuEditChannel(cChannel *Channel, bool New = false);
@@ -248,6 +249,7 @@
 
   // Parameters for all types of sources:
   strn0cpy(name, data.name, sizeof(name));
+  strn0cpy(pluginParam, data.pluginParam, sizeof(pluginParam));
   Add(new cMenuEditStrItem( tr("Name"),          name, sizeof(name), tr(FileNameChars)));
   Add(new cMenuEditSrcItem( tr("Source"),       &data.source));
   Add(new cMenuEditIntItem( tr("Frequency"),    &data.frequency));
@@ -276,6 +278,7 @@
   ST("  T")  Add(new cMenuEditMapItem( tr("Transmission"), &data.transmission, TransmissionValues));
   ST("  T")  Add(new cMenuEditMapItem( tr("Guard"),        &data.guard,        GuardValues));
   ST("  T")  Add(new cMenuEditMapItem( tr("Hierarchy"),    &data.hierarchy,    HierarchyValues, tr("none")));
+  ST("P  ")  Add(new cMenuEditStrItem( tr("Parameters"),    pluginParam, sizeof(pluginParam), tr(FileNameChars)));
 
   SetCurrent(Get(current));
   Display();
@@ -290,6 +293,7 @@
      if (Key == kOk) {
         if (Channels.HasUniqueChannelID(&data, channel)) {
            data.name = strcpyrealloc(data.name, name);
+           data.pluginParam = strcpyrealloc(data.pluginParam, pluginParam);
            if (channel) {
               *channel = data;
               isyslog("edited channel %d %s", channel->Number(), *data.ToText());
diff -Nru vdr-1.4.7-vanilla/sources.c vdr-1.4.7-pluginparam/sources.c
--- vdr-1.4.7-vanilla/sources.c	2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/sources.c	2007-10-27 01:09:20.000000000 +0300
@@ -37,6 +37,7 @@
   char buffer[16];
   char *q = buffer;
   switch (Code & st_Mask) {
+    case stPlug:  *q++ = 'P'; break;
     case stCable: *q++ = 'C'; break;
     case stSat:   *q++ = 'S';
                   {
@@ -56,6 +57,7 @@
 {
   int type = stNone;
   switch (toupper(*s)) {
+    case 'P': type = stPlug;  break;
     case 'C': type = stCable; break;
     case 'S': type = stSat;   break;
     case 'T': type = stTerr;  break;
diff -Nru vdr-1.4.7-vanilla/sources.conf vdr-1.4.7-pluginparam/sources.conf
--- vdr-1.4.7-vanilla/sources.conf	2007-10-27 01:08:39.000000000 +0300
+++ vdr-1.4.7-pluginparam/sources.conf	2007-10-27 01:09:20.000000000 +0300
@@ -188,3 +188,7 @@
 # Terrestrial
 
 T       Terrestrial
+
+# Plugin
+
+P       Plugin
diff -Nru vdr-1.4.7-vanilla/sources.h vdr-1.4.7-pluginparam/sources.h
--- vdr-1.4.7-vanilla/sources.h	2007-10-27 01:08:40.000000000 +0300
+++ vdr-1.4.7-pluginparam/sources.h	2007-10-27 01:09:20.000000000 +0300
@@ -16,10 +16,11 @@
 public:
   enum eSourceType {
     stNone  = 0x0000,
+    stPlug  = 0x2000,
     stCable = 0x4000,
     stSat   = 0x8000,
     stTerr  = 0xC000,
-    st_Mask = 0xC000,
+    st_Mask = 0xE000,
     st_Neg  = 0x0800,
     st_Pos  = 0x07FF,
     };
@@ -35,6 +36,7 @@
   static cString ToString(int Code);
   static int FromString(const char *s);
   static int FromData(eSourceType SourceType, int Position = 0, bool East = false);
+  static bool IsPlug(int Code) { return (Code & st_Mask) == stPlug; }
   static bool IsCable(int Code) { return (Code & st_Mask) == stCable; }
   static bool IsSat(int Code) { return (Code & st_Mask) == stSat; }
   static bool IsTerr(int Code) { return (Code & st_Mask) == stTerr; }