public static AcceptedFilesResults DetermineAcceptedFiles(string[] files, BitVector32 miscFlags)
        {
            var results = new AcceptedFilesResults();

            if (files == null || files.Length == 0)
            {
                return(results);
            }

            results.FilesCount = files.Length;

            foreach (string path in files)
            {
                if (System.IO.Directory.Exists(path))
                {
                    results.AcceptedFileTypes.Set(AcceptedFileType.Directory);
                    continue;
                }

                string ext = System.IO.Path.GetExtension(path);
                if (string.IsNullOrEmpty(ext))                 // extension-less file
                {
                    results.AcceptedFileTypes.Set(AcceptedFileType.Unaccepted);
                    continue;
                }

                // #HACK ECFs
                // Needs to come before all other file extension checks as it is a forced override
                if (miscFlags.Test(MiscFlags.AssumeDragAndDropFilesAreEcf))
                {
                    results.AcceptedFileTypes.Set(AcceptedFileType.Ecf);
                    continue;
                }

                switch (ext)
                {
                case KSoft.Phoenix.Resource.EraFileUtil.kExtensionEncrypted:
                    results.AcceptedFileTypes.Set(AcceptedFileType.Era);
                    break;

                case KSoft.Phoenix.Resource.EraFileBuilder.kNameExtension:
                    results.AcceptedFileTypes.Set(AcceptedFileType.EraDef);
                    break;

                case KSoft.Phoenix.Resource.ECF.EcfFileDefinition.kFileExtension:
                    results.AcceptedFileTypes.Set(AcceptedFileType.EcfDef);
                    break;

                case KSoft.Phoenix.Resource.PKG.CaPackageFile.kFileExtension:
                    results.AcceptedFileTypes.Set(AcceptedFileType.Pkg);
                    break;

                case KSoft.Phoenix.Resource.PKG.CaPackageFileDefinition.kFileExtension:
                    results.AcceptedFileTypes.Set(AcceptedFileType.PkgDef);
                    break;

                case ".exe":
                    results.AcceptedFileTypes.Set(AcceptedFileType.Exe);
                    break;

                case ".xex":
                    results.AcceptedFileTypes.Set(AcceptedFileType.Exe);
                    break;

                case ".xmb":
                    results.AcceptedFileTypes.Set(AcceptedFileType.Xmb);
                    break;

                case KSoft.Phoenix.Xmb.BinaryDataTree.kBinaryFileExtension:
                    results.AcceptedFileTypes.Set(AcceptedFileType.BinaryDataTree);
                    break;

                case KSoft.Phoenix.Xmb.BinaryDataTree.kTextFileExtension:
                    results.AcceptedFileTypes.Set(AcceptedFileType.BinaryDataTreeXml);
                    break;

                default:
                    if (KSoft.Phoenix.Resource.ResourceUtils.IsXmlBasedFile(path))
                    {
                        results.AcceptedFileTypes.Set(AcceptedFileType.Xml);
                    }
                    break;
                }
            }

            return(results);
        }