//--------------------------------------------------------------------
// Íðáíàíåãäìçä ïäðòïðíá îïíâïaëëú îïç áúôíãä

void Free (void)
{
  if (mw_mcc)
    MUI_DeleteCustomClass (mw_mcc);
  if (MUIMasterBase)
    CloseLibrary (MUIMasterBase);
  if (MailProBase)
    CloseLibrary (MailProBase);
  if (ReqToolsBase)
    CloseLibrary (ReqToolsBase);
  if (IntuitionBase)
    CloseLibrary (IntuitionBase);
}
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///
// Îïíáäïéa çìðñïòëäìñaïçþ ç æaâïòæéa ìäíàôíãçëúô óaèêíá
BOOL LoadToolTypes (void)
{
  struct Task *task;
  struct Library *IconBase;
  struct DiskObject *diskobj;
  STRPTR t;
  BPTR bp;
  ULONG x;
  BOOL result = TRUE;

  if (IconBase = OpenLibrary (ICON_LIBRARY_NAME, ICON_LIBRARY_VERSION))
    {
      task = FindTask (NULL);
      if (diskobj = GetDiskObject (task->tc_Node.ln_Name))
        {
          if (t = FindToolType (diskobj->do_ToolTypes, WORKDIR_TEMPLATE))
            {
              if (bp = Lock (t, ACCESS_READ))
                {
                  UnLock (bp);
                  strcpy (workdir, t);
                }
              else
                {
                  if (MakeRequest (REQ_TITLE_ERROR, BAD_TEMPLATE, CONTINUE_EXIT_BUTTON, WORKDIR_TEMPLATE))
                    strcpy (workdir, SYSTEM_DIR);
                  else
                    result = FALSE;
                }
            }
          if (result)
            {
              if (t = FindToolType (diskobj->do_ToolTypes, TRANSTAB_TEMPLATE))
                {
                  if ((! (bp = Open (t, MODE_OLDFILE))) || (Read (bp, transtab, 256) != 256))
                    {
                      if (MakeRequest (REQ_TITLE_ERROR, BAD_TEMPLATE, CONTINUE_EXIT_BUTTON, TRANSTAB_TEMPLATE))
                        {
                          for (x = 0; x < 256; x++)
                            transtab[x] = x;
                        }
                      else
                        result = FALSE;
                    }
                  if (bp)
                    Close (bp);
                }
            }
          FreeDiskObject (diskobj);
        }
      CloseLibrary (IconBase);
    }
  return (result);
}
///¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ <
///

BOOL Init (void)
{
  if (IntuitionBase = OpenLibrary (INTUITION_LIBRARY_NAME, INTUITION_LIBRARY_VERSION))
    {
      if (ReqToolsBase = OpenLibrary (REQ_LIBRARY_NAME, REQ_LIBRARY_VERSION))
        {
          if (MailProBase = OpenLibrary (MAILPRO_LIBRARY_NAME, MAILPRO_LIBRARY_VERSION))
            {
              if (MUIMasterBase = OpenLibrary (MUI_LIBRARY_NAME, MUI_LIBRARY_VERSION))
                {
                  if (LoadToolTypes())
                    {
                      if (mw_mcc = MUI_CreateCustomClass (NULL, MUIC_Window, NULL, sizeof(struct MWData), (APTR)MainWinDispatcher))
                        return (ALL_RIGHT);
                      else
                        MakeRequest (REQ_TITLE_ERROR, CC_PROBLEM, EXIT_BUTTON, NULL);
                    }
                }
              else
                MakeRequest (REQ_TITLE_ERROR, LIBRARY_PROBLEM, EXIT_BUTTON, MUI_LIBRARY_NAME, MUI_LIBRARY_VERSION);
            }
          else
            MakeRequest (REQ_TITLE_ERROR, LIBRARY_PROBLEM, EXIT_BUTTON, MAILPRO_LIBRARY_NAME, MAILPRO_LIBRARY_VERSION);
        }
      else
        MakeRequest (REQ_TITLE_ERROR, LIBRARY_PROBLEM, EXIT_BUTTON, REQ_LIBRARY_NAME, REQ_LIBRARY_VERSION);
    }
  else
    Alert (AT_DeadEnd | AN_ExecLib | AG_OpenLib | AO_Intuition);
}
