/*
	LEDPANEL.H - Kontroll-Struktur fr das LED-Panel

	Die folgende C-Struktur dient gleichzeitig als Patch-Area
	fr die Voreinstellungen und zur Kontrolle des LED-Panels
	durch externe Programme, etwa ein Accessory oder CPX-Modul.
	Der 'LEDP'-Cookie enth„lt einen Zeiger auf diese Struktur.
*/

#define LEDP_MAGIC 'LEDP'
#define LEDP_VERSION 0x0207
#define LEDP_VERDATE 0x20041994L
#define LEDP_VARLEN 0x20

typedef struct
{
	struct
	{
		long magic; /* magische Zahl MAGIC */
		int version; /* Versionsnummer und */
		long verdate; /* Datum des LED-Panels */
		int varlen; /* L„nge der Patch-Area in Bytes */
		int light; /* Flag fr "light"-Version */
	}	header;
	int active; /* Flag fr Anzeige aktiv */
	long ledbits; /* gew„hlte Laufwerke */
	int alldrvs; /* Flag fr angemeldete Laufwerke */
	int delay; /* Nachleuchtdauer der LEDs in VBLs */
	struct
	{
		int top; /* Abstand zum oberen Rand in Zeilen */
		int right; /* Abstand zum rechten Rand in Bytes */
	}	margin;
	struct
	{
		res1: 7; /* reserviert */
		bgcol: 1; /* Hintergrundfarbe des Panels */
		res2: 3; /* reserviert */
		ledfrm: 1; /* Flag fr runde LEDs */
		res3: 3; /* reserviert */
		ledcol: 1; /* Flag fr farbige LEDs */
	}	color;
	struct
	{
		lftspc: 1; /* linker Rand */
		caps: 1; /* CapsLock-Anzeige */
		cpspc: 1; /* Lcke zwischen R/W und CapsLock */
		rwsym: 1; /* R/W-Symbol */
		rwspc: 1; /* Lcke zwischen LEDs und R/W-Symbol */
		onlya: 1; /* Floppys zusammenfassen */
		hrdspc: 1; /* Extra-Lcke vor Harddisk */
		ramspc: 1; /* Extra-Lcke vor RAM-Disk */
		allspc: 1; /* Extra-Lcken zwischen Laufwerken */
		frespc: 1; /* Lcken fr freie Laufwerke zeigen */
		leds: 1; /* LED-Panel anzeigen */
		datspc: 1; /* Abstand zwischen Uhr/Datum und LEDs */
		date: 1; /* Datum */
		clock: 1; /* Uhrensymbol */
		time: 1; /* Uhrzeit */
		rgtspc: 1; /* rechter Rand */
	}	setup;
	int lines; /* Anzahl LED-Zeilen (1/2 oder 0=auto) */
	struct
	{
		char year,sec; /* Flag fr Jahr/Sekunden anzeigen */
	}	dtverb;
	struct
	{
		char date,time; /* Null-Zeichen fr Datum/Uhrzeit */
	}	zero;
	struct
	{
		char off,on; /* Symbol fr Uhrzeit aus/an */
	}	clock;
	struct
	{
		char off,on; /* Symbol fr CapsLock aus/an */
	}	caps;
	struct
	{
		char caps,shft; /* Maske fr CapsLock/Umschalt-Taste */
	}	keymask;
	struct
	{
		char hrd,ram; /* erstes Laufwerk der Harddisk/RAM-Disk */
	}	fstdrv;
	struct
	{
		int x,y,w,h; /* letztes benutztes Rechteck */
	}	lstrect;
	struct
	{
		char *pointer; /* Zeiger auf zu berwachendes Byte */
		char check; /* Default fr zu berprfendes Byte */
		char last; /* letzter Wert des Bytes */
		char andmask; /* Und-Maske zum Zurcksetzen */
		char ormask; /* Oder-Maske zum Zurcksetzen */
		char restime; /* Zeit zum Zurcksetzen */
		char counter; /* Z„hler dafr */
		char bit0; /* Zeichen fr 0-Bit */
		char bit1; /* Zeichen fr 1-Bit */
		char bytelft; /* Zeichen links vom Byte */
		char bytergt; /* Zeichen links vom Byte */
	}	watch;
}	LEDP;

/*
	Offsets (dezimal)
	-----------------
	0 header			32 lines
		0 magic			34 dtverb
		4 version		36 zero
		6 verdate		38 clock
		10 varlen		40 caps
		12 light		42 keymask
	14 active			44 fstdrv
	16 ledbits			46 lstrect
	20 alldrvs			54 watch
	22 delay				54 pointer
	24 margin				58 check
		24 top				60 andmask
		26 right			62 restime
	28 color				64 bit0
	30 setup				66 bytelft
*/

/*
	Hinweise
	--------
	magic: XBRA-Kennung des LED-Panels
	varlen: L„nge der zu speichernden Variablen ab Header
	active:	Bit 0: Anzeige ein/ausschalten,
			Bit 15: Anzeige auffrischen
	lastrect: Letztes zur Anzeige benutztes Grafik-Rechteck
	watch: Fr Programmierer zu Debugging-Zwecken,
			hiermit kann ein Byte berwacht werden
		pointer: Zeiger auf das Byte, man muž natrlich	global
			(im Supervisor-Modus) darauf zugreifen k”nnen
		check: Unbenutzt, man kann den obigen Zeiger darauf
			zeigen lassen (Zugriff garantiert erlaubt)
		andmask: Nachdem ein Z„hler abgelaufen ist, wird
			eine Und-Operation mit dieser Maske durchgefhrt,
		ormask: zus„tzlich auch noch eine Oder-Operation
		restime: Startwert fr den Z„hler in VBLs (falls 0,
			dann wird das Byte nie ver„ndert)
		bit0/bit1: Zeichen fr 0-Bit und 1-Bit
		bytelft/bytergt: Zeichen fr Umrahmung des Bytes
	Empfohlene Vorgehensweise beim Ver„ndern von Parametern:
	1. Header berprfen (magic, version)
	2. LED-Panel abschalten (active=0)
	3. Žnderungen an der Konfiguration vornehmen
	4. Grafik-Rechteck (lstrect) l”schen
	5. LED-Panel einschalten und auffrischen (active=0x8001)
*/
