apple2ix/src/prefs.h

149 lines
5.4 KiB
C

/*
* Apple // emulator for *ix
*
* This software package is subject to the GNU General Public License
* version 3 or later (your choice) as published by the Free Software
* Foundation.
*
* Copyright 1994 Alexander Jean-Claude Bottema
* Copyright 1995 Stephen Lee
* Copyright 1997, 1998 Aaron Culliney
* Copyright 1998, 1999, 2000 Michael Deutschmann
* Copyright 2013-2016 Aaron Culliney
*
*/
#ifndef _PREFS_H_
#define _PREFS_H_
#include "common.h"
// pref domains
#define PREF_DOMAIN_AUDIO "audio"
#define PREF_DOMAIN_INTERFACE "interface"
#define PREF_DOMAIN_JOYSTICK "joystick"
#define PREF_DOMAIN_KEYBOARD "keyboard"
#define PREF_DOMAIN_TOUCHSCREEN "touchscreen"
#define PREF_DOMAIN_VIDEO "video"
#define PREF_DOMAIN_VM "vm"
// audio
#define PREF_MOCKINGBOARD_ENABLED "mbEnabled"
#define PREF_MOCKINGBOARD_VOLUME "mbVolume"
#define PREF_SPEAKER_VOLUME "speakerVolume"
#define PREF_AUDIO_LATENCY "audioLatency"
// interface
#define PREF_DEVICE_HEIGHT "deviceHeight"
#define PREF_DEVICE_WIDTH "deviceWidth"
#define PREF_DEVICE_LANDSCAPE "landscapeEnabled"
#define PREF_DISK_PATH "diskPath"
#define PREF_DISK_ANIMATIONS_ENABLED "diskAnimationsEnabled"
#define PREF_DISK_FAST_LOADING "diskFastLoading"
#define PREF_SOFTHUD_COLOR "hudColorMode"
// joystick
#define PREF_JOYSTICK_KPAD_AUTO_RECENTER "kpAutoRecenter"
#define PREF_JOYSTICK_KPAD_STEP "kpStep"
#define PREF_JOYSTICK_MODE "joystickMode"
#define PREF_JOYSTICK_CLIP_TO_RADIUS "clipToRadius"
// joystick (touchscreen)
#define PREF_AXIS_ON_LEFT "axisIsOnLeft"
#define PREF_AXIS_SENSITIVITY "axisSensitivity"
#define PREF_JOY_SWIPE_NORTH_CHAR "jsSwipeNorthChar"
#define PREF_JOY_SWIPE_SOUTH_CHAR "jsSwipeSouthChar"
#define PREF_JOY_SWIPE_WEST_CHAR "jsSwipeWestChar"
#define PREF_JOY_SWIPE_EAST_CHAR "jsSwipeEastChar"
#define PREF_JOY_TAP_DELAY "jsTapDelayFrames"
#define PREF_JOY_TOUCHDOWN_CHAR "jsTouchDownChar"
#define PREF_KPAD_FAST_AUTOREPEAT "kpFastAutoRepeat"
#define PREF_KPAD_AXIS_ROSETTE "kpAxisRosette"
#define PREF_KPAD_BUTT_ROSETTE "kpButtRosette"
#define PREF_SCREEN_DIVISION "screenDivider"
#define PREF_SHOW_CONTROLS "showControls"
#define PREF_SWITCH_THRESHOLD "switchThreshold"
// keyboard
#define PREF_GLYPH_MULTIPLIER "glyphMultiplier"
#define PREF_KEYBOARD_CAPS "caps"
#define PREF_KEYBOARD_ALT_PATH "altPath"
#define PREF_KEYBOARD_VARIANT "variant"
#define PREF_KEYBOARD_DUO_TOUCH "duoTouchEnabled"
#define PREF_LOWERCASE_ENABLED "lowercaseEnabled"
#define PREF_PORTRAIT_HEIGHT_SCALE "portraitHeightScale"
#define PREF_PORTRAIT_POSITION_SCALE "portraitPositionScale"
// touchscreen
#define PREF_CALIBRATING "isCalibrating"
#define PREF_MAX_ALPHA "maxAlpha"
#define PREF_MIN_ALPHA "minAlpha"
#define PREF_SCREEN_OWNER "screenOwner"
#define PREF_TOUCHMENU_ENABLED "touchMenuEnabled"
// video
#define PREF_COLOR_MODE "colorMode"
#define PREF_MONO_MODE "monoMode"
#define PREF_SHOW_HALF_SCANLINES "showHalfScanlines"
// vm
#define PREF_CPU_SCALE "cpuScale"
#define PREF_CPU_SCALE_ALT "cpuScaleAlt"
#define PREF_DISK_PATH_A "driveAInsertedDisk"
#define PREF_DISK_PATH_A_RO "driveAInsertedDiskRO"
#define PREF_DISK_PATH_B "driveBInsertedDisk"
#define PREF_DISK_PATH_B_RO "driveBInsertedDiskRO"
typedef void (*prefs_change_callback_f)(const char * _NONNULL domain);
// load preferences from persistent store
extern void prefs_load(void);
#if TESTING
extern void prefs_load_file(const char *filePath);
#endif
// load preferences from JSON string
extern void prefs_loadString(const char * _NONNULL jsonString);
// save preferences to persistent store
extern bool prefs_save(void);
// copy string value for key in prefs domain, returns true upon success and strdup()'d value in *val
extern bool prefs_copyStringValue(const char * _NONNULL domain, const char * _NONNULL key, INOUT char ** _NONNULL val);
// create JSON_ref value for key in prefs domain, returns true upon success and newly allocated value in jsonVal
extern bool prefs_copyJSONValue(const char * _NONNULL domain, const char * _NONNULL key, INOUT JSON_ref *jsonVal);
// get long value for key in prefs domain, returns true upon success
extern bool prefs_parseLongValue(const char * _NONNULL domain, const char * _NONNULL key, INOUT long *val, const long base);
// get long value for key in prefs domain, returns true upon success
extern bool prefs_parseBoolValue(const char * _NONNULL domain, const char * _NONNULL key, INOUT bool *val);
// get float value for key in prefs domain, returns true upon success
extern bool prefs_parseFloatValue(const char * _NONNULL domain, const char *key, INOUT float * _NONNULL val);
// set string value for key in prefs domain
extern bool prefs_setStringValue(const char *domain, const char * _NONNULL key, const char * _NONNULL val);
// set long value for key in prefs domain
extern bool prefs_setLongValue(const char * _NONNULL domain, const char * _NONNULL key, long val);
// set bool value for key in map JSON, returns true upon success
extern bool prefs_setBoolValue(const char * _NONNULL domain, const char * _NONNULL key, bool val);
// set float value for key in prefs domain
extern bool prefs_setFloatValue(const char * _NONNULL domain, const char * _NONNULL key, float val);
// register a preferences listener for a particular domain
extern void prefs_registerListener(const char * _NONNULL domain, _NONNULL prefs_change_callback_f callback);
// send change notification to all domain listeners
extern void prefs_sync(const char * _NULLABLE domain);
// cleans up and removes listener in preparation for app shutdown
extern void prefs_shutdown(void);
#endif