]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/UserInterface/SetupBrowser/Dxe/Boolean.c
Retiring the ANT/JAVA build and removing the older EDK II packages that required...
[mirror_edk2.git] / EdkModulePkg / Universal / UserInterface / SetupBrowser / Dxe / Boolean.c
diff --git a/EdkModulePkg/Universal/UserInterface/SetupBrowser/Dxe/Boolean.c b/EdkModulePkg/Universal/UserInterface/SetupBrowser/Dxe/Boolean.c
deleted file mode 100644 (file)
index 138725d..0000000
+++ /dev/null
@@ -1,1367 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2006 - 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-Module Name:\r
-\r
-  Boolean.c\r
-\r
-Abstract:\r
-\r
-  This routine will evaluate the IFR inconsistency data to determine if\r
-  something is a valid entry for a particular expression\r
-\r
---*/\r
-\r
-#include "Setup.h"\r
-#include "Ui.h"\r
-\r
-//\r
-// Global stack used to evaluate boolean expresions\r
-//\r
-BOOLEAN *mBooleanEvaluationStack    = (BOOLEAN) 0;\r
-BOOLEAN *mBooleanEvaluationStackEnd = (BOOLEAN) 0;\r
-\r
-STATIC\r
-VOID\r
-GrowBooleanStack (\r
-  IN OUT BOOLEAN  **Stack,\r
-  IN     UINTN    StackSizeInBoolean\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Grow size of the boolean stack\r
-\r
-Arguments:\r
-\r
-  Stack     - Old stack on the way in and new stack on the way out\r
-\r
-  StackSizeInBoolean - New size of the stack\r
-\r
-Returns:\r
-\r
-  NONE\r
-\r
---*/\r
-{\r
-  BOOLEAN *NewStack;\r
-\r
-  NewStack = AllocatePool (StackSizeInBoolean * sizeof (BOOLEAN));\r
-  ASSERT (NewStack != NULL);\r
-\r
-  if (*Stack != NULL) {\r
-    //\r
-    // Copy to Old Stack to the New Stack\r
-    //\r
-    CopyMem (\r
-      NewStack,\r
-      mBooleanEvaluationStack,\r
-      (mBooleanEvaluationStackEnd - mBooleanEvaluationStack) * sizeof (BOOLEAN)\r
-      );\r
-\r
-    //\r
-    // Make the Stack pointer point to the old data in the new stack\r
-    //\r
-    *Stack = NewStack + (*Stack - mBooleanEvaluationStack);\r
-\r
-    //\r
-    // Free The Old Stack\r
-    //\r
-    FreePool (mBooleanEvaluationStack);\r
-  }\r
-\r
-  mBooleanEvaluationStack     = NewStack;\r
-  mBooleanEvaluationStackEnd  = NewStack + StackSizeInBoolean;\r
-}\r
-\r
-STATIC\r
-VOID\r
-InitializeBooleanEvaluator (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Allocate a global stack for boolean processing.\r
-\r
-Arguments:\r
-\r
-  NONE\r
-\r
-Returns:\r
-\r
-  NONE\r
-\r
---*/\r
-{\r
-  BOOLEAN *NullStack;\r
-\r
-  NullStack = NULL;\r
-  GrowBooleanStack (&NullStack, 0x1000);\r
-}\r
-\r
-STATIC\r
-VOID\r
-PushBool (\r
-  IN OUT BOOLEAN  **Stack,\r
-  IN BOOLEAN      BoolResult\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Push an element onto the Boolean Stack\r
-\r
-Arguments:\r
-\r
-  Stack      - Current stack location.\r
-  BoolResult - BOOLEAN to push.\r
-\r
-Returns:\r
-\r
-  None.\r
-\r
---*/\r
-{\r
-  CopyMem (*Stack, &BoolResult, sizeof (BOOLEAN));\r
-  *Stack += 1;\r
-\r
-  if (*Stack >= mBooleanEvaluationStackEnd) {\r
-    //\r
-    // If we run out of stack space make a new one that is 2X as big. Copy\r
-    // the old data into the new stack and update Stack to point to the old\r
-    // data in the new stack.\r
-    //\r
-    GrowBooleanStack (\r
-      Stack,\r
-      (mBooleanEvaluationStackEnd - mBooleanEvaluationStack) * sizeof (BOOLEAN) * 2\r
-      );\r
-  }\r
-}\r
-\r
-STATIC\r
-BOOLEAN\r
-PopBool (\r
-  IN OUT BOOLEAN **Stack\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Pop an element from the Boolean stack.\r
-\r
-Arguments:\r
-\r
-  Stack - Current stack location\r
-\r
-Returns:\r
-\r
-  Top of the BOOLEAN stack.\r
-\r
---*/\r
-{\r
-  BOOLEAN ReturnValue;\r
-\r
-  *Stack -= 1;\r
-  CopyMem (&ReturnValue, *Stack, sizeof (BOOLEAN));\r
-  return ReturnValue;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-GrowBooleanExpression (\r
-  IN      EFI_INCONSISTENCY_DATA  *InconsistentTags,\r
-  OUT     VOID                    **BooleanExpression,\r
-  IN OUT  UINTN                   *BooleanExpressionLength\r
-  )\r
-{\r
-  UINT8 *NewExpression;\r
-\r
-  NewExpression = AllocatePool (*BooleanExpressionLength + sizeof (EFI_INCONSISTENCY_DATA));\r
-  ASSERT (NewExpression != NULL);\r
-\r
-  if (*BooleanExpression != NULL) {\r
-    //\r
-    // Copy Old buffer to the New buffer\r
-    //\r
-    CopyMem (NewExpression, *BooleanExpression, *BooleanExpressionLength);\r
-\r
-    CopyMem (&NewExpression[*BooleanExpressionLength], InconsistentTags, sizeof (EFI_INCONSISTENCY_DATA));\r
-\r
-    //\r
-    // Free The Old buffer\r
-    //\r
-    FreePool (*BooleanExpression);\r
-  } else {\r
-    //\r
-    // Copy data into new buffer\r
-    //\r
-    CopyMem (NewExpression, InconsistentTags, sizeof (EFI_INCONSISTENCY_DATA));\r
-  }\r
-\r
-  *BooleanExpressionLength  = *BooleanExpressionLength + sizeof (EFI_INCONSISTENCY_DATA);\r
-  *BooleanExpression        = (VOID *) NewExpression;\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-VOID\r
-CreateBooleanExpression (\r
-  IN  EFI_FILE_FORM_TAGS    *FileFormTags,\r
-  IN  UINT16                Value,\r
-  IN  UINT16                Id,\r
-  IN  BOOLEAN               Complex,\r
-  OUT VOID                  **BooleanExpression,\r
-  OUT UINTN                 *BooleanExpressionLength\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-{\r
-  UINTN                   Count;\r
-  EFI_INCONSISTENCY_DATA  *InconsistentTags;\r
-  EFI_INCONSISTENCY_DATA  FakeInconsistentTags;\r
-\r
-  InconsistentTags = FileFormTags->InconsistentTags;\r
-\r
-  //\r
-  // Did we run into a question that contains the Id we are looking for?\r
-  //\r
-  for (Count = 0; InconsistentTags->Operand != 0xFF; Count++) {\r
-\r
-    //\r
-    // Reserve INVALID_OFFSET_VALUE - 1 for TURE and FALSE, because we need to treat them as well\r
-    // as ideqid etc. but they have no coresponding id, so we reserve this value.\r
-    //\r
-    if (InconsistentTags->QuestionId1 == Id ||\r
-        InconsistentTags->QuestionId1 == INVALID_OFFSET_VALUE - 1) {\r
-      //\r
-      // If !Complex - means evaluate a single if/endif expression\r
-      //\r
-      if (!Complex) {\r
-        //\r
-        // If the ConsistencyId does not match the expression we are looking for\r
-        // skip to the next consistency database entry\r
-        //\r
-        if (InconsistentTags->ConsistencyId != Value) {\r
-          goto NextEntry;\r
-        }\r
-      }\r
-      //\r
-      // We need to rewind to the beginning of the Inconsistent expression\r
-      //\r
-      for (;\r
-           (InconsistentTags->Operand != EFI_IFR_INCONSISTENT_IF_OP) &&\r
-             (InconsistentTags->Operand != EFI_IFR_GRAYOUT_IF_OP) &&\r
-             (InconsistentTags->Operand != EFI_IFR_SUPPRESS_IF_OP);\r
-              ) {\r
-        InconsistentTags = InconsistentTags->Previous;\r
-      }\r
-      //\r
-      // Store the consistency check expression, ensure the next for loop starts at the op-code afterwards\r
-      //\r
-      GrowBooleanExpression (InconsistentTags, BooleanExpression, BooleanExpressionLength);\r
-      InconsistentTags = InconsistentTags->Next;\r
-\r
-      //\r
-      // Keep growing until we hit the End expression op-code or we hit the beginning of another\r
-      // consistency check like grayout/suppress\r
-      //\r
-      for (;\r
-           InconsistentTags->Operand != EFI_IFR_END_IF_OP &&\r
-           InconsistentTags->Operand != EFI_IFR_GRAYOUT_IF_OP &&\r
-           InconsistentTags->Operand != EFI_IFR_SUPPRESS_IF_OP;\r
-            ) {\r
-        GrowBooleanExpression (InconsistentTags, BooleanExpression, BooleanExpressionLength);\r
-        InconsistentTags = InconsistentTags->Next;\r
-      }\r
-      //\r
-      // Store the EndExpression Op-code\r
-      //\r
-      GrowBooleanExpression (InconsistentTags, BooleanExpression, BooleanExpressionLength);\r
-    }\r
-\r
-NextEntry:\r
-    if (InconsistentTags->Next != NULL) {\r
-      //\r
-      // Skip to next entry\r
-      //\r
-      InconsistentTags = InconsistentTags->Next;\r
-    }\r
-  }\r
-\r
-  FakeInconsistentTags.Operand = 0;\r
-\r
-  //\r
-  // Add one last expression which will signify we have definitely hit the end\r
-  //\r
-  GrowBooleanExpression (&FakeInconsistentTags, BooleanExpression, BooleanExpressionLength);\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-BooleanVariableWorker (\r
-  IN     CHAR16                   *VariableName,\r
-  IN     EFI_VARIABLE_DEFINITION  *VariableDefinition,\r
-  IN     BOOLEAN                  *StackPtr,\r
-  IN OUT UINTN                    *SizeOfVariable,\r
-  IN OUT VOID                     **VariableData\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-{\r
-  EFI_STATUS  Status;\r
-\r
-  Status = gRT->GetVariable (\r
-                  VariableName,\r
-                  &VariableDefinition->Guid,\r
-                  NULL,\r
-                  SizeOfVariable,\r
-                  *VariableData\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-\r
-    if (Status == EFI_BUFFER_TOO_SMALL) {\r
-      *VariableData = AllocatePool (*SizeOfVariable);\r
-      ASSERT (*VariableData != NULL);\r
-\r
-      Status = gRT->GetVariable (\r
-                      VariableName,\r
-                      &VariableDefinition->Guid,\r
-                      NULL,\r
-                      SizeOfVariable,\r
-                      *VariableData\r
-                      );\r
-    }\r
-\r
-    if (Status == EFI_NOT_FOUND) {\r
-      //\r
-      // This is a serious flaw, we must have some standard result if a variable\r
-      // is not found.  Our default behavior must either be return a TRUE or FALSE\r
-      // since there is nothing else we can really do.  Therefore, my crystal ball\r
-      // says I will return a FALSE\r
-      //\r
-      PushBool (&StackPtr, FALSE);\r
-    }\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-STATIC\r
-UINT8\r
-PredicateIfrType (\r
-  IN  EFI_INCONSISTENCY_DATA      *Iterator\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  This routine is for the purpose of predicate whether the Ifr is generated by a VfrCompiler greater than or equal to 1.88 or\r
-  less than 1.88 which is legacy.\r
-\r
-Arguments:\r
-  Iterator    - The pointer to inconsistency tags\r
-\r
-Returns:\r
-\r
-  0x2         - If IFR is not legacy\r
-\r
-  0x1         - If IFR is legacy\r
-\r
---*/\r
-{\r
-  //\r
-  // legacy Ifr cover the states:\r
-  // Not ...\r
-  // Operand Opcode Operand\r
-  //\r
-  // while Operand means ideqval, TRUE, or other what can be evaluated to True or False,\r
-  // and Opcode means AND or OR.\r
-  //\r
-  if (Iterator->Operand == EFI_IFR_NOT_OP   ||\r
-      Iterator->Operand == 0) {\r
-    return 0x1;\r
-  } else if (Iterator->Operand == EFI_IFR_EQ_VAR_VAL_OP ||\r
-             Iterator->Operand == EFI_IFR_EQ_ID_VAL_OP  ||\r
-             Iterator->Operand == EFI_IFR_EQ_ID_ID_OP   ||\r
-             Iterator->Operand == EFI_IFR_EQ_ID_LIST_OP) {\r
-    Iterator++;\r
-    if (Iterator->Operand == EFI_IFR_AND_OP ||\r
-        Iterator->Operand == EFI_IFR_OR_OP) {\r
-      Iterator--;\r
-      return 0x1;\r
-    }\r
-    Iterator--;\r
-  }\r
-  return 0x2;\r
-}\r
-\r
-STATIC\r
-VOID\r
-PostOrderEvaluate (\r
-  IN      EFI_FILE_FORM_TAGS          *FileFormTags,\r
-  IN      UINT16                      Width,\r
-  IN OUT  EFI_INCONSISTENCY_DATA      **PIterator,\r
-  IN OUT  BOOLEAN                     **StackPtr\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  PostOrderEvaluate is used for Ifr generated by VfrCompiler greater than or equal to 1.88,\r
-  which generate Operand Operand Opcode type Ifr.\r
-  PostOrderEvaluete only evaluate boolean expression part, not suppressif/grayoutif. TRUE,\r
-  FALSE, >=, >, (, ) are supported.\r
-\r
-Arguments:\r
-\r
-  FileFormTags     - The pointer to the tags of the form\r
-\r
-  Width            - Width of Operand, recognized every iteration\r
-\r
-  PIterator        - The pointer to inconsistency tags\r
-\r
-  StackPtr         - The pointer to the evaluation stack\r
-\r
-Returns:\r
-\r
-  TRUE             - If value is valid\r
-\r
-  FALSE            - If value is not valid\r
-\r
---*/\r
-{\r
-  BOOLEAN                 Operator;\r
-  BOOLEAN                 Operator2;\r
-  UINT16                  *MapBuffer;\r
-  UINT16                  *MapBuffer2;\r
-  UINT16                  MapValue;\r
-  UINT16                  MapValue2;\r
-  UINTN                   SizeOfVariable;\r
-  CHAR16                  VariableName[MAXIMUM_VALUE_CHARACTERS];\r
-  VOID                    *VariableData;\r
-  EFI_VARIABLE_DEFINITION *VariableDefinition;\r
-  EFI_STATUS              Status;\r
-  UINTN                   Index;\r
-  BOOLEAN                 PushValue;\r
-\r
-  Operator        = FALSE;\r
-  Operator2       = FALSE;\r
-  MapBuffer       = NULL;\r
-  MapBuffer2      = NULL;\r
-  MapValue        = 0;\r
-  MapValue2       = 0;\r
-  VariableData    = NULL;\r
-\r
-  while (TRUE) {\r
-    if ((*PIterator)->Operand == 0) {\r
-      return;\r
-    }\r
-\r
-    Width = (*PIterator)->Width;\r
-\r
-    //\r
-    //  Because INVALID_OFFSET_VALUE - 1 is reserved for TRUE or FALSE, omit them.\r
-    //\r
-    if ((*PIterator)->QuestionId1 != INVALID_OFFSET_VALUE &&\r
-        (*PIterator)->QuestionId1 != INVALID_OFFSET_VALUE - 1) {\r
-      ExtractNvValue (FileFormTags, (*PIterator)->VariableNumber, Width, (*PIterator)->QuestionId1, (VOID **) &MapBuffer);\r
-      ExtractNvValue (FileFormTags, (*PIterator)->VariableNumber2, Width, (*PIterator)->QuestionId2, (VOID **) &MapBuffer2);\r
-      if (MapBuffer != NULL) {\r
-        if (Width == 2) {\r
-          MapValue = *MapBuffer;\r
-        } else {\r
-          MapValue = (UINT8) *MapBuffer;\r
-        }\r
-\r
-        FreePool (MapBuffer);\r
-      }\r
-\r
-      if (MapBuffer2 != NULL) {\r
-        if (Width == 2) {\r
-          MapValue2 = *MapBuffer2;\r
-        } else {\r
-          MapValue2 = (UINT8) *MapBuffer2;\r
-        }\r
-\r
-        FreePool (MapBuffer2);\r
-      }\r
-    }\r
-\r
-    switch ((*PIterator)->Operand) {\r
-    case EFI_IFR_EQ_VAR_VAL_OP:\r
-      UnicodeValueToString (\r
-        VariableName,\r
-        FALSE,\r
-        (UINTN) (*PIterator)->QuestionId1,\r
-        (sizeof (VariableName) / sizeof (VariableName[0])) - 1\r
-        );\r
-\r
-      SizeOfVariable = 0;\r
-\r
-      ExtractRequestedNvMap (FileFormTags, (*PIterator)->VariableNumber, &VariableDefinition);\r
-\r
-      Status = BooleanVariableWorker (\r
-                VariableName,\r
-                VariableDefinition,\r
-                *StackPtr,\r
-                &SizeOfVariable,\r
-                &VariableData\r
-                );\r
-\r
-      if (!EFI_ERROR (Status)) {\r
-        if (SizeOfVariable == 1) {\r
-          CopyMem (&MapValue, VariableData, 1);\r
-        } else {\r
-          CopyMem (&MapValue, VariableData, 2);\r
-        }\r
-\r
-        //\r
-        // Do operation after knowing the compare operator.\r
-        //\r
-        MapValue2 = (*PIterator)->Value;\r
-        (*PIterator)++;\r
-        if ((*PIterator)->Operand == EFI_IFR_GT_OP) {\r
-          PushValue = (BOOLEAN) (MapValue > MapValue2);\r
-        } else if ((*PIterator)->Operand == EFI_IFR_GE_OP) {\r
-          PushValue = (BOOLEAN) (MapValue >= MapValue2);\r
-        } else {\r
-          (*PIterator)--;\r
-          PushValue = (BOOLEAN) (MapValue == MapValue2);\r
-        }\r
-        PushBool (StackPtr, PushValue);\r
-      }\r
-\r
-      break;\r
-\r
-    case EFI_IFR_EQ_ID_VAL_OP:\r
-      //\r
-      // Do operation after knowing the compare operator.\r
-      //\r
-      MapValue2 = (*PIterator)->Value;\r
-      (*PIterator)++;\r
-      if ((*PIterator)->Operand == EFI_IFR_GT_OP) {\r
-        PushValue = (BOOLEAN) (MapValue > MapValue2);\r
-      } else if ((*PIterator)->Operand == EFI_IFR_GE_OP) {\r
-        PushValue = (BOOLEAN) (MapValue >= MapValue2);\r
-      } else {\r
-        (*PIterator)--;\r
-        PushValue = (BOOLEAN) (MapValue == MapValue2);\r
-      }\r
-      PushBool (StackPtr, PushValue);\r
-      break;\r
-\r
-    case EFI_IFR_EQ_ID_ID_OP:\r
-      //\r
-      // Do operation after knowing the compare operator.\r
-      //\r
-      (*PIterator)++;\r
-      if ((*PIterator)->Operand == EFI_IFR_GT_OP) {\r
-        PushValue = (BOOLEAN) (MapValue > MapValue2);\r
-      } else if ((*PIterator)->Operand == EFI_IFR_GE_OP) {\r
-        PushValue = (BOOLEAN) (MapValue >= MapValue2);\r
-      } else {\r
-        (*PIterator)--;\r
-        PushValue = (BOOLEAN) (MapValue == MapValue2);\r
-      }\r
-      PushBool (StackPtr, PushValue);\r
-      break;\r
-\r
-    case EFI_IFR_EQ_ID_LIST_OP:\r
-      for (Index = 0; Index < (*PIterator)->ListLength; Index++) {\r
-        Operator = (BOOLEAN) (MapValue == (*PIterator)->ValueList[Index]);\r
-        if (Operator) {\r
-          break;\r
-        }\r
-      }\r
-\r
-      PushBool (StackPtr, Operator);\r
-      break;\r
-\r
-    case EFI_IFR_TRUE_OP:\r
-      PushBool (StackPtr, TRUE);\r
-      break;\r
-\r
-    case EFI_IFR_FALSE_OP:\r
-      PushBool (StackPtr, FALSE);\r
-      break;\r
-\r
-    case EFI_IFR_AND_OP:\r
-      Operator  = PopBool (StackPtr);\r
-      Operator2 = PopBool (StackPtr);\r
-      PushBool (StackPtr, (BOOLEAN) (Operator && Operator2));\r
-      break;\r
-    case EFI_IFR_OR_OP:\r
-      Operator  = PopBool (StackPtr);\r
-      Operator2 = PopBool (StackPtr);\r
-      PushBool (StackPtr, (BOOLEAN) (Operator || Operator2));\r
-      break;\r
-    case EFI_IFR_NOT_OP:\r
-      Operator  = PopBool (StackPtr);\r
-      PushBool (StackPtr, (BOOLEAN) (!Operator));\r
-      break;\r
-\r
-    case EFI_IFR_SUPPRESS_IF_OP:\r
-    case EFI_IFR_GRAYOUT_IF_OP:\r
-    case EFI_IFR_INCONSISTENT_IF_OP:\r
-    default:\r
-      //\r
-      // Return to the previous tag if runs out of boolean expression.\r
-      //\r
-      (*PIterator)--;\r
-      return;\r
-    }\r
-    (*PIterator)++;\r
-  }\r
-}\r
-\r
-BOOLEAN\r
-ValueIsNotValid (\r
-  IN  BOOLEAN                     Complex,\r
-  IN  UINT16                      Value,\r
-  IN  EFI_TAG                     *Tag,\r
-  IN  EFI_FILE_FORM_TAGS          *FileFormTags,\r
-  IN  STRING_REF                  *PopUp\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
-  TRUE - If value is valid\r
-\r
-  FALSE - If value is not valid\r
-\r
---*/\r
-{\r
-  BOOLEAN                 *StackPtr;\r
-  EFI_INCONSISTENCY_DATA  *Iterator;\r
-  BOOLEAN                 Operator;\r
-  BOOLEAN                 Operator2;\r
-  UINTN                   Index;\r
-  VOID                    *BooleanExpression;\r
-  UINTN                   BooleanExpressionLength;\r
-  BOOLEAN                 NotOperator;\r
-  BOOLEAN                 OrOperator;\r
-  BOOLEAN                 AndOperator;\r
-  BOOLEAN                 ArtificialEnd;\r
-  UINT16                  *MapBuffer;\r
-  UINT16                  *MapBuffer2;\r
-  UINT16                  MapValue;\r
-  UINT16                  MapValue2;\r
-  UINTN                   SizeOfVariable;\r
-  CHAR16                  VariableName[MAXIMUM_VALUE_CHARACTERS];\r
-  VOID                    *VariableData;\r
-  EFI_STATUS              Status;\r
-  UINT16                  Id;\r
-  UINT16                  Width;\r
-  EFI_VARIABLE_DEFINITION *VariableDefinition;\r
-  BOOLEAN                 CosmeticConsistency;\r
-  UINT8                   IsLegacy;\r
-\r
-  VariableData            = NULL;\r
-  BooleanExpressionLength = 0;\r
-  BooleanExpression       = NULL;\r
-  Operator                = FALSE;\r
-  ArtificialEnd           = FALSE;\r
-  CosmeticConsistency     = TRUE;\r
-  IsLegacy                = 0;\r
-\r
-  Id                      = Tag->Id;\r
-  if (Tag->StorageWidth == 1) {\r
-    Width = 1;\r
-  } else {\r
-    Width = 2;\r
-  }\r
-  CreateBooleanExpression (FileFormTags, Value, Id, Complex, &BooleanExpression, &BooleanExpressionLength);\r
-\r
-  if (mBooleanEvaluationStack == 0) {\r
-    InitializeBooleanEvaluator ();\r
-  }\r
-\r
-  if (BooleanExpression == NULL) {\r
-    return FALSE;\r
-  }\r
-\r
-  StackPtr    = mBooleanEvaluationStack;\r
-  Iterator    = BooleanExpression;\r
-  MapBuffer   = NULL;\r
-  MapBuffer2  = NULL;\r
-  MapValue    = 0;\r
-  MapValue2   = 0;\r
-\r
-  while (TRUE) {\r
-    NotOperator = FALSE;\r
-    OrOperator  = FALSE;\r
-    AndOperator = FALSE;\r
-\r
-    if (Iterator->Operand == 0) {\r
-      return Operator;\r
-    }\r
-\r
-    //\r
-    //  Because INVALID_OFFSET_VALUE - 1 is reserved for TRUE or FALSE, omit them.\r
-    //\r
-    if (Iterator->QuestionId1 != INVALID_OFFSET_VALUE &&\r
-        Iterator->QuestionId1 != INVALID_OFFSET_VALUE-1) {\r
-      ExtractNvValue (FileFormTags, Iterator->VariableNumber, Width, Iterator->QuestionId1, (VOID **) &MapBuffer);\r
-      ExtractNvValue (FileFormTags, Iterator->VariableNumber2, Width, Iterator->QuestionId2, (VOID **) &MapBuffer2);\r
-      if (MapBuffer != NULL) {\r
-        if (Width == 2) {\r
-          MapValue = *MapBuffer;\r
-        } else {\r
-          MapValue = (UINT8) *MapBuffer;\r
-        }\r
-\r
-        FreePool (MapBuffer);\r
-      }\r
-\r
-      if (MapBuffer2 != NULL) {\r
-        if (Width == 2) {\r
-          MapValue2 = *MapBuffer2;\r
-        } else {\r
-          MapValue2 = (UINT8) *MapBuffer2;\r
-        }\r
-\r
-        FreePool (MapBuffer2);\r
-      }\r
-    }\r
-\r
-    switch (Iterator->Operand) {\r
-    case EFI_IFR_SUPPRESS_IF_OP:\r
-      //\r
-      // Must have hit a suppress followed by a grayout or vice-versa\r
-      //\r
-      if (ArtificialEnd) {\r
-        ArtificialEnd = FALSE;\r
-        Operator      = PopBool (&StackPtr);\r
-        if (Operator) {\r
-          Tag->Suppress = TRUE;\r
-        }\r
-\r
-        return Operator;\r
-      }\r
-\r
-      ArtificialEnd = TRUE;\r
-      *PopUp        = Iterator->Popup;\r
-      break;\r
-\r
-    case EFI_IFR_GRAYOUT_IF_OP:\r
-      //\r
-      // Must have hit a suppress followed by a grayout or vice-versa\r
-      //\r
-      if (ArtificialEnd) {\r
-        ArtificialEnd = FALSE;\r
-        Operator      = PopBool (&StackPtr);\r
-        if (Operator) {\r
-          Tag->GrayOut = TRUE;\r
-        }\r
-\r
-        return Operator;\r
-      }\r
-\r
-      ArtificialEnd = TRUE;\r
-      *PopUp        = Iterator->Popup;\r
-      break;\r
-\r
-    case EFI_IFR_INCONSISTENT_IF_OP:\r
-      CosmeticConsistency = FALSE;\r
-      *PopUp              = Iterator->Popup;\r
-      break;\r
-\r
-    //\r
-    // In the case of external variable values, we must read the variable which is\r
-    // named by the human readable version of the OpCode->VariableId and the guid of the formset\r
-    //\r
-    case EFI_IFR_EQ_VAR_VAL_OP:\r
-      //\r
-      // To check whether Ifr is legacy. Once every boolean expression.\r
-      //\r
-      if (IsLegacy == 0) {\r
-        IsLegacy = PredicateIfrType (Iterator);\r
-      }\r
-      if (IsLegacy == 0x2) {\r
-        PostOrderEvaluate (FileFormTags, Width, &Iterator, &StackPtr);\r
-        break;\r
-      }\r
-\r
-      UnicodeValueToString (\r
-        VariableName,\r
-        FALSE,\r
-        (UINTN) Iterator->QuestionId1,\r
-        (sizeof (VariableName) / sizeof (VariableName[0])) - 1\r
-        );\r
-\r
-      SizeOfVariable = 0;\r
-\r
-      ExtractRequestedNvMap (FileFormTags, Iterator->VariableNumber, &VariableDefinition);\r
-\r
-      Status = BooleanVariableWorker (\r
-                VariableName,\r
-                VariableDefinition,\r
-                StackPtr,\r
-                &SizeOfVariable,\r
-                &VariableData\r
-                );\r
-\r
-      if (!EFI_ERROR (Status)) {\r
-        if (SizeOfVariable == 1) {\r
-          CopyMem (&MapValue, VariableData, 1);\r
-        } else {\r
-          CopyMem (&MapValue, VariableData, 2);\r
-        }\r
-\r
-        PushBool (&StackPtr, (BOOLEAN) (MapValue == Iterator->Value));\r
-      }\r
-\r
-      break;\r
-\r
-    case EFI_IFR_EQ_ID_VAL_OP:\r
-      //\r
-      // To check whether Ifr is legacy. Once every boolean expression.\r
-      //\r
-      if (IsLegacy == 0) {\r
-        IsLegacy = PredicateIfrType (Iterator);\r
-      }\r
-      if (IsLegacy == 0x2) {\r
-        PostOrderEvaluate (FileFormTags, Width, &Iterator, &StackPtr);\r
-        break;\r
-      }\r
-\r
-      PushBool (&StackPtr, (BOOLEAN) (MapValue == Iterator->Value));\r
-      break;\r
-\r
-    case EFI_IFR_EQ_ID_ID_OP:\r
-      //\r
-      // To check whether Ifr is legacy. Once every boolean expression.\r
-      //\r
-      if (IsLegacy == 0) {\r
-        IsLegacy = PredicateIfrType (Iterator);\r
-      }\r
-      if (IsLegacy == 0x2) {\r
-        PostOrderEvaluate (FileFormTags, Width, &Iterator, &StackPtr);\r
-        break;\r
-      }\r
-\r
-      PushBool (&StackPtr, (BOOLEAN) (MapValue == MapValue2));\r
-      break;\r
-\r
-    case EFI_IFR_EQ_ID_LIST_OP:\r
-      //\r
-      // To check whether Ifr is legacy. Once every boolean expression.\r
-      //\r
-      if (IsLegacy == 0) {\r
-        IsLegacy = PredicateIfrType (Iterator);\r
-      }\r
-      if (IsLegacy == 0x2) {\r
-        PostOrderEvaluate (FileFormTags, Width, &Iterator, &StackPtr);\r
-        break;\r
-      }\r
-\r
-      for (Index = 0; Index < Iterator->ListLength; Index++) {\r
-        Operator = (BOOLEAN) (MapValue == Iterator->ValueList[Index]);\r
-        if (Operator) {\r
-          break;\r
-        }\r
-      }\r
-\r
-      PushBool (&StackPtr, Operator);\r
-      break;\r
-\r
-    case EFI_IFR_AND_OP:\r
-      Iterator++;\r
-      if (Iterator->Operand == EFI_IFR_NOT_OP) {\r
-        NotOperator = TRUE;\r
-        Iterator++;\r
-      }\r
-\r
-      if (Iterator->QuestionId1 != INVALID_OFFSET_VALUE) {\r
-        ExtractNvValue (FileFormTags, Iterator->VariableNumber, Width, Iterator->QuestionId1, (VOID **) &MapBuffer);\r
-        ExtractNvValue (FileFormTags, Iterator->VariableNumber2, Width, Iterator->QuestionId2, (VOID **) &MapBuffer2);\r
-        if (MapBuffer != NULL) {\r
-          if (Width == 2) {\r
-            MapValue = *MapBuffer;\r
-          } else {\r
-            MapValue = (UINT8) *MapBuffer;\r
-          }\r
-\r
-          FreePool (MapBuffer);\r
-        }\r
-\r
-        if (MapBuffer2 != NULL) {\r
-          if (Width == 2) {\r
-            MapValue2 = *MapBuffer2;\r
-          } else {\r
-            MapValue2 = (UINT8) *MapBuffer2;\r
-          }\r
-\r
-          FreePool (MapBuffer2);\r
-        }\r
-      }\r
-\r
-      switch (Iterator->Operand) {\r
-      case EFI_IFR_EQ_ID_VAL_OP:\r
-        //\r
-        // If Not - flip the results\r
-        //\r
-        if (NotOperator) {\r
-          Operator = (BOOLEAN)!(MapValue == Iterator->Value);\r
-        } else {\r
-          Operator = (BOOLEAN) (MapValue == Iterator->Value);\r
-        }\r
-\r
-        PushBool (&StackPtr, Operator);\r
-        break;\r
-\r
-      //\r
-      // In the case of external variable values, we must read the variable which is\r
-      // named by the human readable version of the OpCode->VariableId and the guid of the formset\r
-      //\r
-      case EFI_IFR_EQ_VAR_VAL_OP:\r
-        UnicodeValueToString (\r
-          VariableName,\r
-          FALSE,\r
-          (UINTN) Iterator->QuestionId1,\r
-          (sizeof (VariableName) / sizeof (VariableName[0])) - 1\r
-          );\r
-\r
-        SizeOfVariable = 0;\r
-\r
-        ExtractRequestedNvMap (FileFormTags, Iterator->VariableNumber, &VariableDefinition);\r
-\r
-        Status = BooleanVariableWorker (\r
-                  VariableName,\r
-                  VariableDefinition,\r
-                  StackPtr,\r
-                  &SizeOfVariable,\r
-                  &VariableData\r
-                  );\r
-\r
-        if (!EFI_ERROR (Status)) {\r
-          if (SizeOfVariable == 1) {\r
-            CopyMem (&MapValue, VariableData, 1);\r
-          } else {\r
-            CopyMem (&MapValue, VariableData, 2);\r
-          }\r
-          //\r
-          // If Not - flip the results\r
-          //\r
-          if (NotOperator) {\r
-            PushBool (&StackPtr, (BOOLEAN)!(MapValue == Iterator->Value));\r
-          } else {\r
-            PushBool (&StackPtr, (BOOLEAN) (MapValue == Iterator->Value));\r
-          }\r
-        }\r
-        break;\r
-\r
-      case EFI_IFR_EQ_ID_ID_OP:\r
-        //\r
-        // If Not - flip the results\r
-        //\r
-        if (NotOperator) {\r
-          Operator = (BOOLEAN)!(MapValue == MapValue2);\r
-        } else {\r
-          Operator = (BOOLEAN) (MapValue == MapValue2);\r
-        }\r
-\r
-        PushBool (&StackPtr, Operator);\r
-        break;\r
-\r
-      case EFI_IFR_EQ_ID_LIST_OP:\r
-        for (Index = 0; Index < Iterator->ListLength; Index++) {\r
-          //\r
-          // If Not - flip the results\r
-          //\r
-          if (NotOperator) {\r
-            Operator = (BOOLEAN)!(MapValue == Iterator->ValueList[Index]);\r
-          } else {\r
-            Operator = (BOOLEAN) (MapValue == Iterator->ValueList[Index]);\r
-          }\r
-          //\r
-          // If We are trying to make sure that MapValue != Item[x], keep looking through\r
-          // the list to make sure we don't equal any other items\r
-          //\r
-          if (Operator && NotOperator) {\r
-            continue;\r
-          }\r
-          //\r
-          // If MapValue == Item, then we have succeeded (first found is good enough)\r
-          //\r
-          if (Operator) {\r
-            break;\r
-          }\r
-        }\r
-\r
-        PushBool (&StackPtr, Operator);\r
-        break;\r
-\r
-      default:\r
-        return FALSE;\r
-      }\r
-\r
-      Operator  = PopBool (&StackPtr);\r
-      Operator2 = PopBool (&StackPtr);\r
-      PushBool (&StackPtr, (BOOLEAN) (Operator && Operator2));\r
-      break;\r
-\r
-    case EFI_IFR_OR_OP:\r
-      Iterator++;\r
-      if (Iterator->Operand == EFI_IFR_NOT_OP) {\r
-        NotOperator = TRUE;\r
-        Iterator++;\r
-      }\r
-\r
-      if (Iterator->QuestionId1 != INVALID_OFFSET_VALUE) {\r
-        ExtractNvValue (FileFormTags, Iterator->VariableNumber, Width, Iterator->QuestionId1, (VOID **) &MapBuffer);\r
-        ExtractNvValue (FileFormTags, Iterator->VariableNumber2, Width, Iterator->QuestionId2, (VOID **) &MapBuffer2);\r
-        if (MapBuffer != NULL) {\r
-          if (Width == 2) {\r
-            MapValue = *MapBuffer;\r
-          } else {\r
-            MapValue = (UINT8) *MapBuffer;\r
-          }\r
-\r
-          FreePool (MapBuffer);\r
-        }\r
-\r
-        if (MapBuffer2 != NULL) {\r
-          if (Width == 2) {\r
-            MapValue2 = *MapBuffer2;\r
-          } else {\r
-            MapValue2 = (UINT8) *MapBuffer2;\r
-          }\r
-\r
-          FreePool (MapBuffer2);\r
-        }\r
-      }\r
-\r
-      switch (Iterator->Operand) {\r
-      case EFI_IFR_EQ_ID_VAL_OP:\r
-        //\r
-        // If Not - flip the results\r
-        //\r
-        if (NotOperator) {\r
-          Operator = (BOOLEAN)!(MapValue == Iterator->Value);\r
-        } else {\r
-          Operator = (BOOLEAN) (MapValue == Iterator->Value);\r
-        }\r
-\r
-        PushBool (&StackPtr, Operator);\r
-        break;\r
-\r
-      //\r
-      // In the case of external variable values, we must read the variable which is\r
-      // named by the human readable version of the OpCode->VariableId and the guid of the formset\r
-      //\r
-      case EFI_IFR_EQ_VAR_VAL_OP:\r
-        UnicodeValueToString (\r
-          VariableName,\r
-          FALSE,\r
-          (UINTN) Iterator->QuestionId1,\r
-          (sizeof (VariableName) / sizeof (VariableName[0])) - 1\r
-          );\r
-\r
-        SizeOfVariable = 0;\r
-\r
-        ExtractRequestedNvMap (FileFormTags, Iterator->VariableNumber, &VariableDefinition);\r
-\r
-        Status = BooleanVariableWorker (\r
-                  VariableName,\r
-                  VariableDefinition,\r
-                  StackPtr,\r
-                  &SizeOfVariable,\r
-                  &VariableData\r
-                  );\r
-\r
-        if (!EFI_ERROR (Status)) {\r
-          if (SizeOfVariable == 1) {\r
-            CopyMem (&MapValue, VariableData, 1);\r
-          } else {\r
-            CopyMem (&MapValue, VariableData, 2);\r
-          }\r
-          //\r
-          // If Not - flip the results\r
-          //\r
-          if (NotOperator) {\r
-            PushBool (&StackPtr, (BOOLEAN)!(MapValue == Iterator->Value));\r
-          } else {\r
-            PushBool (&StackPtr, (BOOLEAN) (MapValue == Iterator->Value));\r
-          }\r
-        }\r
-        break;\r
-\r
-      case EFI_IFR_EQ_ID_ID_OP:\r
-        //\r
-        // If Not - flip the results\r
-        //\r
-        if (NotOperator) {\r
-          Operator = (BOOLEAN)!(MapValue == MapValue2);\r
-        } else {\r
-          Operator = (BOOLEAN) (MapValue == MapValue2);\r
-        }\r
-\r
-        PushBool (&StackPtr, Operator);\r
-        break;\r
-\r
-      case EFI_IFR_EQ_ID_LIST_OP:\r
-        for (Index = 0; Index < Iterator->ListLength; Index++) {\r
-          //\r
-          // If Not - flip the results\r
-          //\r
-          if (NotOperator) {\r
-            Operator = (BOOLEAN)!(MapValue == Iterator->ValueList[Index]);\r
-          } else {\r
-            Operator = (BOOLEAN) (MapValue == Iterator->ValueList[Index]);\r
-          }\r
-          //\r
-          // If We are trying to make sure that MapValue != Item[x], keep looking through\r
-          // the list to make sure we don't equal any other items\r
-          //\r
-          if (Operator && NotOperator) {\r
-            continue;\r
-          }\r
-          //\r
-          // If MapValue == Item, then we have succeeded (first found is good enough)\r
-          //\r
-          if (Operator) {\r
-            break;\r
-          }\r
-        }\r
-\r
-        PushBool (&StackPtr, Operator);\r
-        break;\r
-\r
-      default:\r
-        return FALSE;\r
-      }\r
-\r
-      Operator  = PopBool (&StackPtr);\r
-      Operator2 = PopBool (&StackPtr);\r
-      PushBool (&StackPtr, (BOOLEAN) (Operator || Operator2));\r
-      break;\r
-\r
-    case EFI_IFR_NOT_OP:\r
-      //\r
-      // To check whether Ifr is legacy. Once every boolean expression.\r
-      //\r
-      if (IsLegacy == 0) {\r
-        IsLegacy = PredicateIfrType (Iterator);\r
-      }\r
-      if (IsLegacy == 0x2) {\r
-        PostOrderEvaluate (FileFormTags, Width, &Iterator, &StackPtr);\r
-        break;\r
-      }\r
-\r
-      //\r
-      // I don't need to set the NotOperator (I know that I have to NOT this in this case\r
-      //\r
-      Iterator++;\r
-\r
-      if (Iterator->Operand == EFI_IFR_OR_OP) {\r
-        OrOperator = TRUE;\r
-        Iterator++;\r
-      }\r
-\r
-      if (Iterator->Operand == EFI_IFR_AND_OP) {\r
-        AndOperator = TRUE;\r
-        Iterator++;\r
-      }\r
-\r
-      if (Iterator->QuestionId1 != INVALID_OFFSET_VALUE) {\r
-        ExtractNvValue (FileFormTags, Iterator->VariableNumber, Width, Iterator->QuestionId1, (VOID **) &MapBuffer);\r
-        ExtractNvValue (FileFormTags, Iterator->VariableNumber2, Width, Iterator->QuestionId2, (VOID **) &MapBuffer2);\r
-        if (MapBuffer != NULL) {\r
-          if (Width == 2) {\r
-            MapValue = *MapBuffer;\r
-          } else {\r
-            MapValue = (UINT8) *MapBuffer;\r
-          }\r
-\r
-          FreePool (MapBuffer);\r
-        }\r
-\r
-        if (MapBuffer2 != NULL) {\r
-          if (Width == 2) {\r
-            MapValue2 = *MapBuffer2;\r
-          } else {\r
-            MapValue2 = (UINT8) *MapBuffer2;\r
-          }\r
-\r
-          FreePool (MapBuffer2);\r
-        }\r
-      }\r
-\r
-      switch (Iterator->Operand) {\r
-      case EFI_IFR_EQ_ID_VAL_OP:\r
-        Operator = (BOOLEAN)!(MapValue == Iterator->Value);\r
-        PushBool (&StackPtr, Operator);\r
-        break;\r
-\r
-      //\r
-      // In the case of external variable values, we must read the variable which is\r
-      // named by the human readable version of the OpCode->VariableId and the guid of the formset\r
-      //\r
-      case EFI_IFR_EQ_VAR_VAL_OP:\r
-        UnicodeValueToString (\r
-          VariableName,\r
-          FALSE,\r
-          (UINTN) Iterator->QuestionId1,\r
-          (sizeof (VariableName) / sizeof (VariableName[0])) - 1\r
-          );\r
-\r
-        SizeOfVariable = 0;\r
-\r
-        ExtractRequestedNvMap (FileFormTags, Iterator->VariableNumber, &VariableDefinition);\r
-\r
-        Status = BooleanVariableWorker (\r
-                  VariableName,\r
-                  VariableDefinition,\r
-                  StackPtr,\r
-                  &SizeOfVariable,\r
-                  &VariableData\r
-                  );\r
-\r
-        if (!EFI_ERROR (Status)) {\r
-          if (SizeOfVariable == 1) {\r
-            CopyMem (&MapValue, VariableData, 1);\r
-          } else {\r
-            CopyMem (&MapValue, VariableData, 2);\r
-          }\r
-\r
-          PushBool (&StackPtr, (BOOLEAN)!(MapValue == Iterator->Value));\r
-        }\r
-        break;\r
-\r
-      case EFI_IFR_EQ_ID_ID_OP:\r
-        Operator = (BOOLEAN)!(MapValue == MapValue2);\r
-        PushBool (&StackPtr, Operator);\r
-        break;\r
-\r
-      case EFI_IFR_EQ_ID_LIST_OP:\r
-        for (Index = 0; Index < Iterator->ListLength; Index++) {\r
-          Operator = (BOOLEAN)!(MapValue == Iterator->ValueList[Index]);\r
-          if (Operator) {\r
-            continue;\r
-          }\r
-        }\r
-\r
-        PushBool (&StackPtr, Operator);\r
-        break;\r
-\r
-      default:\r
-        return FALSE;\r
-      }\r
-\r
-      Operator  = PopBool (&StackPtr);\r
-      Operator2 = PopBool (&StackPtr);\r
-\r
-      if (OrOperator) {\r
-        PushBool (&StackPtr, (BOOLEAN) (Operator || Operator2));\r
-      }\r
-\r
-      if (AndOperator) {\r
-        PushBool (&StackPtr, (BOOLEAN) (Operator && Operator2));\r
-      }\r
-\r
-      if (!OrOperator && !AndOperator) {\r
-        PushBool (&StackPtr, Operator);\r
-      }\r
-      break;\r
-\r
-    case EFI_IFR_TRUE_OP:\r
-      //\r
-      // To check whether Ifr is legacy. Once every boolean expression.\r
-      //\r
-      if (IsLegacy == 0) {\r
-        IsLegacy = PredicateIfrType (Iterator);\r
-      }\r
-      if (IsLegacy == 0x2) {\r
-        PostOrderEvaluate (FileFormTags, Width, &Iterator, &StackPtr);\r
-        break;\r
-      }\r
-      break;\r
-\r
-    case EFI_IFR_FALSE_OP:\r
-      //\r
-      // To check whether Ifr is legacy. Once every boolean expression.\r
-      //\r
-      if (IsLegacy == 0) {\r
-        IsLegacy = PredicateIfrType (Iterator);\r
-      }\r
-      if (IsLegacy == 0x2) {\r
-        PostOrderEvaluate (FileFormTags, Width, &Iterator, &StackPtr);\r
-        break;\r
-      }\r
-      break;\r
-\r
-    case EFI_IFR_END_IF_OP:\r
-      Operator = PopBool (&StackPtr);\r
-      //\r
-      // If there is an error, return, otherwise keep looking - there might\r
-      // be another test that causes an error\r
-      //\r
-      if (Operator) {\r
-        if (Complex && CosmeticConsistency) {\r
-          return EFI_SUCCESS;\r
-        } else {\r
-          return Operator;\r
-        }\r
-      } else {\r
-        //\r
-        // If not doing a global consistency check, the endif is the REAL terminator of this operation\r
-        // This is used for grayout/suppress operations.  InconsistentIf is a global operation so the EndIf is\r
-        // not the end-all be-all of terminators.\r
-        //\r
-        if (!Complex) {\r
-          return Operator;\r
-        }\r
-        break;\r
-      }\r
-\r
-    default:\r
-      //\r
-      // Must have hit a non-consistency related op-code after a suppress/grayout\r
-      //\r
-      if (ArtificialEnd) {\r
-        ArtificialEnd = FALSE;\r
-        Operator      = PopBool (&StackPtr);\r
-        return Operator;\r
-      }\r
-\r
-      goto Done;\r
-    }\r
-\r
-    Iterator++;\r
-  }\r
-\r
-Done:\r
-  return FALSE;\r
-}\r