X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkModulePkg%2FUniversal%2FDisk%2FUnicodeCollation%2FEnglish%2FDxe%2FUnicodeCollationEng.c;fp=EdkModulePkg%2FUniversal%2FDisk%2FUnicodeCollation%2FEnglish%2FDxe%2FUnicodeCollationEng.c;h=0000000000000000000000000000000000000000;hp=f043f37a5cb314785e478be99fff76de7428d2e1;hb=808def96aa4589fba9c2d0ea55837754a3b7a4f7;hpb=9216450d1143056a50a5f916984a2d7faf590488 diff --git a/EdkModulePkg/Universal/Disk/UnicodeCollation/English/Dxe/UnicodeCollationEng.c b/EdkModulePkg/Universal/Disk/UnicodeCollation/English/Dxe/UnicodeCollationEng.c deleted file mode 100644 index f043f37a5c..0000000000 --- a/EdkModulePkg/Universal/Disk/UnicodeCollation/English/Dxe/UnicodeCollationEng.c +++ /dev/null @@ -1,478 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - UnicodeCollationEng.c - -Abstract: - - Unicode Collation Protocol (English) - -Revision History - ---*/ - -#include "UnicodeCollationEng.h" - -CHAR8 mEngUpperMap[0x100]; -CHAR8 mEngLowerMap[0x100]; -CHAR8 mEngInfoMap[0x100]; - -CHAR8 mOtherChars[] = { - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - '\\', - '.', - '_', - '^', - '$', - '~', - '!', - '#', - '%', - '&', - '-', - '{', - '}', - '(', - ')', - '@', - '`', - '\'', - '\0' -}; - -EFI_HANDLE mHandle = NULL; - -EFI_UNICODE_COLLATION_PROTOCOL UnicodeEng = { - EngStriColl, - EngMetaiMatch, - EngStrLwr, - EngStrUpr, - EngFatToStr, - EngStrToFat, - "eng" -}; - -// -// -// -EFI_STATUS -InitializeUnicodeCollationEng ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -/*++ - -Routine Description: - - Initializes the Unicode Collation Driver - -Arguments: - - ImageHandle - - - SystemTable - - -Returns: - - EFI_SUCCESS - EFI_OUT_OF_RESOURCES - ---*/ -{ - UINTN Index; - UINTN Index2; - - // - // Initialize mapping tables for the supported languages - // - for (Index = 0; Index < 0x100; Index++) { - mEngUpperMap[Index] = (CHAR8) Index; - mEngLowerMap[Index] = (CHAR8) Index; - mEngInfoMap[Index] = 0; - - if ((Index >= 'a' && Index <= 'z') || (Index >= 0xe0 && Index <= 0xf6) || (Index >= 0xf8 && Index <= 0xfe)) { - - Index2 = Index - 0x20; - mEngUpperMap[Index] = (CHAR8) Index2; - mEngLowerMap[Index2] = (CHAR8) Index; - - mEngInfoMap[Index] |= CHAR_FAT_VALID; - mEngInfoMap[Index2] |= CHAR_FAT_VALID; - } - } - - for (Index = 0; mOtherChars[Index]; Index++) { - Index2 = mOtherChars[Index]; - mEngInfoMap[Index2] |= CHAR_FAT_VALID; - } - // - // Create a handle for the device - // - return gBS->InstallProtocolInterface ( - &mHandle, - &gEfiUnicodeCollationProtocolGuid, - EFI_NATIVE_INTERFACE, - &UnicodeEng - ); -} - -INTN -EFIAPI -EngStriColl ( - IN EFI_UNICODE_COLLATION_PROTOCOL *This, - IN CHAR16 *s1, - IN CHAR16 *s2 - ) -/*++ - -Routine Description: - - Performs a case-insensitive comparison of two Null-terminated Unicode strings. - -Arguments: - - This - s1 - s2 - -Returns: - ---*/ -{ - while (*s1) { - if (ToUpper (*s1) != ToUpper (*s2)) { - break; - } - - s1 += 1; - s2 += 1; - } - - return ToUpper (*s1) - ToUpper (*s2); -} - -VOID -EFIAPI -EngStrLwr ( - IN EFI_UNICODE_COLLATION_PROTOCOL *This, - IN OUT CHAR16 *Str - ) -/*++ - -Routine Description: - - Converts all the Unicode characters in a Null-terminated Unicode string - to lower case Unicode characters. - -Arguments: - - This - A pointer to the EFI_UNICODE_COLLATION_PROTOCOL instance. - Str1 - A pointer to a Null-terminated Unicode string. - Str2 - A pointer to a Null-terminated Unicode string. - -Returns: - - 0 - s1 is equivalent to s2. - > 0 - s1 is lexically greater than s2. - < 0 - s1 is lexically less than s2. - ---*/ -{ - while (*Str) { - *Str = ToLower (*Str); - Str += 1; - } -} - -VOID -EFIAPI -EngStrUpr ( - IN EFI_UNICODE_COLLATION_PROTOCOL *This, - IN OUT CHAR16 *Str - ) -/*++ - -Routine Description: - - Converts all the Unicode characters in a Null-terminated - Unicode string to upper case Unicode characters. - -Arguments: - This - Str - -Returns: - None - ---*/ -{ - while (*Str) { - *Str = ToUpper (*Str); - Str += 1; - } -} - -BOOLEAN -EFIAPI -EngMetaiMatch ( - IN EFI_UNICODE_COLLATION_PROTOCOL *This, - IN CHAR16 *String, - IN CHAR16 *Pattern - ) -/*++ - -Routine Description: - - Performs a case-insensitive comparison between a Null-terminated - Unicode pattern string and a Null-terminated Unicode string. - - The pattern string can use the '?' wildcard to match any character, - and the '*' wildcard to match any sub-string. - -Arguments: - - This - A pointer to the EFI_UNICODE_COLLATION_PROTOCOL instance. - String - A pointer to a Null-terminated Unicode string. - Pattern - A pointer to a Null-terminated Unicode pattern string. - -Returns: - - TRUE - Pattern was found in String. - FALSE - Pattern was not found in String. - ---*/ -{ - CHAR16 CharC; - CHAR16 CharP; - CHAR16 Index3; - - for (;;) { - CharP = *Pattern; - Pattern += 1; - - switch (CharP) { - case 0: - // - // End of pattern. If end of string, TRUE match - // - if (*String) { - return FALSE; - } else { - return TRUE; - } - - case '*': - // - // Match zero or more chars - // - while (*String) { - if (EngMetaiMatch (This, String, Pattern)) { - return TRUE; - } - - String += 1; - } - - return EngMetaiMatch (This, String, Pattern); - - case '?': - // - // Match any one char - // - if (!*String) { - return FALSE; - } - - String += 1; - break; - - case '[': - // - // Match char set - // - CharC = *String; - if (!CharC) { - // - // syntax problem - // - return FALSE; - } - - Index3 = 0; - CharP = *Pattern++; - while (CharP) { - if (CharP == ']') { - return FALSE; - } - - if (CharP == '-') { - // - // if range of chars, get high range - // - CharP = *Pattern; - if (CharP == 0 || CharP == ']') { - // - // syntax problem - // - return FALSE; - } - - if (ToUpper (CharC) >= ToUpper (Index3) && ToUpper (CharC) <= ToUpper (CharP)) { - // - // if in range, it's a match - // - break; - } - } - - Index3 = CharP; - if (ToUpper (CharC) == ToUpper (CharP)) { - // - // if char matches - // - break; - } - - CharP = *Pattern++; - } - // - // skip to end of match char set - // - while (CharP && CharP != ']') { - CharP = *Pattern; - Pattern += 1; - } - - String += 1; - break; - - default: - CharC = *String; - if (ToUpper (CharC) != ToUpper (CharP)) { - return FALSE; - } - - String += 1; - break; - } - } -} - -VOID -EFIAPI -EngFatToStr ( - IN EFI_UNICODE_COLLATION_PROTOCOL *This, - IN UINTN FatSize, - IN CHAR8 *Fat, - OUT CHAR16 *String - ) -/*++ - -Routine Description: - - Converts an 8.3 FAT file name using an OEM character set - to a Null-terminated Unicode string. - - BUGBUG: Function has to expand DBCS FAT chars, currently not. - -Arguments: - This - FatSize - Fat - String - -Returns: - ---*/ -{ - // - // No DBCS issues, just expand and add null terminate to end of string - // - while (*Fat && FatSize) { - *String = *Fat; - String += 1; - Fat += 1; - FatSize -= 1; - } - - *String = 0; -} - -BOOLEAN -EFIAPI -EngStrToFat ( - IN EFI_UNICODE_COLLATION_PROTOCOL *This, - IN CHAR16 *String, - IN UINTN FatSize, - OUT CHAR8 *Fat - ) -/*++ - -Routine Description: - - Converts a Null-terminated Unicode string to legal characters - in a FAT filename using an OEM character set. - - Functions has to crunch string to a fat string. Replacing - any chars that can't be represented in the fat name. - -Arguments: - This - String - FatSize - Fat - -Returns: - TRUE - FALSE ---*/ -{ - BOOLEAN SpecialCharExist; - - SpecialCharExist = FALSE; - while (*String && FatSize) { - // - // Skip '.' or ' ' when making a fat name - // - if (*String != '.' && *String != ' ') { - // - // If this is a valid fat char, move it. - // Otherwise, move a '_' and flag the fact that the name needs an Lfn - // - if (*String < 0x100 && (mEngInfoMap[*String] & CHAR_FAT_VALID)) { - *Fat = mEngUpperMap[*String]; - } else { - *Fat = '_'; - SpecialCharExist = TRUE; - } - - Fat += 1; - FatSize -= 1; - } - - String += 1; - } - // - // Do not terminate that fat string - // - return SpecialCharExist; -}