static void PrintMainMenu () { if (PreventBootMenu) return; Print (" Keyboard Controls:\r\n"); Print (" [F5] Hide/Show Password\r\n"); Print (" [Esc] "); #ifndef TC_WINDOWS_BOOT_RESCUE_DISK_MODE Print ((BootSectorFlags & TC_BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE) != TC_HIDDEN_OS_CREATION_PHASE_NONE ? "Boot Non-Hidden System (Boot Manager)" : "Skip Authentication (Boot Manager)"); #else // TC_WINDOWS_BOOT_RESCUE_DISK_MODE Print ("Skip Authentication (Boot Manager)"); Print ("\r\n [F8] "); Print ("Repair Options"); #endif // TC_WINDOWS_BOOT_RESCUE_DISK_MODE PrintEndl (3); }
extern "C" void PrintDebug (uint32 debugVal) { Print (debugVal); PrintEndl(); }
static byte AskPassword (Password &password, int& pin) { size_t pos = 0; byte scanCode; byte asciiCode; byte hidePassword = 1; pin = 0; Print ("Enter password"); Print (PreventNormalSystemBoot ? " for hidden system:\r\n" : ": "); while (true) { asciiCode = GetKeyboardChar (&scanCode); switch (scanCode) { case TC_BIOS_KEY_ENTER: ClearBiosKeystrokeBuffer(); PrintEndl(); password.Length = pos; break; case TC_BIOS_KEY_BACKSPACE: if (pos > 0) { if (pos < MAX_PASSWORD) PrintBackspace(); else PrintCharAtCursor (' '); --pos; } continue; case TC_BIOS_KEY_F5: hidePassword ^= 0x01; continue; default: if (scanCode == TC_BIOS_KEY_ESC || IsMenuKey (scanCode)) { burn (password.Text, sizeof (password.Text)); ClearBiosKeystrokeBuffer(); PrintEndl(); return scanCode; } } if (TC_BIOS_KEY_ENTER == scanCode) break; if (!IsPrintable (asciiCode) || pos == MAX_PASSWORD) { Beep(); continue; } password.Text[pos++] = asciiCode; if (hidePassword) asciiCode = '*'; if (pos < MAX_PASSWORD) PrintChar (asciiCode); else PrintCharAtCursor (asciiCode); } pos = 0; Print ("PIM: "); while (true) { asciiCode = GetKeyboardChar (&scanCode); switch (scanCode) { case TC_BIOS_KEY_ENTER: ClearBiosKeystrokeBuffer(); PrintEndl(); return TC_BIOS_KEY_ENTER; case TC_BIOS_KEY_BACKSPACE: if (pos > 0) { if (pos < MAX_PIM) PrintBackspace(); else PrintCharAtCursor (' '); --pos; pin /= 10; } continue; default: if (scanCode == TC_BIOS_KEY_ESC || IsMenuKey (scanCode)) { burn (password.Text, sizeof (password.Text)); ClearBiosKeystrokeBuffer(); PrintEndl(); return scanCode; } } if (!IsDigit (asciiCode) || pos == MAX_PIM) { Beep(); continue; } pin = 10*pin + (asciiCode - '0'); pos++; if (pos < MAX_PIM) PrintChar (asciiCode); else PrintCharAtCursor (asciiCode); } }
static byte AskPassword (Password &password, int& pim) { size_t pos = 0; byte scanCode; byte asciiCode; byte hidePassword = 1; pim = 0; Print ("Enter password"); Print (PreventNormalSystemBoot ? " for hidden system:\r\n" : ": "); while (true) { asciiCode = GetKeyboardChar (&scanCode); switch (scanCode) { case TC_BIOS_KEY_ENTER: password.Length = pos; Print ("\r"); if (!PreventNormalSystemBoot) Print ("Enter password: "******"PIM: "); while (true) { asciiCode = GetKeyboardChar (&scanCode); switch (scanCode) { case TC_BIOS_KEY_ENTER: Print ("\rPIM: "); pos =0; while (pos < MAX_PIM) { PrintChar ('*'); pos++; } ClearBiosKeystrokeBuffer(); PrintEndl(); return TC_BIOS_KEY_ENTER; case TC_BIOS_KEY_BACKSPACE: if (pos > 0) { if (pos < MAX_PIM) PrintBackspace(); else PrintCharAtCursor (' '); --pos; pim /= 10; } continue; case TC_BIOS_KEY_F5: hidePassword ^= 0x01; continue; default: if (scanCode == TC_BIOS_KEY_ESC || IsMenuKey (scanCode)) { burn (password.Text, sizeof (password.Text)); ClearBiosKeystrokeBuffer(); PrintEndl(); return scanCode; } } if (!IsDigit (asciiCode) || pos == MAX_PIM) { Beep(); continue; } pim = 10*pim + (asciiCode - '0'); pos++; if (hidePassword) asciiCode = '*'; if (pos < MAX_PIM) PrintChar (asciiCode); else PrintCharAtCursor (asciiCode); } } }