/*
 * ToolManagerConf.h  V2.0
 *
 * configuration program main include file
 *
 * (c) 1990-1992 Stefan Becker
 */

/* System include files */
#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dos.h>
#include <graphics/gfxbase.h>
#include <intuition/gadgetclass.h>
#include <libraries/asl.h>
#include <libraries/iffparse.h>
#include <libraries/locale.h>
#include <libraries/toolmanager.h>
#include <prefs/prefhdr.h>

/* System function prototypes */
#include <clib/alib_protos.h>
#include <clib/asl_protos.h>
#include <clib/diskfont_protos.h>
#include <clib/dos_protos.h>
#include <clib/exec_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/icon_protos.h>
#include <clib/iffparse_protos.h>
#include <clib/intuition_protos.h>
#include <clib/locale_protos.h>
#include <clib/wb_protos.h>

/* ANSI C include files */
#include <stdlib.h>
#include <string.h>

/* Compiler specific include files */
#include <lists.h>     /* GetHead() et al. */

/* Project specific include files */
#undef STRINGARRAY
#include "/locale/toolmanager.h"
#include "ToolManagerPrefs.h"

/* Structures */
struct GadgetData {
                   char           *name;
                   ULONG           type;
                   ULONG           flags;
                   struct TagItem *tags;
                   UWORD           left;
                   UWORD           top;
                   UWORD           width;
                   UWORD           height;
                   struct Gadget  *gadget;
                  };

struct FileReqParms {
                     struct Window *frp_Window;
                     char          *frp_Title;
                     char          *frp_OKText;
                     ULONG          frp_Flags1;
                     ULONG          frp_Flags2;
                     char          *frp_OldFile;
                    };

struct ToolNode {
                 struct Node  tn_Node;
                 char        *tn_Image;
                 char        *tn_Sound;
                };

/* Internal function prototypes */
/* *window.c */
typedef void  InitWindowFunction(UWORD, UWORD);
typedef BOOL  OpenWindowFunction(void *, struct Window *);
typedef void *HandleIDCMPFunction(struct IntuiMessage *msg);
typedef void  UpdateWindowFunction(void *);
typedef void  HandleAppMsgFunction(struct AppMessage *);
typedef struct Node *CopyNodeFunction(struct Node *);
typedef void  FreeNodeFunction(struct Node *);
typedef struct Node *ReadNodeFunction(UBYTE *);
typedef BOOL  WriteNodeFunction(struct IFFHandle *, UBYTE *, struct Node *);

/* aslreqs.c */
char *OpenFileRequester(void);
struct TextAttr *OpenFontRequester(struct Window *, struct TextAttr *);

/* button.c */
BOOL CalcReqButtonImage(void);
void FreeReqButtonImage(void);
void InitReqButtonGadget(struct Gadget *);

/* config.c */
BOOL ReadConfigFile(char *);
BOOL WriteConfigFile(char *);
char *GetConfigStr(UBYTE **);
BOOL PutConfigStr(char *, UBYTE **);

/* dockwindow.c */
InitWindowFunction   InitDockEditWindow;
OpenWindowFunction   OpenDockEditWindow;
UpdateWindowFunction UpdateDockEditWindow;
HandleIDCMPFunction  HandleDockEditWindowIDCMP;
CopyNodeFunction     CopyDockNode;
FreeNodeFunction     FreeDockNode;
ReadNodeFunction     ReadDockNode;
WriteNodeFunction    WriteDockNode;

/* docklistwindow.c */
InitWindowFunction   InitDockListEditWindow;
OpenWindowFunction   OpenDockListEditWindow;
UpdateWindowFunction UpdateDockListEditWindow;
HandleIDCMPFunction  HandleDockListEditWindowIDCMP;
struct List *CopyToolsList(struct List *);
void FreeToolsList(struct List *toollist);

/* execwindow.c */
InitWindowFunction   InitExecEditWindow;
OpenWindowFunction   OpenExecEditWindow;
UpdateWindowFunction UpdateExecEditWindow;
HandleAppMsgFunction HandleExecEditWindowAppMsg;
HandleIDCMPFunction  HandleExecEditWindowIDCMP;
CopyNodeFunction     CopyExecNode;
FreeNodeFunction     FreeExecNode;
ReadNodeFunction     ReadExecNode;
WriteNodeFunction    WriteExecNode;

/* gadget.c */
struct Gadget *CreateGadgetList(struct GadgetData *, ULONG);
void DisableGadget(struct Gadget *, struct Window *, BOOL);
char *DuplicateBuffer(struct Gadget *gadget);

/* iconwindow.c */
InitWindowFunction   InitIconEditWindow;
OpenWindowFunction   OpenIconEditWindow;
UpdateWindowFunction UpdateIconEditWindow;
HandleIDCMPFunction  HandleIconEditWindowIDCMP;
CopyNodeFunction     CopyIconNode;
FreeNodeFunction     FreeIconNode;
ReadNodeFunction     ReadIconNode;
WriteNodeFunction    WriteIconNode;

/* imagewindow.c */
InitWindowFunction   InitImageEditWindow;
OpenWindowFunction   OpenImageEditWindow;
HandleAppMsgFunction HandleImageEditWindowAppMsg;
HandleIDCMPFunction  HandleImageEditWindowIDCMP;
CopyNodeFunction     CopyImageNode;
FreeNodeFunction     FreeImageNode;
ReadNodeFunction     ReadImageNode;
WriteNodeFunction    WriteImageNode;

/* listreq.c */
InitWindowFunction   InitListRequester;
BOOL OpenListRequester(ULONG, struct Window *);
HandleIDCMPFunction  HandleListRequesterIDCMP;

/* locale.c */
void GetLocale(void);
void FreeLocale(void);

/* main.c */
void FreeAllObjects(void);
BOOL CopyFile(char *, char *);

/* mainwindow.c */
InitWindowFunction   InitMainWindow;
ULONG OpenMainWindow(void);
void CloseMainWindow(void);
HandleIDCMPFunction  HandleMainWindowIDCMP;
UpdateWindowFunction UpdateMainWindow;

/* menuwindow.c */
InitWindowFunction   InitMenuEditWindow;
OpenWindowFunction   OpenMenuEditWindow;
HandleIDCMPFunction  HandleMenuEditWindowIDCMP;
UpdateWindowFunction UpdateMenuEditWindow;
CopyNodeFunction     CopyMenuNode;
FreeNodeFunction     FreeMenuNode;
ReadNodeFunction     ReadMenuNode;
WriteNodeFunction    WriteMenuNode;

/* movewindow.c */
InitWindowFunction   InitMoveWindow;
void OpenMoveWindow(struct Window *, struct Gadget *, struct Gadget *);
HandleIDCMPFunction  HandleMoveWindowIDCMP;
void CloseMoveWindow(void);

/* soundwindow.c */
InitWindowFunction   InitSoundEditWindow;
OpenWindowFunction   OpenSoundEditWindow;
HandleIDCMPFunction  HandleSoundEditWindowIDCMP;
CopyNodeFunction     CopySoundNode;
FreeNodeFunction     FreeSoundNode;
ReadNodeFunction     ReadSoundNode;
WriteNodeFunction    WriteSoundNode;

/* window.c */
void CloseWindowSafely(struct Window *);
void DisableWindow(struct Window *);
void EnableWindow(struct Window *, ULONG);

/* Global data */
extern struct Library *WorkbenchBase;
extern char *ProgramName;
extern UpdateWindowFunction *UpdateWindow;
extern HandleAppMsgFunction *HandleAppMsg;
extern struct Window *CurrentWindow;
extern FreeNodeFunction *FreeNodeFunctions[];
extern char *AppStrings[];
extern struct List ObjectLists[];
extern struct List PubScreenList;
extern struct RastPort TmpRastPort;
extern struct NewGadget NewGadget;
extern struct FileReqParms FileReqParms;
extern struct Screen *PublicScreen;
extern void *ScreenVI;
extern struct TextAttr ScreenTextAttr;
extern struct TextFont *ScreenFont;
extern struct MsgPort *IDCMPPort;
extern struct MsgPort *AppMsgPort;
extern struct Window *MoveWindowPtr;
extern ULONG MoveWindowOffX,MoveWindowOffY;
extern BOOL WBScreen;
extern BOOL CreateIcons;
extern UWORD WindowTop;
extern UWORD WBXOffset;
extern UWORD WBYOffset;
extern const struct TagItem DisabledTags[];
extern const char PrefsFileName[];
extern const char SavePrefsFileName[];

/* Global defines */
#define TMCONFDATE    "26.9.1992"
#define TMVERSION     "2"
#define TMREVISION    "0"
#define TMCRYEAR      "1990-92"

#define CHKBOXWIDTH 26
#define REQBUTTONWIDTH 20

#define LISTREQ_EXEC  0
#define LISTREQ_IMAGE 1
#define LISTREQ_SOUND 2
#define LISTREQ_PUBSC 3
#define LREQRET_CANCEL   ((void *) -1)
#define LREQRET_NOSELECT ((void *) -2)

#ifdef DEBUG
__stkargs void kputs(char *);
__stkargs char kgetc(void);
__stkargs void kprintf(char *,...);

#define DEBUG_PUTSTR(a) kputs(a);
#define DEBUG_GETCHR    kgetc();
#define DEBUG_PRINTF(a,b)  kprintf(a,b);
#else
#define DEBUG_PUTSTR(a)
#define DEBUG_GETCHR
#define DEBUG_PRINTF(a,b)
#endif
