#ifndef SYSTEM_GLOBALBASE_H
#define SYSTEM_GLOBALBASE_H

/*
**  $VER: globalbase.h V0.9B
**
**  Definition of the dpkernel's global variables structure.
**
**  (C) Copyright 1996-1997 DreamWorld Productions.
**      All Rights Reserved
*/

#ifndef DPKERNEL_H
#include <dpkernel/dpkernel.h>
#endif

#ifndef EXEC_LIBRARIES_H
#include <exec/libraries.h>
#endif

/*****************************************************************************
** All fields in this structure are private.  This file is included in the
** developers archive for module writers and debugging purposes only.
*/

struct GVBase {
  struct Library LibNode;
  WORD   ScreenFlip;                /* Private */
  APTR   SegList;                   /* Private */
  WORD   OldMouseX1;                /* Private */
  WORD   OldMouseY1;                /* Private */
  WORD   OldMouseX2;                /* Private */
  WORD   OldMouseY2;                /* Private */
  WORD   VBLPosition;               /* Private */
  BYTE   Switch;                    /* Private */
  BYTE   Destruct;                  /* Private */
  LONG   RandomSeed;                /* Random seed */
  WORD   BlitterUsed;               /* 0 = Free, 1 = Grabbed */
  WORD   BlitterPriority;           /* 0 = NoPriority, 1 = Priority */
  struct GScreen *CurrentScreen;    /* Currently displayed screen */
  LONG   Ticks;                     /* Vertical blank ticks counter */
  WORD   HSync;                     /* Private */
  struct SysObject *SysObjects;     /* System object list (master) */
  BYTE   DebugActive;               /* Set if debugger is currently active */
  BYTE   ScrBlanked;                /* Set if screen is currently blanked */
  WORD   Version;                   /* The version of this kernel */
  WORD   Revision;                  /* The revision of this kernel */
  struct SScreen   *ScreenList;     /* List of shown screens, starting from back. */
  struct SysObject *ChildObjects;   /* System object list (hidden & children) */
  struct Directory *ReferenceDir;   /* List of references files */
  struct Reference *ReferenceList;  /* List of object references */
  struct Module    *ScreensModule;  /* Pointer to module */
  struct Module    *BlitterModule;  /* Pointer to module */
  struct Module    *FileModule;     /* Pointer to module */
  struct Module    *KeyModule;      /* Pointer to module */
  APTR   ScreensBase;               /* */
  APTR   BlitterBase;               /* */
  APTR   FileBase;                  /* */
  APTR   KeyBase;                   /* */
  struct Module *SoundModule;       /* Pointer to module */
  APTR   SoundBase;                 /* */
  struct ModEntry *ModList;         /* List of modules */
  struct EvtEntry *EventArray;      /* Event array */
  LONG   FlipSignal;                /* Signal mask */
  APTR   FlipTask;                  /* Screen flip task */
};

struct SScreen {
  struct SScreen *Next;
  struct GScreen *Screen;
};

#endif /* SYSTEM_GLOBALBASE_H */
