
#include <libraries/iffparse.h>
#include <dos/dos.h>

#include <prototypes.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 16
#define Compile_CNT 2

extern struct Window	    *ParmsLineWnd;
extern struct Gadget	    *ParmsLineGList;
extern struct Gadget	    *ParmsLineGadgets[3];

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 Gadget	    *ProjectGList;
extern struct Gadget	    *MessGList;
extern struct Gadget	    *CListeGList;
extern struct Gadget	    *DirSetGList;
extern struct Gadget	    *CompileGList;
extern struct Menu	    *ProjectMenus;
extern struct IntuiMessage   ProjectMsg;
extern struct IntuiMessage   MessMsg;
extern struct IntuiMessage   DirSetMsg;
extern struct IntuiMessage   CompileMsg;
extern struct TextFont	    *NFont;
extern struct Gadget	    *ProjectGadgets[1];
extern struct Gadget	    *MessGadgets[1];
extern struct Gadget	    *CListeGadgets[3];
extern struct Gadget	    *DirSetGadgets[];
extern struct Gadget	    *CompileGadgets[2];
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 NewMenu	     ProjectNewMenu[];
extern UWORD		     ProjectGTypes[];
extern UWORD		     MessGTypes[];
extern UWORD		     CListeGTypes[];
extern UWORD		     DirSetGTypes[];
extern UWORD		     CompileGTypes[];
extern struct NewGadget      ProjectNGad[];
extern struct NewGadget      MessNGad[];
extern struct NewGadget      CListeNGad[];
extern struct NewGadget      DirSetNGad[];
extern struct NewGadget      CompileNGad[];
extern ULONG		     ProjectGTags[];
extern ULONG		     MessGTags[];
extern ULONG		     CListeGTags[];
extern ULONG		     DirSetGTags[];
extern ULONG		     CompileGTags[];
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 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 ProjectHelp( 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 ProjectLaunch( void );
extern int ProjectLaunchOpt( void );
extern int ProjectCodeInfo( void );
extern int ProjectMainOpt( void );
extern int ProjectCompilerOpt( void );
extern int ProjectLinkerOpt( void );
extern int ProjectDirectory( void );
extern int ProjectEditorOpt( void );
extern int ProjectScreenOpt( void );
extern int ProjectCloseWB( void );
extern int ProjectOpenWB( void );
extern int ProjectAutoDocs( 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 OpenDirSetWindow( void );
extern void CloseDirSetWindow( void );

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

extern int OpenParmsLineWindow( void );
extern void CloseParmsLineWindow( 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 Library		   *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 PROF0	0
#define PROF1	1
#define PROF2	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;
    BOOL CPP;
    BOOL Proto;
    UBYTE Prof;
    BOOL Frag;
    BOOL Unix;
    UBYTE ObjType;
    char Version[3];
};

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

extern struct Resource *ProjectScreen;
extern char *Editor;
extern char *DICEDir;
extern char *AutoDir;
extern char *SourceDir;
extern char *DestDir;
extern char *IncludeDir;
extern char *LibDir;
extern char *ObjDir;

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 UWORD ROMVersion;

extern BOOL LoadOptions( struct IFFHandle * );
extern void SaveOptions( struct IFFHandle * );
extern BOOL ViewErrors( char * );

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

extern void ChangeProjectName( char *pathname );

extern void ChangeDICEDir( char *dir );

extern void EditModule( char *name );

extern char *CommentName( char *module );

extern BOOL IsCommented( char *module );

extern void MakeAssign( void );

extern void RemoveAssign( void );

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 );

extern struct TextAttr times13;

extern BOOL saved,compilall,compil,link;

extern struct Resource *DefaultScreenResource( void );

extern void SaveScreenResource( struct TagItem * , struct IFFHandle * );

extern char *MakeObjectPath( char * );

extern void FreeResource( struct Resource *res );

extern struct Resource *LoadResource( long type , char *name );

extern struct Resource *LoadResourceIFF( long type , struct IFFHandle * );

extern void GetResource( struct Resource *);

extern BOOL PutResource( struct Resource *);

extern void NextMessage( void );

extern void PrevMessage( void );

extern void NextModule( void );

extern void PrevModule( void );

/*
extern int CancelClicked( void );

extern int OkClicked( void );
*/

extern void UpDateSelectedModule( void );

extern void FindSelectedModule( long );

extern int DirSetUseClicked( void );
extern int DirSetCancelClicked( void );

extern int AutoDocClicked( void );
extern struct TagItem *ScreenTags;
extern int ProjectMakeFO( void );

extern char *StrMessages[];

extern void ChargeAide( char * );
