///** @file
//
//    Sample Setup formset.
//
//  Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
// (C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
//  SPDX-License-Identifier: BSD-2-Clause-Patent
//
//**/


#include <Uefi/UefiMultiPhase.h>
#include "NVDataStruc.h"

//
// Formset class used by Device Manager
//
#define EFI_NON_DEVICE_CLASS              0x00
#define EFI_DISK_DEVICE_CLASS             0x01
#define EFI_VIDEO_DEVICE_CLASS            0x02
#define EFI_NETWORK_DEVICE_CLASS          0x04
#define EFI_INPUT_DEVICE_CLASS            0x08
#define EFI_ON_BOARD_DEVICE_CLASS         0x10
#define EFI_OTHER_DEVICE_CLASS            0x20

//
// Formset subclass
//
#define EFI_SETUP_APPLICATION_SUBCLASS    0x00
#define EFI_GENERAL_APPLICATION_SUBCLASS  0x01
#define EFI_FRONT_PAGE_SUBCLASS           0x02
#define EFI_SINGLE_USE_SUBCLASS           0x03

#define EFI_USER_INFO_ACCESS_SETUP_ADMIN_GUID \
  { 0x85b75607, 0xf7ce, 0x471e, { 0xb7, 0xe4, 0x2a, 0xea, 0x5f, 0x72, 0x32, 0xee } }

#define PERL_GUID \
  { 0x63E60A51, 0x497D, 0xD427, {0xC4, 0xA5, 0xB8, 0xAB, 0xDC, 0x3A, 0xAE, 0xB6 }}

//
// Labels definition
//
#define LABEL_1_VALUE               0x01
#define LABEL_2_VALUE               0x1000
#define LABEL_UPDATE_BBS            0x2222

formset
  guid      = DRIVER_SAMPLE_FORMSET_GUID,
  title     = STRING_TOKEN(STR_FORM_SET_TITLE),
  help      = STRING_TOKEN(STR_FORM_SET_TITLE_HELP),
  classguid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID,

  //
  // Notes: VfrCompiler will insert a Standard Default Storage declaration
  // after the formset declaration.    >00000040: 5C 06 00 00 00 00.
  // So we don't need to declare the Standard Default.
  // Please check the vfr.lst file for details.
  // To enable list file for VFR, add "-l" to VfrCompile <Command> in [Build.Visual-Form-Representation-File] as follows:
  //          VfrCompile -l --no-pre-processing --output-directory ${d_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii
  //

   //
  // Define a Buffer Storage (EFI_IFR_VARSTORE)
  //
  varstore DRIVER_SAMPLE_CONFIGURATION,     // This is the data structure type
    varid = CONFIGURATION_VARSTORE_ID,      // Optional VarStore ID
    name  = MyIfrNVData,                    // Define referenced name in vfr
    guid  = DRIVER_SAMPLE_FORMSET_GUID;     // GUID of this buffer storage

  //
  // Define a EFI variable Storage (EFI_IFR_VARSTORE_EFI)
  //
  efivarstore MY_EFI_VARSTORE_DATA,
    attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,  // EFI variable attribures
    name  = MyEfiVar,
    guid  = DRIVER_SAMPLE_FORMSET_GUID;

  //
  // Define a Buffer Storage (EFI_IFR_VARSTORE)
  //
  efivarstore MY_EFI_BITS_VARSTORE_DATA,                                      // This is the data structure type
    attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,  // EFI variable attribures
    name  = MyEfiBitVar,                                                      // Define referenced name in vfr
    guid  = DRIVER_SAMPLE_FORMSET_GUID;                                       // GUID of this buffer storage

  efivarstore MY_EFI_UNION_DATA,
    attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,  // EFI variable attribures
    name  = MyEfiUnionVar,
    guid  = DRIVER_SAMPLE_FORMSET_GUID;

  //
  // Define a Name/Value Storage (EFI_IFR_VARSTORE_NAME_VALUE)
  //
  namevaluevarstore MyNameValueVar,                // Define storage reference name in vfr
    name = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME0), // Define Name list of this storage, refer it by MyNameValueVar[0]
    name = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME1), // Define Name list of this storage, refer it by MyNameValueVar[1]
    name = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME2), // Define Name list of this storage, refer it by MyNameValueVar[2]
    guid = DRIVER_SAMPLE_FORMSET_GUID;             // GUID of this Name/Value storage

  defaultstore MyStandardDefault,
    prompt      = STRING_TOKEN(STR_STANDARD_DEFAULT_PROMPT),
    attribute   = 0x0000;                         // Default ID: 0000 standard default

  defaultstore MyManufactureDefault,
    prompt      = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_PROMPT),
    attribute   = 0x0001;                         // Default ID: 0001 manufacture default

  //
  // Define a Form (EFI_IFR_FORM)
  //
  form formid = 1,                                // Form ID
       title  = STRING_TOKEN(STR_FORM1_TITLE);    // Form title

    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT);

    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);

    //
    // Define a display only text (EFI_IFR_TEXT)
    //
    text
      help   = STRING_TOKEN(STR_TEXT_HELP),       // Help string
      text   = STRING_TOKEN(STR_CPU_STRING),      // Prompt string
        text   = STRING_TOKEN(STR_CPU_STRING2);   // TextTwo

    //
    // Define action button (EFI_IFR_ACTION)
    //
    text
      help   = STRING_TOKEN(STR_EXIT_TEXT),
      text   = STRING_TOKEN(STR_EXIT_TEXT),
      flags  = INTERACTIVE,   // VfrCompiler will generate opcode EFI_IFR_ACTION for Text marked as INTERACTIVE
      key    = 0x1237;

    text
      help   = STRING_TOKEN(STR_SAVE_TEXT),
      text   = STRING_TOKEN(STR_SAVE_TEXT),
      flags  = INTERACTIVE,
      key    = 0x1238;

    text
      help   = STRING_TOKEN(STR_SAVE_CURRENT),
      text   = STRING_TOKEN(STR_SAVE_CURRENT),
      flags  = INTERACTIVE,
      key    = 0x1243;

    text
      help   = STRING_TOKEN(STR_DISCARD_CURRENT_AND_EXIT),
      text   = STRING_TOKEN(STR_DISCARD_CURRENT_AND_EXIT),
      flags  = INTERACTIVE,
      key    = 0x1244;
    //
    // Define oneof (EFI_IFR_ONE_OF)
    //
    oneof name = MyOneOf,                                // Define reference name for Question
      varid   = MyIfrNVData.SuppressGrayOutSomething,    // Use "DataStructure.Member" to reference Buffer Storage
      prompt  = STRING_TOKEN(STR_ONE_OF_PROMPT),
      help    = STRING_TOKEN(STR_ONE_OF_HELP),
      //
      // Define an option (EFI_IFR_ONE_OF_OPTION)
      //
      option text = STRING_TOKEN(STR_ONE_OF_TEXT4), value = 0x0, flags = 0;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT5), value = 0x1, flags = 0;
      //
      // DEFAULT indicate this option will be marked with EFI_IFR_OPTION_DEFAULT
      //
      option text = STRING_TOKEN(STR_ONE_OF_TEXT6), value = 0x2, flags = DEFAULT;
    endoneof;

    oneof varid  = MyIfrNVData.BootOrderLarge,
      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),
      default value = cond (pushthis == 0 ? 0 : cond ((questionref(MyOneOf) >> 0x4 & 0xF00) == 0x0 + 0x2 ? 0 : 1)),
      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0x0, flags = 0;
      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 0x1, flags = 0;
    endoneof;

    grayoutif  ideqval MyIfrNVData.SuppressGrayOutSomething == 0x1;
      suppressif questionref(MyOneOf) == 0x0;

        checkbox varid   = MyIfrNVData.ChooseToActivateNuclearWeaponry,
                 prompt   = STRING_TOKEN(STR_CHECK_BOX_PROMPT),
                 help     = STRING_TOKEN(STR_CHECK_BOX_HELP),
                 //
                 // CHECKBOX_DEFAULT indicate this checkbox is marked with EFI_IFR_CHECKBOX_DEFAULT
                 // CHECKBOX_DEFAULT_MFG indicate EFI_IFR_CHECKBOX_DEFAULT_MFG.
                 //
                 flags    = CHECKBOX_DEFAULT | CHECKBOX_DEFAULT_MFG,
                 default  = TRUE,
        endcheckbox;
      endif;
    endif;

    //
    // Ordered list:
    //   sizeof(MyIfrNVData) storage must be UINT8 array, and
    //   size written for the variable must be size of the entire
    //   variable.
    //
    //
    suppressif ideqval MyIfrNVData.SuppressGrayOutSomething == 0x0;

      //
      // label is defined as an anchor where you want to insert some dynamic
      // opcodes created on-the-fly
      //
      label LABEL_UPDATE_BBS;

      orderedlist
                varid       = MyIfrNVData.BootOrder,
                prompt      = STRING_TOKEN(STR_BOOT_OPTIONS),
                help        = STRING_TOKEN(STR_NULL_STRING),
                flags       = RESET_REQUIRED,
                option text = STRING_TOKEN(STR_BOOT_OPTION2), value = 2, flags = 0;
                option text = STRING_TOKEN(STR_BOOT_OPTION1), value = 1, flags = 0;
                option text = STRING_TOKEN(STR_BOOT_OPTION3), value = 3, flags = 0;
              suppressif ideqval MyIfrNVData.BootOrderLarge == 0;
                option text = STRING_TOKEN(STR_BOOT_OPTION4), value = 4, flags = 0;
              endif;
      endlist;

      //
      // label should be paired with each other
      //
      label LABEL_END;

    endif;    // end suppressif

    disableif ideqval MyIfrNVData.SuppressGrayOutSomething == 0x2;
      orderedlist
        varid       = MyIfrNVData.OrderedList,
        prompt      = STRING_TOKEN(STR_TEST_OPCODE),
        help        = STRING_TOKEN(STR_TEXT_HELP),
        flags       = RESET_REQUIRED,
        option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 3, flags = 0;
        option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 2, flags = 0;
        option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 1, flags = 0;
        default     = {1,2,3},
      endlist;
    endif;

    label 100;

    //
    // Define a hyperlink (EFI_IFR_REF)
    //
    goto 0x1234,                                  // Destination Form ID
      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC),   // Prompt string
      help    = STRING_TOKEN(STR_GOTO_HELP),      // Help string
      flags   = INTERACTIVE,                      // INTERACTIVE indicate it's marked with EFI_IFR_FLAG_CALLBACK
      key     = 0x1234;                           // Question ID which will be passed-in in COnfigAccess.Callback()

    goto 0x1234,
      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC2),
      help    = STRING_TOKEN(STR_GOTO_HELP),
      flags   = INTERACTIVE,
      key     = 0x1235;

    oneof varid  = MyIfrNVData.TestLateCheck,
      prompt      = STRING_TOKEN(STR_TEST_OPCODE),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),
      flags       = RESET_REQUIRED,
      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = 0;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = DEFAULT;
      warningif prompt = STRING_TOKEN(STR_WARNING_POPUP), timeout = 5,
        ideqval MyIfrNVData.TestLateCheck == 0
      endif;

    endoneof;

    oneof varid  = MyIfrNVData.TestLateCheck2,
      prompt      = STRING_TOKEN(STR_TEST_OPCODE2),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),
      flags       = RESET_REQUIRED,
      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = DEFAULT;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = 0;

      inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
        ideqid MyIfrNVData.TestLateCheck == MyIfrNVData.TestLateCheck2
      endif;

    endoneof;

    oneof varid  = MyIfrNVData.QuestionAboutTreeHugging,
      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT_KEYWORD),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),
      flags       = RESET_REQUIRED,
      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = 0;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = DEFAULT;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 3, flags = 0;
    endoneof;

    //
    // This is an HII option which has REST_STYLE flag and x-UEFI namespace
    // UNI string associated. This HII option could be configured by either in-band
    // edk2 setup browser or the remote management in out-of-band such as Redfish
    // service. This HII option is configured through EFI_KEYWORD_HANDLER_PROTOCOL.
    //
    oneof varid  = MyIfrNVData.QuestionXUefiKeywordRestStyle,
      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT_X_UEFI),
      help        = STRING_TOKEN(STR_ONE_OF_PROMPT_X_UEFI_HELP),
      flags       = RESET_REQUIRED | REST_STYLE,
      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = 0;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = DEFAULT;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 3, flags = 0;
    endoneof;


    //
    // This is a HII option which has REST_STYLE flag but without the x-UEFI namespace
    // UNI string associated. This HII option could be configured by either
    // setup browser or the remote management in out-of-band such as Redfish
    // service. This HII option is configured through EFI HII Configuration Routing
    // Protocol becasue it doesn't have x-UEFI namespace UNI string.
    //
    numeric varid  = MyIfrNVData.QuestionNonXUefiKeywordRestStyle,
      prompt       = STRING_TOKEN(STR_ONE_OF_PROMPT_NON_X_UEFI),
      help         = STRING_TOKEN(STR_ONE_OF_PROMPT_NON_X_UEFI_HELP),
      flags        = RESET_REQUIRED | REST_STYLE,
      minimum      = 0,
      maximum      = 0xf0,
      step         = 0,          // Stepping of 0 equates to a manual entering
                                 // of a value, otherwise it will be adjusted by "+"/"-"
      default      = 0,          // defaultstore could be used to specify the default type
                                 // If no defaultstore is specified, it implies Standard Default
    endnumeric;

    //
    // Define a string (EFI_IFR_STRING)
    //
    string    varid    = MyIfrNVData.MyStringData,
              prompt   = STRING_TOKEN(STR_MY_STRING_PROMPT2),
              help     = STRING_TOKEN(STR_MY_STRING_HELP2),
              flags    = INTERACTIVE,
              key      = 0x1236,
              minsize  = 6,
              maxsize  = 40,
              inconsistentif prompt = STRING_TOKEN(STR_STRING_CHECK_ERROR_POPUP),
                pushthis != stringref(STRING_TOKEN(STR_STRING_CHECK))
              endif;
    endstring;

    //
    // Define a numeric (EFI_IFR_NUMERIC)
    //
    numeric varid   = MyIfrNVData.HowOldAreYouInYearsManual,
            prompt  = STRING_TOKEN(STR_NUMERIC_READONLY_PROMPT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
            flags   = READ_ONLY,  // READ_ONLY indicate it's marked with EFI_IFR_FLAG_READ_ONLY
            minimum = 0,
            maximum = 0xf0,
            step    = 0,          // Stepping of 0 equates to a manual entering
                                  // of a value, otherwise it will be adjusted by "+"/"-"
            default = 21,         // defaultstore could be used to specify the default type
                                  // If no defaultstore is specified, it implies Standard Default

    endnumeric;

    numeric varid   = MyIfrNVData.HowOldAreYouInYearsManual,
            prompt  = STRING_TOKEN(STR_NUMERIC_MANUAL_PROMPT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
            minimum = 0,
            maximum = 0xf0,
            step    = 0,
            default value = questionrefval(devicepath = STRING_TOKEN (STR_DEVICE_PATH), guid = DRIVER_SAMPLE_FORMSET_GUID, 0x1111),

            inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
              ideqval MyIfrNVData.HowOldAreYouInYearsManual == 99
              OR
              ideqid  MyIfrNVData.HowOldAreYouInYearsManual == MyEfiVar.Field8
              OR
              ideqvallist MyIfrNVData.HowOldAreYouInYearsManual == 1 3 5 7
            endif;

    endnumeric;

    numeric varid   = MyEfiVar.Field8,                    // Reference of EFI variable storage
            questionid  = 0x1111,
            prompt  = STRING_TOKEN(STR_TALL_HEX_PROMPT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP1),
            flags   = DISPLAY_UINT_HEX | INTERACTIVE,     // Display in HEX format (if not specified, default is in decimal format)
            minimum = 0,
            maximum = 250,
            default = 18, defaultstore = MyStandardDefault,     // This is standard default value
            default = 19, defaultstore = MyManufactureDefault,  // This is manufacture default value

    endnumeric;

    //
    // Define numeric using Name/Value Storage
    //
    numeric varid   = MyNameValueVar[0],     // This numeric take NameValueVar0 as storage
            prompt  = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME0),
            help    = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME0_HELP),
            //
            // Size should be defined for numeric when use Name/Value storage
            // Valid value for numerice size are: NUMERIC_SIZE_1, NUMERIC_SIZE_2, NUMERIC_SIZE_4 and NUMERIC_SIZE_8
            //
            flags   = NUMERIC_SIZE_1,        // Size of this numeric is 1 byte
            minimum = 0,
            maximum = 0xff,
            step    = 0,
            locked,
            default = 16, defaultstore = MyStandardDefault,     // This is standard default value
            default = 17, defaultstore = MyManufactureDefault,  // This is manufacture default value
    endnumeric;

    numeric varid   = MyNameValueVar[1],     // This numeric take NameValueVar1 as storage
            prompt  = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME1),
            help    = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME1_HELP),
            flags   = NUMERIC_SIZE_2,        // Size of this numeric is 2 bytes
            minimum = 0,
            maximum = 0xffff,
            step    = 0,
            default = 18, defaultstore = MyStandardDefault,     // This is standard default value
            default = 19, defaultstore = MyManufactureDefault,  // This is manufacture default value
    endnumeric;

    //
    // Define string using Name/Value Storage
    //
    string    varid    = MyNameValueVar[2],     // This string take NameValueVar2 as storage
              prompt   = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME2),
              help     = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME2_HELP),
              minsize  = 2,
              maxsize  = 0x14,
    endstring;

    oneof varid   = MyEfiVar.Field16,
      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT),
      help        = STRING_TOKEN(STR_NUMERIC_NUM_HELP),
      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0x0, flags = 0;
      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 0x1, flags = DEFAULT;
    endoneof;

    label LABEL_1_VALUE;
    label LABEL_2_VALUE;

    grayoutif  ideqval MyIfrNVData.HowOldAreYouInYearsManual == 23 AND ideqval MyIfrNVData.SuppressGrayOutSomething == 0x1;
      numeric varid   = MyIfrNVData.HowOldAreYouInYears,
              prompt  = STRING_TOKEN(STR_NUMERIC_STEP_PROMPT),
              help    = STRING_TOKEN(STR_NUMERIC_HELP2),
              minimum = 0,
              maximum = 243,
              step    = 1,
              default = 18, defaultstore = MyStandardDefault,     // This is standard default value
              default = 19, defaultstore = MyManufactureDefault,  // This is manufacture default value

      endnumeric;
    endif;

    numeric varid   = MyIfrNVData.GetDefaultValueFromAccess,
            questionid = 0x1239,
            prompt  = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_ACCESS_PROMPT),
            help    = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_ACCESS_HELP),
            flags   = DISPLAY_UINT_HEX | INTERACTIVE,
            minimum = 0,
            maximum = 255,
            step    = 1,
            default = 18,
    endnumeric;

    numeric varid   = MyIfrNVData.GetDefaultValueFromCallBack,
            questionid = 0x1240,
            prompt  = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_CALLBACK_PROMPT),
            help    = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_CALLBACK_HELP),
            flags   = DISPLAY_UINT_HEX | INTERACTIVE,
            minimum = 0,
            maximum = 255,
            step    = 1,
            default = 18,
    endnumeric;

    orderedlist
        varid       = MyIfrNVData.GetDefaultValueFromCallBackForOrderedList,
        questionid  = 0x1252,
        prompt      = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_CALLBACK_PROMPT),
        help        = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_CALLBACK_HELP),
        flags       = INTERACTIVE,
        option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 1, flags = 0;
        option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 2, flags = 0;
        option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 3, flags = 0;
    endlist;

    resetbutton
      defaultstore = MyStandardDefault,
      prompt   = STRING_TOKEN(STR_STANDARD_DEFAULT_PROMPT),
      help     = STRING_TOKEN(STR_STANDARD_DEFAULT_HELP),
    endresetbutton;

    resetbutton
      defaultstore = MyManufactureDefault,
      prompt   = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_PROMPT),
      help     = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_HELP),
    endresetbutton;

    //
    // Sample use case for IFR Security op-code
    //
    grayoutif NOT security (EFI_USER_INFO_ACCESS_SETUP_ADMIN_GUID);
      text
        help = STRING_TOKEN(STR_TEXT_SECRUITY_TEST_HELP),
        text = STRING_TOKEN(STR_TEXT_SECRUITY_TEST_TEXT);
    endif;

    numeric varid   = MyEfiVar.SubmittedCallback,
            questionid = 0x1250,
            prompt  = STRING_TOKEN(STR_SUBMITTED_CALLBACK_TEST_PROMPT),
            help    = STRING_TOKEN(STR_SUBMITTED_CALLBACK_TEST_HELP),
            flags   = INTERACTIVE,
            minimum = 0,
            maximum = 255,
            default = 18,
    endnumeric;

    numeric varid   = MyIfrNVData.QuestionApply,
            questionid = 0x1253,
            prompt  = STRING_TOKEN(STR_QUESTION_APPLY_TEST_PROMPT),
            help    = STRING_TOKEN(STR_QUESTION_APPLY_TEST_HELP),
            flags   = INTERACTIVE,
            minimum = 0,
            maximum = 255,
            default = 19,
    endnumeric;

    text
      help  = STRING_TOKEN(STR_POPUP_TEST_HELP),
      text  = STRING_TOKEN(STR_POPUP_TEST_PROMPT),
      flags = INTERACTIVE,
      key   = 0x1330;

    goto 2,
      prompt = STRING_TOKEN(STR_GOTO_FORM2), //SecondSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
      help   = STRING_TOKEN(STR_GOTO_HELP);

    goto 3,
      prompt = STRING_TOKEN(STR_GOTO_FORM3), //ThirdSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
      help   = STRING_TOKEN(STR_GOTO_HELP);

    goto 4,
      prompt = STRING_TOKEN(STR_GOTO_FORM4), //FourthSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
      help   = STRING_TOKEN(STR_GOTO_HELP);

    goto 5,
      prompt = STRING_TOKEN(STR_GOTO_FORM5), //FifthSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
      help   = STRING_TOKEN(STR_GOTO_FORM5_HELP);

    goto 6,
      prompt = STRING_TOKEN(STR_GOTO_FORM6), //SixthSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
      help   = STRING_TOKEN(STR_GOTO_HELP);

    goto
      formsetguid = DRIVER_SAMPLE_INVENTORY_GUID,
      formid  = 0x1,
      question = 0x1,
      prompt  = STRING_TOKEN(STR_GOTO_ANOTHER_FORMSET),
      help    = STRING_TOKEN(STR_GOTO_ANOTHER_FORMSET_HELP);

    guidop
      guid = DRIVER_SAMPLE_FORMSET_GUID,
      datatype = MY_EFI_VARSTORE_DATA,
        data.Field8  = 0x21,
        data.Field16 = 0x2121,
        data.OrderedList[0] = 0x21,
    endguidop;

     goto 7,
      prompt = STRING_TOKEN(STR_GOTO_FORM7),
      help   = STRING_TOKEN(STR_GOTO_FORM7_HELP);

  endform;

  suppressif ideqval MyIfrNVData.BootOrderLarge == 0;
    form formid = 2,               // SecondSetupPage,
      title = STRING_TOKEN(STR_FORM2_TITLE);  // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code

      date
        name    = Date,
        prompt  = STRING_TOKEN(STR_DATE_PROMPT),
        help    = STRING_TOKEN(STR_DATE_HELP),
        flags   = STORAGE_TIME,
        default = 2004/1/1,

        inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
          ideqval Date.Day == 31
          AND
          ideqvallist Date.Month == 2 4 6 9 11
        endif;

        //
        // If the day is 30 AND month is 2
        //
        inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
          ideqval Date.Day == 30
          AND
          ideqval Date.Month == 2
        endif;

        //
        // If the day is 29 AND month is 2 AND it year is NOT a leapyear
        //
        inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
          ideqval Date.Day == 0x1D
          AND
          ideqval Date.Month == 2
          AND
          NOT
          ideqvallist Date.Year == 2004 2008 20012 20016 2020 2024 2028 2032 2036
        endif;

      enddate;

      text
        help   = STRING_TOKEN(STR_SAVE_CURRENT_AND_EXIT),
        text   = STRING_TOKEN(STR_SAVE_CURRENT_AND_EXIT),
        flags  = INTERACTIVE,
        key    = 0x1241;

      text
        help   = STRING_TOKEN(STR_DISCARD_CURRENT),
        text   = STRING_TOKEN(STR_DISCARD_CURRENT),
        flags  = INTERACTIVE,
        key    = 0x1242;

      time
        prompt  = STRING_TOKEN(STR_TIME_PROMPT),
        help    = STRING_TOKEN(STR_TIME_HELP),
        flags   = STORAGE_TIME,
      endtime;

      time
            name    = MyTime,
            varid   = MyIfrNVData.Time,
            prompt  = STRING_TOKEN(STR_TIME_PROMPT),
            help    = STRING_TOKEN(STR_TIME_PROMPT),
            flags   = STORAGE_NORMAL | SECOND_SUPPRESS,
            default = 15:33:33,
      endtime;

      checkbox varid   = MyIfrNVData.ChooseToActivateNuclearWeaponry,
              prompt   = STRING_TOKEN(STR_CHECK_BOX_PROMPT),
              help     = STRING_TOKEN(STR_CHECK_BOX_HELP),
              flags    = CHECKBOX_DEFAULT,
      endcheckbox;

      text
        help = STRING_TOKEN(STR_TEXT_HELP),
        text = STRING_TOKEN(STR_TEXT_TEXT_1);

      text
        help   = STRING_TOKEN(STR_TEXT_HELP),
        text   = STRING_TOKEN(STR_TEXT_TEXT_1),
        text   = STRING_TOKEN(STR_TEXT_TEXT_2);

      goto 1,
        prompt = STRING_TOKEN(STR_GOTO_FORM1), //MainSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
        help   = STRING_TOKEN(STR_GOTO_HELP);

    goto
      varid   = MyIfrNVData.RefData,
      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC3),
      help    = STRING_TOKEN(STR_GOTO_DYNAMIC3_HELP),
      flags   = INTERACTIVE,
      key     = 0x1248,
      //
      // Set the defult value, format is QuestionId; FormId; FormsetGuid; Device Path String Token
      //
      default = 0;0;ZERO_GUID;STRING_TOKEN(STR_NULL_STRING),
    ;                                                         // goto opcode end flag.

    goto
      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC4),
      help    = STRING_TOKEN(STR_GOTO_DYNAMIC4_HELP),
      flags   = INTERACTIVE,
      key     = 0x1249;

    endform;
  endif;

  form formid = 3, title = STRING_TOKEN(STR_FORM3_TITLE);  // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code

    suppressif  ideqval MyEfiVar.Field8 == 111;
      text
        help = STRING_TOKEN(STR_TEXT_HELP),
        text = STRING_TOKEN(STR_TEXT_TEXT_1);
    endif;

    goto 1,
      prompt = STRING_TOKEN(STR_GOTO_FORM1), //MainSetupPage
      help   = STRING_TOKEN(STR_GOTO_HELP);

    numeric varid   = MyIfrNVData.DynamicRefresh,
            prompt  = STRING_TOKEN(STR_NUMERIC_MANUAL_PROMPT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
            flags   = INTERACTIVE,
            key     = 0x5678,
            minimum = 0,
            maximum = 0xff,
            step    = 0,
            default = 0,
            refresh interval = 3             // Refresh interval in seconds
    endnumeric;

    grayoutif  match2 (stringref(STRING_TOKEN(STR_PATTERN)), stringref(STRING_TOKEN(STR_STRING)), PERL_GUID);
      numeric
        varid   = MyIfrNVData.Match2,
        prompt  = STRING_TOKEN(STR_MATCH2_PROMPT),
        help    = STRING_TOKEN(STR_MATCH2_HELP),
        minimum = 0,
        maximum = 243,
      endnumeric;
    endif;

    label LABEL_UPDATE2;
    label LABEL_END;

  endform;

  formmap formid = 4,
    maptitle = STRING_TOKEN(STR_SAMPL_MAP_METHOD);
    mapguid  = DRIVER_SAMPLE_FORMSET_GUID;
    maptitle = STRING_TOKEN(STR_STANDARD_MAP_METHOD);
    mapguid  = EFI_HII_STANDARD_FORM_GUID;

    oneof varid = MyIfrNVData.SerialPortNo,
      prompt  = STRING_TOKEN(STR_SERIAL_PORT),
      help    = STRING_TOKEN(STR_ONE_OF_HELP),

      read    cond (get(MyIfrNVData.SerialPortStatus) != 0 ? 0 : cond ((get(MyIfrNVData.SerialPortIo) & 0xF00) >> 0x8 == get(MyIfrNVData.SerialPortIrq) - 1 ? UNDEFINED : map (get(MyIfrNVData.SerialPortIo) : 0x3f8,1; 0x2F8,2; 0x3E8,3; 0x2E8,4;)));
      write   set(MyIfrNVData.SerialPortStatus, pushthis != 0) AND set(MyIfrNVData.SerialPortIo, map (pushthis : 1,0x3F8; 2,0x2F8; 3,0x3E8; 4,0x2E8;)) AND set (MyIfrNVData.SerialPortIrq, map (pushthis: 1,4; 2,3; 3,4; 4,3;));

      option text = STRING_TOKEN(STR_SERIAL_PORT_DISABLE), value = 0x0, flags = DEFAULT;
      option text = STRING_TOKEN(STR_SERIAL_PORT1), value = 0x1, flags = 0;
      option text = STRING_TOKEN(STR_SERIAL_PORT2), value = 0x2, flags = 0;
      option text = STRING_TOKEN(STR_SERIAL_PORT3), value = 0x3, flags = 0;
      option text = STRING_TOKEN(STR_SERIAL_PORT4), value = 0x4, flags = 0;
    endoneof;

    grayoutif TRUE;
      checkbox varid = MyIfrNVData.SerialPortStatus,
        prompt   = STRING_TOKEN(STR_SERIAL_PORT_STATUS),
        help     = STRING_TOKEN(STR_CHECK_BOX_HELP),
      endcheckbox;
    endif;

    grayoutif TRUE;
      suppressif ideqval MyIfrNVData.SerialPortStatus == 0;
        oneof varid = MyIfrNVData.SerialPortIo,
          prompt  = STRING_TOKEN(STR_SERIAL_PORT_IO_ADDRESS),
          help    = STRING_TOKEN(STR_ONE_OF_HELP),

          option text = STRING_TOKEN(STR_SERIAL_PORT1_IOADDR), value = 0x3F8, flags = DEFAULT;
          option text = STRING_TOKEN(STR_SERIAL_PORT2_IOADDR), value = 0x2F8, flags = 0;
          option text = STRING_TOKEN(STR_SERIAL_PORT3_IOADDR), value = 0x3E8, flags = 0;
          option text = STRING_TOKEN(STR_SERIAL_PORT4_IOADDR), value = 0x2E8, flags = 0;
        endoneof;
      endif;
    endif;

    grayoutif TRUE;
      suppressif ideqval MyIfrNVData.SerialPortStatus == 0;
        oneof varid = MyIfrNVData.SerialPortIrq,
          prompt  = STRING_TOKEN(STR_SERIAL_PORT_IRQ),
          help    = STRING_TOKEN(STR_ONE_OF_HELP),

          option text = STRING_TOKEN(STR_SERIAL_PORT13_IRQ), value = 0x4, flags = DEFAULT;
          option text = STRING_TOKEN(STR_SERIAL_PORT24_IRQ), value = 0x3, flags = 0;
        endoneof;
      endif;
    endif;

    goto 1,
      prompt = STRING_TOKEN(STR_GOTO_FORM1), //MainSetupPage
      help   = STRING_TOKEN(STR_GOTO_HELP);

  endform;

  form formid = 5,            // Modal form
       title = STRING_TOKEN(STR_MODAL_FORM_TITLE);
    //
    //  This form is a modal form.
    //
    modal;
    text
      help   = STRING_TOKEN(STR_EXIT_TEXT),
      text   = STRING_TOKEN(STR_EXIT_TEXT),
      flags  = INTERACTIVE,   // VfrCompiler will generate opcode EFI_IFR_ACTION for Text marked as INTERACTIVE
      key    = 0x1245;

    text
      help   = STRING_TOKEN(STR_SAVE_TEXT),
      text   = STRING_TOKEN(STR_SAVE_TEXT),
      flags  = INTERACTIVE,   // VfrCompiler will generate opcode EFI_IFR_ACTION for Text marked as INTERACTIVE
      key    = 0x1246;
  endform;

  form formid = 6,            // Form to show the refresh guid group op-code
       title = STRING_TOKEN(STR_FORM6_TITLE);

    text
      help   = STRING_TOKEN(STR_TEXT_REFRESH_GUID),
      text   = STRING_TOKEN(STR_TEXT_REFRESH_GUID);

    numeric varid   = MyIfrNVData.RefreshGuidCount,
            prompt  = STRING_TOKEN(STR_TEXT_REFRESH_GUID_COUNT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
            flags   = INTERACTIVE,
            key     = 0x1247,
            minimum = 0,
            maximum = 0xff,
            step    = 0,
            default = 0,
            refreshguid = EFI_IFR_REFRESH_ID_OP_GUID,
    endnumeric;

    label LABEL_UPDATE3;
    label LABEL_END;

  endform;

  form formid = 0x1234,            // Dynamically created page,
       title = STRING_TOKEN(STR_DYNAMIC_TITLE);  // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code

    label LABEL_UPDATE1;
    //
    // This is where we will insert dynamic created opcodes
    //
    label LABEL_END;

  endform;


  form formid = 7,                          // Form to show the question refer to union and bit Varstore
    title = STRING_TOKEN(STR_FORM7_TITLE);

    subtitle text = STRING_TOKEN(STR_NEST_BIT_EFI_VARSTORE);

    checkbox varid   = MyEfiBitVar.BitsData.NestBitCheckbox,
             prompt   = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_PROMPT),
             help     = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_HELP),
             flags    = CHECKBOX_DEFAULT,
    endcheckbox;

    oneof varid  = MyEfiBitVar.BitsData.NestBitOneof,
      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_NEST_PROMPT),
      help        = STRING_TOKEN(STR_ONE_OF_BIT_NEST_HELP),
      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;
      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;
    endoneof;

    numeric varid   = MyEfiBitVar.BitsData.NestBitNumeric,
            questionid = 0x6666,
            prompt  = STRING_TOKEN(STR_BIT_NEST_NUMERIC_PROMPT),
            help    = STRING_TOKEN(STR_BIT_NEST_NUMERIC_DEFAULT_HELP),
            flags   = DISPLAY_UINT_HEX | INTERACTIVE,
            minimum = 2,
            maximum = 15,
            step    = 1,
    endnumeric;

    oneof varid  = MyEfiBitVar.BitsData.NestByteField,
      prompt      = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_PROMPT),
      help        = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_HELP),
      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;
      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;
    endoneof;

    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);
    subtitle text = STRING_TOKEN(STR_BIT_EFI_VARSTORE);

    checkbox varid   = MyEfiBitVar.EfiBitCheckbox,
      prompt   = STRING_TOKEN(STR_BIT_CHECK_BOX_PROMPT),
      help     = STRING_TOKEN(STR_BIT_CHECK_BOX_HELP),
      flags    = CHECKBOX_DEFAULT,
    endcheckbox;

  grayoutif  ideqval MyEfiBitVar.EfiBitGrayoutTest == 0;
    numeric varid   = MyEfiBitVar.EfiBitNumeric,
            prompt  = STRING_TOKEN(STR_BIT_NUMERIC_PROMPT),
            help    = STRING_TOKEN(STR_BIT_NUMERIC_HELP),
            minimum = 0,
            maximum = 7,
            step    = 0,
            default = 4, defaultstore = MyStandardDefault,
            default = 5, defaultstore = MyManufactureDefault,
    endnumeric;
  endif;

      oneof varid  = MyEfiBitVar.EfiBitOneof,
      questionid = 0x9999,
      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_PROMPT),
      help        = STRING_TOKEN(STR_ONE_OF_BIT_HELP),
      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0x0, flags = MANUFACTURING;
      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 0x1, flags = DEFAULT;
    endoneof;

    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);
    subtitle text = STRING_TOKEN(STR_NEST_BIT_VARSTORE);
    checkbox varid   = MyIfrNVData.MyBitData.NestBitCheckbox,
             prompt   = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_PROMPT),
             help     = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_HELP),
             flags    = CHECKBOX_DEFAULT,
    endcheckbox;

    oneof varid  = MyIfrNVData.MyBitData.NestBitOneof,
      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_NEST_PROMPT),
      help        = STRING_TOKEN(STR_ONE_OF_BIT_NEST_HELP),
      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;
      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;
    endoneof;

    numeric varid   = MyIfrNVData.MyBitData.NestBitNumeric,
            prompt  = STRING_TOKEN(STR_BIT_NEST_NUMERIC_PROMPT),
            help    = STRING_TOKEN(STR_BIT_NEST_NUMERIC_HELP),
            minimum = 0,
            maximum = 7,
            step    = 0,
            default = 6, defaultstore = MyStandardDefault,
            default = 7, defaultstore = MyManufactureDefault,
    endnumeric;

    oneof varid  = MyIfrNVData.MyBitData.NestByteField,
      prompt      = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_PROMPT),
      help        = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_HELP),
      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;
      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;
    endoneof;

    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);
    subtitle text = STRING_TOKEN(STR_BIT_VARSTORE);

    oneof varid  = MyIfrNVData.BitOneof,
      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_PROMPT),
      help        = STRING_TOKEN(STR_ONE_OF_BIT_HELP),
      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;
      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;
    endoneof;

    checkbox varid   = MyIfrNVData.BitCheckbox,
             prompt   = STRING_TOKEN(STR_BIT_CHECK_BOX_PROMPT),
             help     = STRING_TOKEN(STR_BIT_CHECK_BOX_HELP),
             flags    = CHECKBOX_DEFAULT,
    endcheckbox;

    numeric varid   = MyIfrNVData.BitNumeric,
            prompt  = STRING_TOKEN(STR_BIT_NUMERIC_PROMPT),
            help    = STRING_TOKEN(STR_BUFFER_BIT_NUMERIC_HELP),
            minimum = 0,
            maximum = 20,
            step    = 0,
            default = 16, defaultstore = MyStandardDefault,
            default = 17, defaultstore = MyManufactureDefault,
    endnumeric;

    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);
    subtitle text = STRING_TOKEN(STR_UNION_EFI_VARSTORE);

    numeric varid   = MyEfiUnionVar.UnionNumeric,
            prompt  = STRING_TOKEN(STR_UNION_BYTE_NUMERIC_PROMPT),
            help    = STRING_TOKEN(STR_UNION_BYTE_NUMERIC_HELP),
            minimum = 0,
            maximum = 20,
            step    = 0,
            default = 7, defaultstore = MyStandardDefault,
            default = 8, defaultstore = MyManufactureDefault,
    endnumeric;

    guidop
      guid = DRIVER_SAMPLE_FORMSET_GUID,
      datatype = MY_EFI_BITS_VARSTORE_DATA,
        data.EfiBitNumeric  = 1,
        data.EfiBitOneof = 1,
        data.EfiBitCheckbox = 1,
    endguidop;

  endform;

endformset;
