/// <summary>
        /// Index all files of specified library type.
        /// </summary>
        /// <param name="FilePaths">Array of absolute paths to files.</param>
        /// <param name="Type">Library type.</param>
        /// <returns></returns>
        private bool IndexLibrary(ref string[] FilePaths, LibraryTypes Type)
        {
            // Create file name arrays
            switch (Type)
            {
            case LibraryTypes.Texture:
                TextureFileNames = new string[(FilePaths.Length - Arena2.TextureFile.UnsupportedFilenames.Length)];
                break;

            case LibraryTypes.Img:
                ImgFileNames = new string[(FilePaths.Length - Arena2.TextureFile.UnsupportedFilenames.Length)];
                break;

            case LibraryTypes.Cif:
                CifFileNames = new string[FilePaths.Length];
                break;

            case LibraryTypes.Rci:
                RciFileNames = new string[FilePaths.Length];
                break;

            case LibraryTypes.Sky:
                SkyFileNames = new string[FilePaths.Length];
                break;
            }

            // Index and hash files
            int         Index       = 0;
            TextureFile TextureFile = new TextureFile();
            ImgFile     ImgFile     = new ImgFile();

            foreach (string FilePath in FilePaths)
            {
                // Get filename only
                string FileName = Path.GetFileName(FilePath);

                // Handle unsupported TEXTURE files
                if (LibraryTypes.Texture == Type)
                {
                    if (!TextureFile.IsFilenameSupported(FileName))
                    {
                        continue;
                    }
                }

                // Handle unsupported IMG files
                if (LibraryTypes.Img == Type)
                {
                    if (!ImgFile.IsFilenameSupported(FileName))
                    {
                        continue;
                    }
                }

                // Store file name in array
                switch (Type)
                {
                case LibraryTypes.Texture:
                    TextureFileNames[Index] = FileName;
                    break;

                case LibraryTypes.Img:
                    ImgFileNames[Index] = FileName;
                    break;

                case LibraryTypes.Cif:
                    CifFileNames[Index] = FileName;
                    break;

                case LibraryTypes.Rci:
                    RciFileNames[Index] = FileName;
                    break;

                case LibraryTypes.Sky:
                    SkyFileNames[Index] = FileName;
                    break;
                }

                // Create file item
                ImageFileItem Item = new ImageFileItem();
                Item.FileName    = FileName;
                Item.LibraryType = Type;
                Item.ImageFile   = null;

                // Add file item based on type
                switch (Type)
                {
                case LibraryTypes.Texture:
                    TextureFileItems.Add(Item);
                    break;

                case LibraryTypes.Img:
                    ImgFileItems.Add(Item);
                    break;

                case LibraryTypes.Cif:
                    CifFileItems.Add(Item);
                    break;

                case LibraryTypes.Rci:
                    RciFileItems.Add(Item);
                    break;

                case LibraryTypes.Sky:
                    SkyFileItems.Add(Item);
                    break;
                }

                // Hash file index based on type
                switch (Type)
                {
                case LibraryTypes.Texture:
                    TextureHashtable.Add(FileName, Index);
                    break;

                case LibraryTypes.Img:
                    ImgHashtable.Add(FileName, Index);
                    break;

                case LibraryTypes.Cif:
                    CifHashtable.Add(FileName, Index);
                    break;

                case LibraryTypes.Rci:
                    RciHashtable.Add(FileName, Index);
                    break;

                case LibraryTypes.Sky:
                    SkyHashtable.Add(FileName, Index);
                    break;
                }

                // Increment index
                Index++;
            }

            return(true);
        }