vdr 2.7.9
config.h
Go to the documentation of this file.
1/*
2 * config.h: 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.h 5.39 2026/02/06 09:52:22 kls Exp $
8 */
9
10#ifndef __CONFIG_H
11#define __CONFIG_H
12
13#include <arpa/inet.h>
14#include <stdio.h>
15#include <stdlib.h>
16#include <string.h>
17#include <time.h>
18#include <unistd.h>
19#include "i18n.h"
20#include "font.h"
21#include "tools.h"
22
23// VDR's own version number:
24
25#define VDRVERSION "2.7.9"
26#define VDRVERSNUM 20709 // Version * 10000 + Major * 100 + Minor
27
28// The plugin API's version number:
29
30#define APIVERSION "11"
31#define APIVERSNUM 30011
32
33// When loading plugins, VDR searches files by their APIVERSION, which
34// is different from VDRVERSION. APIVERSION is a plain number, incremented
35// only when there are changes to the plugin API. This allows compiled
36// plugins to work with newer versions of the core VDR as long as no
37// interfaces have changed. APIVERSNUM begins with "300.." for backwards
38// compatibility and can be used in #if preprocessor statements to handle
39// version dependent code.
40
41// The MainMenuHook Patch's version number:
42#define MAINMENUHOOKSVERSION "1.0.1"
43#define MAINMENUHOOKSVERSNUM 10001 // Version * 10000 + Major * 100 + Minor
44
45#define MAXPRIORITY 99
46#define MINPRIORITY (-MAXPRIORITY)
47#define LIVEPRIORITY 0 // priority used when selecting a device for live viewing
48#define TRANSFERPRIORITY (LIVEPRIORITY - 1) // priority used for actual local Transfer Mode
49#define IDLEPRIORITY (MINPRIORITY - 1) // priority of an idle device
50#define MAXLIFETIME 99
51#define DEFINSTRECTIME 180 // default instant recording time (minutes)
52#define DEFRETENTIONTIME 0 // default deleted recording retention time (days)
53
54#define TIMERMACRO_TITLE "TITLE"
55#define TIMERMACRO_EPISODE "EPISODE"
56#define TIMERMACRO_BEFORE "{<}"
57#define TIMERMACRO_MATCH "{=}"
58#define TIMERMACRO_AFTER "{>}"
59
60#define TIMERPATTERN_AVOID "@"
61#define TIMERPATTERN_BEGIN "^"
62#define TIMERPATTERN_END "$"
63
64#define MINOSDWIDTH 480
65#define MAXOSDWIDTH 1920
66#define MINOSDHEIGHT 324
67#define MAXOSDHEIGHT 1200
68
69#define MaxFileName NAME_MAX // obsolete - use NAME_MAX directly instead!
70#define MaxSkinName 16
71#define MaxThemeName 16
72
73// Basically VDR works according to the DVB standard, but there are countries/providers
74// that use other standards, which in some details deviate from the DVB standard.
75// This makes it necessary to handle things differently in some areas, depending on
76// which standard is actually used. The following macros are used to distinguish
77// these cases (make sure to adjust cMenuSetupDVB::standardComplianceTexts accordingly
78// when adding a new standard):
79
80#define STANDARD_DVB 0
81#define STANDARD_ANSISCTE 1
82#define STANDARD_NORDIG 2
83
84// Automatic subtitles:
85
86#define SUBTITLES_NO 0
87#define SUBTITLES_ALWAYS 1
88#define SUBTITLES_REWIND 2
89
90typedef uint32_t in_addr_t; //XXX from /usr/include/netinet/in.h (apparently this is not defined on systems with glibc < 2.2)
91
92class cSVDRPhost : public cListObject {
93private:
94 struct in_addr addr;
96public:
97 cSVDRPhost(void);
98 bool Parse(const char *s);
99 bool IsLocalhost(void);
100 bool Accepts(in_addr_t Address);
101 };
102
104private:
105 int size;
106 int *array;
107public:
108 cSatCableNumbers(int Size, const char *s = NULL);
110 int Size(void) const { return size; }
111 int *Array(void) { return array; }
112 bool FromString(const char *s);
113 cString ToString(void);
114 int FirstDeviceIndex(int DeviceIndex) const;
120 };
121
122template<class T> class cConfig : public cList<T> {
123private:
124 char *fileName;
126 void Clear(void)
127 {
128 free(fileName);
129 fileName = NULL;
131 }
132public:
133 cConfig(const char *NeedsLocking = NULL): cList<T>(NeedsLocking) { fileName = NULL; }
134 virtual ~cConfig() override { free(fileName); }
135 const char *FileName(void) { return fileName; }
136 bool Load(const char *FileName = NULL, bool AllowComments = false, bool MustExist = false)
137 {
139 if (FileName) {
140 free(fileName);
141 fileName = strdup(FileName);
142 allowComments = AllowComments;
143 }
144 bool result = !MustExist;
145 if (fileName && access(fileName, F_OK) == 0) {
146 isyslog("loading %s", fileName);
147 FILE *f = fopen(fileName, "r");
148 if (f) {
149 char *s;
150 int line = 0;
151 cReadLine ReadLine;
152 result = true;
153 while ((s = ReadLine.Read(f)) != NULL) {
154 line++;
155 if (allowComments) {
156 char *p = strchr(s, '#');
157 if (p)
158 *p = 0;
159 }
160 stripspace(s);
161 if (!isempty(s)) {
162 T *l = new T;
163 if (l->Parse(s))
164 this->Add(l);
165 else {
166 esyslog("ERROR: error in %s, line %d", fileName, line);
167 delete l;
168 result = false;
169 }
170 }
171 }
172 fclose(f);
173 }
174 else {
176 result = false;
177 }
178 }
179 if (!result)
180 fprintf(stderr, "vdr: error while reading '%s'\n", fileName);
181 return result;
182 }
183 bool Save(void) const
184 {
185 bool result = true;
186 T *l = (T *)this->First();
188 if (f.Open()) {
189 while (l) {
190 if (!l->Save(f)) {
191 result = false;
192 break;
193 }
194 l = (T *)l->Next();
195 }
196 if (!f.Close())
197 result = false;
198 }
199 else
200 result = false;
201 return result;
202 }
203 };
204
205class cNestedItem : public cListObject {
206private:
207 char *text;
209public:
210 cNestedItem(const char *Text, bool WithSubItems = false);
211 virtual ~cNestedItem() override;
212 virtual int Compare(const cListObject &ListObject) const override;
213 const char *Text(void) const { return text; }
215 void AddSubItem(cNestedItem *Item);
216 void SetText(const char *Text);
217 void SetSubItems(bool On);
218 };
219
220class cNestedItemList : public cList<cNestedItem> {
221private:
222 char *fileName;
223 bool Parse(FILE *f, cList<cNestedItem> *List, int &Line);
224 bool Write(FILE *f, cList<cNestedItem> *List, int Indent = 0);
225public:
226 cNestedItemList(void);
227 virtual ~cNestedItemList() override;
228 void Clear(void);
229 bool Load(const char *FileName);
230 bool Save(void);
231 };
232
233class cSVDRPhosts : public cConfig<cSVDRPhost> {
234public:
235 bool LocalhostOnly(void);
236 bool Acceptable(in_addr_t Address);
237 };
238
243
244class cSetupLine : public cListObject {
245private:
246 char *plugin;
247 char *name;
248 char *value;
249public:
250 cSetupLine(void);
251 cSetupLine(const char *Name, const char *Value, const char *Plugin = NULL);
252 virtual ~cSetupLine() override;
253 virtual int Compare(const cListObject &ListObject) const override;
254 const char *Plugin(void) { return plugin; }
255 const char *Name(void) { return name; }
256 const char *Value(void) { return value; }
257 bool Parse(char *s);
258 bool Save(FILE *f);
259 };
260
261class cSetup : public cConfig<cSetupLine> {
262 friend class cPlugin; // needs to be able to call Store()
263private:
264 void StoreLanguages(const char *Name, int *Values);
265 bool ParseLanguages(const char *Value, int *Values);
266 bool Parse(const char *Name, const char *Value);
267 cSetupLine *Get(const char *Name, const char *Plugin = NULL);
268 void Store(const char *Name, const char *Value, const char *Plugin = NULL, bool AllowMultiple = false);
269 void Store(const char *Name, int Value, const char *Plugin = NULL);
270 void Store(const char *Name, double &Value, const char *Plugin = NULL);
271public:
272 // Also adjust cMenuSetup (menu.c) when adding parameters here!
284 char NameInstantRecord[NAME_MAX + 1];
314 char SVDRPHostName[HOST_NAME_MAX];
315 char SVDRPDefaultHost[HOST_NAME_MAX];
343 double OSDAspect;
389 cSetup(void);
390 cSetup& operator= (const cSetup &s);
391 bool Load(const char *FileName);
392 bool Save(void);
393 };
394
395extern cSetup Setup;
396
397#endif //__CONFIG_H
bool Save(void) const
Definition config.h:183
virtual ~cConfig() override
Definition config.h:134
void Clear(void)
Definition config.h:126
cConfig(const char *NeedsLocking=NULL)
Definition config.h:133
char * fileName
Definition config.h:124
const char * FileName(void)
Definition config.h:135
bool allowComments
Definition config.h:125
bool Load(const char *FileName=NULL, bool AllowComments=false, bool MustExist=false)
Definition config.h:136
virtual void Clear(void)
Definition tools.c:2271
void Add(cListObject *Object, cListObject *After=NULL)
Definition tools.c:2194
cListObject(const cListObject &ListObject)
Definition tools.h:547
Definition tools.h:644
const T * First(void) const
Returns the first element in this list, or NULL if the list is empty.
Definition tools.h:656
cList(const char *NeedsLocking=NULL)
Sets up a new cList of the given type T.
Definition tools.h:646
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:222
cNestedItemList(void)
Definition config.c:174
void SetText(const char *Text)
Definition config.c:156
char * text
Definition config.h:207
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(void)
Definition config.h:214
cList< cNestedItem > * subItems
Definition config.h:208
const char * Text(void) const
Definition config.h:213
char * Read(FILE *f)
Definition tools.c:1544
bool Parse(const char *s)
Definition config.c:34
in_addr_t mask
Definition config.h:95
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:94
bool LocalhostOnly(void)
Definition config.c:282
bool Acceptable(in_addr_t Address)
Definition config.c:293
bool Open(void)
Definition tools.c:1778
bool Close(void)
Definition tools.c:1788
cSatCableNumbers(int Size, const char *s=NULL)
Definition config.c:69
int Size(void) const
Definition config.h:110
bool FromString(const char *s)
Definition config.c:81
int * Array(void)
Definition config.h:111
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:246
const char * Name(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
const char * Plugin(void)
Definition config.h:254
const char * Value(void)
Definition config.h:256
bool Parse(char *s)
Definition config.c:340
char * value
Definition config.h:248
char * name
Definition config.h:247
int __EndData__
Definition config.h:386
int DefaultLifetime
Definition config.h:321
int VolumeSteps
Definition config.h:379
int EmergencyExit
Definition config.h:385
int SplitEditedFiles
Definition config.h:357
int RcRepeatDelay
Definition config.h:318
int ColorKey3
Definition config.h:334
int MenuScrollPage
Definition config.h:280
int EPGBugfixLevel
Definition config.h:310
int ColorKey2
Definition config.h:334
int VideoDisplayFormat
Definition config.h:335
int SubtitleFgTransparency
Definition config.h:305
int MinUserInactivity
Definition config.h:360
int CurrentVolume
Definition config.h:378
int AntiAlias
Definition config.h:346
int FontFixSize
Definition config.h:355
int ShowInfoOnChSwitch
Definition config.h:278
int DeleteRetention
Definition config.h:320
int SkipSecondsRepeat
Definition config.h:375
int StandardCompliance
Definition config.h:299
char SVDRPDefaultHost[HOST_NAME_MAX]
Definition config.h:315
int CurrentChannel
Definition config.h:377
bool Save(void)
Definition config.c:742
int TimeoutRequChInfo
Definition config.h:279
int ResumeID
Definition config.h:376
char OSDTheme[MaxThemeName]
Definition config.h:276
int SubtitleLanguages[I18N_MAX_LANGUAGES+1]
Definition config.h:303
int SVDRPTimeout
Definition config.h:312
int OSDHeight
Definition config.h:342
int LnbSLOF
Definition config.h:286
int EPGLanguages[I18N_MAX_LANGUAGES+1]
Definition config.h:306
char OSDSkin[MaxSkinName]
Definition config.h:275
int UsePositioner
Definition config.h:290
int AlwaysSortFoldersFirst
Definition config.h:330
int AdaptiveSkipInitial
Definition config.h:370
int RecSortingDirection
Definition config.h:332
int VpsMargin
Definition config.h:327
double OSDAspect
Definition config.h:343
char OSDLanguage[I18N_MAX_LOCALE_LEN]
Definition config.h:274
int ShowChannelNamesWithSource
Definition config.h:384
int DefaultPriority
Definition config.h:321
int ZapTimeout
Definition config.h:316
double OSDWidthP
Definition config.h:341
int RecordKeyHandling
Definition config.h:322
int PauseKeyHandling
Definition config.h:323
double OSDHeightP
Definition config.h:341
int DumpNaluFill
Definition config.h:359
int PositionerSpeed
Definition config.h:293
cSetup & operator=(const cSetup &s)
Definition config.c:506
int MarginStart
Definition config.h:300
bool Parse(const char *Name, const char *Value)
Definition config.c:606
double FontOsdSizeP
Definition config.h:350
int PauseAtLastMark
Definition config.h:369
int AdaptiveSkipPrevNext
Definition config.h:373
int FontOsdSize
Definition config.h:353
int LnbFrequLo
Definition config.h:287
bool Load(const char *FileName)
Definition config.c:546
friend class cPlugin
Definition config.h:262
int EPGPauseAfterScan
Definition config.h:308
int FontSmlSize
Definition config.h:354
int UseSmallFont
Definition config.h:345
int SubtitleOffset
Definition config.h:304
int MarginStop
Definition config.h:300
cSetupLine * Get(const char *Name, const char *Plugin=NULL)
Definition config.c:514
int SVDRPPeering
Definition config.h:313
int ProgressDisplayTime
Definition config.h:365
int UpdateChannels
Definition config.h:337
int SkipSeconds
Definition config.h:374
int SubtitleBgTransparency
Definition config.h:305
int ColorKey0
Definition config.h:334
int FoldersInTimerMenu
Definition config.h:329
int MenuScrollWrap
Definition config.h:281
int EPGLinger
Definition config.h:311
int ShowReplayMode
Definition config.h:363
cSetup(void)
Definition config.c:374
int SiteLon
Definition config.h:292
int OSDTop
Definition config.h:342
int AdaptiveSkipAlternate
Definition config.h:372
int UseVps
Definition config.h:326
time_t NextWakeupTime
Definition config.h:361
void StoreLanguages(const char *Name, int *Values)
Definition config.c:571
int DisplaySubtitles
Definition config.h:302
bool ParseLanguages(const char *Value, int *Values)
Definition config.c:590
int ChannelInfoTime
Definition config.h:340
int SiteLat
Definition config.h:291
int VolumeLinearize
Definition config.h:380
int ChannelsWrap
Definition config.h:383
int EPGScanMaxChannel
Definition config.h:307
double FontFixSizeP
Definition config.h:352
int AudioLanguages[I18N_MAX_LANGUAGES+1]
Definition config.h:301
int OSDMessageTime
Definition config.h:344
int MarkInstantRecord
Definition config.h:283
double OSDLeftP
Definition config.h:341
int RecordingDirs
Definition config.h:328
int PausePriority
Definition config.h:324
double FontSmlSizeP
Definition config.h:351
int OSDLeft
Definition config.h:342
int AdaptiveSkipTimeout
Definition config.h:371
int MenuKeyCloses
Definition config.h:282
int DiSEqC
Definition config.h:289
char NameInstantRecord[NAME_MAX+1]
Definition config.h:284
char FontOsd[MAXFONTNAME]
Definition config.h:347
int UseSubtitle
Definition config.h:325
int OSDWidth
Definition config.h:342
int MinEventTimeout
Definition config.h:360
int ChannelInfoPos
Definition config.h:339
int LnbFrequHi
Definition config.h:288
void Store(const char *Name, const char *Value, const char *Plugin=NULL, bool AllowMultiple=false)
Definition config.c:525
char FontSml[MAXFONTNAME]
Definition config.h:348
int MultiSpeedMode
Definition config.h:362
int __BeginData__
Definition config.h:273
int EPGScanTimeout
Definition config.h:309
int TimeTransponder
Definition config.h:298
int VideoFormat
Definition config.h:336
int MaxVideoFileSize
Definition config.h:356
cString DeviceBondings
Definition config.h:388
int PositionerSwing
Definition config.h:294
double OSDTopP
Definition config.h:341
int PositionerLastLon
Definition config.h:295
int PauseOnMarkSet
Definition config.h:366
int DelTimeshiftRec
Definition config.h:358
int SetSystemTime
Definition config.h:296
int PrimaryDVB
Definition config.h:277
int ChannelEntryTimeout
Definition config.h:317
char FontFix[MAXFONTNAME]
Definition config.h:349
int TimeSource
Definition config.h:297
int UseDolbyDigital
Definition config.h:338
int PauseOnMarkJump
Definition config.h:367
int ColorKey1
Definition config.h:334
int ShowRemainingTime
Definition config.h:364
int CurrentDolby
Definition config.h:381
cString InitialChannel
Definition config.h:387
int DefaultSortModeRec
Definition config.h:331
char SVDRPHostName[HOST_NAME_MAX]
Definition config.h:314
int RcRepeatDelta
Definition config.h:319
int InstantRecordTime
Definition config.h:285
int NumberKeysForChars
Definition config.h:333
int SkipEdited
Definition config.h:368
int PauseLifetime
Definition config.h:324
int InitialVolume
Definition config.h:382
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:70
uint32_t in_addr_t
Definition config.h:90
#define MaxThemeName
Definition config.h:71
#define MAXFONTNAME
Definition font.h:17
#define I18N_MAX_LOCALE_LEN
Definition i18n.h:17
#define I18N_MAX_LANGUAGES
Definition i18n.h:18
Definition runvdr.c:107
bool isempty(const char *s)
Definition tools.c:357
cString Indent(int n, const char *s)
Returns the given string s, preceeded with n blanks for indentation.
Definition tools.c:410
char * stripspace(char *s)
Definition tools.c:227
#define LOG_ERROR_STR(s)
Definition tools.h:40
#define esyslog(a...)
Definition tools.h:35
#define isyslog(a...)
Definition tools.h:36