/*** external declarations for settings ***/

/* the toggles */
typedef struct {
	BOOL	pos;		/* position of toggle (ie. off or on) */
	UWORD	gadid;		/* index to CheckBox gadget array */
} TOGGLEDATA;

#define NUM_TOGGLES	11
extern TOGGLEDATA toggles[NUM_TOGGLES];

#define clicktofront	toggles[0].pos	/* window depth-change by mouse-clicks */
#define	clicktoback	toggles[1].pos	/* ditto */
#define	autopoint	toggles[2].pos	/* sunmouse */
#define	keyactivate	toggles[3].pos	/* key over window activates */
#define	screencycle	toggles[4].pos	/* clicktoback over backdrop or no window */
#define	insday		toggles[5].pos	/* insert day */
#define	insdate		toggles[6].pos	/* insert date */
#define	instime		toggles[7].pos	/* insert time */
#define mouseblank	toggles[8].pos	/* blank mouse when key pressed */
#define wildstar	toggles[9].pos	/* allow '*' as wildcard */
#define scractivate	toggles[10].pos	/* activate window when shuffling screens */

#define WILDSTARON	((struct RootNode *)(DOSBase->dl_Root))->rn_Flags |= RNF_WILDSTAR
#define WILDSTAROFF	((struct RootNode *)(DOSBase->dl_Root))->rn_Flags &= ~RNF_WILDSTAR

/* the hotkeys */
#define MAXKEYLEN	49		/* enough? (must be odd!!!) */
typedef struct {
	LONG		msgid;		/* message id of filter */
	CxObj		*filter;	/* filter assoc. with hotkey */
	char		key[MAXKEYLEN+1];/* key-string for this hotkey */
} HOTKEYDATA;

#define NUM_HOTKEYS	13
extern HOTKEYDATA hk[NUM_HOTKEYS];

/* NB: special keys must be at end of list. Their hotkeys cannot be edited. */
#define HK_POPKEY	0L	/* pop-up settings window ***MUST BE FIRST*** */
#define HK_CLOSEKEY	1L	/* close window */
#define HK_ZIPKEY	2L	/* zip window */
#define HK_SHRINKKEY	3L	/* shrink to smallest size */
#define HK_ZOOMKEY	4L	/* enlarge to greatest size */
#define HK_WORKBENCH	5L	/* activate (a) Workbench window */
#define HK_POPPALKEY	6L	/* bring up a palette */
#define HK_POPCLI	7L	/* popcli-key */
#define HK_INSDATE	8L	/* insert date in read-stream */
#define HK_CYCLEWIN	9L	/* move window to front */
#define HK_CYCLESCR	10L	/* move window to front */
#define HK_CENTERSCR	11L	/* center frontmost screen */
#define HK_SCRTOBACK	12L	/* SPECIAL: new lcommand m hotkey */

/* other settings */
extern LONG datefmt;
extern LONG click_volume;

extern LONG blanktimeout;
extern LONG blanksecs;
extern LONG blankcount;

#define mblanksecs	5
#define mblanktimeout	(10*mblanksecs)
extern WORD mblankcount;

#define POPLEN	255
extern char PopCommand[POPLEN+1];

#ifdef ACCELERATION
extern UWORD acceleration, threshold;
#endif

void SaveSettings(char *file);
void LoadSettings(char *file);

#define CONFIG_FILE "S:Yak.config"

/*** prototypes/defines from main.c ***/ 
extern CxObj *broker;
extern struct MsgPort *broker_mp;
extern ULONG wndsigflag;

void CloseResources(void);
BOOL OpenResources(void);
void EasyEasyRequest(char *str);
void PostError(char *str);
BOOL AddHotKey(char *newstr, UWORD n);
BOOL ArgBool(char **ttypes, char *tt, BOOL def);
void main(int argc, char **argv);
void DoCloseWindow(void);
void HandleWindowKey(LONG what);
void WriteEvents(char *str);
void DoPalette(void);
void InsertDate(void);
LONG ProcessMsg(void);

/*** prototypes/defines from pri.c ***/ 
/* task priority types */
#define ORIGINAL	0
#define POPPEDUP	1
#define ACTIVE		2
void MyPri(UWORD which);

/*** prototypes for functions defined in keyclick.c ***/
void EndHandler(void);
BOOL InitHandler(void);

/*** prototypes/defines from help.c ***/
BOOL ShowWindow(void);
void HideWindow(void);
LONG HandleIDCMP(void);

#define HELP_ERROR	0
#define HELP_OKAY	1
#define HELP_HIDE	2
#define HELP_QUIT	3
