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