/*********************************************/
/*                                           */
/*       Designer (C) Ian OConnor 1994       */
/*                                           */
/*      Designer Produced C include file     */
/*                                           */
/*********************************************/

#include "ControlGUI.h"


UWORD HbbsLogo_brushColours[] =  /* Use LoadRGB4 to use this. */
  {
  2730,0,4095,1675,2457,3003,2985,4026
  };

UWORD HbbsLogo_brushData[375] =
  {
  0,0,0,0,0,0,0,0,0,0,256,4096,0,0,0,256,4127,49409,64528,8129,256,4112,257,16,
  4097,256,4112,257,16,4127,256,4112,257,16,4096,0,4096,768,48,0,0,4096,512,32,0,
  508,4127,49153,64515,65281,256,4112,257,16,1,256,4112,257,16,1,256,4112,257,16,
  16385,256,4096,256,16,1,256,4096,768,48,3,32513,63487,65151,65507,65534,0,0,0,
  0,0,0,0,0,0,0,0,8704,32768,47488,32768,0,8704,32770,8744,32768,0,658,45218,
  8200,32768,0,14868,42276,8584,32768,0,8804,41252,8232,32768,0,8768,41000,8232,
  32768,0,8835,41192,8648,32768,0,0,0,0,0,65027,61439,64767,65479,65532,65027,
  61439,65279,65519,65534,65027,61408,16126,1007,57406,65027,61408,16126,1007,
  57406,65027,61408,16126,1007,57344,65027,61408,16126,1007,57344,65535,61439,
  64767,65487,65532,65535,61439,64767,65479,65534,65027,61408,16126,992,254,
  65027,61408,16126,992,254,65027,61408,16126,1007,33022,65027,61408,16126,1007,
  33022,65027,61439,65279,65519,65534,65027,61439,64767,65479,65532,0,0,0,0,0,0,
  0,0,0,0,0,17409,1,62353,0,0,17409,4,17497,0,0,17703,29124,17429,0,0,32041,
  19016,17299,0,0,17609,16968,16465,0,0,17545,16976,17489,0,0,17671,16848,17297,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0
  };

struct Menu *CtrlMenu = NULL;

struct NewMenu CtrlMenuNewMenu[] =
  {
  NM_TITLE, (STRPTR)"HBBS"        ,  NULL , 0, NULL, (APTR)~0,
  NM_ITEM , (STRPTR)"About"       , (STRPTR)"?", 0, 0L, (APTR)~0,
  NM_ITEM , (STRPTR)"Screen Mode" , (STRPTR)"M", 0, 0L, (APTR)~0,
  NM_ITEM , NM_BARLABEL           ,  0 , 0, 0L, (APTR)~0,
  NM_ITEM , (STRPTR)"Quit!"       , (STRPTR)"Q", 0, 0L, (APTR)~0,
  NM_END  , NULL                  ,  NULL , 0, 0L, (APTR)~0
  };

ULONG CtrlMenuTags[] =
  {
  (GT_TagBase+67), TRUE,
  (GTMN_TextAttr), (ULONG)&HBBS8066,
  (TAG_DONE)
  };

ULONG BevelTags[] =
  {
  (GTBB_Recessed), TRUE,
  (GT_VisualInfo), 0,
  (TAG_DONE)
  };

struct Window *Ctrl = NULL;
APTR CtrlVisualInfo;
APTR CtrlDrawInfo;
struct Gadget *CtrlGList;
struct Gadget *CtrlGadgets[25];
UBYTE CtrlFirstRun = 0;

STRPTR Ctrl_LV1_CycleLabels[] =
{
  (STRPTR)"Last Callers",
  (STRPTR)"Last Downloads",
  (STRPTR)"Last Uploads",
  (STRPTR)"Last Pagers",
  (STRPTR)"Last PWFails",
  (STRPTR)"Last Carrier",
  NULL
};

ULONG CtrlGadgetTags[] =
  {
  (GTLV_Selected), 0,
  (TAG_END),
  (GTCY_Labels), (ULONG)&Ctrl_LV1_CycleLabels[0],
  (TAG_END),
  (GTLV_Selected), 0,
  (TAG_END),
  (GTLV_Selected), 0,
  (TAG_END),
  (GTLV_Selected), 0,
  (TAG_END),
  (GA_Disabled), TRUE,
  (TAG_END),
  (GA_Disabled), TRUE,
  (TAG_END),
  (GA_Disabled), TRUE,
  (TAG_END),
  (GA_Disabled), TRUE,
  (TAG_END),
  (GA_Disabled), TRUE,
  (TAG_END),
  (GA_Disabled), TRUE,
  (TAG_END),
  (GA_Disabled), TRUE,
  (TAG_END),
  (GA_Disabled), TRUE,
  (TAG_END),
  (GA_Disabled), TRUE,
  (TAG_END),
  (GA_Disabled), TRUE,
  (TAG_END),
  (GTTX_Text), (ULONG)"             HydraBBS - (C) 1995-6 Dominic Clifton",
  (TAG_END),
  };

UWORD CtrlGadgetTypes[] =
  {
  LISTVIEW_KIND,
  CYCLE_KIND,
  BUTTON_KIND,
  LISTVIEW_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  LISTVIEW_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  LISTVIEW_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  TEXT_KIND,
  };

struct NewGadget CtrlNewGad[] =
  {
  93, 30, 144, 60, NULL, &HBBS8066, Ctrl_LV1, 1, NULL,  (APTR)&CtrlGadgetTags[0],
  93, 14, 144, 15, NULL, &HBBS8066, Ctrl_LV1_Cycle, 1, NULL,  (APTR)&CtrlGadgetTags[3],
  93, 1, 144, 12, (UBYTE *)"Information", &HBBS8066, Ctrl_LV1_Info, 16, NULL,  NULL,
  1, 14, 90, 77, NULL, &HBBS8066, Ctrl_LV2_Nodes, 4, NULL,  (APTR)&CtrlGadgetTags[6],
  205, 91, 67, 13, (UBYTE *)"Window", &HBBS8066, Ctrl_Window, 16, NULL,  NULL,
  137, 91, 67, 13, (UBYTE *)"Watch", &HBBS8066, Ctrl_Screen, 16, NULL,  NULL,
  69, 91, 67, 13, (UBYTE *)"Stop", &HBBS8066, Ctrl_Stop, 16, NULL,  NULL,
  1, 91, 67, 13, (UBYTE *)"Start", &HBBS8066, Ctrl_Start, 16, NULL,  NULL,
  346, 1, 105, 12, (UBYTE *)"Configure", &HBBS8066, Ctrl_Configure, 16, NULL,  NULL,
  239, 1, 105, 12, (UBYTE *)"Shutdown All", &HBBS8066, Ctrl_Shutdown, 16, NULL,  NULL,
  452, 1, 179, 132, NULL, &HBBS8066, Ctrl_LV3_Commands, 1, NULL,  (APTR)&CtrlGadgetTags[9],
  273, 91, 67, 13, (UBYTE *)"Config", &HBBS8066, Ctrl_Config, 16, NULL,  NULL,
  1, 1, 91, 12, (UBYTE *)"Status", &HBBS8066, Ctrl_Status, 16, NULL,  NULL,
  239, 14, 212, 76, NULL, &HBBS8066, Ctrl_Who, 1, NULL,  (APTR)&CtrlGadgetTags[12],
  273, 105, 67, 13, (UBYTE *)"<None>", &HBBS8066, Ctrl_5, 16, NULL,  (APTR)&CtrlGadgetTags[15],
  205, 105, 67, 13, (UBYTE *)"<None>", &HBBS8066, Ctrl_4, 16, NULL,  (APTR)&CtrlGadgetTags[18],
  137, 105, 67, 13, (UBYTE *)"<None>", &HBBS8066, Ctrl_3, 16, NULL,  (APTR)&CtrlGadgetTags[21],
  69, 105, 67, 13, (UBYTE *)"<None>", &HBBS8066, Ctrl_2, 16, NULL,  (APTR)&CtrlGadgetTags[24],
  1, 105, 67, 13, (UBYTE *)"<None>", &HBBS8066, Ctrl_1, 16, NULL,  (APTR)&CtrlGadgetTags[27],
  1, 119, 67, 13, (UBYTE *)"<None>", &HBBS8066, Ctrl_6, 16, NULL,  (APTR)&CtrlGadgetTags[30],
  69, 119, 67, 13, (UBYTE *)"<None>", &HBBS8066, Ctrl_7, 16, NULL,  (APTR)&CtrlGadgetTags[33],
  137, 119, 67, 13, (UBYTE *)"<None>", &HBBS8066, Ctrl_8, 16, NULL,  (APTR)&CtrlGadgetTags[36],
  205, 119, 67, 13, (UBYTE *)"<None>", &HBBS8066, Ctrl_9, 16, NULL,  (APTR)&CtrlGadgetTags[39],
  273, 119, 67, 13, (UBYTE *)"<None>", &HBBS8066, Ctrl_10, 16, NULL,  (APTR)&CtrlGadgetTags[42],
  69, 134, 560, 12, (UBYTE *)"Status:", &HBBS8066, Ctrl_StatusText, 1, NULL,  (APTR)&CtrlGadgetTags[45],
  };
UWORD CtrlZoomInfo[4] = { 0, 10, 196, 11 };

struct IntuiText CtrlCfgTexts[] =
  {
  2, 0, JAM2, 16, 3, &HBBS8066, (UBYTE *)"Screen Settings", &CtrlCfgTexts[1],
  2, 0, JAM2, 16, 39, &HBBS8066, (UBYTE *)"Misc Settings", NULL
  };

struct Window *CtrlCfg = NULL;
APTR CtrlCfgVisualInfo;
APTR CtrlCfgDrawInfo;
struct Gadget *CtrlCfgGList;
struct Gadget *CtrlCfgGadgets[3];
UBYTE CtrlCfgFirstRun = 0;

UWORD CtrlCfgGadgetTypes[] =
  {
  BUTTON_KIND,
  BUTTON_KIND,
  BUTTON_KIND,
  };

struct NewGadget CtrlCfgNewGad[] =
  {
  11, 13, 110, 13, (UBYTE *)"Pick Mode", &HBBS8066, CtrlCfg_ScreenMode, 16, NULL,  NULL,
  124, 13, 110, 13, (UBYTE *)"Save", &HBBS8066, CtrlCfg_Save, 16, NULL,  NULL,
  11, 50, 110, 13, (UBYTE *)"BBS Config", &HBBS8066, CtrlCfg_EditBBSConfig, 16, NULL,  NULL,
  };

struct IntuiText LoadingTexts[] =
  {
  2, 0, JAM2, 12, 4, &HBBS8066, (UBYTE *)"HydraBBS", &LoadingTexts[1],
  2, 3, JAM1, 118, 15, &HBBS8066, (UBYTE *)"(C) 1996 Dominic Clifton", &LoadingTexts[2],
  2, 1, JAM1, 137, 25, &HBBS8066, (UBYTE *)"Deluxe Software Ltd", &LoadingTexts[3],
  2, 3, JAM1, 25, 48, &HBBS8066, (UBYTE *)"HydraBBS Now Loading, Please Wait", &LoadingTexts[4],
  2, 3, JAM1, 42, 62, &HBBS8066, (UBYTE *)"Please see the docs on how to", &LoadingTexts[5],
  2, 3, JAM1, 55, 71, &HBBS8066, (UBYTE *)"register your copy of HBBS", &LoadingTexts[6],
  2, 3, JAM1, 31, 85, &HBBS8066, (UBYTE *)"If you want continued development", &LoadingTexts[7],
  2, 3, JAM1, 31, 95, &HBBS8066, (UBYTE *)"registering HBBS will ensure that", &LoadingTexts[8],
  2, 3, JAM1, 73, 104, &HBBS8066, (UBYTE *)"you get constant updates", &LoadingTexts[9],
  2, 3, JAM1, 45, 133, &HBBS8066, (UBYTE *)"SHAREWARE SHAREWARE SHAREWARE", NULL
  };

struct Window *Loading = NULL;
APTR LoadingVisualInfo;
APTR LoadingDrawInfo;
UBYTE LoadingFirstRun = 0;

UWORD    CtrlScrndefpens = {65535};

UWORD   CtrlScrnColors[] =
    {
    0,10,10,10,
    1,0,0,0,
    65535,0,0,0
    };

ULONG  CtrlScrnError=0;

ULONG   CtrlScrnTags[] =
    {
    (SA_Title),(ULONG)"HBBS",
    (SA_PubName),(ULONG)"CtrlScrn",
    (SA_Depth)   ,2,
    (SA_Left)    ,0,
    (SA_Top)     ,0,
    (SA_Width)   ,640,
    (SA_Height)  ,256,
    (SA_DisplayID),167936,
    (SA_Overscan),1,
    (SA_Font),(ULONG)&HBBS8066,
    (SA_Behind),1,
    (SA_Quiet),0,
    (SA_ShowTitle),1,
    (SA_AutoScroll),1,
    (SA_FullPalette),1,
    (SA_ErrorCode),(ULONG)(&CtrlScrnError),
    (SA_Pens),(ULONG)&CtrlScrndefpens,
    (SA_Colors),(ULONG)CtrlScrnColors,
    (TAG_DONE)
    };

struct Library *DiskfontBase = NULL;
struct Library *GadToolsBase = NULL;
struct GfxBase *GfxBase = NULL;
struct IntuitionBase *IntuitionBase = NULL;

struct Image HbbsLogo_brush = { 0, 0, 80, 25, 3, NULL, 7, 0, NULL};

APTR WaitPointer = NULL;
UWORD WaitPointerData[] =
    {
    0x0000,0x0000,0x0400,0x07c0,
    0x0000,0x07c0,0x0100,0x0380,
    0x0000,0x07e0,0x07c0,0x1ff8,
    0x1ff0,0x3fec,0x3ff8,0x7fde,
    0x3ff8,0x7fbe,0x7ffc,0xff7f,
    0x7ffc,0xffff,0x7ffc,0xffff,
    0x3ff8,0x7ffe,0x3ff8,0x7ffe,
    0x1ff0,0x3ffc,0x07c0,0x1ff8,
    0x0000,0x07e0,0x0000,0x0000
    };

struct TextAttr HBBS8066 = { (STRPTR)"HBBS.font", 8, 0, 66 };

int MakeMenuCtrlMenu( APTR MenuVisualInfo )
{
  if (NULL == (CtrlMenu = CreateMenusA( CtrlMenuNewMenu, NULL)))
    return( 1L );
  LayoutMenusA( CtrlMenu, MenuVisualInfo, (struct TagItem *)(&CtrlMenuTags[0]));
  return( 0L );
}

void RendWindowCtrl( struct Window *Win, void *vi )
{
UWORD offx = Win->BorderLeft;
UWORD offy = Win->BorderTop;
if (Win != NULL)
  {
  DrawImage( Win->RPort, &HbbsLogo_brush, 357+offx, 99+offy);
  BevelTags[3] = (ULONG)vi;
  DrawBevelBoxA( Win->RPort, 1+offx,134+offy,630,12, (struct TagItem *)(&BevelTags[2]));
  DrawBevelBoxA( Win->RPort, 341+offx,91+offy,110,41, (struct TagItem *)(&BevelTags[2]));
  DrawBevelBoxA( Win->RPort,341+4+offx,91+2+offy,110-8,41-4, (struct TagItem *)(&BevelTags[0]));
  }
}

int OpenCtrlWindow( struct Screen *Scr)
{
UWORD offx, offy;
UWORD loop;
struct NewGadget newgad;
struct Gadget *Gad;
struct Gadget *Gad2;
APTR Cla;
if (CtrlFirstRun == 0)
  {
  CtrlFirstRun = 1;
  }
if (Ctrl == NULL)
  {
  offx = Scr->WBorLeft;
  offy = Scr->WBorTop + Scr->Font->ta_YSize+1;
  if (NULL != ( CtrlVisualInfo = GetVisualInfoA( Scr, NULL)))
    {
    if (NULL != ( CtrlDrawInfo = GetScreenDrawInfo( Scr)))
      {
      CtrlGList = NULL;
      Gad = CreateContext( &CtrlGList);
      for ( loop=0 ; loop<25 ; loop++ )
        if (CtrlGadgetTypes[loop] != 198)
          {
          CopyMem((char * )&CtrlNewGad[loop], ( char * )&newgad, (long)sizeof( struct NewGadget ));
          newgad.ng_VisualInfo = CtrlVisualInfo;
          newgad.ng_LeftEdge += offx;
          newgad.ng_TopEdge += offy;
          CtrlGadgets[ loop ] = NULL;
          CtrlGadgets[ newgad.ng_GadgetID - CtrlFirstID ] = Gad = CreateGadgetA( CtrlGadgetTypes[loop], Gad, &newgad, newgad.ng_UserData );
          }
      for ( loop=0 ; loop<25 ; loop++ )
        if (CtrlGadgetTypes[loop] == 198)
          {
          CtrlGadgets[ loop ] = NULL;
          Cla = NULL;
          if (Gad)
            CtrlGadgets[ loop ] = Gad2 = (struct Gadget *) NewObjectA( (struct IClass *)Cla, CtrlNewGad[ loop ].ng_GadgetText, CtrlNewGad[ loop ].ng_UserData );
          }
      if (Gad != NULL)
        {
        if (NULL != (Ctrl = OpenWindowTags( NULL, (WA_Left), 0,
                (WA_Top), 11,
                (WA_Width), 636+offx,
                (WA_Height), 149+offy,
                (WA_Title), "HBBS Control",
                (WA_ScreenTitle), "(C) Deluxe Software Ltd. Written By Dominic Clifton (Hydra/LSD)",
                (WA_MinWidth), 196,
                (WA_MinHeight), 11,
                (WA_MaxWidth), 640,
                (WA_MaxHeight), 160,
                (WA_DragBar), TRUE,
                (WA_DepthGadget), TRUE,
                (WA_CloseGadget), TRUE,
                (WA_Activate), TRUE,
                (WA_Dummy+0x30), TRUE,
                (WA_SmartRefresh), TRUE,
                (WA_AutoAdjust), TRUE,
                (WA_Gadgets), CtrlGList,
                (WA_Zoom), CtrlZoomInfo,
                (WA_PubScreen) , (LONG)Scr,
                (WA_IDCMP),6292348,
                (TAG_END))))
          {
          RendWindowCtrl(Ctrl, CtrlVisualInfo );
          GT_RefreshWindow( Ctrl, NULL);
          RefreshGList( CtrlGList, Ctrl, NULL, ~0);
          if (CtrlMenu == NULL)
            MakeMenuCtrlMenu( CtrlVisualInfo);
          if (CtrlMenu != NULL)
            {
            SetMenuStrip( Ctrl, CtrlMenu);
            return( 0L );
            }
          CloseWindow( Ctrl );
          }
        }
      FreeGadgets( CtrlGList);
      FreeScreenDrawInfo( Scr, CtrlDrawInfo );
      }
    FreeVisualInfo( CtrlVisualInfo );
    }
  }
else
  {
  WindowToFront(Ctrl);
  ActivateWindow(Ctrl);
  return( 0L );
  }
return( 1L );
}

void CloseCtrlWindow( void )
{
if (Ctrl != NULL)
  {
  ClearMenuStrip( Ctrl);
  FreeMenus( CtrlMenu);
  CtrlMenu = NULL;
  FreeScreenDrawInfo( Ctrl->WScreen, CtrlDrawInfo );
  CtrlDrawInfo = NULL;
  CloseWindow( Ctrl);
  Ctrl = NULL;
  FreeVisualInfo( CtrlVisualInfo);
  FreeGadgets( CtrlGList);
  }
}

void RendWindowCtrlCfg( struct Window *Win, void *vi )
{
int loop;
UWORD offx = Win->BorderLeft;
UWORD offy = Win->BorderTop;
if (Win != NULL)
  {
  BevelTags[3] = (ULONG)vi;
  DrawBevelBoxA( Win->RPort, 2+offx,5+offy,242,29, (struct TagItem *)(&BevelTags[0]));
  DrawBevelBoxA( Win->RPort,2+4+offx,5+2+offy,242-8,29-4, (struct TagItem *)(&BevelTags[2]));
  DrawBevelBoxA( Win->RPort, 2+offx,41+offy,241,29, (struct TagItem *)(&BevelTags[0]));
  DrawBevelBoxA( Win->RPort,2+4+offx,41+2+offy,241-8,29-4, (struct TagItem *)(&BevelTags[2]));
  for( loop=0; loop<2; loop++)
    if (CtrlCfgTexts[loop].ITextFont==NULL)
      CtrlCfgTexts[loop].ITextFont=Win->WScreen->Font;
  PrintIText( Win->RPort, CtrlCfgTexts, offx, offy);
  }
}

int OpenCtrlCfgWindow( struct Screen *Scr)
{
UWORD offx, offy;
UWORD loop;
struct NewGadget newgad;
struct Gadget *Gad;
struct Gadget *Gad2;
APTR Cla;
if (CtrlCfgFirstRun == 0)
  {
  CtrlCfgFirstRun = 1;
  }
if (CtrlCfg == NULL)
  {
  offx = Scr->WBorLeft;
  offy = Scr->WBorTop + Scr->Font->ta_YSize+1;
  if (NULL != ( CtrlCfgVisualInfo = GetVisualInfoA( Scr, NULL)))
    {
    if (NULL != ( CtrlCfgDrawInfo = GetScreenDrawInfo( Scr)))
      {
      CtrlCfgGList = NULL;
      Gad = CreateContext( &CtrlCfgGList);
      for ( loop=0 ; loop<3 ; loop++ )
        if (CtrlCfgGadgetTypes[loop] != 198)
          {
          CopyMem((char * )&CtrlCfgNewGad[loop], ( char * )&newgad, (long)sizeof( struct NewGadget ));
          newgad.ng_VisualInfo = CtrlCfgVisualInfo;
          newgad.ng_LeftEdge += offx;
          newgad.ng_TopEdge += offy;
          CtrlCfgGadgets[ loop ] = NULL;
          CtrlCfgGadgets[ newgad.ng_GadgetID - CtrlCfgFirstID ] = Gad = CreateGadgetA( CtrlCfgGadgetTypes[loop], Gad, &newgad, newgad.ng_UserData );
          }
      for ( loop=0 ; loop<3 ; loop++ )
        if (CtrlCfgGadgetTypes[loop] == 198)
          {
          CtrlCfgGadgets[ loop ] = NULL;
          Cla = NULL;
          if (Gad)
            CtrlCfgGadgets[ loop ] = Gad2 = (struct Gadget *) NewObjectA( (struct IClass *)Cla, CtrlCfgNewGad[ loop ].ng_GadgetText, CtrlCfgNewGad[ loop ].ng_UserData );
          }
      if (Gad != NULL)
        {
        if (NULL != (CtrlCfg = OpenWindowTags( NULL, (WA_Left), 353,
                (WA_Top), 26,
                (WA_Width), 249+offx,
                (WA_Height), 74+offy,
                (WA_Title), "Configure",
                (WA_MinWidth), 150,
                (WA_MinHeight), 25,
                (WA_MaxWidth), 1200,
                (WA_MaxHeight), 1200,
                (WA_DragBar), TRUE,
                (WA_DepthGadget), TRUE,
                (WA_CloseGadget), TRUE,
                (WA_Activate), TRUE,
                (WA_SmartRefresh), TRUE,
                (WA_AutoAdjust), TRUE,
                (WA_Gadgets), CtrlCfgGList,
                (WA_PubScreen) , (LONG)Scr,
                (WA_IDCMP),580,
                (TAG_END))))
          {
          RendWindowCtrlCfg(CtrlCfg, CtrlCfgVisualInfo );
          GT_RefreshWindow( CtrlCfg, NULL);
          RefreshGList( CtrlCfgGList, CtrlCfg, NULL, ~0);
          return( 0L );
          }
        }
      FreeGadgets( CtrlCfgGList);
      FreeScreenDrawInfo( Scr, CtrlCfgDrawInfo );
      }
    FreeVisualInfo( CtrlCfgVisualInfo );
    }
  }
else
  {
  WindowToFront(CtrlCfg);
  ActivateWindow(CtrlCfg);
  return( 0L );
  }
return( 1L );
}

void CloseCtrlCfgWindow( void )
{
if (CtrlCfg != NULL)
  {
  FreeScreenDrawInfo( CtrlCfg->WScreen, CtrlCfgDrawInfo );
  CtrlCfgDrawInfo = NULL;
  CloseWindow( CtrlCfg);
  CtrlCfg = NULL;
  FreeVisualInfo( CtrlCfgVisualInfo);
  FreeGadgets( CtrlCfgGList);
  }
}

void RendWindowLoading( struct Window *Win, void *vi )
{
int loop;
UWORD offx = Win->BorderLeft;
UWORD offy = Win->BorderTop;
if (Win != NULL)
  {
  DrawImage( Win->RPort, &HbbsLogo_brush, 22+offx, 15+offy);
  BevelTags[3] = (ULONG)vi;
  DrawBevelBoxA( Win->RPort, 12+offx,44+offy,299,82, (struct TagItem *)(&BevelTags[0]));
  DrawBevelBoxA( Win->RPort, 2+offx,6+offy,319,143, (struct TagItem *)(&BevelTags[0]));
  DrawBevelBoxA( Win->RPort,2+4+offx,6+2+offy,319-8,143-4, (struct TagItem *)(&BevelTags[2]));
  DrawBevelBoxA( Win->RPort, 12+offx,129+offy,299,15, (struct TagItem *)(&BevelTags[0]));
  for( loop=0; loop<10; loop++)
    if (LoadingTexts[loop].ITextFont==NULL)
      LoadingTexts[loop].ITextFont=Win->WScreen->Font;
  PrintIText( Win->RPort, LoadingTexts, offx, offy);
  }
}

int OpenLoadingWindow( void )
{
struct Screen *Scr;
UWORD offx, offy;
if (LoadingFirstRun == 0)
  {
  LoadingFirstRun = 1;
  }
if (Loading == NULL)
  {
  Scr = LockPubScreen(NULL);
  if (NULL != Scr)
    {
    offx = Scr->WBorLeft;
    offy = Scr->WBorTop + Scr->Font->ta_YSize+1;
    if (NULL != ( LoadingVisualInfo = GetVisualInfoA( Scr, NULL)))
      {
      if (NULL != ( LoadingDrawInfo = GetScreenDrawInfo( Scr)))
        {
        if (NULL != (Loading = OpenWindowTags( NULL, (WA_Left), 221,
                (WA_Top), 102,
                (WA_Width), 327+offx,
                (WA_Height), 154+offy,
                (WA_Title), "HBBS - Loading",
                (WA_MinWidth), 150,
                (WA_MinHeight), 25,
                (WA_MaxWidth), 1200,
                (WA_MaxHeight), 1200,
                (WA_DragBar), TRUE,
                (WA_DepthGadget), TRUE,
                (WA_Activate), TRUE,
                (WA_SmartRefresh), TRUE,
                (WA_IDCMP),580,
                (TAG_END))))
          {
          RendWindowLoading(Loading, LoadingVisualInfo );
          UnlockPubScreen( NULL, Scr);
          return( 0L );
          }
        FreeScreenDrawInfo( Scr, LoadingDrawInfo );
        }
      FreeVisualInfo( LoadingVisualInfo );
      }
    UnlockPubScreen( NULL, Scr);
    }
  }
else
  {
  WindowToFront(Loading);
  ActivateWindow(Loading);
  return( 0L );
  }
return( 1L );
}

void CloseLoadingWindow( void )
{
if (Loading != NULL)
  {
  FreeScreenDrawInfo( Loading->WScreen, LoadingDrawInfo );
  LoadingDrawInfo = NULL;
  CloseWindow( Loading);
  Loading = NULL;
  FreeVisualInfo( LoadingVisualInfo);
  }
}

struct Screen *OpenCtrlScrnScreen(void)
{
CtrlScrnError = 0;
return OpenScreenTagList(NULL,(struct TagItem *)CtrlScrnTags);
}

int OpenLibs( void )
{
if ( NULL != (DiskfontBase = OpenLibrary((UBYTE *)"diskfont.library" , 36)))
  if ( NULL != (GadToolsBase = OpenLibrary((UBYTE *)"gadtools.library" , 37)))
    if ( NULL != (GfxBase = (struct GfxBase * )OpenLibrary((UBYTE *)"graphics.library" , 37)))
      if ( NULL != (IntuitionBase = (struct IntuitionBase * )OpenLibrary((UBYTE *)"intuition.library" , 37)))
        return( 0L );
CloseLibs();
return( 1L );
}

void CloseLibs( void )
{
if (NULL != DiskfontBase )
  CloseLibrary( DiskfontBase );
if (NULL != GadToolsBase )
  CloseLibrary( GadToolsBase );
if (NULL != GfxBase )
  CloseLibrary( ( struct Library * )GfxBase );
if (NULL != IntuitionBase )
  CloseLibrary( ( struct Library * )IntuitionBase );
}

int OpenDiskFonts( void )
{
  int OKSoFar = 0;
if (NULL == OpenDiskFont( &HBBS8066 ) )
  OKSoFar = 1;
return ( OKSoFar );
}

int MakeImages( void )
{
UWORD failed = 0;
if (NULL != (WaitPointer=AllocMem( 72, MEMF_CHIP)))
  CopyMem( WaitPointerData, WaitPointer, 72);
else
  failed = 1;
if (NULL != (HbbsLogo_brush.ImageData=AllocMem( 750, MEMF_CHIP)))
  CopyMem( HbbsLogo_brushData, HbbsLogo_brush.ImageData, 750);
else
  failed = 1;
if (failed==0)
  return( 0L );
else
  {
  FreeImages();
  return( 1L );
  }
}

void FreeImages( void )
{
if (WaitPointer != NULL)
  FreeMem( WaitPointer, 72);
WaitPointer = NULL;
if (HbbsLogo_brush.ImageData != NULL)
  FreeMem(HbbsLogo_brush.ImageData, 750);
HbbsLogo_brush.ImageData = NULL;
}

