//--------------------------------------------------------------------
// อ๐แํเํๅใไ์็ไ ๏ไ๐๒๏๐ํแ ๎๏ํโ๏a๋๋๚ ๎๏็ แ๚๔ํใไ

void Free (void)
{
  if (PatList)
    FreePatList(PatList);
  if (xw_mcc)
    MUI_DeleteCustomClass (xw_mcc);
  if (mw_mcc)
    MUI_DeleteCustomClass (mw_mcc);
  if (MUIMasterBase)
    CloseLibrary (MUIMasterBase);
  if (ReqToolsBase)
    CloseLibrary (ReqToolsBase);
  if (IdentifyBase)
    CloseLibrary (IdentifyBase);
  if (LocaleBase)
    {
      CloseCatalog (catalog);
      CloseLibrary (LocaleBase);
    }
  if (XpkBase)
    {
      if (XM)
        XpkFreeObject (XPKOBJ_MODE, XM);
      if (XI)
        XpkFreeObject (XPKOBJ_PACKERINFO, XI);
      if (XL)
        XpkFreeObject (XPKOBJ_PACKERLIST, XL);
      CloseLibrary (XpkBase);
    }
  if (IntuitionBase)
    CloseLibrary (IntuitionBase);
}
///กกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก <
///

BOOL Init (void)
{
  LONG count;

  if (IntuitionBase = OpenLibrary (INTUITION_LIBRARY_NAME, INTUITION_LIBRARY_VERSION))
    {
      if (XpkBase = OpenLibrary (XPK_LIBRARY_NAME, XPK_LIBRARY_VERSION))
        {
          if (LocaleBase = OpenLibrary (LOCALE_LIBRARY_NAME, LOCALE_LIBRARY_VERSION))
            {
              if (catalog = OpenCatalog (NULL, GETMES(CATALOG_NAME), OC_Version, CATALOG_LAST_VERSION, OC_BuiltInLanguage, GETMES(BUILTIN_LANGUAGE), TAG_DONE))
                {
                  for (count = PROG_COPYRIGHT; count < FINISH; count++)
                    messages[count] = GetCatalogStr (catalog, count, GETMES(count));
                }
            }
          if (IdentifyBase = OpenLibrary (ID_LIBRARY_NAME, ID_LIBRARY_VERSION))
            {
              if (ReqToolsBase = OpenLibrary (REQ_LIBRARY_NAME, REQ_LIBRARY_VERSION))
                {
                  if (MUIMasterBase = OpenLibrary (MUI_LIBRARY_NAME, MUI_LIBRARY_VERSION))
                    {
                      if (mw_mcc = MUI_CreateCustomClass (NULL, MUIC_Window, NULL, sizeof(struct MWData), (APTR)MainWinDispatcher))
                        {
                          if (xw_mcc = MUI_CreateCustomClass (NULL, MUIC_Window, NULL, sizeof(struct XWData), (APTR)XpkWinDispatcher))
                            {
                              FillIt (PatternMode, StorageMode, StorageMethod, PerformCheck, NULL);
                             if (PatList = AllocVec (sizeof(struct List), MEMF_PUBLIC))
                               {
                                 NewList (PatList);
                                 if (LoadSets(DEF_ENV_FILE, PatList))
                                   return (ALL_RIGHT);
                               }
                             else
                               MakeRequest (REQ_TITLE_ERROR, OUT_MEM, EXIT_BUT, NULL);
                            }
                          else
                            MakeRequest (REQ_TITLE_ERROR, CC_PROBLEM, EXIT_BUT, NULL);
                        }
                      else
                        MakeRequest (REQ_TITLE_ERROR, CC_PROBLEM, EXIT_BUT, NULL);
                    }
                  else
                    MakeRequest (REQ_TITLE_ERROR, LIBRARY_PROBLEM, EXIT_BUT, MUI_LIBRARY_NAME, MUI_LIBRARY_VERSION);
                }
              else
                MakeRequest (REQ_TITLE_ERROR, LIBRARY_PROBLEM, EXIT_BUT, REQ_LIBRARY_NAME, REQ_LIBRARY_VERSION);
            }
          else
            MakeRequest (REQ_TITLE_ERROR, LIBRARY_PROBLEM, EXIT_BUT, ID_LIBRARY_NAME, ID_LIBRARY_VERSION);
        }
      else
        MakeRequest (REQ_TITLE_ERROR, LIBRARY_PROBLEM, EXIT_BUT, XPK_LIBRARY_NAME, XPK_LIBRARY_VERSION);
    }
  else
    Alert (AT_DeadEnd | AN_ExecLib | AG_OpenLib | AO_Intuition);
}
