1 /** @file 2 Private structure, MACRO and function definitions for User Interface related functionalities. 3 4 Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #ifndef _EXPRESSION_H_ 16 #define _EXPRESSION_H_ 17 18 /** 19 Get the expression list count. 20 21 @param Level Which type this expression belong to. Form, 22 statement or option? 23 24 @retval >=0 The expression count 25 @retval -1 Input parameter error. 26 27 **/ 28 INTN 29 GetConditionalExpressionCount ( 30 IN EXPRESS_LEVEL Level 31 ); 32 33 /** 34 Reset stack pointer to begin of the stack. 35 36 **/ 37 VOID 38 ResetCurrentExpressionStack ( 39 VOID 40 ); 41 42 /** 43 Reset stack pointer to begin of the stack. 44 45 **/ 46 VOID 47 ResetMapExpressionListStack ( 48 VOID 49 ); 50 51 /** 52 Reset stack pointer to begin of the stack. 53 54 **/ 55 VOID 56 ResetScopeStack ( 57 VOID 58 ); 59 60 /** 61 Push an Operand onto the Stack 62 63 @param Operand Operand to push. 64 65 @retval EFI_SUCCESS The value was pushed onto the stack. 66 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the 67 stack. 68 69 **/ 70 EFI_STATUS 71 PushScope ( 72 IN UINT8 Operand 73 ); 74 75 /** 76 Get the expression Buffer pointer. 77 78 @param Level Which type this expression belong to. Form, 79 statement or option? 80 81 @retval The start pointer of the expression buffer or NULL. 82 83 **/ 84 FORM_EXPRESSION ** 85 GetConditionalExpressionList ( 86 IN EXPRESS_LEVEL Level 87 ); 88 89 /** 90 Pop an Operand from the Stack 91 92 @param Operand Operand to pop. 93 94 @retval EFI_SUCCESS The value was pushed onto the stack. 95 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the 96 stack. 97 98 **/ 99 EFI_STATUS 100 PopScope ( 101 OUT UINT8 *Operand 102 ); 103 104 /** 105 Push the list of map expression onto the Stack 106 107 @param Pointer Pointer to the list of map expression to be pushed. 108 109 @retval EFI_SUCCESS The value was pushed onto the stack. 110 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack. 111 112 **/ 113 EFI_STATUS 114 PushMapExpressionList ( 115 IN VOID *Pointer 116 ); 117 118 /** 119 Push current expression onto the Stack 120 121 @param Pointer Pointer to current expression. 122 123 @retval EFI_SUCCESS The value was pushed onto the stack. 124 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack. 125 126 **/ 127 EFI_STATUS 128 PushCurrentExpression ( 129 IN VOID *Pointer 130 ); 131 132 /** 133 Zero extend integer/boolean/date/time to UINT64 for comparing. 134 135 @param Value HII Value to be converted. 136 137 **/ 138 VOID 139 ExtendValueToU64 ( 140 IN EFI_HII_VALUE *Value 141 ); 142 143 /** 144 Push the expression options onto the Stack. 145 146 @param Pointer Pointer to the current expression. 147 @param Level Which type this expression belong to. Form, 148 statement or option? 149 150 @retval EFI_SUCCESS The value was pushed onto the stack. 151 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack. 152 153 **/ 154 EFI_STATUS 155 PushConditionalExpression ( 156 IN FORM_EXPRESSION *Pointer, 157 IN EXPRESS_LEVEL Level 158 ); 159 160 /** 161 Pop the expression options from the Stack 162 163 @param Level Which type this expression belong to. Form, 164 statement or option? 165 166 @retval EFI_SUCCESS The value was pushed onto the stack. 167 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack. 168 169 **/ 170 EFI_STATUS 171 PopConditionalExpression ( 172 IN EXPRESS_LEVEL Level 173 ); 174 175 /** 176 Pop the list of map expression from the Stack 177 178 @param Pointer Pointer to the list of map expression to be pop. 179 180 @retval EFI_SUCCESS The value was pushed onto the stack. 181 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack. 182 183 **/ 184 EFI_STATUS 185 PopMapExpressionList ( 186 OUT VOID **Pointer 187 ); 188 189 /** 190 Pop current expression from the Stack 191 192 @param Pointer Pointer to current expression to be pop. 193 194 @retval EFI_SUCCESS The value was pushed onto the stack. 195 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the stack. 196 197 **/ 198 EFI_STATUS 199 PopCurrentExpression ( 200 OUT VOID **Pointer 201 ); 202 203 /** 204 Evaluate the result of a HII expression. 205 206 If Expression is NULL, then ASSERT. 207 208 @param FormSet FormSet associated with this expression. 209 @param Form Form associated with this expression. 210 @param Expression Expression to be evaluated. 211 212 @retval EFI_SUCCESS The expression evaluated successfuly 213 @retval EFI_NOT_FOUND The Question which referenced by a QuestionId 214 could not be found. 215 @retval EFI_OUT_OF_RESOURCES There is not enough system memory to grow the 216 stack. 217 @retval EFI_ACCESS_DENIED The pop operation underflowed the stack 218 @retval EFI_INVALID_PARAMETER Syntax error with the Expression 219 220 **/ 221 EFI_STATUS 222 EvaluateExpression ( 223 IN FORM_BROWSER_FORMSET *FormSet, 224 IN FORM_BROWSER_FORM *Form, 225 IN OUT FORM_EXPRESSION *Expression 226 ); 227 /** 228 Return the result of the expression list. Check the expression list and 229 return the highest priority express result. 230 Priority: DisableIf > SuppressIf > GrayOutIf > FALSE 231 232 @param ExpList The input expression list. 233 @param Evaluate Whether need to evaluate the expression first. 234 @param FormSet FormSet associated with this expression. 235 @param Form Form associated with this expression. 236 237 @retval EXPRESS_RESULT Return the higher priority express result. 238 DisableIf > SuppressIf > GrayOutIf > FALSE 239 240 **/ 241 EXPRESS_RESULT 242 EvaluateExpressionList ( 243 IN FORM_EXPRESSION_LIST *ExpList, 244 IN BOOLEAN Evaluate, 245 IN FORM_BROWSER_FORMSET *FormSet, OPTIONAL 246 IN FORM_BROWSER_FORM *Form OPTIONAL 247 ); 248 249 /** 250 Get Form given its FormId. 251 252 @param FormSet The formset which contains this form. 253 @param FormId Id of this form. 254 255 @retval Pointer The form. 256 @retval NULL Specified Form is not found in the formset. 257 258 **/ 259 FORM_BROWSER_FORM * 260 IdToForm ( 261 IN FORM_BROWSER_FORMSET *FormSet, 262 IN UINT16 FormId 263 ); 264 265 #endif // _EXPRESSION_H 266