/*
***************************************************************************
*
* Datei:
*	  RSys.h
*
* Inhalt:
*
*		 --- Globale Routinen ---
*
*
*		 --- Lokale  Routinen ---
*
*
* Bemerkungen:
*	  Die Haupt-Include-Datei von RSys mit allen globalen Vereinbarungen.
*
* Erstellungsdatum:
*	  07-Jul-93 	Rolf Böhme
*
* Änderungen:
*	  07-Jul-93 	Rolf Böhme	  Erstellung
*	  01-Jul-93 	Einige Umstellung der EntryAttr-Struktur und
*						Einführung sogenannter Fields, Standard-Einträge
*						von RSys
*    25-Jul-93    Erstellung einer Steuerstruktur
*
***************************************************************************
*/

#include "RSysDebug.h"
#include "RSysEnum.h"

#define TOOLTYPE(ttype) (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) (ttype))

#define APPEND    1
#define OVERWRITE 2

extern char *str_err_objects[], *str_err_actions[];

extern int wb_start;

extern struct Screen 		 *Scr;
extern APTR 					  VisualInfo;
extern struct Window 		 *SysWnd;
extern struct Gadget 		 *SysGList;
extern struct Menu			 *SysMenus;
extern UWORD					  SysZoom[];
extern struct Gadget 		 *SysGadgets[];
extern UWORD					  SysLeft;
extern UWORD					  SysTop;
extern UWORD					  SysWidth;
extern UWORD					  SysHeight;
extern UBYTE					 *SysWdt;
extern struct TextAttr		 *Font;
extern UWORD					  FontX, FontY;
extern UWORD					  OffX, OffY;
extern struct TextAttr		  Topaz80;
extern struct NewMenu		  SysNewMenu[];
extern struct List			  ListeLVList;

typedef struct {
	char *ea_type;
	char *ea_header;
	char *ea_dataformat;
	void (*ea_func)(void);
	unsigned ea_counted : 1;
} EntryAttribute;

extern EntryAttribute EntryAttr[];

typedef struct _RSysFiles {
   UBYTE Hardware[MAXFULLNAME],
         LibOffsets[MAXFULLNAME],
         Guide[MAXFULLNAME],
         GuideContext[MAXFULLNAME],
         ActionFile[MAXFULLNAME];
} RSYSFILES;

extern RSYSFILES RSysFiles;

struct objectid {
	char fullname[MAXFULLNAME];
	APTR address;
};

typedef struct SE {
	struct Node 		se_Node;
	char					se_Entry[BUFSIZE];
	struct objectid	se_obj_id;
} ScrollEntry;

typedef struct SysMessage {
	struct Message sm_message;
	int				sm_newtype;
} SysMsg;

extern struct MsgPort *SysIdPort;

extern ScrollEntry *Entries;

extern struct Library         *AslBase;
extern struct Library         *GadToolsBase;
extern struct IntuitionBase   *IntuitionBase;
extern struct GfxBase         *GfxBase;
extern struct ExecBase        *SysBase;
extern struct ExpansionBase	*ExpansionBase;
extern struct Library         *CxBase;
extern struct WorkbenchBase   *WorkbenchBase;
extern struct Library         *DiskfontBase;
extern struct Library         *UtilityBase;
extern struct Library         *IFFParseBase;
extern struct Library         *IconBase;
extern struct AmigaGuideBase  *AmigaGuideBase;
extern struct DosLibrary      *DOSBase;

extern UBYTE	namebuffer[];
extern int topentry,countentries;
extern int quit_flag;
extern int LastID;
extern char *mess[];
extern const char *field[];
extern int bpc, bgc;
extern long bpp;
extern int winddetail, windblock, menudetail;
extern int iconx, icony;
extern int listviewheight;

extern struct AppIcon *appicon;

extern struct MsgPort *broker_mp;
extern CxObj *broker;
extern struct NewBroker newbroker;

struct _acts {
	struct Node act_Node;
	int			act_filetype;
	char			act_listviewheader[20];
	char			act_name[30];
	char			act_command[255];
};

extern struct _acts *Actions;

struct _flags {
	unsigned fastmode 	: 1;
	unsigned sortmode 	: 1;
	unsigned workingbar	: 1;
	unsigned speakmode	: 1;
	unsigned autofront	: 1;
	unsigned mousewindow : 1;
	unsigned sysfont		: 1;
	unsigned saveasking	: 1;
	unsigned appicon		: 1;
   unsigned helpmode    : 1;
   unsigned textformat  : 1;

/* RSys private */
	unsigned wb_start 	: 1;
	unsigned quit_clip	: 1;
	unsigned quit_sw		: 1;
	unsigned quit_crc 	: 1;
	unsigned quit_flag	: 1;
	unsigned quit_cp		: 1;
	unsigned quit_action_flag		: 1;
	unsigned quit_cr		: 1;
	unsigned quit_ff		: 1;
	unsigned quit_fd		: 1;
	unsigned quit_tree	: 1;
	unsigned quit_hunk	: 1;
	unsigned quit_iconify: 1;
   unsigned nohelp      : 1;

/* Dummys */
   unsigned dummy0      : 1;
   unsigned dummy1      : 1;
   unsigned dummy2      : 1;
   unsigned dummy3      : 1;
   unsigned dummy4      : 1;
};

extern struct _flags Flags;

extern char hotkey[HOTKEYS+1][30];
extern char *RSysName;

extern UBYTE autocon[];
extern char _fullpath[];

extern int ReopenWindow;

struct Manufacturer
{
	char *name;
	WORD manu_nr;
	WORD prod_nr;
	WORD type_nr;
	int  company;
};

extern struct Manufacturer *manu;

extern struct List Libraries;

typedef struct
{
   struct Node    l_node;
   char          *l_name;
   char          *l_base;
   int            l_typ;
   struct List    l_functions;
} LIBRARY;

typedef struct
{
   struct Node    f_node;
   char          *f_name;
   int            f_bias;
   char           f_public;
}  FUNCTION;

extern UBYTE *context[MONITOR+1];

extern int newlvh;

typedef struct {
   struct Node vm_node;
   ULONG       vm_startaddress,
               vm_endaddress;
   char        vm_type;
   char        vm_comment[BUFSIZE];
} ValidMemoryNode;

extern struct List ValidMemoryList;

#define WRITEPROTECT             (1<<0)
#define IsWriteProtect(VMNode)   (((VMNode)->vm_type & WRITEPROTECT)==WRITEPROTECT)

#define CACHEABLE                (1<<1)
#define IsCacheable(VMNode)      (((VMNode)->vm_type & CACHEABLE)==CACHEABLE)

#define VALID                    (1<<2)
#define IsValid(VMNode)          (((VMNode)->vm_type & VALID)==VALID)

extern struct Node *actualfindnode;
extern long actualfindnodenum;

#include "RSysFunc.h"

