diff --ignore-file-name-case -Naur ShellR33/attrib/attrib.c GccShellR33/attrib/attrib.c
--- ShellR33/attrib/attrib.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/attrib/attrib.c	2009-11-05 13:49:56.000000000 -0800
@@ -57,7 +57,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiAttribGuid = EFI_ATTRIB_GUID;
 SHELL_VAR_CHECK_ITEM    AttribCheckList[] = {
   {
@@ -438,7 +438,7 @@
     //
     Info = Arg->Info;
     if (Add || Remove) {
-      Info->Attribute = Info->Attribute & (~Remove) | Add;
+      Info->Attribute = (Info->Attribute & (~Remove)) | Add;
       Status = Arg->Handle->SetInfo (
                               Arg->Handle,
                               &gEfiFileInfoGuid,
diff --ignore-file-name-case -Naur ShellR33/attrib/attrib.h GccShellR33/attrib/attrib.h
--- ShellR33/attrib/attrib.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/attrib/attrib.h	2009-11-05 13:49:56.000000000 -0800
@@ -29,4 +29,4 @@
     0xcd691c77, 0xfc45, 0x4d7b, 0xb8, 0x92, 0x92, 0xa, 0x86, 0x2d, 0x67, 0xdc \
   }
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/attrib/attrib.inf GccShellR33/attrib/attrib.inf
--- ShellR33/attrib/attrib.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/attrib/attrib.inf	2009-09-22 15:37:05.000000000 -0700
@@ -41,24 +41,24 @@
 
 [sources.common]
    AttribStrings.uni      
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    attrib.c             
    attrib.h             
     
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/cls/cls.c GccShellR33/cls/cls.c
--- ShellR33/cls/cls.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/cls/cls.c	2009-11-05 13:49:56.000000000 -0800
@@ -30,7 +30,7 @@
 //
 #include STRING_DEFINES_FILE
 
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiClsGuid = EFI_CLS_GUID;
 SHELL_VAR_CHECK_ITEM    ClsCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/cls/cls.inf GccShellR33/cls/cls.inf
--- ShellR33/cls/cls.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/cls/cls.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    ClsStrings.uni
    Cls.c
    Cls.h 
                                           
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/comp/comp.h GccShellR33/comp/comp.h
--- ShellR33/comp/comp.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/comp/comp.h	2009-11-05 13:49:56.000000000 -0800
@@ -29,4 +29,4 @@
     0x7761e2c2, 0x7297, 0x434d, 0xb6, 0x52, 0xa9, 0x76, 0x91, 0xb8, 0x66, 0xf3 \
   }
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/comp/comp.inf GccShellR33/comp/comp.inf
--- ShellR33/comp/comp.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/comp/comp.inf	2009-09-22 15:37:05.000000000 -0700
@@ -28,21 +28,21 @@
 CompStrings.uni
 comp.c
 comp.h
-..\ShCommonStrings.uni
+../ShCommonStrings.uni
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/cp/cp.c GccShellR33/cp/cp.c
--- ShellR33/cp/cp.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/cp/cp.c	2009-09-22 15:37:05.000000000 -0700
@@ -578,7 +578,7 @@
     //
     if (SrcArg->Status == EFI_SUCCESS &&
         (SrcArg->Info->Attribute & EFI_FILE_DIRECTORY) &&
-        (DstArg->Status == EFI_SUCCESS && (DstArg->Info->Attribute & EFI_FILE_DIRECTORY) || DstMustDir && DstHandle)
+        (DstArg->Status == (EFI_SUCCESS && (DstArg->Info->Attribute & EFI_FILE_DIRECTORY)) || (DstMustDir && DstHandle))
         ) {
       if (StrCmp (SrcFilePath, DstFilePath) == 0) {
         PrintToken (STRING_TOKEN (STR_CP_CANNOT_COPY_ITSELF), HiiCpyHandle, L"cp/copy", SrcArg->FullName);
@@ -592,7 +592,7 @@
     // we need to compose a full name of dir\file for the source
     //
     if (SrcArg->Status == EFI_SUCCESS &&
-      (DstArg->Status == EFI_SUCCESS && (DstArg->Info->Attribute & EFI_FILE_DIRECTORY) || DstMustDir && DstHandle)) {
+      (DstArg->Status == (EFI_SUCCESS && (DstArg->Info->Attribute & EFI_FILE_DIRECTORY)) || (DstMustDir && DstHandle))) {
       if (DstFullName) {
         FreePool (DstFullName);
       }
@@ -1789,7 +1789,7 @@
     //
     if (SrcArg->Status == EFI_SUCCESS &&
         !(SrcArg->Info->Attribute & EFI_FILE_DIRECTORY) &&
-        (DstArg->Status == EFI_SUCCESS && (DstArg->Info->Attribute & EFI_FILE_DIRECTORY) || DstDir && DstHandle)
+        (DstArg->Status == (EFI_SUCCESS && (DstArg->Info->Attribute & EFI_FILE_DIRECTORY)) || (DstDir && DstHandle))
         ) {
       if (DstFullName) {
         FreePool (DstFullName);
diff --ignore-file-name-case -Naur ShellR33/cp/cp.h GccShellR33/cp/cp.h
--- ShellR33/cp/cp.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/cp/cp.h	2009-11-05 13:49:56.000000000 -0800
@@ -67,4 +67,4 @@
   IN EFI_SYSTEM_TABLE     *SystemTable
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/cp/cp.inf GccShellR33/cp/cp.inf
--- ShellR33/cp/cp.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/cp/cp.inf	2009-09-22 15:37:05.000000000 -0700
@@ -41,23 +41,23 @@
 
 [sources.common]
   CpStrings.uni
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   cp.h
   cp.c
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/date/date.c GccShellR33/date/date.c
--- ShellR33/date/date.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/date/date.c	2009-09-22 15:37:05.000000000 -0700
@@ -126,8 +126,8 @@
 {
   EFI_STATUS              Status;
   EFI_TIME                Time;
-  UINTN                   Offset;
-  UINTN                   Data;
+  INTN                    Offset;
+  INTN                    Data;
   EFI_HII_HANDLE          HiiHandle;
   SHELL_VAR_CHECK_PACKAGE ChkPck;
   CHAR16                  *Useful;
diff --ignore-file-name-case -Naur ShellR33/date/date.inf GccShellR33/date/date.inf
--- ShellR33/date/date.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/date/date.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    DateStrings.uni
    Date.c
    Date.h 
                                           
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/dblk/dblk.h GccShellR33/dblk/dblk.h
--- ShellR33/dblk/dblk.h	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/dblk/dblk.h	2009-09-22 15:37:05.000000000 -0700
@@ -33,7 +33,7 @@
     0xded389c0, 0x956a, 0x4244, 0xae, 0x98, 0xc9, 0x7f, 0xa0, 0x81, 0xca, 0xd8 \
   }
   
-#define EFI_PARTITION_SIGNATURE       0x5053595320494249
+#define EFI_PARTITION_SIGNATURE       0x5053595320494249ULL
 typedef struct _EFI_PARTITION_HEADER {
   EFI_TABLE_HEADER  Hdr;
   UINT32            DirectoryAllocationNumber;
diff --ignore-file-name-case -Naur ShellR33/dblk/dblk.inf GccShellR33/dblk/dblk.inf
--- ShellR33/dblk/dblk.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/dblk/dblk.inf	2009-09-22 15:37:05.000000000 -0700
@@ -26,23 +26,23 @@
 
 [sources.common]
   DblkStrings.uni
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   dblk.c
   efidump.c
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/dblk/efidump.c GccShellR33/dblk/efidump.c
--- ShellR33/dblk/efidump.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/dblk/efidump.c	2009-09-22 19:19:20.000000000 -0700
@@ -24,7 +24,7 @@
 --*/
 
 #include "dblk.h"
-#include "Efipart.h"
+#include "EfiPart.h"
 #include "EfiShellLib.h"
 
 #include STRING_DEFINES_FILE
@@ -352,34 +352,34 @@
     PrintToken (STRING_TOKEN (STR_DEBUG_STD_ERROR_ON), HiiDblkHandle, LibDevicePathToStr (DevicePath));
   }
 
-  PrintToken (STRING_TOKEN (STR_DEBUG_RUNTIME_SERVICES), HiiDblkHandle, (UINT64) Tbl.Sys->RuntimeServices);
-  PrintToken (STRING_TOKEN (STR_DEBUG_BOOT_SERVICES), HiiDblkHandle, (UINT64) Tbl.Sys->BootServices);
+  PrintToken (STRING_TOKEN (STR_DEBUG_RUNTIME_SERVICES), HiiDblkHandle, (UINT64)(UINTN)Tbl.Sys->RuntimeServices);
+  PrintToken (STRING_TOKEN (STR_DEBUG_BOOT_SERVICES), HiiDblkHandle, (UINT64)(UINTN)Tbl.Sys->BootServices);
 
   EFI64_CODE (
     Status = LibGetSystemConfigurationTable(&gEfiSalSystemTableGuid, &SalSystemTable);
     if (!EFI_ERROR(Status)) {
-      PrintToken (STRING_TOKEN(STR_DEBUG_SAL_SYSTEM_TABLE), HiiDblkHandle, (UINT64)SalSystemTable);
+      PrintToken (STRING_TOKEN(STR_DEBUG_SAL_SYSTEM_TABLE), HiiDblkHandle, (UINT64)(UINTN)SalSystemTable);
     }
   )
 
   Status = LibGetSystemConfigurationTable (&gEfiAcpiTableGuid, &AcpiTable);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_ACPI_TABLE), HiiDblkHandle, (UINT64) AcpiTable);
+    PrintToken (STRING_TOKEN (STR_DEBUG_ACPI_TABLE), HiiDblkHandle, (UINT64)(UINTN)AcpiTable);
   }
 
   Status = LibGetSystemConfigurationTable (&gEfiAcpi20TableGuid, &Acpi20Table);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_APCI_2_TABLE), HiiDblkHandle, (UINT64) Acpi20Table);
+    PrintToken (STRING_TOKEN (STR_DEBUG_APCI_2_TABLE), HiiDblkHandle, (UINT64)(UINTN)Acpi20Table);
   }
 
   Status = LibGetSystemConfigurationTable (&gEfiMpsTableGuid, &MpsTable);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_MPS_TABLE), HiiDblkHandle, (UINT64) MpsTable);
+    PrintToken (STRING_TOKEN (STR_DEBUG_MPS_TABLE), HiiDblkHandle, (UINT64)(UINTN)MpsTable);
   }
 
   Status = LibGetSystemConfigurationTable (&gEfiSmbiosTableGuid, &SMBIOSTable);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_SMBIOS_TABLE), HiiDblkHandle, (UINT64) SMBIOSTable);
+    PrintToken (STRING_TOKEN (STR_DEBUG_SMBIOS_TABLE), HiiDblkHandle, (UINT64)(UINTN)SMBIOSTable);
   }
 }
 
diff --ignore-file-name-case -Naur ShellR33/devices/devices.c GccShellR33/devices/devices.c
--- ShellR33/devices/devices.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/devices/devices.c	2009-11-05 13:49:56.000000000 -0800
@@ -36,7 +36,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiDevicesGuid = EFI_DEVICES_GUID;
 SHELL_VAR_CHECK_ITEM    DevicesCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/devices/devices.inf GccShellR33/devices/devices.inf
--- ShellR33/devices/devices.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/devices/devices.inf	2009-09-22 15:37:05.000000000 -0700
@@ -41,23 +41,23 @@
 
 [sources.common]
   DevicesStrings.uni
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   devices.c
   devices.h
     
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/DeviceTree/devicetree.c GccShellR33/DeviceTree/devicetree.c
--- ShellR33/DeviceTree/devicetree.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/DeviceTree/devicetree.c	2009-11-05 13:49:56.000000000 -0800
@@ -36,7 +36,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiDevicetreeGuid = EFI_DEVICETREE_GUID;
 SHELL_VAR_CHECK_ITEM    DevicetreeCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/DeviceTree/devicetree.inf GccShellR33/DeviceTree/devicetree.inf
--- ShellR33/DeviceTree/devicetree.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/DeviceTree/devicetree.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   DevicetreeStrings.uni
   devicetree.c
   devicetree.h
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/dmem/debug.h GccShellR33/dmem/debug.h
--- ShellR33/dmem/debug.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/dmem/debug.h	2009-09-22 15:37:05.000000000 -0700
@@ -26,7 +26,7 @@
 #include "EfiShellLib.h"
 #include EFI_PROTOCOL_DEFINITION (BlockIo)
 
-#define EFI_PARTITION_SIGNATURE       0x5053595320494249
+#define EFI_PARTITION_SIGNATURE       0x5053595320494249ULL
 typedef struct _EFI_PARTITION_HEADER {
   EFI_TABLE_HEADER  Hdr;
   UINT32            DirectoryAllocationNumber;
diff --ignore-file-name-case -Naur ShellR33/dmem/dmem.inf GccShellR33/dmem/dmem.inf
--- ShellR33/dmem/dmem.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/dmem/dmem.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,7 +25,7 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   MemStrings.uni
   DebugStrings.uni  
   mem.c
@@ -34,17 +34,17 @@
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/dmem/efidump.c GccShellR33/dmem/efidump.c
--- ShellR33/dmem/efidump.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/dmem/efidump.c	2009-09-22 19:19:20.000000000 -0700
@@ -24,7 +24,7 @@
 --*/
 
 #include "debug.h"
-#include "Efipart.h"
+#include "EfiPart.h"
 #include "EfiShellLib.h"
 
 #include STRING_DEFINES_FILE
@@ -352,34 +352,34 @@
     PrintToken (STRING_TOKEN (STR_DEBUG_STD_ERROR_ON), HiiDmemHandle, LibDevicePathToStr (DevicePath));
   }
 
-  PrintToken (STRING_TOKEN (STR_DEBUG_RUNTIME_SERVICES), HiiDmemHandle, (UINT64) Tbl.Sys->RuntimeServices);
-  PrintToken (STRING_TOKEN (STR_DEBUG_BOOT_SERVICES), HiiDmemHandle, (UINT64) Tbl.Sys->BootServices);
+  PrintToken (STRING_TOKEN (STR_DEBUG_RUNTIME_SERVICES), HiiDmemHandle, (UINT64)(UINTN)Tbl.Sys->RuntimeServices);
+  PrintToken (STRING_TOKEN (STR_DEBUG_BOOT_SERVICES), HiiDmemHandle, (UINT64)(UINTN)Tbl.Sys->BootServices);
 
   EFI64_CODE (
     Status = LibGetSystemConfigurationTable(&gEfiSalSystemTableGuid, &SalSystemTable);
     if (!EFI_ERROR(Status)) {
-      PrintToken (STRING_TOKEN(STR_DEBUG_SAL_SYSTEM_TABLE), HiiDmemHandle, (UINT64)SalSystemTable);
+      PrintToken (STRING_TOKEN(STR_DEBUG_SAL_SYSTEM_TABLE), HiiDmemHandle, (UINT64)(UINTN)SalSystemTable);
     }
   )
   
   Status = LibGetSystemConfigurationTable (&gEfiAcpiTableGuid, &AcpiTable);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_ACPI_TABLE), HiiDmemHandle, (UINT64) AcpiTable);
+    PrintToken (STRING_TOKEN (STR_DEBUG_ACPI_TABLE), HiiDmemHandle, (UINT64)(UINTN)AcpiTable);
   }
 
   Status = LibGetSystemConfigurationTable (&gEfiAcpi20TableGuid, &Acpi20Table);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_APCI_2_TABLE), HiiDmemHandle, (UINT64) Acpi20Table);
+    PrintToken (STRING_TOKEN (STR_DEBUG_APCI_2_TABLE), HiiDmemHandle, (UINT64)(UINTN)Acpi20Table);
   }
 
   Status = LibGetSystemConfigurationTable (&gEfiMpsTableGuid, &MpsTable);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_MPS_TABLE), HiiDmemHandle, (UINT64) MpsTable);
+    PrintToken (STRING_TOKEN (STR_DEBUG_MPS_TABLE), HiiDmemHandle, (UINT64)(UINTN)MpsTable);
   }
 
   Status = LibGetSystemConfigurationTable (&gEfiSmbiosTableGuid, &SMBIOSTable);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_SMBIOS_TABLE), HiiDmemHandle, (UINT64) SMBIOSTable);
+    PrintToken (STRING_TOKEN (STR_DEBUG_SMBIOS_TABLE), HiiDmemHandle, (UINT64)(UINTN)SMBIOSTable);
   }
 }
 
diff --ignore-file-name-case -Naur ShellR33/dmem/MemCommonPart.c GccShellR33/dmem/MemCommonPart.c
--- ShellR33/dmem/MemCommonPart.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/dmem/MemCommonPart.c	2009-09-22 15:37:05.000000000 -0700
@@ -148,7 +148,7 @@
     return EFI_SUCCESS;
   }
 
-  Address = (AddressStr) ? Xtoi (AddressStr) : (UINT64) SystemTable;
+  Address = (AddressStr) ? Xtoi (AddressStr) : (UINT64)(UINTN)SystemTable;
   Size    = (SizeStr) ? Xtoi (SizeStr) : 512;
 
   //
@@ -156,7 +156,7 @@
   //
   PrintToken (STRING_TOKEN (STR_DMEM_MEMORY_ADDR), HiiDmemHandle, 2 * sizeof (UINTN), Address, Size);
   if (MMIo) {
-    Status = BS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, &PciRootBridgeIo);
+    Status = BS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, (VOID **)&PciRootBridgeIo);
     if (EFI_ERROR (Status)) {
       PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_LOC_PROT_ERR_EX), HiiDmemHandle, L"dmem", L"PciRootBridgeIo");
       return Status;
@@ -233,7 +233,7 @@
   //
   MMIo                  = FALSE;
   AddressStr            = SizeStr = NULL;
-  Address               = (UINT64) SystemTable;
+  Address               = (UINT64)(UINTN)SystemTable;
   Size                  = 512;
   RetCode               = LibCheckVariables (SI, DmemCheckList, &ChkPck, &Useful);
   if (VarCheckOk != RetCode) {
@@ -316,7 +316,7 @@
   //
   PrintToken (STRING_TOKEN (STR_DMEM_NEW_MEMORY_ADDR), HiiDmemHandle, 2 * sizeof (UINTN), Address, Size);
   if (MMIo) {
-    Status = BS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, &PciRootBridgeIo);
+    Status = BS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, (VOID **)&PciRootBridgeIo);
     if (EFI_ERROR (Status)) {
       PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_LOC_PROT_ERR_EX), HiiDmemHandle, L"dmem", L"PciRootBridgeIo");
       return Status;
diff --ignore-file-name-case -Naur ShellR33/dmem/MemCommonPart.h GccShellR33/dmem/MemCommonPart.h
--- ShellR33/dmem/MemCommonPart.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/dmem/MemCommonPart.h	2009-11-05 13:49:56.000000000 -0800
@@ -61,4 +61,4 @@
   IN  EFI_BLOCK_IO_PROTOCOL   *BlkIo
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/dmpstore/dmpstore.c GccShellR33/dmpstore/dmpstore.c
--- ShellR33/dmpstore/dmpstore.c	2009-08-13 22:57:02.000000000 -0700
+++ GccShellR33/dmpstore/dmpstore.c	2009-11-05 13:49:56.000000000 -0800
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005 - 2009, Intel Corporation                                                         
+Copyright (c) 2005 - 2008, 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         
@@ -24,6 +24,7 @@
 --*/
 
 #include "EfiShellLib.h"
+#include "EfiVariable.h"
 #include "dmpstore.h"
 
 extern UINT8  STRING_ARRAY_NAME[];
@@ -33,8 +34,7 @@
 //
 #include STRING_DEFINES_FILE
 
-#define INIT_NAME_BUFFER_SIZE  128
-#define INIT_DATA_BUFFER_SIZE  1024
+#define DEBUG_NAME_SIZE MAX_VARIABLE_SIZE
 
 STATIC CHAR16   *AttrType[] = {
   L"invalid",   // 000
@@ -78,14 +78,12 @@
 EFI_STATUS
 GetFileVariable (
   IN EFI_FILE_HANDLE FileHandle,
-  OUT UINTN          *VariableNameSize,
-  IN OUT UINTN       *NameBufferSize,
-  IN OUT CHAR16      **VariableName,
+  IN OUT UINTN       *VariableNameSize,
+  IN CHAR16          *VariableName,
   IN EFI_GUID        *VendorGuid,
   OUT UINT32         *Attributes,
-  OUT UINTN          *DataSize,
-  IN OUT UINTN       *DataBufferSize,
-  IN OUT VOID        **Data
+  IN OUT UINTN       *DataSize,
+  OUT VOID           *Data
   );
 
 EFI_STATUS
@@ -102,7 +100,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiDmpstoreGuid = EFI_DMPSTORE_GUID;
 SHELL_VAR_CHECK_ITEM    DmpstoreCheckList[] = {
   {
@@ -316,11 +314,9 @@
   EFI_FILE_HANDLE    FileHandle;  
   EFI_GUID           Guid;
   UINT32             Attributes;
-  CHAR16             *Name;
-  UINTN              NameBufferSize;
+  CHAR16             Name[DEBUG_NAME_SIZE / 2];
   UINTN              NameSize;
-  VOID               *Data;
-  UINTN              DataBufferSize;
+  CHAR16             Data[DEBUG_NAME_SIZE / 2];
   UINTN              DataSize;
   BOOLEAN            Found;
   EFI_FILE_INFO      *FileInfo;
@@ -328,15 +324,7 @@
   Found      = FALSE;
   FileHandle = NULL;
   FileInfo   = NULL;
-  
-  NameBufferSize = INIT_NAME_BUFFER_SIZE;
-  DataBufferSize = INIT_DATA_BUFFER_SIZE;
-  Name           = AllocateZeroPool (NameBufferSize);
-  Data           = AllocatePool (DataBufferSize);
-  if (Name == NULL || Data == NULL) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
+      
   //
   // Open the previous saved output file
   //  
@@ -374,7 +362,9 @@
       break;
     }
     
-    Status = GetFileVariable (FileHandle, &NameSize, &NameBufferSize, &Name, &Guid, &Attributes, &DataSize, &DataBufferSize, &Data);
+    NameSize = DEBUG_NAME_SIZE;
+    DataSize = DEBUG_NAME_SIZE;
+    Status = GetFileVariable (FileHandle, &NameSize, Name, &Guid, &Attributes, &DataSize, Data);
     if (Status == EFI_NOT_FOUND) {
       Status = EFI_SUCCESS;
       break;
@@ -424,13 +414,7 @@
   }  
   if (FileHandle != NULL) {
     LibCloseFile (FileHandle);
-  }
-  if (Name != NULL) {
-    FreePool (Name);
-  }
-  if (Data != NULL) {
-    FreePool (Data);
-  }
+  };
   return Status;
 }
 
@@ -444,13 +428,9 @@
   EFI_STATUS  Status;
   EFI_GUID    Guid;
   UINT32      Attributes;
-  CHAR16      *Name;
-  UINTN       NameBufferSize; // Allocated Name buffer size
+  CHAR16      Name[DEBUG_NAME_SIZE / 2];
   UINTN       NameSize;
-  CHAR16      *OldName;
-  UINTN       OldNameBufferSize;
-  VOID        *Data;
-  UINTN       DataBufferSize; // Allocated Name buffer size
+  CHAR16      Data[DEBUG_NAME_SIZE / 2];
   UINTN       DataSize;
   BOOLEAN     Found;
 
@@ -475,14 +455,7 @@
     }    
   }
 
-  NameBufferSize = INIT_NAME_BUFFER_SIZE;
-  DataBufferSize = INIT_DATA_BUFFER_SIZE;
-  Name           = AllocateZeroPool (NameBufferSize);
-  Data           = AllocatePool (DataBufferSize);
-  if (Name == NULL || Data == NULL) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
+  Name[0] = 0x0000;
   do {
     //
     // Break the execution?
@@ -491,29 +464,8 @@
       goto Done;
     }
     
-    NameSize  = NameBufferSize;
+    NameSize  = DEBUG_NAME_SIZE;
     Status    = RT->GetNextVariableName (&NameSize, Name, &Guid);
-    if (Status == EFI_BUFFER_TOO_SMALL) {
-      OldName           = Name;
-      OldNameBufferSize = NameBufferSize;
-      //
-      // Expand at least twice to avoid reallocate many times
-      //
-      NameBufferSize = NameSize > NameBufferSize * 2 ? NameSize : NameBufferSize * 2;
-      Name           = AllocateZeroPool (NameBufferSize);
-      if (Name == NULL) {
-        Status = EFI_OUT_OF_RESOURCES;
-        FreePool (OldName);
-        goto Done;
-      }
-      //
-      // Preserve the original content to get correct iteration for GetNextVariableName() call
-      //
-      CopyMem (Name, OldName, OldNameBufferSize);
-      FreePool (OldName);
-      NameSize = NameBufferSize;
-      Status = RT->GetNextVariableName (&NameSize, Name, &Guid);
-    }
     if (!EFI_ERROR (Status)) {
       if (VarName != NULL) {
         if (!MetaiMatch (Name, VarName)) {
@@ -522,22 +474,8 @@
       }      
 
       Found     = TRUE;
-      DataSize  = DataBufferSize;
+      DataSize  = DEBUG_NAME_SIZE;
       Status    = RT->GetVariable (Name, &Guid, &Attributes, &DataSize, Data);
-      if (Status == EFI_BUFFER_TOO_SMALL) {
-        //
-        // Expand at least twice to avoid reallocate many times
-        //
-        FreePool (Data);
-        DataBufferSize = DataSize > DataBufferSize * 2 ? DataSize : DataBufferSize * 2;
-        Data           = AllocatePool (DataBufferSize);
-        if (Data == NULL) {
-          Status = EFI_OUT_OF_RESOURCES;
-          goto Done;
-        }
-        DataSize = DataBufferSize;
-        Status   = RT->GetVariable (Name, &Guid, &Attributes, &DataSize, Data);
-      }
       if (!EFI_ERROR (Status)) {
         //
         // Dump variable name
@@ -593,12 +531,6 @@
   }
 
 Done:
-  if (Name != NULL) {
-    FreePool (Name);
-  }
-  if (Data != NULL) {
-    FreePool (Data);
-  }
   return Status;
 }
 
@@ -662,14 +594,12 @@
 EFI_STATUS
 GetFileVariable (
   IN EFI_FILE_HANDLE FileHandle,
-  OUT UINTN          *VariableNameSize,
-  IN OUT UINTN       *NameBufferSize,
-  IN OUT CHAR16      **VariableName,
+  IN OUT UINTN       *VariableNameSize,
+  IN CHAR16          *VariableName,
   IN EFI_GUID        *VendorGuid,
   OUT UINT32         *Attributes,
-  OUT UINTN          *DataSize,
-  IN OUT UINTN       *DataBufferSize,
-  IN OUT VOID        **Data
+  IN OUT UINTN       *DataSize,
+  OUT VOID           *Data
   )
 {
   EFI_STATUS  Status;
@@ -683,23 +613,13 @@
   if (!EFI_ERROR (Status) && (BufferSize == 0)) {
     return EFI_NOT_FOUND; // End of file
   }
-  if (EFI_ERROR (Status) || (BufferSize != sizeof (UINT32))) {
+  if (EFI_ERROR (Status) || (BufferSize != sizeof (UINT32)) || 
+      (NameSize > *VariableNameSize)) {
     return EFI_ABORTED;
   }
   
-  if (NameSize > *NameBufferSize) {
-    //
-    // Expand at least twice to avoid reallocate many times
-    //
-    FreePool (*VariableName);
-    *NameBufferSize = NameSize > *NameBufferSize * 2 ? NameSize : *NameBufferSize * 2;
-    *VariableName   = AllocateZeroPool (*NameBufferSize);
-    if (*VariableName == NULL) {
-      return EFI_OUT_OF_RESOURCES;
-    }
-  }
   BufferSize = NameSize;
-  Status     = LibReadFile (FileHandle, &BufferSize, *VariableName);
+  Status     = LibReadFile (FileHandle, &BufferSize, VariableName);
   if (EFI_ERROR (Status) || (BufferSize != NameSize)) {
     return EFI_ABORTED;
   }
@@ -719,29 +639,19 @@
   Size       = 0;
   BufferSize = sizeof (UINT32);
   Status     = LibReadFile (FileHandle, &BufferSize, &Size);
-  if (EFI_ERROR (Status) || (BufferSize != sizeof (UINT32))) {
+  if (EFI_ERROR (Status) || (BufferSize != sizeof (UINT32)) || 
+      (Size > *DataSize)) {
     return EFI_ABORTED;
   }
   
-  if (Size > *DataBufferSize) {
-    //
-    // Expand at least twice to avoid reallocate many times
-    //
-    FreePool (*Data);
-    *DataBufferSize = Size > *DataBufferSize * 2 ? Size : *DataBufferSize * 2;
-    *Data           = AllocatePool (*DataBufferSize);
-    if (*Data == NULL) {
-      return EFI_OUT_OF_RESOURCES;
-    }
-  }
   BufferSize = Size;
-  Status     = LibReadFile (FileHandle, &BufferSize, *Data);
+  Status     = LibReadFile (FileHandle, &BufferSize, Data);
   if (EFI_ERROR (Status) || (BufferSize != Size)) {
     return EFI_ABORTED;
   }
   
   *VariableNameSize = NameSize;
-  *DataSize         = Size;
+  *DataSize = Size;
   return EFI_SUCCESS;
 }
 
diff --ignore-file-name-case -Naur ShellR33/dmpstore/dmpstore.h GccShellR33/dmpstore/dmpstore.h
--- ShellR33/dmpstore/dmpstore.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/dmpstore/dmpstore.h	2009-11-05 13:49:56.000000000 -0800
@@ -29,4 +29,4 @@
     0xceba463a, 0xfe43, 0x4138, 0xbe, 0x3d, 0x34, 0xc6, 0xc4, 0xe1, 0x31, 0xdd \
   }
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/dmpstore/dmpstore.inf GccShellR33/dmpstore/dmpstore.inf
--- ShellR33/dmpstore/dmpstore.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/dmpstore/dmpstore.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,24 +25,24 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   DmpstoreStrings.uni
   dmpstore.c
   dmpstore.h
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/drivers/drivers.c GccShellR33/drivers/drivers.c
--- ShellR33/drivers/drivers.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/drivers/drivers.c	2009-11-05 13:49:56.000000000 -0800
@@ -43,7 +43,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiDriversGuid = EFI_DRIVERS_GUID;
 SHELL_VAR_CHECK_ITEM    DriversCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/drivers/drivers.inf GccShellR33/drivers/drivers.inf
--- ShellR33/drivers/drivers.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/drivers/drivers.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,7 +40,7 @@
 
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   DriversStrings.uni
   drivers.c
   drivers.h
@@ -48,17 +48,17 @@
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/drvcfg/drvcfg.c GccShellR33/drvcfg/drvcfg.c
--- ShellR33/drvcfg/drvcfg.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/drvcfg/drvcfg.c	2009-11-05 13:49:56.000000000 -0800
@@ -38,7 +38,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiDrvcfgGuid = EFI_DRVCFG_GUID;
 SHELL_VAR_CHECK_ITEM  DrvcfgCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/drvcfg/drvcfg.inf GccShellR33/drvcfg/drvcfg.inf
--- ShellR33/drvcfg/drvcfg.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/drvcfg/drvcfg.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   DrvcfgStrings.uni
   drvcfg.c
   drvcfg.h
     
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/drvdiag/drvdiag.c GccShellR33/drvdiag/drvdiag.c
--- ShellR33/drvdiag/drvdiag.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/drvdiag/drvdiag.c	2009-11-05 13:49:56.000000000 -0800
@@ -41,7 +41,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiDrvdiagGuid = EFI_DRVDIAG_GUID;
 SHELL_VAR_CHECK_ITEM  DrvdiagCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/drvdiag/drvdiag.inf GccShellR33/drvdiag/drvdiag.inf
--- ShellR33/drvdiag/drvdiag.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/drvdiag/drvdiag.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,7 +40,7 @@
 
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   DrvdiagStrings.uni
   drvdiag.c
   drvdiag.h
@@ -48,17 +48,17 @@
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/edit/edit.inf GccShellR33/edit/edit.inf
--- ShellR33/edit/edit.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/edit/edit.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,7 +25,7 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
- ..\ShCommonStrings.uni
+ ../ShCommonStrings.uni
  EditStrings.uni
  editor.h
  editortype.h
@@ -41,17 +41,17 @@
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/edit/editor.h GccShellR33/edit/editor.h
--- ShellR33/edit/editor.h	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/edit/editor.h	2009-11-05 13:49:56.000000000 -0800
@@ -33,7 +33,7 @@
 #include "libstatusbar.h"
 #include "libinputbar.h"
 #include "libmenubar.h"
-#include "libmisc.h"
+#include "libMisc.h"
 //
 // This is the generated header file which includes whatever needs to be exported (strings + IFR)
 //
@@ -43,7 +43,7 @@
 extern BOOLEAN                  EditorFirst;
 extern BOOLEAN                  EditorExit;
 
-extern EFI_HII_HANDLE           HiiHandle;
+extern EFI_HII_HANDLE           gEditHiiHandle;
 #if (EFI_SPECIFICATION_VERSION < 0x0002000A)
 extern EFI_HII_PROTOCOL         *Hii;
 #endif
diff --ignore-file-name-case -Naur ShellR33/edit/libEditor.c GccShellR33/edit/libEditor.c
--- ShellR33/edit/libEditor.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/edit/libEditor.c	2009-11-05 13:49:56.000000000 -0800
@@ -123,7 +123,7 @@
   Status = BS->HandleProtocol (
                 In,
                 &gEfiSimplePointerProtocolGuid,
-                &MainEditor.MouseInterface
+                (VOID **)&MainEditor.MouseInterface
                 );
   if (EFI_ERROR (Status)) {
     //
@@ -146,7 +146,7 @@
         Status = BS->HandleProtocol (
                       HandleBuffer[Index],
                       &gEfiSimplePointerProtocolGuid,
-                      &MainEditor.MouseInterface
+                      (VOID **)&MainEditor.MouseInterface
                       );
         if (!EFI_ERROR (Status)) {
           break;
@@ -169,31 +169,31 @@
   //
   Status = MainTitleBarInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_TITLEBAR), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_TITLEBAR), gEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
 
   Status = MainMenuBarInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_MAINMENU), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_MAINMENU), gEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
 
   Status = MainStatusBarInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_STATUSBAR), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_STATUSBAR), gEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
 
   Status = MainInputBarInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_INPUTBAR), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_INPUTBAR), gEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
 
   Status = FileBufferInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_FILEBUFFER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_FILEBUFFER), gEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
   //
@@ -234,27 +234,27 @@
   //
   Status = MainTitleBarCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_TILEBAR_CLEANUP), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_TILEBAR_CLEANUP), gEditHiiHandle);
   }
 
   Status = MainMenuBarCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_MENUBAR_CLEANUP), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_MENUBAR_CLEANUP), gEditHiiHandle);
   }
 
   Status = MainStatusBarCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_STATUSBAR_CLEANUP), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_STATUSBAR_CLEANUP), gEditHiiHandle);
   }
 
   Status = MainInputBarCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_INPUTBAR_CLEANUP), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_INPUTBAR_CLEANUP), gEditHiiHandle);
   }
 
   Status = FileBufferCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_FILEBUFFER_CLEANUP), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_LIBEDITOR_FILEBUFFER_CLEANUP), gEditHiiHandle);
   }
   //
   // restore old mode
diff --ignore-file-name-case -Naur ShellR33/edit/libInputBar.c GccShellR33/edit/libInputBar.c
--- ShellR33/edit/libInputBar.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/edit/libInputBar.c	2009-11-05 13:49:56.000000000 -0800
@@ -173,7 +173,7 @@
   EditorClearLine (INPUT_BAR_LOCATION);
 
   Out->SetCursorPosition (Out, 0, INPUT_BAR_LOCATION - 1);
-  PrintToken (STRING_TOKEN (STR_EDIT_LIBINPUTBAR_MAININPUTBAR), HiiHandle, MainInputBar.Prompt);
+  PrintToken (STRING_TOKEN (STR_EDIT_LIBINPUTBAR_MAININPUTBAR), gEditHiiHandle, MainInputBar.Prompt);
 
   //
   // that's the maximum input length that can be displayed on screen
diff --ignore-file-name-case -Naur ShellR33/edit/libMenuBar.c GccShellR33/edit/libMenuBar.c
--- ShellR33/edit/libMenuBar.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/edit/libMenuBar.c	2009-11-05 13:49:56.000000000 -0800
@@ -220,9 +220,9 @@
     FunctionKeyString = AllocatePool (BufferSize);
 
 #if (EFI_SPECIFICATION_VERSION < 0x0002000A)
-    Status            = Hii->GetString (Hii, HiiHandle, Item->NameToken, FALSE, NULL, &BufferSize, NameString);
+    Status            = Hii->GetString (Hii, gEditHiiHandle, Item->NameToken, FALSE, NULL, &BufferSize, NameString);
 #else
-    Status            = LibGetString (HiiHandle, Item->NameToken, NameString, &BufferSize);
+    Status            = LibGetString (gEditHiiHandle, Item->NameToken, NameString, &BufferSize);
 #endif
 
     Width             = max ((StrLen (NameString) + 6), 20);
@@ -232,9 +232,9 @@
     }
 
 #if (EFI_SPECIFICATION_VERSION < 0x0002000A)
-    Status = Hii->GetString (Hii, HiiHandle, Item->FunctionKeyToken, FALSE, NULL, &BufferSize, FunctionKeyString);
+    Status = Hii->GetString (Hii, gEditHiiHandle, Item->FunctionKeyToken, FALSE, NULL, &BufferSize, FunctionKeyString);
 #else
-    Status = LibGetString (HiiHandle, Item->FunctionKeyToken, FunctionKeyString, &BufferSize);
+    Status = LibGetString (gEditHiiHandle, Item->FunctionKeyToken, FunctionKeyString, &BufferSize);
 #endif    
     PrintAt (Col - 1, Row - 1, L"%E%s%N  %H%s%N  ", FunctionKeyString, NameString);
 
diff --ignore-file-name-case -Naur ShellR33/edit/main.c GccShellR33/edit/main.c
--- ShellR33/edit/main.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/edit/main.c	2009-11-05 13:49:56.000000000 -0800
@@ -34,7 +34,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE    HiiHandle;
+EFI_HII_HANDLE    gEditHiiHandle;
 #if (EFI_SPECIFICATION_VERSION < 0x0002000A)
 EFI_HII_PROTOCOL  *Hii;
 #endif
@@ -127,7 +127,7 @@
   }
 #endif
 
-  Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiEditGuid);
+  Status = LibInitializeStrings (&gEditHiiHandle, STRING_ARRAY_NAME, &EfiEditGuid);
 
   if (EFI_ERROR (Status)) {
     return Status;
@@ -137,7 +137,7 @@
   if (VarCheckOk != RetCode) {
     switch (RetCode) {
     case VarCheckUnknown:
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_UNKNOWN_FLAG), HiiHandle, L"edit", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_UNKNOWN_FLAG), gEditHiiHandle, L"edit", Useful);
       break;
 
     default:
@@ -161,10 +161,10 @@
         ChkPck.FlagCount > 2 ||
         (ChkPck.FlagCount == 2 && LibCheckVarGetFlag (&ChkPck, L"-b") == NULL)
         ) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), HiiHandle, L"edit");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), gEditHiiHandle, L"edit");
       Status = EFI_INVALID_PARAMETER;
     } else {
-      PrintToken (STRING_TOKEN (STR_EDIT_VERBOSE_HELP), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_EDIT_VERBOSE_HELP), gEditHiiHandle);
       Status = EFI_SUCCESS;
     }
 
@@ -172,21 +172,21 @@
   }
 
   if (ChkPck.ValueCount > 1) {
-    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), HiiHandle, L"edit");
+    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), gEditHiiHandle, L"edit");
     Status = EFI_INVALID_PARAMETER;
     goto done;
   }
 
   if (ChkPck.ValueCount == 1) {
     if (!IsValidFileName (ChkPck.VarList->VarStr)) {
-      PrintToken (STRING_TOKEN (STR_EDIT_MAIN_INVALID_FILE_NAME), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_EDIT_MAIN_INVALID_FILE_NAME), gEditHiiHandle);
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
   }
 
   if (SI->RedirArgc != 0) {
-    PrintToken (STRING_TOKEN (STR_EDIT_NOREDIRECT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_NOREDIRECT), gEditHiiHandle);
     Status = EFI_INVALID_PARAMETER;
     goto done;
   }
@@ -195,7 +195,7 @@
   if (EFI_ERROR (Status)) {
     Out->ClearScreen (Out);
     Out->EnableCursor (Out, TRUE);
-    PrintToken (STRING_TOKEN (STR_EDIT_MAIN_INIT_FAILED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_EDIT_MAIN_INIT_FAILED), gEditHiiHandle);
     goto done;
   }
 
@@ -240,19 +240,19 @@
   //
   if (Status == EFI_SUCCESS) {
   } else if (Status == EFI_OUT_OF_RESOURCES) {
-    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_OUT_RESOURCE), HiiHandle, L"edit");
+    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_OUT_RESOURCE), gEditHiiHandle, L"edit");
   } else {
     if (Buffer != NULL) {
       if (StrCmp (Buffer, L"") != 0) {
         //
         // print out the status string
         //
-        PrintToken (STRING_TOKEN (STR_EDIT_MAIN_BUFFER), HiiHandle, Buffer);
+        PrintToken (STRING_TOKEN (STR_EDIT_MAIN_BUFFER), gEditHiiHandle, Buffer);
       } else {
-        PrintToken (STRING_TOKEN (STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), HiiHandle);
+        PrintToken (STRING_TOKEN (STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), gEditHiiHandle);
       }
     } else {
-      PrintToken (STRING_TOKEN (STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), gEditHiiHandle);
     }
   }
 
diff --ignore-file-name-case -Naur ShellR33/EDK_Snapshot.txt GccShellR33/EDK_Snapshot.txt
--- ShellR33/EDK_Snapshot.txt	2009-08-13 22:57:02.000000000 -0700
+++ GccShellR33/EDK_Snapshot.txt	2009-09-22 15:37:05.000000000 -0700
@@ -1,5 +1,5 @@
 Notes:
-  This EFI Shell release package has been tested on the 2009-08-12's EDK which snapshot
-is Edk-Dev-Snapshot-20090812, User can get this version EDK from the following URL:
-  https://edk.tianocore.org/files/documents/16/558/Edk-Dev-Snapshot-20090812.zip
+  This EFI Shell release package has been tested on the 2009-05-27's EDK which snapshot
+is Edk-Dev-Snapshot-20090527, User can get this version EDK from the following URL:
+  https://edk.tianocore.org/files/documents/16/526/Edk-Dev-Snapshot-20090527.zip
   We don't guarantee this package can work correctly on the other EDK snapshot.
\ No newline at end of file
diff --ignore-file-name-case -Naur ShellR33/EfiCompress/compress.c GccShellR33/EfiCompress/compress.c
--- ShellR33/EfiCompress/compress.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/EfiCompress/compress.c	2009-09-22 15:37:05.000000000 -0700
@@ -30,7 +30,11 @@
 // Macro Definitions
 //
 typedef INT16             NODE;
-#define UINT8_MAX         0xff
+
+#ifndef UINT8_MAX
+  #define UINT8_MAX         0xff
+#endif
+
 #define UINT8_BIT         8
 #define THRESHOLD         3
 #define INIT_CRC          0
@@ -262,7 +266,7 @@
 STATIC UINT32 mCompSize, mOrigSize;
 
 STATIC UINT16 *mFreq, *mSortPtr, mLenCnt[17], mLeft[2 * NC - 1], mRight[2 * NC - 1],
-              mCrcTable[UINT8_MAX + 1], mCFreq[2 * NC - 1], mCTable[4096], mCCode[NC],
+              mCrcTable[UINT8_MAX + 1], mCFreq[2 * NC - 1], mCCode[NC],
               mPFreq[2 * NP - 1], mPTCode[NPT], mTFreq[2 * NT - 1];
 
 STATIC NODE   mPos, mMatchPos, mAvail, *mPosition, *mParent, *mPrev, *mNext = NULL;
diff --ignore-file-name-case -Naur ShellR33/EfiCompress/Compress.h GccShellR33/EfiCompress/Compress.h
--- ShellR33/EfiCompress/Compress.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/EfiCompress/Compress.h	2009-11-05 13:49:56.000000000 -0800
@@ -57,4 +57,4 @@
 
 --*/
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/EfiCompress/compress.inf GccShellR33/EfiCompress/compress.inf
--- ShellR33/EfiCompress/compress.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/EfiCompress/compress.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,7 +25,7 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-..\ShCommonStrings.uni
+../ShCommonStrings.uni
 CompressStrings.uni
 compressMain.c
 compress.c
@@ -34,17 +34,17 @@
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/EfiDecompress/Decompress.c GccShellR33/EfiDecompress/Decompress.c
--- ShellR33/EfiDecompress/Decompress.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/EfiDecompress/Decompress.c	2009-09-22 19:19:20.000000000 -0700
@@ -22,7 +22,7 @@
 --*/
 
 #include "EfiShellLib.h"
-#include "decompress.h"
+#include "Decompress.h"
 
 extern UINT8    STRING_ARRAY_NAME[];
 
@@ -31,7 +31,7 @@
 //
 #include STRING_DEFINES_FILE
 
-#include EFI_PROTOCOL_DEFINITION (decompress)
+#include EFI_PROTOCOL_DEFINITION (Decompress)
 
 EFI_HII_HANDLE  HiiDecompressHandle;
 EFI_GUID        EfiDecompressGuid = EFI_DECOMPRESS_GUID;
@@ -192,7 +192,7 @@
   //
   //
   //
-  Status = LibLocateProtocol (&gEfiDecompressProtocolGuid, &Decompress);
+  Status = LibLocateProtocol (&gEfiDecompressProtocolGuid, (VOID **)&Decompress);
   if (EFI_ERROR (Status)) {
     PrintToken (STRING_TOKEN (STR_DECOMPRESS_PROTOCOL_NOT_FOUND), HiiDecompressHandle, L"efidecompress");
     Status = EFI_UNSUPPORTED;
diff --ignore-file-name-case -Naur ShellR33/EfiDecompress/Decompress.h GccShellR33/EfiDecompress/Decompress.h
--- ShellR33/EfiDecompress/Decompress.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/EfiDecompress/Decompress.h	2009-11-05 13:49:56.000000000 -0800
@@ -29,4 +29,4 @@
     0xe15963a9, 0xa05a, 0x480e, 0x91, 0x49, 0x32, 0xe9, 0x24, 0x5d, 0x98, 0xcb \
   }
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/EfiDecompress/Decompress.inf GccShellR33/EfiDecompress/Decompress.inf
--- ShellR33/EfiDecompress/Decompress.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/EfiDecompress/Decompress.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,7 +25,7 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-..\ShCommonStrings.uni
+../ShCommonStrings.uni
 DecompressStrings.uni
 decompress.c
 decompress.h
@@ -33,17 +33,17 @@
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/err/err.c GccShellR33/err/err.c
--- ShellR33/err/err.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/err/err.c	2009-11-05 13:49:56.000000000 -0800
@@ -35,7 +35,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiErrGuid = EFI_ERR_GUID;
 SHELL_VAR_CHECK_ITEM    ErrCheckList[] = {
   {
@@ -149,7 +149,7 @@
   EFI_DEBUG_MASK_PROTOCOL *dmp;
   UINTN                   Mask;
 
-  Status = BS->HandleProtocol (Handle, &gEfiDebugMaskProtocolGuid, &dmp);
+  Status = BS->HandleProtocol (Handle, &gEfiDebugMaskProtocolGuid, (VOID **)&dmp);
   if (!EFI_ERROR (Status)) {
     Status = dmp->GetDebugMask (dmp, &Mask);
     if (!EFI_ERROR (Status)) {
@@ -278,7 +278,7 @@
     goto Done;
   }
 
-  Status = BS->HandleProtocol (RealHandle, &gEfiDebugMaskProtocolGuid, &dmp);
+  Status = BS->HandleProtocol (RealHandle, &gEfiDebugMaskProtocolGuid, (VOID **)&dmp);
   if (EFI_ERROR (Status)) {
     PrintToken (STRING_TOKEN (STR_ERR_HANDLE_NOT_FOUND), HiiHandle, DrvHandle + 1);
     goto Done;
@@ -336,7 +336,7 @@
   }
   
   for (Index = 0; Index < BufferSize / sizeof(EFI_HANDLE); Index ++) {
-    Status = BS->HandleProtocol (Buffer[Index], &gEfiDebugMaskProtocolGuid, &dmp);
+    Status = BS->HandleProtocol (Buffer[Index], &gEfiDebugMaskProtocolGuid, (VOID **)&dmp);
     Status = dmp->SetDebugMask (dmp, Msk);
   }
 
diff --ignore-file-name-case -Naur ShellR33/err/err.h GccShellR33/err/err.h
--- ShellR33/err/err.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/err/err.h	2009-11-05 13:49:56.000000000 -0800
@@ -29,4 +29,4 @@
     0xdaab229b, 0x7883, 0x4f5f, 0xac, 0x6e, 0x15, 0x20, 0xc7, 0xe7, 0x8f, 0xd4 \
   }
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/err/err.inf GccShellR33/err/err.inf
--- ShellR33/err/err.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/err/err.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,7 +25,7 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-..\ShCommonStrings.uni
+../ShCommonStrings.uni
 ErrStrings.uni
 err.c
 err.h
@@ -33,17 +33,17 @@
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/guid/guid.c GccShellR33/guid/guid.c
--- ShellR33/guid/guid.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/guid/guid.c	2009-11-05 13:49:56.000000000 -0800
@@ -36,7 +36,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiGuidGuid = EFI_GUID_GUID;
 SHELL_VAR_CHECK_ITEM    GuidCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/guid/guid.h GccShellR33/guid/guid.h
--- ShellR33/guid/guid.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/guid/guid.h	2009-11-05 13:49:56.000000000 -0800
@@ -31,4 +31,4 @@
     0x425bff44, 0x1cae, 0x4c27, 0x98, 0x2c, 0x25, 0xc8, 0x74, 0x59, 0xdf, 0xd6 \
   }
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/guid/guid.inf GccShellR33/guid/guid.inf
--- ShellR33/guid/guid.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/guid/guid.inf	2009-09-22 15:37:05.000000000 -0700
@@ -37,23 +37,23 @@
   FILE_GUID            = CBEB01F8-0912-4d87-8A6B-45D02847A405
   COMPONENT_TYPE       = APPLICATION
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   GuidStrings.uni
   guid.c
   guid.h
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 [libraries.common]
   EfiShellLib
   EdkProtocolLib
diff --ignore-file-name-case -Naur ShellR33/hexedit/heditor.h GccShellR33/hexedit/heditor.h
--- ShellR33/hexedit/heditor.h	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/hexedit/heditor.h	2009-11-05 13:49:56.000000000 -0800
@@ -39,7 +39,7 @@
 #include "libinputbar.h"
 #include "libmenubar.h"
 
-#include "libmisc.h"
+#include "libMisc.h"
 
 #include "libclipboard.h"
 
@@ -52,7 +52,7 @@
 extern BOOLEAN                    HEditorFirst;
 extern BOOLEAN                    HEditorExit;
 
-extern EFI_HII_HANDLE             HiiHandle;
+extern EFI_HII_HANDLE             gHexEditHiiHandle;
 #if (EFI_SPECIFICATION_VERSION < 0x0002000A)
 extern EFI_HII_PROTOCOL           *Hii;
 #endif
diff --ignore-file-name-case -Naur ShellR33/hexedit/hexedit.inf GccShellR33/hexedit/hexedit.inf
--- ShellR33/hexedit/hexedit.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/hexedit/hexedit.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,7 +25,7 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   HexeditStrings.uni
   heditor.h
   heditortype.h
@@ -45,17 +45,17 @@
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/hexedit/libBufferImage.c GccShellR33/hexedit/libBufferImage.c
--- ShellR33/hexedit/libBufferImage.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/hexedit/libBufferImage.c	2009-09-22 15:37:05.000000000 -0700
@@ -203,6 +203,9 @@
   case MEM_BUFFER:
     HMemImageBackup ();
     break;
+
+  default:
+    break;
   }
 
   return EFI_SUCCESS;
@@ -980,6 +983,9 @@
   case MEM_BUFFER:
     Status = HMemImageRead (MemOffset, MemSize, Recover);
     break;
+
+  default:
+    break;
   }
 
   if (EFI_ERROR (Status)) {
@@ -1030,6 +1036,9 @@
   case MEM_BUFFER:
     Status = HMemImageSave (MemOffset, MemSize);
     break;
+    
+  default:
+    break;
   }
 
   if (EFI_ERROR (Status)) {
diff --ignore-file-name-case -Naur ShellR33/hexedit/libdiskimage.c GccShellR33/hexedit/libdiskimage.c
--- ShellR33/hexedit/libdiskimage.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/hexedit/libdiskimage.c	2009-09-22 15:37:05.000000000 -0700
@@ -246,7 +246,7 @@
   Status = LibDevicePathToInterface (
             &gEfiBlockIoProtocolGuid,
             DevicePath,
-            &BlkIo
+            (VOID **)&BlkIo
             );
   if (EFI_ERROR (Status)) {
     HMainStatusBarSetStatusString (L"Read Disk Failed");
@@ -427,7 +427,7 @@
   Status = LibDevicePathToInterface (
             &gEfiBlockIoProtocolGuid,
             DevicePath,
-            &BlkIo
+            (VOID **)&BlkIo
             );
   if (EFI_ERROR (Status)) {
     return Status;
diff --ignore-file-name-case -Naur ShellR33/hexedit/libEditor.c GccShellR33/hexedit/libEditor.c
--- ShellR33/hexedit/libEditor.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/hexedit/libEditor.c	2009-11-05 13:49:56.000000000 -0800
@@ -20,7 +20,7 @@
 
 --*/
 
-#include "Heditor.h"
+#include "heditor.h"
 
 HEFI_EDITOR_COLOR_ATTRIBUTES    HOriginalColors;
 INTN                            HOriginalMode;
@@ -136,7 +136,7 @@
   Status = BS->HandleProtocol (
                 In,
                 &gEfiSimplePointerProtocolGuid,
-                &HMainEditor.MouseInterface
+                (VOID **)&HMainEditor.MouseInterface
                 );
   if (EFI_ERROR (Status)) {
     //
@@ -159,7 +159,7 @@
         Status = BS->HandleProtocol (
                       HandleBuffer[Index],
                       &gEfiSimplePointerProtocolGuid,
-                      &HMainEditor.MouseInterface
+                      (VOID **)&HMainEditor.MouseInterface
                       );
         if (!EFI_ERROR (Status)) {
           break;
@@ -182,37 +182,37 @@
   //
   Status = HMainTitleBarInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_TITLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_TITLE), gHexEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
 
   Status = HMainMenuBarInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_MAINMENU), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_MAINMENU), gHexEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
 
   Status = HMainStatusBarInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_STATUS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_STATUS), gHexEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
 
   Status = HMainInputBarInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_INPUTBAR), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_INPUTBAR), gHexEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
 
   Status = HBufferImageInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_BUFFERIMAGE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_BUFFERIMAGE), gHexEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
 
   Status = HClipBoardInit ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_CLIPBOARD), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_CLIPBOARD), gHexEditHiiHandle);
     return EFI_LOAD_ERROR;
   }
   //
@@ -259,32 +259,32 @@
   //
   Status = HMainTitleBarCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_TITLEBAR_CLEAN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_TITLEBAR_CLEAN), gHexEditHiiHandle);
   }
 
   Status = HMainMenuBarCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MENUBAR_CLEAN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MENUBAR_CLEAN), gHexEditHiiHandle);
   }
 
   Status = HMainStatusBarCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_STATUSBAR_CLEAN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_STATUSBAR_CLEAN), gHexEditHiiHandle);
   }
 
   Status = HMainInputBarCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_INPUTBAR_CLEAN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_INPUTBAR_CLEAN), gHexEditHiiHandle);
   }
 
   Status = HBufferImageCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_BUFFERIMAGE_CLEAN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_BUFFERIMAGE_CLEAN), gHexEditHiiHandle);
   }
 
   Status = HClipBoardCleanup ();
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_CLIPBOARD_CLEAN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_CLIPBOARD_CLEAN), gHexEditHiiHandle);
   }
   //
   // restore old mode
@@ -732,6 +732,9 @@
         case MEM_BUFFER:
           OldSize = HBufferImage.MemImage->Size;
           break;
+          
+        default:
+          break;
         }
 
         if (LengthChange == FALSE) {
diff --ignore-file-name-case -Naur ShellR33/hexedit/libInputBar.c GccShellR33/hexedit/libInputBar.c
--- ShellR33/hexedit/libInputBar.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/hexedit/libInputBar.c	2009-11-05 13:49:56.000000000 -0800
@@ -201,7 +201,7 @@
   HEditorClearLine (INPUT_BAR_LOCATION);
 
   Out->SetCursorPosition (Out, 0, INPUT_BAR_LOCATION - 1);
-  PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBINPUTBAR_MAININPUTBAR), HiiHandle, HMainInputBar.Prompt);
+  PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBINPUTBAR_MAININPUTBAR), gHexEditHiiHandle, HMainInputBar.Prompt);
 
   //
   // that's the maximum input length that can be displayed on screen
diff --ignore-file-name-case -Naur ShellR33/hexedit/libMemImage.c GccShellR33/hexedit/libMemImage.c
--- ShellR33/hexedit/libMemImage.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/hexedit/libMemImage.c	2009-09-22 15:37:05.000000000 -0700
@@ -91,7 +91,7 @@
   Status = BS->LocateProtocol (
                 &gEfiPciRootBridgeIoProtocolGuid,
                 NULL,
-                &HMemImage.IoFncs
+                (VOID **)&HMemImage.IoFncs
                 );
   if (Status == EFI_NOT_FOUND) {
     //
diff --ignore-file-name-case -Naur ShellR33/hexedit/libMenuBar.c GccShellR33/hexedit/libMenuBar.c
--- ShellR33/hexedit/libMenuBar.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/hexedit/libMenuBar.c	2009-11-05 13:49:56.000000000 -0800
@@ -255,9 +255,9 @@
     FunctionKeyString = AllocatePool (BufferSize);
 
 #if (EFI_SPECIFICATION_VERSION < 0x0002000A)
-    Status            = Hii->GetString (Hii, HiiHandle, Item->NameToken, FALSE, NULL, &BufferSize, NameString);
+    Status            = Hii->GetString (Hii, gHexEditHiiHandle, Item->NameToken, FALSE, NULL, &BufferSize, NameString);
 #else
-    Status            = LibGetString (HiiHandle, Item->NameToken, NameString, &BufferSize);
+    Status            = LibGetString (gHexEditHiiHandle, Item->NameToken, NameString, &BufferSize);
 #endif
 
     Width             = max ((StrLen (NameString) + 6), 18);
@@ -267,9 +267,9 @@
     }
 
 #if (EFI_SPECIFICATION_VERSION < 0x0002000A)
-    Status = Hii->GetString (Hii, HiiHandle, Item->FunctionKeyToken, FALSE, NULL, &BufferSize, FunctionKeyString);
+    Status = Hii->GetString (Hii, gHexEditHiiHandle, Item->FunctionKeyToken, FALSE, NULL, &BufferSize, FunctionKeyString);
 #else
-    Status = LibGetString (HiiHandle, Item->FunctionKeyToken, FunctionKeyString, &BufferSize);
+    Status = LibGetString (gHexEditHiiHandle, Item->FunctionKeyToken, FunctionKeyString, &BufferSize);
 #endif
     if (Index >= 10) {
       PrintAt (Col - 1, Row - 1, L"%E%s%N %H%s%N  ", FunctionKeyString, NameString);
diff --ignore-file-name-case -Naur ShellR33/hexedit/libmenubar.h GccShellR33/hexedit/libmenubar.h
--- ShellR33/hexedit/libmenubar.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/hexedit/libmenubar.h	2009-09-22 19:19:20.000000000 -0700
@@ -20,7 +20,7 @@
 #ifndef _LIB_MENU_BAR_H_
 #define _LIB_MENU_BAR_H_
 
-#include "Heditortype.h"
+#include "heditortype.h"
 
 EFI_STATUS
 HMainMenuBarInit (
diff --ignore-file-name-case -Naur ShellR33/hexedit/libMisc.h GccShellR33/hexedit/libMisc.h
--- ShellR33/hexedit/libMisc.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/hexedit/libMisc.h	2009-09-22 19:19:20.000000000 -0700
@@ -20,7 +20,7 @@
 #ifndef _LIB_MISC_H_
 #define _LIB_MISC_H_
 
-#include "Heditortype.h"
+#include "heditortype.h"
 
 VOID
 HEditorClearLine (
diff --ignore-file-name-case -Naur ShellR33/hexedit/libTitleBar.c GccShellR33/hexedit/libTitleBar.c
--- ShellR33/hexedit/libTitleBar.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/hexedit/libTitleBar.c	2009-11-05 13:49:56.000000000 -0800
@@ -212,7 +212,7 @@
     // the space for file name is 35 characters
     //
     if (StrLen (FileNameTmp) <= 35) {
-      PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_MAINEDITOR), HiiHandle, FileNameTmp);
+      PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_MAINEDITOR), gHexEditHiiHandle, FileNameTmp);
 
       for (Index = StrLen (FileNameTmp); Index < 35; Index++) {
         Print (L" ");
@@ -220,7 +220,7 @@
 
     } else {
       for (Index = 0; Index < 32; Index++) {
-        PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_MAINEDITOR_C), HiiHandle, FileNameTmp[Index]);
+        PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_MAINEDITOR_C), gHexEditHiiHandle, FileNameTmp[Index]);
       }
       //
       // print "..."
@@ -234,14 +234,14 @@
     if (StrLen (HMainEditor.BufferImage->DiskImage->Name) <= 9) {
       PrintToken (
         STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_MAINEDITOR),
-        HiiHandle,
+        gHexEditHiiHandle,
         HMainEditor.BufferImage->DiskImage->Name
         );
     } else {
       for (Index = 0; Index < 6; Index++) {
         PrintToken (
           STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_MAINEDITOR_C),
-          HiiHandle,
+          gHexEditHiiHandle,
           HMainEditor.BufferImage->DiskImage->Name[Index]
           );
       }
@@ -253,7 +253,7 @@
 
     PrintToken (
       STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_MAINEDITOR_TWOVARS),
-      HiiHandle,
+      gHexEditHiiHandle,
       HMainEditor.BufferImage->DiskImage->Offset,
       HMainEditor.BufferImage->DiskImage->Offset + HMainEditor.BufferImage->DiskImage->Size - 1
       );
@@ -269,7 +269,7 @@
   case MEM_BUFFER:
     PrintToken (
       STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_MAINEDITOR_TWOVARS),
-      HiiHandle,
+      gHexEditHiiHandle,
       HMainEditor.BufferImage->MemImage->Offset,
       HMainEditor.BufferImage->MemImage->Offset + HMainEditor.BufferImage->MemImage->Size - 1
       );
@@ -280,21 +280,26 @@
 
     break;
 
+  default:
+    break;
   }
   //
   // 9 characters
   //
   switch (HMainEditor.BufferImage->BufferType) {
   case FILE_BUFFER:
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_FILE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_FILE), gHexEditHiiHandle);
     break;
 
   case DISK_BUFFER:
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_DISK), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_DISK), gHexEditHiiHandle);
     break;
 
   case MEM_BUFFER:
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_MEM), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_LIBTITLEBAR_MEM), gHexEditHiiHandle);
+    break;
+    
+  default:
     break;
   }
   //
diff --ignore-file-name-case -Naur ShellR33/hexedit/main.c GccShellR33/hexedit/main.c
--- ShellR33/hexedit/main.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/hexedit/main.c	2009-11-05 13:49:56.000000000 -0800
@@ -26,7 +26,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE    HiiHandle;
+EFI_HII_HANDLE    gHexEditHiiHandle;
 #if (EFI_SPECIFICATION_VERSION < 0x0002000A)
 EFI_HII_PROTOCOL  *Hii;
 #endif
@@ -92,10 +92,10 @@
   VOID
   )
 {
-  PrintToken (STRING_TOKEN (STR_HEXEDIT_USAGE), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_HEXEDIT_FILENAME), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_HEXEDIT_DISKNAME), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_HEXEDIT_OFFSET_SIZE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_HEXEDIT_USAGE), gHexEditHiiHandle);
+  PrintToken (STRING_TOKEN (STR_HEXEDIT_FILENAME), gHexEditHiiHandle);
+  PrintToken (STRING_TOKEN (STR_HEXEDIT_DISKNAME), gHexEditHiiHandle);
+  PrintToken (STRING_TOKEN (STR_HEXEDIT_OFFSET_SIZE), gHexEditHiiHandle);
   Print (L"\n\n");
 }
 
@@ -157,12 +157,12 @@
   // Register our string package with HII and return the handle to it.
   // If previously registered we will simply receive the handle
   //
-  EFI_SHELL_STR_INIT (HiiHandle, STRING_ARRAY_NAME, EfiHexeditGuid);
+  EFI_SHELL_STR_INIT (gHexEditHiiHandle, STRING_ARRAY_NAME, EfiHexeditGuid);
 
   if (!EFI_PROPER_VERSION (1, 10)) {
     PrintToken (
       STRING_TOKEN (STR_SHELLENV_GNC_COMMAND_NOT_SUPPORT),
-      HiiHandle,
+      gHexEditHiiHandle,
       L"hexedit",
       EFI_VERSION_1_10
       );
@@ -186,17 +186,17 @@
     switch (RetCode) {
     case VarCheckConflict:
 
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_FLAG_CONFLICT), HiiHandle, L"hexedit", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_FLAG_CONFLICT), gHexEditHiiHandle, L"hexedit", Useful);
       break;
 
     case VarCheckDuplicate:
 
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_DUP_FLAG), HiiHandle, L"hexedit", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_DUP_FLAG), gHexEditHiiHandle, L"hexedit", Useful);
       break;
 
     case VarCheckUnknown:
 
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_UNKNOWN_FLAG), HiiHandle, L"hexedit", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_UNKNOWN_FLAG), gHexEditHiiHandle, L"hexedit", Useful);
       break;
 
     default:
@@ -219,10 +219,10 @@
         ChkPck.FlagCount > 2 ||
         (ChkPck.FlagCount == 2 && LibCheckVarGetFlag (&ChkPck, L"-b") == NULL)
         ) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), HiiHandle, L"hexedit");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), gHexEditHiiHandle, L"hexedit");
       Status = EFI_INVALID_PARAMETER;
     } else {
-      PrintToken (STRING_TOKEN (STR_HEXEDIT_VERBOSE_HELP), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_HEXEDIT_VERBOSE_HELP), gHexEditHiiHandle);
       Status = EFI_SUCCESS;
     }
 
@@ -232,13 +232,13 @@
   Item = LibCheckVarGetFlag (&ChkPck, L"-d");
   if (Item) {
     if (3 < ChkPck.ValueCount) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), HiiHandle, L"hexedit");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), gHexEditHiiHandle, L"hexedit");
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
 
     if (3 > ChkPck.ValueCount) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_FEW), HiiHandle, L"hexedit");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_FEW), gHexEditHiiHandle, L"hexedit");
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
@@ -248,7 +248,7 @@
     Item    = Item->Next;
     Result  = HXtoi (Item->VarStr, &Offset);
     if (EFI_ERROR (Result)) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"hexedit", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gHexEditHiiHandle, L"hexedit", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
@@ -256,13 +256,13 @@
     Item    = Item->Next;
     Result  = HXtoi (Item->VarStr, &Size);
     if (EFI_ERROR (Result)) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"hexedit", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gHexEditHiiHandle, L"hexedit", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
 
     if (Offset < 0 || Size <= 0) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"hexedit", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gHexEditHiiHandle, L"hexedit", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
@@ -273,13 +273,13 @@
   Item = LibCheckVarGetFlag (&ChkPck, L"-m");
   if (Item) {
     if (2 < ChkPck.ValueCount) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), HiiHandle, L"hexedit");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), gHexEditHiiHandle, L"hexedit");
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
 
     if (2 > ChkPck.ValueCount) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_FEW), HiiHandle, L"hexedit");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_FEW), gHexEditHiiHandle, L"hexedit");
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
@@ -287,7 +287,7 @@
     Item    = ChkPck.VarList;
     Result  = HXtoi (Item->VarStr, &Offset);
     if (EFI_ERROR (Result)) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"hexedit", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gHexEditHiiHandle, L"hexedit", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
@@ -295,20 +295,20 @@
     Item    = Item->Next;
     Result  = HXtoi (Item->VarStr, &Size);
     if (EFI_ERROR (Result)) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"hexedit", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gHexEditHiiHandle, L"hexedit", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
 
     if (Offset < 0 || Size <= 0) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"hexedit", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gHexEditHiiHandle, L"hexedit", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
 
     LastOffset = (UINT64) Offset + (UINT64) Size - (UINT64) 1;
     if (LastOffset > 0xffffffff) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"hexedit", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gHexEditHiiHandle, L"hexedit", Item->VarStr);
       goto done;
     }
 
@@ -318,13 +318,13 @@
   Item = LibCheckVarGetFlag (&ChkPck, L"-f");
   if (Item) {
     if (1 < ChkPck.ValueCount) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), HiiHandle, L"hexedit");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), gHexEditHiiHandle, L"hexedit");
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
 
     if (1 > ChkPck.ValueCount) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_FEW), HiiHandle, L"hexedit");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_FEW), gHexEditHiiHandle, L"hexedit");
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
@@ -332,7 +332,7 @@
     Item  = ChkPck.VarList;
     Name  = Item->VarStr;
     if (!HIsValidFileName (Name)) {
-      PrintToken (STRING_TOKEN (STR_HEXEDIT_FILE_NAME), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_HEXEDIT_FILE_NAME), gHexEditHiiHandle);
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
@@ -345,13 +345,13 @@
     } else if (1 == ChkPck.ValueCount) {
       Name = ChkPck.VarList->VarStr;
     } else {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), HiiHandle, L"hexedit");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), gHexEditHiiHandle, L"hexedit");
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
 
     if (!HIsValidFileName (Name)) {
-      PrintToken (STRING_TOKEN (STR_HEXEDIT_FILE_NAME), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_HEXEDIT_FILE_NAME), gHexEditHiiHandle);
       Status = EFI_INVALID_PARAMETER;
       goto done;
     }
@@ -360,7 +360,7 @@
   }
 
   if (SI->RedirArgc != 0) {
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_NOREDIRECT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_NOREDIRECT), gHexEditHiiHandle);
     Status = EFI_INVALID_PARAMETER;
     goto done;
   }
@@ -369,7 +369,7 @@
   if (EFI_ERROR (Status)) {
     Out->ClearScreen (Out);
     Out->EnableCursor (Out, TRUE);
-    PrintToken (STRING_TOKEN (STR_HEXEDIT_INIT_FAILED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_HEXEDIT_INIT_FAILED), gHexEditHiiHandle);
     goto done;
   }
 
@@ -414,6 +414,10 @@
               FALSE
               );
     break;
+  
+  default:
+    ASSERT (FALSE);
+    break;
 
   }
 
@@ -446,19 +450,19 @@
   //
   if (Status == EFI_SUCCESS) {
   } else if (Status == EFI_OUT_OF_RESOURCES) {
-    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_OUT_RESOURCE), HiiHandle, L"hexedit");
+    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_OUT_RESOURCE), gHexEditHiiHandle, L"hexedit");
   } else {
     if (Buffer != NULL) {
       if (StrCmp (Buffer, L"") != 0) {
         //
         // print out the status string
         //
-        PrintToken (STRING_TOKEN (STR_HEXEDIT_ONE_VAR), HiiHandle, Buffer);
+        PrintToken (STRING_TOKEN (STR_HEXEDIT_ONE_VAR), gHexEditHiiHandle, Buffer);
       } else {
-        PrintToken (STRING_TOKEN (STR_HEXEDIT_UNKNOWN_EDITOR), HiiHandle);
+        PrintToken (STRING_TOKEN (STR_HEXEDIT_UNKNOWN_EDITOR), gHexEditHiiHandle);
       }
     } else {
-      PrintToken (STRING_TOKEN (STR_HEXEDIT_UNKNOWN_EDITOR), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_HEXEDIT_UNKNOWN_EDITOR), gHexEditHiiHandle);
     }
   }
 
diff --ignore-file-name-case -Naur ShellR33/IfConfig/IfConfig.c GccShellR33/IfConfig/IfConfig.c
--- ShellR33/IfConfig/IfConfig.c	2009-08-13 22:57:02.000000000 -0700
+++ GccShellR33/IfConfig/IfConfig.c	2009-11-05 13:49:56.000000000 -0800
@@ -26,7 +26,7 @@
 #define NET_IFTYPE_ETHERNET    1
 #define NIC_ITEM_CONFIG_SIZE   sizeof (NIC_IP4_CONFIG_INFO) + sizeof (EFI_IP4_ROUTE_TABLE) * MAX_IP4_CONFIG_IN_VARIABLE
 
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 
 EFI_GUID  EfiIfConfigGuid = EFI_IFCONFIG_GUID;
 
@@ -450,7 +450,7 @@
   Status = BS->LocateProtocol (
                 &gEfiHiiConfigRoutingProtocolGuid,
                 NULL,
-                &mHiiConfigRouting
+                (VOID **)&mHiiConfigRouting
                 );
   if (EFI_ERROR (Status)) {
     return EFI_NOT_FOUND;
@@ -1602,7 +1602,7 @@
     if ((Name != NULL) && (StrCmp (Name, Info->Name) != 0)) {
       continue;
     }
-
+    
 #if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
     if (Info->NicIp4Config == NULL) { 
       Status = IfconfigSetNicAddrByHii (Info, NULL);
@@ -1717,6 +1717,7 @@
 #if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
   if (EFI_ERROR (Status)) {
     Status = IfconfigGetAllNicInfoByHii (ImageHandle);
+
     if (EFI_ERROR (Status)) {
       if (mIp4ConfigExist) {
         PrintToken (STRING_TOKEN (STR_IFCONFIG_GET_NIC_FAIL), HiiHandle, Status);
@@ -1726,7 +1727,7 @@
 
       return EFI_NOT_FOUND;
     }
-  }
+  } 
 #else 
   if (EFI_ERROR (Status)) {
     if (mIp4ConfigExist) {
diff --ignore-file-name-case -Naur ShellR33/IfConfig/IfConfig.inf GccShellR33/IfConfig/IfConfig.inf
--- ShellR33/IfConfig/IfConfig.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/IfConfig/IfConfig.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,7 +25,7 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   IfConfigStrings.uni
   IfConfig.c
   IfConfig.h
@@ -33,25 +33,25 @@
   ShellNetHelper.h
   
 [includes.common]
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(EDK_SOURCE)\Foundation\Library\Dxe\Include
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(EDK_SOURCE)/Foundation/Library/Dxe/Include
+  $(DEST_DIR)/
 
 [libraries.common]
   EfiShellLib
   EdkProtocolLib
   EfiProtocolLib
   EdkGuidLib
-  EfiDriverLib
+#  EfiDriverLib
 
 [nmake.common]
   C_PROJ_FLAGS = $(C_PROJ_FLAGS)
diff --ignore-file-name-case -Naur ShellR33/inc/shellenv.h GccShellR33/inc/shellenv.h
--- ShellR33/inc/shellenv.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/inc/shellenv.h	2009-09-22 15:37:05.000000000 -0700
@@ -122,15 +122,6 @@
   IN SHELLCMD_GET_LINE_HELP       GetLineHelp
   );
 
-//
-// Add to shell environment protocol information & protocol information dump handlers
-//
-typedef
-VOID
-(EFIAPI *SHELLENV_DUMP_PROTOCOL_INFO) (
-  IN EFI_HANDLE                   Handle,
-  IN VOID                         *Interface
-  );
 
 typedef
 VOID
diff --ignore-file-name-case -Naur ShellR33/inc/shelltypes.h GccShellR33/inc/shelltypes.h
--- ShellR33/inc/shelltypes.h	2006-02-09 00:05:29.000000000 -0800
+++ GccShellR33/inc/shelltypes.h	2009-10-14 16:36:30.000000000 -0700
@@ -36,7 +36,7 @@
 #endif
 
 #include "Tiano.h"
-#include "linkedlist.h"
+#include "LinkedList.h"
 
 #include EFI_PROTOCOL_DEFINITION (FileInfo)
 #include EFI_PROTOCOL_DEFINITION (SimpleFileSystem)
@@ -148,12 +148,6 @@
   EFI_FILE_INFO             *Info;
 } SHELL_FILE_ARG;
 
-typedef
-VOID
-(EFIAPI *SHELLENV_DUMP_PROTOCOL_INFO) (
-  IN EFI_HANDLE                   Handle,
-  IN VOID                         *Interface
-  );
 
 typedef
 EFI_STATUS
diff --ignore-file-name-case -Naur ShellR33/IpConfig/IpConfig.c GccShellR33/IpConfig/IpConfig.c
--- ShellR33/IpConfig/IpConfig.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/IpConfig/IpConfig.c	2009-11-05 13:49:56.000000000 -0800
@@ -39,7 +39,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiIpConfigGuid = EFI_IPCONFIG_GUID;
 SHELL_VAR_CHECK_ITEM  IpconfigCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/IpConfig/IpConfig.h GccShellR33/IpConfig/IpConfig.h
--- ShellR33/IpConfig/IpConfig.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/IpConfig/IpConfig.h	2009-11-05 13:49:56.000000000 -0800
@@ -29,4 +29,4 @@
     0x8252915c, 0xf1e9, 0x435c, 0x81, 0x91, 0xad, 0x2f, 0x82, 0x62, 0x23, 0x73 \
   }
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/IpConfig/IpConfig.inf GccShellR33/IpConfig/IpConfig.inf
--- ShellR33/IpConfig/IpConfig.inf	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/IpConfig/IpConfig.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,24 +25,24 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   IpConfigStrings.uni
   IpConfig.c
   IpConfig.h 
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/Library/Arm/EfiLibPlat.h GccShellR33/Library/Arm/EfiLibPlat.h
--- ShellR33/Library/Arm/EfiLibPlat.h	1969-12-31 16:00:00.000000000 -0800
+++ GccShellR33/Library/Arm/EfiLibPlat.h	2009-11-05 13:49:56.000000000 -0800
@@ -0,0 +1,37 @@
+/*++
+
+Copyright (c) 2005, 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:
+
+    efilibplat.h
+
+Abstract:
+
+    EFI to compile bindings
+
+
+
+
+Revision History
+
+--*/
+#ifndef _EFI_LIB_PLAT_H_
+#define _EFI_LIB_PLAT_H_
+
+VOID
+InitializeLibPlatform (
+  IN EFI_HANDLE           ImageHandle,
+  IN EFI_SYSTEM_TABLE     *SystemTable
+  );
+
+#define MIN_ALIGNMENT_SIZE  4
+
+#endif
diff --ignore-file-name-case -Naur ShellR33/Library/ConsistMapping.c GccShellR33/Library/ConsistMapping.c
--- ShellR33/Library/ConsistMapping.c	2008-11-24 21:49:58.000000000 -0800
+++ GccShellR33/Library/ConsistMapping.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 MTD_NAME  mMTDName[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/Library/ConsistMapping.h GccShellR33/Library/ConsistMapping.h
--- ShellR33/Library/ConsistMapping.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/ConsistMapping.h	2009-11-05 13:49:56.000000000 -0800
@@ -79,4 +79,4 @@
   IN  VOID *Buffer2
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/Library/CRC.c GccShellR33/Library/CRC.c
--- ShellR33/Library/CRC.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/CRC.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 UINT32  CRCTable[256] = {
   0x00000000,
diff --ignore-file-name-case -Naur ShellR33/Library/CRC.h GccShellR33/Library/CRC.h
--- ShellR33/Library/CRC.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/CRC.h	2009-11-05 13:49:56.000000000 -0800
@@ -53,4 +53,4 @@
   UINTN Size
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/Library/Data.c GccShellR33/Library/Data.c
--- ShellR33/Library/Data.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/Library/Data.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 //
 // ShellLibInitialized - TRUE once InitializeShellLib() is called for the first time
diff --ignore-file-name-case -Naur ShellR33/Library/DPath.c GccShellR33/Library/DPath.c
--- ShellR33/Library/DPath.c	2008-11-24 21:49:58.000000000 -0800
+++ GccShellR33/Library/DPath.c	2009-09-22 19:19:20.000000000 -0700
@@ -20,7 +20,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 EFI_GUID mEfiDevicePathMessagingUartFlowControlGuid = DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL;
 
@@ -1468,7 +1468,7 @@
   
   Status = LibLocateProtocol (
              &gEfiDevicePathToTextProtocolGuid,
-             &DevPathToText
+             (VOID **)&DevPathToText
              );
   if (!EFI_ERROR (Status)) {
     ToText = DevPathToText->ConvertDevicePathToText (
diff --ignore-file-name-case -Naur ShellR33/Library/DPath.h GccShellR33/Library/DPath.h
--- ShellR33/Library/DPath.h	2008-10-06 00:03:04.000000000 -0700
+++ GccShellR33/Library/DPath.h	2009-09-22 15:37:05.000000000 -0700
@@ -24,7 +24,7 @@
 #ifndef _D_PATH_H
 #define _D_PATH_H
 
-#define NextStrA(a) ((UINT8 *) (((UINT8 *) (a)) + strlena (a) + 1))
+#define NextStrA(a) ((CHAR8 *) (((UINT8 *) (a)) + strlena (a) + 1))
 
 #include EFI_GUID_DEFINITION (PcAnsi)
 
diff --ignore-file-name-case -Naur ShellR33/Library/EfiShellLib.h GccShellR33/Library/EfiShellLib.h
--- ShellR33/Library/EfiShellLib.h	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/Library/EfiShellLib.h	2009-09-22 16:16:30.000000000 -0700
@@ -25,7 +25,7 @@
 #define _EFI_SHELL_LIB_INCLUDE_
 
 #include "Tiano.h"
-#include "ShellEnv.h"
+#include "shellenv.h"
 #include "pci22.h"
 
 #include EFI_ARCH_PROTOCOL_DEFINITION (Bds)
@@ -51,7 +51,7 @@
 #include EFI_GUID_DEFINITION (PrimaryConsoleOutDevice)
 #include EFI_GUID_DEFINITION (PrimaryStandardErrorDevice)
 #include EFI_GUID_DEFINITION (SalSystemTable)
-#include EFI_GUID_DEFINITION (Smbios)
+#include EFI_GUID_DEFINITION (SmBios)
 #include EFI_GUID_DEFINITION (StandardErrorDevice)
 #include EFI_GUID_DEFINITION (FrameworkDevicePath)
 #include EFI_PROTOCOL_DEFINITION (AbsolutePointer)
@@ -67,7 +67,7 @@
 #include EFI_PROTOCOL_DEFINITION (DebugPort)
 #include EFI_PROTOCOL_DEFINITION (DebugSupport)
 #include EFI_PROTOCOL_DEFINITION (Decompress)
-#include EFI_PROTOCOL_DEFINITION (DeviceIO)
+#include EFI_PROTOCOL_DEFINITION (DeviceIo)
 #include EFI_PROTOCOL_DEFINITION (DevicePath)
 #include EFI_PROTOCOL_DEFINITION (DevicePathFromText)
 #include EFI_PROTOCOL_DEFINITION (DevicePathToText)
@@ -111,7 +111,7 @@
 #include EFI_PROTOCOL_DEFINITION (PciRootBridgeIo)
 #include EFI_PROTOCOL_DEFINITION (PlatformDriverOverride)
 #include EFI_PROTOCOL_DEFINITION (PxeBaseCode)
-#include EFI_PROTOCOL_DEFINITION (PxeBaseCodeCallback)
+#include EFI_PROTOCOL_DEFINITION (PxeBaseCodeCallBack)
 #include EFI_PROTOCOL_DEFINITION (ScsiIo)
 #include EFI_PROTOCOL_DEFINITION (ScsiPassThru)
 #include EFI_PROTOCOL_DEFINITION (SectionExtraction)
@@ -151,8 +151,8 @@
 #include EFI_PROTOCOL_DEFINITION (DriverSupportedEfiVersion)
 #include EFI_PROTOCOL_DEFINITION (PlatformToDriverConfiguration)
 
-#include "efilibplat.h"
-#include "efipart.h"
+#include "EfiLibPlat.h"
+#include "EfiPart.h"
 #include "ShellDebug.h"
 #include "CRC.h"
 #include "DPath.h"
diff --ignore-file-name-case -Naur ShellR33/Library/EfiShellLib.inf GccShellR33/Library/EfiShellLib.inf
--- ShellR33/Library/EfiShellLib.inf	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/Library/EfiShellLib.inf	2009-11-07 12:33:52.000000000 -0800
@@ -45,34 +45,42 @@
   HiiSupport.c
 
 [sources.ia32]
-  ia32\math.c
-  ia32\initplat.c
+  IA32/math.c
+  IA32/initplat.c
+  IA32/DivU64x32Remainder.S | GCC
+  IA32/LShiftU64.S          | GCC
+  IA32/RShiftU64.S          | GCC
+  IA32/MultU64x32.S         | GCC
 
 [sources.ipf]
-  ipf\math.c
-  ipf\initplat.c
-  ipf\palproc.s
-  ipf\salpal.c
+  IPF/math.c
+  IPF/initplat.c
+  IPF/palproc.s
+  IPF/salpal.c
 
 [sources.EBC]
-  EBC\math.c
-  EBC\initplat.c
+  Ebc/math.c
+  Ebc/initplat.c
   
 [sources.x64]
-  ipf\math.c
-  ia32\initplat.c
+  IPF/math.c
+  IA32/initplat.c
+
+[sources.ARM]
+  IPF/math.c
+  IA32/initplat.c
 
 [includes.common]
   .
-  ..\Inc
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Core\Dxe
+  ../Inc
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Core/Dxe
 
 [libraries.common]
   EdkFrameworkProtocolLib
diff --ignore-file-name-case -Naur ShellR33/Library/Event.c GccShellR33/Library/Event.c
--- ShellR33/Library/Event.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/Library/Event.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 EFI_EVENT
 LibCreateProtocolNotifyEvent (
diff --ignore-file-name-case -Naur ShellR33/Library/Event.h GccShellR33/Library/Event.h
--- ShellR33/Library/Event.h	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/Library/Event.h	2009-11-05 13:49:56.000000000 -0800
@@ -50,4 +50,4 @@
   OUT EFI_INPUT_KEY                 *Key
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/Library/FileIO.c GccShellR33/Library/FileIO.c
--- ShellR33/Library/FileIO.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/Library/FileIO.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 typedef struct _PATH_COMPONENTS {
   CHAR16                  *Name;
diff --ignore-file-name-case -Naur ShellR33/Library/FileIO.h GccShellR33/Library/FileIO.h
--- ShellR33/Library/FileIO.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/FileIO.h	2009-11-05 13:49:56.000000000 -0800
@@ -208,4 +208,4 @@
   IN SIMPLE_READ_FILE               SimpleReadHandle
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/Library/Handle.c GccShellR33/Library/Handle.c
--- ShellR33/Library/Handle.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/Library/Handle.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 EFI_STATUS
 LibLocateHandle (
diff --ignore-file-name-case -Naur ShellR33/Library/HiiSupport.c GccShellR33/Library/HiiSupport.c
--- ShellR33/Library/HiiSupport.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/Library/HiiSupport.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 #if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
 
@@ -56,11 +56,11 @@
     return EFI_SUCCESS;
   }
 
-  Status = LibLocateProtocol (&gEfiHiiDatabaseProtocolGuid, &gLibHiiDatabase);
+  Status = LibLocateProtocol (&gEfiHiiDatabaseProtocolGuid, (VOID **)&gLibHiiDatabase);
   if (EFI_ERROR (Status)) {
     return Status;
   }
-  Status = LibLocateProtocol (&gEfiHiiStringProtocolGuid, &gLibHiiString);
+  Status = LibLocateProtocol (&gEfiHiiStringProtocolGuid, (VOID **)&gLibHiiString);
   if (EFI_ERROR (Status)) {
     return Status;
   }  
diff --ignore-file-name-case -Naur ShellR33/Library/IA32/efilibplat.h GccShellR33/Library/IA32/efilibplat.h
--- ShellR33/Library/IA32/efilibplat.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/IA32/efilibplat.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,37 +0,0 @@
-/*++
-
-Copyright (c) 2005, 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:
-
-    efilibplat.h
-
-Abstract:
-
-    EFI to compile bindings
-
-
-
-
-Revision History
-
---*/
-#ifndef _EFI_LIB_PLAT_H_
-#define _EFI_LIB_PLAT_H_
-
-VOID
-InitializeLibPlatform (
-  IN EFI_HANDLE           ImageHandle,
-  IN EFI_SYSTEM_TABLE     *SystemTable
-  );
-
-#define MIN_ALIGNMENT_SIZE  4
-
-#endif
\ No newline at end of file
diff --ignore-file-name-case -Naur ShellR33/Library/IA32/initplat.c GccShellR33/Library/IA32/initplat.c
--- ShellR33/Library/IA32/initplat.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/IA32/initplat.c	1969-12-31 16:00:00.000000000 -0800
@@ -1,35 +0,0 @@
-/*++
-
-Copyright (c) 2005, 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:
-
-    initplat.c
-
-Abstract:
-
-
-
-
-Revision History
-
---*/
-
-#include "EfiShellLib.h"
-
-VOID
-InitializeLibPlatform (
-  IN EFI_HANDLE           ImageHandle,
-  IN EFI_SYSTEM_TABLE     *SystemTable
-  )
-
-{
-  return;
-}
diff --ignore-file-name-case -Naur ShellR33/Library/IA32/math.c GccShellR33/Library/IA32/math.c
--- ShellR33/Library/IA32/math.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/IA32/math.c	1969-12-31 16:00:00.000000000 -0800
@@ -1,217 +0,0 @@
-/*++
-
-Copyright (c) 2005, 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:
-
-    math.c
-
-Abstract:
-
-
-
-
-Revision History
-
---*/
-
-#include "EfiShellLib.h"
-
-//
-//
-//
-UINT64
-LShiftU64 (
-  IN UINT64   Operand,
-  IN UINTN    Count
-  )
-/*++
-Routine Description:
-
-  Left shift 64bit by 32bit and get a 64bit result
-
-Arguments:
-
-  Operand - Operand
-  Count   - Shift count
-
-Returns:
-
---*/
-{
-  UINT64  Result;
-  Result = 0;
-
-  _asm
-  {
-    mov ecx, Count
-    cmp ecx, 64
-    jge exit
-
-    mov eax, dword ptr Operand[0]
-    mov edx, dword ptr Operand[4]
-
-    shld edx, eax, cl
-    shl eax, cl
-
-    cmp ecx, 32
-    jc short ls10
-
-    mov edx, eax
-    xor eax, eax
-
-    ls10 :
-    mov dword ptr Result[0], eax
-    mov dword ptr Result[4], edx
-    exit :
-  }
-
-  return Result;
-}
-
-UINT64
-RShiftU64 (
-  IN UINT64   Operand,
-  IN UINTN    Count
-  )
-/*++
-Routine Description:
-
-  Right shift 64bit by 32bit and get a 64bit result
-  
-Arguments:
-
-  Operand - Operand
-  Count   - Shift Count
-
-Returns:
-
---*/
-{
-  UINT64  Result;
-  Result = 0;
-
-  _asm
-  {
-    mov ecx, Count
-    cmp ecx, 64
-    jge exit
-
-    mov eax, dword ptr Operand[0]
-    mov edx, dword ptr Operand[4]
-
-    shrd eax, edx, cl
-    shr edx, cl
-
-    cmp ecx, 32
-    jc short rs10
-
-    mov eax, edx
-    xor edx, edx
-
-    rs10 :
-    mov dword ptr Result[0], eax
-    mov dword ptr Result[4], edx
-    exit :
-  }
-
-  return Result;
-}
-
-UINT64
-MultU64x32 (
-  IN UINT64   Multiplicand,
-  IN UINTN    Multiplier
-  )
-/*++
-Routine Description:
-
-  Multiple 64bit by 32bit and get a 64bit result
-  
-Arguments:
-
-  Multiplicand - Multiplicand
-  Multiplier   - Multiplier
-
-Returns:
-
---*/
-{
-  UINT64  Result;
-
-  _asm
-  {
-    mov eax, dword ptr Multiplicand[0]
-    mul Multiplier
-    mov dword ptr Result[0], eax
-    mov dword ptr Result[4], edx
-    mov eax, dword ptr Multiplicand[4]
-    mul Multiplier
-    add dword ptr Result[4], eax
-  }
-
-  return Result;
-}
-
-UINT64
-DivU64x32 (
-  IN UINT64   Dividend,
-  IN UINTN    Divisor,
-  OUT UINTN   *Remainder OPTIONAL
-  )
-/*++
-Routine Description:
-
-  divide 64bit by 32bit and get a 64bit result
-  N.B. only works for 31bit divisors!!
-
-Arguments:
-
-  Dividend  - The dividend
-  Divisor   - The divisor
-  Remainder - The remainder
-
-Return:
-
---*/
-{
-  UINT32  Rem;
-  UINT32  bit;
-
-  ASSERT (Divisor != 0);
-  ASSERT ((Divisor >> 31) == 0);
-
-  //
-  // For each bit in the dividend
-  //
-  Rem = 0;
-  for (bit = 0; bit < 64; bit++) {
-    _asm
-    {
-      shl dword ptr Dividend[0], 1    /*  shift rem:dividend left one */
-      rcl dword ptr Dividend[4], 1
-      rcl dword ptr Rem, 1
-
-      mov eax, Rem
-      cmp eax, Divisor                /*  Is Rem >= Divisor? */
-      cmc                             /*  No - do nothing */
-      sbb eax, eax                    /*  Else, */
-      sub dword ptr Dividend[0], eax  /*    set low bit in dividen */
-      and eax, Divisor                /*  and */
-      sub Rem, eax                    /*    subtract divisor */
-    }
-  }
-
-  if (Remainder) {
-    *Remainder = Rem;
-  }
-
-  return Dividend;
-}
diff --ignore-file-name-case -Naur ShellR33/Library/IA32/DivU64x32Remainder.S GccShellR33/Library/IA32/DivU64x32Remainder.S
--- ShellR33/Library/IA32/DivU64x32Remainder.S	1969-12-31 16:00:00.000000000 -0800
+++ GccShellR33/Library/IA32/DivU64x32Remainder.S	2009-10-13 20:18:23.000000000 -0700
@@ -0,0 +1,58 @@
+#------------------------------------------------------------------------------
+#
+# 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:
+#
+#   DivError.asm
+#
+# Abstract:
+#
+#   Set error flag for all division functions
+#
+#------------------------------------------------------------------------------
+
+  ///
+  /// Private worker functions for ASM_PFX()
+  ///
+  #define _CONCATENATE(a, b)  __CONCATENATE(a, b)
+  #define __CONCATENATE(a, b) a ## b
+
+  ///
+  /// The __USER_LABEL_PREFIX__ macro predefined by GNUC represents the prefix
+  /// on symbols in assembly language.
+  ///
+  #define ASM_PFX(name) _CONCATENATE (__USER_LABEL_PREFIX__, name)
+
+.globl ASM_PFX(InternalMathDivRemU64x32)
+
+#------------------------------------------------------------------------------
+# UINT64
+# EFIAPI
+# InternalMathDivRemU64x32 (
+#   IN      UINT64                    Dividend,
+#   IN      UINT32                    Divisor,
+#   OUT     UINT32                    *Remainder
+#   );
+#------------------------------------------------------------------------------
+ASM_PFX(InternalMathDivRemU64x32):
+    movl    12(%esp), %ecx
+    movl    8(%esp), %eax
+    xorl    %edx, %edx
+    divl    %ecx
+    push    %eax
+    movl    8(%esp), %eax
+    divl    %ecx
+    movl    20(%esp), %ecx
+    jecxz   L1
+    movl    %edx, (%ecx)
+L1:
+    pop     %edx
+    ret
diff --ignore-file-name-case -Naur ShellR33/Library/IA32/EfiLibPlat.h GccShellR33/Library/IA32/EfiLibPlat.h
--- ShellR33/Library/IA32/EfiLibPlat.h	1969-12-31 16:00:00.000000000 -0800
+++ GccShellR33/Library/IA32/EfiLibPlat.h	2009-11-10 11:17:48.000000000 -0800
@@ -0,0 +1,37 @@
+/*++
+
+Copyright (c) 2005, 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:
+
+    efilibplat.h
+
+Abstract:
+
+    EFI to compile bindings
+
+
+
+
+Revision History
+
+--*/
+#ifndef _EFI_LIB_PLAT_H_
+#define _EFI_LIB_PLAT_H_
+
+VOID
+InitializeLibPlatform (
+  IN EFI_HANDLE           ImageHandle,
+  IN EFI_SYSTEM_TABLE     *SystemTable
+  );
+
+#define MIN_ALIGNMENT_SIZE  4
+
+#endif
\ No newline at end of file
diff --ignore-file-name-case -Naur ShellR33/Library/IA32/initplat.c GccShellR33/Library/IA32/initplat.c
--- ShellR33/Library/IA32/initplat.c	1969-12-31 16:00:00.000000000 -0800
+++ GccShellR33/Library/IA32/initplat.c	2009-09-22 15:37:05.000000000 -0700
@@ -0,0 +1,35 @@
+/*++
+
+Copyright (c) 2005, 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:
+
+    initplat.c
+
+Abstract:
+
+
+
+
+Revision History
+
+--*/
+
+#include "EfiShellLib.h"
+
+VOID
+InitializeLibPlatform (
+  IN EFI_HANDLE           ImageHandle,
+  IN EFI_SYSTEM_TABLE     *SystemTable
+  )
+
+{
+  return;
+}
diff --ignore-file-name-case -Naur ShellR33/Library/IA32/LShiftU64.S GccShellR33/Library/IA32/LShiftU64.S
--- ShellR33/Library/IA32/LShiftU64.S	1969-12-31 16:00:00.000000000 -0800
+++ GccShellR33/Library/IA32/LShiftU64.S	2009-09-22 15:37:05.000000000 -0700
@@ -0,0 +1,53 @@
+#------------------------------------------------------------------------------
+#
+# 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:
+#
+#   LShiftU64.asm
+#
+# Abstract:
+#
+#   64-bit left shift function for IA-32
+#
+#------------------------------------------------------------------------------
+
+  ///
+  /// Private worker functions for ASM_PFX()
+  ///
+  #define _CONCATENATE(a, b)  __CONCATENATE(a, b)
+  #define __CONCATENATE(a, b) a ## b
+
+  ///
+  /// The __USER_LABEL_PREFIX__ macro predefined by GNUC represents the prefix
+  /// on symbols in assembly language.
+  ///
+  #define ASM_PFX(name) _CONCATENATE (__USER_LABEL_PREFIX__, name)
+
+.globl ASM_PFX(InternalMathLShiftU64)
+
+#------------------------------------------------------------------------------
+# UINT64
+# EFIAPI
+# InternalMathLShiftU64 (
+#   IN      UINT64                    Operand,
+#   IN      UINTN                     Count
+#   );
+#------------------------------------------------------------------------------
+ASM_PFX(InternalMathLShiftU64):
+    movb    12(%esp), %cl
+    xorl    %eax, %eax
+    movl    4(%esp), %edx
+    testb   $32, %cl
+    cmovz   %edx, %eax
+    cmovz   0x8(%esp), %edx
+    shld    %cl, %eax, %edx
+    shl     %cl, %eax
+    ret
diff --ignore-file-name-case -Naur ShellR33/Library/IA32/math.c GccShellR33/Library/IA32/math.c
--- ShellR33/Library/IA32/math.c	1969-12-31 16:00:00.000000000 -0800
+++ GccShellR33/Library/IA32/math.c	2009-10-10 13:58:07.000000000 -0700
@@ -0,0 +1,267 @@
+/*++
+
+Copyright (c) 2005, 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:
+
+    math.c
+
+Abstract:
+
+
+
+
+Revision History
+
+--*/
+
+#include "EfiShellLib.h"
+
+#if __GNUC__
+
+UINT64
+InternalMathLShiftU64 (
+  IN UINT64   Operand,
+  IN UINTN    Count
+  );
+  
+UINT64
+InternalMathRShiftU64 (
+  IN UINT64   Operand,
+  IN UINTN    Count
+  );
+
+UINT64
+InternalMathMultU64x32 (
+  IN UINT64   Multiplicand,
+  IN UINTN    Multiplier
+  );
+
+UINT64
+InternalMathDivRemU64x32 (
+  IN UINT64   Dividend,
+  IN UINTN    Divisor,
+  OUT UINTN   *Remainder OPTIONAL
+  );
+
+#endif
+
+//
+//
+//
+UINT64
+LShiftU64 (
+  IN UINT64   Operand,
+  IN UINTN    Count
+  )
+/*++
+Routine Description:
+
+  Left shift 64bit by 32bit and get a 64bit result
+
+Arguments:
+
+  Operand - Operand
+  Count   - Shift count
+
+Returns:
+
+--*/
+{
+#if __GNUC__
+  return InternalMathLShiftU64 (Operand, Count);
+#else
+  UINT64  Result;
+  Result = 0;
+
+  _asm
+  {
+    mov ecx, Count
+    cmp ecx, 64
+    jge exit
+
+    mov eax, dword ptr Operand[0]
+    mov edx, dword ptr Operand[4]
+
+    shld edx, eax, cl
+    shl eax, cl
+
+    cmp ecx, 32
+    jc short ls10
+
+    mov edx, eax
+    xor eax, eax
+
+    ls10 :
+    mov dword ptr Result[0], eax
+    mov dword ptr Result[4], edx
+    exit :
+  }
+
+  return Result;
+#endif
+}
+
+UINT64
+RShiftU64 (
+  IN UINT64   Operand,
+  IN UINTN    Count
+  )
+/*++
+Routine Description:
+
+  Right shift 64bit by 32bit and get a 64bit result
+  
+Arguments:
+
+  Operand - Operand
+  Count   - Shift Count
+
+Returns:
+
+--*/
+{
+#if __GNUC__
+  return InternalMathRShiftU64 (Operand, Count);
+#else
+  UINT64  Result;
+  Result = 0;
+
+  _asm
+  {
+    mov ecx, Count
+    cmp ecx, 64
+    jge exit
+
+    mov eax, dword ptr Operand[0]
+    mov edx, dword ptr Operand[4]
+
+    shrd eax, edx, cl
+    shr edx, cl
+
+    cmp ecx, 32
+    jc short rs10
+
+    mov eax, edx
+    xor edx, edx
+
+    rs10 :
+    mov dword ptr Result[0], eax
+    mov dword ptr Result[4], edx
+    exit :
+  }
+
+  return Result;
+#endif
+}
+
+UINT64
+MultU64x32 (
+  IN UINT64   Multiplicand,
+  IN UINTN    Multiplier
+  )
+/*++
+Routine Description:
+
+  Multiple 64bit by 32bit and get a 64bit result
+  
+Arguments:
+
+  Multiplicand - Multiplicand
+  Multiplier   - Multiplier
+
+Returns:
+
+--*/
+{
+#if __GNUC__
+  return InternalMathMultU64x32 (Multiplicand, Multiplier);
+#else
+  UINT64  Result;
+
+  _asm
+  {
+    mov eax, dword ptr Multiplicand[0]
+    mul Multiplier
+    mov dword ptr Result[0], eax
+    mov dword ptr Result[4], edx
+    mov eax, dword ptr Multiplicand[4]
+    mul Multiplier
+    add dword ptr Result[4], eax
+  }
+
+  return Result;
+#endif
+}
+
+UINT64
+DivU64x32 (
+  IN UINT64   Dividend,
+  IN UINTN    Divisor,
+  OUT UINTN   *Remainder OPTIONAL
+  )
+/*++
+Routine Description:
+
+  divide 64bit by 32bit and get a 64bit result
+  N.B. only works for 31bit divisors!!
+
+Arguments:
+
+  Dividend  - The dividend
+  Divisor   - The divisor
+  Remainder - The remainder
+
+Return:
+
+--*/
+{
+#if __GNUC__
+  ASSERT (Divisor != 0);
+  ASSERT ((Divisor >> 31) == 0);
+
+  return InternalMathDivRemU64x32 (Dividend, Divisor, Remainder);
+	
+#else
+  UINT32  Rem;
+  UINT32  bit;
+
+  ASSERT (Divisor != 0);
+  ASSERT ((Divisor >> 31) == 0);
+
+  //
+  // For each bit in the dividend
+  //
+  Rem = 0;
+  for (bit = 0; bit < 64; bit++) {
+    _asm
+    {
+      shl dword ptr Dividend[0], 1    /*  shift rem:dividend left one */
+      rcl dword ptr Dividend[4], 1
+      rcl dword ptr Rem, 1
+
+      mov eax, Rem
+      cmp eax, Divisor                /*  Is Rem >= Divisor? */
+      cmc                             /*  No - do nothing */
+      sbb eax, eax                    /*  Else, */
+      sub dword ptr Dividend[0], eax  /*    set low bit in dividen */
+      and eax, Divisor                /*  and */
+      sub Rem, eax                    /*    subtract divisor */
+    }
+  }
+
+  if (Remainder) {
+    *Remainder = Rem;
+  }
+
+  return Dividend;
+#endif
+}
+
diff --ignore-file-name-case -Naur ShellR33/Library/IA32/MultU64x32.S GccShellR33/Library/IA32/MultU64x32.S
--- ShellR33/Library/IA32/MultU64x32.S	1969-12-31 16:00:00.000000000 -0800
+++ GccShellR33/Library/IA32/MultU64x32.S	2009-09-22 15:37:05.000000000 -0700
@@ -0,0 +1,53 @@
+#------------------------------------------------------------------------------
+#
+# 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:
+#
+#   MultU64x32.asm
+#
+# Abstract:
+#
+#   Calculate the product of a 64-bit integer and a 32-bit integer
+#
+#------------------------------------------------------------------------------
+
+  ///
+  /// Private worker functions for ASM_PFX()
+  ///
+  #define _CONCATENATE(a, b)  __CONCATENATE(a, b)
+  #define __CONCATENATE(a, b) a ## b
+
+  ///
+  /// The __USER_LABEL_PREFIX__ macro predefined by GNUC represents the prefix
+  /// on symbols in assembly language.
+  ///
+  #define ASM_PFX(name) _CONCATENATE (__USER_LABEL_PREFIX__, name)
+
+    .386:
+    .code:
+
+.globl ASM_PFX(InternalMathMultU64x32)
+
+#------------------------------------------------------------------------------
+# UINT64
+# EFIAPI
+# InternalMathMultU64x32 (
+#   IN      UINT64                    Multiplicand,
+#   IN      UINT32                    Multiplier
+#   );
+#------------------------------------------------------------------------------
+ASM_PFX(InternalMathMultU64x32):
+    movl    12(%esp), %ecx
+    movl    %ecx, %eax
+    imull   8(%esp), %ecx
+    mull    0x4(%esp)
+    addl    %ecx, %edx
+    ret
diff --ignore-file-name-case -Naur ShellR33/Library/IA32/RShiftU64.S GccShellR33/Library/IA32/RShiftU64.S
--- ShellR33/Library/IA32/RShiftU64.S	1969-12-31 16:00:00.000000000 -0800
+++ GccShellR33/Library/IA32/RShiftU64.S	2009-09-22 15:37:05.000000000 -0700
@@ -0,0 +1,56 @@
+#------------------------------------------------------------------------------
+#
+# 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:
+#
+#   RShiftU64.asm
+#
+# Abstract:
+#
+#   64-bit logical right shift function for IA-32
+#
+#------------------------------------------------------------------------------
+
+  ///
+  /// Private worker functions for ASM_PFX()
+  ///
+  #define _CONCATENATE(a, b)  __CONCATENATE(a, b)
+  #define __CONCATENATE(a, b) a ## b
+
+  ///
+  /// The __USER_LABEL_PREFIX__ macro predefined by GNUC represents the prefix
+  /// on symbols in assembly language.
+  ///
+  #define ASM_PFX(name) _CONCATENATE (__USER_LABEL_PREFIX__, name)
+
+    .686:
+    .code:
+
+.globl ASM_PFX(InternalMathRShiftU64)
+
+#------------------------------------------------------------------------------
+# UINT64
+# EFIAPI
+# InternalMathRShiftU64 (
+#   IN      UINT64                    Operand,
+#   IN      UINTN                     Count
+#   );
+#------------------------------------------------------------------------------
+ASM_PFX(InternalMathRShiftU64):
+    movb    12(%esp), %cl
+    xorl    %edx, %edx
+    movl    8(%esp), %eax
+    testb   $32, %cl
+    cmovz   %eax, %edx
+    cmovz   0x4(%esp), %eax
+    shrdl   %cl, %edx, %eax
+    shr     %cl, %edx
+    ret
diff --ignore-file-name-case -Naur ShellR33/Library/Init.c GccShellR33/Library/Init.c
--- ShellR33/Library/Init.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/Library/Init.c	2009-09-22 19:19:20.000000000 -0700
@@ -20,7 +20,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 extern EFI_UNICODE_COLLATION_PROTOCOL LibStubUnicodeInterface;
 
diff --ignore-file-name-case -Naur ShellR33/Library/IO.c GccShellR33/Library/IO.c
--- ShellR33/Library/IO.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/Library/IO.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 #define PRINT_STRING_LEN        1024
 #define PRINT_ITEM_BUFFER_LEN   100
@@ -1658,7 +1658,7 @@
         //
         // Adjust the current column and row
         //
-        ConMoveCursorBackward (LineLength, &Column, &Row);
+        ConMoveCursorBackward (LineLength, &Column, (UINTN *)&Row);
       }
       break;
 
@@ -1708,7 +1708,7 @@
         //
         if (StrPos) {
           StrPos -= 1;
-          ConMoveCursorBackward (LineLength, &Column, &Row);
+          ConMoveCursorBackward (LineLength, &Column, (UINTN *)&Row);
         }
         break;
 
@@ -1718,7 +1718,7 @@
         //
         if (StrPos < Len) {
           StrPos += 1;
-          ConMoveCursorForward (LineLength, TotalRow, &Column, &Row);
+          ConMoveCursorForward (LineLength, TotalRow, &Column, (UINTN *)&Row);
         }
         break;
 
@@ -1913,8 +1913,8 @@
   ST->ConOut->QueryMode (
                 ST->ConOut,
                 ST->ConOut->Mode->Mode,
-                &mPrintMode.MaxColumn,
-                &mPrintMode.MaxRow
+                (UINTN *)&mPrintMode.MaxColumn,
+                (UINTN *)&mPrintMode.MaxRow
                 );
 
   mPrintMode.Row = StartRow;
@@ -1928,8 +1928,6 @@
   return mPrintMode.PageBreak;
 }
 
-STATIC
-
 BOOLEAN
 GetOutputPause (
   VOID
diff --ignore-file-name-case -Naur ShellR33/Library/IO.h GccShellR33/Library/IO.h
--- ShellR33/Library/IO.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/IO.h	2009-11-05 13:49:56.000000000 -0800
@@ -157,4 +157,4 @@
   );
 
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/Library/IPF/libsalpal.h GccShellR33/Library/IPF/libsalpal.h
--- ShellR33/Library/IPF/libsalpal.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/IPF/libsalpal.h	2009-11-05 13:49:56.000000000 -0800
@@ -74,4 +74,4 @@
   IN  UINT64    Arg8
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/Library/Lock.c GccShellR33/Library/Lock.c
--- ShellR33/Library/Lock.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/Lock.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 VOID
 InitializeLock (
diff --ignore-file-name-case -Naur ShellR33/Library/Lock.h GccShellR33/Library/Lock.h
--- ShellR33/Library/Lock.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/Lock.h	2009-11-05 13:49:56.000000000 -0800
@@ -45,4 +45,4 @@
   IN FLOCK    *Lock
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/Library/Mem.c GccShellR33/Library/Mem.c
--- ShellR33/Library/Mem.c	2006-06-12 23:18:21.000000000 -0700
+++ GccShellR33/Library/Mem.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 VOID
 SetMem (
diff --ignore-file-name-case -Naur ShellR33/Library/Mem.h GccShellR33/Library/Mem.h
--- ShellR33/Library/Mem.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/Mem.h	2009-11-05 13:49:56.000000000 -0800
@@ -73,4 +73,4 @@
   IN UINTN    Size
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/Library/Misc.c GccShellR33/Library/Misc.c
--- ShellR33/Library/Misc.c	2009-08-13 22:57:02.000000000 -0700
+++ GccShellR33/Library/Misc.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 #if (PLATFORM == NT32)
 #define LOCAL_EFI_WIN_NT_THUNK_PROTOCOL_GUID \
@@ -51,7 +51,309 @@
 
 #define DEFAULT_FORM_BUFFER_SIZE  0xFFFF
 
-STATIC EFI_SHELL_ENVIRONMENT  *mShellEnv = NULL;
+struct {
+  EFI_GUID  *Guid;
+  CHAR16    *GuidName;
+}
+KnownGuids[] = {
+  //
+  // Loaded Image
+  //
+  &gEfiLoadedImageProtocolGuid,
+  L"Image",
+  //
+  // Device Path
+  //
+  &gEfiDevicePathProtocolGuid,
+  L"Dpath",
+  &gEfiLoadedImageDevicePathProtocolGuid,
+  L"ImageDPath",
+  &gEfiDevicePathUtilitiesProtocolGuid,
+  L"DpathUtil",
+  &gEfiDevicePathToTextProtocolGuid,
+  L"DpathToText",
+  &gEfiDevicePathFromTextProtocolGuid,
+  L"DpathFromText",
+  &PcAnsiProtocol,
+  L"PcAnsi",
+  &Vt100Protocol,
+  L"Vt100",
+  &Vt100PlusProtocol,
+  L"Vt100+",
+  &VtUtf8Protocol,
+  L"VtUtf8",
+  //
+  // Driver Model
+  //
+  &gEfiDriverBindingProtocolGuid,
+  L"DriverBinding",
+  &gEfiPlatformDriverOverrideProtocolGuid,
+  L"PlatformOverride",
+  &gEfiBusSpecificDriverOverrideProtocolGuid,
+  L"BusSpecificDriverOverride",
+  &gEfiDriverDiagnosticsProtocolGuid,
+  L"Diagnostics",
+  &gEfiDriverDiagnostics2ProtocolGuid,
+  L"Diagnostics2",
+  &gEfiComponentNameProtocolGuid,
+  L"ComponentName",
+  &gEfiComponentName2ProtocolGuid,
+  L"ComponentName2",
+  &gEfiPlatformToDriverConfigurationProtocolGuid,
+  L"PlatformDriverConfig",
+  &gEfiDriverSupportedEfiVersionProtocolGuid,
+  L"DriverEFIVersion",
+  //
+  // Console Support
+  //
+  &gEfiSimpleTextInputExProtocolGuid,
+  L"TxtinEx",
+  &gEfiSimpleTextInProtocolGuid,
+  L"Txtin",
+  &gEfiSimpleTextOutProtocolGuid,
+  L"Txtout",
+  &gEfiSimplePointerProtocolGuid,
+  L"SimplePointer",
+  &gEfiAbsolutePointerProtocolGuid,
+  L"AbsolutePointer",
+  &gEfiSerialIoProtocolGuid,
+  L"SerialIo",
+  &gEfiGraphicsOutputProtocolGuid,
+  L"GraphicsOutput",
+  &gEfiEdidDiscoveredProtocolGuid,
+  L"EdidDiscovered",
+  &gEfiEdidActiveProtocolGuid,
+  L"EdidActive",
+  &gEfiEdidOverrideProtocolGuid,
+  L"EdidOverride",
+  &gEfiConsoleInDeviceGuid,
+  L"ConIn",
+  &gEfiConsoleOutDeviceGuid,
+  L"ConOut",
+  &gEfiStandardErrorDeviceGuid,
+  L"StdErr",
+  //
+  // Media Access
+  //
+  &gEfiLoadFileProtocolGuid,
+  L"Load",
+  &gEfiLoadFile2ProtocolGuid,
+  L"Load2",
+  &gEfiSimpleFileSystemProtocolGuid,
+  L"Fs",
+  &gEfiFileInfoGuid,
+  L"GenFileInfo",
+  &gEfiFileSystemInfoGuid,
+  L"FileSysInfo",
+  &gEfiTapeIoProtocolGuid,
+  L"TapeIo",
+  &gEfiDiskIoProtocolGuid,
+  L"DiskIo",
+  &gEfiBlockIoProtocolGuid,
+  L"BlkIo",
+  &gEfiUnicodeCollationProtocolGuid,
+  L"UnicodeCollation",
+  &gEfiUnicodeCollation2ProtocolGuid,
+  L"UnicodeCollation2",
+  //
+  // PCI Bus Support
+  //
+  &gEfiPciRootBridgeIoProtocolGuid,
+  L"PciRootBridgeIo",
+  &gEfiPciIoProtocolGuid,
+  L"PciIo",
+  //
+  // SCSI Bus Support
+  //
+  &gEfiScsiPassThruProtocolGuid,
+  L"ScsiPassThru",
+  &gEfiScsiIoProtocolGuid,
+  L"ScsiIo",
+  &gEfiExtScsiPassThruProtocolGuid,
+  L"ExtScsiPassThru",
+  //
+  // iSCSI
+  //
+  &gEfiIScsiInitiatorNameProtocolGuid,
+  L"IScsiInitName",
+  //
+  // USB Support
+  //
+  &gEfiUsbIoProtocolGuid,
+  L"UsbIo",
+  &gEfiUsb2HcProtocolGuid,
+  L"UsbHc",
+  &gEfiUsb2HcProtocolGuid,
+  L"UsbHc2", 
+  //
+  // Debugger Support
+  //
+  &gEfiDebugSupportProtocolGuid,
+  L"DebugSupport",
+  &gEfiDebugPortDevicePathGuid,
+  L"DebugPort",
+  //
+  // Decompression Algorithm
+  //
+  &gEfiDecompressProtocolGuid,
+  L"Decompress",
+  //
+  // ACPI
+  //
+  &gEfiAcpiTableProtocolGuid,
+  L"AcpiTable",
+  // EBC
+  //
+  &gEfiEbcProtocolGuid,
+  L"EbcInterp",
+  //
+  // SNP, PXE, BIS
+  //
+  &gEfiSimpleNetworkProtocolGuid,
+  L"Net",
+  &gEfiNetworkInterfaceIdentifierProtocolGuid,
+  L"Nii",
+  &gEfiPxeBaseCodeProtocolGuid,
+  L"Pxebc",
+  &gEfiPxeBaseCodeCallbackProtocolGuid,
+  L"PxebcCallback",
+  &gEfiBisProtocolGuid,
+  L"Bis",
+  //
+  // Managed Network
+  //
+  &gEfiManagedNetworkServiceBindingProtocolGuid,
+  L"MNPSb",
+  &gEfiManagedNetworkProtocolGuid,
+  L"MNP",
+  //
+  // ARP, DHCPv4
+  //
+  &gEfiArpServiceBindingProtocolGuid,
+  L"ARPSb",
+  &gEfiArpProtocolGuid,
+  L"ARP",
+  &gEfiDhcp4ServiceBindingProtocolGuid,
+  L"DHCPv4Sb",
+  &gEfiDhcp4ProtocolGuid,
+  L"DHCPv4",
+  //
+  // TCPv4, IPv4 and Configuration
+  //
+  &gEfiTcp4ServiceBindingProtocolGuid,
+  L"TCPv4Sb",
+  &gEfiTcp4ProtocolGuid,
+  L"TCPv4",
+  &gEfiIp4ServiceBindingProtocolGuid,
+  L"IPv4Sb",
+  &gEfiIp4ProtocolGuid,
+  L"IPv4",
+  &gEfiIp4ConfigProtocolGuid,
+  L"IPv4Config",
+  //
+  // UDPv4, MTFTPv4
+  //
+  &gEfiUdp4ServiceBindingProtocolGuid,
+  L"UDPv4Sb",
+  &gEfiUdp4ProtocolGuid,
+  L"UDPv4",
+  &gEfiMtftp4ServiceBindingProtocolGuid,
+  L"MTFTPv4Sb",
+  &gEfiMtftp4ProtocolGuid,
+  L"MTFTPv4",
+  //
+  // Security
+  //
+  &gEfiAuthenticationInfoProtocolGuid,
+  L"AuthInfo",
+  &gEfiHashServiceBindingProtocolGuid,
+  L"HashSb",
+  &gEfiHashProtocolGuid,
+  L"Hash",
+  //
+  // HII 
+  //
+#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
+  &gEfiHiiFontProtocolGuid,
+  L"HiiFont",
+  &gEfiHiiStringProtocolGuid,
+  L"HiiString",
+  &gEfiHiiImageProtocolGuid,
+  L"HiiImage",
+  &gEfiHiiDatabaseProtocolGuid,
+  L"HiiDatabase",
+  //
+  // HII Configuration Processing and Browser
+  //
+  &gEfiHiiConfigRoutingProtocolGuid,
+  L"HiiConfRouting",
+  &gEfiHiiConfigAccessProtocolGuid,
+  L"HiiConfAccess",
+  &gEfiFormBrowser2ProtocolGuid,
+  L"FormBrowser2",
+#else
+  &gEfiHiiProtocolGuid,
+  L"Hii",
+  &gEfiFormBrowserProtocolGuid,
+  L"FormBrowser",
+  &gEfiFormCallbackProtocolGuid,
+  L"FormCallback",
+#endif
+  //
+  // Shell Specific
+  //
+  &NullGuid,
+  L"G0",
+  &ShellInterfaceProtocol,
+  L"ShellInt",
+  //
+  // Deprecated
+  //
+  &gEfiDeviceIoProtocolGuid,
+  L"DevIo",
+  &gEfiTcpProtocolGuid,
+  L"Tcp",
+  &gEfiUgaDrawProtocolGuid,
+  L"UgaDraw",
+  &gEfiUgaIoProtocolGuid,
+  L"UgaIo",
+  &gEfiGlobalVariableGuid,
+  L"Efi",
+  &gEfiFileSystemInfoGuid,
+  L"FileSysInfo",
+  &gEfiPartTypeSystemPartGuid,
+  L"ESP",
+  &gEfiPartTypeLegacyMbrGuid,
+  L"GPT MBR",
+  &gEfiDriverConfigurationProtocolGuid,
+  L"Configuration",
+  &gEfiDriverConfiguration2ProtocolGuid,
+  L"Configuration2",
+  &gEfiIsaIoProtocolGuid,
+  L"IsaIo",
+  &gEfiIsaAcpiProtocolGuid,
+  L"IsaAcpi",
+  //
+  // NT32
+  //
+#if (PLATFORM == NT32)
+  &WinNtThunkProtocolGuid,
+  L"WinNtThunk",
+  &WinNtIoProtocolGuid,
+  L"WinNtDriverIo",
+  &WinNtSerialPortGuid,
+  L"SerialPrivate",
+#endif
+  //
+  // Misc
+  //
+  &gEfiVariableStoreProtocolGuid,
+  L"varstore",
+  &UnknownDeviceGuid,
+  L"Unknown Device",
+
+  NULL
+};
 
 STATIC CHAR8  Hex[] = {
   '0',
@@ -336,23 +638,18 @@
 
 --*/
 {
-  EFI_STATUS  Status;
-  CHAR16      *GuidName;
+  UINTN Index;
 
   ASSERT (Guid != NULL);
   ASSERT (Buffer != NULL);
 
-  if (mShellEnv == NULL) {
-    Status = LibLocateProtocol (&ShellEnvProtocol, &mShellEnv);
-    if (EFI_ERROR (Status)) {
-      mShellEnv = NULL;
-    }
-  }
-  if (mShellEnv != NULL) {
-    GuidName = mShellEnv->GetProt (Guid, FALSE);
-    if (GuidName != NULL) {
-      SPrint (Buffer, 0, L"%s", GuidName);
-      return;
+  //
+  // Else, (for now) use additional internal function for mapping guids
+  //
+  for (Index = 0; KnownGuids[Index].Guid; Index++) {
+    if (CompareGuid (Guid, KnownGuids[Index].Guid) == 0) {
+      SPrint (Buffer, 0, KnownGuids[Index].GuidName);
+      return ;
     }
   }
   //
@@ -1166,7 +1463,7 @@
       Status = BS->HandleProtocol (
                     Image->DeviceHandle,
                     &gEfiFirmwareVolumeProtocolGuid,
-                    &FV
+                    (VOID **)&FV
                     );
       if (!EFI_ERROR (Status)) {
         Status = FV->ReadSection (
@@ -1187,7 +1484,7 @@
         Status = BS->HandleProtocol (
                       Image->DeviceHandle,
                       &gEfiFirmwareVolume2ProtocolGuid,
-                      &FV2
+                      (VOID **)&FV2
                       );
         if (!EFI_ERROR (Status)) {
           Status = FV2->ReadSection (
diff --ignore-file-name-case -Naur ShellR33/Library/Perf.c GccShellR33/Library/Perf.c
--- ShellR33/Library/Perf.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/Perf.c	2009-09-22 19:19:20.000000000 -0700
@@ -19,7 +19,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 #include EFI_PROTOCOL_DEFINITION (Performance)
 
diff --ignore-file-name-case -Naur ShellR33/Library/RtData.c GccShellR33/Library/RtData.c
--- ShellR33/Library/RtData.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/RtData.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 //
 // RT - pointer to the runtime table
diff --ignore-file-name-case -Naur ShellR33/Library/ShellDebug.c GccShellR33/Library/ShellDebug.c
--- ShellR33/Library/ShellDebug.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/Library/ShellDebug.c	2009-09-22 16:16:30.000000000 -0700
@@ -19,7 +19,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 #include EFI_PROTOCOL_DEFINITION (DebugAssert)
 
 EFI_DEBUG_ASSERT_PROTOCOL *mDebugAssert = NULL;
@@ -66,6 +66,7 @@
   }
 }
 
+
 VOID
 EfiDebugPrint (
   IN  UINTN     ErrorLevel,
diff --ignore-file-name-case -Naur ShellR33/Library/ShellEnvInt.c GccShellR33/Library/ShellEnvInt.c
--- ShellR33/Library/ShellEnvInt.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/Library/ShellEnvInt.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 EFI_STATUS
 ShellExecute (
diff --ignore-file-name-case -Naur ShellR33/Library/ShellEnvInt.h GccShellR33/Library/ShellEnvInt.h
--- ShellR33/Library/ShellEnvInt.h	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/Library/ShellEnvInt.h	2009-11-05 13:49:56.000000000 -0800
@@ -196,4 +196,4 @@
   VOID
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/Library/Str.c GccShellR33/Library/Str.c
--- ShellR33/Library/Str.c	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/Library/Str.c	2009-09-22 19:19:20.000000000 -0700
@@ -22,7 +22,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 INTN
 StrCmp (
@@ -421,7 +421,7 @@
         return (UINTN) -1;
       }
 
-      u = u << 4 | c - (c >= 'A' ? 'A' - 10 : '0');
+      u = (u << 4) | (c - (c >= 'A' ? 'A' - 10 : '0'));
     } else {
       break;
     }
@@ -472,7 +472,7 @@
   c = *(str++);
   while (c) {
     if (c >= '0' && c <= '9') {
-      if (u > m || u == m && c - '0' > (INTN) n) {
+      if ((u > m) || ((u == m) && (c - '0' > (INTN) n))) {
         return (UINTN) -1;
       }
 
diff --ignore-file-name-case -Naur ShellR33/Library/VarCheck.c GccShellR33/Library/VarCheck.c
--- ShellR33/Library/VarCheck.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/VarCheck.c	2009-09-22 19:19:20.000000000 -0700
@@ -21,7 +21,7 @@
 
 --*/
 
-#include "EfiShelllib.h"
+#include "EfiShellLib.h"
 
 VOID
 LibCheckVarFreeVarList (
diff --ignore-file-name-case -Naur ShellR33/Library/VarCheck.h GccShellR33/Library/VarCheck.h
--- ShellR33/Library/VarCheck.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/Library/VarCheck.h	2009-09-22 15:37:05.000000000 -0700
@@ -41,7 +41,7 @@
   ARG_PARTIALLY_QUOTED  = 0x2,
   ARG_FIRST_HALF_QUOTED = 0x4,
   ARG_FIRST_CHAR_IS_ESC = 0x8
-};
+} SHELL_I_NEED_A_NAME;
 
 typedef struct {
   CHAR16                    *FlagStr;
diff --ignore-file-name-case -Naur ShellR33/load/load.inf GccShellR33/load/load.inf
--- ShellR33/load/load.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/load/load.inf	2009-09-22 15:37:05.000000000 -0700
@@ -39,23 +39,23 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   LoadStrings.uni
   load.c
     
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/LoadPciRom/LoadPciRom.c GccShellR33/LoadPciRom/LoadPciRom.c
--- ShellR33/LoadPciRom/LoadPciRom.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/LoadPciRom/LoadPciRom.c	2009-11-05 13:49:56.000000000 -0800
@@ -24,7 +24,7 @@
 
 #include "EfiShellLib.h"
 #include "LoadPciRom.h"
-#include "Pci22.h"
+#include "pci22.h"
 
 extern UINT8    STRING_ARRAY_NAME[];
 
@@ -56,7 +56,7 @@
   );
 
 EFI_HANDLE      gMyImageHandle;
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiLoadPciRomGuid = EFI_LOADPCIROM_GUID;
 SHELL_VAR_CHECK_ITEM    LPRCheckList[] = {
   {
@@ -377,7 +377,7 @@
         }
 
         if (EfiRomHeader->CompressionType == EFI_PCI_EXPANSION_ROM_HEADER_COMPRESSED) {
-          Status = BS->LocateProtocol (&gEfiDecompressProtocolGuid, NULL, &Decompress);
+          Status = BS->LocateProtocol (&gEfiDecompressProtocolGuid, NULL, (VOID **)&Decompress);
           if (EFI_ERROR (Status)) {
             PrintToken (STRING_TOKEN (STR_LOADPCIROM_DECOMP_NOT_FOUND), HiiHandle);
             SkipImage = TRUE;
diff --ignore-file-name-case -Naur ShellR33/LoadPciRom/LoadPciRom.inf GccShellR33/LoadPciRom/LoadPciRom.inf
--- ShellR33/LoadPciRom/LoadPciRom.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/LoadPciRom/LoadPciRom.inf	2009-09-22 15:37:05.000000000 -0700
@@ -41,23 +41,23 @@
 
 [sources.common]
   LoadPciRomStrings.uni
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   LoadPciRom.c
   LoadPciRom.h  
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/ls/ls.c GccShellR33/ls/ls.c
--- ShellR33/ls/ls.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/ls/ls.c	2009-09-22 15:37:05.000000000 -0700
@@ -917,7 +917,7 @@
 
   if ((IsMatch && mIgnoreAttribute) ||
       (IsMatch && !mAttributes && !(Info->Attribute & EFI_FILE_HIDDEN) && !(Info->Attribute & EFI_FILE_SYSTEM)) ||
-      IsMatch &&
+      (IsMatch &&
       mAttributes &&
       (
         (mAttribA ? (Info->Attribute & EFI_FILE_ARCHIVE ? TRUE : FALSE) : TRUE) &&
@@ -925,7 +925,7 @@
       (mAttribR ? (Info->Attribute & EFI_FILE_READ_ONLY ? TRUE : FALSE) : TRUE) &&
       (mAttribS ? (Info->Attribute & EFI_FILE_SYSTEM ? TRUE : FALSE) : TRUE) &&
       (mAttribD ? (Info->Attribute & EFI_FILE_DIRECTORY ? TRUE : FALSE) : TRUE)
-    )
+    ))
       ) {
     IsMatch = TRUE;
   } else {
diff --ignore-file-name-case -Naur ShellR33/ls/ls.h GccShellR33/ls/ls.h
--- ShellR33/ls/ls.h	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/ls/ls.h	2009-11-05 13:49:56.000000000 -0800
@@ -91,4 +91,4 @@
   IN UINT16               VHlpToken
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/ls/ls.inf GccShellR33/ls/ls.inf
--- ShellR33/ls/ls.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/ls/ls.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    LsStrings.uni        
    ls.c                 
    ls.h    
                                          
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/mem/debug.h GccShellR33/mem/debug.h
--- ShellR33/mem/debug.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/mem/debug.h	2009-09-22 15:37:05.000000000 -0700
@@ -26,7 +26,7 @@
 #include "EfiShellLib.h"
 #include EFI_PROTOCOL_DEFINITION (BlockIo)
 
-#define EFI_PARTITION_SIGNATURE       0x5053595320494249
+#define EFI_PARTITION_SIGNATURE       0x5053595320494249ULL
 typedef struct _EFI_PARTITION_HEADER {
   EFI_TABLE_HEADER  Hdr;
   UINT32            DirectoryAllocationNumber;
diff --ignore-file-name-case -Naur ShellR33/mem/efidump.c GccShellR33/mem/efidump.c
--- ShellR33/mem/efidump.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/mem/efidump.c	2009-09-22 19:19:20.000000000 -0700
@@ -24,7 +24,7 @@
 --*/
 
 #include "debug.h"
-#include "Efipart.h"
+#include "EfiPart.h"
 #include "EfiShellLib.h"
 
 #include STRING_DEFINES_FILE
@@ -352,34 +352,34 @@
     PrintToken (STRING_TOKEN (STR_DEBUG_STD_ERROR_ON), HiiMemHandle, LibDevicePathToStr (DevicePath));
   }
 
-  PrintToken (STRING_TOKEN (STR_DEBUG_RUNTIME_SERVICES), HiiMemHandle, (UINT64) Tbl.Sys->RuntimeServices);
-  PrintToken (STRING_TOKEN (STR_DEBUG_BOOT_SERVICES), HiiMemHandle, (UINT64) Tbl.Sys->BootServices);
+  PrintToken (STRING_TOKEN (STR_DEBUG_RUNTIME_SERVICES), HiiMemHandle, (UINT64)(UINTN) Tbl.Sys->RuntimeServices);
+  PrintToken (STRING_TOKEN (STR_DEBUG_BOOT_SERVICES), HiiMemHandle, (UINT64)(UINTN) Tbl.Sys->BootServices);
 
   EFI64_CODE (
     Status = LibGetSystemConfigurationTable(&gEfiSalSystemTableGuid, &SalSystemTable);
     if (!EFI_ERROR(Status)) {
-      PrintToken (STRING_TOKEN(STR_DEBUG_SAL_SYSTEM_TABLE), HiiMemHandle, (UINT64)SalSystemTable);
+      PrintToken (STRING_TOKEN(STR_DEBUG_SAL_SYSTEM_TABLE), HiiMemHandle, (UINT64)(UINTN)SalSystemTable);
     }
   )
   
   Status = LibGetSystemConfigurationTable (&gEfiAcpiTableGuid, &AcpiTable);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_ACPI_TABLE), HiiMemHandle, (UINT64) AcpiTable);
+    PrintToken (STRING_TOKEN (STR_DEBUG_ACPI_TABLE), HiiMemHandle, (UINT64)(UINTN)AcpiTable);
   }
 
   Status = LibGetSystemConfigurationTable (&gEfiAcpi20TableGuid, &Acpi20Table);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_APCI_2_TABLE), HiiMemHandle, (UINT64) Acpi20Table);
+    PrintToken (STRING_TOKEN (STR_DEBUG_APCI_2_TABLE), HiiMemHandle, (UINT64)(UINTN)Acpi20Table);
   }
 
   Status = LibGetSystemConfigurationTable (&gEfiMpsTableGuid, &MpsTable);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_MPS_TABLE), HiiMemHandle, (UINT64) MpsTable);
+    PrintToken (STRING_TOKEN (STR_DEBUG_MPS_TABLE), HiiMemHandle, (UINT64)(UINTN)MpsTable);
   }
 
   Status = LibGetSystemConfigurationTable (&gEfiSmbiosTableGuid, &SMBIOSTable);
   if (!EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_DEBUG_SMBIOS_TABLE), HiiMemHandle, (UINT64) SMBIOSTable);
+    PrintToken (STRING_TOKEN (STR_DEBUG_SMBIOS_TABLE), HiiMemHandle, (UINT64)(UINTN)SMBIOSTable);
   }
 }
 
diff --ignore-file-name-case -Naur ShellR33/mem/mem.inf GccShellR33/mem/mem.inf
--- ShellR33/mem/mem.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/mem/mem.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,7 +25,7 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   MemStrings.uni
   DebugStrings.uni  
   mm.c
@@ -34,17 +34,17 @@
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/mem/MemCommonPart.c GccShellR33/mem/MemCommonPart.c
--- ShellR33/mem/MemCommonPart.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/mem/MemCommonPart.c	2009-09-22 15:37:05.000000000 -0700
@@ -149,7 +149,7 @@
     return EFI_SUCCESS;
   }
 
-  Address = (AddressStr) ? Xtoi (AddressStr) : (UINT64) SystemTable;
+  Address = (AddressStr) ? Xtoi (AddressStr) : (UINT64)(UINTN)SystemTable;
   Size    = (SizeStr) ? Xtoi (SizeStr) : 512;
 
   //
@@ -157,7 +157,7 @@
   //
   PrintToken (STRING_TOKEN (STR_MEM_MEMORY_ADDR), HiiMemHandle, 2 * sizeof (UINTN), Address, Size);
   if (MMIo) {
-    Status = BS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, &PciRootBridgeIo);
+    Status = BS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, (VOID **)&PciRootBridgeIo);
     if (EFI_ERROR (Status)) {
       PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_LOC_PROT_ERR_EX), HiiMemHandle, L"mem", L"PciRootBridgeIo");
       return Status;
@@ -233,7 +233,7 @@
   MMIo                  = FALSE;
   AddressStr            = NULL;
   SizeStr               = NULL;
-  Address               = (UINT64) SystemTable;
+  Address               = (UINT64)(UINTN) SystemTable;
   Size                  = 512;
   RetCode               = LibCheckVariables (SI, MemCheckList, &ChkPck, &Useful);
   if (VarCheckOk != RetCode) {
@@ -312,7 +312,7 @@
   //
   PrintToken (STRING_TOKEN (STR_MEM_NEW_MEMORY_ADDR), HiiMemHandle, 2 * sizeof (UINTN), Address, Size);
   if (MMIo) {
-    Status = BS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, &PciRootBridgeIo);
+    Status = BS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, (VOID **)&PciRootBridgeIo);
     if (EFI_ERROR (Status)) {
       PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_LOC_PROT_ERR_EX), HiiMemHandle, L"mem", L"PciRootBridgeIo");
       return Status;
diff --ignore-file-name-case -Naur ShellR33/mem/MemCommonPart.h GccShellR33/mem/MemCommonPart.h
--- ShellR33/mem/MemCommonPart.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/mem/MemCommonPart.h	2009-11-05 13:49:56.000000000 -0800
@@ -62,4 +62,4 @@
   IN  EFI_BLOCK_IO_PROTOCOL   *BlkIo
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/memmap/memmap.c GccShellR33/memmap/memmap.c
--- ShellR33/memmap/memmap.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/memmap/memmap.c	2009-11-05 13:49:56.000000000 -0800
@@ -35,7 +35,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiMemmapGuid = EFI_MEMMAP_GUID;
 SHELL_VAR_CHECK_ITEM    MemmapCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/memmap/memmap.inf GccShellR33/memmap/memmap.inf
--- ShellR33/memmap/memmap.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/memmap/memmap.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,7 +40,7 @@
 
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   memmapStrings.uni
   memmap.c
   memmap.h
@@ -48,17 +48,17 @@
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/mkdir/mkdir.c GccShellR33/mkdir/mkdir.c
--- ShellR33/mkdir/mkdir.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/mkdir/mkdir.c	2009-11-05 13:49:56.000000000 -0800
@@ -49,7 +49,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiMkdirGuid = EFI_MKDIR_GUID;
 SHELL_VAR_CHECK_ITEM    MkdirCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/mkdir/mkdir.h GccShellR33/mkdir/mkdir.h
--- ShellR33/mkdir/mkdir.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/mkdir/mkdir.h	2009-11-05 13:49:56.000000000 -0800
@@ -29,4 +29,4 @@
     0x75ecb57f, 0x4264, 0x49d2, 0x98, 0xe6, 0x39, 0x1a, 0x32, 0x17, 0x9d, 0xf2 \
   }
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/mkdir/mkdir.inf GccShellR33/mkdir/mkdir.inf
--- ShellR33/mkdir/mkdir.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/mkdir/mkdir.inf	2009-09-22 15:37:05.000000000 -0700
@@ -41,23 +41,23 @@
 
 [sources.common]
   MkdirStrings.uni
-  ..\ShCommonStrings.uni     
+  ../ShCommonStrings.uni     
   mkdir.c              
   mkdir.h              
  
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/mm/mm.c GccShellR33/mm/mm.c
--- ShellR33/mm/mm.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/mm/mm.c	2009-11-05 13:49:56.000000000 -0800
@@ -73,7 +73,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE HiiHandle;
+static EFI_HII_HANDLE HiiHandle;
 EFI_GUID EfiIomodGuid = EFI_IOMOD_GUID;
 SHELL_VAR_CHECK_ITEM    IomodCheckList[] = {
   {
@@ -138,7 +138,7 @@
   }
 };
 
-UINT64 MaxNum[9]      = { 0xff, 0xffff, 0xffffffff, 0xffffffffffffffff };
+UINT64 MaxNum[9]      = { 0xff, 0xffff, 0xffffffff, 0xffffffffffffffffULL };
 
 EFI_BOOTSHELL_CODE(
   EFI_APPLICATION_ENTRY_POINT(DumpIoModify)
@@ -469,7 +469,7 @@
     //
     if (AccessType == EfiPciEConfig) {
       SegmentNumber = (UINT32) RShiftU64 (Address, 36) & 0xff;
-      Address      &= 0xfffffffff;
+      Address      &= 0xfffffffffULL;
     } else {
       if (AccessType == EfiPciConfig) {
         SegmentNumber = (UINT32) RShiftU64 (Address, 32) & 0xff;
@@ -750,7 +750,7 @@
     }
 
     if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F')) {
-      u     = u << 4 | c - (c >= 'A' ? 'A' - 10 : '0');
+      u     = (u << 4) | (c - (c >= 'A' ? 'A' - 10 : '0'));
 
       Find  = TRUE;
     } else {
diff --ignore-file-name-case -Naur ShellR33/mm/mm.inf GccShellR33/mm/mm.inf
--- ShellR33/mm/mm.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/mm/mm.inf	2009-09-22 15:37:05.000000000 -0700
@@ -41,23 +41,23 @@
 
 [sources.common]
   MmStrings.uni
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   mm.c
   mm.h
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/mode/mode.inf GccShellR33/mode/mode.inf
--- ShellR33/mode/mode.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/mode/mode.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   ModeStrings.uni
   mode.c
   mode.h
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/mount/mount.c GccShellR33/mount/mount.c
--- ShellR33/mount/mount.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/mount/mount.c	2009-11-05 13:49:56.000000000 -0800
@@ -36,7 +36,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiMountGuid = EFI_MOUNT_GUID;
 SHELL_VAR_CHECK_ITEM      MountCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/mount/mount.inf GccShellR33/mount/mount.inf
--- ShellR33/mount/mount.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/mount/mount.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   MountStrings.uni
   mount.c
   mount.h
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/mv/mv.c GccShellR33/mv/mv.c
--- ShellR33/mv/mv.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/mv/mv.c	2009-11-05 13:49:56.000000000 -0800
@@ -36,7 +36,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiMvGuid = EFI_MV_GUID;
 SHELL_VAR_CHECK_ITEM      MvCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/mv/mv.h GccShellR33/mv/mv.h
--- ShellR33/mv/mv.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/mv/mv.h	2009-11-05 13:49:56.000000000 -0800
@@ -33,4 +33,4 @@
 
 #define EFI_FILE_STRING_SIZE  260
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/mv/mv.inf GccShellR33/mv/mv.inf
--- ShellR33/mv/mv.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/mv/mv.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    MvStrings.uni        
    mv.c                 
    mv.h                 
                                           
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/newshell/DebugAssert.c GccShellR33/newshell/DebugAssert.c
--- ShellR33/newshell/DebugAssert.c	1969-12-31 16:00:00.000000000 -0800
+++ GccShellR33/newshell/DebugAssert.c	2009-11-09 15:51:54.000000000 -0800
@@ -0,0 +1,248 @@
+/*++
+
+Copyright (c) 2004, 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:
+
+  DebugAssert.c
+
+Abstract:
+
+  Produce EfiDebugAssertProtocol to enable EfiUtilityLib to function.
+  The EfiUtilityLib is used by the EFI shell!
+
+--*/
+#include "nshell.h"
+#include EFI_PROTOCOL_DEFINITION (DebugAssert)
+
+
+UINTN gRtErrorLevel = 0; 
+
+EFI_STATUS
+EFIAPI
+ShellDebugAssert (
+  IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
+  IN CHAR8                              *FileName,
+  IN INTN                               LineNumber,
+  IN CHAR8                              *Description
+  );
+
+EFI_STATUS
+EFIAPI
+ShellDebugPrint (
+  IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
+  IN UINTN                              ErrorLevel,
+  IN CHAR8                              *Format,
+  IN VA_LIST                            Marker
+  );
+
+EFI_STATUS
+EFIAPI
+ShellPostCode (
+  IN EFI_DEBUG_ASSERT_PROTOCOL          * This,
+  IN  UINT16                            PostCode,
+  IN  CHAR8                             *PostCodeString OPTIONAL
+  );
+
+EFI_STATUS
+EFIAPI
+ShellGetErrorLevel (
+  IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
+  IN  UINTN                             *ErrorLevel
+  );
+
+EFI_STATUS
+EFIAPI
+ShellSetErrorLevel (
+  IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
+  IN  UINTN                             ErrorLevel
+  );
+
+//
+// Protocol instance, there can be only one.
+//
+EFI_HANDLE                mHandle = NULL;
+EFI_DEBUG_ASSERT_PROTOCOL mDebugAssertProtocol = {
+  ShellDebugAssert,
+  ShellDebugPrint,
+  ShellPostCode,
+  ShellGetErrorLevel,
+  ShellSetErrorLevel
+};
+
+//
+// Function implementations
+//
+EFI_STATUS
+EFIAPI
+ShellDebugAssert (
+  IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
+  IN CHAR8                              *FileName,
+  IN INTN                               LineNumber,
+  IN CHAR8                              *Description
+  )
+/*++
+
+Routine Description:
+
+  Worker function for ASSERT (). If Error Logging hub is loaded log ASSERT
+  information. If Error Logging hub is not loaded EFI_BREAKPOINT ().
+  
+Arguments:
+
+  This        - Protocol instance.
+  FileName    - File name of failing routine.
+  LineNumber  - Line number of failing ASSERT().
+  Description - Description, usually the assertion,
+
+Returns:
+
+  EFI_SUCCESS   The function always completes successfully.
+
+--*/
+{
+  Print (L"\nASSERT (%a): %a:%d\n", Description, FileName, LineNumber);
+
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
+ShellDebugPrint (
+  IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
+  IN UINTN                              ErrorLevel,
+  IN CHAR8                              *Format,
+  IN VA_LIST                            Marker
+  )
+/*++
+
+Routine Description:
+
+  Worker function for DEBUG (). If Error Logging hub is loaded log ASSERT
+  information. If Error Logging hub is not loaded do nothing.
+  
+Arguments:
+
+  This       - Protocol Instance.
+  ErrorLevel - If error level is set do the debug print.
+  Format     - String to use for the print, followed by Print arguments.
+
+Returns:
+
+  EFI_SUCCESS   The function always completes successfully.
+
+--*/
+{
+  CHAR16  Buffer[180];
+  CHAR16  UnicodeFormat[180];
+  UINTN   Index;
+  
+  if (!(gRtErrorLevel & ErrorLevel)) {
+    return EFI_SUCCESS;
+  }
+  
+  for (Index = 0; Format[Index] != '\0'; Index++) {
+    UnicodeFormat[Index] = (CHAR16)Format[Index];
+  }
+  Format[Index] = '\0';
+  
+  VSPrint (Buffer, sizeof (Buffer), UnicodeFormat, Marker);
+  Print (Buffer);
+
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
+ShellPostCode (
+  IN EFI_DEBUG_ASSERT_PROTOCOL          * This,
+  IN  UINT16                            PostCode,
+  IN  CHAR8                             *PostCodeString OPTIONAL
+  )
+/*++
+
+Routine Description:
+
+  Write the code to IO ports 80 and 81.
+
+Arguments:
+
+  This            - Protocol Instance.
+  PostCode        - Code to write
+  PostCodeString  - String, currently ignored.
+
+Returns:
+
+  EFI_SUCCESS   The function always completes successfully.
+
+--*/
+{
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
+ShellGetErrorLevel (
+  IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
+  IN  UINTN                             *ErrorLevel
+  )
+{
+  *ErrorLevel = gRtErrorLevel;
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+EFIAPI
+ShellSetErrorLevel (
+  IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
+  IN  UINTN                             ErrorLevel
+  )
+{
+  gRtErrorLevel = ErrorLevel;
+  return EFI_SUCCESS;
+}
+
+EFI_STATUS
+InstallShellDebugAssert (
+  VOID
+  )
+/*++
+
+Routine Description:
+
+  Install the status code debug assert protocol
+
+Arguments:
+
+  None
+
+Returns:
+
+  Results of call to InstallProtocolInterface.
+
+--*/
+{
+  DEBUG_CODE (
+    EFI_STATUS  Status;
+    VOID        *Interface;
+    
+    Status = BS->LocateProtocol (&gEfiDebugAssertProtocolGuid, NULL, &Interface);
+    if (EFI_ERROR (Status)) {
+      BS->InstallProtocolInterface (
+            &mHandle,
+            &gEfiDebugAssertProtocolGuid,
+            EFI_NATIVE_INTERFACE,
+            &mDebugAssertProtocol
+            );
+     }
+  );
+
+  return EFI_SUCCESS;
+}
diff --ignore-file-name-case -Naur ShellR33/newshell/FakeHii.c GccShellR33/newshell/FakeHii.c
--- ShellR33/newshell/FakeHii.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/newshell/FakeHii.c	2009-09-22 15:37:05.000000000 -0700
@@ -320,7 +320,7 @@
   if (Language == NULL) {
     return EFI_OUT_OF_RESOURCES;
   }
-  strcpya (Language, (UINT8 *) PackageHdr + HeaderSize - LanguageSize);
+  strcpya (Language, (CHAR8 *) PackageHdr + HeaderSize - LanguageSize);
   for (Link = PackageList->StringPkgHdr.Flink; Link != &PackageList->StringPkgHdr; Link = Link->Flink) {
     StringPackage = CR (Link, FAKE_HII_STRING_PACKAGE, Entry, FAKE_HII_STRING_PACKAGE_SIGNATURE);
     if (CompareLanguage (Language, StringPackage->StringPkgHdr->Language)) {
@@ -770,7 +770,7 @@
   StringPackage = NULL;
   for (Link = DatabaseRecord->StringPkgHdr.Flink; Link != &DatabaseRecord->StringPkgHdr; Link = Link->Flink) {
     StringPackage = CR (Link, FAKE_HII_STRING_PACKAGE, Entry, FAKE_HII_STRING_PACKAGE_SIGNATURE);
-    if (CompareLanguage (StringPackage->StringPkgHdr->Language, (UINT8 *) Language)) {
+    if (CompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {
       Matched = TRUE;
       break;
     }
diff --ignore-file-name-case -Naur ShellR33/newshell/init.c GccShellR33/newshell/init.c
--- ShellR33/newshell/init.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/newshell/init.c	2009-11-09 15:51:54.000000000 -0800
@@ -23,7 +23,7 @@
 #include "nshell.h"
 
 extern UINT8    STRING_ARRAY_NAME[];
-extern BOOLEAN  gHiiInitialized = FALSE;
+BOOLEAN  gHiiInitialized = FALSE;
 
 //
 // This is the generated header file which includes whatever needs to be exported (strings + IFR)
@@ -51,6 +51,12 @@
   VOID
   );
 
+EFI_STATUS
+InstallShellDebugAssert (
+  VOID
+  );
+
+
 EFI_HII_HANDLE      HiiNewshellHandle;
 
 //
@@ -99,13 +105,13 @@
   Status = BS->HandleProtocol (
                 ImgHnd,
                 &gEfiLoadedImageProtocolGuid,
-                &img
+                (VOID **)&img
                 );
   if (!EFI_ERROR (Status)) {
     Status = BS->HandleProtocol (
                   img->DeviceHandle,
                   &gEfiDevicePathProtocolGuid,
-                  &dp
+                  (VOID **)&dp
                   );
     if (!EFI_ERROR (Status)) {
       *DevPath  = DuplicateDevicePath (dp);
@@ -212,15 +218,18 @@
   EFI_STATUS                       Status;
   EFI_CONSOLE_CONTROL_PROTOCOL     *ConsoleControl;
   EFI_GUID                         EfiLibGuid = EFI_NSHELL_GUID;
+  
   InitializeShellLib (ImageHandle, SystemTable);
 
+  InstallShellDebugAssert ();
+
   //
   // If EFI_CONSOLE_CONTROL_PROTOCOL is available,
   // use it to switch to text mode first.
   //
   Status = LibLocateProtocol (
              &gEfiConsoleControlProtocolGuid,
-             &ConsoleControl
+             (VOID **)&ConsoleControl
              );
   if (!EFI_ERROR (Status)) {
     Status = ConsoleControl->GetMode (ConsoleControl, &mOldCurrentMode, NULL, NULL);
@@ -342,7 +351,7 @@
       Status = _ShellLoadEnvDriver (ImageHandle);
     )
     if (EFI_ERROR (Status)) {
-      Status = LibLocateProtocol (&ShellEnvProtocol, &SE);
+      Status = LibLocateProtocol (&ShellEnvProtocol, (VOID **)&SE);
       if (EFI_ERROR (Status)) {
         PrintToken (STRING_TOKEN (STR_NSHELL_ENV_DRIVER), HiiNewshellHandle);
         return Status;
@@ -372,7 +381,7 @@
     *IsRootInstance = TRUE;
   }
 
-  Status = LibLocateProtocol (&ShellEnvProtocol, &SE);
+  Status = LibLocateProtocol (&ShellEnvProtocol, (VOID **)&SE);
   ASSERT (!EFI_ERROR (Status));
   SI = SE->NewShell (ImageHandle);
 
@@ -543,7 +552,7 @@
   //
   ConsoleControlStatus = LibLocateProtocol (
                            &gEfiConsoleControlProtocolGuid,
-                           &ConsoleControl
+                           (VOID **)&ConsoleControl
                            );
   if (!EFI_ERROR (ConsoleControlStatus)) {
     ConsoleControlStatus = ConsoleControl->GetMode (ConsoleControl, &CurrentMode, NULL, NULL);
@@ -592,7 +601,7 @@
   //  3. as a child of a parent shell image
   //
   IsRootInstance  = FALSE;
-
+  
   Status          = _DoInit (ImageHandle, SystemTable);
   if (EFI_ERROR (Status)) {
     return Status;
diff --ignore-file-name-case -Naur ShellR33/newshell/nshell.h GccShellR33/newshell/nshell.h
--- ShellR33/newshell/nshell.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/newshell/nshell.h	2009-11-05 13:49:56.000000000 -0800
@@ -50,7 +50,7 @@
 #undef EFI_MONOSHELL_CODE
 #undef EFI_NO_MONOSHELL_CODE
 
-#if EFI_MONOSHELL == 1
+#ifdef EFI_MONOSHELL
 #define EFI_MONOSHELL_CODE(code)    code
 #define EFI_NO_MONOSHELL_CODE(code)
 #else
@@ -58,4 +58,4 @@
 #define EFI_NO_MONOSHELL_CODE(code) code
 #endif
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/newshell/nshell.inf GccShellR33/newshell/nshell.inf
--- ShellR33/newshell/nshell.inf	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/newshell/nshell.inf	2009-11-07 12:33:52.000000000 -0800
@@ -26,24 +26,25 @@
 
 [sources.common]
   NshellStrings.uni
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   init.c
   nshell.h
   fakehii.c
+  DebugAssert.c
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
@@ -67,7 +68,7 @@
   IMAGE_ENTRY_POINT=InitializeShell
   C_STD_FLAGS = $(C_STD_FLAGS) /DSTRING_ARRAY_NAME=$(BASE_NAME)Strings 
   C_STD_FLAGS = $(C_STD_FLAGS) /DSTRING_DEFINES_FILE=\"$(BASE_NAME)StrDefs.h\"
-  C_STD_FLAGS = $(C_STD_FLAGS) /DEFI_MONOSHELL=2
+  C_STD_FLAGS = $(C_STD_FLAGS) 
 
 
  
\ No newline at end of file
diff --ignore-file-name-case -Naur ShellR33/openinfo/openinfo.c GccShellR33/openinfo/openinfo.c
--- ShellR33/openinfo/openinfo.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/openinfo/openinfo.c	2009-11-05 13:49:56.000000000 -0800
@@ -36,7 +36,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiOpeninfoGuid = EFI_OPENINFO_GUID;
 SHELL_VAR_CHECK_ITEM    OpeninfoCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/openinfo/openinfo.inf GccShellR33/openinfo/openinfo.inf
--- ShellR33/openinfo/openinfo.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/openinfo/openinfo.inf	2009-09-22 15:37:05.000000000 -0700
@@ -41,24 +41,24 @@
 
 [sources.common]
   OPeninfoStrings.uni
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   openinfo.c
   openinfo.h
 
   
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/pci/pci.c GccShellR33/pci/pci.c
--- ShellR33/pci/pci.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/pci/pci.c	2009-11-05 13:49:56.000000000 -0800
@@ -344,7 +344,7 @@
 // Global Variables
 //
 PCI_CONFIG_SPACE  *mConfigSpace;
-EFI_HII_HANDLE    HiiHandle;
+EFI_HII_HANDLE    gPciHiiHandle;
 EFI_GUID          EfiPciGuid = EFI_PCI_GUID;
 SHELL_VAR_CHECK_ITEM    PciCheckList[] = {
   {
@@ -504,7 +504,7 @@
   //
   EnableOutputTabPause();
 
-  Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiPciGuid);
+  Status = LibInitializeStrings (&gPciHiiHandle, STRING_ARRAY_NAME, &EfiPciGuid);
 
   if (EFI_ERROR (Status)) {
     return Status;
@@ -513,7 +513,7 @@
   if (!EFI_PROPER_VERSION (0, 99)) {
     PrintToken (
       STRING_TOKEN (STR_SHELLENV_GNC_COMMAND_NOT_SUPPORT),
-      HiiHandle,
+      gPciHiiHandle,
       L"pci",
       EFI_VERSION_0_99 
       );
@@ -525,15 +525,15 @@
   if (VarCheckOk != RetCode) {
     switch (RetCode) {
     case VarCheckUnknown:
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_UNKNOWN_FLAG), HiiHandle, L"pci", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_UNKNOWN_FLAG), gPciHiiHandle, L"pci", Useful);
       break;
 
     case VarCheckDuplicate:
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_DUP_FLAG), HiiHandle, L"pci", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_DUP_FLAG), gPciHiiHandle, L"pci", Useful);
       break;
 
     case VarCheckLackValue:
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_LACK_ARG), HiiHandle, L"pci", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_LACK_ARG), gPciHiiHandle, L"pci", Useful);
       break;
 
     default:
@@ -555,10 +555,10 @@
         ChkPck.FlagCount > 2 ||
         (2 == ChkPck.FlagCount && !LibCheckVarGetFlag (&ChkPck, L"-b"))
         ) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), HiiHandle, L"pci");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), gPciHiiHandle, L"pci");
       Status = EFI_INVALID_PARAMETER;
     } else {
-      PrintToken (STRING_TOKEN (STR_HELPINFO_PCI_VERBOSEHELP), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_HELPINFO_PCI_VERBOSEHELP), gPciHiiHandle);
       Status = EFI_SUCCESS;
     }
 
@@ -572,7 +572,7 @@
   HandleBufSize = sizeof (EFI_HANDLE);
   HandleBuf     = (EFI_HANDLE *) AllocatePool (HandleBufSize);
   if (HandleBuf == NULL) {
-    PrintToken (STRING_TOKEN (STR_PCI2_OUT_RESOURCES), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_OUT_RESOURCES), gPciHiiHandle);
     Status = EFI_OUT_OF_RESOURCES;
     goto Done;
   }
@@ -588,7 +588,7 @@
   if (Status == EFI_BUFFER_TOO_SMALL) {
     HandleBuf = ReallocatePool (HandleBuf, sizeof (EFI_HANDLE), HandleBufSize);
     if (HandleBuf == NULL) {
-      PrintToken (STRING_TOKEN (STR_PCI2_OUT_RESOURCES), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_PCI2_OUT_RESOURCES), gPciHiiHandle);
       Status = EFI_OUT_OF_RESOURCES;
       goto Done;
     }
@@ -603,7 +603,7 @@
   }
 
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_PCI2_LOCATE_HANDLE), HiiHandle, Status);
+    PrintToken (STRING_TOKEN (STR_PCI2_LOCATE_HANDLE), gPciHiiHandle, Status);
     goto Done;
   }
 
@@ -638,7 +638,7 @@
                 &Descriptors
                 );
       if (EFI_ERROR (Status)) {
-        PrintToken (STRING_TOKEN (STR_PCI2_HANDLE_PROTOCOL), HiiHandle, Status);
+        PrintToken (STRING_TOKEN (STR_PCI2_HANDLE_PROTOCOL), gPciHiiHandle, Status);
         goto Done;
       }
       //
@@ -650,7 +650,7 @@
         Status = PciGetNextBusRange (&Descriptors, &MinBus, &MaxBus, &IsEnd);
 
         if (EFI_ERROR (Status)) {
-          PrintToken (STRING_TOKEN (STR_PCI2_BUS), HiiHandle, Status);
+          PrintToken (STRING_TOKEN (STR_PCI2_BUS), gPciHiiHandle, Status);
           goto Done;
         }
 
@@ -694,7 +694,7 @@
               if (PciHeader.VendorId != 0xffff) {
 
                 if (PrintTitle) {
-                  PrintToken (STRING_TOKEN (STR_PCI2_SEG_BUS), HiiHandle);
+                  PrintToken (STRING_TOKEN (STR_PCI2_SEG_BUS), gPciHiiHandle);
                   Print (L"   ---  ---  ---  ----\n");
                   PrintTitle = FALSE;
                 }
@@ -709,7 +709,7 @@
 
                 PrintToken (
                   STRING_TOKEN (STR_PCI2_FOUR_VARS),
-                  HiiHandle,
+                  gPciHiiHandle,
                   IoDev->SegmentNumber,
                   Bus,
                   Device,
@@ -719,7 +719,7 @@
                 PciPrintClassCode (PciHeader.ClassCode, FALSE);
                 PrintToken (
                   STRING_TOKEN (STR_PCI2_VENDOR),
-                  HiiHandle,
+                  gPciHiiHandle,
                   PciHeader.VendorId,
                   PciHeader.DeviceId,
                   PciHeader.ClassCode[0]
@@ -760,7 +760,7 @@
   }
 
   if (ChkPck.ValueCount == 1) {
-    PrintToken (STRING_TOKEN (STR_PCI2_TOO_FEW_ARGS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_TOO_FEW_ARGS), gPciHiiHandle);
     Status = EFI_INVALID_PARAMETER;
     goto Done;
   }
@@ -768,7 +768,7 @@
   // Arg count >= 3, dump binary of specified function, interpret if necessary
   //
   if (ChkPck.ValueCount > 3) {
-    PrintToken (STRING_TOKEN (STR_PCI2_TOO_MANY_ARGS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_TOO_MANY_ARGS), gPciHiiHandle);
     Status = EFI_INVALID_PARAMETER;
     goto Done;
   }
@@ -786,7 +786,7 @@
   if (NULL != Item) {
     Segment = (UINT16) StrToUIntegerBase (Item->VarStr, 16, &Status);
     if (EFI_ERROR (Status)) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"pci", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gPciHiiHandle, L"pci", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto Done;
     }
@@ -800,7 +800,7 @@
   if (NULL != Item) {
     Bus = (UINT16) StrToUIntegerBase (Item->VarStr, 16, &Status);
     if (EFI_ERROR (Status) || Bus > MAX_BUS_NUMBER) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"pci", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gPciHiiHandle, L"pci", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto Done;
     }
@@ -811,7 +811,7 @@
   if (NULL != Item) {
     Device = (UINT16) StrToUIntegerBase (Item->VarStr, 16, &Status);
     if (EFI_ERROR (Status) || Device > MAX_DEVICE_NUMBER) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"pci", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gPciHiiHandle, L"pci", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto Done;
     }
@@ -822,7 +822,7 @@
   if (NULL != Item) {
     Func = (UINT16) StrToUIntegerBase (Item->VarStr, 16, &Status);
     if (EFI_ERROR (Status) || Func > MAX_FUNCTION_NUMBER) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"pci", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gPciHiiHandle, L"pci", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto Done;
     }
@@ -844,7 +844,7 @@
   if (EFI_ERROR (Status)) {
     PrintToken (
       STRING_TOKEN (STR_PCI2_CANNOT_FIND_PROTOCOL),
-      HiiHandle,
+      gPciHiiHandle,
       Segment,
       Bus
       );
@@ -862,14 +862,14 @@
                         );
 
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_PCI2_CANNOT_READ_CONFIG), HiiHandle, Status);
+    PrintToken (STRING_TOKEN (STR_PCI2_CANNOT_READ_CONFIG), gPciHiiHandle, Status);
     goto Done;
   }
 
   mConfigSpace = &ConfigSpace;
   PrintToken (
     STRING_TOKEN (STR_PCI2_SEGMENT_BUS),
-    HiiHandle,
+    gPciHiiHandle,
     Segment,
     Bus,
     Device,
@@ -1031,7 +1031,7 @@
   Status = BS->HandleProtocol (
                 Handle,
                 &gEfiPciRootBridgeIoProtocolGuid,
-                IoDev
+                (VOID **)IoDev
                 );
 
   if (EFI_ERROR (Status)) {
@@ -1040,7 +1040,7 @@
   //
   // Call Configuration() to get address space descriptors
   //
-  Status = (*IoDev)->Configuration (*IoDev, Descriptors);
+  Status = (*IoDev)->Configuration (*IoDev, (VOID **)Descriptors);
   if (Status == EFI_UNSUPPORTED) {
     *Descriptors = NULL;
     return EFI_SUCCESS;
@@ -1154,14 +1154,14 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_VENDOR_ID),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Common->VendorId)),
     Common->VendorId
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_DEVICE_ID),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Common->DeviceId)),
     Common->DeviceId
     );
@@ -1181,7 +1181,7 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_REVISION_ID),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Common->RevisionId)),
     Common->RevisionId
     );
@@ -1189,19 +1189,19 @@
   //
   // Print register BIST
   //
-  PrintToken (STRING_TOKEN (STR_PCI2_BIST), HiiHandle, INDEX_OF (&(Common->BIST)));
+  PrintToken (STRING_TOKEN (STR_PCI2_BIST), gPciHiiHandle, INDEX_OF (&(Common->BIST)));
   if ((Common->BIST & PCI_BIT_7) != 0) {
-    PrintToken (STRING_TOKEN (STR_PCI2_CAPABLE_RETURN), HiiHandle, 0x0f & Common->BIST);
+    PrintToken (STRING_TOKEN (STR_PCI2_CAPABLE_RETURN), gPciHiiHandle, 0x0f & Common->BIST);
 
   } else {
-    PrintToken (STRING_TOKEN (STR_PCI2_INCAPABLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_INCAPABLE), gPciHiiHandle);
   }
   //
   // Print register Cache Line Size
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_CACHE_LINE_SIZE),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Common->CacheLineSize)),
     Common->CacheLineSize
     );
@@ -1211,7 +1211,7 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_LATENCY_TIMER),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Common->PrimaryLatencyTimer)),
     Common->PrimaryLatencyTimer
     );
@@ -1221,41 +1221,41 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_HEADER_TYPE),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Common->HeaderType)),
     Common->HeaderType
     );
 
   if ((Common->HeaderType & PCI_BIT_7) != 0) {
-    PrintToken (STRING_TOKEN (STR_PCI2_MULTI_FUNCTION), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_MULTI_FUNCTION), gPciHiiHandle);
 
   } else {
-    PrintToken (STRING_TOKEN (STR_PCI2_SINGLE_FUNCTION), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_SINGLE_FUNCTION), gPciHiiHandle);
   }
 
   HeaderType = (UINT8) (Common->HeaderType & 0x7f);
   switch (HeaderType) {
   case PciDevice:
-    PrintToken (STRING_TOKEN (STR_PCI2_PCI_DEVICE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_PCI_DEVICE), gPciHiiHandle);
     break;
 
   case PciP2pBridge:
-    PrintToken (STRING_TOKEN (STR_PCI2_P2P_BRIDGE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_P2P_BRIDGE), gPciHiiHandle);
     break;
 
   case PciCardBusBridge:
-    PrintToken (STRING_TOKEN (STR_PCI2_CARDBUS_BRIDGE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_CARDBUS_BRIDGE), gPciHiiHandle);
     break;
 
   default:
-    PrintToken (STRING_TOKEN (STR_PCI2_RESERVED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_RESERVED), gPciHiiHandle);
     HeaderType = PciUndefined;
   }
 
   //
   // Print register Class Code
   //
-  PrintToken (STRING_TOKEN (STR_PCI2_CLASS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_PCI2_CLASS), gPciHiiHandle);
   PciPrintClassCode ((UINT8 *) Common->ClassCode, TRUE);
   Print (L"\n");
 
@@ -1296,6 +1296,9 @@
               );
     CapPtr = ConfigSpace->NonCommon.CardBus.CapabilitiesPtr;
     break;
+    
+  default:
+    break;
   }
   //
   // If Status bit4 is 1, dump or explain capability structure
@@ -1341,7 +1344,7 @@
   // exist. If these no Bar for this function, print "none", otherwise
   // list detail information about this Bar.
   //
-  PrintToken (STRING_TOKEN (STR_PCI2_BASE_ADDR), HiiHandle, INDEX_OF (Device->Bar));
+  PrintToken (STRING_TOKEN (STR_PCI2_BASE_ADDR), gPciHiiHandle, INDEX_OF (Device->Bar));
 
   BarExist  = FALSE;
   BarCount  = sizeof (Device->Bar) / sizeof (Device->Bar[0]);
@@ -1352,7 +1355,7 @@
 
     if (!BarExist) {
       BarExist = TRUE;
-      PrintToken (STRING_TOKEN (STR_PCI2_START_TYPE), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_PCI2_START_TYPE), gPciHiiHandle);
       Print (L"  --------------------------------------------------------------------------");
     }
 
@@ -1370,7 +1373,7 @@
   }
 
   if (!BarExist) {
-    PrintToken (STRING_TOKEN (STR_PCI2_NONE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_NONE), gPciHiiHandle);
 
   } else {
     Print (L"\n  --------------------------------------------------------------------------");
@@ -1380,12 +1383,12 @@
   // Print register Expansion ROM Base Address
   //
   if ((Device->ROMBar & PCI_BIT_0) == 0) {
-    PrintToken (STRING_TOKEN (STR_PCI2_EXPANSION_ROM_DISABLED), HiiHandle, INDEX_OF (&(Device->ROMBar)));
+    PrintToken (STRING_TOKEN (STR_PCI2_EXPANSION_ROM_DISABLED), gPciHiiHandle, INDEX_OF (&(Device->ROMBar)));
 
   } else {
     PrintToken (
       STRING_TOKEN (STR_PCI2_EXPANSION_ROM_BASE),
-      HiiHandle,
+      gPciHiiHandle,
       INDEX_OF (&(Device->ROMBar)),
       Device->ROMBar
       );
@@ -1395,7 +1398,7 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_CARDBUS_CIS),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Device->CardBusCISPtr)),
     Device->CardBusCISPtr
     );
@@ -1405,14 +1408,14 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_SUB_VENDOR_ID),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Device->SubVendorId)),
     Device->SubVendorId
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_SUBSYSTEM_ID),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Device->SubSystemId)),
     Device->SubSystemId
     );
@@ -1422,7 +1425,7 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_CAPABILITIES_PTR),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Device->CapabilitiesPtr)),
     Device->CapabilitiesPtr
     );
@@ -1432,14 +1435,14 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_INTERRUPT_LINE),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Device->InterruptLine)),
     Device->InterruptLine
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_INTERRUPT_PIN),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Device->InterruptPin)),
     Device->InterruptPin
     );
@@ -1449,14 +1452,14 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_MIN_GNT),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Device->MinGnt)),
     Device->MinGnt
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_MAX_LAT),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Device->MaxLat)),
     Device->MaxLat
     );
@@ -1499,7 +1502,7 @@
   // exist. If these no Bar for this function, print "none", otherwise
   // list detail information about this Bar.
   //
-  PrintToken (STRING_TOKEN (STR_PCI2_BASE_ADDRESS), HiiHandle, INDEX_OF (&(Bridge->Bar)));
+  PrintToken (STRING_TOKEN (STR_PCI2_BASE_ADDRESS), gPciHiiHandle, INDEX_OF (&(Bridge->Bar)));
 
   BarExist  = FALSE;
   BarCount  = sizeof (Bridge->Bar) / sizeof (Bridge->Bar[0]);
@@ -1511,7 +1514,7 @@
 
     if (!BarExist) {
       BarExist = TRUE;
-      PrintToken (STRING_TOKEN (STR_PCI2_START_TYPE_2), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_PCI2_START_TYPE_2), gPciHiiHandle);
       Print (L"  --------------------------------------------------------------------------");
     }
 
@@ -1529,7 +1532,7 @@
   }
 
   if (!BarExist) {
-    PrintToken (STRING_TOKEN (STR_PCI2_NONE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_NONE), gPciHiiHandle);
   } else {
     Print (L"\n  --------------------------------------------------------------------------");
   }
@@ -1538,12 +1541,12 @@
   // Expansion register ROM Base Address
   //
   if ((Bridge->ROMBar & PCI_BIT_0) == 0) {
-    PrintToken (STRING_TOKEN (STR_PCI2_NO_EXPANSION_ROM), HiiHandle, INDEX_OF (&(Bridge->ROMBar)));
+    PrintToken (STRING_TOKEN (STR_PCI2_NO_EXPANSION_ROM), gPciHiiHandle, INDEX_OF (&(Bridge->ROMBar)));
 
   } else {
     PrintToken (
       STRING_TOKEN (STR_PCI2_EXPANSION_ROM_BASE_2),
-      HiiHandle,
+      gPciHiiHandle,
       INDEX_OF (&(Bridge->ROMBar)),
       Bridge->ROMBar
       );
@@ -1553,7 +1556,7 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_BUS_NUMBERS),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Bridge->PrimaryBus)),
     INDEX_OF (&(Bridge->SecondaryBus)),
     INDEX_OF (&(Bridge->SubordinateBus))
@@ -1561,16 +1564,16 @@
 
   Print (L"               ------------------------------------------------------\n");
 
-  PrintToken (STRING_TOKEN (STR_PCI2_BRIDGE), HiiHandle, Bridge->PrimaryBus);
-  PrintToken (STRING_TOKEN (STR_PCI2_BRIDGE), HiiHandle, Bridge->SecondaryBus);
-  PrintToken (STRING_TOKEN (STR_PCI2_BRIDGE), HiiHandle, Bridge->SubordinateBus);
+  PrintToken (STRING_TOKEN (STR_PCI2_BRIDGE), gPciHiiHandle, Bridge->PrimaryBus);
+  PrintToken (STRING_TOKEN (STR_PCI2_BRIDGE), gPciHiiHandle, Bridge->SecondaryBus);
+  PrintToken (STRING_TOKEN (STR_PCI2_BRIDGE), gPciHiiHandle, Bridge->SubordinateBus);
 
   //
   // Print register Secondary Latency Timer
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_SECONDARY_TIMER),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Bridge->SecondaryLatencyTimer)),
     Bridge->SecondaryLatencyTimer
     );
@@ -1585,7 +1588,7 @@
   // types: I/O, memory, and pre-fetchable memory. For each resource type,
   // base and limit address are listed.
   //
-  PrintToken (STRING_TOKEN (STR_PCI2_RESOURCE_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_PCI2_RESOURCE_TYPE), gPciHiiHandle);
   Print (L"----------------------------------------------------------------------\n");
 
   //
@@ -1595,28 +1598,28 @@
   IoAddress32 &= 0xfffff000;
   PrintToken (
     STRING_TOKEN (STR_PCI2_TWO_VARS),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Bridge->IoBase)),
     IoAddress32
     );
 
   IoAddress32 = (Bridge->IoLimitUpper << 16 | Bridge->IoLimit << 8);
   IoAddress32 |= 0x00000fff;
-  PrintToken (STRING_TOKEN (STR_PCI2_ONE_VAR), HiiHandle, IoAddress32);
+  PrintToken (STRING_TOKEN (STR_PCI2_ONE_VAR), gPciHiiHandle, IoAddress32);
 
   //
   // Memory Base & Limit
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_MEMORY),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Bridge->MemoryBase)),
     (Bridge->MemoryBase << 16) & 0xfff00000
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_ONE_VAR),
-    HiiHandle,
+    gPciHiiHandle,
     (Bridge->MemoryLimit << 16) | 0x000fffff
     );
 
@@ -1625,7 +1628,7 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_PREFETCHABLE),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Bridge->PrefetchableMemBase)),
     Bridge->PrefetchableBaseUpper,
     (Bridge->PrefetchableMemBase << 16) & 0xfff00000
@@ -1633,7 +1636,7 @@
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_TWO_VARS_2),
-    HiiHandle,
+    gPciHiiHandle,
     Bridge->PrefetchableLimitUpper,
     (Bridge->PrefetchableMemLimit << 16) | 0x000fffff
     );
@@ -1643,7 +1646,7 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_CAPABILITIES_PTR_2),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Bridge->CapabilitiesPtr)),
     Bridge->CapabilitiesPtr
     );
@@ -1658,14 +1661,14 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_INTERRUPT_LINE_2),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Bridge->InterruptLine)),
     Bridge->InterruptLine
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_INTERRUPT_PIN),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(Bridge->InterruptPin)),
     Bridge->InterruptPin
     );
@@ -1728,17 +1731,17 @@
     IsMem = TRUE;
 
     if ((*Bar & PCI_BIT_1) == 0 && (*Bar & PCI_BIT_2) == 0) {
-      PrintToken (STRING_TOKEN (STR_PCI2_BAR), HiiHandle, *Bar & 0xfffffff0);
-      PrintToken (STRING_TOKEN (STR_PCI2_MEM), HiiHandle);
-      PrintToken (STRING_TOKEN (STR_PCI2_32_BITS), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_PCI2_BAR), gPciHiiHandle, *Bar & 0xfffffff0);
+      PrintToken (STRING_TOKEN (STR_PCI2_MEM), gPciHiiHandle);
+      PrintToken (STRING_TOKEN (STR_PCI2_32_BITS), gPciHiiHandle);
 
     } else if ((*Bar & PCI_BIT_1) == 0 && (*Bar & PCI_BIT_2) != 0) {
       Bar64 = 0x0;
       CopyMem (&Bar64, Bar, sizeof (UINT32));
-      PrintToken (STRING_TOKEN (STR_PCI2_ONE_VAR_2), HiiHandle, RShiftU64 ((Bar64 & 0xfffffffffffffff0), 32));
-      PrintToken (STRING_TOKEN (STR_PCI2_ONE_VAR_3), HiiHandle, Bar64 & 0xfffffffffffffff0);
-      PrintToken (STRING_TOKEN (STR_PCI2_MEM), HiiHandle);
-      PrintToken (STRING_TOKEN (STR_PCI2_64_BITS), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_PCI2_ONE_VAR_2), gPciHiiHandle, RShiftU64 ((Bar64 & 0xfffffffffffffff0ULL), 32));
+      PrintToken (STRING_TOKEN (STR_PCI2_ONE_VAR_3), gPciHiiHandle, Bar64 & 0xfffffffffffffff0ULL);
+      PrintToken (STRING_TOKEN (STR_PCI2_MEM), gPciHiiHandle);
+      PrintToken (STRING_TOKEN (STR_PCI2_64_BITS), gPciHiiHandle);
       IsBar32 = FALSE;
       *Index += 1;
 
@@ -1746,15 +1749,15 @@
       //
       // Reserved
       //
-      PrintToken (STRING_TOKEN (STR_PCI2_BAR), HiiHandle, *Bar & 0xfffffff0);
-      PrintToken (STRING_TOKEN (STR_PCI2_MEM_2), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_PCI2_BAR), gPciHiiHandle, *Bar & 0xfffffff0);
+      PrintToken (STRING_TOKEN (STR_PCI2_MEM_2), gPciHiiHandle);
     }
 
     if ((*Bar & PCI_BIT_3) == 0) {
-      PrintToken (STRING_TOKEN (STR_PCI2_NO), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_PCI2_NO), gPciHiiHandle);
 
     } else {
-      PrintToken (STRING_TOKEN (STR_PCI2_YES), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_PCI2_YES), gPciHiiHandle);
     }
 
   } else {
@@ -1762,7 +1765,7 @@
     // This bar is of io type
     //
     IsMem = FALSE;
-    PrintToken (STRING_TOKEN (STR_PCI2_ONE_VAR_4), HiiHandle, *Bar & 0xfffffffc);
+    PrintToken (STRING_TOKEN (STR_PCI2_ONE_VAR_4), gPciHiiHandle, *Bar & 0xfffffffc);
     Print (L"I/O                               ");
   }
 
@@ -1807,18 +1810,18 @@
 
     OldBar64 = 0x0;
     CopyMem (&OldBar64, Bar, sizeof (UINT32));
-    NewBar64 = 0xffffffffffffffff;
+    NewBar64 = 0xffffffffffffffffULL;
 
     IoDev->Pci.Write (IoDev, EfiPciWidthUint32, RegAddress, 2, &NewBar64);
     IoDev->Pci.Read (IoDev, EfiPciWidthUint32, RegAddress, 2, &NewBar64);
     IoDev->Pci.Write (IoDev, EfiPciWidthUint32, RegAddress, 2, &OldBar64);
 
     if (IsMem) {
-      NewBar64  = NewBar64 & 0xfffffffffffffff0;
+      NewBar64  = NewBar64 & 0xfffffffffffffff0ULL;
       NewBar64  = (~NewBar64) + 1;
 
     } else {
-      NewBar64  = NewBar64 & 0xfffffffffffffffc;
+      NewBar64  = NewBar64 & 0xfffffffffffffffcULL;
       NewBar64  = (~NewBar64) + 1;
       NewBar64  = NewBar64 & 0x000000000000ffff;
     }
@@ -1831,24 +1834,24 @@
 
   if (IsMem) {
     if (IsBar32) {
-      PrintToken (STRING_TOKEN (STR_PCI2_NEWBAR_32), HiiHandle, NewBar32);
-      PrintToken (STRING_TOKEN (STR_PCI2_NEWBAR_32_2), HiiHandle, NewBar32 + (*Bar & 0xfffffff0) - 1);
+      PrintToken (STRING_TOKEN (STR_PCI2_NEWBAR_32), gPciHiiHandle, NewBar32);
+      PrintToken (STRING_TOKEN (STR_PCI2_NEWBAR_32_2), gPciHiiHandle, NewBar32 + (*Bar & 0xfffffff0) - 1);
 
     } else {
-      PrintToken (STRING_TOKEN (STR_PCI2_RSHIFT), HiiHandle, RShiftU64 (NewBar64, 32));
-      PrintToken (STRING_TOKEN (STR_PCI2_RSHIFT), HiiHandle, (UINT32) NewBar64);
+      PrintToken (STRING_TOKEN (STR_PCI2_RSHIFT), gPciHiiHandle, RShiftU64 (NewBar64, 32));
+      PrintToken (STRING_TOKEN (STR_PCI2_RSHIFT), gPciHiiHandle, (UINT32) NewBar64);
       Print (L"  ");
       PrintToken (
         STRING_TOKEN (STR_PCI2_RSHIFT),
-        HiiHandle,
-        RShiftU64 ((NewBar64 + (Bar64 & 0xfffffffffffffff0) - 1), 32)
+        gPciHiiHandle,
+        RShiftU64 ((NewBar64 + (Bar64 & 0xfffffffffffffff0ULL) - 1), 32)
         );
-      PrintToken (STRING_TOKEN (STR_PCI2_RSHIFT), HiiHandle, (UINT32) (NewBar64 + (Bar64 & 0xfffffffffffffff0) - 1));
+      PrintToken (STRING_TOKEN (STR_PCI2_RSHIFT), gPciHiiHandle, (UINT32) (NewBar64 + (Bar64 & 0xfffffffffffffff0ULL) - 1));
 
     }
   } else {
-    PrintToken (STRING_TOKEN (STR_PCI2_NEWBAR_32_3), HiiHandle, NewBar32);
-    PrintToken (STRING_TOKEN (STR_PCI2_NEWBAR_32_4), HiiHandle, NewBar32 + (*Bar & 0xfffffffc) - 1);
+    PrintToken (STRING_TOKEN (STR_PCI2_NEWBAR_32_3), gPciHiiHandle, NewBar32);
+    PrintToken (STRING_TOKEN (STR_PCI2_NEWBAR_32_4), gPciHiiHandle, NewBar32 + (*Bar & 0xfffffffc) - 1);
   }
 
   return EFI_SUCCESS;
@@ -1883,7 +1886,7 @@
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_CARDBUS_SOCKET),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(CardBus->CardBusSocketReg)),
     CardBus->CardBusSocketReg
     );
@@ -1899,7 +1902,7 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_BUS_NUMBERS_2),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(CardBus->PciBusNumber)),
     INDEX_OF (&(CardBus->CardBusBusNumber)),
     INDEX_OF (&(CardBus->SubordinateBusNumber))
@@ -1907,16 +1910,16 @@
 
   Print (L"               ------------------------------------------------------\n");
 
-  PrintToken (STRING_TOKEN (STR_PCI2_CARDBUS), HiiHandle, CardBus->PciBusNumber);
-  PrintToken (STRING_TOKEN (STR_PCI2_CARDBUS_2), HiiHandle, CardBus->CardBusBusNumber);
-  PrintToken (STRING_TOKEN (STR_PCI2_CARDBUS_3), HiiHandle, CardBus->SubordinateBusNumber);
+  PrintToken (STRING_TOKEN (STR_PCI2_CARDBUS), gPciHiiHandle, CardBus->PciBusNumber);
+  PrintToken (STRING_TOKEN (STR_PCI2_CARDBUS_2), gPciHiiHandle, CardBus->CardBusBusNumber);
+  PrintToken (STRING_TOKEN (STR_PCI2_CARDBUS_3), gPciHiiHandle, CardBus->SubordinateBusNumber);
 
   //
   // Print CardBus Latency Timer
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_CARDBUS_LATENCY),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(CardBus->CardBusLatencyTimer)),
     CardBus->CardBusLatencyTimer
     );
@@ -1924,12 +1927,12 @@
   //
   // Print Memory/Io ranges this cardbus bridge forwards
   //
-  PrintToken (STRING_TOKEN (STR_PCI2_RESOURCE_TYPE_2), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_PCI2_RESOURCE_TYPE_2), gPciHiiHandle);
   Print (L"----------------------------------------------------------------------\n");
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_MEM_3),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(CardBus->MemoryBase0)),
     CardBus->BridgeControl & PCI_BIT_8 ? L"    Prefetchable" : L"Non-Prefetchable",
     CardBus->MemoryBase0 & 0xfffff000,
@@ -1938,7 +1941,7 @@
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_MEM_3),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(CardBus->MemoryBase1)),
     CardBus->BridgeControl & PCI_BIT_9 ? L"    Prefetchable" : L"Non-Prefetchable",
     CardBus->MemoryBase1 & 0xfffff000,
@@ -1948,21 +1951,21 @@
   Io32Bit = (BOOLEAN) (CardBus->IoBase0 & PCI_BIT_0);
   PrintToken (
     STRING_TOKEN (STR_PCI2_IO_2),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(CardBus->IoBase0)),
     Io32Bit ? L"          32 bit" : L"          16 bit",
     CardBus->IoBase0 & (Io32Bit ? 0xfffffffc : 0x0000fffc),
-    CardBus->IoLimit0 & (Io32Bit ? 0xffffffff : 0x0000ffff) | 0x00000003
+    (CardBus->IoLimit0 & (Io32Bit ? 0xffffffff : 0x0000ffff)) | 0x00000003
     );
 
   Io32Bit = (BOOLEAN) (CardBus->IoBase1 & PCI_BIT_0);
   PrintToken (
     STRING_TOKEN (STR_PCI2_IO_2),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(CardBus->IoBase1)),
     Io32Bit ? L"          32 bit" : L"          16 bit",
     CardBus->IoBase1 & (Io32Bit ? 0xfffffffc : 0x0000fffc),
-    CardBus->IoLimit1 & (Io32Bit ? 0xffffffff : 0x0000ffff) | 0x00000003
+    (CardBus->IoLimit1 & (Io32Bit ? 0xffffffff : 0x0000ffff)) | 0x00000003
     );
 
   //
@@ -1970,7 +1973,7 @@
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_INTERRUPT_LINE_3),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(CardBus->InterruptLine)),
     CardBus->InterruptLine,
     INDEX_OF (&(CardBus->InterruptPin)),
@@ -1991,7 +1994,7 @@
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_SUB_VENDOR_ID_2),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(CardBusData->SubVendorId)),
     CardBusData->SubVendorId,
     INDEX_OF (&(CardBusData->SubSystemId)),
@@ -2000,7 +2003,7 @@
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_OPTIONAL),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (&(CardBusData->LegacyBase)),
     CardBusData->LegacyBase
     );
@@ -2035,80 +2038,80 @@
 --*/
 {
   if (MainStatus) {
-    PrintToken (STRING_TOKEN (STR_PCI2_STATUS), HiiHandle, INDEX_OF (Status), *Status);
+    PrintToken (STRING_TOKEN (STR_PCI2_STATUS), gPciHiiHandle, INDEX_OF (Status), *Status);
 
   } else {
-    PrintToken (STRING_TOKEN (STR_PCI2_SECONDARY_STATUS), HiiHandle, INDEX_OF (Status), *Status);
+    PrintToken (STRING_TOKEN (STR_PCI2_SECONDARY_STATUS), gPciHiiHandle, INDEX_OF (Status), *Status);
   }
 
-  PrintToken (STRING_TOKEN (STR_PCI2_NEW_CAPABILITIES), HiiHandle, (*Status & PCI_BIT_4) != 0);
+  PrintToken (STRING_TOKEN (STR_PCI2_NEW_CAPABILITIES), gPciHiiHandle, (*Status & PCI_BIT_4) != 0);
 
   //
   // Bit 5 is meaningless for CardBus Bridge
   //
   if (HeaderType == PciCardBusBridge) {
-    PrintToken (STRING_TOKEN (STR_PCI2_66_CAPABLE), HiiHandle, (*Status & PCI_BIT_5) != 0);
+    PrintToken (STRING_TOKEN (STR_PCI2_66_CAPABLE), gPciHiiHandle, (*Status & PCI_BIT_5) != 0);
 
   } else {
-    PrintToken (STRING_TOKEN (STR_PCI2_66_CAPABLE_2), HiiHandle, (*Status & PCI_BIT_5) != 0);
+    PrintToken (STRING_TOKEN (STR_PCI2_66_CAPABLE_2), gPciHiiHandle, (*Status & PCI_BIT_5) != 0);
   }
 
-  PrintToken (STRING_TOKEN (STR_PCI2_FAST_BACK), HiiHandle, (*Status & PCI_BIT_7) != 0);
+  PrintToken (STRING_TOKEN (STR_PCI2_FAST_BACK), gPciHiiHandle, (*Status & PCI_BIT_7) != 0);
 
-  PrintToken (STRING_TOKEN (STR_PCI2_MASTER_DATA), HiiHandle, (*Status & PCI_BIT_8) != 0);
+  PrintToken (STRING_TOKEN (STR_PCI2_MASTER_DATA), gPciHiiHandle, (*Status & PCI_BIT_8) != 0);
   //
   // Bit 9 and bit 10 together decides the DEVSEL timing
   //
-  PrintToken (STRING_TOKEN (STR_PCI2_DEVSEL_TIMING), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_PCI2_DEVSEL_TIMING), gPciHiiHandle);
   if ((*Status & PCI_BIT_9) == 0 && (*Status & PCI_BIT_10) == 0) {
-    PrintToken (STRING_TOKEN (STR_PCI2_FAST), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_FAST), gPciHiiHandle);
 
   } else if ((*Status & PCI_BIT_9) != 0 && (*Status & PCI_BIT_10) == 0) {
-    PrintToken (STRING_TOKEN (STR_PCI2_MEDIUM), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_MEDIUM), gPciHiiHandle);
 
   } else if ((*Status & PCI_BIT_9) == 0 && (*Status & PCI_BIT_10) != 0) {
-    PrintToken (STRING_TOKEN (STR_PCI2_SLOW), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_SLOW), gPciHiiHandle);
 
   } else {
-    PrintToken (STRING_TOKEN (STR_PCI2_RESERVED_2), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_PCI2_RESERVED_2), gPciHiiHandle);
   }
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_SIGNALED_TARGET),
-    HiiHandle,
+    gPciHiiHandle,
     (*Status & PCI_BIT_11) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_RECEIVED_TARGET),
-    HiiHandle,
+    gPciHiiHandle,
     (*Status & PCI_BIT_12) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_RECEIVED_MASTER),
-    HiiHandle,
+    gPciHiiHandle,
     (*Status & PCI_BIT_13) != 0
     );
 
   if (MainStatus) {
     PrintToken (
       STRING_TOKEN (STR_PCI2_SIGNALED_ERROR),
-      HiiHandle,
+      gPciHiiHandle,
       (*Status & PCI_BIT_14) != 0
       );
 
   } else {
     PrintToken (
       STRING_TOKEN (STR_PCI2_RECEIVED_ERROR),
-      HiiHandle,
+      gPciHiiHandle,
       (*Status & PCI_BIT_14) != 0
       );
   }
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_DETECTED_ERROR),
-    HiiHandle,
+    gPciHiiHandle,
     (*Status & PCI_BIT_15) != 0
     );
 
@@ -2138,68 +2141,68 @@
   //
   // Print the binary value of register Command
   //
-  PrintToken (STRING_TOKEN (STR_PCI2_COMMAND), HiiHandle, INDEX_OF (Command), *Command);
+  PrintToken (STRING_TOKEN (STR_PCI2_COMMAND), gPciHiiHandle, INDEX_OF (Command), *Command);
 
   //
   // Explain register Command bit by bit
   //
   PrintToken (
     STRING_TOKEN (STR_PCI2_SPACE_ACCESS_DENIED),
-    HiiHandle,
+    gPciHiiHandle,
     (*Command & PCI_BIT_0) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_MEMORY_SPACE),
-    HiiHandle,
+    gPciHiiHandle,
     (*Command & PCI_BIT_1) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_BEHAVE_BUS_MASTER),
-    HiiHandle,
+    gPciHiiHandle,
     (*Command & PCI_BIT_2) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_MONITOR_SPECIAL_CYCLE),
-    HiiHandle,
+    gPciHiiHandle,
     (*Command & PCI_BIT_3) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_MEM_WRITE_INVALIDATE),
-    HiiHandle,
+    gPciHiiHandle,
     (*Command & PCI_BIT_4) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_PALETTE_SNOOPING),
-    HiiHandle,
+    gPciHiiHandle,
     (*Command & PCI_BIT_5) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_ASSERT_PERR),
-    HiiHandle,
+    gPciHiiHandle,
     (*Command & PCI_BIT_6) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_DO_ADDR_STEPPING),
-    HiiHandle,
+    gPciHiiHandle,
     (*Command & PCI_BIT_7) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_SERR_DRIVER),
-    HiiHandle,
+    gPciHiiHandle,
     (*Command & PCI_BIT_8) != 0
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_FAST_BACK_2),
-    HiiHandle,
+    gPciHiiHandle,
     (*Command & PCI_BIT_9) != 0
     );
 
@@ -2230,34 +2233,34 @@
 {
   PrintToken (
     STRING_TOKEN (STR_PCI2_BRIDGE_CONTROL),
-    HiiHandle,
+    gPciHiiHandle,
     INDEX_OF (BridgeControl),
     *BridgeControl
     );
 
   PrintToken (
     STRING_TOKEN (STR_PCI2_PARITY_ERROR),
-    HiiHandle,
+    gPciHiiHandle,
     (*BridgeControl & PCI_BIT_0) != 0
     );
   PrintToken (
     STRING_TOKEN (STR_PCI2_SERR_ENABLE),
-    HiiHandle,
+    gPciHiiHandle,
     (*BridgeControl & PCI_BIT_1) != 0
     );
   PrintToken (
     STRING_TOKEN (STR_PCI2_ISA_ENABLE),
-    HiiHandle,
+    gPciHiiHandle,
     (*BridgeControl & PCI_BIT_2) != 0
     );
   PrintToken (
     STRING_TOKEN (STR_PCI2_VGA_ENABLE),
-    HiiHandle,
+    gPciHiiHandle,
     (*BridgeControl & PCI_BIT_3) != 0
     );
   PrintToken (
     STRING_TOKEN (STR_PCI2_MASTER_ABORT),
-    HiiHandle,
+    gPciHiiHandle,
     (*BridgeControl & PCI_BIT_5) != 0
     );
 
@@ -2268,49 +2271,49 @@
   if (HeaderType == PciP2pBridge) {
     PrintToken (
       STRING_TOKEN (STR_PCI2_SECONDARY_BUS_RESET),
-      HiiHandle,
+      gPciHiiHandle,
       (*BridgeControl & PCI_BIT_6) != 0
       );
     PrintToken (
       STRING_TOKEN (STR_PCI2_FAST_ENABLE),
-      HiiHandle,
+      gPciHiiHandle,
       (*BridgeControl & PCI_BIT_7) != 0
       );
     PrintToken (
       STRING_TOKEN (STR_PCI2_PRIMARY_DISCARD_TIMER),
-      HiiHandle,
+      gPciHiiHandle,
       (*BridgeControl & PCI_BIT_8) ? L"2^10" : L"2^15"
       );
     PrintToken (
       STRING_TOKEN (STR_PCI2_SECONDARY_DISCARD_TIMER),
-      HiiHandle,
+      gPciHiiHandle,
       (*BridgeControl & PCI_BIT_9) ? L"2^10" : L"2^15"
       );
     PrintToken (
       STRING_TOKEN (STR_PCI2_DISCARD_TIMER_STATUS),
-      HiiHandle,
+      gPciHiiHandle,
       (*BridgeControl & PCI_BIT_10) != 0
       );
     PrintToken (
       STRING_TOKEN (STR_PCI2_DISCARD_TIMER_SERR),
-      HiiHandle,
+      gPciHiiHandle,
       (*BridgeControl & PCI_BIT_11) != 0
       );
 
   } else {
     PrintToken (
       STRING_TOKEN (STR_PCI2_CARDBUS_RESET),
-      HiiHandle,
+      gPciHiiHandle,
       (*BridgeControl & PCI_BIT_6) != 0
       );
     PrintToken (
       STRING_TOKEN (STR_PCI2_IREQ_ENABLE),
-      HiiHandle,
+      gPciHiiHandle,
       (*BridgeControl & PCI_BIT_7) != 0
       );
     PrintToken (
       STRING_TOKEN (STR_PCI2_WRITE_POSTING_ENABLE),
-      HiiHandle,
+      gPciHiiHandle,
       (*BridgeControl & PCI_BIT_10) != 0
       );
   }
@@ -3077,7 +3080,7 @@
     }
     PrintToken (
       PcieExplainList[Index].Token,
-      HiiHandle,
+      gPciHiiHandle,
       PcieExplainList[Index].Offset,
       RegValue
       );
diff --ignore-file-name-case -Naur ShellR33/pci/pci.h GccShellR33/pci/pci.h
--- ShellR33/pci/pci.h	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/pci/pci.h	2009-09-22 19:19:20.000000000 -0700
@@ -30,7 +30,7 @@
     0x388da6c3, 0x3447, 0x4b1f, 0xa0, 0xba, 0xa9, 0xe8, 0xa2, 0x87, 0xf1, 0x76 \
   }
 
-#include "TIANO.h"
+#include "Tiano.h"
 
 typedef enum {
   PciDevice,
diff --ignore-file-name-case -Naur ShellR33/pci/pci.inf GccShellR33/pci/pci.inf
--- ShellR33/pci/pci.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/pci/pci.inf	2009-09-22 15:37:05.000000000 -0700
@@ -41,7 +41,7 @@
 
 [sources.common]
   PciStrings.uni
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   pci.c
   pci.h
   pci_class.h
@@ -49,17 +49,17 @@
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/pci/pci_class.c GccShellR33/pci/pci_class.c
--- ShellR33/pci/pci_class.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/pci/pci_class.c	2009-11-05 13:49:56.000000000 -0800
@@ -27,10 +27,12 @@
 
 #include STRING_DEFINES_FILE
 
+extern EFI_HII_HANDLE    gPciHiiHandle;
+
+
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
 
 PCI_CLASS_ENTRY gClassStringList[];
 
@@ -1417,7 +1419,7 @@
     //
     PrintToken (
       STRING_TOKEN (STR_PCI_CLASS_THREE_VARS),
-      HiiHandle,
+      gPciHiiHandle,
       ClassStrings.BaseClass,
       ClassStrings.SubClass,
       ClassStrings.PIFClass
@@ -1436,6 +1438,6 @@
       );
 
     OutputString[PCI_CLASS_STRING_LIMIT] = 0;
-    PrintToken (STRING_TOKEN (STR_PCI_CLASS_ONE_VARS), HiiHandle, OutputString);
+    PrintToken (STRING_TOKEN (STR_PCI_CLASS_ONE_VARS), gPciHiiHandle, OutputString);
   }
 }
diff --ignore-file-name-case -Naur ShellR33/pci/pci_class.h GccShellR33/pci/pci_class.h
--- ShellR33/pci/pci_class.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/pci/pci_class.h	2009-09-22 19:19:20.000000000 -0700
@@ -24,7 +24,7 @@
 #ifndef _PCI_CLASS_H_
 #define _PCI_CLASS_H_
 
-#include "TIANO.h"  // for UINT32 etc.
+#include "Tiano.h"  // for UINT32 etc.
 #define PCI_CLASS_STRING_LIMIT  54
 //
 // Printable strings for Pci class code
diff --ignore-file-name-case -Naur ShellR33/Ping/Ping.c GccShellR33/Ping/Ping.c
--- ShellR33/Ping/Ping.c	2008-10-06 00:03:04.000000000 -0700
+++ GccShellR33/Ping/Ping.c	2009-11-05 13:49:56.000000000 -0800
@@ -20,14 +20,14 @@
 --*/
 
 #include "EfiShellLib.h"
-#include "CpuFuncs.h"
+//#include "CpuFuncs.h"
 #include EFI_ARCH_PROTOCOL_DEFINITION (Cpu)
 #include EFI_PROTOCOL_DEFINITION (Ip4)
 #include "Ping.h"
 #include STRING_DEFINES_FILE
 extern UINT8 STRING_ARRAY_NAME[];
 
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 
 EFI_GUID  EfiPingGuid = EFI_PING_GUID;
 SHELL_VAR_CHECK_ITEM  PingCheckList[] = {
@@ -66,6 +66,8 @@
 UINT32            RttMin;
 UINT32            RttMax;
 
+EFI_CPU_ARCH_PROTOCOL  *gCpu = NULL;
+
 STATIC
 UINT64
 GetTimerValue (
@@ -87,7 +89,22 @@
 
 --*/
 {
-  return EfiReadTsc ();
+  static UINT64          CurrentTick = 0;
+  UINT64                 TimerPeriod;
+  EFI_STATUS             Status;
+
+  ASSERT (gCpu != NULL);
+
+  Status = gCpu->GetTimerValue (gCpu, 0, &CurrentTick, &TimerPeriod);
+  if (EFI_ERROR (Status)) {
+    //
+    // The WinntGetTimerValue will return EFI_UNSUPPORTED. Set the
+    // TimerPeriod by ourselves.
+    //
+    CurrentTick += 1000000;
+  }
+  
+  return CurrentTick;
 }
 
 STATIC
@@ -113,19 +130,18 @@
 --*/
 {
   EFI_STATUS             Status;
-  EFI_CPU_ARCH_PROTOCOL  *Cpu;
   UINT64                 CurrentTick;
   UINT64                 TimerPeriod;
 
   //
   // Locate the Cpu Arch Protocol.
   //
-  Status = BS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, &Cpu);
+  Status = BS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&gCpu);
   if (EFI_ERROR (Status)) {
     return Status;
   }
 
-  Status = Cpu->GetTimerValue (Cpu, 0, &CurrentTick, &TimerPeriod);
+  Status = gCpu->GetTimerValue (gCpu, 0, &CurrentTick, &TimerPeriod);
   if (EFI_ERROR (Status)) {
     //
     // The WinntGetTimerValue will return EFI_UNSUPPORTED. Set the
@@ -138,7 +154,7 @@
   // The TimerPeriod is in femtosecond (1 femtosecond is  1e-15 second), so 1e+12
   // is divided by TimerPeriod to produce the Feq in tick/ms.
   //
-  Frequency = DivU64x32 (1000000000000, (UINTN) TimerPeriod, NULL);
+  Frequency = DivU64x32 (1000000000000ULL, (UINTN) TimerPeriod, NULL);
 
   return EFI_SUCCESS;
 }
@@ -787,7 +803,7 @@
   EFI_STATUS                    Status;
   EFI_SERVICE_BINDING_PROTOCOL  *Ip4Sb;
 
-  Status = BS->LocateProtocol (&gEfiIp4ServiceBindingProtocolGuid, NULL, &Ip4Sb);
+  Status = BS->LocateProtocol (&gEfiIp4ServiceBindingProtocolGuid, NULL, (VOID **)&Ip4Sb);
   if (EFI_ERROR (Status)) {
     return Status;
   }
@@ -844,7 +860,7 @@
         ChildHandle
         );
 
-  BS->LocateProtocol (&gEfiIp4ServiceBindingProtocolGuid, NULL, &Ip4Sb);
+  BS->LocateProtocol (&gEfiIp4ServiceBindingProtocolGuid, NULL, (VOID **)&Ip4Sb);
 
   Ip4Sb->DestroyChild (Ip4Sb, ChildHandle);
 }
diff --ignore-file-name-case -Naur ShellR33/Ping/Ping.inf GccShellR33/Ping/Ping.inf
--- ShellR33/Ping/Ping.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/Ping/Ping.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,24 +25,24 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   PingStrings.uni
   Ping.h
   Ping.c
 
 [includes.common]
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(EDK_SOURCE)\Foundation\Library\Dxe\Include
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(EDK_SOURCE)/Foundation/Library/Dxe/Include
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
@@ -52,7 +52,7 @@
   ArchProtocolLib
   EdkGuidLib
   EdkFrameworkGuidLib
-  EfiDriverLib
+#  EfiDriverLib
 
 [libraries.IA32]
   CpuIA32Lib
diff --ignore-file-name-case -Naur ShellR33/reset/reset.inf GccShellR33/reset/reset.inf
--- ShellR33/reset/reset.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/reset/reset.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    ResetStrings.uni
    Reset.c
    Reset.h 
                                           
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/rm/rm.inf GccShellR33/rm/rm.inf
--- ShellR33/rm/rm.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/rm/rm.inf	2009-09-22 15:37:05.000000000 -0700
@@ -41,23 +41,23 @@
 
 [sources.common]
    RmStrings.uni      
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    rm.h                        
    rm.c                 
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/sermode/sermode.c GccShellR33/sermode/sermode.c
--- ShellR33/sermode/sermode.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/sermode/sermode.c	2009-11-05 13:49:56.000000000 -0800
@@ -35,7 +35,7 @@
 
 #include EFI_PROTOCOL_DEFINITION (SerialIo)
 
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiSermodeGuid = EFI_SERMODEB_GUID;
 SHELL_VAR_CHECK_ITEM    SermodeCheckList[] = {
   {
@@ -104,7 +104,7 @@
 
     }
 
-    Status = BS->HandleProtocol (Handles[Index], &gEfiSerialIoProtocolGuid, &SerialIo);
+    Status = BS->HandleProtocol (Handles[Index], &gEfiSerialIoProtocolGuid, (VOID **)&SerialIo);
     if (!EFI_ERROR (Status)) {
       switch (SerialIo->Mode->Parity) {
       case DefaultParity:
@@ -454,7 +454,7 @@
       continue;
     }
 
-    Status = BS->HandleProtocol (Handles[Index], &gEfiSerialIoProtocolGuid, &SerialIo);
+    Status = BS->HandleProtocol (Handles[Index], &gEfiSerialIoProtocolGuid, (VOID **)&SerialIo);
     if (!EFI_ERROR (Status)) {
       Status = SerialIo->SetAttributes (
                           SerialIo,
diff --ignore-file-name-case -Naur ShellR33/sermode/sermode.inf GccShellR33/sermode/sermode.inf
--- ShellR33/sermode/sermode.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/sermode/sermode.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   SermodeStrings.uni
   sermode.c
   sermode.h
  
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/Shell.inf GccShellR33/Shell.inf
--- ShellR33/Shell.inf	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/Shell.inf	2009-11-07 12:33:52.000000000 -0800
@@ -25,179 +25,190 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  Library\ShellDebug.c
-  Library\DPath.c
-  Library\Init.c
-  Library\Lock.c
-  Library\Str.c
-  Library\IO.c
-  Library\Mem.c
-  Library\Misc.c
-  Library\Data.c
-  Library\RtData.c
-  Library\ShellEnvInt.c
-  Library\Handle.c
-  Library\FileIO.c
-  Library\ConsistMapping.c
-  Library\CRC.c
-  Library\Event.c
-  Library\Perf.c
-  Library\VarCheck.c
-  Library\HiiSupport.c  
-
-  newshell\NshellStrings.uni
-  newshell\init.c
-  newshell\nshell.h
-  newshell\fakehii.c
+  Library/ShellDebug.c
+  Library/DPath.c
+  Library/Init.c
+  Library/Lock.c
+  Library/Str.c
+  Library/IO.c
+  Library/Mem.c
+  Library/Misc.c
+  Library/Data.c
+  Library/RtData.c
+  Library/ShellEnvInt.c
+  Library/Handle.c
+  Library/FileIO.c
+  Library/ConsistMapping.c
+  Library/CRC.c
+  Library/Event.c
+  Library/Perf.c
+  Library/VarCheck.c
+  Library/HiiSupport.c  
+
+  newshell/NshellStrings.uni
+  newshell/init.c
+  newshell/nshell.h
+  newshell/fakehii.c  
+  newshell/DebugAssert.c
+
 
   ShCommonStrings.uni
-  shellenv\ShellenvHelpStrings.uni
-  shellenv\ShellenvStrings.uni
-  shellenv\ScriptCmdStrings.uni
-  shellenv\ConnectStrings.uni
-  shellenv\EchoStrings.uni
-  shellenv\HelpStrings.uni
-  shellenv\MapStrings.uni
-  shellenv\CdStrings.uni
-  shellenv\DhStrings.uni
-  
-  shellenv\cmddisp.c
-  shellenv\connect.c
-  shellenv\data.c
-  shellenv\exec.c
-  shellenv\init.c
-  shellenv\protid.c
-  shellenv\var.c
-  shellenv\conio.c
-  shellenv\consoleproxy.c
-  shellenv\handle.c
-  shellenv\dprot.c
-  shellenv\map.c
-  shellenv\marg.c
-  shellenv\batch.c
-  shellenv\if.c
-  shellenv\goto.c
-  shellenv\echo.c
-  shellenv\pause.c
-  shellenv\for.c
-  shellenv\wait.c
-  shellenv\help.c
-  shellenv\shelle.h
-  shellenv\shellenvguid.h
-  shellenv\parsecmd.c
-  shellenv\shift.c
+  shellenv/ShellenvHelpStrings.uni
+  shellenv/ShellenvStrings.uni
+  shellenv/ScriptCmdStrings.uni
+  shellenv/ConnectStrings.uni
+  shellenv/EchoStrings.uni
+  shellenv/HelpStrings.uni
+  shellenv/MapStrings.uni
+  shellenv/CdStrings.uni
+  shellenv/DhStrings.uni
+  
+  shellenv/cmddisp.c
+  shellenv/connect.c
+  shellenv/data.c
+  shellenv/exec.c
+  shellenv/init.c
+  shellenv/protid.c
+  shellenv/var.c
+  shellenv/conio.c
+  shellenv/consoleproxy.c
+  shellenv/handle.c
+  shellenv/dprot.c
+  shellenv/map.c
+  shellenv/marg.c
+  shellenv/batch.c
+  shellenv/if.c
+  shellenv/goto.c
+  shellenv/echo.c
+  shellenv/pause.c
+  shellenv/for.c
+  shellenv/wait.c
+  shellenv/help.c
+  shellenv/shelle.h
+  shellenv/shellenvguid.h
+  shellenv/parsecmd.c
+  shellenv/shift.c
  
-  unload\UnloadStrings.uni
-  unload\unload.c
+  unload/UnloadStrings.uni
+  unload/unload.c
   
-  attrib\AttribStrings.uni
-  attrib\attrib.c
-  attrib\attrib.h
-
-  cls\clsstrings.uni
-  cls\cls.c
-
-  cp\CpStrings.uni
-  cp\cp.h
-  cp\cp.c
+  attrib/AttribStrings.uni
+  attrib/attrib.c
+  attrib/attrib.h
+
+  cls/clsstrings.uni
+  cls/cls.c
+
+  cp/CpStrings.uni
+  cp/cp.h
+  cp/cp.c
  
-  date\DateStrings.uni
-  date\date.c
-  date\date.h
-
-  load\LoadStrings.uni
-  load\load.c
-  load\load.h
-
-  ls\LsStrings.uni
-  ls\ls.h
-  ls\ls.c
-
-  mkdir\MkdirStrings.uni
-  mkdir\mkdir.c
-  mkdir\mkdir.h
-
-  mv\MvStrings.uni
-  mv\mv.c
-  mv\mv.h
+  date/DateStrings.uni
+  date/date.c
+  date/date.h
+
+  load/LoadStrings.uni
+  load/load.c
+  load/load.h
+
+  ls/LsStrings.uni
+  ls/ls.h
+  ls/ls.c
+
+  mkdir/MkdirStrings.uni
+  mkdir/mkdir.c
+  mkdir/mkdir.h
+
+  mv/MvStrings.uni
+  mv/mv.c
+  mv/mv.h
  
-  reset\ResetStrings.uni
-  reset\reset.c
-  reset\reset.h
-  
-  rm\RmStrings.uni
-  rm\rm.h
-  rm\rm.c
-  
-  type\TypeStrings.uni
-  type\type.c
-  type\type.h
-  time\TimeStrings.uni
-  time\time.c
-  time\time.h
-
-  touch\TouchStrings.uni
-  touch\touch.c
-  touch\touch.h
-
-  vol\VolStrings.uni
-  vol\vol.c
-  vol\vol.h
-
-  ver\VerStrings.uni
-  ver\ver.c
-  ver\ver.h
-  
-  drivers\driversStrings.uni
-  drivers\drivers.c
-  drivers\drivers.h
-  
-  drvcfg\DrvcfgStrings.uni
-  drvcfg\drvcfg.c
-  drvcfg\drvcfg.h
+  reset/ResetStrings.uni
+  reset/reset.c
+  reset/reset.h
+  
+  rm/RmStrings.uni
+  rm/rm.h
+  rm/rm.c
+  
+  type/TypeStrings.uni
+  type/type.c
+  type/type.h
+  time/TimeStrings.uni
+  time/time.c
+  time/time.h
+
+  touch/TouchStrings.uni
+  touch/touch.c
+  touch/touch.h
+
+  vol/VolStrings.uni
+  vol/vol.c
+  vol/vol.h
+
+  ver/VerStrings.uni
+  ver/ver.c
+  ver/ver.h
+  
+  drivers/driversStrings.uni
+  drivers/drivers.c
+  drivers/drivers.h
+  
+  drvcfg/DrvcfgStrings.uni
+  drvcfg/drvcfg.c
+  drvcfg/drvcfg.h
         
-  drvdiag\DrvdiagStrings.uni
-  drvdiag\drvdiag.c
-  drvdiag\drvdiag.h
+  drvdiag/DrvdiagStrings.uni
+  drvdiag/drvdiag.c
+  drvdiag/drvdiag.h
  
 
 
 [sources.ia32]
-  ver\ia32\ver32.c
-  Library\ia32\math.c
-  Library\ia32\initplat.c
+  ver/IA32/ver32.c
+  Library/IA32/math.c
+  Library/IA32/initplat.c
+  Library/IA32/DivU64x32Remainder.S  | GCC
+  Library/IA32/LShiftU64.S           | GCC
+  Library/IA32/RShiftU64.S           | GCC
+  Library/IA32/MultU64x32.S          | GCC
 
 
 [sources.ipf]
-  ver\ipf\ver64.c
-  Library\ipf\math.c
-  Library\ipf\initplat.c
-  Library\ipf\palproc.s
-  Library\ipf\salpal.c
+  ver/ipf/ver64.c
+  Library/ipf/math.c
+  Library/ipf/initplat.c
+  Library/ipf/palproc.s
+  Library/ipf/salpal.c
 
 [sources.EBC]
-  ver\ebc\verEbc.c
-  Library\EBC\math.c
-  Library\EBC\initplat.c
+  ver/ebc/verEbc.c
+  Library/EBC/math.c
+  Library/EBC/initplat.c
 
 [sources.x64]
-  ver\ia32\ver32.c
-  Library\ipf\math.c
-  Library\ia32\initplat.c
+  ver/ia32/ver32.c
+  Library/ipf/math.c
+  Library/ia32/initplat.c
+
+[sources.ARM]
+  ver/ia32/ver32.c
+  Library/ipf/math.c
+  Library/ia32/initplat.c
 
 [includes.common]
   .
-  .\Inc
-  .\ver
-  .\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
+  ./Inc
+  ./ver
+  ./Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
   $(DEST_DIR)
 
 [libraries.common]
diff --ignore-file-name-case -Naur ShellR33/shellenv/conio.c GccShellR33/shellenv/conio.c
--- ShellR33/shellenv/conio.c	2009-08-13 22:57:02.000000000 -0700
+++ GccShellR33/shellenv/conio.c	2009-10-14 16:36:30.000000000 -0700
@@ -1,6 +1,6 @@
 /*++
 
-Copyright (c) 2005 - 2009, Intel Corporation                                                         
+Copyright (c) 2005 - 2008, 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         
@@ -890,14 +890,7 @@
     // If we need to update the output do so now
     //
     if (Update != -1) {
-      if ((ConOut->Mode->CursorColumn != (INT32) Column) ||  (ConOut->Mode->CursorRow != (INT32) Row)) {
-        PrintAt (Column, Row, L"%s%.*s", Str + Update, Delete, L"");
-      } else {
-        //
-        // Don't need to SetCursorPosition() if the current cursor position is not changed 
-        //
-        PrintAt ((UINTN) -1, (UINTN) -1, L"%s%.*s", Str + Update, Delete, L"");
-      }
+      PrintAt (Column, Row, L"%s%.*s", Str + Update, Delete, L"");
       Len = StrLen (Str);
 
       if (Delete) {
@@ -953,12 +946,10 @@
 
       Delete = 0;
     }
-    if ((ConOut->Mode->CursorColumn != (INT32) Column) ||  (ConOut->Mode->CursorRow != (INT32) Row)) {
-      //
-      // Set the cursor position for this key
-      //
-      ConOut->SetCursorPosition (ConOut, Column, Row);
-    }
+    //
+    // Set the cursor position for this key
+    //
+    ConOut->SetCursorPosition (ConOut, Column, Row);
   } while (!Done);
 
   //
diff --ignore-file-name-case -Naur ShellR33/shellenv/dprot.c GccShellR33/shellenv/dprot.c
--- ShellR33/shellenv/dprot.c	2008-11-24 21:49:58.000000000 -0800
+++ GccShellR33/shellenv/dprot.c	2009-09-22 19:19:20.000000000 -0700
@@ -23,7 +23,7 @@
 
 #include "shelle.h"
 #include "shellenvguid.h"
-#include "acpi.h"
+#include "Acpi.h"
 
 STATIC CHAR16 *SEnvDP_IlleagalStr[] = { L"Illegal" };
 
@@ -1294,6 +1294,9 @@
     case EfiIsaAcpiResourceInterrupt:
       PrintToken (STRING_TOKEN (STR_SHELLENV_DPROT_INT), HiiEnvHandle);
       break;
+      
+    default:
+      break;
     }
 
     if (IsaIo->ResourceList->ResourceItem[Index].StartRange == IsaIo->ResourceList->ResourceItem[Index].EndRange) {
diff --ignore-file-name-case -Naur ShellR33/shellenv/exec.c GccShellR33/shellenv/exec.c
--- ShellR33/shellenv/exec.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/shellenv/exec.c	2009-09-22 15:37:05.000000000 -0700
@@ -1868,7 +1868,7 @@
     return ;
   }
   //
-  // Processing foo: or foo:\
+  // Processing foo: or foo:/
   //
   if (PathPos != -1 && Ptr1 == NULL) {
     return ;
diff --ignore-file-name-case -Naur ShellR33/shellenv/for.c GccShellR33/shellenv/for.c
--- ShellR33/shellenv/for.c	2006-06-12 23:18:21.000000000 -0700
+++ GccShellR33/shellenv/for.c	2009-09-22 15:37:05.000000000 -0700
@@ -24,309 +24,8 @@
 #include "shelle.h"
 #include "shellenvguid.h"
 
-/*
-BOOLEAN
-CheckInterValue (
-  IN CHAR16                        *wszValueStr,
-  OUT INT32                        *pnValue
-  )
-{
-  UINTN                                    uPos = 0;
-  INT32                                    nSign = 0;
-  UINTN                                    uDigitStart = 0;
-  BOOLEAN                                bDigitFound = FALSE;
-  
-  while (wszValueStr[uPos]) {
-    if (L'+' == wszValueStr[uPos] || L'-' == wszValueStr[uPos]) {
-      if (0 != nSign) {
-        // sign already resolved, error
-        return FALSE;
-      }
-      nSign = (L'+' == wszValueStr[uPos]) ? 1 : -1;
-      uDigitStart = uPos + 1;
-    } else if (wszValueStr[uPos] < L'0' || wszValueStr[uPos] > L'9') {
-      // not digits or sign symbol, error
-      return FALSE;
-    } else {
-      if (0 == nSign) {
-      	  // no sign symbol before the first digit, take it as postive
-        nSign = 1;
-        uDigitStart = uPos;
-      }
-      bDigitFound = TRUE;
-    }
-    uPos++;
-  } // end of while
-
-  if (FALSE == bDigitFound) {
-    return FALSE;
-  }
-
-  *pnValue = Atoi (wszValueStr + uDigitStart) * nSign;
-  return TRUE;
-}
-
-BOOLEAN
-ExtractFromArg (
-  IN CHAR16                             *wszRng,
-  OUT INT32                             *pnStart,
-  OUT INT32                             *pnEnd,
-  OUT INT32                             *pnStep
-  )
-{
-  UINTN                                     uStrLen = 0;
-  UINTN                                     uPos = 1;
-  CHAR16                                   *pBreak1 = NULL;
-  CHAR16                                   *pBreak2 = NULL;
-  INT32                                      nTmp;
-  
-
-  uStrLen = StrLen (wszRng);
-  // there should be at least 5 characters
-  if (uStrLen < 5) {
-    return FALSE;
-  }
-
-  if (L'<' != wszRng[0] || L'>' != wszRng[uStrLen - 1]) {
-    return FALSE;
-  }
-
-  while (wszRng[uPos] != L'>') {
-    if (L',' == wszRng[uPos]) {
-      if (NULL == pBreak1) {
-        pBreak1 = &wszRng[uPos];
-      } else if (NULL == pBreak2) {
-        pBreak2 = &wszRng[uPos];
-        break;
-      }
-    }
-  } // end of while
-
-  // no ',' found
-  if (NULL == pBreak1) {
-    return FALSE;
-  } else if (pBreak1 == &wszRng[1]) {
-    // nothing between '<' and first ','
-    return FALSE;
-  } else if (pBreak1 == &wszRng[uStrLen - 2]) {
-    // nothing between first ',' and '>'
-    return FALSE;
-  } else if (pBreak1 - &wszRng[0] > 7) {
-    // too big number
-    return FALSE;
-  }
-  
-  if (NULL != pBreak2) {
-    if (pBreak2 = pBreak1 + 1) {
-      // nothing between adjacent ','
-      return FALSE;
-    } else if (pBreak2 == &wszRng[uStrLen - 2]) {
-      // nothing between second ',' and '>'
-      return FALSE;
-    } else if (pBreak2 - pBreak1 > 7) {
-      // too big number
-      return FALSE;
-    }
-  }
 
-  *pBreak1 = 0;
-  if (FALSE == CheckInterValue(&wszRng[1], &nTmp)) {
-    *pBreak1 = L',';
-    return FALSE;
-  } else {
-    *pBreak1 = L',';
-    *pnStart = nTmp;
-  }
-
-  if (NULL != pBreak2) {
-    *pBreak2 = 0;
-    if (FALSE == CheckInterValue(pBreak1 + 1, &nTmp)) {
-      *pBreak2 = L',';
-      return FALSE;
-    } else {
-      *pBreak2 = L',';
-      *pnEnd = nTmp;
-    }
-  } else {
-    pBreak2 = pBreak1;
-  }
-  
-  if (&wszRng[uStrLen - 1] - pBreak2 > 7) {
-    // too big number
-    return FALSE;
-  }
-
-  wszRng[uStrLen - 1] = 0;
-  if (FALSE == CheckInterValue(pBreak2 + 1, &nTmp)) {
-    wszRng[uStrLen - 1] = L',';
-    return FALSE;
-  } else {
-    wszRng[uStrLen - 1] = L',';
-    if (pBreak1 == pBreak2) {
-      *pnEnd = nTmp;
-      *pnStep = 1;
-    } else {
-      *pnStep = nTmp;
-    }
-  }  
-  return TRUE;
-}
-
-EFI_STATUS
-SEnvBatchPushFor2Stack (
-  IN  EFI_BATCH_STMT_TYPE            StmtType,
-  IN  BOOLEAN                        PushExtraStack
-  )
-/*++
-
-Routine Description:
 
-  Push a node into statement stack.
-
-Arguments:
-  StmtType         Statement type to be pushed
-  PushExtraStack   Push into extra statement stack or current statement stack
-
-Returns:
-  EFI_SUCCESS      The function finished sucessfully
-
---
-{
-  EFI_BATCH_STATEMENT                *Stmt;
-  EFI_LIST_ENTRY                     FileList;
-  EFI_LIST_ENTRY                     *Link;
-  EFI_BATCH_SCRIPT                   *Script;
-  EFI_BATCH_VAR_VALUE                *VarValue;
-  SHELL_FILE_ARG                     *Arg;
-  INTN                                  Index;
-  EFI_STATUS                         Status;
-  CHAR16                             Char;
-
-  INT32                               nStart, nEnd, nStep;
-  CHAR16                             wszValue[10];
-  
-  Status   = EFI_SUCCESS;
-  VarValue = NULL;
-
-  // this function only deals with 'for %var run <...>'
-  if (StmtFor != StmtType) {
-    return EFI_ABORTED;
-  }
-  
-  if (IsListEmpty (&ScriptStack.ScriptList)) {
-    return EFI_ABORTED;
-  }
-  
-  Script = CR (
-             ScriptStack.ScriptList.Flink, 
-             EFI_BATCH_SCRIPT, 
-             Link,
-             EFI_BATCH_SCRIPT_SIGNATURE
-             );
-
-  Stmt = AllocateZeroPool (sizeof (EFI_BATCH_STATEMENT));
-  if (Stmt == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  Stmt->Signature    = EFI_BATCH_STMT_SIGNATURE;
-  Stmt->StmtType     = StmtType;
-  Stmt->BeginFilePos = Script->FilePosition;
-  InitializeListHead (&Stmt->StmtInfo.ForInfo.ValueList);
-
-  //
-  // If we're pushing if statement to extra statement stack, set condition 
-  // to TRUE, for in case we need to jump into this statement later, the 
-  // condition should be treated as TRUE.
-  //  
-  if (Stmt->StmtType == StmtFor) {
-    Stmt->StmtInfo.ForInfo.BeginLineNum = SEnvGetLineNumber();
-  }
-
-  //
-  // if we're pushing FOR statement to the current statement stack, expand the
-  // command line argument to a list of variable values.
-  //
-  if (Stmt->StmtType == StmtFor && 
-      !PushExtraStack && 
-      SEnvBatchGetCondition ()
-      ) {
-
-    if (FALSE == ExtractFromArg(SI->Argv[3], &nStart, &nEnd, &nStep)) {
-      Status = EFI_INVALID_PARAMETER;
-      goto Done;
-    }
-
-    Stmt->StmtInfo.ForInfo.VariableName[0] = SI->Argv[1][0];
-    
-    for (Index = nStart; Index <= nEnd; Index += nStep) {     
-        VarValue = AllocateZeroPool (sizeof(EFI_BATCH_VAR_VALUE));
-        if (VarValue == NULL) {
-          Status = EFI_OUT_OF_RESOURCES;
-          goto Done;
-        }
-
-        SPrint (wszValue, sizeof(wszValue), "%d", Index);
-        VarValue->Signature = EFI_BATCH_VAR_SIGNATURE;        
-        VarValue->Value = AllocateZeroPool (StrLen (wszValue));
-        if (VarValue->Value == NULL) {
-          Status = EFI_OUT_OF_RESOURCES;
-          goto Done;
-        }
-        StrCpy (VarValue->Value, wszValue]);
-     
-        InsertTailList (&Stmt->StmtInfo.ForInfo.ValueList, &VarValue->Link);     
-    }
-  }
-  
-  //
-  // Push the node to stack and increment the nest level
-  //
-  if (PushExtraStack) {
-    InsertHeadList (&ExtraStmtStack.StmtList, &Stmt->Link);
-    ExtraStmtStack.NestLevel ++;
-  
-  } else {
-    InsertHeadList (&Script->StmtStack.StmtList, &Stmt->Link);
-    Script->StmtStack.NestLevel ++;
-  }
-
-Done:
-  if (EFI_ERROR (Status)) {
-    if (VarValue != NULL) {
-      if (VarValue->Value != NULL) {
-        FreePool (VarValue->Value);
-      }
-      FreePool (VarValue);
-    }
-    
-    if (Stmt->StmtType == StmtFor) {
-      while (!IsListEmpty (&Stmt->StmtInfo.ForInfo.ValueList)) {
-        Link = Stmt->StmtInfo.ForInfo.ValueList.Flink;
-        
-        VarValue = CR (
-                     Link, 
-                     EFI_BATCH_VAR_VALUE, 
-                     Link, 
-                     EFI_BATCH_VAR_SIGNATURE
-                     );
-                     
-        if (VarValue->Value != NULL) {
-          FreePool (VarValue->Value);
-        }
-        
-        RemoveEntryList (&VarValue->Link);
-        FreePool (VarValue);
-      }
-    }
-    
-    ShellFreeFileList (&FileList);
-    FreePool (Stmt);
-  }
-    
-  return Status;
-}
-*/
 EFI_STATUS
 SEnvCmdForRun (
   IN EFI_HANDLE                         hImageHandle,
diff --ignore-file-name-case -Naur ShellR33/shellenv/init.c GccShellR33/shellenv/init.c
--- ShellR33/shellenv/init.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/shellenv/init.c	2009-09-22 15:37:05.000000000 -0700
@@ -143,7 +143,7 @@
     Status = BS->HandleProtocol (
                   mOldSEnv->Handle,
                   &ShellEnvProtocol,
-                  &(mOldSEnv->Interface)
+                  (VOID **)&(mOldSEnv->Interface)
                   );
     ASSERT (!EFI_ERROR (Status));
     Status = BS->ReinstallProtocolInterface (
diff --ignore-file-name-case -Naur ShellR33/shellenv/map.c GccShellR33/shellenv/map.c
--- ShellR33/shellenv/map.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/shellenv/map.c	2009-10-14 16:36:30.000000000 -0700
@@ -2038,13 +2038,13 @@
     goto Done;
   }
 
-  Status = BS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, &BlockIo);
+  Status = BS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo);
   //
   // This is just for NT32, because fsntx has no block io protocol installed
   // but fsntx has installed simple file system protocol
   //
   if (EFI_ERROR (Status)) {
-    Status = BS->HandleProtocol (Handle, &gEfiSimpleFileSystemProtocolGuid, &BlockIo);
+    Status = BS->HandleProtocol (Handle, &gEfiSimpleFileSystemProtocolGuid, (VOID **)&BlockIo);
   }
 
   if (EFI_ERROR (Status)) {
diff --ignore-file-name-case -Naur ShellR33/shellenv/parsecmd.h GccShellR33/shellenv/parsecmd.h
--- ShellR33/shellenv/parsecmd.h	2006-06-12 23:18:21.000000000 -0700
+++ GccShellR33/shellenv/parsecmd.h	2009-11-05 13:49:56.000000000 -0800
@@ -103,4 +103,4 @@
   IN OUT SHELL_PARSED_ARGS    *args
   );
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/shellenv/protid.c GccShellR33/shellenv/protid.c
--- ShellR33/shellenv/protid.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/shellenv/protid.c	2009-09-22 15:37:05.000000000 -0700
@@ -1146,7 +1146,7 @@
 EFI_STATUS
 GetDriverName (
   EFI_HANDLE  DriverBindingHandle,
-  UINT8       *Language,
+  CHAR8       *Language,
   BOOLEAN     ImageName,
   CHAR16      **DriverName
   )
@@ -1539,7 +1539,7 @@
 
     DevicePath      = NULL;
     BestDeviceName  = NULL;
-    Status          = BS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, &DevicePath);
+    Status          = BS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, (VOID **)&DevicePath);
 
     Print (L"\n");
     PrintToken (STRING_TOKEN (STR_SHELLENV_PROTID_CONTROLLER_NAME), HiiEnvHandle);
diff --ignore-file-name-case -Naur ShellR33/ShellFull.inf GccShellR33/ShellFull.inf
--- ShellR33/ShellFull.inf	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/ShellFull.inf	2009-11-07 12:33:52.000000000 -0800
@@ -20,300 +20,310 @@
 #--*/
 
 [defines]
-BASE_NAME            = Shell
-FILE_GUID            = c57ad6b7-0515-40a8-9d21-551652854e37
+BASE_NAME            = ShellFull
+FILE_GUID            = 1903FB23-E526-4BDA-85E4-D68F2EEF0C20
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  Library\ShellDebug.c
-  Library\DPath.c
-  Library\Init.c
-  Library\Lock.c
-  Library\Str.c
-  Library\IO.c
-  Library\Mem.c
-  Library\Misc.c
-  Library\Data.c
-  Library\RtData.c
-  Library\ShellEnvInt.c
-  Library\Handle.c
-  Library\FileIO.c
-  Library\ConsistMapping.c
-  Library\CRC.c
-  Library\Event.c
-  Library\Perf.c
-  Library\VarCheck.c
-  Library\HiiSupport.c
-
-  newshell\NshellStrings.uni
-  newshell\init.c
-  newshell\nshell.h
-  newshell\fakehii.c
+  Library/ShellDebug.c
+  Library/DPath.c
+  Library/Init.c
+  Library/Lock.c
+  Library/Str.c
+  Library/IO.c
+  Library/Mem.c
+  Library/Misc.c
+  Library/Data.c
+  Library/RtData.c
+  Library/ShellEnvInt.c
+  Library/Handle.c
+  Library/FileIO.c
+  Library/ConsistMapping.c
+  Library/CRC.c
+  Library/Event.c
+  Library/Perf.c
+  Library/VarCheck.c
+  Library/HiiSupport.c
+
+  newshell/NshellStrings.uni
+  newshell/init.c
+  newshell/nshell.h
+  newshell/fakehii.c
+  newshell/DebugAssert.c
 
   ShCommonStrings.uni
-  shellenv\ShellenvHelpStrings.uni
-  shellenv\ShellenvStrings.uni
-  shellenv\ScriptCmdStrings.uni
-  shellenv\ConnectStrings.uni
-  shellenv\EchoStrings.uni
-  shellenv\HelpStrings.uni
-  shellenv\MapStrings.uni
-  shellenv\CdStrings.uni
-  shellenv\DhStrings.uni
-  
-  shellenv\cmddisp.c
-  shellenv\connect.c
-  shellenv\data.c
-  shellenv\exec.c
-  shellenv\init.c
-  shellenv\protid.c
-  shellenv\var.c
-  shellenv\conio.c
-  shellenv\consoleproxy.c
-  shellenv\handle.c
-  shellenv\dprot.c
-  shellenv\map.c
-  shellenv\marg.c
-  shellenv\batch.c
-  shellenv\if.c
-  shellenv\goto.c
-  shellenv\echo.c
-  shellenv\pause.c
-  shellenv\for.c
-  shellenv\wait.c
-  shellenv\help.c
-  shellenv\shelle.h
-  shellenv\shellenvguid.h
-  shellenv\parsecmd.c
-  shellenv\shift.c
+  shellenv/ShellenvHelpStrings.uni
+  shellenv/ShellenvStrings.uni
+  shellenv/ScriptCmdStrings.uni
+  shellenv/ConnectStrings.uni
+  shellenv/EchoStrings.uni
+  shellenv/HelpStrings.uni
+  shellenv/MapStrings.uni
+  shellenv/CdStrings.uni
+  shellenv/DhStrings.uni
+  
+  shellenv/cmddisp.c
+  shellenv/connect.c
+  shellenv/data.c
+  shellenv/exec.c
+  shellenv/init.c
+  shellenv/protid.c
+  shellenv/var.c
+  shellenv/conio.c
+  shellenv/consoleproxy.c
+  shellenv/handle.c
+  shellenv/dprot.c
+  shellenv/map.c
+  shellenv/marg.c
+  shellenv/batch.c
+  shellenv/if.c
+  shellenv/goto.c
+  shellenv/echo.c
+  shellenv/pause.c
+  shellenv/for.c
+  shellenv/wait.c
+  shellenv/help.c
+  shellenv/shelle.h
+  shellenv/shellenvguid.h
+  shellenv/parsecmd.c
+  shellenv/shift.c
  
-  unload\UnloadStrings.uni
-  unload\unload.c
+  unload/UnloadStrings.uni
+  unload/unload.c
   
-  attrib\AttribStrings.uni
-  attrib\attrib.c
-  attrib\attrib.h
-
-  cls\clsstrings.uni
-  cls\cls.c
-
-  cp\CpStrings.uni
-  cp\cp.h
-  cp\cp.c
+  attrib/AttribStrings.uni
+  attrib/attrib.c
+  attrib/attrib.h
+
+  cls/clsstrings.uni
+  cls/cls.c
+
+  cp/CpStrings.uni
+  cp/cp.h
+  cp/cp.c
  
-  date\DateStrings.uni
-  date\date.c
-  date\date.h
-
-  load\LoadStrings.uni
-  load\load.c
-  load\load.h
-
-  ls\LsStrings.uni
-  ls\ls.h
-  ls\ls.c
-
-  mkdir\MkdirStrings.uni
-  mkdir\mkdir.c
-  mkdir\mkdir.h
-
-  mv\MvStrings.uni
-  mv\mv.c
-  mv\mv.h
+  date/DateStrings.uni
+  date/date.c
+  date/date.h
+
+  load/LoadStrings.uni
+  load/load.c
+  load/load.h
+
+  ls/LsStrings.uni
+  ls/ls.h
+  ls/ls.c
+
+  mkdir/MkdirStrings.uni
+  mkdir/mkdir.c
+  mkdir/mkdir.h
+
+  mv/MvStrings.uni
+  mv/mv.c
+  mv/mv.h
  
-  reset\ResetStrings.uni
-  reset\reset.c
-  reset\reset.h
-  
-  rm\RmStrings.uni
-  rm\rm.h
-  rm\rm.c
-  
-  type\TypeStrings.uni
-  type\type.c
-  type\type.h
-  time\TimeStrings.uni
-  time\time.c
-  time\time.h
-
-  touch\TouchStrings.uni
-  touch\touch.c
-  touch\touch.h
-
-  vol\VolStrings.uni
-  vol\vol.c
-  vol\vol.h
-
-  ver\VerStrings.uni
-  ver\ver.c
-  ver\ver.h
-  
-  drivers\driversStrings.uni
-  drivers\drivers.c
-  drivers\drivers.h
-  
-  drvcfg\DrvcfgStrings.uni
-  drvcfg\drvcfg.c
-  drvcfg\drvcfg.h
+  reset/ResetStrings.uni
+  reset/reset.c
+  reset/reset.h
+  
+  rm/RmStrings.uni
+  rm/rm.h
+  rm/rm.c
+  
+  type/TypeStrings.uni
+  type/type.c
+  type/type.h
+  time/TimeStrings.uni
+  time/time.c
+  time/time.h
+
+  touch/TouchStrings.uni
+  touch/touch.c
+  touch/touch.h
+
+  vol/VolStrings.uni
+  vol/vol.c
+  vol/vol.h
+
+  ver/VerStrings.uni
+  ver/ver.c
+  ver/ver.h
+  
+  drivers/driversStrings.uni
+  drivers/drivers.c
+  drivers/drivers.h
+  
+  drvcfg/DrvcfgStrings.uni
+  drvcfg/drvcfg.c
+  drvcfg/drvcfg.h
         
-  drvdiag\DrvdiagStrings.uni
-  drvdiag\drvdiag.c
-  drvdiag\drvdiag.h
-  
-  comp\CompStrings.uni
-  comp\comp.c
-  
-  dblk\dblkStrings.uni
-  dblk\dblk.c
-  dblk\efidump.c
+  drvdiag/DrvdiagStrings.uni
+  drvdiag/drvdiag.c
+  drvdiag/drvdiag.h
+  
+  comp/CompStrings.uni
+  comp/comp.c
+  
+  dblk/dblkStrings.uni
+  dblk/dblk.c
+  dblk/efidump.c
  
-  devices\DevicesStrings.uni
-  devices\devices.c
+  devices/DevicesStrings.uni
+  devices/devices.c
   
-  devicetree\DevicetreeStrings.uni
-  devicetree\devicetree.c
+  devicetree/DevicetreeStrings.uni
+  devicetree/devicetree.c
   
-  dmem\MemStrings.uni
-  dmem\DebugStrings.uni  
-  dmem\mem.c
-  dmem\MemCommonPart.c
-  dmem\efidump.c  
-  
-  dmpstore\DmpstoreStrings.uni
-  dmpstore\dmpstore.c
-  
-  edit\EditStrings.uni
-  edit\main.c
-  edit\libFileBuffer.c
-  edit\libEditor.c
-  edit\libTitleBar.c
-  edit\libStatusBar.c
-  edit\libInputBar.c
-  edit\libMenuBar.c
-  edit\libMisc.c 
-  
-  eficompress\CompressStrings.uni
-  eficompress\compressMain.c
-  eficompress\compress.c   
-  
-  efidecompress\DecompressStrings.uni
-  efidecompress\decompress.c
-  
-  err\ErrStrings.uni
-  err\err.c
-  
-  guid\GuidStrings.uni
-  guid\guid.c
-  
-  hexedit\HexeditStrings.uni
-  hexedit\main.c
-  hexedit\libBufferImage.c
-  hexedit\libFileImage.c
-  hexedit\libDiskImage.c
-  hexedit\libMemImage.c
-  hexedit\libEditor.c
-  hexedit\libTitleBar.c
-  hexedit\libStatusBar.c
-  hexedit\libInputBar.c
-  hexedit\libMenuBar.c
-  hexedit\libClipBoard.c
-  hexedit\libMisc.c
-
-  IfConfig\IfConfigStrings.uni
-  IfConfig\IfConfig.c
-  IfConfig\IfConfig.h
-  IfConfig\ShellNetHelper.c
-
-  ipconfig\IpConfigStrings.uni
-  ipconfig\IpConfig.c
-  
-  loadpcirom\LoadPciRomStrings.uni
-  loadpcirom\LoadPciRom.c
-  
-  mem\MemStrings.uni
-  mem\DebugStrings.uni  
-  mem\mm.c
-  mem\MemCommonPart.c
-  mem\efidump.c  
-  
-  memmap\memmapStrings.uni
-  memmap\memmap.c
-  
-  mm\MmStrings.uni
-  mm\mm.c
-  
-  mode\ModeStrings.uni
-  mode\mode.c
-  
-  mount\MountStrings.uni
-  mount\mount.c
-  
-  openinfo\OPeninfoStrings.uni
-  openinfo\openinfo.c
-
-  Ping\PingStrings.uni
-  Ping\Ping.c
-
-  pci\PciStrings.uni
-  pci\pci.c
-  pci\pci_class.c
-  
-  sermode\SermodeStrings.uni
-  sermode\sermode.c
-  
-  smbiosview\SmBiosViewStrings.uni
-  smbiosview\QueryTable.c
-  smbiosview\EventLogInfo.c
-  smbiosview\PrintInfo.c
-  smbiosview\LibSmbiosView.c
-  smbiosview\smbiosview.c
-  smbiosview\smbios.c
+  dmem/MemStrings.uni
+  dmem/DebugStrings.uni  
+  dmem/mem.c
+  dmem/MemCommonPart.c
+  dmem/efidump.c  
+  
+  dmpstore/DmpstoreStrings.uni
+  dmpstore/dmpstore.c
+  
+  edit/EditStrings.uni
+  edit/main.c
+  edit/libFileBuffer.c
+  edit/libEditor.c
+  edit/libTitleBar.c
+  edit/libStatusBar.c
+  edit/libInputBar.c
+  edit/libMenuBar.c
+  edit/libMisc.c 
+  
+  eficompress/CompressStrings.uni
+  eficompress/compressMain.c
+  eficompress/compress.c   
+  
+  efidecompress/DecompressStrings.uni
+  efidecompress/decompress.c
+  
+  err/ErrStrings.uni
+  err/err.c
+  
+  guid/GuidStrings.uni
+  guid/guid.c
+  
+  hexedit/HexeditStrings.uni
+  hexedit/main.c
+  hexedit/libBufferImage.c
+  hexedit/libFileImage.c
+  hexedit/libDiskImage.c
+  hexedit/libMemImage.c
+  hexedit/libEditor.c
+  hexedit/libTitleBar.c
+  hexedit/libStatusBar.c
+  hexedit/libInputBar.c
+  hexedit/libMenuBar.c
+  hexedit/libClipBoard.c
+  hexedit/libMisc.c
+
+  IfConfig/IfConfigStrings.uni
+  IfConfig/IfConfig.c
+  IfConfig/IfConfig.h
+  IfConfig/ShellNetHelper.c
+
+  ipconfig/IpConfigStrings.uni
+  ipconfig/IpConfig.c
+  
+  loadpcirom/LoadPciRomStrings.uni
+  loadpcirom/LoadPciRom.c
+  
+  mem/MemStrings.uni
+  mem/DebugStrings.uni  
+  mem/mm.c
+  mem/MemCommonPart.c
+  mem/efidump.c  
+  
+  memmap/memmapStrings.uni
+  memmap/memmap.c
+  
+  mm/MmStrings.uni
+  mm/mm.c
+  
+  mode/ModeStrings.uni
+  mode/mode.c
+  
+  mount/MountStrings.uni
+  mount/mount.c
+  
+  openinfo/OPeninfoStrings.uni
+  openinfo/openinfo.c
+
+  Ping/PingStrings.uni
+  Ping/Ping.c
+
+  pci/PciStrings.uni
+  pci/pci.c
+  pci/pci_class.c
+  
+  sermode/SermodeStrings.uni
+  sermode/sermode.c
+  
+  smbiosview/SmBiosViewStrings.uni
+  smbiosview/QueryTable.c
+  smbiosview/EventLogInfo.c
+  smbiosview/PrintInfo.c
+  smbiosview/LibSmbiosView.c
+  smbiosview/smbiosview.c
+  smbiosview/smbios.c
   
-  stall\stallStrings.uni
-  stall\stall.c
+  stall/stallStrings.uni
+  stall/stall.c
   
-  telnetmgmt\TelnetMgmtStrings.uni
-  telnetmgmt\TelnetMgmt.c
+  telnetmgmt/TelnetMgmtStrings.uni
+  telnetmgmt/TelnetMgmt.c
   
-  tzone\TZoneStrings.uni
-  tzone\tzone.c
+  tzone/TZoneStrings.uni
+  tzone/tzone.c
 
 [sources.ia32]
-  ver\ia32\ver32.c
-  Library\ia32\math.c
-  Library\ia32\initplat.c
+  ver/ia32/ver32.c
+  Library/IA32/math.c
+  Library/IA32/initplat.c
+  Library/IA32/DivU64x32Remainder.S  | GCC
+  Library/IA32/LShiftU64.S           | GCC
+  Library/IA32/RShiftU64.S           | GCC
+  Library/IA32/MultU64x32.S          | GCC
 
 [sources.ipf]
-  ver\ipf\ver64.c
-  Library\ipf\math.c
-  Library\ipf\initplat.c
-  Library\ipf\palproc.s
-  Library\ipf\salpal.c
+  ver/ipf/ver64.c
+  Library/ipf/math.c
+  Library/ipf/initplat.c
+  Library/ipf/palproc.s
+  Library/ipf/salpal.c
 
 [sources.EBC]
-  ver\ebc\verEbc.c
-  Library\EBC\math.c
-  Library\EBC\initplat.c
+  ver/ebc/verEbc.c
+  Library/EBC/math.c
+  Library/EBC/initplat.c
 
 [sources.x64]
-  ver\ia32\ver32.c
-  Library\ipf\math.c
-  Library\ia32\initplat.c
+  ver/ia32/ver32.c
+  Library/ipf/math.c
+  Library/ia32/initplat.c
+
+[sources.ARM]
+  ver/ia32/ver32.c
+  Library/ipf/math.c
+  Library/ia32/initplat.c
 
 [includes.common]
   .
-  .\Inc
-  .\ver
-  .\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(EDK_SOURCE)\Foundation\Library\Dxe\Include
+  ./Inc
+  ./ver
+  ./Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(EDK_SOURCE)/Foundation/Library/Dxe/Include
   $(DEST_DIR)
 
 [libraries.common]
diff --ignore-file-name-case -Naur ShellR33/SmbiosView/EventLogInfo.c GccShellR33/SmbiosView/EventLogInfo.c
--- ShellR33/SmbiosView/EventLogInfo.c	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/SmbiosView/EventLogInfo.c	2009-11-05 13:49:56.000000000 -0800
@@ -25,7 +25,7 @@
 #include "PrintInfo.h"
 #include "QueryTable.h"
 #include "EventLogInfo.h"
-#include "smbios.h"
+#include "Smbios.h"
 #include STRING_DEFINES_FILE
 
 VOID
@@ -37,7 +37,7 @@
   //
   // Print prompt
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ACCESS_METHOD), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ACCESS_METHOD), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
 
   //
@@ -45,30 +45,30 @@
   //
   switch (Key) {
   case 0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_EIGHT_BIT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_EIGHT_BIT), gSmbiosHiiHandle);
     break;
 
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TWO_EIGHT_BITS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TWO_EIGHT_BITS), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_SIXTEEN_BIT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_SIXTEEN_BIT), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MEM_MAPPED_PHYS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MEM_MAPPED_PHYS), gSmbiosHiiHandle);
     break;
 
   case 4:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_VIA_GENERAL), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_VIA_GENERAL), gSmbiosHiiHandle);
     break;
 
   default:
     if (Key <= 0x7f) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_FUTURE_ASSIGN), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_FUTURE_ASSIGN), gSmbiosHiiHandle);
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR_OEM), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR_OEM), gSmbiosHiiHandle);
     }
   }
 }
@@ -82,26 +82,26 @@
   //
   // Print prompt
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_STATUS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_STATUS), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
 
   //
   // Print value info
   //
   if ((Key & 0x01) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_VALID), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_VALID), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_VALID), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_VALID), gSmbiosHiiHandle);
   }
 
   if ((Key & 0x02) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_FULL), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_FULL), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_NOT_FULL), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_NOT_FULL), gSmbiosHiiHandle);
   }
 
   if ((Key & 0xFC) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_RES_BITS_NOT_ZERO), HiiHandle, Key & 0xFC);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_RES_BITS_NOT_ZERO), gSmbiosHiiHandle, Key & 0xFC);
   }
 }
 
@@ -114,20 +114,20 @@
   //
   // Print prompt
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_FORMAT), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_FORMAT), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
 
   //
   // Print value info
   //
   if (Key == 0x00) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), gSmbiosHiiHandle);
   } else if (Key == 0x01) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), gSmbiosHiiHandle);
   } else if (Key <= 0x7f) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_FUTURE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_FUTURE), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), gSmbiosHiiHandle);
   }
 }
 
@@ -137,19 +137,19 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_LEN), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_LEN), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_VAR_D), HiiHandle, Key & 0x7F);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_VAR_D), gSmbiosHiiHandle, Key & 0x7F);
 
   //
   // The most-significant bit of the field specifies
   // whether (0) or not (1) the record has been read
   //
   if ((Key & 0x80) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_READ), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_READ), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_NOT_READ), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_NOT_READ), gSmbiosHiiHandle);
   }
 }
 
@@ -160,7 +160,7 @@
 {
   LOG_HEADER_TYPE1_FORMAT *Header;
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG), gSmbiosHiiHandle);
 
   //
   // Print Log Header Type1 Format info
@@ -169,27 +169,27 @@
 
   PrintToken (
     STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_OEM_RESERVED),
-    HiiHandle,
+    gSmbiosHiiHandle,
     Header->OEMReserved[0],
     Header->OEMReserved[1],
     Header->OEMReserved[2],
     Header->OEMReserved[3],
     Header->OEMReserved[4]
     );
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_TIME), HiiHandle, Header->METW);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_COUNT), HiiHandle, Header->MECI);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_ADDRESS), HiiHandle, Header->CMOSAddress);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_INDEX), HiiHandle, Header->CMOSBitIndex);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUM_STARTING_OFF), HiiHandle, Header->StartingOffset);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUN_BYTE_COUNT), HiiHandle, Header->ChecksumOffset);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_TIME), gSmbiosHiiHandle, Header->METW);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_COUNT), gSmbiosHiiHandle, Header->MECI);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_ADDRESS), gSmbiosHiiHandle, Header->CMOSAddress);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_INDEX), gSmbiosHiiHandle, Header->CMOSBitIndex);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUM_STARTING_OFF), gSmbiosHiiHandle, Header->StartingOffset);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUN_BYTE_COUNT), gSmbiosHiiHandle, Header->ChecksumOffset);
   PrintToken (
     STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_RESERVED),
-    HiiHandle,
+    gSmbiosHiiHandle,
     Header->OEMReserved[0],
     Header->OEMReserved[1],
     Header->OEMReserved[2]
     );
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_HEADER_REVISION), HiiHandle, Header->HeaderRevision);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_HEADER_REVISION), gSmbiosHiiHandle, Header->HeaderRevision);
 }
 
 VOID
@@ -201,20 +201,20 @@
   //
   // Print prompt
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER), gSmbiosHiiHandle);
 
   //
   // Print value info
   //
   if (LogHeaderFormat == 0x00) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), gSmbiosHiiHandle);
   } else if (LogHeaderFormat == 0x01) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), gSmbiosHiiHandle);
     DisplaySysEventLogHeaderType1 (LogHeader);
   } else if (LogHeaderFormat <= 0x7f) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FUTURE_ASSIGN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FUTURE_ASSIGN), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), gSmbiosHiiHandle);
   }
 }
 
@@ -237,29 +237,29 @@
   //
   switch (ElVdfType) {
   case 0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_STD_FORMAT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_STD_FORMAT), gSmbiosHiiHandle);
     break;
 
   case 1:
     Word = (UINT16 *) (VarData + 1);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), HiiHandle);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), HiiHandle, *Word);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), gSmbiosHiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), gSmbiosHiiHandle, *Word);
     break;
 
   case 2:
     Dword = (UINT32 *) (VarData + 1);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), HiiHandle, *Dword);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gSmbiosHiiHandle, *Dword);
     break;
 
   case 3:
     Word = (UINT16 *) (VarData + 1);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), HiiHandle);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), HiiHandle, *Word);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), gSmbiosHiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), gSmbiosHiiHandle, *Word);
     //
     // Followed by a multiple-event counter
     //
     Dword = (UINT32 *) (VarData + 1);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), HiiHandle, *Dword);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gSmbiosHiiHandle, *Dword);
     break;
 
   case 4:
@@ -281,14 +281,14 @@
     // Followed by a multiple-event counter
     //
     Dword = (UINT32 *) (VarData + 1);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), HiiHandle, *Dword);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gSmbiosHiiHandle, *Dword);
     break;
 
   default:
     if (ElVdfType <= 0x7F) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_UNUSED_AVAIL_FOR_ASSIGN), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_UNUSED_AVAIL_FOR_ASSIGN), gSmbiosHiiHandle);
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_SYSTEM), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_SYSTEM), gSmbiosHiiHandle);
     }
   }
 }
@@ -309,7 +309,7 @@
   //
   // Print prompt
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG_2), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG_2), gSmbiosHiiHandle);
 
   //
   // Print Log info
@@ -336,19 +336,19 @@
     // (as read from CMOS) of the occurrence of the event
     // So Print as hex and represent decimal
     //
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_DATE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_DATE), gSmbiosHiiHandle);
     if (Log->Year >= 80 && Log->Year <= 99) {
       Print (L"19");
-    } else if (Log->Year >= 0 && Log->Year <= 79) {
+    } else if (Log->Year <= 79) {
       Print (L"20");
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ERROR), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ERROR), gSmbiosHiiHandle);
       continue;
     }
 
     PrintToken (
       STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TIME_SIX_VARS),
-      HiiHandle,
+      gSmbiosHiiHandle,
       Log->Year,
       Log->Month,
       Log->Day,
diff --ignore-file-name-case -Naur ShellR33/SmbiosView/LibSmbiosView.c GccShellR33/SmbiosView/LibSmbiosView.c
--- ShellR33/SmbiosView/LibSmbiosView.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/SmbiosView/LibSmbiosView.c	2009-11-05 13:49:56.000000000 -0800
@@ -22,10 +22,10 @@
 --*/
 
 #include "EfiShellLib.h"
-#include "LIbSmbios.h"
+#include "LibSmbios.h"
 #include "LibSmbiosView.h"
 #include "smbiosview.h"
-#include "smbios.h"
+#include "Smbios.h"
 #include STRING_DEFINES_FILE
 
 STATIC UINT8                    mInit         = 0;
@@ -62,15 +62,15 @@
   //
   // Get SMBIOS table from System Configure table
   //
-  Status = LibGetSystemConfigurationTable (&gEfiSmbiosTableGuid, &mSmbiosTable);
+  Status = LibGetSystemConfigurationTable (&gEfiSmbiosTableGuid, (VOID **)&mSmbiosTable);
 
   if (mSmbiosTable == NULL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_LIBSMBIOSVIEW_CANNOT_GET_TABLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_LIBSMBIOSVIEW_CANNOT_GET_TABLE), gSmbiosHiiHandle);
     return EFI_NOT_FOUND;
   }
 
   if (EFI_ERROR (Status)) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_LIBSMBIOSVIEW_GET_TABLE_ERROR), HiiHandle, Status);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_LIBSMBIOSVIEW_GET_TABLE_ERROR), gSmbiosHiiHandle, Status);
     return Status;
   }
   //
@@ -200,7 +200,7 @@
   }
 
   if (Buffer == NULL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_LIBSMBIOSVIEW_NO_BUFF_SPEC), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_LIBSMBIOSVIEW_NO_BUFF_SPEC), gSmbiosHiiHandle);
     return DMI_INVALID_HANDLE;
   }
 
@@ -342,7 +342,7 @@
 {
   CHAR8 *String;
   if (Buffer == NULL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_LIBSMBIOSVIEW_NO_BUF_SPEC_WHEN_STRUCT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_LIBSMBIOSVIEW_NO_BUF_SPEC_WHEN_STRUCT), gSmbiosHiiHandle);
     return ;
   }
   //
diff --ignore-file-name-case -Naur ShellR33/SmbiosView/PrintInfo.c GccShellR33/SmbiosView/PrintInfo.c
--- ShellR33/SmbiosView/PrintInfo.c	2008-10-06 00:03:04.000000000 -0700
+++ GccShellR33/SmbiosView/PrintInfo.c	2009-11-05 13:49:56.000000000 -0800
@@ -26,7 +26,7 @@
 #include "LibSmbiosView.h"
 #include "QueryTable.h"
 #include "EventLogInfo.h"
-#include "smbios.h"
+#include "Smbios.h"
 #include STRING_DEFINES_FILE
 
 //
@@ -70,17 +70,17 @@
 
 #define PrintBitField(pStruct, type, element, size) \
   do { \
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DUMP), HiiHandle); \
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DUMP), gSmbiosHiiHandle); \
     APrint (#element); \
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SIZE), HiiHandle, size); \
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SIZE), gSmbiosHiiHandle, size); \
     DumpHex (0, 0, size, &(pStruct->type->element)); \
   } while (0);
 
 #define PrintSmbiosBitField(pStruct, startaddress, element, size) \
   do { \
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DUMP), HiiHandle); \
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DUMP), gSmbiosHiiHandle); \
     APrint (#element); \
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SIZE), HiiHandle, size); \
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SIZE), gSmbiosHiiHandle, size); \
     DumpHex (0, 0, size, startaddress); \
   } while (0);
 
@@ -153,7 +153,7 @@
   UINT8 InAnchor[6];
 
   if (SmbiosTable == NULL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SMBIOSTABLE_NULL), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SMBIOSTABLE_NULL), gSmbiosHiiHandle);
     return ;
   }
 
@@ -162,29 +162,29 @@
   }
 
   if (Option >= SHOW_NORMAL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENTRY_POINT_SIGN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENTRY_POINT_SIGN), gSmbiosHiiHandle);
     MemToString (Anchor, SmbiosTable->AnchorString, 4);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ANCHOR_STR), HiiHandle, Anchor);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ANCHOR_STR), gSmbiosHiiHandle, Anchor);
     PrintToken (
       STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EPS_CHECKSUM),
-      HiiHandle,
+      gSmbiosHiiHandle,
       SmbiosTable->EntryPointStructureChecksum
       );
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENTRY_POINT_LEN), HiiHandle, SmbiosTable->EntryPointLength);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENTRY_POINT_LEN), gSmbiosHiiHandle, SmbiosTable->EntryPointLength);
     PrintToken (
       STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VERSION),
-      HiiHandle,
+      gSmbiosHiiHandle,
       SmbiosTable->MajorVersion,
       SmbiosTable->MinorVersion
       );
     PrintToken (
       STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NUMBER_STRUCT),
-      HiiHandle,
+      gSmbiosHiiHandle,
       SmbiosTable->NumberOfSmbiosStructures
       );
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MAX_STRUCT_SIZE), HiiHandle, SmbiosTable->MaxStructureSize);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TABLE_ADDR), HiiHandle, SmbiosTable->TableAddress);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TABLE_LENGTH), HiiHandle, SmbiosTable->TableLength);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MAX_STRUCT_SIZE), gSmbiosHiiHandle, SmbiosTable->MaxStructureSize);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TABLE_ADDR), gSmbiosHiiHandle, SmbiosTable->TableAddress);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TABLE_LENGTH), gSmbiosHiiHandle, SmbiosTable->TableLength);
 
   }
   //
@@ -193,17 +193,17 @@
   if (Option >= SHOW_DETAIL) {
     PrintToken (
       STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENTRY_POINT_REVISION),
-      HiiHandle,
+      gSmbiosHiiHandle,
       SmbiosTable->EntryPointRevision
       );
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BCD_REVISION), HiiHandle, SmbiosTable->SmbiosBcdRevision);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BCD_REVISION), gSmbiosHiiHandle, SmbiosTable->SmbiosBcdRevision);
     //
     // Since raw data is not string, add a NULL terminater.
     //
     MemToString (InAnchor, SmbiosTable->IntermediateAnchorString, 5);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTER_ACHOR), HiiHandle, InAnchor);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTER_CHECKSUM), HiiHandle, SmbiosTable->IntermediateChecksum);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FORMATTED_AREA), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTER_ACHOR), gSmbiosHiiHandle, InAnchor);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTER_CHECKSUM), gSmbiosHiiHandle, SmbiosTable->IntermediateChecksum);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FORMATTED_AREA), gSmbiosHiiHandle);
     DumpHex (2, 0, 5, SmbiosTable->FormattedArea);
   }
 
@@ -247,8 +247,8 @@
   // Display structure header
   //
   DisplayStructureTypeInfo (pStruct->Hdr->Type, SHOW_DETAIL);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FORMAT_PART_LEN), HiiHandle, pStruct->Hdr->Length);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STRUCT_HANDLE), HiiHandle, pStruct->Hdr->Handle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FORMAT_PART_LEN), gSmbiosHiiHandle, pStruct->Hdr->Length);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STRUCT_HANDLE), gSmbiosHiiHandle, pStruct->Hdr->Handle);
 
   if (Option == SHOW_OUTLINE) {
     return EFI_SUCCESS;
@@ -263,7 +263,7 @@
     PrintPendingString (pStruct, Type0, BiosVersion);
     PrintStructValue (pStruct, Type0, BiosSegment);
     PrintPendingString (pStruct, Type0, BiosReleaseDate);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_SIZE), HiiHandle, 64 * (pStruct->Type0->BiosSize + 1));
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_SIZE), gSmbiosHiiHandle, 64 * (pStruct->Type0->BiosSize + 1));
 
     if (Option < SHOW_DETAIL) {
       PrintStructValueH (pStruct, Type0, BiosCharacteristics);
@@ -325,13 +325,13 @@
     PrintPendingString (pStruct, Type3, Version);
     PrintPendingString (pStruct, Type3, SerialNumber);
     PrintPendingString (pStruct, Type3, AssetTag);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOTUP_STATE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOTUP_STATE), gSmbiosHiiHandle);
     DisplaySystemEnclosureStatus (pStruct->Type3->BootupState, Option);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_STATE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_STATE), gSmbiosHiiHandle);
     DisplaySystemEnclosureStatus (pStruct->Type3->PowerSupplyState, Option);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_THERMAL_STATE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_THERMAL_STATE), gSmbiosHiiHandle);
     DisplaySystemEnclosureStatus (pStruct->Type3->ThermalState, Option);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SECURITY_STATUS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SECURITY_STATUS), gSmbiosHiiHandle);
     DisplaySESecurityStatus (pStruct->Type3->SecurityStatus, Option);
     PrintBitField (pStruct, Type3, OemDefined, 4);
     break;
@@ -384,9 +384,9 @@
 
       DisplayMcErrorDetectMethod (pStruct->Type5->ErrDetectMethod, Option);
       DisplayMcErrorCorrectCapability (pStruct->Type5->ErrCorrectCapability, Option);
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SUPOPRT), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SUPOPRT), gSmbiosHiiHandle);
       DisplayMcInterleaveSupport (pStruct->Type5->SupportInterleave, Option);
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CURRENT), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CURRENT), gSmbiosHiiHandle);
       DisplayMcInterleaveSupport (pStruct->Type5->CurrentInterleave, Option);
       DisplayMaxMemoryModuleSize (pStruct->Type5->MaxMemoryModuleSize, SlotNum, Option);
       DisplayMcMemorySpeeds (pStruct->Type5->SupportSpeed, Option);
@@ -409,9 +409,9 @@
     DisplayMmBankConnections (pStruct->Type6->BankConnections, Option);
     PrintStructValue (pStruct, Type6, CurrentSpeed);
     DisplayMmMemoryType (pStruct->Type6->CurrentMemoryType, Option);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INSTALLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INSTALLED), gSmbiosHiiHandle);
     DisplayMmMemorySize (pStruct->Type6->InstalledSize, Option);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED), gSmbiosHiiHandle);
     DisplayMmMemorySize (pStruct->Type6->EnabledSize, Option);
     DisplayMmErrorStatus (pStruct->Type6->ErrorStatus, Option);
     break;
@@ -441,7 +441,7 @@
     Print (L"Internal ");
     DisplayPortConnectorType (pStruct->Type8->InternalConnectorType, Option);
     PrintPendingString (pStruct, Type8, ExternalReferenceDesignator);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EXTERNAL), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EXTERNAL), gSmbiosHiiHandle);
     DisplayPortConnectorType (pStruct->Type8->ExternalConnectorType, Option);
     DisplayPortType (pStruct->Type8->PortType, Option);
     break;
@@ -478,7 +478,7 @@
       NumOfDevice = (pStruct->Type10->Hdr.Length - sizeof (SMBIOS_HEADER)) / (2 * sizeof (UINT8));
       for (Index = 0; Index < NumOfDevice; Index++) {
         DisplayOnboardDeviceTypes (pStruct->Type10->Device[Index].DeviceType, Option);
-        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DESC_STRING), HiiHandle);
+        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DESC_STRING), gSmbiosHiiHandle);
         APrint (LibGetSmbiosString (pStruct, pStruct->Type10->Device[Index].DescriptionString));
       }
     }
@@ -539,7 +539,7 @@
         // Display all Event Log type descriptors supported by system
         //
         for (Index = 0; Index < Count; Index++, Ptr++) {
-          PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SUPOPRTED_EVENT), HiiHandle, Index + 1);
+          PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SUPOPRTED_EVENT), gSmbiosHiiHandle, Index + 1);
           DisplaySELTypes (Ptr->LogType, Option);
           DisplaySELVarDataFormatType (Ptr->DataFormatType, Option);
         }
@@ -557,7 +557,7 @@
           default:
             PrintToken (
               STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ACCESS_METHOD_NOT_SUPOPRTED),
-              HiiHandle,
+              gSmbiosHiiHandle,
               pStruct->Type15->AccessMethod
               );
             return EFI_UNSUPPORTED;
@@ -788,7 +788,7 @@
     break;
 
   case 31:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STRUCT_TYPE31), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STRUCT_TYPE31), gSmbiosHiiHandle);
     break;
 
   case 32:
@@ -849,9 +849,9 @@
       Count = pStruct->Type37->MemoryDeviceCount;
       Ptr   = pStruct->Type37->MemoryDevice;
       for (Index = 0; Index < Count; Index++) {
-        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_DEVICE), HiiHandle, Index + 1);
-        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DEV_LOAD), HiiHandle, Ptr->DeviceLoad);
-        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DEV_HANDLE), HiiHandle, Ptr->DeviceHandle);
+        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_DEVICE), gSmbiosHiiHandle, Index + 1);
+        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DEV_LOAD), gSmbiosHiiHandle, Ptr->DeviceLoad);
+        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DEV_HANDLE), gSmbiosHiiHandle, Ptr->DeviceHandle);
       }
     }
     break;
@@ -906,9 +906,9 @@
       
       for (Index = 0; Index < NumberOfEntries; Index++) {
         EntryLength = Entries->EntryLength;
-        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTRYLEN), HiiHandle, EntryLength);
-        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_REFERENCEDHANDLE), HiiHandle, Entries->ReferencedHandle);
-        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_REFERENCEDOFFSET), HiiHandle, Entries->ReferencedOffset);
+        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTRYLEN), gSmbiosHiiHandle, EntryLength);
+        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_REFERENCEDHANDLE), gSmbiosHiiHandle, Entries->ReferencedHandle);
+        PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_REFERENCEDOFFSET), gSmbiosHiiHandle, Entries->ReferencedOffset);
         PrintSmbiosString (pStruct, Entries->EntryString, String);
         PrintSmbiosBitField (pStruct, Entries->Value, Value, EntryLength - 5);
         Entries = (ADDITIONAL_INFORMATION_ENTRY *) ((UINT8 *)Entries + EntryLength);
@@ -929,15 +929,15 @@
     break;
 
   case 126:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INACTIVE_STRUCT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INACTIVE_STRUCT), gSmbiosHiiHandle);
     break;
 
   case 127:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_THIS_STRUCT_END_TABLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_THIS_STRUCT_END_TABLE), gSmbiosHiiHandle);
     break;
 
   default:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STRUCT_TYPE_UNDEFINED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STRUCT_TYPE_UNDEFINED), gSmbiosHiiHandle);
     break;
   }
 
@@ -953,7 +953,7 @@
   //
   // Print header
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR), gSmbiosHiiHandle);
   //
   // print option
   //
@@ -965,137 +965,137 @@
   //   are designed not to deal with UINT64
   //
   if (BIT (chara, 0) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_BIT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_BIT), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 1) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_BIT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_BIT), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 2) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN_BIT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN_BIT), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 3) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR_NOT_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR_NOT_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 4) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ISA_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ISA_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 5) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MSA_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MSA_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 6) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EISA_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EISA_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 7) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PCI_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PCI_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 8) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PC_CARD_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PC_CARD_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 9) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PLUG_PLAY_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PLUG_PLAY_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 10) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_APM_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_APM_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 11) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_UPGRADEABLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_UPGRADEABLE), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 12) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_SHADOWING), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_SHADOWING), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 13) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VESA_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VESA_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 14) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ECSD_SUPPORT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ECSD_SUPPORT), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 15) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_FORM_CD_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_FORM_CD_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 16) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SELECTED_BOOT_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SELECTED_BOOT_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 17) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_ROM_SOCKETED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_ROM_SOCKETED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 18) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_FROM_PC_CARD), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_FROM_PC_CARD), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 19) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EDD_ENHANCED_DRIVER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_EDD_ENHANCED_DRIVER), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 20) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_JAPANESE_FLOPPY_NEC), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_JAPANESE_FLOPPY_NEC), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 21) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_JAPANESE_FLOPPY_TOSHIBA), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_JAPANESE_FLOPPY_TOSHIBA), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 22) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FLOPPY_SERVICES_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FLOPPY_SERVICES_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 23) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_POINT_TWO_MB), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_POINT_TWO_MB), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 24) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_720_KB), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_720_KB), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 25) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TWO_POINT_EIGHT_EIGHT_MB), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TWO_POINT_EIGHT_EIGHT_MB), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 26) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PRINT_SCREEN_SUPPORT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PRINT_SCREEN_SUPPORT), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 27) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_KEYBOARD_SERV_SUPPORT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_KEYBOARD_SERV_SUPPORT), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 28) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SERIAL_SERVICES_SUPPORT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SERIAL_SERVICES_SUPPORT), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 29) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PRINTER_SERVICES_SUPPORT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PRINTER_SERVICES_SUPPORT), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 30) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MONO_VIDEO_SUPPORT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MONO_VIDEO_SUPPORT), gSmbiosHiiHandle);
   }
 
   if (BIT (chara, 31) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NEC_PC_98), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NEC_PC_98), gSmbiosHiiHandle);
   }
   //
   // Just print the reserved
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_32_47), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_48_64), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_32_47), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_48_64), gSmbiosHiiHandle);
 }
 
 VOID
@@ -1104,7 +1104,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR_EXTENSION), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR_EXTENSION), gSmbiosHiiHandle);
   //
   // Print option
   //
@@ -1114,35 +1114,35 @@
   // check bit and print
   //
   if (BIT (byte1, 0) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ACPI_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ACPI_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (byte1, 1) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_USB_LEGACY_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_USB_LEGACY_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (byte1, 2) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AGP_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AGP_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (byte1, 3) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_I2O_BOOT_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_I2O_BOOT_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (byte1, 4) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LS_120_BOOT_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LS_120_BOOT_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (byte1, 5) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ATAPI_ZIP_DRIVE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ATAPI_ZIP_DRIVE), gSmbiosHiiHandle);
   }
 
   if (BIT (byte1, 6) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_1394_BOOT_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_1394_BOOT_SUPPORTED), gSmbiosHiiHandle);
   }
 
   if (BIT (byte1, 7) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SMART_BATTERY_SUPPORTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SMART_BATTERY_SUPPORTED), gSmbiosHiiHandle);
   }
 }
 
@@ -1152,21 +1152,21 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR_EXTENSION_2), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_CHAR_EXTENSION_2), gSmbiosHiiHandle);
   //
   // Print option
   //
   PRINT_INFO_OPTION (byte2, Option);
 
   if (BIT (byte2, 0) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_BOOT_SPEC_SUPP), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIOS_BOOT_SPEC_SUPP), gSmbiosHiiHandle);
   }
 
   if (BIT (byte2, 1) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FUNCTION_KEY_INIT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FUNCTION_KEY_INIT), gSmbiosHiiHandle);
   }
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RSVD_FOR_FUTURE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RSVD_FOR_FUTURE), gSmbiosHiiHandle);
 }
 
 VOID
@@ -1178,7 +1178,7 @@
   //
   // Print prompt message
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROCESSOR_FAMILY), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROCESSOR_FAMILY), gSmbiosHiiHandle);
   //
   // Print option
   //
@@ -1189,11 +1189,11 @@
   //
   switch (Family) {
   case 0x01:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER), gSmbiosHiiHandle);
     break;
 
   case 0x02:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gSmbiosHiiHandle);
     break;
 
   case 0x03:
@@ -1205,11 +1205,11 @@
     break;
 
   case 0x05:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL386_PROCESSOR), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL386_PROCESSOR), gSmbiosHiiHandle);
     break;
 
   case 0x06:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL486_PROCESSOR), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INTEL486_PROCESSOR), gSmbiosHiiHandle);
     break;
 
   case 0x07:
@@ -1229,35 +1229,35 @@
     break;
 
   case 0x0B:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_PROC_FAMILY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_PROC_FAMILY), gSmbiosHiiHandle);
     break;
 
   case 0x0C:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_PRO_PROC), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_PRO_PROC), gSmbiosHiiHandle);
     break;
 
   case 0x0D:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_II_PROC), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_II_PROC), gSmbiosHiiHandle);
     break;
 
   case 0x0E:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_PROC_MMX), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_PROC_MMX), gSmbiosHiiHandle);
     break;
 
   case 0x0F:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CELERON_PROC), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CELERON_PROC), gSmbiosHiiHandle);
     break;
 
   case 0x10:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_XEON_PROC), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_XEON_PROC), gSmbiosHiiHandle);
     break;
 
   case 0x11:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_III_PROC), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_III_PROC), gSmbiosHiiHandle);
     break;
 
   case 0x12:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_M1_FAMILY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_M1_FAMILY), gSmbiosHiiHandle);
     break;
 
   case 0x18:
@@ -1265,27 +1265,27 @@
     break;
 
   case 0x19:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_K5_FAMILY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_K5_FAMILY), gSmbiosHiiHandle);
     break;
 
   case 0x20:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_FAMILY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_FAMILY), gSmbiosHiiHandle);
     break;
 
   case 0x21:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_601), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_601), gSmbiosHiiHandle);
     break;
 
   case 0x22:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_603), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_603), gSmbiosHiiHandle);
     break;
 
   case 0x23:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_603_PLUS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_603_PLUS), gSmbiosHiiHandle);
     break;
 
   case 0x24:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_604), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_PC_604), gSmbiosHiiHandle);
     break;
 
   case 0x25:
@@ -1301,7 +1301,7 @@
     break;
 
   case 0x30:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ALPHA_FAMILY_2), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ALPHA_FAMILY_2), gSmbiosHiiHandle);
     break;
 
   case 0x31:
@@ -1333,7 +1333,7 @@
     break;
 
   case 0x40:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MIPS_FAMILY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MIPS_FAMILY), gSmbiosHiiHandle);
     break;
 
   case 0x41:
@@ -1357,7 +1357,7 @@
     break;
 
   case 0x50:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SPARC_FAMILY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SPARC_FAMILY), gSmbiosHiiHandle);
     break;
 
   case 0x51:
@@ -1393,7 +1393,7 @@
     break;
 
   case 0x60:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_68040_FAMILY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_68040_FAMILY), gSmbiosHiiHandle);
     break;
 
   case 0x61:
@@ -1417,7 +1417,7 @@
     break;
 
   case 0x70:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HOBBIT_FAMILY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HOBBIT_FAMILY), gSmbiosHiiHandle);
     break;
 
   case 0x78:
@@ -1433,7 +1433,7 @@
     break;
 
   case 0x80:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WEITEK), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WEITEK), gSmbiosHiiHandle);
     break;
 
   case 0x82:
@@ -1469,15 +1469,15 @@
     break;
 
   case 0x90:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PA_RISC_FAMILY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PA_RISC_FAMILY), gSmbiosHiiHandle);
     break;
 
   case 0xA0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_V30_FAMILY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_V30_FAMILY), gSmbiosHiiHandle);
     break;
 
   case 0xB0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_III_XEON), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PENTIUM_III_XEON), gSmbiosHiiHandle);
     break;
 
   case 0xC8:
@@ -1532,13 +1532,13 @@
     // use if/else to check value.
     //
     if (Family >= 0x13 && Family <= 0x17) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RSVD_FOR_SPEC_M1), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RSVD_FOR_SPEC_M1), gSmbiosHiiHandle);
     } else if (Family >= 0x1A && Family <= 0x1F) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RSVD_FOR_SPEC_K5), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RSVD_FOR_SPEC_K5), gSmbiosHiiHandle);
     } else if (Family >= 0xB1 && Family <= 0xBF) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RSVD_FOR_SPEC_PENTIUM), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RSVD_FOR_SPEC_PENTIUM), gSmbiosHiiHandle);
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED_PROC_FAMILY), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED_PROC_FAMILY), gSmbiosHiiHandle);
     }
   }
   //
@@ -1555,7 +1555,7 @@
   //
   // Print prompt message
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROCESSOR_FAMILY), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROCESSOR_FAMILY), gSmbiosHiiHandle);
   
   //
   // Print option
@@ -1607,7 +1607,7 @@
       break;
     
     default:
-     PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED_PROC_FAMILY), HiiHandle);
+     PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED_PROC_FAMILY), gSmbiosHiiHandle);
   }
   
 }
@@ -1643,43 +1643,43 @@
 
 --*/
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROC_INFO), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROC_INFO), gSmbiosHiiHandle);
   //
   // Print option
   //
   PRINT_INFO_OPTION (Voltage, Option);
 
   if (BIT (Voltage, 7) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROC_CURRENT_VOLTAGE), HiiHandle, (Voltage - 0x80));
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROC_CURRENT_VOLTAGE), gSmbiosHiiHandle, (Voltage - 0x80));
   } else {
     if (BIT (Voltage, 0) != 0) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_5V_SUPOPRTED), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_5V_SUPOPRTED), gSmbiosHiiHandle);
     }
 
     if (BIT (Voltage, 1) != 0) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_33V_SUPPORTED), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_33V_SUPPORTED), gSmbiosHiiHandle);
     }
 
     if (BIT (Voltage, 2) != 0) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_29V_SUPPORTED), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_29V_SUPPORTED), gSmbiosHiiHandle);
     }
     //
     // check the reserved zero bits:
     //
     if (BIT (Voltage, 3) != 0) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT3_NOT_ZERO), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT3_NOT_ZERO), gSmbiosHiiHandle);
     }
 
     if (BIT (Voltage, 4) != 0) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT4_NOT_ZERO), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT4_NOT_ZERO), gSmbiosHiiHandle);
     }
 
     if (BIT (Voltage, 5) != 0) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT5_NOT_ZERO), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT5_NOT_ZERO), gSmbiosHiiHandle);
     }
 
     if (BIT (Voltage, 6) != 0) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT6_NOT_ZERO), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BIT6_NOT_ZERO), gSmbiosHiiHandle);
     }
   }
 }
@@ -1714,56 +1714,56 @@
 
 --*/
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROC_STATUS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PROC_STATUS), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Status, Option);
 
   if (BIT (Status, 7) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_BIT7), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_BIT7), gSmbiosHiiHandle);
   } else if (BIT (Status, 5) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_BIT5), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_BIT5), gSmbiosHiiHandle);
   } else if (BIT (Status, 4) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_BIT4), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_BIT4), gSmbiosHiiHandle);
   } else if (BIT (Status, 3) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_BIT3), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_BIT3), gSmbiosHiiHandle);
   }
   //
   // Check BIT 6
   //
   if (BIT (Status, 6) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_SOCKET_POPULATED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_SOCKET_POPULATED), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_SOCKET_UNPOPULATED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_SOCKET_UNPOPULATED), gSmbiosHiiHandle);
   }
   //
   // Check BITs 2:0
   //
   switch (Status & 0x07) {
   case 0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gSmbiosHiiHandle);
     break;
 
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_ENABLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_ENABLED), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_DISABLED_BY_USER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_DISABLED_BY_USER), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_DIABLED_BY_BIOS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_DIABLED_BY_BIOS), gSmbiosHiiHandle);
     break;
 
   case 4:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_IDLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CPU_IDLE), gSmbiosHiiHandle);
     break;
 
   case 7:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHERS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHERS), gSmbiosHiiHandle);
     break;
 
   default:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED), gSmbiosHiiHandle);
   }
 }
 
@@ -1775,16 +1775,16 @@
   )
 {
   UINTN MaxSize;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SIZE_LARGEST_MEM), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SIZE_LARGEST_MEM), gSmbiosHiiHandle);
   //
   // MaxSize is determined by follow formula
   //
   MaxSize = (UINTN) 1 << Size;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_MB), HiiHandle, MaxSize);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_MB), gSmbiosHiiHandle, MaxSize);
 
   if (Option >= SHOW_DETAIL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MAX_AMOUNT_MEM), HiiHandle);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_MB), HiiHandle, MaxSize, SlotNum, MaxSize * SlotNum);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MAX_AMOUNT_MEM), gSmbiosHiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_MB), gSmbiosHiiHandle, MaxSize, SlotNum, MaxSize * SlotNum);
   }
 }
 
@@ -1796,7 +1796,7 @@
   )
 {
   UINT8 Index;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HANDLES_CONTROLLED), HiiHandle, SlotNum);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HANDLES_CONTROLLED), gSmbiosHiiHandle, SlotNum);
 
   if (Option >= SHOW_DETAIL) {
     //
@@ -1806,9 +1806,9 @@
       return ;
     }
 
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HANDLES_LIST_CONTROLLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HANDLES_LIST_CONTROLLED), gSmbiosHiiHandle);
     for (Index = 0; Index < SlotNum; Index++) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HANDLE), HiiHandle, Index + 1, Handles[Index]);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HANDLE), gSmbiosHiiHandle, Index + 1, Handles[Index]);
     }
   }
 }
@@ -1824,7 +1824,7 @@
   UINT8 High;
   UINT8 Low;
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_CONNECTIONS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_CONNECTIONS), gSmbiosHiiHandle);
   //
   // Print option
   //
@@ -1837,15 +1837,15 @@
   Low   = (UINT8) (BankConnections & 0x0F);
   if (High != 0xF) {
     if (Low != 0xF) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_RAS), HiiHandle, High, Low, High, Low);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_RAS), gSmbiosHiiHandle, High, Low, High, Low);
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_RAS_2), HiiHandle, High, High);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_RAS_2), gSmbiosHiiHandle, High, High);
     }
   } else {
     if (Low != 0xF) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_RAS_2), HiiHandle, Low, Low);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BANK_RAS_2), gSmbiosHiiHandle, Low, Low);
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NO_BANKS_CONNECTED), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NO_BANKS_CONNECTED), gSmbiosHiiHandle);
     }
   }
 }
@@ -1874,7 +1874,7 @@
 --*/
 {
   UINT8 Value;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEMORY_SIZE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEMORY_SIZE), gSmbiosHiiHandle);
   //
   // Print option
   //
@@ -1885,19 +1885,19 @@
   //
   Value = (UINT8) (Size & 0x7F);
   if (Value == 0x7D) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_SIZE_NOT_DETERMINABLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_SIZE_NOT_DETERMINABLE), gSmbiosHiiHandle);
   } else if (Value == 0x7E) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MODULE_INSTALLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MODULE_INSTALLED), gSmbiosHiiHandle);
   } else if (Value == 0x7F) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_INSTALLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_INSTALLED), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_SIZE), HiiHandle, 1 << Value);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_SIZE), gSmbiosHiiHandle, 1 << Value);
   }
 
   if (BIT (Size, 7) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_MODULE_DOUBLE_BANK), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_MODULE_DOUBLE_BANK), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_MODULE_SINGLE_BANK), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MEM_MODULE_SINGLE_BANK), gSmbiosHiiHandle);
   }
 }
 
@@ -1929,7 +1929,7 @@
   //
   DisplaySystemSlotType (SlotType, Option);
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SLOT_ID), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SLOT_ID), gSmbiosHiiHandle);
   //
   // print option
   //
@@ -1940,11 +1940,11 @@
   // Slot Type: MCA
   //
   case 0x04:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LOGICAL_MICRO_CHAN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LOGICAL_MICRO_CHAN), gSmbiosHiiHandle);
     if (SlotId > 0 && SlotId < 15) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_D), HiiHandle, SlotId);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_D), gSmbiosHiiHandle, SlotId);
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_NOT_1_15), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_NOT_1_15), gSmbiosHiiHandle);
     }
     break;
 
@@ -1952,11 +1952,11 @@
   // EISA
   //
   case 0x05:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LOGICAL_EISA_NUM), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LOGICAL_EISA_NUM), gSmbiosHiiHandle);
     if (SlotId > 0 && SlotId < 15) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_D), HiiHandle, SlotId);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_D), gSmbiosHiiHandle, SlotId);
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_NOT_1_15), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_NOT_1_15), gSmbiosHiiHandle);
     }
     break;
 
@@ -1964,28 +1964,28 @@
   // Slot Type: PCI
   //
   case 0x06:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VALUE_PRESENT), HiiHandle, SlotId);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VALUE_PRESENT), gSmbiosHiiHandle, SlotId);
     break;
 
   //
   // PCMCIA
   //
   case 0x07:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_IDENTIFIES_ADAPTER_NUM), HiiHandle, SlotId);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_IDENTIFIES_ADAPTER_NUM), gSmbiosHiiHandle, SlotId);
     break;
 	
   //
   // Slot Type: PCI-E
   //
   case 0xA5:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VALUE_PRESENT), HiiHandle, SlotId);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VALUE_PRESENT), gSmbiosHiiHandle, SlotId);
     break;
 
   default:
     if (SlotType >= 0x0E && SlotType <= 0x12) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VALUE_PRESENT), HiiHandle, SlotId);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VALUE_PRESENT), gSmbiosHiiHandle, SlotId);
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED_SLOT_ID), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED_SLOT_ID), gSmbiosHiiHandle);
     }
   }
 }
@@ -1996,7 +1996,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_BOOT_STATUS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_BOOT_STATUS), gSmbiosHiiHandle);
   //
   // Print option
   //
@@ -2006,31 +2006,31 @@
   // Check value and print
   //
   if (Parameter == 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NO_ERRORS_DETECTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NO_ERRORS_DETECTED), gSmbiosHiiHandle);
   } else if (Parameter == 1) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NO_BOOTABLE_MEDIA), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NO_BOOTABLE_MEDIA), gSmbiosHiiHandle);
   } else if (Parameter == 2) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NORMAL_OP_SYSTEM), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NORMAL_OP_SYSTEM), gSmbiosHiiHandle);
   } else if (Parameter == 3) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FIRMWARE_DETECTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FIRMWARE_DETECTED), gSmbiosHiiHandle);
   } else if (Parameter == 4) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OP_SYSTEM), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OP_SYSTEM), gSmbiosHiiHandle);
   } else if (Parameter == 5) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_USER_REQUESTED_BOOT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_USER_REQUESTED_BOOT), gSmbiosHiiHandle);
   } else if (Parameter == 6) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_SECURITY_VIOLATION), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_SECURITY_VIOLATION), gSmbiosHiiHandle);
   } else if (Parameter == 7) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PREV_REQ_IMAGE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PREV_REQ_IMAGE), gSmbiosHiiHandle);
   } else if (Parameter == 8) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WATCHDOG_TIMER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WATCHDOG_TIMER), gSmbiosHiiHandle);
   } else if (Parameter >= 9 && Parameter <= 127) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RSVD_FUTURE_ASSIGNMENT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RSVD_FUTURE_ASSIGNMENT), gSmbiosHiiHandle);
   } else if (Parameter >= 128 && Parameter <= 191) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VENDOR_OEM_SPECIFIC), HiiHandle);
-  } else if (Parameter >= 192 && Parameter <= 255) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PRODUCT_SPEC_IMPLMENTATION), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_VENDOR_OEM_SPECIFIC), gSmbiosHiiHandle);
+  } else if (Parameter >= 192) {
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_PRODUCT_SPEC_IMPLMENTATION), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_VALUE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ERROR_VALUE), gSmbiosHiiHandle);
   }
 }
 //
@@ -2062,7 +2062,7 @@
   UINTN Month;
   UINTN Year;
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SBDS_MANUFACTURE_DATE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SBDS_MANUFACTURE_DATE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Date, Option);
   //
   // Print date
@@ -2070,7 +2070,7 @@
   Day   = Date & 0x001F;
   Month = (Date & 0x00E0) >> 5;
   Year  = ((Date & 0xFF00) >> 8) + 1980;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MONTH_DAY_YEAR), HiiHandle, Day, Month, Year);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MONTH_DAY_YEAR), gSmbiosHiiHandle, Day, Month, Year);
 
 }
 //
@@ -2111,65 +2111,65 @@
 {
   UINTN Temp;
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_RESET_CAPABILITIES), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_RESET_CAPABILITIES), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Reset, Option);
 
   //
   // Check reserved bits 7:6
   //
   if ((Reset & 0xC0) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RESERVED_ZERO), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RESERVED_ZERO), gSmbiosHiiHandle);
   }
   //
   // Watch dog
   //
   if (BIT (Reset, 5) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WATCHDOG_TIMER_2), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WATCHDOG_TIMER_2), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_NOT_CONTAIN_TIMER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_NOT_CONTAIN_TIMER), gSmbiosHiiHandle);
   }
   //
   // Boot Option on Limit
   //
   Temp = (Reset & 0x18) >> 3;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_OPTION_LIMIT), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_OPTION_LIMIT), gSmbiosHiiHandle);
   switch (Temp) {
   case 0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED), gSmbiosHiiHandle);
     break;
 
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OP_SYSTEM_2), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OP_SYSTEM_2), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_UTIL), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_UTIL), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DO_NOT_REBOOT_BITS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DO_NOT_REBOOT_BITS), gSmbiosHiiHandle);
     break;
   }
   //
   // Boot Option
   //
   Temp = (Reset & 0x06) >> 1;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_OPTION), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BOOT_OPTION), gSmbiosHiiHandle);
   switch (Temp) {
   case 0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED), gSmbiosHiiHandle);
     break;
 
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OP_SYSTEM_2), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OP_SYSTEM_2), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_UTIL), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SYSTEM_UTIL), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DO_NOT_REBOOT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DO_NOT_REBOOT), gSmbiosHiiHandle);
     break;
   }
   //
@@ -2224,95 +2224,95 @@
 {
   UINTN Temp;
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HARDWARE_SECURITY_SET), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_HARDWARE_SECURITY_SET), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Settings, Option);
 
   //
   // Power-on Password Status
   //
   Temp = (Settings & 0xC0) >> 6;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_ON_PASSWORD), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_ON_PASSWORD), gSmbiosHiiHandle);
   switch (Temp) {
   case 0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), gSmbiosHiiHandle);
     break;
 
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gSmbiosHiiHandle);
     break;
   }
   //
   // Keyboard Password Status
   //
   Temp = (Settings & 0x30) >> 4;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_KEYBOARD_PASSWORD), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_KEYBOARD_PASSWORD), gSmbiosHiiHandle);
   switch (Temp) {
   case 0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), gSmbiosHiiHandle);
     break;
 
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gSmbiosHiiHandle);
     break;
   }
   //
   // Administrator Password Status
   //
   Temp = (Settings & 0x0C) >> 2;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ADMIN_PASSWORD_STATUS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ADMIN_PASSWORD_STATUS), gSmbiosHiiHandle);
   switch (Temp) {
   case 0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), gSmbiosHiiHandle);
     break;
 
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gSmbiosHiiHandle);
     break;
   }
   //
   // Front Panel Reset Status
   //
   Temp = Settings & 0x3;
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FRONT_PANEL_RESET), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_FRONT_PANEL_RESET), gSmbiosHiiHandle);
   switch (Temp) {
   case 0:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_DISABLED), gSmbiosHiiHandle);
     break;
 
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ENABLED_NEWLINE), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_IMPLEMENTED), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gSmbiosHiiHandle);
     break;
   }
 }
@@ -2325,30 +2325,30 @@
   UINT8   Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CONNECTIONS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CONNECTIONS), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Connections, Option);
 
   //
   // Check reserved bits 7:2
   //
   if ((Connections & 0xFC) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RESERVED_ZERO_2), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_RESERVED_ZERO_2), gSmbiosHiiHandle);
   }
   //
   // Outbound Connection
   //
   if (BIT (Connections, 1) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OUTBOUND_CONN_ENABLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OUTBOUND_CONN_ENABLED), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTUBOUND_CONN_DISABLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTUBOUND_CONN_DISABLED), gSmbiosHiiHandle);
   }
   //
   // Inbound Connection
   //
   if (BIT (Connections, 0) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INBOIUND_CONN_ENABLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INBOIUND_CONN_ENABLED), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INBOUND_CONN_DISABLED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INBOUND_CONN_DISABLED), gSmbiosHiiHandle);
   }
 }
 //
@@ -2362,141 +2362,141 @@
 {
   UINTN Temp;
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_CHAR), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_CHAR), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Characteristics, Option);
 
   //
   // Check reserved bits 15:14
   //
   if ((Characteristics & 0xC000) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_15_14_RSVD), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BITS_15_14_RSVD), gSmbiosHiiHandle);
   }
   //
   // Bits 13:10 - DMTF Power Supply Type
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_TYPE), gSmbiosHiiHandle);
   Temp = (Characteristics & 0x1C00) << 10;
   switch (Temp) {
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER_SPACE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER_SPACE), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LINEAR), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_LINEAR), gSmbiosHiiHandle);
     break;
 
   case 4:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SWITCHING), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_SWITCHING), gSmbiosHiiHandle);
     break;
 
   case 5:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BATTERY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_BATTERY), gSmbiosHiiHandle);
     break;
 
   case 6:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UPS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UPS), gSmbiosHiiHandle);
     break;
 
   case 7:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CONVERTER), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CONVERTER), gSmbiosHiiHandle);
     break;
 
   case 8:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_REGULATOR), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_REGULATOR), gSmbiosHiiHandle);
     break;
 
   default:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_2), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_2), gSmbiosHiiHandle);
   }
   //
   // Bits 9:7 - Status
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STATUS_DASH), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_STATUS_DASH), gSmbiosHiiHandle);
   Temp = (Characteristics & 0x380) << 7;
   switch (Temp) {
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER_SPACE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER_SPACE), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OK), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OK), gSmbiosHiiHandle);
     break;
 
   case 4:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NON_CRITICAL), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NON_CRITICAL), gSmbiosHiiHandle);
     break;
 
   case 5:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CRITICAL_POWER_SUPPLY), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_CRITICAL_POWER_SUPPLY), gSmbiosHiiHandle);
     break;
 
   default:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNDEFINED), gSmbiosHiiHandle);
   }
   //
   // Bits 6:3 - DMTF Input Voltage Range Switching
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INPUT_VOLTAGE_RANGE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_INPUT_VOLTAGE_RANGE), gSmbiosHiiHandle);
   Temp = (Characteristics & 0x78) << 3;
   switch (Temp) {
   case 1:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER_SPACE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_OTHER_SPACE), gSmbiosHiiHandle);
     break;
 
   case 2:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_UNKNOWN), gSmbiosHiiHandle);
     break;
 
   case 3:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MANUAL), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_MANUAL), gSmbiosHiiHandle);
     break;
 
   case 4:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AUTO_SWITCH), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_AUTO_SWITCH), gSmbiosHiiHandle);
     break;
 
   case 5:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WIDE_RANGE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_WIDE_RANGE), gSmbiosHiiHandle);
     break;
 
   case 6:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_APPLICABLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_NOT_APPLICABLE), gSmbiosHiiHandle);
     break;
 
   default:
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_3), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_RESERVED_3), gSmbiosHiiHandle);
     break;
   }
   //
   // Power supply is unplugged from the wall
   //
   if (BIT (Characteristics, 2) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_UNPLUGGED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_UNPLUGGED), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_PLUGGED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_PLUGGED), gSmbiosHiiHandle);
   }
   //
   // Power supply is present
   //
   if (BIT (Characteristics, 1) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_PRESENT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_PRESENT), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_NOT_PRESENT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_NOT_PRESENT), gSmbiosHiiHandle);
   }
   //
   // hot replaceable
   //
   if (BIT (Characteristics, 0) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_REPLACE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_REPLACE), gSmbiosHiiHandle);
   } else {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_NOT_REPLACE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_POWER_SUPPLY_NOT_REPLACE), gSmbiosHiiHandle);
   }
 }
diff --ignore-file-name-case -Naur ShellR33/SmbiosView/QueryTable.c GccShellR33/SmbiosView/QueryTable.c
--- ShellR33/SmbiosView/QueryTable.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/SmbiosView/QueryTable.c	2009-11-05 13:49:56.000000000 -0800
@@ -23,7 +23,7 @@
 #include "EfiShellLib.h"
 #include "QueryTable.h"
 #include "PrintInfo.h"
-#include "smbios.h"
+#include "Smbios.h"
 
 #include STRING_DEFINES_FILE
 
@@ -2977,13 +2977,13 @@
   }
 
   if (NoInfo == TRUE) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_NO_INFO), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_NO_INFO), gSmbiosHiiHandle);
   }
 
   if (Value != 0) {
     PrintToken (
       STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_RSVD_BITS_SET),
-      HiiHandle,
+      gSmbiosHiiHandle,
       Value
       );
   }
@@ -3025,7 +3025,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_WAKEUP_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_WAKEUP_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (SystemWakeupTypeTable, Type);
 }
@@ -3038,7 +3038,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_CHASSIS_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_CHASSIS_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   //
   // query table and print info
@@ -3046,7 +3046,7 @@
   PRINT_TABLE_ITEM (SystemEnclosureTypeTable, Type);
 
   if (BIT (Type, 7) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_CHASSIS_LOCK_PRESENT), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_CHASSIS_LOCK_PRESENT), gSmbiosHiiHandle);
   }
 }
 
@@ -3056,7 +3056,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_CHASSIS_STATUS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_CHASSIS_STATUS), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Status, Option);
   PRINT_TABLE_ITEM (SystemEnclosureStatusTable, Status);
 }
@@ -3067,7 +3067,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_CHASSIS_SECURITY), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_CHASSIS_SECURITY), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Status, Option);
   PRINT_TABLE_ITEM (SESecurityStatusTable, Status);
 }
@@ -3080,7 +3080,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PROC_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PROC_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (ProcessorTypeTable, Type);
 }
@@ -3091,7 +3091,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PROC_UPDATE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PROC_UPDATE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Upgrade, Option);
   PRINT_TABLE_ITEM (ProcessorUpgradeTable, Upgrade);
 }
@@ -3104,7 +3104,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_DETECTMETHOD), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_DETECTMETHOD), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Method, Option);
   PRINT_TABLE_ITEM (McErrorDetectMethodTable, Method);
 }
@@ -3115,7 +3115,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_CORRECT_CAPABILITY), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_CORRECT_CAPABILITY), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Capability, Option);
   PRINT_BITS_INFO (McErrorCorrectCapabilityTable, Capability);
 }
@@ -3126,7 +3126,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_INTERLEAVE_SUPPORT), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_INTERLEAVE_SUPPORT), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Support, Option);
   PRINT_TABLE_ITEM (McInterleaveSupportTable, Support);
 }
@@ -3137,7 +3137,7 @@
   UINT8   Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_MEMORY_SPEED), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_MEMORY_SPEED), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Speed, Option);
   PRINT_BITS_INFO (McMemorySpeedsTable, Speed);
 }
@@ -3148,7 +3148,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_REQUIRED_VOLTAGES), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_REQUIRED_VOLTAGES), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Voltage, Option);
   PRINT_BITS_INFO (MemoryModuleVoltageTable, Voltage);
 }
@@ -3161,7 +3161,7 @@
   UINT8   Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_MODULE_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_MODULE_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_BITS_INFO (MmMemoryTypeTable, Type);
 }
@@ -3172,7 +3172,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_MODULE_ERROR_STATUS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_MODULE_ERROR_STATUS), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Status, Option);
   PRINT_BITS_INFO (MmErrorStatusTable, Status);
 }
@@ -3185,7 +3185,7 @@
   UINT8   Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_CACHE_SRAM_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_CACHE_SRAM_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION ((UINT8) Type, Option);
   PRINT_BITS_INFO (CacheSRAMTypeTable, (UINT8) Type);
 }
@@ -3196,7 +3196,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_CACHE_ERROR_CORRECTING), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_CACHE_ERROR_CORRECTING), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (CacheErrCorrectingTypeTable, Type);
 }
@@ -3207,7 +3207,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_CACHE_SYSTEM_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_CACHE_SYSTEM_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (CacheSystemCacheTypeTable, Type);
 }
@@ -3218,7 +3218,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_CACHE_ASSOCIATIVITY), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_CACHE_ASSOCIATIVITY), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Associativity, Option);
   PRINT_TABLE_ITEM (CacheAssociativityTable, Associativity);
 }
@@ -3231,7 +3231,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PORT_CONNECTOR_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PORT_CONNECTOR_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (PortConnectorTypeTable, Type);
 }
@@ -3242,7 +3242,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PORT_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PORT_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (PortTypeTable, Type);
 }
@@ -3255,7 +3255,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (SystemSlotTypeTable, Type);
 }
@@ -3266,7 +3266,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_DATA), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_DATA), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Width, Option);
   PRINT_TABLE_ITEM (SystemSlotDataBusWidthTable, Width);
 }
@@ -3277,7 +3277,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_CURRENT_USAGE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_CURRENT_USAGE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Usage, Option);
   PRINT_TABLE_ITEM (SystemSlotCurrentUsageTable, Usage);
 }
@@ -3288,7 +3288,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_LENGTH), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_SLOT_LENGTH), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Length, Option);
   PRINT_TABLE_ITEM (SystemSlotLengthTable, Length);
 }
@@ -3299,7 +3299,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SLOT_CHARACTERISTICS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SLOT_CHARACTERISTICS), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Chara1, Option);
   PRINT_BITS_INFO (SlotCharacteristics1Table, Chara1);
 }
@@ -3310,7 +3310,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SLOT_CHARACTERISTICS_2), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SLOT_CHARACTERISTICS_2), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Chara2, Option);
   PRINT_BITS_INFO (SlotCharacteristics2Table, Chara2);
 }
@@ -3323,7 +3323,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_ONBOARD_DEVICE_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_ONBOARD_DEVICE_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (OnboardDeviceTypesTable, Type);
 }
@@ -3336,7 +3336,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_EVENT_LOG_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_EVENT_LOG_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (SELTypesTable, Type);
 }
@@ -3347,7 +3347,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_EVENT_LOG_VAR_DATA_FORMAT), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_EVENT_LOG_VAR_DATA_FORMAT), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (SELVarDataFormatTypeTable, Type);
 }
@@ -3358,7 +3358,7 @@
   UINT8   Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_POST_RESULTS_BITMAP), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_POST_RESULTS_BITMAP), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
   PRINT_BITS_INFO (PostResultsBitmapDw1Table, Key);
 }
@@ -3369,7 +3369,7 @@
   UINT8   Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_POST_RESULTS_SECOND_DWORD), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_POST_RESULTS_SECOND_DWORD), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
   PRINT_BITS_INFO (PostResultsBitmapDw2Table, Key);
 }
@@ -3382,20 +3382,20 @@
 {
   UINT8       Temp;
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_MANAGEMENT_TYPES), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_MANAGEMENT_TYPES), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (SMType, Option);
 
   //
   // Deal with wide range Value
   //
   if (SMType >= 0x80000000) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_OEM_ASSIGNED), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_OEM_ASSIGNED), gSmbiosHiiHandle);
   } else if (SMType >= 0x00020000) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_RSVD_FOR_FUTURE_ASSIGN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_RSVD_FOR_FUTURE_ASSIGN), gSmbiosHiiHandle);
   } else if (SMType >= 0x00010000) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_MANAGEMENT_PROBE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_SYSTEM_MANAGEMENT_PROBE), gSmbiosHiiHandle);
   } else if (SMType >= 0x31) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_RSVD_FOR_FUTURE_ASSIGN), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_RSVD_FOR_FUTURE_ASSIGN), gSmbiosHiiHandle);
   } else {
     //
     // Deal with One byte data
@@ -3413,7 +3413,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PHYS_MEM_ARRAY_LOCATION), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PHYS_MEM_ARRAY_LOCATION), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Location, Option);
   PRINT_TABLE_ITEM (PMALocationTable, Location);
 }
@@ -3424,7 +3424,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PHYS_MEM_ARRAY_LOCATION), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PHYS_MEM_ARRAY_LOCATION), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Use, Option);
   PRINT_TABLE_ITEM (PMAUseTable, Use);
 }
@@ -3435,7 +3435,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PHYS_MEM_ARRAY_ERROR), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PHYS_MEM_ARRAY_ERROR), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (PMAErrorCorrectionTypesTable, Type);
 }
@@ -3448,7 +3448,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_DEVICE_FORM_FACTOR), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_DEVICE_FORM_FACTOR), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (FormFactor, Option);
   PRINT_TABLE_ITEM (MemoryDeviceFormFactorTable, FormFactor);
 }
@@ -3459,7 +3459,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_DEVICE_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_DEVICE_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (MemoryDeviceTypeTable, Type);
 }
@@ -3470,7 +3470,7 @@
   UINT8   Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_DEVICE_TYPE_DETAIL), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_DEVICE_TYPE_DETAIL), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (para, Option);
   PRINT_BITS_INFO (MemoryDeviceTypeDetailTable, para);
 }
@@ -3483,7 +3483,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_ERROR_INFO), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_ERROR_INFO), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (ErrorType, Option);
   PRINT_TABLE_ITEM (MemoryErrorTypeTable, ErrorType);
 }
@@ -3494,7 +3494,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_ERROR_GRANULARITY), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_ERROR_GRANULARITY), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Granularity, Option);
   PRINT_TABLE_ITEM (MemoryErrorGranularityTable, Granularity);
 }
@@ -3505,7 +3505,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_ERROR_OP), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_ERROR_OP), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Operation, Option);
   PRINT_TABLE_ITEM (MemoryErrorOperationTable, Operation);
 }
@@ -3518,7 +3518,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_POINTING_DEVICE_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_POINTING_DEVICE_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (PointingDeviceTypeTable, Type);
 }
@@ -3529,7 +3529,7 @@
   UINT8   Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_POINTING_DEVICE_INTERFACE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_POINTING_DEVICE_INTERFACE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Interface, Option);
   PRINT_TABLE_ITEM (PointingDeviceInterfaceTable, Interface);
 }
@@ -3542,7 +3542,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PORTABLE_BATT_DEV_CHEM), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_PORTABLE_BATT_DEV_CHEM), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
   PRINT_TABLE_ITEM (PBDeviceChemistryTable, Key);
 }
@@ -3558,7 +3558,7 @@
   UINT8       Loc;
 
   Loc = (UINT8) ((Key & 0xE0) >> 5);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_VOLTAGE_PROBE_LOC), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_VOLTAGE_PROBE_LOC), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Loc, Option);
   PRINT_TABLE_ITEM (VPLocationTable, Loc);
 }
@@ -3572,7 +3572,7 @@
   UINT8       Status;
 
   Status = (UINT8) (Key & 0x1F);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_VOLTAGE_PROBE_STATUS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_VOLTAGE_PROBE_STATUS), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Status, Option);
   PRINT_TABLE_ITEM (VPStatusTable, Status);
 }
@@ -3588,7 +3588,7 @@
   UINT8       Status;
 
   Status = (UINT8) ((Key & 0xE0) >> 5);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_COOLING_DEV_STATUS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_COOLING_DEV_STATUS), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Status, Option);
   PRINT_TABLE_ITEM (CoolingDeviceStatusTable, Status);
 }
@@ -3602,7 +3602,7 @@
   UINT8       Type;
 
   Type = (UINT8) (Key & 0x1F);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_COOLING_DEV_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_COOLING_DEV_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Type, Option);
   PRINT_TABLE_ITEM (CoolingDeviceTypeTable, Type);
 }
@@ -3618,7 +3618,7 @@
   UINT8       Status;
 
   Status = (UINT8) ((Key & 0xE0) >> 5);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_TEMP_PROBE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_TEMP_PROBE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Status, Option);
   PRINT_TABLE_ITEM (TemperatureProbeStatusTable, Status);
 }
@@ -3632,7 +3632,7 @@
   UINT8       Loc;
 
   Loc = (UINT8) (Key & 0x1F);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_VOLTAGE_PROBE_LOC), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_VOLTAGE_PROBE_LOC), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Loc, Option);
   PRINT_TABLE_ITEM (TemperatureProbeLocTable, Loc);
 }
@@ -3648,7 +3648,7 @@
   UINT8       Status;
 
   Status = (UINT8) ((Key & 0xE0) >> 5);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_ELEC_PROBE_STATUS), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_ELEC_PROBE_STATUS), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Status, Option);
   PRINT_TABLE_ITEM (ECPStatusTable, Status);
 }
@@ -3662,7 +3662,7 @@
   UINT8       Loc;
 
   Loc = (UINT8) (Key & 0x1F);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_ELEC_PROBE_LOC), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_ELEC_PROBE_LOC), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Loc, Option);
   PRINT_TABLE_ITEM (ECPLocTable, Loc);
 }
@@ -3675,7 +3675,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MANAGEMENT_DEV_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MANAGEMENT_DEV_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
   PRINT_TABLE_ITEM (MDTypeTable, Key);
 }
@@ -3686,7 +3686,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MANAGEMENT_DEV_ADDR_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MANAGEMENT_DEV_ADDR_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
   PRINT_TABLE_ITEM (MDAddressTypeTable, Key);
 }
@@ -3699,7 +3699,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_CHANNEL_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_MEM_CHANNEL_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
   PRINT_TABLE_ITEM (MemoryChannelTypeTable, Key);
 }
@@ -3712,7 +3712,7 @@
   UINT8 Option
   )
 {
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_BMC_INTERFACE_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_BMC_INTERFACE_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
   PRINT_TABLE_ITEM (IPMIDIBMCInterfaceTypeTable, Key);
 }
@@ -3726,7 +3726,7 @@
   //
   // display
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_STRUCT_TYPE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_QUERYTABLE_STRUCT_TYPE), gSmbiosHiiHandle);
   PRINT_INFO_OPTION (Key, Option);
   PRINT_TABLE_ITEM (StructureTypeInfoTable, Key);
 }
diff --ignore-file-name-case -Naur ShellR33/SmbiosView/Smbios.h GccShellR33/SmbiosView/Smbios.h
--- ShellR33/SmbiosView/Smbios.h	2008-10-06 00:03:04.000000000 -0700
+++ GccShellR33/SmbiosView/Smbios.h	2009-11-05 13:49:56.000000000 -0800
@@ -32,7 +32,7 @@
     0xda4ccda5, 0xe09d, 0x4f89, 0xb0, 0xf2, 0xdf, 0x84, 0x5c, 0xbb, 0x92, 0x80 \
   }
 
-extern EFI_HII_HANDLE HiiHandle;
+extern EFI_HII_HANDLE gSmbiosHiiHandle;
 
 
 
diff --ignore-file-name-case -Naur ShellR33/SmbiosView/smbiosview.c GccShellR33/SmbiosView/smbiosview.c
--- ShellR33/SmbiosView/smbiosview.c	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/SmbiosView/smbiosview.c	2009-11-05 13:49:56.000000000 -0800
@@ -26,7 +26,7 @@
 #include "smbiosview.h"
 #include "PrintInfo.h"
 #include "QueryTable.h"
-#include "smbios.h"
+#include "Smbios.h"
 
 extern UINT8                STRING_ARRAY_NAME[];
 
@@ -45,7 +45,7 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE              HiiHandle;
+EFI_HII_HANDLE              gSmbiosHiiHandle;
 EFI_GUID                    EfiSmbiosViewGuid = EFI_SMBIOS_GUID;
 SHELL_VAR_CHECK_ITEM        SmbiosviewCheckList[] = {
   {
@@ -147,7 +147,7 @@
   //
   EnableOutputTabPause();
 
-  Status = LibInitializeStrings (&HiiHandle, STRING_ARRAY_NAME, &EfiSmbiosViewGuid);
+  Status = LibInitializeStrings (&gSmbiosHiiHandle, STRING_ARRAY_NAME, &EfiSmbiosViewGuid);
 
   if (EFI_ERROR (Status)) {
     return Status;
@@ -157,19 +157,19 @@
   if (VarCheckOk != RetCode) {
     switch (RetCode) {
     case VarCheckLackValue:
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_LACK_ARG), HiiHandle, L"smbiosview", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_LACK_ARG), gSmbiosHiiHandle, L"smbiosview", Useful);
       break;
 
     case VarCheckConflict:
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_FLAG_CONFLICT), HiiHandle, L"smbiosview", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_FLAG_CONFLICT), gSmbiosHiiHandle, L"smbiosview", Useful);
       break;
 
     case VarCheckDuplicate:
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_DUP_FLAG), HiiHandle, L"smbiosview", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_DUP_FLAG), gSmbiosHiiHandle, L"smbiosview", Useful);
       break;
 
     case VarCheckUnknown:
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_UNKNOWN_FLAG), HiiHandle, L"smbiosview", Useful);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_UNKNOWN_FLAG), gSmbiosHiiHandle, L"smbiosview", Useful);
       break;
 
     default:
@@ -191,10 +191,10 @@
         ChkPck.FlagCount > 2 ||
         (2 == ChkPck.FlagCount && !LibCheckVarGetFlag (&ChkPck, L"-b"))
         ) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), HiiHandle, L"smbiosview");
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), gSmbiosHiiHandle, L"smbiosview");
       Status = EFI_INVALID_PARAMETER;
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_VERBOSE_HELP), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_VERBOSE_HELP), gSmbiosHiiHandle);
       Status = EFI_SUCCESS;
     }
 
@@ -202,7 +202,7 @@
   }
 
   if (ChkPck.ValueCount > 0) {
-    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), HiiHandle, L"smbiosview");
+    PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_TOO_MANY), gSmbiosHiiHandle, L"smbiosview");
     Status = EFI_INVALID_PARAMETER;
     goto Done;
   }
@@ -233,7 +233,7 @@
   if (Item) {
     StructType = (UINT8) StrToUInteger (Item->VarStr, &Status);
     if (EFI_ERROR (Status)) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"smbiosview", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gSmbiosHiiHandle, L"smbiosview", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto Done;
     }
@@ -244,7 +244,7 @@
     RandomView   = FALSE;
     StructHandle = (UINT16) (StrToUIntegerBase (Item->VarStr, 16, &Status));
     if (EFI_ERROR (Status)) {
-      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), HiiHandle, L"smbiosview", Item->VarStr);
+      PrintToken (STRING_TOKEN (STR_SHELLENV_GNC_INVALID_ARG), gSmbiosHiiHandle, L"smbiosview", Item->VarStr);
       Status = EFI_INVALID_PARAMETER;
       goto Done;
     }
@@ -324,7 +324,7 @@
   SMBiosTable = NULL;
   LibSmbiosGetEPS (&SMBiosTable);
   if (SMBiosTable == NULL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gSmbiosHiiHandle);
     return EFI_BAD_BUFFER_SIZE;
   }
 
@@ -338,21 +338,21 @@
     SmbiosMinorVersion = SMBiosTable->MinorVersion;
 
     Print (L"=========================================================\n");
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERY_STRUCT_COND), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERY_STRUCT_COND), gSmbiosHiiHandle);
 
     if (QueryType == STRUCTURE_TYPE_RANDOM) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE_RANDOM), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE_RANDOM), gSmbiosHiiHandle);
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE), HiiHandle, QueryType);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYTYPE), gSmbiosHiiHandle, QueryType);
     }
 
     if (RandomView) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE_RANDOM), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE_RANDOM), gSmbiosHiiHandle);
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE), HiiHandle, QueryHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUERYHANDLE), gSmbiosHiiHandle, QueryHandle);
     }
 
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOWTYPE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOWTYPE), gSmbiosHiiHandle);
     Print (GetShowTypeString (gShowType));
     Print (L"\n\n");
 
@@ -401,15 +401,15 @@
       Print (L"\n=========================================================\n");
       PrintToken (
         STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE_HANDLE_DUMP_STRUCT),
-        HiiHandle,
+        gSmbiosHiiHandle,
         pStruct.Hdr->Type,
         pStruct.Hdr->Handle
         );
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX_LENGTH), HiiHandle, Index, Length);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX_LENGTH), gSmbiosHiiHandle, Index, Length);
       //
       // Addr of structure in structure in table
       //
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ADDR), HiiHandle, TableHead + Offset);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ADDR), gSmbiosHiiHandle, TableHead + Offset);
       DumpHex (0, 0, Length, Buffer);
 
       //
@@ -473,7 +473,7 @@
     return EFI_SUCCESS;
   }
 
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTER_Q), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTER_Q), gSmbiosHiiHandle);
   Input (L"$", InputStr, 3);
 
   //
@@ -507,7 +507,7 @@
       //
       gShowType = (UINT8) (InputStr[Index] - (CHAR16) (L'0'));
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_UNKNOWN_INTERNAL_COMMAND), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_UNKNOWN_INTERNAL_COMMAND), gSmbiosHiiHandle);
     }
   } else if (InputStr[Index] == '/') {
     Index++;
@@ -521,7 +521,7 @@
         return Status;
       }
     } else {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_UNKNOWN_INTERNAL_COMMAND), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_UNKNOWN_INTERNAL_COMMAND), gSmbiosHiiHandle);
     }
   } else {
     Print (L"");
@@ -539,25 +539,25 @@
   // print help info
   //
   Print (L"\n============================================================\n");
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SMBIOS_UTILITY), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_USAGE), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_HSMBIOSVIEW), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_EXAMPLES), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOW_STAT_INFO), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOW_ALL_STRUCT_TYPE), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOW_STRUCT_HANDLE), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOW_ALL_OUTPUT_TO_FILE), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SMBIOS_UTILITY), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_USAGE), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_HSMBIOSVIEW), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_EXAMPLES), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOW_STAT_INFO), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOW_ALL_STRUCT_TYPE), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOW_STRUCT_HANDLE), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOW_ALL_OUTPUT_TO_FILE), gSmbiosHiiHandle);
   Print (L"\n");
   //
   // Internal command
   //
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INTERNAL_COMMANDS), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUIT_SMBIOSVIEW), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CHANGE_DISPLAY_NONE), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CHANGE_DISPLAY_OUTLINE), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CHANGE_DISPLAY_NORMAL), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CHANGE_DISPLAY_DETAIL), HiiHandle);
-  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOW_HELP), HiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INTERNAL_COMMANDS), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_QUIT_SMBIOSVIEW), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CHANGE_DISPLAY_NONE), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CHANGE_DISPLAY_OUTLINE), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CHANGE_DISPLAY_NORMAL), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CHANGE_DISPLAY_DETAIL), gSmbiosHiiHandle);
+  PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SHOW_HELP), gSmbiosHiiHandle);
   Print (L"\n============================================================\n");
 }
 
@@ -603,12 +603,12 @@
   SMBiosTable = NULL;
   LibSmbiosGetEPS (&SMBiosTable);
   if (SMBiosTable == NULL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gSmbiosHiiHandle);
     return EFI_NOT_FOUND;
   }
 
   if (CompareMem (SMBiosTable->AnchorString, "_SM_", 4) != 0) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SMBIOS_TABLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_SMBIOS_TABLE), gSmbiosHiiHandle);
     return EFI_INVALID_PARAMETER;
   }
   //
@@ -622,7 +622,7 @@
   mStatisticsTable = (STRUCTURE_STATISTICS *) AllocatePool (SMBiosTable->NumberOfSmbiosStructures * sizeof (STRUCTURE_STATISTICS));
 
   if (mStatisticsTable == NULL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OUT_OF_MEM), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OUT_OF_MEM), gSmbiosHiiHandle);
     return EFI_OUT_OF_RESOURCES;
   }
 
@@ -686,7 +686,7 @@
   //
   LibSmbiosGetEPS (&SMBiosTable);
   if (SMBiosTable == NULL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_TABLE), gSmbiosHiiHandle);
     return EFI_UNSUPPORTED;
   }
 
@@ -698,7 +698,7 @@
   }
 
   if (mStatisticsTable == NULL) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_STATS), HiiHandle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_CANNOT_ACCESS_STATS), gSmbiosHiiHandle);
     return EFI_NOT_FOUND;
   }
 
@@ -709,12 +709,12 @@
   // display statistics table content
   //
   for (Index = 1; Index <= Num; Index++) {
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX), HiiHandle, pStatistics->Index);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE), HiiHandle, pStatistics->Type);
-    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_HANDLE), HiiHandle, pStatistics->Handle);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_INDEX), gSmbiosHiiHandle, pStatistics->Index);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_TYPE), gSmbiosHiiHandle, pStatistics->Type);
+    PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_HANDLE), gSmbiosHiiHandle, pStatistics->Handle);
     if (Option >= SHOW_DETAIL) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OFFSET), HiiHandle, pStatistics->Addr);
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_LENGTH), HiiHandle, pStatistics->Length);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_OFFSET), gSmbiosHiiHandle, pStatistics->Addr);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_LENGTH), gSmbiosHiiHandle, pStatistics->Length);
     }
 
     Print (L"\n");
@@ -723,7 +723,7 @@
     // Display 20 lines and wait for a page break
     //
     if (Index % 20 == 0) {
-      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTER_CONTINUE), HiiHandle);
+      PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_SMBIOSVIEW_ENTER_CONTINUE), gSmbiosHiiHandle);
       Status = WaitEnter ();
       if (EFI_ERROR (Status)) {
         if (Status == EFI_ABORTED) {
diff --ignore-file-name-case -Naur ShellR33/SmbiosView/Smbiosview.inf GccShellR33/SmbiosView/Smbiosview.inf
--- ShellR33/SmbiosView/Smbiosview.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/SmbiosView/Smbiosview.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,7 +25,7 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   SmBiosViewStrings.uni
   QueryTable.c
   EventLogInfo.c
@@ -36,19 +36,19 @@
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
-  $(EFI_SOURCE)\Application\Shell\Inc
-  $(EFI_SOURCE)\Application\Shell\Library
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
+  $(EFI_SOURCE)/Application/Shell/Inc
+  $(EFI_SOURCE)/Application/Shell/Library
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/stall/stall.inf GccShellR33/stall/stall.inf
--- ShellR33/stall/stall.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/stall/stall.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   stallStrings.uni
   stall.c
   stall.h
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/TelnetMgmt/TelnetMgmt.c GccShellR33/TelnetMgmt/TelnetMgmt.c
--- ShellR33/TelnetMgmt/TelnetMgmt.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/TelnetMgmt/TelnetMgmt.c	2009-11-05 13:49:56.000000000 -0800
@@ -32,7 +32,7 @@
 //
 #include STRING_DEFINES_FILE
 
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiTelnetMgmtGuid = EFI_TELNETMGMT_GUID;
 EFI_GUID        mEfiTelnetServerGuid = EFI_TELNET_SERVER_PROTOCOL_GUID;
 SHELL_VAR_CHECK_ITEM        TelnetmgmtCheckList[] = {
diff --ignore-file-name-case -Naur ShellR33/TelnetMgmt/TelnetMgmt.h GccShellR33/TelnetMgmt/TelnetMgmt.h
--- ShellR33/TelnetMgmt/TelnetMgmt.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/TelnetMgmt/TelnetMgmt.h	2009-11-05 13:49:56.000000000 -0800
@@ -29,4 +29,4 @@
     0x55d41b9a, 0x954d, 0x4fbb, 0x8d, 0x6d, 0x24, 0x75, 0xf5, 0x30, 0x9d, 0x37 \
   }
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/TelnetMgmt/TelnetMgmt.inf GccShellR33/TelnetMgmt/TelnetMgmt.inf
--- ShellR33/TelnetMgmt/TelnetMgmt.inf	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/TelnetMgmt/TelnetMgmt.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,23 +25,23 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   TelnetMgmtStrings.uni
   TelnetMgmt.c
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/TelnetMgmt/TelnetServer.h GccShellR33/TelnetMgmt/TelnetServer.h
--- ShellR33/TelnetMgmt/TelnetServer.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/TelnetMgmt/TelnetServer.h	2009-09-22 15:37:05.000000000 -0700
@@ -69,11 +69,11 @@
 //
 #define EFI_TELNET_SERVER_REVISION  0x00010000
 
-typedef struct _EFI_TELNET_SERVER_PROTOCOL {
+struct _EFI_TELNET_SERVER_PROTOCOL {
   UINT64                        Revision;
   UINT8                         TerminalType;
   EFI_TELNET_SERVER_SET_OPTION  SetOption;
-} EFI_TELNET_SERVER_PROTOCOL;
+};
 
 //
 // Global Variables
diff --ignore-file-name-case -Naur ShellR33/time/time.c GccShellR33/time/time.c
--- ShellR33/time/time.c	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/time/time.c	2009-09-22 15:37:05.000000000 -0700
@@ -93,8 +93,8 @@
 {
   EFI_STATUS              Status;
   EFI_TIME                Time;
-  UINTN                   Offset;
-  UINTN                   Data;
+  INTN                    Offset;
+  INTN                    Data;
   EFI_HII_HANDLE          HiiHandle;
   INTN                    nValue;
   UINTN                   uValueSize;
diff --ignore-file-name-case -Naur ShellR33/time/time.inf GccShellR33/time/time.inf
--- ShellR33/time/time.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/time/time.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    TimeStrings.uni
    Time.c
    Time.h 
                                           
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/touch/touch.c GccShellR33/touch/touch.c
--- ShellR33/touch/touch.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/touch/touch.c	2009-11-05 13:49:56.000000000 -0800
@@ -64,8 +64,8 @@
 //
 // Global Variables
 //
-EFI_HII_HANDLE  HiiHandle;
-EFI_GUID        EfiTouchGuid = EFI_TOUCH_GUID;
+static EFI_HII_HANDLE   HiiHandle;
+EFI_GUID                EfiTouchGuid = EFI_TOUCH_GUID;
 SHELL_VAR_CHECK_ITEM    TouchCheckList[] = {
   {
     L"-r",
diff --ignore-file-name-case -Naur ShellR33/touch/touch.h GccShellR33/touch/touch.h
--- ShellR33/touch/touch.h	2005-08-23 00:16:36.000000000 -0700
+++ GccShellR33/touch/touch.h	2009-11-05 13:49:56.000000000 -0800
@@ -29,4 +29,4 @@
     0xa16a4695, 0x5815, 0x4d4f, 0xb8, 0xe, 0x6a, 0xf, 0x88, 0xac, 0xdb, 0x6c \
   }
 
-#endif
\ No newline at end of file
+#endif
diff --ignore-file-name-case -Naur ShellR33/touch/touch.inf GccShellR33/touch/touch.inf
--- ShellR33/touch/touch.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/touch/touch.inf	2009-09-22 15:37:05.000000000 -0700
@@ -39,23 +39,23 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   TouchStrings.uni
   touch.c
     
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/type/type.c GccShellR33/type/type.c
--- ShellR33/type/type.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/type/type.c	2009-11-05 13:49:56.000000000 -0800
@@ -59,7 +59,7 @@
 BOOLEAN         TypeUnicode;
 BOOLEAN         TypeAuto;
 
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiTypeGuid = EFI_TYPE_GUID;
 SHELL_VAR_CHECK_ITEM    TypeCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/type/type.inf GccShellR33/type/type.inf
--- ShellR33/type/type.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/type/type.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    TypeStrings.uni
    type.c
    type.h 
                                           
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/tzone/timezone.inf GccShellR33/tzone/timezone.inf
--- ShellR33/tzone/timezone.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/tzone/timezone.inf	2009-09-22 15:37:05.000000000 -0700
@@ -25,24 +25,24 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   TZoneStrings.uni
   tzone.c
   tzone.h
 
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/unload/unload.c GccShellR33/unload/unload.c
--- ShellR33/unload/unload.c	2009-05-27 01:55:16.000000000 -0700
+++ GccShellR33/unload/unload.c	2009-09-22 15:37:05.000000000 -0700
@@ -73,7 +73,7 @@
 EFI_STATUS
 _UnloadGetDriverName (
   EFI_HANDLE                        DriverBindingHandle,
-  UINT8                             *Language,
+  CHAR8                             *Language,
   BOOLEAN                           ImageName,
   CHAR16                            **DriverName
   )
@@ -184,7 +184,7 @@
 
     DevicePath      = NULL;
     BestDeviceName  = NULL;
-    Status          = BS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, &DevicePath);
+    Status          = BS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, (VOID **)&DevicePath);
 
     Print (L"\n");
     PrintToken (STRING_TOKEN (STR_UNLOAD_CONTROLLER_NAME), HiiUnloadHandle);
diff --ignore-file-name-case -Naur ShellR33/unload/unload.inf GccShellR33/unload/unload.inf
--- ShellR33/unload/unload.inf	2007-03-15 20:07:49.000000000 -0700
+++ GccShellR33/unload/unload.inf	2009-09-22 15:37:05.000000000 -0700
@@ -39,23 +39,23 @@
 COMPONENT_TYPE       = APPLICATION
 
 [sources.common]
-  ..\ShCommonStrings.uni
+  ../ShCommonStrings.uni
   UnloadStrings.uni
   unload.c
     
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/ver/Ver.inf GccShellR33/ver/Ver.inf
--- ShellR33/ver/Ver.inf	2008-08-13 23:02:46.000000000 -0700
+++ GccShellR33/ver/Ver.inf	2009-11-04 15:23:34.000000000 -0800
@@ -40,33 +40,35 @@
 
 
 [sources.common]
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    VerStrings.uni
    Ver.c
    Ver.h 
    
-[sources.ia32,sources.x64]
-   ia32\ver32.c
+[sources.ia32,sources.x64,sources.ARM]
+   ia32/ver32.c
 
 [sources.ipf]
-   ipf\ver64.c
+   ipf/ver64.c
 
 [sources.ebc]
-   ebc\verEbc.c
+   ebc/verEbc.c
+   
+   
                                           
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
diff --ignore-file-name-case -Naur ShellR33/vol/vol.c GccShellR33/vol/vol.c
--- ShellR33/vol/vol.c	2006-08-07 02:14:38.000000000 -0700
+++ GccShellR33/vol/vol.c	2009-11-05 13:49:56.000000000 -0800
@@ -32,7 +32,7 @@
 //
 #include STRING_DEFINES_FILE
 
-EFI_HII_HANDLE  HiiHandle;
+static EFI_HII_HANDLE  HiiHandle;
 EFI_GUID        EfiVolGuid = EFI_VOL_GUID;
 SHELL_VAR_CHECK_ITEM    VolCheckList[] = {
   {
diff --ignore-file-name-case -Naur ShellR33/vol/Vol.inf GccShellR33/vol/Vol.inf
--- ShellR33/vol/Vol.inf	2007-06-25 02:05:05.000000000 -0700
+++ GccShellR33/vol/Vol.inf	2009-09-22 15:37:05.000000000 -0700
@@ -40,24 +40,24 @@
 
 
 [sources.common]
-   ..\ShCommonStrings.uni   
+   ../ShCommonStrings.uni   
    VolStrings.uni
    Vol.c
    Vol.h 
                                           
 [includes.common]
   .
-  ..\Inc
-  ..\Library
-  $(EDK_SOURCE)\Foundation
-  $(EDK_SOURCE)\Foundation\Include
-  $(EDK_SOURCE)\Foundation\Include\IndustryStandard
-  $(EDK_SOURCE)\Foundation\Efi
-  $(EDK_SOURCE)\Foundation\Efi\Include
-  $(EDK_SOURCE)\Foundation\FrameWork
-  $(EDK_SOURCE)\Foundation\FrameWork\Include
-  $(EDK_SOURCE)\Foundation\Core\Dxe
-  $(DEST_DIR)\
+  ../Inc
+  ../Library
+  $(EDK_SOURCE)/Foundation
+  $(EDK_SOURCE)/Foundation/Include
+  $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+  $(EDK_SOURCE)/Foundation/Efi
+  $(EDK_SOURCE)/Foundation/Efi/Include
+  $(EDK_SOURCE)/Foundation/FrameWork
+  $(EDK_SOURCE)/Foundation/FrameWork/Include
+  $(EDK_SOURCE)/Foundation/Core/Dxe
+  $(DEST_DIR)/
 
 [libraries.common]  
   EfiShellLib
