// *++
//
// Copyright (c) 2006, Intel Corporation                                                         
// All rights reserved. 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.             
// 
// Module Name:
//
//   Inventory.vfr 
// 
// Abstract:
// 
//   Sample Inventory Data.
// 
// Revision History: 
// 
// --*/

#include "DriverSampleStrDefs.h"

#define INVENTORY_GUID    { 0xb3f56470, 0x6141, 0x4621, { 0x8f, 0x19, 0x70, 0x4e, 0x57, 0x7a, 0xa9, 0xe8 } }
 
formset 
  guid     = INVENTORY_GUID,
  title    = STRING_TOKEN(STR_INV_FORM_SET_TITLE),
  help     = STRING_TOKEN(STR_INV_FORM_SET_HELP),
  class    = 0x04,      
  subclass = 0x03,

  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;

    subtitle text = STRING_TOKEN(STR_INV_EMPTY_STRING);

    subtitle text = STRING_TOKEN(STR_INV_VERSION_TEXT12);

  endform;

endformset;
