#ifndef __DigitalCD__H
#define __DigitalCD__H

#include <stdarg.h>

#include <stdbool.h>
#include "WimpLib:Coords.h"
#include "WimpLib:StrCol.h"
#include "WimpLib:WList.h"
#include "WimpLib:Menu.h"
#include "WimpLib:Sprites.h"

#include "asm_utils.h"
#include "Options.h"

EListenerAction DigitalCD_DefaultHandler(const Event* e, void* handle);
int App_CheckCommand(void* handle, uint32_t id);
bool App_ExecCommand(void* handle, uint32_t id);
void App_BroadcastPrimaryController(void);
void App_Open(int cmd);
void App_StrongHelp(const char* token);

// Task customised message reporting
void App_ReportException(void);
#ifdef __CC_NORCROFT
#pragma -v1 // hint to the compiler to check f/s/printf format
#endif
void App_ReportError(const char* pmsg, ...);
void App_DescribeError(const _kernel_oserror* e, const char* pmsg, ...);
#ifdef __CC_NORCROFT
#pragma -v0 // return to default
#endif
const _kernel_oserror* App_ReportOSError(const _kernel_oserror* e);

#define Hardware_Mul64bit 0x00000001
#define Hardware_ARM32    0x00000002

typedef struct
{
	HIcon           IconBar;
	HWind           WindInfo;
	CMenu*          MenuPlayers;
	CMenu*          MenuOpen;
	StrCol*         pPathsCol;
	StrCol*         pCollectivesCol;
	StrCol*         pArtistsCol;
	StrCol*         pBoxesCol;
	StrCol*         pAlbumsCol;
	StrCol*         pDatesCol;
	StrCol*         pBroadcastersCol;
	StrCol*         pMimeTypesCol;
	COptions        Options;
	CSpriteArea*    Clues;
	bool            bExiting;
	WList           m_ClueList;
	struct
	{
		int             NrOfCDDrives;
		unsigned int    Capabilities;
	} Hardware;
} CDigitalCD;

extern CDigitalCD DigitalCD;

#define LPrMenu0_None         0
#define LPrMenu0_Artists      1
#define LPrMenu0_Compilations 2

#define Cmd_OpenChoices     256
#define Cmd_OpenPlayList    257
#define Cmd_OpenCDList      258
#define Cmd_OpenQueue       259

#endif
