Home | History | Annotate | Line # | Download | only in lib
console.c revision 1.1.1.1.6.2
      1  1.1.1.1.6.2  yamt /*	$NetBSD: console.c,v 1.1.1.1.6.2 2014/05/22 11:40:58 yamt Exp $	*/
      2  1.1.1.1.6.2  yamt 
      3  1.1.1.1.6.2  yamt /*++
      4  1.1.1.1.6.2  yamt 
      5  1.1.1.1.6.2  yamt Copyright (c) 1998  Intel Corporation
      6  1.1.1.1.6.2  yamt 
      7  1.1.1.1.6.2  yamt Module Name:
      8  1.1.1.1.6.2  yamt 
      9  1.1.1.1.6.2  yamt     console.c
     10  1.1.1.1.6.2  yamt 
     11  1.1.1.1.6.2  yamt Abstract:
     12  1.1.1.1.6.2  yamt 
     13  1.1.1.1.6.2  yamt 
     14  1.1.1.1.6.2  yamt 
     15  1.1.1.1.6.2  yamt 
     16  1.1.1.1.6.2  yamt Revision History
     17  1.1.1.1.6.2  yamt 
     18  1.1.1.1.6.2  yamt --*/
     19  1.1.1.1.6.2  yamt 
     20  1.1.1.1.6.2  yamt #include "lib.h"
     21  1.1.1.1.6.2  yamt 
     22  1.1.1.1.6.2  yamt 
     23  1.1.1.1.6.2  yamt 
     24  1.1.1.1.6.2  yamt VOID
     25  1.1.1.1.6.2  yamt Output (
     26  1.1.1.1.6.2  yamt     IN CHAR16   *Str
     27  1.1.1.1.6.2  yamt     )
     28  1.1.1.1.6.2  yamt // Write a string to the console at the current cursor location
     29  1.1.1.1.6.2  yamt {
     30  1.1.1.1.6.2  yamt     uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, Str);
     31  1.1.1.1.6.2  yamt }
     32  1.1.1.1.6.2  yamt 
     33  1.1.1.1.6.2  yamt 
     34  1.1.1.1.6.2  yamt VOID
     35  1.1.1.1.6.2  yamt Input (
     36  1.1.1.1.6.2  yamt     IN CHAR16    *Prompt OPTIONAL,
     37  1.1.1.1.6.2  yamt     OUT CHAR16   *InStr,
     38  1.1.1.1.6.2  yamt     IN UINTN     StrLen
     39  1.1.1.1.6.2  yamt     )
     40  1.1.1.1.6.2  yamt // Input a string at the current cursor location, for StrLen
     41  1.1.1.1.6.2  yamt {
     42  1.1.1.1.6.2  yamt     IInput (
     43  1.1.1.1.6.2  yamt         ST->ConOut,
     44  1.1.1.1.6.2  yamt         ST->ConIn,
     45  1.1.1.1.6.2  yamt         Prompt,
     46  1.1.1.1.6.2  yamt         InStr,
     47  1.1.1.1.6.2  yamt         StrLen
     48  1.1.1.1.6.2  yamt         );
     49  1.1.1.1.6.2  yamt }
     50  1.1.1.1.6.2  yamt 
     51  1.1.1.1.6.2  yamt VOID
     52  1.1.1.1.6.2  yamt IInput (
     53  1.1.1.1.6.2  yamt     IN SIMPLE_TEXT_OUTPUT_INTERFACE     *ConOut,
     54  1.1.1.1.6.2  yamt     IN SIMPLE_INPUT_INTERFACE           *ConIn,
     55  1.1.1.1.6.2  yamt     IN CHAR16                           *Prompt OPTIONAL,
     56  1.1.1.1.6.2  yamt     OUT CHAR16                          *InStr,
     57  1.1.1.1.6.2  yamt     IN UINTN                            StrLen
     58  1.1.1.1.6.2  yamt     )
     59  1.1.1.1.6.2  yamt // Input a string at the current cursor location, for StrLen
     60  1.1.1.1.6.2  yamt {
     61  1.1.1.1.6.2  yamt     EFI_INPUT_KEY                   Key;
     62  1.1.1.1.6.2  yamt     EFI_STATUS                      Status;
     63  1.1.1.1.6.2  yamt     UINTN                           Len;
     64  1.1.1.1.6.2  yamt 
     65  1.1.1.1.6.2  yamt     if (Prompt) {
     66  1.1.1.1.6.2  yamt         ConOut->OutputString (ConOut, Prompt);
     67  1.1.1.1.6.2  yamt     }
     68  1.1.1.1.6.2  yamt 
     69  1.1.1.1.6.2  yamt     Len = 0;
     70  1.1.1.1.6.2  yamt     for (; ;) {
     71  1.1.1.1.6.2  yamt         WaitForSingleEvent (ConIn->WaitForKey, 0);
     72  1.1.1.1.6.2  yamt 
     73  1.1.1.1.6.2  yamt         Status = uefi_call_wrapper(ConIn->ReadKeyStroke, 2, ConIn, &Key);
     74  1.1.1.1.6.2  yamt         if (EFI_ERROR(Status)) {
     75  1.1.1.1.6.2  yamt             DEBUG((D_ERROR, "Input: error return from ReadKey %x\n", Status));
     76  1.1.1.1.6.2  yamt             break;
     77  1.1.1.1.6.2  yamt         }
     78  1.1.1.1.6.2  yamt 
     79  1.1.1.1.6.2  yamt         if (Key.UnicodeChar == '\n' ||
     80  1.1.1.1.6.2  yamt             Key.UnicodeChar == '\r') {
     81  1.1.1.1.6.2  yamt             break;
     82  1.1.1.1.6.2  yamt         }
     83  1.1.1.1.6.2  yamt 
     84  1.1.1.1.6.2  yamt         if (Key.UnicodeChar == '\b') {
     85  1.1.1.1.6.2  yamt             if (Len) {
     86  1.1.1.1.6.2  yamt                 uefi_call_wrapper(ConOut->OutputString, 2, ConOut, L"\b \b");
     87  1.1.1.1.6.2  yamt                 Len -= 1;
     88  1.1.1.1.6.2  yamt             }
     89  1.1.1.1.6.2  yamt             continue;
     90  1.1.1.1.6.2  yamt         }
     91  1.1.1.1.6.2  yamt 
     92  1.1.1.1.6.2  yamt         if (Key.UnicodeChar >= ' ') {
     93  1.1.1.1.6.2  yamt             if (Len < StrLen-1) {
     94  1.1.1.1.6.2  yamt                 InStr[Len] = Key.UnicodeChar;
     95  1.1.1.1.6.2  yamt 
     96  1.1.1.1.6.2  yamt                 InStr[Len+1] = 0;
     97  1.1.1.1.6.2  yamt                 uefi_call_wrapper(ConOut->OutputString, 2, ConOut, &InStr[Len]);
     98  1.1.1.1.6.2  yamt 
     99  1.1.1.1.6.2  yamt                 Len += 1;
    100  1.1.1.1.6.2  yamt             }
    101  1.1.1.1.6.2  yamt             continue;
    102  1.1.1.1.6.2  yamt         }
    103  1.1.1.1.6.2  yamt     }
    104  1.1.1.1.6.2  yamt 
    105  1.1.1.1.6.2  yamt     InStr[Len] = 0;
    106  1.1.1.1.6.2  yamt }
    107