///** @file
//
//    Sample Setup formset.
//
//  Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
//  This program and the accompanying materials
//  are licensed and made available under the terms and conditions of the BSD License
//  which accompanies this distribution.  The full text of the license may be found at
//  http://opensource.org/licenses/bsd-license.php
//
//  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
//  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
//**/


#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

//
// EFI Variable attributes
//
#define EFI_VARIABLE_NON_VOLATILE       0x00000001
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
#define EFI_VARIABLE_RUNTIME_ACCESS     0x00000004
#define EFI_VARIABLE_READ_ONLY          0x00000008

#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;

    //
    // 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;

    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.ByteField,
            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;

    numeric varid   = MyEfiUnionVar.BitField,
            prompt  = STRING_TOKEN(STR_UNION_BIT_NUMERIC_PROMPT),
            help    = STRING_TOKEN(STR_UNION_BIT_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;
