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