/* PWPrefs. h */

/*======== Defines =============*/

/* GadgetIDs */

#define GID_SAVE 10
#define GID_USE  11
#define GID_TEST 12
#define GID_CANCEL 13

#define GID_MULTIGROUPGAD 14
#define GID_MULTIPAGEGAD 15

/* Maxima */

#define MAX_GRUPPEN 20
#define MAX_SEITEN  10

/* Objekt-Typen */

#define OBJ_BOOL 1
#define OBJ_INTEGER 2
#define OBJ_STRING 3
#define OBJ_CYCLE 4
#define OBJ_SLIDER 5
#define OBJ_FILE 6
#define OBJ_FONT 7
#define OBJ_LISTVIEW 8

/* Menus */

enum {MEN_PROJECT=1,MEN_ABOUT,MEN_ABOUTMUI,MEN_ABOUTPIO,MEN_QUIT,
		MEN_ICONIFY,MEN_LOAD,MEN_LOADAS,MEN_SAVE,MEN_SAVEGAD,MEN_SAVEAS,
		MEN_USEGAD,MEN_TESTGAD,
		MEN_MUI};

#define MEN_SEITE_OFFSET 100


/*======== Strukturen ==========*/

struct MyImage
{
	Object *im_Object;
	Object *im_Image;
	struct BitMap *im_BitMap;
	struct BitMapHeader *im_BitMapHeader;
	UBYTE  *im_Speicher;
	UBYTE  *im_Body;
	UBYTE  *im_Cmap;
	ULONG  *im_CRegs;
	ULONG  im_ModeID;
	ULONG  im_FileLen;
	LONG	 im_NumColors;
	BOOL   im_OK;
};

struct Gruppe
{
	struct Node gr_Node;
	Object *gr_MUIObject;
	Object *gr_ListImage;
	struct List gr_SeitenListe;
	struct MyImage gr_Image;
	char	 *gr_HelpNode;
	char	 *gr_ImageName;
	STRPTR *gr_Tabelle;
	WORD   gr_AnzSeiten;
	char   gr_Name[42];
	char   gr_ImageSpec[20];
};

struct Seite
{
	struct Node se_Node;
	Object *se_MUIObject;
	struct List se_ObjektListe;
	char	 *se_HelpNode;
	STRPTR *se_Tabelle;
	WORD   se_AnzObjekte;
	WORD	 se_AnzFrames;
	WORD	 se_LabelWeight;
	WORD	 se_GadgetWeight;
	char   se_Name[42];
};

struct Objekt
{
	struct Node ob_Node;
	Object *ob_MUIObject;
	Object *ob_MUIGetObject;
	Object *ob_MUISpecialObject;
	struct List ob_ItemListe;
	STRPTR *ob_Tabelle;
	char	 *ob_Name;
	char	 *ob_KeyWord;
	char	 *ob_FrameName;
	char	 *ob_HelpText;
	char	 *ob_HelpNode;
	LONG   ob_HelpLine;
	ULONG	 ob_ID;
	ULONG	 ob_LongValue;
	STRPTR ob_StringValue;
	ULONG  ob_Min;
	ULONG  ob_Max;
	WORD	 ob_MaxStringLen;
	WORD   ob_AnzItems;
	WORD	 ob_CharWidth;
	BOOL	 ob_EndFrame;
	WORD	 ob_Typ;
};

struct ObjektItem
{
	struct Node obi_Node;
	char	*obi_Name;
	char  *obi_KeyWord;
};

struct Ext_Header
{
	BPTR	Seg_Next;
	WORD	CODE_MOVEQ;
	WORD	CODE_RTS;
	ULONG	Recognition;
	LONG	(*Routine)(Msg);
};


/*======== Prototypen ==========*/

/* amiga.lib */

ULONG HookEntry();

/* PWPrefs.c */

void Ende(char *mes);
void Init(void);
void OpenLibs(void);
void CloseLibs(void);
void GetArguments(void);
void LoadPrefsFile(void);

/* DoPrefs */

void MyMainMenuHook(struct Hook *hook, Object *o,ULONG *men);
void DoPrefs(void);

/* misc.c */

int IntNachricht(char *body,char *auswahl);
void Hinweis(char *body);
APTR MyAllocVec(ULONG size,ULONG flags);
void MyFreeVec(APTR mem);
BOOL AllocString(char* &ziel,char *name);

struct Gruppe *AddNew_Gruppe(void);
struct Seite *AddNew_Seite(struct Gruppe *gruppe);
struct Objekt *AddNew_Objekt(struct Seite *seite);
struct ObjektItem *AddNew_Item(struct Objekt *objekt);

void Remove_Gruppe(struct Gruppe *gruppe);
void Remove_Seite(struct Seite *seite);
void Remove_Objekt(struct Objekt *obj);
void Remove_Item(struct ObjektItem *item);
void Remove_All(void);

void SetName_Gruppe(struct Gruppe *gruppe,char *name);
BOOL SetHelpNode_Gruppe(struct Gruppe *gruppe, char *name);
BOOL SetImageName_Gruppe(struct Gruppe *gruppe,char *name);

void SetName_Seite(struct Seite *seite,char *name);
BOOL SetHelpNode_Seite(struct Seite *seite,char *name);

BOOL SetName_Objekt(struct Objekt *obj,char *name);
BOOL SetFrameName_Objekt(struct Objekt *obj,char *name);
BOOL SetKeyWord_Objekt(struct Objekt *obj,char *name);
BOOL SetHelp_Objekt(struct Objekt *obj,char *name);
BOOL SetHelpNode_Objekt(struct Objekt *obj,char *name);
BOOL SetStringValue_Objekt(struct Objekt *obj,char *name,WORD size);

BOOL SetName_Item(struct ObjektItem *item,char *name);
BOOL SetKeyWord_Item(struct ObjektItem *item,char *name);

void ResetObjekte(void);
struct Objekt *FindKeyWord(char *kw);
struct ObjektItem *FindItem(struct Objekt *o, char *ikw,WORD *inr);

void InitTag(struct TagItem *t);
void AddTag(Tag tag,ULONG data);
void TagDone(void);

void BreakString(STRPTR s);
UBYTE *FindChunk(ULONG chunk,UBYTE *mem, ULONG memlen);


/* PrefsScanner.c */

void ScanPrefs(void);

/* CreateGUI.c */

Object *MakeGUI(void);
void EndGUI(void);

/* Locale.c */

void InitLocale(BOOL Force,BOOL DoLocale);
void EndLocale(void);
STRPTR MSG(WORD Nummer);
STRPTR MSGL(WORD Nummer);
struct Catalog *GetCatalog(void);
void GetLocaleName(char *s);

/* MyListClass.c */

void InitMyListClass(void);



/*======== Variablen ===========*/

#ifndef I_AM_VARS

extern "C"
{

char *ReqTitle;

struct Library *MUIMasterBase;
struct IntuitionBase *IntuitionBase;
struct Library *IconBase;

struct WBStartup *WBMessage;
struct List GruppenListe;
struct TagItem *Tags;
struct DiskObject *SleepIcon;

struct MUI_CustomClass *CL_MyList;

LONG  (*PIORoutine)(Msg msg);

Object *mainapp,*MainWin,*GruppenListObject,
		 *GruppenObject,*HelpObject,*MainMenu;

APTR MyPool;

WORD GroupCounter,PageCounter,ObjCounter,ItemCounter;
WORD Anz_Gruppen;
WORD Anz_HelpLines;
WORD BubbleBreak;

char *PrefsMemory;

char s[257],s2[257];
char PrefsFile[257];
char PIOFile[257];
char PIOArgs[257];
char LogoFile[257];
char GuideFile[257];
char SleepFile[257];
char PrefsName[100];
char EmptyHelpString[22];

BPTR OldCD;
BPTR PIOSeg;

BOOL MustResetCD;
BOOL FromWB;
BOOL ForceLocale;
BOOL NoImages,NoGroupImages,NoPools,SaveAndQuit,BubbleHelp;
BOOL Supports_Use,Supports_Test;

/*--*/

LONG AllocOffset;
};

#endif // I_AM_VARS


