|
|
/*++
Copyright (c) 1998 Intel Corporation
Module Name:
mode.c Abstract:
Shell app "mode"
Revision History
--*/
#include "shell.h"
/*
* */
EFI_STATUS InitializeMode ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable );
/*
* */
EFI_DRIVER_ENTRY_POINT(InitializeMode)
EFI_STATUS InitializeMode ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { CHAR16 **Argv; UINTN Argc; UINTN NewCol, NewRow; UINTN Col, Row; UINTN Index; INTN Mode; EFI_STATUS Status; SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut;
/* Check to see if the app is to install as a "internal command"
* to the shell */
InstallInternalShellCommand ( ImageHandle, SystemTable, InitializeMode, L"mode", /* command */ L"mode [col row]", /* command syntax */ L"Set/get current text mode", /* 1 line descriptor */ NULL /* command help page */ );
/*
* Initialize app */
InitializeShellApplication (ImageHandle, SystemTable); Argv = SI->Argv; Argc = SI->Argc;
/*
* Scan args */
NewRow = 0; NewCol = 0;
for (Index = 1; Index < Argc; Index += 1) {
if (!NewCol) { NewCol = Atoi (Argv[Index]); continue; }
if (!NewRow) { NewRow = Atoi (Argv[Index]); continue; }
Print (L"%Emode: too many arguments\n"); goto Done; }
ConOut = ST->ConOut;
/*
* If not setting a new mode, dump the available modes */
if (!NewRow && !NewCol) {
Print (L"Available modes on standard output\n");
for (Mode=0; Mode < ConOut->Mode->MaxMode; Mode++) { Status = ConOut->QueryMode(ConOut, Mode, &Col, &Row); if (EFI_ERROR(Status)) { Print (L"%Emode: failed to query mode: %r\n", Status); goto Done; }
Print (L" col %3d row %3d %c\n", Col, Row, Mode == ConOut->Mode->Mode ? '*' : ' '); }
} else {
for (Mode=0; Mode < ConOut->Mode->MaxMode; Mode++) { Status = ConOut->QueryMode(ConOut, Mode, &Col, &Row); if (EFI_ERROR(Status)) { Print (L"%Emode: failed to query mode: %r\n", Status); goto Done; }
if (Row == NewRow && Col == NewCol) { ConOut->SetMode (ConOut, Mode); ConOut->ClearScreen (ConOut); goto Done; } }
Print (L"%Emode: not found (%d,%d)\n", NewCol, NewRow); }
Done: return EFI_SUCCESS; }
|