#include <graphics/displayinfo.h>
#include <functions.h>

struct Screen *Scr   = NULL;
APTR   VisualInfo    = NULL;
struct Window *Wnd   = NULL;
struct Menu   *Menus = NULL;

struct TextAttr topaz8 = {(STRPTR)"topaz.font", 8, 0x00, 0x41};

struct NewMenu NewMenu[] = {
        NM_TITLE, (STRPTR)"Game",     NULL, 0, 0, NULL,
        NM_ITEM,  (STRPTR)"New",     (STRPTR)"N", 0, 0, NULL,
        NM_ITEM,  (STRPTR)"Load",    (STRPTR)"L", 0, 0, NULL,
        NM_ITEM,  (STRPTR)"Save as", (STRPTR)"A", 0, 0, NULL,
        NM_ITEM,  (STRPTR)"Save",    (STRPTR)"S", 0, 0, NULL,
        NM_ITEM,  (STRPTR)NM_BARLABEL, NULL, 0, 0, NULL,
        NM_ITEM,  (STRPTR)"Quit",    (STRPTR)"Q", 0, 0, NULL,
        NM_TITLE, (STRPTR)"Move",     NULL, 0, 0, NULL,
        NM_ITEM,  (STRPTR)"Undo",    (STRPTR)"U", NM_ITEMDISABLED, 0, NULL,
        NM_ITEM,  (STRPTR)"Replay",  (STRPTR)"R", 0, 0, NULL,
        NM_ITEM,  (STRPTR)NM_BARLABEL, NULL, 0, 0, NULL,
        NM_ITEM,  (STRPTR)"Deal Row",  NULL, 0, 0, NULL,
        NM_TITLE, (STRPTR)"Cards",     NULL, 0, 0, NULL,
        NM_ITEM,  (STRPTR)"Display Column", (STRPTR)"D", 0, 0, NULL,
        NM_ITEM,  (STRPTR)"Locate Card", (STRPTR)"O", 0, 0, NULL,
        NM_ITEM,  (STRPTR)NM_BARLABEL, NULL, 0, 0, NULL,
        NM_ITEM,  (STRPTR)"Hide Deal and Discard", NULL, CHECKIT|MENUTOGGLE, 0, NULL,
        NM_ITEM,  (STRPTR)"  Cheat Level", NULL, 0, 0, NULL,
        NM_SUB,   (STRPTR)"none",     NULL, CHECKIT|CHECKED, 6, NULL,
        NM_SUB,   (STRPTR)"invisible", NULL, CHECKIT, 5, NULL,
        NM_SUB,   (STRPTR)"full",     NULL, CHECKIT, 3, NULL,
        NM_ITEM,  (STRPTR)"Verbose",  NULL, CHECKED|CHECKIT|MENUTOGGLE, 0, NULL,
        NM_ITEM,  (STRPTR)"Visual Dragging", NULL, CHECKIT|MENUTOGGLE, 0, NULL,
        NM_TITLE, (STRPTR)"Help",     NULL, 0, 0, NULL,
        NM_ITEM,  (STRPTR)"About",    (STRPTR)"I", 0, 0, NULL,
        NM_ITEM,  (STRPTR)"Help",     (STRPTR)"H", 0, 0, NULL,
        NM_END, NULL, NULL, 0, 0, NULL };

struct ColorSpec ScreenColors[] = {
         0, 0x01, 0x0C, 0x04,  /* grün       */
         1, 0x00, 0x00, 0x00,  /* schwarz    */
         2, 0x0D, 0x0D, 0x0D,  /* n.c.(fast) */
         3, 0x0F, 0x0F, 0x0F,  /* weiß       */
         4, 0x0E, 0x02, 0x01,  /* rot        */
         5, 0x0A, 0x08, 0x04,  /* gelb/braun */
         6, 0x08, 0x06, 0x04,  /* n.c.       */
         7, 0x09, 0x04, 0x00,  /* n.c.       */
        ~0, 0x00, 0x00, 0x00 };

UWORD DriPens[] = {~0};

long SetupScreen(void)
{
  if(!(Scr = OpenScreenTags(NULL, SA_Left,      0,
                                  SA_Top,       0,
                                  SA_Width,     640,
                                  SA_Height,    512,
                                  SA_Depth,     3,
                                  SA_Colors,   &ScreenColors[0],
                                  SA_Type,      CUSTOMSCREEN,
                                  SA_DisplayID, PAL_MONITOR_ID|HIRESLACE_KEY,
                                  SA_Pens,     &DriPens[0],
                                  SA_Title,     "Arachnid",
                                  TAG_DONE)))
    return(5);

  if(!(VisualInfo = GetVisualInfo(Scr, TAG_DONE))) return(6);

  return(0);
}

void CloseDownScreen(void)
{
  if(VisualInfo)
  {
    FreeVisualInfo(VisualInfo);
    VisualInfo = NULL;
  }

  if(Scr)
  {
    CloseScreen(Scr);
    Scr = NULL;
  }
}

long OpenWin(void)
{
  if(!(Menus = CreateMenus(NewMenu, GTMN_FrontPen, 0, TAG_DONE)))
    return(8);

  LayoutMenus(Menus, VisualInfo, GTMN_TextAttr, &topaz8, TAG_DONE);

  if(!(Wnd = OpenWindowTags( NULL,
             WA_IDCMP,        IDCMP_MOUSEBUTTONS|IDCMP_MENUPICK|IDCMP_VANILLAKEY|IDCMP_RAWKEY,
             WA_Flags,        WFLG_SMART_REFRESH|WFLG_BORDERLESS|WFLG_REPORTMOUSE|WFLG_ACTIVATE,
             WA_Title,        NULL,
             WA_ScreenTitle,  "Arachnid",
             WA_CustomScreen, Scr,
             WA_AutoAdjust,   TRUE,
             TAG_DONE )))
    return(7);

  SetMenuStrip(Wnd, Menus);
  GT_RefreshWindow(Wnd, NULL);

  return(0);
}

void CloseWin(void)
{
  if(Menus)
  {
    ClearMenuStrip(Wnd);
    FreeMenus(Menus);
    Menus = NULL;
  }

  if(Wnd)
  {
    CloseWindow(Wnd);
    Wnd = NULL;
  }
}
