#define CATCOMP_NUMBERS
#include "mplocale.h"

#include "/ModePro.h"


#define EVT_HOTKEY 0

#ifdef DEBUG
#define DEBUG_CODE(x)\
if(MPSem->Debug)\
{\
x\
}
#else
#define DEBUG_CODE(x)
#endif

/*** PROTOTYPES ***/
STRPTR GetModeName(ULONG DisplayID);
BOOL GetArgs(int argc, char **argv);
void CleanupArgs(int argc);
BOOL DaemonLoadFile(STRPTR FileName);


/**** DefaultNode Funcs ****/
struct  DefaultNode *FindDNode(struct List *list,UBYTE *name);
struct DefaultNode *Find_SMNode(struct List *list, STRPTR name, ULONG ModeID);
void    AddDNode(ULONG dest, struct DefaultNode *n);
void    RemDNode(struct DefaultNode *DN);

/**** Public Screen ()'s ****/
void    FreeOpenNode(struct OpenNode *on);
void    ClosePubScreens(void);
void    FreeWBOpenNode(void);

/**** Locale ()'s ****/
STRPTR  GetString( LONG stringNum);
void    InitStrings(void);

/*** IO() ***/
BOOL    ShowGUI(void);
void    HideGUI(void);
void    ProcessInput(void);
void    ProcessMPMessages(void);


/**** Files ****/

/**** Requesters ****/

/**** Clean Up ()'s ****/
void    CheckToQuit(void);
void    CleanUp(void);

LONG SendPrefsMsg(ULONG Command, ULONG Code, APTR Data);


/*** DNode stuff ***/
BOOL    MatchString(STRPTR Pattern, STRPTR String);
void    CloneTextAttr(struct TTextAttr *Source, struct TTextAttr *Dest);
struct  DefaultNode *MatchDNode(STRPTR TaskName, STRPTR ScrTitle, ULONG ModeID);

//struct DefaultNode *MatchAndDupDNode(STRPTR TaskName, STRPTR ScrTitle, ULONG ModeID);

/**** Patch functions ****/
struct Screen __asm __saveds  *NewOpenScreen(register __a0 struct ExtNewScreen *ns, 
                                             register __a6 struct IntuitionBase *);
struct Screen __asm __saveds  *NewOpenScreenTagList(register __a0 struct ExtNewScreen *ns,
                                                    register __a1 struct TagItem *taglist,
                                                    register __a6 struct IntuitionBase * );

LONG __saveds __asm NewCloseScreen(register __a0 struct Screen *S,
                                   register __a6 struct IntuitionBase *);

struct Window __saveds __asm *NewOpenWindow(register __a0 struct ExtNewWindow *nw,
                                            register __a6 struct IntuitionBase *);
struct Window __saveds __asm *NewOpenWindowTagList(register __a0 struct ExtNewWindow *nw,
                                                   register __a1 struct TagItem *tags,
                                                   register __a6 struct IntuitionBase *);
BOOL __saveds ASM NewLayoutMenusA(REG __a0 struct Menu *fm,
                                  REG __a1 APTR vi, 
                                  REG __a2 struct TagItem *tags,
                                  REG __a6 struct Library *GTBase);

LONG __saveds ASM NewCloseWorkBench(register __a6 struct IntuitionBase *);

struct Screen * __saveds __asm NewLockPubScreen(register __a0 UBYTE *Name,
                                                register __a6 struct IntuitionBase *IBase);
void __saveds __asm NewUnlockPubScreen(register __a0 UBYTE *Name, 
                                       register __a1 struct Screen *Scr,
                                       register __a6 struct Library *IBase);
                                                
                                                
struct List * __saveds __asm NewLockPubScreenList(register __a6 struct IntuitionBase *IBase);
void __saveds __asm NewUnlockPubScreenList(register __a6 struct IntuitionBase *IBase);
                                                
BOOL CloneWB(struct DefaultNode *DNode);
struct DefaultNode *ForceEdit(struct DefaultNode *DNode);
BOOL LoadPalettePrefs(void);

LONG AddBackdrop(struct Screen *Scr, struct DefaultNode *DN);

void RemoveBackdrop(struct Screen *Scr);

void PreCloseOpenNode(struct OpenNode *on);
void PreCloseWBOpenNode(void);

STRPTR SetupTaskName(STRPTR Buffer,STRPTR FuncName,LONG BufferSize);
void SetTaskName(STRPTR Name);

struct OpenNode *FindOpenNode(struct Screen *Scr);

/* BestMode.c */
ULONG MyBestModeID(Tag Tags, ...);
