/*
*	ACDPlay - DER fantastische CDDA-Player für den Amiga
*
*						Include V1.2
*                  passend zu ACDPlay.c V1.6
*
*  Autor   Version   Datum      Veränderungen
* ------- --------- --------   ------------------------------------------
*	mak		0.11	22.09.96	Ersterstellung
*	mak		0.12	23.09.96	alles dokumentiert
*	mak		0.13	26.09.96	ACDPConfig-Struktur dazu
*	MC3		0.14	28.09.96 	Commodityspezifisches in Application-Struktur
*	MC3		0.15	29.09.96	3 neue Config-Elemente (Commodity-Tooltypes)
*	mak		0.16	07.10.96	Application.activewindow rausgenommen
*					08.10.96	ACDPConfig verändert
*	MC3		0.17	15.10.96	CDStruct-Zeiger aus der Application-Struktur entfernt
*								Flag-Word in Config- und Application-Struktur eingebaut
*	MC3		0.18	16.10.96	CDStruct ist wieder drin...
*	mak		0.19	18.10.96	Screennotifyspezifisches in App-Struktur eingefügt
*	MC3		0.20	20.10.96	pubscreenname[] und pubscreenlist eingefügt
*			0.21	22.10.96	vorläufiges CDTitleNode
*	mak		0.22	26.10.96	nicht lokalisierbare Texte hierher kopiert
*								kleinere Änderungen
*	MC3		0.23	26.10.96	time_percentage in CDStruct
*					31.10.96	time_curseconds in CDStruct
*			0.24	06.11.96	Neuigkeiten in CDStruct
*					07.11.96	String-Buffer eingefügt (Application), n. Fenster
*			0.25	09.11.96	'_'-Zeichen in Zahlen-Array eingefügt, n. Fenster
*					10.11.96	Neue Variable in App und Config: hotkeymode
*			0.26	11.11.96	Tooltypeflag-Variable
*			0.27	14.11.96	timemode in Application, menustrip nur in Application
*	mak		0.28	23.11.96	ARexxport dazu
*	MC3		0.29	24.11.96	ProgramTitleNode dazu
**					29.11.96	Noch ein Fenster
**					30.11.96	WinTitleBuffer erhöht (Titellänge erhöht)
*	mak		0.30	20.11.96	Noch ein Fenster mehr
*								Textbuffer ans Ende der AppStruct verlegt um Pointern
*								an ungeraden Adressen vorzubeugen
*	MC3		0.31	07.12.96	Node-Strukturen verändert
*					08.12.96	magicwbflag in app freigegeben
*					10.12.96	CDStruct und Config verändert
*			1.0		14.12.96	timebuf (o.ä.) vergrößert, Buffer für CD-Info-Gad zu haben
*			1.01	01.01.97	einiges geändert, u.a. in AppWin
*					04.01.97	2 neue Strukturen
*
*			1.1		26.01.97	Config-Struktur eingespart, etc, etc...
*			1.12	29.01.97	AppIcon-Zeugs eingebaut
*	mak		1.13	02.02.97	CDxRequest Zeiger in CDStruct eingebaut
*
*	MC3				14.02.97	Wichtig: Gadget-Define-Reihenfolge verändert!
*					15.02.97	struct DirNode dazu
*					16.02.97	Application noch größer...
*	mak		1.14	25.03.97	Application für Asm umstrukturiert
*					28.03.97	Volumefenster dazu
*								Konfigversion auf 3 gesetzt
*
*	MC3		1.15	28.03.97	cdstr->searchmode dazugefügt
*
*	mak		1.16	03.03.97	cdstr->cur_index hinzugefügt
*			1.17	27.04.97	app->orgprwin dazu
*								Pointer für 'rexxcmds.s' in die CDStruct eingebaut
*			1.18	16.07.97	appwin->request / Busy-Flag dazu
*
*	MC3		1.2		13.11.97	neues Fenster hinzu -> Audio Save
*								außerdem viele neue Variablen für's SCSI-Kopieren
 */

/********************
***** Konstanten **********************************************************
 ********************/

/* nicht lokalisierte Texte */
char PROG_NAME[]	= "ACDPlay";

char *TEXT_MAIN_DIRECTCHOICE0[]	= {"_1",  "_2",  "_3",  "_4",  "_5",  "_6",  "_7",  "_8",  "_9",  "1_0", NULL};
char *TEXT_MAIN_DIRECTCHOICE1[]	= {"11", "12", "13", "14", "15", "16", "17", "18", "19", "20", NULL};

/********************
***** Strukturen **********************************************************
 ********************/

/*------------------------------ BevelBox --------------------------------*/
struct BevelBox
{
	struct BevelBox		*bb_NextBevelBox;
	WORD				bb_LeftEdge;
	WORD				bb_TopEdge;
	WORD				bb_Width;
	WORD				bb_Height;
	UBYTE				bb_FrameType;	/* BBFT_BUTTON, BBFT_RIDGE, BBFT_ICONDROPBOX, V39 */
	BOOL				bb_Recessed;
	APTR				bb_VisualInfo;
};
/*------------------------------ Scroll ----------------------------------*/
struct Scroll
{
	char 				**Text;
	BYTE				*Flags;	/* Flags für jeden Text einzeln, sehr unkomfortabel */
	WORD				LeftEdge;
	WORD				TopEdge;
	WORD				Width;
	WORD				Height;
	TextAttr			*Font;

	/* interne Daten */
	WORD				p_height;
	WORD				p_pos;
	struct RastPort		*RPort;
	struct Image		Img;
};


/*------------------------------ CDStruct --------------------------------*/
struct CDStruct
{
	ULONG		unit;					/* Unit des SCSI-Geräts */
	ULONG		lun;
	CDxRequest	*cdx;					/* <- bis hierhin nicht ändern */
	List		*cdtitles;				/* Zeiger auf Titel-Liste */
	List		*progtitles;			/* Zeiger auf Programm-Liste */
	ProgramTitleNode	*actprognode;	/* aktueller Track im Programm */

	UBYTE		searchseconds;
	UBYTE		updatedelay;
	UBYTE		searchmode;
	UBYTE		timemode;				/* Anzeigemodus - siehe oben */
	UBYTE		repeatmode;
	UBYTE		playmode;
	UBYTE		fileformat;				/* für Audio-Save */
	UBYTE		freq;					/* -||- */

	BOOL		useraction;				/* Hat der User die Trackveränderung  */
										/* ausgelöst? wichtig f. Wiederholung */

	UBYTE		num_track;				/* Anzahl Tracks */
	UBYTE		cur_track;				/* aktueller Track */
	UBYTE		active;					/* siehe cdx_Active */
	UBYTE		time_percentage;		/* Zeit des aktuellen Tracks in % */
										/* wichtig für Trackslider */
	ULONG		time_curseconds;		/* aktuelle Gesamtzeit in Sekunden */

	char 		*cdnameptr;				/* Damit sich die CDStruct ändern kann, ohne daß */
	char 		*artistptr;				/* das Asm-Zeugs neu gemacht werden muß */

	UBYTE		a_track, b_track;		/* für A-B-Repeat */
	LONG		a_adr, b_adr;			/* für A-B-Repeat */

	UBYTE		cur_index;				/* aktueller Index (ist hier, damit LONGs an geraden Adressen liegen) */

	char		buf_cddb_id[10];		/* CD-ID für die CDDB-Database */

	char		buf_ab_time_a[16];
	char		buf_ab_time_b[16];

	char		buf_copy_size[20];

	char		device[31];
	char		cdname[MAXCDNAME + 1];	/* Name der CD */
	char		artistname[MAXARTISTNAME + 1];	/* Name des Interpreten */
	char		diskpath[DISKPATHLENGTH + 1];	/* Pfadangabe für die CD-Titel */
};
/*------------------------------ AppWin ----------------------------------*/
struct AppWin
{
	Window		*window;				/* Zeiger auf das Fenster */
										/* Erst überprüfen ob überhaupt */
										/* ein Fenster da ist */
	BOOL		winopen;				/* ob das Fenster geöffnet werden soll */
	UWORD 		minsize[4];				/* Größe und Position 1 */
	UWORD 		maxsize[4];				/* Größe und Position 2 (ZIP) */
	UWORD		minwidth, minheight;	/* Beschränkung bei Größenveränderung */
	UWORD		maxwidth, maxheight;	/* des Fensters */
	Gadget		**gadget;				/* Zeigerzeiger auf Gadget */
	Gadget		*gadgetlist;			/* Zeiger auf Gadgetliste */
	IntuiText	*itext;					/* IntuiText-Liste für Fenster */
	Image		*img;					/* Image-Liste für das Fenster */
	struct BevelBox *bbox;
	Requester		*request;				/* zum Blockieren von Fenstern */
};
/*------------------------------ Application -----------------------------*/
struct Application
{
	Screen			*screen;				/* PublicScreen, */
											/* auch um zu testen ob */
											/* Application geöffnet ist */
	List 			*pubscreenlist;			/* Liste aller Public-Screens */

	UWORD			hotkeymode;				/* Was tun bei Hotkey und Application offen? */
	UWORD			Flags;					/* Flags für Application s.o. */
	APTR			visualinfo;				/* VisualInfo für GadTools */
	TextAttr		*font;					/* benutzter font */

	struct MsgPort	*idcmp;					/* shared IDCMP */
	struct MsgPort	*broker_mp;				/* Messageport für Broker */
	struct MsgPort	*appicon_mp;			/* Messageport für's AppIcon */
	struct MsgPort  *scrnotify_mp;			/* Messageport für Screennotify Events */
	struct MsgPort	*arexx_mp;				/* öffentlicher ARexxport 'ACDPLAY' */

	struct CDStruct *cdstr;					/* Zeiger auf CDStruct-Struktur */
											/* <- bis hierhin nicht ändern! */
	struct Scroll	*scroller;				/* für den Scroller im About-Fenster */

	struct AppWin	appwin[ANZ_WINDOWS];	/* für jedes Window ein Feld */
	struct AppAsl	appasl[ANZ_ASL];		/* Daten für ASL-Requester */
	Menu			*menustrip;				/* Menü für alle Fenster */

	BYTE			edit_pos;				/* Welche Position im Edit-Window? */
	BOOL			magicwbmode; 			/* wird noch nicht unterstützt */
	UWORD			flag_tool;				/* Flags von speziellen Tooltypes */
	UWORD			flag_main;				/* Enthält Flags für die GUI-Elemente in MAIN */

	CxObj			*broker;				/* Commodity-Broker */
	CxObj			*filter_popkey;
	CxObj			*sender_popkey;
	CxObj			*translate_popkey;
	CxObj			*filter_timer;
	CxObj			*sender_timer;
	BYTE			cx_priority;			/* Priorität -128 bis 127 */
	BOOL			cx_popup;				/* Beim Start öffnen? */

	APTR			snhandle_wbench;		/* Zeiger auf ScreenNotifyHandle für WB-Events */
 /*	APTR			snhandle_closescr;	*/	/* Zeiger auf ScreenNotifyHandle für CloseScreen()-Events */

	struct List		*arexxdir;				/* Zeiger auf Dateinamenliste */

	struct AppIcon	*appicon;				/* Alles für's AppIcon */
	struct DiskObject	*diskobj;
	char			*progname;				/* Zeiger auf Programmnamen */
	struct Window	*orgprwin;				/* Zeiger auf das Fenster das ursprünglich in der Process-Struktur stand */
											/* NICHT VERÄNDERN! */
	char			pubscreenname[MAXPUBSCREENNAME + 1]; /* Name des Public-Screens */
	char			winmaintitlebuf[MAXCDNAME + 50 + 3];		/* Möglicherweise keine gute Umsetzung, */
	char			wintitlestitlebuf[MAXCDNAME + MAXARTISTNAME + 3];	/* schreib' mal Deine Meinung.. */
	char			timeshowbuf[30];		/* für die Zeitanzeige */
											/* ab 20 beginnt der andere Gad-Buffer */
	char			cx_popkey[41];			/* Input Description String */
};


