#include "protos.h"

enum { G_Panel = 1, G_Backward, G_Play, G_Forward, G_Stop, G_Titles, G_Program, G_List, G_Artist, G_Title, G_TitleList, G_Track, G_SaveTitles, G_MAX };
extern struct Gadget * GList[G_MAX+1];
extern struct Screen * Scr;
extern struct DrawInfo * Dri;
extern struct Window * Win;
extern Object *WinObj;
extern struct Gadget * MainLayout;
extern struct Window * ListWin;
extern Object *ListWinObj;
extern struct Gadget * ListLayout;
extern STRPTR Screen;
extern BOOL done;

extern struct timerequest * TimerIO;
extern struct MsgPort * TimerPort;
extern struct Library * TimerBase;
extern struct List * TrackList;
extern struct MsgPort * SCSIPort;
extern struct IOStdReq * SCSIIO;
extern STRPTR SCSI_Device;
extern ULONG SCSI_Unit;
extern UBYTE * DataBuf;
extern UBYTE * TOCBuf;
extern UBYTE * SenseData;
extern BOOL Ejected;
extern BOOL JustStarted;

#define MAX_TOC		100					/* maximum number of tracks */
#define SENSE_LEN	18					/* SCSI command reply data buffers */
#define DATA_LEN	252					/* SCSI command reply data buffers */
#define TOC_LEN 	(MAX_TOC * 8 + 4)	/* max TOC size = 100 TOC track descriptors */

extern ULONG TOCL[MAX_TOC];
extern ULONG TOCT[MAX_TOC];
extern UBYTE TOCF[MAX_TOC];
extern STRPTR TOCS[MAX_TOC];
extern ULONG TOCP[MAX_TOC];
extern STRPTR TITLE[2];
extern UBYTE TitleBuffer[(MAX_TOC+2)*40];
extern ULONG Tracks;
extern ULONG Track;
extern STRPTR IndexPath;

extern struct TextAttr CompactAttr;
extern struct TextAttr PanelAttr;
extern struct TextFont * CompactFont;
extern struct TextFont * PanelFont;
extern struct TextFont * ScreenFont;

extern struct List dummyList;
extern Class * CDPanelClass;

static ULONG __inline
SafeSetGadgetAttrs(struct Gadget *o, struct Window *w, struct Requester *r, Tag t, ...)
{
	if (o && w && (w == Win || w == ListWin))
		return SetGadgetAttrsA(o, w, r, (struct TagItem *)&t);
	return 0;
}

static ULONG __inline
SafeGetAttr(ULONG t, APTR o, ULONG *s)
{
	if (o)
		return GetAttr(t, o, s);
	return 0;
}

