AmiTimeKeeper/setting.h

130 lines
3.7 KiB
C

/*-
* Copyright (c) 2017-2021 Carsten Sonne Larsen <cs@innolan.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef SETTING_H_INCLUDED
#define SETTING_H_INCLUDED
#include "config.h"
#include "locale.h"
#define PrioritySet 0x0001
#define TimeoutSet 0x0002
#define IntervalSet 0x0004
#define ReadonlySet 0x0008
#define ExpertSet 0x0010
#define DestinationAddressSet 0x0020
#define DestinationPortSet 0x0040
#define ThresholdSet 0x0080
#define PopKeySet 0x0100
#define PopUpSet 0x0200
#define ActiveSet 0x0400
#define NoLogSet 0x0800
#define TzSet 0x1000
#define TimeZoneDisplaySet 0x2000
#define TimeZoneNameSet 0x4000
#define TimeZoneValueSet 0x8000
#define TimeZoneDstSet 0x10000
#define DefaultSettingType 0x01
#define PrefsSettingType 0x02
#define CliSettingType 0x03
#define WbSettingType 0x04
#define GlobalSettingType 0x10
struct AppSettings
{
long Priority;
long Timeout;
long Interval;
long Readonly;
long Expert;
long long Threshold;
char *DestinationAddress;
char *DestinationPort;
char *PopKey;
long Popup;
long Active;
long NoLog;
char *TZ;
long TimeZoneDisplay;
char *TimeZoneName;
long TimeZoneValue;
long TimeZoneDst;
long Values;
long Type;
long PopupOnStart;
};
struct AppSettingKeys
{
const char *Priority;
const char *Timeout;
const char *Interval;
const char *Readonly;
const char *Expert;
const char *DestinationAddress;
const char *DestinationPort;
const char *Threshold;
const char *PopKey;
const char *Popup;
const char *Active;
const char *NoLog;
const char *TZ;
const char *TimeZoneDisplay;
const char *TimeZoneName;
const char *TimeZoneValue;
const char *TimeZoneDst;
const char *PopupOnStart;
};
typedef void (*ParseSettingFunction)(struct AppSettings *, void *);
struct SettingFunc
{
const char *Name;
ParseSettingFunction Function;
};
extern struct AppSettings *Settings;
extern struct AppSettingKeys *SettingKeys;
extern const struct SettingFunc settingFunctions[];
extern const struct AppSettings DefaultSettings;
void InitSettings(void);
void CleanupSettings(void);
void ShowSettings(void);
void LoadSettings(void);
void SaveSettings(bool);
struct AppSettings *CreateSettings(long);
struct AppSettings *CopySettings(const struct AppSettings *);
void ApplyAppSettings(struct AppSettings *, bool);
void FreeSettings(struct AppSettings *);
void CacheSettings(struct AppSettings *);
void ApplySettings(void);
#endif