mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
2.8 KiB
138 lines
2.8 KiB
/*++
|
|
|
|
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;
|
|
}
|