vdr  2.7.6
config.c
Go to the documentation of this file.
1 /*
2  * config.c: Configuration file handling
3  *
4  * See the main source file 'vdr.c' for copyright information and
5  * how to reach the author.
6  *
7  * $Id: config.c 5.2 2025/03/28 22:49:17 kls Exp $
8  */
9 
10 #include "config.h"
11 #include <ctype.h>
12 #include <stdlib.h>
13 #include "device.h"
14 #include "i18n.h"
15 #include "interface.h"
16 #include "menu.h"
17 #include "plugin.h"
18 #include "recording.h"
19 
20 // IMPORTANT NOTE: in the 'sscanf()' calls there is a blank after the '%d'
21 // format characters in order to allow any number of blanks after a numeric
22 // value!
23 
24 #define ChkDoublePlausibility(Variable, Default) { if (Variable < 0.00001) Variable = Default; }
25 
26 // --- cSVDRPhost ------------------------------------------------------------
27 
29 {
30  addr.s_addr = 0;
31  mask = 0;
32 }
33 
34 bool cSVDRPhost::Parse(const char *s)
35 {
36  mask = 0xFFFFFFFF;
37  const char *p = strchr(s, '/');
38  if (p) {
39  char *error = NULL;
40  int m = strtoul(p + 1, &error, 10);
41  if (error && *error && !isspace(*error) || m > 32)
42  return false;
43  *(char *)p = 0; // yes, we know it's 'const' - will be restored!
44  if (m == 0)
45  mask = 0;
46  else {
47  mask <<= (32 - m);
48  mask = htonl(mask);
49  }
50  }
51  int result = inet_aton(s, &addr);
52  if (p)
53  *(char *)p = '/'; // there it is again
54  return result != 0 && (mask != 0 || addr.s_addr == 0);
55 }
56 
58 {
59  return addr.s_addr == htonl(INADDR_LOOPBACK);
60 }
61 
63 {
64  return (Address & mask) == (addr.s_addr & mask);
65 }
66 
67 // --- cSatCableNumbers ------------------------------------------------------
68 
69 cSatCableNumbers::cSatCableNumbers(int Size, const char *s)
70 {
71  size = Size;
72  array = MALLOC(int, size);
73  FromString(s);
74 }
75 
77 {
78  free(array);
79 }
80 
81 bool cSatCableNumbers::FromString(const char *s)
82 {
83  char *t;
84  int i = 0;
85  const char *p = s;
86  while (p && *p) {
87  int n = strtol(p, &t, 10);
88  if (t != p) {
89  if (i < size)
90  array[i++] = n;
91  else {
92  esyslog("ERROR: too many sat cable numbers in '%s'", s);
93  return false;
94  }
95  }
96  else {
97  esyslog("ERROR: invalid sat cable number in '%s'", s);
98  return false;
99  }
100  p = skipspace(t);
101  }
102  for ( ; i < size; i++)
103  array[i] = 0;
104  return true;
105 }
106 
108 {
109  cString s("");
110  for (int i = 0; i < size; i++) {
111  s = cString::sprintf("%s%d ", *s, array[i]);
112  }
113  return s;
114 }
115 
116 int cSatCableNumbers::FirstDeviceIndex(int DeviceIndex) const
117 {
118  if (0 <= DeviceIndex && DeviceIndex < size) {
119  if (int CableNr = array[DeviceIndex]) {
120  for (int i = 0; i < size; i++) {
121  if (i < DeviceIndex && array[i] == CableNr)
122  return i;
123  }
124  }
125  }
126  return -1;
127 }
128 
129 // --- cNestedItem -----------------------------------------------------------
130 
131 cNestedItem::cNestedItem(const char *Text, bool WithSubItems)
132 {
133  text = strdup(Text ? Text : "");
134  subItems = WithSubItems ? new cList<cNestedItem> : NULL;
135 }
136 
138 {
139  delete subItems;
140  free(text);
141 }
142 
143 int cNestedItem::Compare(const cListObject &ListObject) const
144 {
145  return strcasecmp(text, ((cNestedItem *)&ListObject)->text);
146 }
147 
149 {
150  if (!subItems)
152  if (Item)
153  subItems->Add(Item);
154 }
155 
156 void cNestedItem::SetText(const char *Text)
157 {
158  free(text);
159  text = strdup(Text ? Text : "");
160 }
161 
163 {
164  if (On && !subItems)
166  else if (!On && subItems) {
167  delete subItems;
168  subItems = NULL;
169  }
170 }
171 
172 // --- cNestedItemList -------------------------------------------------------
173 
175 {
176  fileName = NULL;
177 }
178 
180 {
181  free(fileName);
182 }
183 
185 {
186  char *s;
187  cReadLine ReadLine;
188  while ((s = ReadLine.Read(f)) != NULL) {
189  Line++;
190  char *p = strchr(s, '#');
191  if (p)
192  *p = 0;
193  s = skipspace(stripspace(s));
194  if (!isempty(s)) {
195  p = s + strlen(s) - 1;
196  if (*p == '{') {
197  *p = 0;
198  stripspace(s);
199  cNestedItem *Item = new cNestedItem(s, true);
200  List->Add(Item);
201  if (!Parse(f, Item->SubItems(), Line))
202  return false;
203  }
204  else if (*s == '}')
205  break;
206  else
207  List->Add(new cNestedItem(s));
208  }
209  }
210  return true;
211 }
212 
213 bool cNestedItemList::Write(FILE *f, cList<cNestedItem> *List, int Indent)
214 {
215  for (cNestedItem *Item = List->First(); Item; Item = List->Next(Item)) {
216  if (Item->SubItems()) {
217  fprintf(f, "%*s%s {\n", Indent, "", Item->Text());
218  Write(f, Item->SubItems(), Indent + 2);
219  fprintf(f, "%*s}\n", Indent + 2, "");
220  }
221  else
222  fprintf(f, "%*s%s\n", Indent, "", Item->Text());
223  }
224  return true;
225 }
226 
228 {
229  free(fileName);
230  fileName = NULL;
232 }
233 
234 bool cNestedItemList::Load(const char *FileName)
235 {
237  if (FileName) {
238  free(fileName);
239  fileName = strdup(FileName);
240  }
241  bool result = false;
242  if (fileName && access(fileName, F_OK) == 0) {
243  isyslog("loading %s", fileName);
244  FILE *f = fopen(fileName, "r");
245  if (f) {
246  int Line = 0;
247  result = Parse(f, this, Line);
248  fclose(f);
249  }
250  else {
252  result = false;
253  }
254  }
255  return result;
256 }
257 
259 {
260  bool result = true;
261  cSafeFile f(fileName);
262  if (f.Open()) {
263  result = Write(f, this);
264  if (!f.Close())
265  result = false;
266  }
267  else
268  result = false;
269  return result;
270 }
271 
272 // --- Folders and Commands --------------------------------------------------
273 
277 
278 // --- cSVDRPhosts -----------------------------------------------------------
279 
281 
283 {
284  cSVDRPhost *h = First();
285  while (h) {
286  if (!h->IsLocalhost())
287  return false;
288  h = (cSVDRPhost *)h->Next();
289  }
290  return true;
291 }
292 
294 {
295  cSVDRPhost *h = First();
296  while (h) {
297  if (h->Accepts(Address))
298  return true;
299  h = (cSVDRPhost *)h->Next();
300  }
301  return false;
302 }
303 
304 // --- cSetupLine ------------------------------------------------------------
305 
307 {
308  plugin = name = value = NULL;
309 }
310 
311 cSetupLine::cSetupLine(const char *Name, const char *Value, const char *Plugin)
312 {
313  name = strreplace(strdup(Name), '\n', 0);
314  value = strreplace(strdup(Value), '\n', 0);
315  plugin = Plugin ? strreplace(strdup(Plugin), '\n', 0) : NULL;
316 }
317 
319 {
320  free(plugin);
321  free(name);
322  free(value);
323 }
324 
325 int cSetupLine::Compare(const cListObject &ListObject) const
326 {
327  const cSetupLine *sl = (cSetupLine *)&ListObject;
328  if (!plugin && !sl->plugin)
329  return strcasecmp(name, sl->name);
330  if (!plugin)
331  return -1;
332  if (!sl->plugin)
333  return 1;
334  int result = strcasecmp(plugin, sl->plugin);
335  if (result == 0)
336  result = strcasecmp(name, sl->name);
337  return result;
338 }
339 
340 bool cSetupLine::Parse(char *s)
341 {
342  char *p = strchr(s, '=');
343  if (p) {
344  *p = 0;
345  char *Name = compactspace(s);
346  char *Value = compactspace(p + 1);
347  if (*Name) { // value may be an empty string
348  p = strchr(Name, '.');
349  if (p) {
350  *p = 0;
351  char *Plugin = compactspace(Name);
352  Name = compactspace(p + 1);
353  if (!(*Plugin && *Name))
354  return false;
355  plugin = strdup(Plugin);
356  }
357  name = strdup(Name);
358  value = strdup(Value);
359  return true;
360  }
361  }
362  return false;
363 }
364 
365 bool cSetupLine::Save(FILE *f)
366 {
367  return fprintf(f, "%s%s%s = %s\n", plugin ? plugin : "", plugin ? "." : "", name, value) > 0;
368 }
369 
370 // --- cSetup ----------------------------------------------------------------
371 
373 
375 {
376  strcpy(OSDLanguage, ""); // default is taken from environment
377  strcpy(OSDSkin, "lcars");
378  strcpy(OSDTheme, "default");
379  PrimaryDVB = 1;
380  ShowInfoOnChSwitch = 1;
381  TimeoutRequChInfo = 1;
382  MenuScrollPage = 1;
383  MenuScrollWrap = 0;
384  MenuKeyCloses = 0;
385  MarkInstantRecord = 1;
388  LnbSLOF = 11700;
389  LnbFrequLo = 9750;
390  LnbFrequHi = 10600;
391  DiSEqC = 0;
392  UsePositioner = 0;
393  SiteLat = 0;
394  SiteLon = 0;
395  PositionerSpeed = 15;
396  PositionerSwing = 650;
397  PositionerLastLon = 0;
398  SetSystemTime = 0;
399  TimeSource = 0;
400  TimeTransponder = 0;
402  MarginStart = 2;
403  MarginStop = 10;
404  AudioLanguages[0] = -1;
406  SubtitleLanguages[0] = -1;
407  SubtitleOffset = 0;
410  EPGLanguages[0] = -1;
411  EPGScanTimeout = 5;
412  EPGScanMaxChannel = 0;
413  EPGPauseAfterScan = 0;
414  EPGBugfixLevel = 3;
415  EPGLinger = 0;
416  SVDRPTimeout = 300;
417  SVDRPPeering = 0;
419  strcpy(SVDRPDefaultHost, "");
420  ZapTimeout = 3;
421  ChannelEntryTimeout = 1000;
422  RcRepeatDelay = 300;
423  RcRepeatDelta = 100;
424  DefaultPriority = 50;
426  RecordKeyHandling = 2;
427  PauseKeyHandling = 2;
428  PausePriority = 10;
429  PauseLifetime = 1;
430  UseSubtitle = 1;
431  UseVps = 0;
432  VpsMargin = 120;
433  RecordingDirs = 1;
434  FoldersInTimerMenu = 1;
438  NumberKeysForChars = 1;
439  ColorKey0 = 0;
440  ColorKey1 = 1;
441  ColorKey2 = 2;
442  ColorKey3 = 3;
443  VideoDisplayFormat = 1;
444  VideoFormat = 0;
445  UpdateChannels = 5;
446  UseDolbyDigital = 1;
447  ChannelInfoPos = 0;
448  ChannelInfoTime = 5;
449  OSDLeftP = 0.08;
450  OSDTopP = 0.08;
451  OSDWidthP = 0.87;
452  OSDHeightP = 0.84;
453  OSDLeft = 54;
454  OSDTop = 45;
455  OSDWidth = 624;
456  OSDHeight = 486;
457  OSDAspect = 1.0;
458  OSDMessageTime = 1;
459  UseSmallFont = 1;
460  AntiAlias = 1;
461  strcpy(FontOsd, DefaultFontOsd);
462  strcpy(FontSml, DefaultFontSml);
463  strcpy(FontFix, DefaultFontFix);
464  FontOsdSizeP = 0.031;
465  FontSmlSizeP = 0.028;
466  FontFixSizeP = 0.030;
467  FontOsdSize = 22;
468  FontSmlSize = 18;
469  FontFixSize = 20;
471  SplitEditedFiles = 0;
472  DelTimeshiftRec = 0;
473  MinEventTimeout = 30;
474  MinUserInactivity = 300;
475  NextWakeupTime = 0;
476  MultiSpeedMode = 0;
477  ShowReplayMode = 0;
478  ShowRemainingTime = 0;
480  PauseOnMarkSet = 0;
481  PauseOnMarkJump = 1;
482  SkipEdited = 0;
483  PauseAtLastMark = 0;
484  AdaptiveSkipInitial = 120;
488  SkipSeconds = 60;
489  SkipSecondsRepeat = 60;
490  ResumeID = 0;
491  CurrentChannel = -1;
493  VolumeSteps = 51;
494  VolumeLinearize = 0;
495  CurrentDolby = 0;
496  InitialChannel = "";
497  DeviceBondings = "";
498  InitialVolume = -1;
499  ChannelsWrap = 0;
501  EmergencyExit = 1;
502 }
503 
505 {
506  memcpy(&__BeginData__, &s.__BeginData__, (char *)&s.__EndData__ - (char *)&s.__BeginData__);
509  return *this;
510 }
511 
512 cSetupLine *cSetup::Get(const char *Name, const char *Plugin)
513 {
514  for (cSetupLine *l = First(); l; l = Next(l)) {
515  if ((l->Plugin() == NULL) == (Plugin == NULL)) {
516  if ((!Plugin || strcasecmp(l->Plugin(), Plugin) == 0) && strcasecmp(l->Name(), Name) == 0)
517  return l;
518  }
519  }
520  return NULL;
521 }
522 
523 void cSetup::Store(const char *Name, const char *Value, const char *Plugin, bool AllowMultiple)
524 {
525  if (Name && *Name) {
526  cSetupLine *l = Get(Name, Plugin);
527  if (l && !AllowMultiple)
528  Del(l);
529  if (Value)
530  Add(new cSetupLine(Name, Value, Plugin));
531  }
532 }
533 
534 void cSetup::Store(const char *Name, int Value, const char *Plugin)
535 {
536  Store(Name, cString::sprintf("%d", Value), Plugin);
537 }
538 
539 void cSetup::Store(const char *Name, double &Value, const char *Plugin)
540 {
541  Store(Name, dtoa(Value), Plugin);
542 }
543 
544 bool cSetup::Load(const char *FileName)
545 {
547  bool result = true;
548  for (cSetupLine *l = First(); l; l = Next(l)) {
549  bool error = false;
550  if (l->Plugin()) {
551  cPlugin *p = cPluginManager::GetPlugin(l->Plugin());
552  if (p && !p->SetupParse(l->Name(), l->Value()))
553  error = true;
554  }
555  else {
556  if (!Parse(l->Name(), l->Value()))
557  error = true;
558  }
559  if (error) {
560  esyslog("ERROR: unknown config parameter: %s%s%s = %s", l->Plugin() ? l->Plugin() : "", l->Plugin() ? "." : "", l->Name(), l->Value());
561  result = false;
562  }
563  }
564  return result;
565  }
566  return false;
567 }
568 
569 void cSetup::StoreLanguages(const char *Name, int *Values)
570 {
571  char buffer[I18nLanguages()->Size() * 4];
572  char *q = buffer;
573  for (int i = 0; i < I18nLanguages()->Size(); i++) {
574  if (Values[i] < 0)
575  break;
576  const char *s = I18nLanguageCode(Values[i]);
577  if (s) {
578  if (q > buffer)
579  *q++ = ' ';
580  strncpy(q, s, 3);
581  q += 3;
582  }
583  }
584  *q = 0;
585  Store(Name, buffer);
586 }
587 
588 bool cSetup::ParseLanguages(const char *Value, int *Values)
589 {
590  int n = 0;
591  while (Value && *Value && n < I18nLanguages()->Size()) {
592  char buffer[4];
593  strn0cpy(buffer, Value, sizeof(buffer));
594  int i = I18nLanguageIndex(buffer);
595  if (i >= 0)
596  Values[n++] = i;
597  if ((Value = strchr(Value, ' ')) != NULL)
598  Value++;
599  }
600  Values[n] = -1;
601  return true;
602 }
603 
604 bool cSetup::Parse(const char *Name, const char *Value)
605 {
606  if (!strcasecmp(Name, "OSDLanguage")) { strn0cpy(OSDLanguage, Value, sizeof(OSDLanguage)); I18nSetLocale(OSDLanguage); }
607  else if (!strcasecmp(Name, "OSDSkin")) Utf8Strn0Cpy(OSDSkin, Value, MaxSkinName);
608  else if (!strcasecmp(Name, "OSDTheme")) Utf8Strn0Cpy(OSDTheme, Value, MaxThemeName);
609  else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value);
610  else if (!strcasecmp(Name, "ShowInfoOnChSwitch")) ShowInfoOnChSwitch = atoi(Value);
611  else if (!strcasecmp(Name, "TimeoutRequChInfo")) TimeoutRequChInfo = atoi(Value);
612  else if (!strcasecmp(Name, "MenuScrollPage")) MenuScrollPage = atoi(Value);
613  else if (!strcasecmp(Name, "MenuScrollWrap")) MenuScrollWrap = atoi(Value);
614  else if (!strcasecmp(Name, "MenuKeyCloses")) MenuKeyCloses = atoi(Value);
615  else if (!strcasecmp(Name, "MarkInstantRecord")) MarkInstantRecord = atoi(Value);
616  else if (!strcasecmp(Name, "NameInstantRecord")) Utf8Strn0Cpy(NameInstantRecord, Value, sizeof(NameInstantRecord));
617  else if (!strcasecmp(Name, "InstantRecordTime")) InstantRecordTime = atoi(Value);
618  else if (!strcasecmp(Name, "LnbSLOF")) LnbSLOF = atoi(Value);
619  else if (!strcasecmp(Name, "LnbFrequLo")) LnbFrequLo = atoi(Value);
620  else if (!strcasecmp(Name, "LnbFrequHi")) LnbFrequHi = atoi(Value);
621  else if (!strcasecmp(Name, "DiSEqC")) DiSEqC = atoi(Value);
622  else if (!strcasecmp(Name, "UsePositioner")) UsePositioner = atoi(Value);
623  else if (!strcasecmp(Name, "SiteLat")) SiteLat = atoi(Value);
624  else if (!strcasecmp(Name, "SiteLon")) SiteLon = atoi(Value);
625  else if (!strcasecmp(Name, "PositionerSpeed")) PositionerSpeed = atoi(Value);
626  else if (!strcasecmp(Name, "PositionerSwing")) PositionerSwing = atoi(Value);
627  else if (!strcasecmp(Name, "PositionerLastLon")) PositionerLastLon = atoi(Value);
628  else if (!strcasecmp(Name, "SetSystemTime")) SetSystemTime = atoi(Value);
629  else if (!strcasecmp(Name, "TimeSource")) TimeSource = cSource::FromString(Value);
630  else if (!strcasecmp(Name, "TimeTransponder")) TimeTransponder = atoi(Value);
631  else if (!strcasecmp(Name, "StandardCompliance")) StandardCompliance = atoi(Value);
632  else if (!strcasecmp(Name, "MarginStart")) MarginStart = atoi(Value);
633  else if (!strcasecmp(Name, "MarginStop")) MarginStop = atoi(Value);
634  else if (!strcasecmp(Name, "AudioLanguages")) return ParseLanguages(Value, AudioLanguages);
635  else if (!strcasecmp(Name, "DisplaySubtitles")) DisplaySubtitles = atoi(Value);
636  else if (!strcasecmp(Name, "SubtitleLanguages")) return ParseLanguages(Value, SubtitleLanguages);
637  else if (!strcasecmp(Name, "SubtitleOffset")) SubtitleOffset = atoi(Value);
638  else if (!strcasecmp(Name, "SubtitleFgTransparency")) SubtitleFgTransparency = atoi(Value);
639  else if (!strcasecmp(Name, "SubtitleBgTransparency")) SubtitleBgTransparency = atoi(Value);
640  else if (!strcasecmp(Name, "EPGLanguages")) return ParseLanguages(Value, EPGLanguages);
641  else if (!strcasecmp(Name, "EPGScanTimeout")) EPGScanTimeout = atoi(Value);
642  else if (!strcasecmp(Name, "EPGScanMaxChannel")) EPGScanMaxChannel = atoi(Value);
643  else if (!strcasecmp(Name, "EPGPauseAfterScan")) EPGPauseAfterScan = atoi(Value);
644  else if (!strcasecmp(Name, "EPGBugfixLevel")) EPGBugfixLevel = atoi(Value);
645  else if (!strcasecmp(Name, "EPGLinger")) EPGLinger = atoi(Value);
646  else if (!strcasecmp(Name, "SVDRPTimeout")) SVDRPTimeout = atoi(Value);
647  else if (!strcasecmp(Name, "SVDRPPeering")) SVDRPPeering = atoi(Value);
648  else if (!strcasecmp(Name, "SVDRPHostName")) { if (*Value) strn0cpy(SVDRPHostName, Value, sizeof(SVDRPHostName)); }
649  else if (!strcasecmp(Name, "SVDRPDefaultHost")) strn0cpy(SVDRPDefaultHost, Value, sizeof(SVDRPDefaultHost));
650  else if (!strcasecmp(Name, "ZapTimeout")) ZapTimeout = atoi(Value);
651  else if (!strcasecmp(Name, "ChannelEntryTimeout")) ChannelEntryTimeout= atoi(Value);
652  else if (!strcasecmp(Name, "RcRepeatDelay")) RcRepeatDelay = atoi(Value);
653  else if (!strcasecmp(Name, "RcRepeatDelta")) RcRepeatDelta = atoi(Value);
654  else if (!strcasecmp(Name, "DefaultPriority")) DefaultPriority = atoi(Value);
655  else if (!strcasecmp(Name, "DefaultLifetime")) DefaultLifetime = atoi(Value);
656  else if (!strcasecmp(Name, "RecordKeyHandling")) RecordKeyHandling = atoi(Value);
657  else if (!strcasecmp(Name, "PauseKeyHandling")) PauseKeyHandling = atoi(Value);
658  else if (!strcasecmp(Name, "PausePriority")) PausePriority = atoi(Value);
659  else if (!strcasecmp(Name, "PauseLifetime")) PauseLifetime = atoi(Value);
660  else if (!strcasecmp(Name, "UseSubtitle")) UseSubtitle = atoi(Value);
661  else if (!strcasecmp(Name, "UseVps")) UseVps = atoi(Value);
662  else if (!strcasecmp(Name, "VpsMargin")) VpsMargin = atoi(Value);
663  else if (!strcasecmp(Name, "RecordingDirs")) RecordingDirs = atoi(Value);
664  else if (!strcasecmp(Name, "FoldersInTimerMenu")) FoldersInTimerMenu = atoi(Value);
665  else if (!strcasecmp(Name, "AlwaysSortFoldersFirst")) AlwaysSortFoldersFirst = atoi(Value);
666  else if (!strcasecmp(Name, "RecSortingDirection")) RecSortingDirection= atoi(Value);
667  else if (!strcasecmp(Name, "DefaultSortModeRec")) DefaultSortModeRec = atoi(Value);
668  else if (!strcasecmp(Name, "NumberKeysForChars")) NumberKeysForChars = atoi(Value);
669  else if (!strcasecmp(Name, "ColorKey0")) ColorKey0 = atoi(Value);
670  else if (!strcasecmp(Name, "ColorKey1")) ColorKey1 = atoi(Value);
671  else if (!strcasecmp(Name, "ColorKey2")) ColorKey2 = atoi(Value);
672  else if (!strcasecmp(Name, "ColorKey3")) ColorKey3 = atoi(Value);
673  else if (!strcasecmp(Name, "VideoDisplayFormat")) VideoDisplayFormat = atoi(Value);
674  else if (!strcasecmp(Name, "VideoFormat")) VideoFormat = atoi(Value);
675  else if (!strcasecmp(Name, "UpdateChannels")) UpdateChannels = atoi(Value);
676  else if (!strcasecmp(Name, "UseDolbyDigital")) UseDolbyDigital = atoi(Value);
677  else if (!strcasecmp(Name, "ChannelInfoPos")) ChannelInfoPos = atoi(Value);
678  else if (!strcasecmp(Name, "ChannelInfoTime")) ChannelInfoTime = atoi(Value);
679  else if (!strcasecmp(Name, "OSDLeftP")) OSDLeftP = atod(Value);
680  else if (!strcasecmp(Name, "OSDTopP")) OSDTopP = atod(Value);
681  else if (!strcasecmp(Name, "OSDWidthP")) { OSDWidthP = atod(Value); ChkDoublePlausibility(OSDWidthP, 0.87); }
682  else if (!strcasecmp(Name, "OSDHeightP")) { OSDHeightP = atod(Value); ChkDoublePlausibility(OSDHeightP, 0.84); }
683  else if (!strcasecmp(Name, "OSDLeft")) OSDLeft = atoi(Value);
684  else if (!strcasecmp(Name, "OSDTop")) OSDTop = atoi(Value);
685  else if (!strcasecmp(Name, "OSDWidth")) { OSDWidth = atoi(Value); OSDWidth &= ~0x07; } // OSD width must be a multiple of 8
686  else if (!strcasecmp(Name, "OSDHeight")) OSDHeight = atoi(Value);
687  else if (!strcasecmp(Name, "OSDAspect")) OSDAspect = atod(Value);
688  else if (!strcasecmp(Name, "OSDMessageTime")) OSDMessageTime = atoi(Value);
689  else if (!strcasecmp(Name, "UseSmallFont")) UseSmallFont = atoi(Value);
690  else if (!strcasecmp(Name, "AntiAlias")) AntiAlias = atoi(Value);
691  else if (!strcasecmp(Name, "FontOsd")) Utf8Strn0Cpy(FontOsd, Value, MAXFONTNAME);
692  else if (!strcasecmp(Name, "FontSml")) Utf8Strn0Cpy(FontSml, Value, MAXFONTNAME);
693  else if (!strcasecmp(Name, "FontFix")) Utf8Strn0Cpy(FontFix, Value, MAXFONTNAME);
694  else if (!strcasecmp(Name, "FontOsdSizeP")) { FontOsdSizeP = atod(Value); ChkDoublePlausibility(FontOsdSizeP, 0.038); }
695  else if (!strcasecmp(Name, "FontSmlSizeP")) { FontSmlSizeP = atod(Value); ChkDoublePlausibility(FontSmlSizeP, 0.035); }
696  else if (!strcasecmp(Name, "FontFixSizeP")) { FontFixSizeP = atod(Value); ChkDoublePlausibility(FontFixSizeP, 0.031); }
697  else if (!strcasecmp(Name, "FontOsdSize")) FontOsdSize = atoi(Value);
698  else if (!strcasecmp(Name, "FontSmlSize")) FontSmlSize = atoi(Value);
699  else if (!strcasecmp(Name, "FontFixSize")) FontFixSize = atoi(Value);
700  else if (!strcasecmp(Name, "MaxVideoFileSize")) MaxVideoFileSize = atoi(Value);
701  else if (!strcasecmp(Name, "SplitEditedFiles")) SplitEditedFiles = atoi(Value);
702  else if (!strcasecmp(Name, "DelTimeshiftRec")) DelTimeshiftRec = atoi(Value);
703  else if (!strcasecmp(Name, "MinEventTimeout")) MinEventTimeout = atoi(Value);
704  else if (!strcasecmp(Name, "MinUserInactivity")) MinUserInactivity = atoi(Value);
705  else if (!strcasecmp(Name, "NextWakeupTime")) NextWakeupTime = atoi(Value);
706  else if (!strcasecmp(Name, "MultiSpeedMode")) MultiSpeedMode = atoi(Value);
707  else if (!strcasecmp(Name, "ShowReplayMode")) ShowReplayMode = atoi(Value);
708  else if (!strcasecmp(Name, "ShowRemainingTime")) ShowRemainingTime = atoi(Value);
709  else if (!strcasecmp(Name, "ProgressDisplayTime")) ProgressDisplayTime= atoi(Value);
710  else if (!strcasecmp(Name, "PauseOnMarkSet")) PauseOnMarkSet = atoi(Value);
711  else if (!strcasecmp(Name, "PauseOnMarkJump")) PauseOnMarkJump = atoi(Value);
712  else if (!strcasecmp(Name, "SkipEdited")) SkipEdited = atoi(Value);
713  else if (!strcasecmp(Name, "PauseAtLastMark")) PauseAtLastMark = atoi(Value);
714  else if (!strcasecmp(Name, "AdaptiveSkipInitial")) AdaptiveSkipInitial= atoi(Value);
715  else if (!strcasecmp(Name, "AdaptiveSkipTimeout")) AdaptiveSkipTimeout= atoi(Value);
716  else if (!strcasecmp(Name, "AdaptiveSkipAlternate")) AdaptiveSkipAlternate = atoi(Value);
717  else if (!strcasecmp(Name, "AdaptiveSkipPrevNext")) AdaptiveSkipPrevNext = atoi(Value);
718  else if (!strcasecmp(Name, "SkipSeconds")) SkipSeconds = atoi(Value);
719  else if (!strcasecmp(Name, "SkipSecondsRepeat")) SkipSecondsRepeat = atoi(Value);
720  else if (!strcasecmp(Name, "ResumeID")) ResumeID = atoi(Value);
721  else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value);
722  else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value);
723  else if (!strcasecmp(Name, "CurrentDolby")) CurrentDolby = atoi(Value);
724  else if (!strcasecmp(Name, "InitialChannel")) InitialChannel = Value;
725  else if (!strcasecmp(Name, "VolumeSteps")) VolumeSteps = atoi(Value);
726  else if (!strcasecmp(Name, "VolumeLinearize")) VolumeLinearize = atoi(Value);
727  else if (!strcasecmp(Name, "InitialVolume")) InitialVolume = atoi(Value);
728  else if (!strcasecmp(Name, "DeviceBondings")) DeviceBondings = Value;
729  else if (!strcasecmp(Name, "ChannelsWrap")) ChannelsWrap = atoi(Value);
730  else if (!strcasecmp(Name, "ShowChannelNamesWithSource")) ShowChannelNamesWithSource = atoi(Value);
731  else if (!strcasecmp(Name, "EmergencyExit")) EmergencyExit = atoi(Value);
732  else if (!strcasecmp(Name, "LastReplayed")) cReplayControl::SetRecording(Value);
733  else
734  return false;
735  return true;
736 }
737 
738 bool cSetup::Save(void)
739 {
740  Store("OSDLanguage", OSDLanguage);
741  Store("OSDSkin", OSDSkin);
742  Store("OSDTheme", OSDTheme);
743  Store("PrimaryDVB", PrimaryDVB);
744  Store("ShowInfoOnChSwitch", ShowInfoOnChSwitch);
745  Store("TimeoutRequChInfo", TimeoutRequChInfo);
746  Store("MenuScrollPage", MenuScrollPage);
747  Store("MenuScrollWrap", MenuScrollWrap);
748  Store("MenuKeyCloses", MenuKeyCloses);
749  Store("MarkInstantRecord", MarkInstantRecord);
750  Store("NameInstantRecord", NameInstantRecord);
751  Store("InstantRecordTime", InstantRecordTime);
752  Store("LnbSLOF", LnbSLOF);
753  Store("LnbFrequLo", LnbFrequLo);
754  Store("LnbFrequHi", LnbFrequHi);
755  Store("DiSEqC", DiSEqC);
756  Store("UsePositioner", UsePositioner);
757  Store("SiteLat", SiteLat);
758  Store("SiteLon", SiteLon);
759  Store("PositionerSpeed", PositionerSpeed);
760  Store("PositionerSwing", PositionerSwing);
761  Store("PositionerLastLon", PositionerLastLon);
762  Store("SetSystemTime", SetSystemTime);
763  Store("TimeSource", cSource::ToString(TimeSource));
764  Store("TimeTransponder", TimeTransponder);
765  Store("StandardCompliance", StandardCompliance);
766  Store("MarginStart", MarginStart);
767  Store("MarginStop", MarginStop);
768  StoreLanguages("AudioLanguages", AudioLanguages);
769  Store("DisplaySubtitles", DisplaySubtitles);
770  StoreLanguages("SubtitleLanguages", SubtitleLanguages);
771  Store("SubtitleOffset", SubtitleOffset);
772  Store("SubtitleFgTransparency", SubtitleFgTransparency);
773  Store("SubtitleBgTransparency", SubtitleBgTransparency);
774  StoreLanguages("EPGLanguages", EPGLanguages);
775  Store("EPGScanTimeout", EPGScanTimeout);
776  Store("EPGScanMaxChannel", EPGScanMaxChannel);
777  Store("EPGPauseAfterScan", EPGPauseAfterScan);
778  Store("EPGBugfixLevel", EPGBugfixLevel);
779  Store("EPGLinger", EPGLinger);
780  Store("SVDRPTimeout", SVDRPTimeout);
781  Store("SVDRPPeering", SVDRPPeering);
782  Store("SVDRPHostName", strcmp(SVDRPHostName, GetHostName()) ? SVDRPHostName : "");
783  Store("SVDRPDefaultHost", SVDRPDefaultHost);
784  Store("ZapTimeout", ZapTimeout);
785  Store("ChannelEntryTimeout",ChannelEntryTimeout);
786  Store("RcRepeatDelay", RcRepeatDelay);
787  Store("RcRepeatDelta", RcRepeatDelta);
788  Store("DefaultPriority", DefaultPriority);
789  Store("DefaultLifetime", DefaultLifetime);
790  Store("RecordKeyHandling", RecordKeyHandling);
791  Store("PauseKeyHandling", PauseKeyHandling);
792  Store("PausePriority", PausePriority);
793  Store("PauseLifetime", PauseLifetime);
794  Store("UseSubtitle", UseSubtitle);
795  Store("UseVps", UseVps);
796  Store("VpsMargin", VpsMargin);
797  Store("RecordingDirs", RecordingDirs);
798  Store("FoldersInTimerMenu", FoldersInTimerMenu);
799  Store("AlwaysSortFoldersFirst", AlwaysSortFoldersFirst);
800  Store("RecSortingDirection",RecSortingDirection);
801  Store("DefaultSortModeRec", DefaultSortModeRec);
802  Store("NumberKeysForChars", NumberKeysForChars);
803  Store("ColorKey0", ColorKey0);
804  Store("ColorKey1", ColorKey1);
805  Store("ColorKey2", ColorKey2);
806  Store("ColorKey3", ColorKey3);
807  Store("VideoDisplayFormat", VideoDisplayFormat);
808  Store("VideoFormat", VideoFormat);
809  Store("UpdateChannels", UpdateChannels);
810  Store("UseDolbyDigital", UseDolbyDigital);
811  Store("ChannelInfoPos", ChannelInfoPos);
812  Store("ChannelInfoTime", ChannelInfoTime);
813  Store("OSDLeftP", OSDLeftP);
814  Store("OSDTopP", OSDTopP);
815  Store("OSDWidthP", OSDWidthP);
816  Store("OSDHeightP", OSDHeightP);
817  Store("OSDLeft", OSDLeft);
818  Store("OSDTop", OSDTop);
819  Store("OSDWidth", OSDWidth);
820  Store("OSDHeight", OSDHeight);
821  Store("OSDAspect", OSDAspect);
822  Store("OSDMessageTime", OSDMessageTime);
823  Store("UseSmallFont", UseSmallFont);
824  Store("AntiAlias", AntiAlias);
825  Store("FontOsd", FontOsd);
826  Store("FontSml", FontSml);
827  Store("FontFix", FontFix);
828  Store("FontOsdSizeP", FontOsdSizeP);
829  Store("FontSmlSizeP", FontSmlSizeP);
830  Store("FontFixSizeP", FontFixSizeP);
831  Store("FontOsdSize", FontOsdSize);
832  Store("FontSmlSize", FontSmlSize);
833  Store("FontFixSize", FontFixSize);
834  Store("MaxVideoFileSize", MaxVideoFileSize);
835  Store("SplitEditedFiles", SplitEditedFiles);
836  Store("DelTimeshiftRec", DelTimeshiftRec);
837  Store("MinEventTimeout", MinEventTimeout);
838  Store("MinUserInactivity", MinUserInactivity);
839  Store("NextWakeupTime", NextWakeupTime);
840  Store("MultiSpeedMode", MultiSpeedMode);
841  Store("ShowReplayMode", ShowReplayMode);
842  Store("ShowRemainingTime", ShowRemainingTime);
843  Store("ProgressDisplayTime",ProgressDisplayTime);
844  Store("PauseOnMarkSet", PauseOnMarkSet);
845  Store("PauseOnMarkJump", PauseOnMarkJump);
846  Store("SkipEdited", SkipEdited);
847  Store("PauseAtLastMark", PauseAtLastMark);
848  Store("AdaptiveSkipInitial",AdaptiveSkipInitial);
849  Store("AdaptiveSkipTimeout",AdaptiveSkipTimeout);
850  Store("AdaptiveSkipAlternate", AdaptiveSkipAlternate);
851  Store("AdaptiveSkipPrevNext", AdaptiveSkipPrevNext);
852  Store("SkipSeconds", SkipSeconds);
853  Store("SkipSecondsRepeat", SkipSecondsRepeat);
854  Store("ResumeID", ResumeID);
855  Store("CurrentChannel", CurrentChannel);
856  Store("CurrentVolume", CurrentVolume);
857  Store("CurrentDolby", CurrentDolby);
858  Store("InitialChannel", InitialChannel);
859  Store("VolumeSteps", VolumeSteps);
860  Store("VolumeLinearize", VolumeLinearize);
861  Store("InitialVolume", InitialVolume);
862  Store("DeviceBondings", DeviceBondings);
863  Store("ChannelsWrap", ChannelsWrap);
864  Store("ShowChannelNamesWithSource", ShowChannelNamesWithSource);
865  Store("EmergencyExit", EmergencyExit);
866  Store("LastReplayed", cReplayControl::LastReplayed());
867 
868  Sort();
869 
871  isyslog("saved setup to %s", FileName());
872  return true;
873  }
874  return false;
875 }
const char * FileName(void)
Definition: config.h:134
virtual void Clear(void)
Definition: tools.c:2254
void Del(cListObject *Object, bool DeleteObject=true)
Definition: tools.c:2209
void Add(cListObject *Object, cListObject *After=NULL)
Definition: tools.c:2177
void Sort(void)
Definition: tools.c:2301
cListObject * Next(void) const
Definition: tools.h:547
const T * Next(const T *Object) const
< Returns the element immediately before Object in this list, or NULL if Object is the first element ...
Definition: tools.h:650
const T * First(void) const
Returns the first element in this list, or NULL if the list is empty.
Definition: tools.h:643
bool Save(void)
Definition: config.c:258
bool Write(FILE *f, cList< cNestedItem > *List, int Indent=0)
Definition: config.c:213
virtual ~cNestedItemList() override
Definition: config.c:179
void Clear(void)
Definition: config.c:227
bool Parse(FILE *f, cList< cNestedItem > *List, int &Line)
Definition: config.c:184
bool Load(const char *FileName)
Definition: config.c:234
char * fileName
Definition: config.h:221
cNestedItemList(void)
Definition: config.c:174
void SetText(const char *Text)
Definition: config.c:156
cList< cNestedItem > * SubItems(void)
Definition: config.h:213
char * text
Definition: config.h:206
void AddSubItem(cNestedItem *Item)
Definition: config.c:148
void SetSubItems(bool On)
Definition: config.c:162
virtual int Compare(const cListObject &ListObject) const override
Must return 0 if this object is equal to ListObject, a positive value if it is "greater",...
Definition: config.c:143
virtual ~cNestedItem() override
Definition: config.c:137
cNestedItem(const char *Text, bool WithSubItems=false)
Definition: config.c:131
cList< cNestedItem > * subItems
Definition: config.h:207
const char * Text(void) const
Definition: config.h:212
static cPlugin * GetPlugin(int Index)
Definition: plugin.c:470
Definition: plugin.h:22
virtual bool SetupParse(const char *Name, const char *Value)
Definition: plugin.c:106
char * Read(FILE *f)
Definition: tools.c:1527
static void SetRecording(const char *FileName)
Definition: menu.c:5897
static const char * LastReplayed(void)
Definition: menu.c:5907
bool Parse(const char *s)
Definition: config.c:34
in_addr_t mask
Definition: config.h:94
bool IsLocalhost(void)
Definition: config.c:57
cSVDRPhost(void)
Definition: config.c:28
bool Accepts(in_addr_t Address)
Definition: config.c:62
struct in_addr addr
Definition: config.h:93
bool LocalhostOnly(void)
Definition: config.c:282
bool Acceptable(in_addr_t Address)
Definition: config.c:293
bool Open(void)
Definition: tools.c:1761
bool Close(void)
Definition: tools.c:1771
cSatCableNumbers(int Size, const char *s=NULL)
Definition: config.c:69
int Size(void) const
Definition: config.h:109
bool FromString(const char *s)
Definition: config.c:81
~cSatCableNumbers()
Definition: config.c:76
cString ToString(void)
Definition: config.c:107
int FirstDeviceIndex(int DeviceIndex) const
Returns the first device index (starting at 0) that uses the same sat cable number as the device with...
Definition: config.c:116
virtual int Compare(const cListObject &ListObject) const override
Must return 0 if this object is equal to ListObject, a positive value if it is "greater",...
Definition: config.c:325
char * plugin
Definition: config.h:245
const char * Plugin(void)
Definition: config.h:253
const char * Value(void)
Definition: config.h:255
cSetupLine(void)
Definition: config.c:306
virtual ~cSetupLine() override
Definition: config.c:318
bool Save(FILE *f)
Definition: config.c:365
bool Parse(char *s)
Definition: config.c:340
char * value
Definition: config.h:247
char * name
Definition: config.h:246
const char * Name(void)
Definition: config.h:254
Definition: config.h:260
int __EndData__
Definition: config.h:383
int DefaultLifetime
Definition: config.h:319
int VolumeSteps
Definition: config.h:376
int EmergencyExit
Definition: config.h:382
int SplitEditedFiles
Definition: config.h:355
int RcRepeatDelay
Definition: config.h:317
int ColorKey3
Definition: config.h:332
int MenuScrollPage
Definition: config.h:279
int EPGBugfixLevel
Definition: config.h:309
int ColorKey2
Definition: config.h:332
int VideoDisplayFormat
Definition: config.h:333
int SubtitleFgTransparency
Definition: config.h:304
int MinUserInactivity
Definition: config.h:357
int CurrentVolume
Definition: config.h:375
int AntiAlias
Definition: config.h:344
int FontFixSize
Definition: config.h:353
int ShowInfoOnChSwitch
Definition: config.h:277
int SkipSecondsRepeat
Definition: config.h:372
int StandardCompliance
Definition: config.h:298
char SVDRPDefaultHost[HOST_NAME_MAX]
Definition: config.h:314
int CurrentChannel
Definition: config.h:374
bool Save(void)
Definition: config.c:738
int TimeoutRequChInfo
Definition: config.h:278
int ResumeID
Definition: config.h:373
char OSDTheme[MaxThemeName]
Definition: config.h:275
int SubtitleLanguages[I18N_MAX_LANGUAGES+1]
Definition: config.h:302
int SVDRPTimeout
Definition: config.h:311
int OSDHeight
Definition: config.h:340
int LnbSLOF
Definition: config.h:285
int EPGLanguages[I18N_MAX_LANGUAGES+1]
Definition: config.h:305
char OSDSkin[MaxSkinName]
Definition: config.h:274
int UsePositioner
Definition: config.h:289
int AlwaysSortFoldersFirst
Definition: config.h:328
int AdaptiveSkipInitial
Definition: config.h:367
int RecSortingDirection
Definition: config.h:330
int VpsMargin
Definition: config.h:325
double OSDAspect
Definition: config.h:341
char OSDLanguage[I18N_MAX_LOCALE_LEN]
Definition: config.h:273
int ShowChannelNamesWithSource
Definition: config.h:381
int DefaultPriority
Definition: config.h:319
int ZapTimeout
Definition: config.h:315
double OSDWidthP
Definition: config.h:339
int RecordKeyHandling
Definition: config.h:320
int PauseKeyHandling
Definition: config.h:321
double OSDHeightP
Definition: config.h:339
int PositionerSpeed
Definition: config.h:292
cSetup & operator=(const cSetup &s)
Definition: config.c:504
int MarginStart
Definition: config.h:299
bool Parse(const char *Name, const char *Value)
Definition: config.c:604
double FontOsdSizeP
Definition: config.h:348
int PauseAtLastMark
Definition: config.h:366
int AdaptiveSkipPrevNext
Definition: config.h:370
int FontOsdSize
Definition: config.h:351
int LnbFrequLo
Definition: config.h:286
bool Load(const char *FileName)
Definition: config.c:544
int EPGPauseAfterScan
Definition: config.h:307
int FontSmlSize
Definition: config.h:352
int UseSmallFont
Definition: config.h:343
int SubtitleOffset
Definition: config.h:303
int MarginStop
Definition: config.h:299
cSetupLine * Get(const char *Name, const char *Plugin=NULL)
Definition: config.c:512
int SVDRPPeering
Definition: config.h:312
int ProgressDisplayTime
Definition: config.h:362
int UpdateChannels
Definition: config.h:335
int SkipSeconds
Definition: config.h:371
int SubtitleBgTransparency
Definition: config.h:304
int ColorKey0
Definition: config.h:332
int FoldersInTimerMenu
Definition: config.h:327
int MenuScrollWrap
Definition: config.h:280
int EPGLinger
Definition: config.h:310
int ShowReplayMode
Definition: config.h:360
cSetup(void)
Definition: config.c:374
int SiteLon
Definition: config.h:291
int OSDTop
Definition: config.h:340
int AdaptiveSkipAlternate
Definition: config.h:369
int UseVps
Definition: config.h:324
time_t NextWakeupTime
Definition: config.h:358
void StoreLanguages(const char *Name, int *Values)
Definition: config.c:569
int DisplaySubtitles
Definition: config.h:301
bool ParseLanguages(const char *Value, int *Values)
Definition: config.c:588
int ChannelInfoTime
Definition: config.h:338
int SiteLat
Definition: config.h:290
int VolumeLinearize
Definition: config.h:377
int ChannelsWrap
Definition: config.h:380
int EPGScanMaxChannel
Definition: config.h:306
double FontFixSizeP
Definition: config.h:350
int AudioLanguages[I18N_MAX_LANGUAGES+1]
Definition: config.h:300
int OSDMessageTime
Definition: config.h:342
int MarkInstantRecord
Definition: config.h:282
double OSDLeftP
Definition: config.h:339
int RecordingDirs
Definition: config.h:326
int PausePriority
Definition: config.h:322
double FontSmlSizeP
Definition: config.h:349
int OSDLeft
Definition: config.h:340
int AdaptiveSkipTimeout
Definition: config.h:368
int MenuKeyCloses
Definition: config.h:281
int DiSEqC
Definition: config.h:288
char NameInstantRecord[NAME_MAX+1]
Definition: config.h:283
char FontOsd[MAXFONTNAME]
Definition: config.h:345
int UseSubtitle
Definition: config.h:323
int OSDWidth
Definition: config.h:340
int MinEventTimeout
Definition: config.h:357
int ChannelInfoPos
Definition: config.h:337
int LnbFrequHi
Definition: config.h:287
void Store(const char *Name, const char *Value, const char *Plugin=NULL, bool AllowMultiple=false)
Definition: config.c:523
char FontSml[MAXFONTNAME]
Definition: config.h:346
int MultiSpeedMode
Definition: config.h:359
int __BeginData__
Definition: config.h:272
int EPGScanTimeout
Definition: config.h:308
int TimeTransponder
Definition: config.h:297
int VideoFormat
Definition: config.h:334
int MaxVideoFileSize
Definition: config.h:354
cString DeviceBondings
Definition: config.h:385
int PositionerSwing
Definition: config.h:293
double OSDTopP
Definition: config.h:339
int PositionerLastLon
Definition: config.h:294
int PauseOnMarkSet
Definition: config.h:363
int DelTimeshiftRec
Definition: config.h:356
int SetSystemTime
Definition: config.h:295
int PrimaryDVB
Definition: config.h:276
int ChannelEntryTimeout
Definition: config.h:316
char FontFix[MAXFONTNAME]
Definition: config.h:347
int TimeSource
Definition: config.h:296
int UseDolbyDigital
Definition: config.h:336
int PauseOnMarkJump
Definition: config.h:364
int ColorKey1
Definition: config.h:332
int ShowRemainingTime
Definition: config.h:361
int CurrentDolby
Definition: config.h:378
cString InitialChannel
Definition: config.h:384
int DefaultSortModeRec
Definition: config.h:329
char SVDRPHostName[HOST_NAME_MAX]
Definition: config.h:313
int RcRepeatDelta
Definition: config.h:318
int InstantRecordTime
Definition: config.h:284
int NumberKeysForChars
Definition: config.h:331
int SkipEdited
Definition: config.h:365
int PauseLifetime
Definition: config.h:322
int InitialVolume
Definition: config.h:379
static int FromString(const char *s)
Definition: sources.c:65
static cString ToString(int Code)
Definition: sources.c:52
Definition: tools.h:178
static cString sprintf(const char *fmt,...) __attribute__((format(printf
Definition: tools.c:1195
int Size(void) const
Definition: tools.h:754
#define ChkDoublePlausibility(Variable, Default)
Definition: config.c:24
cNestedItemList Commands
Definition: config.c:275
cSetup Setup
Definition: config.c:372
cSVDRPhosts SVDRPhosts
Definition: config.c:280
cNestedItemList Folders
Definition: config.c:274
cNestedItemList RecordingCommands
Definition: config.c:276
#define MaxSkinName
Definition: config.h:69
#define SUBTITLES_NO
Definition: config.h:85
#define STANDARD_DVB
Definition: config.h:79
#define MAXLIFETIME
Definition: config.h:50
uint32_t in_addr_t
Definition: config.h:89
#define TIMERMACRO_EPISODE
Definition: config.h:54
#define DEFINSTRECTIME
Definition: config.h:51
#define MaxThemeName
Definition: config.h:70
#define TIMERMACRO_TITLE
Definition: config.h:53
#define MAXVOLUME
Definition: device.h:32
const char * DefaultFontOsd
Definition: font.c:24
const char * DefaultFontSml
Definition: font.c:25
const char * DefaultFontFix
Definition: font.c:26
#define MAXFONTNAME
Definition: font.h:17
const char * I18nLanguageCode(int Language)
Returns the three letter language code of the given Language (which is an index as returned by I18nCu...
Definition: i18n.c:271
int I18nLanguageIndex(const char *Code)
Returns the index of the language with the given three letter language Code.
Definition: i18n.c:276
const cStringList * I18nLanguages(void)
Returns the list of available languages.
Definition: i18n.c:249
void I18nSetLocale(const char *Locale)
Sets the current locale to Locale.
Definition: i18n.c:217
#define MAXVIDEOFILESIZEDEFAULT
Definition: recording.h:484
@ rsmTime
Definition: recording.h:587
@ rsdAscending
Definition: recording.h:586
Definition: runvdr.c:107
bool isempty(const char *s)
Definition: tools.c:357
char * Utf8Strn0Cpy(char *Dest, const char *Src, int n)
Copies at most n character bytes from Src to Dest, making sure that the resulting copy ends with a co...
Definition: tools.c:915
cString dtoa(double d, const char *Format)
Converts the given double value to a string, making sure it uses a '.
Definition: tools.c:440
double atod(const char *s)
Converts the given string, which is a floating point number using a '.
Definition: tools.c:419
char * strreplace(char *s, char c1, char c2)
Definition: tools.c:142
const char * GetHostName(void)
Gets the host name of this machine.
Definition: tools.c:1409
char * stripspace(char *s)
Definition: tools.c:227
char * strn0cpy(char *dest, const char *src, size_t n)
Definition: tools.c:131
char * compactspace(char *s)
Definition: tools.c:239
char * skipspace(const char *s)
Definition: tools.h:244
#define LOG_ERROR_STR(s)
Definition: tools.h:40
#define MALLOC(type, size)
Definition: tools.h:47
#define esyslog(a...)
Definition: tools.h:35
#define isyslog(a...)
Definition: tools.h:36