///** @file
//
//    Sample Inventory Data
//
//  Copyright (c) 2004 - 2015, 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
  guid     = DRIVER_SAMPLE_INVENTORY_GUID,
  title    = STRING_TOKEN(STR_INV_FORM_SET_TITLE),
  help     = STRING_TOKEN(STR_INV_FORM_SET_HELP),

  form formid = 1,
       title  = STRING_TOKEN(STR_INV_FORM1_TITLE);  // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code

  	text
      help   = STRING_TOKEN(STR_INV_VERSION_HELP),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

  	text
      help   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT2),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

  	text
      help   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT3),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

  	text
      help   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT4),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

    subtitle text = STRING_TOKEN(STR_INV_EMPTY_STRING);

  	text
      help   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT5),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

  	text
      help   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT6),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

  	text
      help   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT7),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

  	text
      help   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT8),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

  	text
      help   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT9),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

  	text
      help   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT10),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

  	text
      help   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      text   = STRING_TOKEN(STR_INV_VERSION_TEXT11),
	    text   = STRING_TOKEN(STR_INV_EMPTY_STRING),
      flags  = 0,
      key    = 0;

    text
      help   = STRING_TOKEN(STR_CHECK_KEYWORD_SUPPORT),
      text   = STRING_TOKEN(STR_CHECK_KEYWORD_SUPPORT),
      flags  = INTERACTIVE,
      key    = 0x1231;

    subtitle text = STRING_TOKEN(STR_INV_EMPTY_STRING);

    subtitle text = STRING_TOKEN(STR_INV_VERSION_TEXT12);

  endform;

endformset;
