1 /** @file
2   Implementation of translation upon PC ANSI.
3 
4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6 
7 **/
8 
9 
10 #include "Terminal.h"
11 
12 /**
13   Translate all raw data in the Raw FIFO into unicode, and insert
14   them into Unicode FIFO.
15 
16   @param TerminalDevice          The terminal device.
17 
18 **/
19 VOID
AnsiRawDataToUnicode(IN TERMINAL_DEV * TerminalDevice)20 AnsiRawDataToUnicode (
21   IN  TERMINAL_DEV    *TerminalDevice
22   )
23 {
24   UINT8 RawData;
25 
26   //
27   // pop the raw data out from the raw fifo,
28   // and translate it into unicode, then push
29   // the unicode into unicode fifo, until the raw fifo is empty.
30   //
31   while (!IsRawFiFoEmpty (TerminalDevice) && !IsUnicodeFiFoFull (TerminalDevice)) {
32 
33     RawFiFoRemoveOneKey (TerminalDevice, &RawData);
34 
35     UnicodeFiFoInsertOneKey (TerminalDevice, (UINT16) RawData);
36   }
37 }
38 
39 /**
40   Check if input string is valid Ascii string, valid EFI control characters
41   or valid text graphics.
42 
43   @param  TerminalDevice          The terminal device.
44   @param  WString                 The input string.
45 
46   @retval EFI_UNSUPPORTED         If not all input characters are valid.
47   @retval EFI_SUCCESS             If all input characters are valid.
48 
49 **/
50 EFI_STATUS
AnsiTestString(IN TERMINAL_DEV * TerminalDevice,IN CHAR16 * WString)51 AnsiTestString (
52   IN  TERMINAL_DEV    *TerminalDevice,
53   IN  CHAR16          *WString
54   )
55 {
56   CHAR8 GraphicChar;
57 
58   //
59   // support three kind of character:
60   // valid ascii, valid efi control char, valid text graphics.
61   //
62   for (; *WString != CHAR_NULL; WString++) {
63 
64     if ( !(TerminalIsValidAscii (*WString) ||
65         TerminalIsValidEfiCntlChar (*WString) ||
66         TerminalIsValidTextGraphics (*WString, &GraphicChar, NULL) )) {
67 
68       return EFI_UNSUPPORTED;
69     }
70   }
71 
72   return EFI_SUCCESS;
73 }
74