///** @file
//
//  Boot Manager formset.
//
//  Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
//  SPDX-License-Identifier: BSD-2-Clause-Patent
//
//**/
#define FORMSET_GUID  { 0x847bc3fe, 0xb974, 0x446d, 0x94, 0x49, 0x5a, 0xd5, 0x41, 0x2e, 0x99, 0x3b }

#define BOOT_MANAGER_FORM_ID     0x1000

#define LABEL_BOOT_OPTION        0x00
#define LABEL_BOOT_OPTION_END    0x01

formset
  guid      = FORMSET_GUID,
  title     = STRING_TOKEN(STR_BM_BANNER),
  help      = STRING_TOKEN(STR_BOOT_MANAGER_HELP),
  classguid = gEfiIfrFrontPageGuid,

  form formid = BOOT_MANAGER_FORM_ID,
       title  = STRING_TOKEN(STR_BM_BANNER);

    subtitle text = STRING_TOKEN(STR_LAST_STRING);
    subtitle text = STRING_TOKEN(STR_BOOT_OPTION_BANNER);
    subtitle text = STRING_TOKEN(STR_LAST_STRING);

    //
    //Add this invisable text in order to indicate enter Boot Manager form.
    //
    suppressif TRUE;
          text
              help  = STRING_TOKEN(STR_LAST_STRING ),
              text  = STRING_TOKEN(STR_LAST_STRING ),
              flags = INTERACTIVE,
              key   = 0x1212;
     endif;

    //
    // This is where we will dynamically add choices for the Boot Manager
    //
    label LABEL_BOOT_OPTION;
    label LABEL_BOOT_OPTION_END;

    subtitle text = STRING_TOKEN(STR_LAST_STRING);
    subtitle text = STRING_TOKEN(STR_HELP_FOOTER);

  endform;

endformset;
