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