
#include <intuition/intuition.h>
#include <dos/dos.h>

#include "prototypes.h"

#include "sentences.h"


#define GetString( g )	    ((( struct StringInfo * )g->SpecialInfo )->Buffer  )
#define GetNumber( g )	    ((( struct StringInfo * )g->SpecialInfo )->LongInt )

#define GD_ModuleList			       0

#define GDX_ModuleList			       0

#define GD_ScreenList			       0

#define GDX_ScreenList			       0

#define GD_Source			       0
#define GD_Dest 			       1
#define GD_Include			       2
#define GD_Lib				       3
#define GD_Obj				       4
#define GD_SourceString 		       5
#define GD_DestString			       6
#define GD_IncludeString		       7
#define GD_LibString			       8
#define GD_ObjString			       9
#define GD_Prg				       10
#define GD_PrgString			       11

#define GDX_Source			       0
#define GDX_Dest			       1
#define GDX_Include			       2
#define GDX_Lib 			       3
#define GDX_Obj 			       4
#define GDX_SourceString		       5
#define GDX_DestString			       6
#define GDX_IncludeString
#define GDX_LibString			       8
#define GDX_ObjString			       9
#define GDX_Prg 			       10
#define GDX_PrgString			       11

#define GD_CompileName			       0
#define GD_Gadget13			       1

#define GDX_CompileName 		       0
#define GDX_Gadget13			       1

#define GD_Reloc			       0
#define GD_Resident			       1
#define GD_DInfo			       2
#define GD_DLevel			       3
#define GD_Stack			       4
#define GD_Chip 			       5
#define GD_CPU				       6
#define GD_FPU				       7
#define GD_Data 			       8
#define GD_Code 			       9
#define GD_Calls			       10
#define GD_Inline			       11
#define GD_Hunk 			       12

#define GDX_Reloc			       0
#define GDX_Resident			       1
#define GDX_DInfo			       2
#define GDX_DLevel			       3
#define GDX_Stack			       4
#define GDX_Chip			       5
#define GDX_CPU 			       6
#define GDX_FPU 			       7
#define GDX_Data			       8
#define GDX_Code			       9
#define GDX_Calls			       10
#define GDX_Inline			       11
#define GDX_Hunk			       12

#define Project_CNT 1
#define Scr_CNT 1
#define DirSet_CNT 12
#define Compile_CNT 2
#define CompilerOpt_CNT 13

extern struct Screen	    *Scr;
extern APTR		     VisualInfo;
extern struct Window	    *ProjectWnd;
extern struct Window	    *MessWnd;
extern struct Window	    *CListeWnd;
extern struct Window	    *DirSetWnd;
extern struct Window	    *CompileWnd;
extern struct Window	    *CompilerOptWnd;
extern struct Gadget	    *ProjectGList;
extern struct Gadget	    *MessGList;
extern struct Gadget	    *CListeGList;
extern struct Gadget	    *DirSetGList;
extern struct Gadget	    *CompileGList;
extern struct Gadget	    *CompilerOptGList;
extern struct Menu	    *ProjectMenus;
extern struct IntuiMessage   ProjectMsg;
extern struct IntuiMessage   MessMsg;
extern struct IntuiMessage   DirSetMsg;
extern struct IntuiMessage   CompileMsg;
extern struct IntuiMessage   CompilerOptMsg;
extern struct TextFont	    *NFont;
extern struct Gadget	    *ProjectGadgets[1];
extern struct Gadget	    *MessGadgets[1];
extern struct Gadget	    *CListeGadgets[1];
extern struct Gadget	    *DirSetGadgets[10];
extern struct Gadget	    *CompileGadgets[2];
extern struct Gadget	    *CompilerOptGadgets[13];
extern UBYTE		    *ProjectWdt;
extern UBYTE		    *DirSetWdt;
extern struct TextAttr	    *Font, Attr;
extern UWORD		     FontX, FontY;
extern UWORD		     OffX, OffY;
extern struct GfxBase	    *GfxBase;
extern struct IntuiText      CompileIText[];
extern struct IntuiText      CompileIText[];
extern struct IntuiText      CompilerOptIText[];
extern struct NewMenu	     ProjectNewMenu[];
extern UWORD		     ProjectGTypes[];
extern UWORD		     MessGTypes[];
extern UWORD		     CListeGTypes[];
extern UWORD		     DirSetGTypes[];
extern UWORD		     CompileGTypes[];
extern UWORD		     CompilerOptGTypes[];
extern struct NewGadget      ProjectNGad[];
extern struct NewGadget      MessNGad[];
extern struct NewGadget      CListeNGad[];
extern struct NewGadget      DirSetNGad[];
extern struct NewGadget      CompileNGad[];
extern struct NewGadget      CompilerOptNGad[];
extern ULONG		     ProjectGTags[];
extern ULONG		     MessGTags[];
extern ULONG		     CListeGTags[];
extern ULONG		     DirSetGTags[];
extern ULONG		     CompileGTags[];
extern ULONG		     CompilerOptGTags[];
extern struct ColorSpec      ScreenColors[];
extern UWORD		     DriPens[];

extern int ModuleListClicked( void );
extern int MessListClicked( void );
extern int SourceClicked( void );
extern int DestClicked( void );
extern int IncludeClicked( void );
extern int LibClicked( void );
extern int ObjClicked( void );
extern int PrgClicked( void );

extern int RelocClicked( void );
extern int ResidentClicked( void );
extern int DInfoClicked( void );
extern int DLevelClicked( void );
extern int StackClicked( void );
extern int ChipClicked( void );
extern int CPUClicked( void );
extern int FPUClicked( void );
extern int DataClicked( void );
extern int CodeClicked( void );
extern int CallsClicked( void );
extern int InlineClicked( void );
extern int HunkClicked( void );

extern int ProjectNew( void );
extern int ProjectOpen( void );
extern int ProjectInfo( void );
extern int ProjectSave( void );
extern int ProjectSaveas( void );
extern int ProjectIcon( void );
extern int ProjectAbout( void );
extern int ProjectQuit( void );
extern int ProjectEdit( void );
extern int ProjectInclude( void );
extern int ProjectComment( void );
extern int ProjectCommentKill( void );
extern int ProjectAdd( void );
extern int ProjectRem( void );
extern int ProjectOther( void );
extern int ProjectGenerate( void );
extern int ProjectLibrary( void );
extern int ProjectMake( void );
extern int ProjectCompile( void );
extern int ProjectLink( void );
extern int ProjectLaunchWB( void );
extern int ProjectLaunch( void );
extern int ProjectCodeInfo( void );
extern int ProjectCompilerOpt( void );
extern int ProjectDirectory( void );
extern int ProjectScreenOpt( void );

extern int SetupScreen( void );
extern int CloseDownScreen( void );

extern int ProjectNewSize( void );
extern int HandleProjectIDCMP( void );
extern int ProjectCloseWindow( void );
extern int OpenProjectWindow( void );
extern void CloseProjectWindow( void );

extern int MessNewSize( void );
extern int HandleMessIDCMP( void );
extern int OpenMessWindow( void );
extern int MessCloseWindow( void );
extern void CloseMessWindow( void );

extern int OpenCListeWindow( char * );
extern void CloseCListeWindow( void );

extern int HandleDirSetIDCMP( void );
extern int DirSetCloseWindow( void );
extern int OpenDirSetWindow( void );
extern void CloseDirSetWindow( void );

extern void CompileRender( char * );
extern int OpenCompileWindow( char * );
extern void CloseCompileWindow( void );

extern void CompilerOptRender( void );
extern int HandleCompilerOptIDCMP( void );
extern int CompilerOptCloseWindow( void );
extern int OpenCompilerOptWindow( void );
extern void CloseCompilerOptWindow( void );

extern UWORD OffX,OffY;

extern UWORD ProjectLeft;
extern UWORD ProjectTop;
extern UWORD ProjectWidth;
extern UWORD ProjectHeight;

extern UWORD MessLeft;
extern UWORD MessTop;
extern UWORD MessWidth;
extern UWORD MessHeight;

extern BOOL KeepMessages;

extern struct Library		   *IconBase;
extern struct Library		   *WorkbenchBase;
extern struct IntuitionBase	   *IntuitionBase;
extern struct GadToolsBase	   *GadToolsBase;

#define SMALL FALSE
#define LARGE TRUE
#define REGARG FALSE
#define STACKARG TRUE
#define CPU00	0
#define CPU20	1
#define CPU30	2
#define FPU00	0
#define FPU81	1
#define FPU82	2

#define MODULE_NODE 200

struct ModuleNode {
    struct Node node;
    char *filename;
    char *directory;
    char *pathfile;
    char *namelist;
    char *name;
    char type;
};

struct CompilerOpts {
    UBYTE CPU,FPU;
    BOOL Data,Code;
    BOOL Resident;
    BOOL DStack;
    BOOL Chip;
    BOOL Hunk;
    BOOL DebugI;
    BOOL DebugL;
    BOOL RCalls;
    BOOL ICalls;
    UBYTE HunkCode;
};

extern struct CompilerOpts Config,Config2;
extern struct List *ModuleList;

extern char *DICEDir;
extern char *SourceDir;
extern char *DestDir;
extern char *IncludeDir;
extern char *LibDir;
extern char *ObjDir;

extern char *ProgramName;
extern char *ProjectPathName;
extern char *ProjectName;
extern char *WindowTitle;

extern BPTR DICELock;
extern BPTR IncludeLock;
extern BPTR AIncludeLock;
extern BPTR LibLock;

extern char *OptLine;
extern char *OptFile;
extern char *StartDir;
extern char *PrgDir;


extern BOOL LoadOptions( char * , FILE * );
extern void SaveOptions( FILE * );
extern BOOL ViewErrors( char * );

extern struct TagItem gtag[];

extern struct TagItem ttag[];

extern unsigned long DisplayScreen;

extern void ReplaceChar( char **dest , char *source );

extern void ChangeProjectName( char *pathname );

extern void ChangeDICEDir( char *dir );

extern LONG Overwrite( char *name );

extern void EditModule( char *name );

extern char *CommentName( char *module );

extern BOOL IsCommented( char *module );

extern struct ModuleNode *ChooseInList( char *title , struct List *liste );

extern void MakeAssign( void );

extern void RemoveAssign( void );

extern BOOL VerifPrj( char *prj , char *ct , FILE *in );

extern void RemModuleNode( struct ModuleNode *wn );

extern struct ModuleNode *AddModuleNode( struct List *list , char *name , char *directory );

extern void UpdateNameList( void );

extern void LoadPrefs( void );

extern void SavePrefs( void );

extern void MakeOptions( void );

extern void UpdateScreen( void );

