summaryrefslogtreecommitdiff
path: root/obsolete-patch/vdrtva-1.6.0-2.diff
diff options
context:
space:
mode:
Diffstat (limited to 'obsolete-patch/vdrtva-1.6.0-2.diff')
-rw-r--r--obsolete-patch/vdrtva-1.6.0-2.diff534
1 files changed, 0 insertions, 534 deletions
diff --git a/obsolete-patch/vdrtva-1.6.0-2.diff b/obsolete-patch/vdrtva-1.6.0-2.diff
deleted file mode 100644
index a8032f4..0000000
--- a/obsolete-patch/vdrtva-1.6.0-2.diff
+++ /dev/null
@@ -1,534 +0,0 @@
-diff -ur vdr-1.6.0/channels.c vdr-1.5/channels.c
---- vdr-1.6.0/channels.c 2008-03-05 16:42:50.000000000 +0000
-+++ vdr-1.5/channels.c 2008-03-16 12:55:17.000000000 +0000
-@@ -166,6 +166,7 @@
- shortName = strdup("");
- provider = strdup("");
- portalName = strdup("");
-+ defaultAuthority = strdup("");
- memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
- inversion = INVERSION_AUTO;
- bandwidth = BANDWIDTH_AUTO;
-@@ -187,6 +188,7 @@
- shortName = NULL;
- provider = NULL;
- portalName = NULL;
-+ defaultAuthority = NULL;
- schedule = NULL;
- linkChannels = NULL;
- refChannel = NULL;
-@@ -215,6 +217,7 @@
- free(shortName);
- free(provider);
- free(portalName);
-+ free(defaultAuthority);
- }
-
- 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);
-+ defaultAuthority = strcpyrealloc(defaultAuthority, Channel.defaultAuthority);
- memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
- return *this;
- }
-@@ -407,6 +411,13 @@
- }
- }
-
-+void cChannel::SetDefaultAuthority(const char *DefaultAuthority)
-+{
-+ if (!isempty(DefaultAuthority) && strcmp(defaultAuthority, DefaultAuthority) != 0) {
-+ defaultAuthority = strcpyrealloc(defaultAuthority, DefaultAuthority);
-+ }
-+}
-+
- #define STRDIFF 0x01
- #define VALDIFF 0x02
-
-@@ -681,11 +692,11 @@
- q += IntArrayToString(q, Channel->dpids, 10, Channel->dlangs);
- }
- *q = 0;
-- char caidbuf[MAXCAIDS * 5 + 10]; // 5: 4 digits plus delimiting ',', 10: paranoia
-+ char caidbuf[MAXCAIDS * 5 + 10 + 256]; // 5: 4 digits plus delimiting ',', 10 + max DNS domain length: paranoia
- q = caidbuf;
- q += IntArrayToString(q, Channel->caids, 16);
- *q = 0;
-- buffer = cString::sprintf("%s:%d:%s:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d\n", FullName, Channel->frequency, *Channel->ParametersToString(), *cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, Channel->tpid, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid);
-+ buffer = cString::sprintf("%s:%d:%s:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d:%s\n", FullName, Channel->frequency, *Channel->ParametersToString(), *cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, Channel->tpid, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid, Channel->defaultAuthority);
- }
- return buffer;
- }
-@@ -720,13 +731,16 @@
- char *vpidbuf = NULL;
- char *apidbuf = NULL;
- char *caidbuf = NULL;
-- int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%a[^:]:%a[^:]:%d :%a[^:]:%d :%d :%d :%d ", &namebuf, &frequency, &parambuf, &sourcebuf, &srate, &vpidbuf, &apidbuf, &tpid, &caidbuf, &sid, &nid, &tid, &rid);
-+ char *dabuf = NULL;
-+ int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%a[^:]:%a[^:]:%d :%a[^:]:%d :%d :%d :%d :%a[^:]", &namebuf, &frequency, &parambuf, &sourcebuf, &srate, &vpidbuf, &apidbuf, &tpid, &caidbuf, &sid, &nid, &tid, &rid, &dabuf);
- if (fields >= 9) {
- if (fields == 9) {
- // allow reading of old format
- sid = atoi(caidbuf);
- delete caidbuf;
- caidbuf = NULL;
-+ delete dabuf;
-+ dabuf = NULL;
- caids[0] = tpid;
- caids[1] = 0;
- tpid = 0;
-@@ -828,12 +842,17 @@
- }
- name = strcpyrealloc(name, namebuf);
-
-+ if (dabuf) {
-+ defaultAuthority = strcpyrealloc(defaultAuthority, dabuf);
-+ }
-+
- free(parambuf);
- free(sourcebuf);
- free(vpidbuf);
- free(apidbuf);
- free(caidbuf);
- free(namebuf);
-+ free(dabuf);
- if (!GetChannelID().Valid()) {
- esyslog("ERROR: channel data results in invalid ID!");
- return false;
-diff -ur vdr-1.6.0/channels.h vdr-1.5/channels.h
---- vdr-1.6.0/channels.h 2008-02-08 13:48:31.000000000 +0000
-+++ vdr-1.5/channels.h 2008-02-17 15:13:46.000000000 +0000
-@@ -114,6 +114,7 @@
- char *shortName;
- char *provider;
- char *portalName;
-+ char *defaultAuthority;
- int __BeginData__;
- int frequency; // MHz
- int source;
-@@ -162,6 +163,7 @@
- const char *ShortName(bool OrName = false) const { return (OrName && isempty(shortName)) ? name : shortName; }
- const char *Provider(void) const { return provider; }
- const char *PortalName(void) const { return portalName; }
-+ const char *DefaultAuthority(void) const { return defaultAuthority; }
- 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
-@@ -212,6 +214,7 @@
- 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 SetDefaultAuthority(const char *DefaultAuthority);
- void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
- void SetCaIds(const int *CaIds); // list must be zero-terminated
- void SetCaDescriptors(int Level);
-diff -ur vdr-1.6.0/config.c vdr-1.5/config.c
---- vdr-1.6.0/config.c 2008-02-17 13:39:00.000000000 +0000
-+++ vdr-1.5/config.c 2009-12-31 15:11:46.000000000 +0000
-@@ -255,6 +255,7 @@
- UseSubtitle = 1;
- UseVps = 0;
- VpsMargin = 120;
-+ VpsFallback = 0;
- RecordingDirs = 1;
- VideoDisplayFormat = 1;
- VideoFormat = 0;
-@@ -428,6 +429,7 @@
- else if (!strcasecmp(Name, "UseSubtitle")) UseSubtitle = atoi(Value);
- else if (!strcasecmp(Name, "UseVps")) UseVps = atoi(Value);
- else if (!strcasecmp(Name, "VpsMargin")) VpsMargin = atoi(Value);
-+ else if (!strcasecmp(Name, "VpsFallback")) VpsFallback = atoi(Value);
- else if (!strcasecmp(Name, "RecordingDirs")) RecordingDirs = atoi(Value);
- else if (!strcasecmp(Name, "VideoDisplayFormat")) VideoDisplayFormat = atoi(Value);
- else if (!strcasecmp(Name, "VideoFormat")) VideoFormat = atoi(Value);
-@@ -511,6 +513,7 @@
- Store("UseSubtitle", UseSubtitle);
- Store("UseVps", UseVps);
- Store("VpsMargin", VpsMargin);
-+ Store("VpsFallback", VpsFallback);
- Store("RecordingDirs", RecordingDirs);
- Store("VideoDisplayFormat", VideoDisplayFormat);
- Store("VideoFormat", VideoFormat);
-diff -ur vdr-1.6.0/config.h vdr-1.5/config.h
---- vdr-1.6.0/config.h 2010-01-03 19:44:47.000000000 +0000
-+++ vdr-1.5/config.h 2009-12-31 15:09:37.000000000 +0000
-@@ -237,6 +237,7 @@
- int UseSubtitle;
- int UseVps;
- int VpsMargin;
-+ int VpsFallback;
- int RecordingDirs;
- int VideoDisplayFormat;
- int VideoFormat;
-diff -ur vdr-1.6.0/dvbdevice.h vdr-1.5/dvbdevice.h
---- vdr-1.6.0/dvbdevice.h 2008-02-08 13:48:31.000000000 +0000
-+++ vdr-1.5/dvbdevice.h 2009-05-31 16:28:58.000000000 +0100
-@@ -15,8 +15,8 @@
- #include "device.h"
- #include "dvbspu.h"
-
--#if DVB_API_VERSION != 3
--#error VDR requires Linux DVB driver API version 3!
-+#if (DVB_API_VERSION != 3) && (DVB_API_VERSION != 5)
-+#error VDR requires Linux DVB driver API version 3 or 5!
- #endif
-
- #define MAXDVBDEVICES 8
-diff -ur vdr-1.6.0/eit.c vdr-1.5/eit.c
---- vdr-1.6.0/eit.c 2010-01-03 19:44:41.000000000 +0000
-+++ vdr-1.5/eit.c 2008-10-14 20:10:48.000000000 +0100
-@@ -110,6 +110,8 @@
- SI::Descriptor *d;
- SI::ExtendedEventDescriptors *ExtendedEventDescriptors = NULL;
- SI::ShortEventDescriptor *ShortEventDescriptor = NULL;
-+ SI::ContentIdentifierDescriptor *itemCrid = NULL;
-+ SI::ContentIdentifierDescriptor *seriesCrid = NULL;
- cLinkChannels *LinkChannels = NULL;
- cComponents *Components = NULL;
- for (SI::Loop::Iterator it2; (d = SiEitEvent.eventDescriptors.getNext(it2)); ) {
-@@ -227,6 +229,23 @@
- }
- }
- break;
-+ case SI::ContentIdentifierDescriptorTag: {
-+ SI::ContentIdentifierDescriptor *cd = (SI::ContentIdentifierDescriptor *)d;
-+ switch (cd->getCridType()) {
-+ case 0x01:
-+ case 0x31: {
-+ itemCrid = cd;
-+ d = NULL; // so that it is not deleted
-+ break;
-+ }
-+ case 0x02:
-+ case 0x32: {
-+ seriesCrid = cd;
-+ d = NULL; // so that it is not deleted
-+ break;
-+ }
-+ }
-+ }
- default: ;
- }
- delete d;
-@@ -248,9 +267,27 @@
- }
- else if (!HasExternalData)
- pEvent->SetDescription(NULL);
-+ if (itemCrid && (itemCrid->getCridLocation() == 0)) {
-+ char buffer[Utf8BufSize(256)];
-+ char buff2[Utf8BufSize(256)];
-+ strcpy (buffer, channel->DefaultAuthority());
-+ itemCrid->entry.getText(buff2, sizeof(buff2));
-+ strcat(buffer, buff2);
-+ pEvent->SetItemCRID(buffer);
- }
-+ if (seriesCrid && (seriesCrid->getCridLocation() == 0)) {
-+ char buffer[Utf8BufSize(256)];
-+ char buff2[Utf8BufSize(256)];
-+ strcpy (buffer, channel->DefaultAuthority());
-+ seriesCrid->entry.getText(buff2, sizeof(buff2));
-+ strcat(buffer, buff2);
-+ pEvent->SetSeriesCRID(buffer);
-+ }
-+ }
- delete ExtendedEventDescriptors;
- delete ShortEventDescriptor;
-+ delete itemCrid;
-+ delete seriesCrid;
-
- pEvent->SetComponents(Components);
-
-diff -ur vdr-1.6.0/epg.c vdr-1.5/epg.c
---- vdr-1.6.0/epg.c 2008-02-16 16:09:12.000000000 +0000
-+++ vdr-1.5/epg.c 2008-02-23 12:28:13.000000000 +0000
-@@ -113,6 +113,8 @@
- startTime = 0;
- duration = 0;
- vps = 0;
-+ itemCRID = NULL;
-+ seriesCRID = NULL;
- SetSeen();
- }
-
-@@ -121,6 +123,8 @@
- free(title);
- free(shortText);
- free(description);
-+ free(itemCRID);
-+ free(seriesCRID);
- delete components;
- }
-
-@@ -205,6 +209,16 @@
- vps = Vps;
- }
-
-+void cEvent::SetItemCRID(const char *CRID)
-+{
-+ itemCRID = strcpyrealloc(itemCRID, CRID);
-+}
-+
-+void cEvent::SetSeriesCRID(const char *CRID)
-+{
-+ seriesCRID = strcpyrealloc(seriesCRID, CRID);
-+}
-+
- void cEvent::SetSeen(void)
- {
- seen = time(NULL);
-@@ -278,6 +292,10 @@
- }
- if (vps)
- fprintf(f, "%sV %ld\n", Prefix, vps);
-+ if (!isempty(itemCRID))
-+ fprintf(f, "%sI %s\n", Prefix, itemCRID);
-+ if (!isempty(seriesCRID))
-+ fprintf(f, "%sR %s\n", Prefix, seriesCRID);
- if (!InfoOnly)
- fprintf(f, "%se\n", Prefix);
- }
-@@ -300,6 +318,10 @@
- break;
- case 'V': SetVps(atoi(t));
- break;
-+ case 'I': SetItemCRID(t);
-+ break;
-+ case 'R': SetSeriesCRID(t);
-+ break;
- default: esyslog("ERROR: unexpected tag while reading EPG data: %s", s);
- return false;
- }
-diff -ur vdr-1.6.0/epg.h vdr-1.5/epg.h
---- vdr-1.6.0/epg.h 2006-10-07 14:47:19.000000000 +0100
-+++ vdr-1.5/epg.h 2008-02-17 15:13:46.000000000 +0000
-@@ -66,6 +66,8 @@
- int duration; // Duration of this event in seconds
- time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL)
- time_t seen; // When this event was last seen in the data stream
-+ char *itemCRID; // Item CRID
-+ char *seriesCRID; // Series CRID
- public:
- cEvent(tEventID EventID);
- ~cEvent();
-@@ -84,6 +86,8 @@
- time_t EndTime(void) const { return startTime + duration; }
- int Duration(void) const { return duration; }
- time_t Vps(void) const { return vps; }
-+ const char *ItemCRID(void) const { return itemCRID; }
-+ const char *SeriesCRID(void) const { return seriesCRID; }
- time_t Seen(void) const { return seen; }
- bool SeenWithin(int Seconds) const { return time(NULL) - seen < Seconds; }
- bool HasTimer(void) const;
-@@ -103,6 +107,8 @@
- void SetStartTime(time_t StartTime);
- void SetDuration(int Duration);
- void SetVps(time_t Vps);
-+ void SetItemCRID(const char *CRID);
-+ void SetSeriesCRID(const char *CRID);
- void SetSeen(void);
- cString ToDescr(void) const;
- void Dump(FILE *f, const char *Prefix = "", bool InfoOnly = false) const;
-diff -ur vdr-1.6.0/libsi/descriptor.c vdr-1.5/libsi/descriptor.c
---- vdr-1.6.0/libsi/descriptor.c 2007-02-03 11:45:58.000000000 +0000
-+++ vdr-1.5/libsi/descriptor.c 2008-02-17 15:13:46.000000000 +0000
-@@ -643,6 +643,29 @@
- textualServiceIdentifier.setData(data+sizeof(descr_service_identifier), getLength()-sizeof(descr_service_identifier));
- }
-
-+void ContentIdentifierDescriptor::Parse() {
-+ int offset=0;
-+ data.setPointerAndOffset<const descr_content_identifier>(s, offset);
-+ if (s->crid_location == 0) {
-+ entry.setData(data+(offset-1), s->crid_length);
-+ }
-+ else {
-+ entry.setData(data+(offset-1), 2);
-+ }
-+}
-+
-+int ContentIdentifierDescriptor::getCridType() const {
-+ return s->crid_type;
-+}
-+
-+int ContentIdentifierDescriptor::getCridLocation() const {
-+ return s->crid_location;
-+}
-+
-+void DefaultAuthorityDescriptor::Parse() {
-+ DefaultAuthority.setData(data+sizeof(descr_default_authority), getLength()-sizeof(descr_default_authority));
-+}
-+
- void MultilingualNameDescriptor::Parse() {
- nameLoop.setData(data+sizeof(descr_multilingual_network_name), getLength()-sizeof(descr_multilingual_network_name));
- }
-diff -ur vdr-1.6.0/libsi/descriptor.h vdr-1.5/libsi/descriptor.h
---- vdr-1.6.0/libsi/descriptor.h 2007-02-03 11:45:58.000000000 +0000
-+++ vdr-1.5/libsi/descriptor.h 2008-02-17 15:13:46.000000000 +0000
-@@ -361,6 +361,25 @@
- virtual void Parse();
- };
-
-+class ContentIdentifierDescriptor : public Descriptor {
-+public:
-+ String entry;
-+ int getCridType() const;
-+ int getCridLocation() const;
-+// virtual int getLength() { return sizeof(descr_content_identifier)+entry.getLength(); }
-+ private:
-+ const descr_content_identifier *s;
-+protected:
-+ virtual void Parse();
-+};
-+
-+class DefaultAuthorityDescriptor : public Descriptor {
-+public:
-+ String DefaultAuthority; //ID
-+protected:
-+ virtual void Parse();
-+};
-+
- //abstract base class
- class MultilingualNameDescriptor : public Descriptor {
- public:
-diff -ur vdr-1.6.0/libsi/headers.h vdr-1.5/libsi/headers.h
---- vdr-1.6.0/libsi/headers.h 2007-02-03 11:45:58.000000000 +0000
-+++ vdr-1.5/libsi/headers.h 2008-02-17 15:13:46.000000000 +0000
-@@ -1673,11 +1673,39 @@
- u_char descriptor_length :8;
- };
-
-+struct entry_tva_id {
-+ u_char tva_id_hi :8;
-+ u_char tva_id_lo :8;
-+#if BYTE_ORDER == BIG_ENDIAN
-+ u_char reserved :5;
-+ u_char running_status :3;
-+#else
-+ u_char running_status :3;
-+ u_char reserved :5;
-+#endif
-+};
-+
-+
- /* 0x76 content_identifier_descriptor (ETSI TS 102 323) */
-
- struct descr_content_identifier {
- u_char descriptor_tag :8;
- u_char descriptor_length :8;
-+#if BYTE_ORDER == BIG_ENDIAN
-+ u_char crid_type :6;
-+ u_char crid_location :2;
-+#else
-+ u_char crid_location :2;
-+ u_char crid_type :6;
-+#endif
-+ union {
-+ u_char crid_length :8;
-+ u_char crid_ref_hi :8;
-+ };
-+ union {
-+ u_char crid_byte :8;
-+ u_char crid_ref_lo :8;
-+ };
- };
-
- /* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */
-diff -ur vdr-1.6.0/libsi/si.c vdr-1.5/libsi/si.c
---- vdr-1.6.0/libsi/si.c 2008-03-05 17:00:55.000000000 +0000
-+++ vdr-1.5/libsi/si.c 2008-03-16 12:55:17.000000000 +0000
-@@ -605,6 +605,12 @@
- case ExtensionDescriptorTag:
- d=new ExtensionDescriptor();
- break;
-+ case ContentIdentifierDescriptorTag:
-+ d=new ContentIdentifierDescriptor();
-+ break;
-+ case DefaultAuthorityDescriptorTag:
-+ d=new DefaultAuthorityDescriptor();
-+ break;
-
- //note that it is no problem to implement one
- //of the unimplemented descriptors.
-@@ -647,10 +653,8 @@
- case TransportStreamDescriptorTag:
-
- //defined in ETSI EN 300 468 v 1.7.1
-- case DefaultAuthorityDescriptorTag:
- case RelatedContentDescriptorTag:
- case TVAIdDescriptorTag:
-- case ContentIdentifierDescriptorTag:
- case TimeSliceFecIdentifierDescriptorTag:
- case ECMRepetitionRateDescriptorTag:
- case EnhancedAC3DescriptorTag:
-diff -ur vdr-1.6.0/menu.c vdr-1.5/menu.c
---- vdr-1.6.0/menu.c 2008-03-16 11:15:28.000000000 +0000
-+++ vdr-1.5/menu.c 2009-12-31 15:14:34.000000000 +0000
-@@ -2753,6 +2753,7 @@
- Add(new cMenuEditBoolItem(tr("Setup.Recording$Use episode name"), &data.UseSubtitle));
- Add(new cMenuEditBoolItem(tr("Setup.Recording$Use VPS"), &data.UseVps));
- Add(new cMenuEditIntItem( tr("Setup.Recording$VPS margin (s)"), &data.VpsMargin, 0));
-+ Add(new cMenuEditBoolItem(tr("Setup.Recording$Use running status as VPS fallback"), &data.VpsFallback));
- Add(new cMenuEditBoolItem(tr("Setup.Recording$Mark instant recording"), &data.MarkInstantRecord));
- Add(new cMenuEditStrItem( tr("Setup.Recording$Name instant recording"), data.NameInstantRecord, sizeof(data.NameInstantRecord)));
- Add(new cMenuEditIntItem( tr("Setup.Recording$Instant rec. time (min)"), &data.InstantRecordTime, 1, MAXINSTANTRECTIME));
-diff -ur vdr-1.6.0/sdt.c vdr-1.5/sdt.c
---- vdr-1.6.0/sdt.c 2008-02-08 13:48:31.000000000 +0000
-+++ vdr-1.5/sdt.c 2008-02-17 15:13:46.000000000 +0000
-@@ -123,6 +123,12 @@
- }
- }
- break;
-+ case SI::DefaultAuthorityDescriptorTag: {
-+ SI::DefaultAuthorityDescriptor *da = (SI::DefaultAuthorityDescriptor *)d;
-+ char DaBuf[Utf8BufSize(1024)];
-+ da->DefaultAuthority.getText(DaBuf, sizeof(DaBuf));
-+ channel->SetDefaultAuthority(DaBuf);
-+ }
- default: ;
- }
- delete d;
-diff -ur vdr-1.6.0/timers.c vdr-1.5/timers.c
---- vdr-1.6.0/timers.c 2010-01-03 19:44:41.000000000 +0000
-+++ vdr-1.5/timers.c 2009-12-31 15:16:18.000000000 +0000
-@@ -413,7 +413,7 @@
- }
-
- if (HasFlags(tfActive)) {
-- if (HasFlags(tfVps) && event && event->Vps()) {
-+ if (HasFlags(tfVps) && event && (Setup.VpsFallback || event->Vps())) {
- if (Margin || !Directly) {
- startTime = event->StartTime();
- stopTime = event->EndTime();
-diff -ur vdr-1.6.0/vdr.5 vdr-1.5/vdr.5
---- vdr-1.6.0/vdr.5 2008-03-09 15:46:57.000000000 +0000
-+++ vdr-1.5/vdr.5 2008-03-16 12:55:17.000000000 +0000
-@@ -177,6 +177,9 @@
- .B RID
- The Radio ID of this channel (typically 0, may be used to distinguish channels where
- NID, TID and SID are all equal).
-+.TP
-+.B Default Authority
-+The Default Authority for CRIDs on this channel (TVAnytime).
- .PP
- A particular channel can be uniquely identified by its \fBchannel\ ID\fR,
- which is a string that looks like this:
-@@ -620,6 +623,8 @@
- \fBD\fR@<description>
- \fBX\fR@<stream> <type> <language> <descr>
- \fBV\fR@<vps time>
-+\fBI\fR@<item CRID>
-+\fBR\fR@<series CRID>
- \fBe\fR@
- \fBc\fR@
- .TE
-@@ -653,6 +658,8 @@
- <language> @is the three letter language code (optionally two codes, separated by '+')
- <descr> @is the description of this stream component
- <vps time> @is the Video Programming Service time of this event
-+<item CRID> @is the CRID of this event (TVAnytime)
-+<series CRID> @is the CRID of the series which this event is part of (TVAnytime)
- .TE
-
- This file will be read at program startup in order to restore the results of