2.12 VFR Expression Statement Definition

The VFR expression is defined in C-style language.

The syntax of VFR expression is defined as a tree. The positions in the tree are determined according to the priority of the operator (for example: + - * /). At the root of it are the terms of OR, followed by the terms of AND, because the priority of operator OR is lower than the operator AND(s). The leaves of the tree are sub- expressions of built-in-functions, unary operators, ternary operators, and constants.

2.12.1 OR

vfrStatementExpression ::=
  andTerm ( "OR" andTerm )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_OR op-codes.

2.12.2 AND

andTerm ::=
  bitwiseorTerm ( "AND" bitwiseorTerm )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_AND op-codes.

2.12.3 bitwiseor

bitwiseorTerm ::=
  bitwiseandTerm ( "|" bitwiseandTerm )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_BITWISE_OR op-codes.

2.12.4 bitwiseand

bitwiseandTerm ::=
  equalTerm ( "&" equalTerm )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_BITWISE_AND op-codes.

2.12.5 equal

equalTerm ::=
  compareTerm
  (
      "==" compareTerm
    | "!=" compareTerm
  )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_EQUAL or EFI_IFR_NOT_EQUAL op-codes.

2.12.6 compare

compareTerm ::=
  shiftTerm
  (
      "<" shiftTerm
    | "<=" shiftTerm
    | ">" shiftTerm
    | ">=" shiftTerm
  )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_LESS_THAN EFI_IFR_LESS_EQUAL, EFI_IFR_IFR_GREATER_EQUAL, or EFI_IFR_GREATER_THAN op-codes.

2.12.7 shift

shiftTerm ::=
  addMinusTerm
  (
      "<<" addMinusTerm
    | ">>" addMinusTerm
  )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_SHIFT_LEFT or EFI_IFR_SHIFT_RIGHT op-codes.

2.12.8 add/minus

addMinusTerm ::=
  multdivmodTerm
  (
      "+" multdivmodTerm
    | "-" multdivmodTerm
  )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_ADD or EFI_IFR_SUBTRACT op-codes.

2.12.9 multiply/divide/modulo

multdivmodTerm ::=
  castTerm
  (
      "*" castTerm
    | "/" castTerm
    | "%" castTerm
  )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_MULTIPLY EFI_IFR_MODULO or EFI_IFR_DIVIDE op-codes.

2.12.10 cast terms

castTerm ::=
  (
    "("
    (
        "BOOLEAN"
      | "UINT64"
      | "UINT32"
      | "UINT16"
      | "UINT8"
    )
    ")"
  )*
  atomTerm

BEHAVIORS AND RESTRICTIONS

The VFR supports the C-style type conversion. The values can be converted into one of the following types: BOOLEAN, UINT64, UINT32, UINT16, UINT8.

2.12.11 atom terms

atomTerm ::=
    vfrExpressionCatenate
  | vfrExpressionMatch
  | vfrExpressionParen
  | vfrExpressionBuildInFunction
  | vfrExpressionConstant
  | vfrExpressionUnaryOp
  | vfrExpressionTernaryOp
  | vfrExpressionMap
  | ( "NOT" atomTerm )
  | vfrExpressionMatch2

2.12.11.1 catenate

vfrExpressionCatenate ::=
  "catenate"
  "(" vfrStatementExpression "," vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_CATENATE op-codes.

Example

string  varid   = MyData.String,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minsize = 6,
        maxsize = 40,
        inconsistentif prompt = STRING_TOKEN(STR_CHECK),
           pushthis != catenate(stringref(STRING_TOKEN(STR_STRING_RIGHT)),
                                stringref(STRING_TOKEN(STR_STRING_LEFT))),
        endif
endstring;

2.12.11.2 match

vfrExpressionMatch ::=
  "match"
  "(" vfrStatementExpression "," vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_MATCH op-codes.

Example

grayoutif  match(stringref(STRING_TOKEN(STR_PATTERN)),
                 stringref(STRING_TOKEN(STR_STRING)))
      numeric varid   = MyData.Data,
              prompt  = STRING_TOKEN(STR_PROMPT),
              help    = STRING_TOKEN(STR_HELP),
              minimum = 0,
              maximum = 243,
      endnumeric;
endif;

2.12.11.3 parenthesis

vfrExpressionParen ::=
  "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Changes the order of the calculation.

2.12.11.4 build-in functions

vfrExpressionBuildInFunction ::=
    dupExp
  | ideqvalExp
  | ideqidExp
  | ideqvallistExp
  | questionref1Exp
  | rulerefExp
  | stringref1Exp
  | pushthisExp
  | securityExp
  | getExp
2.12.11.4.1 dup
dupExp ::=
  "dup"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_DUP op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 0xf0,
          default value = 2 + dup,
endnumeric;
2.12.11.4.2 ideqval
ideqvalExp ::=
  "ideqval"
  vfrQuestionDataFieldName "==" Number

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_EQ_ID_VAL op-codes.

Example

grayoutif ideqval MyData.Data1 == 99;
  numeric varid   = MyData.Data,
          prompt  = STRING_TOKEN(STR_PROMPT),
          help    = STRING_TOKEN(STR_HELP),
          minimum = 0,
          maximum = 0xf0,
  endnumeric;
endif;
2.12.11.4.3 ideqid
ideqidExp ::=
  "ideqid"
  vfrQuestionDataFieldName "==" vfrQuestionDataFieldName

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_EQ_ID_ID op-codes.

Example

grayoutif ideqid MyData.Data2 == MyData.Data3;
  numeric varid   = MyData.Data,
          prompt  = STRING_TOKEN(STR_PROMPT),
          help    = STRING_TOKEN(STR_HELP),
          minimum = 0,
          maximum = 0xf0,
  endnumeric;
endif;
2.12.11.4.4 ideqvallist
ideqvallistExp ::=
  "ideqvallist"
  vfrQuestionDataFieldName "==" ( Number )+

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_EQ_ID_LIST op-codes.

grayoutif ideqvallist MyData.Data1 == 1 3;
  numeric name    = MyNumeric,
          varid   = MyData.Data,
          prompt  = STRING_TOKEN(STR_PROMPT),
          help    = STRING_TOKEN(STR_HELP),
          minimum = 0,
          maximum = 0xf0,
  endnumeric;
endif;
2.12.11.4.5 questionref
questionref1Exp ::=
  "questionref"
    "(" StringIdentifier | Number ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_QUESTION_REF1 op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 0xf0,
        default value = questionref(MyNumeric),
endnumeric;
2.12.11.4.6 ruleref
rulerefExp ::=
  "ruleref" "(" StringIdentifier ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_RULE_REF op-codes.

Example

grayoutif ruleref(MyRule) == 1;
  string varid   = MyData.String,
         prompt  = STRING_TOKEN(STR_PROMPT),
         help    = STRING_TOKEN(STR_HELP),
         minsize = 6,
         maxsize = 40,
  endstring;
endif;
2.12.11.4.7 stringref
stringref1Exp ::=
  "stringref" "(" getStringId ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_STRING_REF1 op-codes.

Example

grayoutif stringref(STRING_TOKEN(STR_STRING)) == 1;
  string varid   = MyData.String,
         prompt  = STRING_TOKEN(STR_PROMPT),
         help    = STRING_TOKEN(STR_HELP),
         minsize = 6,
         maxsize = 40,
  endstring;
endif;
2.12.11.4.8 pushthis
pushthisExp ::=
  "pushthis"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_THIS op-codes.

Example

string  varid   = MyData.String,
        prompt  = STRING_TOKEN(STR_PROMPT), help = STRING_TOKEN(STR_HELP),
        minsize = 6,
        maxsize = 40,
        inconsistentif prompt = STRING_TOKEN(STR_CHECK),
          pushthis != stringref(STRING_TOKEN(STR_STRING))
        endif
endstring;
2.12.11.4.9 security
securityExp ::=
  "security" "(" guidDefinition ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_SECURITY op-codes.

Example

grayoutif NOT security(EFI_GUID);
    text
      help = STRING_TOKEN(STR_HELP),
      text = STRING_TOKEN(STR_TEXT);
endif;
2.12.11.4.10 get
getExp ::=
  "get" "(" vfrStorageVarId { "|" "flags" "=" vfrNumericFlags } ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_GET op-codes.

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        read get(MyData.Data1);
endnumeric;

2.12.11.5 constant

vfrExpressionConstant ::=
    "TRUE"
  | "FALSE" | "ONE"
  | "ONES"
  | "ZERO"
  | "UNDEFINED"
  | "VERSION"
  | Number

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TRUE EFI_IFR_FALSE, EFI_IFR_ONE EFI_IFR_ONES, EFI_IFR_ZERO, EFI_IFR_UNDEFINED, or EFI_IFR_VERSION op-codes.

2.12.11.6 unary operators

vfrExpressionUnaryOp ::=
    lengthExp
  | bitwisenotExp
  | question23refExp
  | stringref2Exp
  | toboolExp
  | tostringExp
  | unintExp
  | toupperExp
  | tolwerExp
  | setExp
2.12.11.6.1 length
lengthExp ::=
  "length" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_LENGTH op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        default value = length(stringref(STRING_TOKEN(STR_STRING))),
endnumeric;
2.12.11.6.2 bitwisenot
bitwisenotExp ::=
  "~" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_BITWISENOT op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        default value = ~(length(stringref(STRING_TOKEN(STR_STRING)))),
endnumeric;
2.12.11.6.3 questionrefval
question23refExp ::=
  "questionrefval"
  "("
    {
      DevicePath "=" "STRING_TOKEN" "\(" S:Number "\)" ","
    }
    {
      Uuid "=" guidDefinition[Guid] ","
    }
    vfrStatementExpression
  ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_QUESTION_REF2 or EFI_IFR_QUESTION_REF3 op-codes.

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        default value = questionrefval(QuestionID),
endnumeric;
2.12.11.6.4 stringrefval
stringref2Exp ::=
  "stringrefval" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_STRING_REF2 op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        default value = length(stringrefval(STR_STRING)),
endnumeric;
2.12.11.6.5 boolval
toboolExp ::=
  "boolval" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TO_BOOLEAN op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255, default value = boolval(12),
endnumeric;
2.12.11.6.6 stringval
tostringExp ::=
  "stringval" { "format" "=" Number "," }
  "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TO_STRING op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        default value = length(stringval(format = 8, 12)),
endnumeric;
2.12.11.6.7 unintval
unintExp ::=
  "unintval" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TO_UINT op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        default value = unintval(12 * 3),
endnumeric;
2.12.11.6.8 toupper
toupperExp ::=
  "toupper" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TO_UPPER op-codes.

Example

grayoutif length(toupper(stringref(STRING_TOKEN(STR_STRING))))==1;
  string varid   = MyData.String,
         prompt  = STRING_TOKEN(STR_PROMPT),
         help    = STRING_TOKEN(STR_HELP),
         minsize = 6,
         maxsize = 40,
  endstring;
endif;
2.12.11.6.9 tolower
tolwerExp ::=
  "tolower" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TO_LOWER op-codes.

grayoutif length(tolower(stringref(STRING_TOKEN(STR_STRING))))==2;
  string varid   = MyData.String,
         prompt  = STRING_TOKEN(STR_PROMPT),
         help    = STRING_TOKEN(STR_HELP),
         minsize = 6,
         maxsize = 40,
  endstring;
endif;
2.12.11.6.10 set
setExp ::=
  "set"
  "("
  vfrStorageVarId { "|" "flags" "=" vfrNumericFlags } ","
  vfrStatementExpression
  ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_SET op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        write set(MyData.Data1,10);
endnumeric;
2.12.11.7 ternary operators
vfrExpressionTernaryOp ::=
    conditionalExp
  | findExp
  | midExp
  | tokenExp
  | spanExp
2.12.11.7.1 cond
conditionalExp ::=
  "cond"
  "("
  vfrStatementExpression1
  "?"
  vfrStatementExpression2
  ":"
  vfrStatementExpression3
  ")"

BEHAVIORS AND RESTRICTIONS

If (Expr1) then x = Expr3 else Expr2

Generates EFI_IFR_CONDITIONAL op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        default value = cond(2 == 1 ? 5 : 10),
endnumeric;
2.12.11.7.2 find
findExp ::=
  "find"
  "("
  findFormat ( "|" findFormat )*
  ","
  vfrStatementExpression
  ","
  vfrStatementExpression
  ","
  vfrStatementExpression
  ")"

findFormat ::=
    "SENSITIVE"
  | "INSENSITIVE"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_FIND op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        default value =
          find(INSENSITIVE, (stringref(STRING_TOKEN(STR_STRING1))),
                            (stringref(STRING_TOKEN(STR_STRING2))), 1),
endnumeric;
2.12.11.7.3 mid
midExp ::=
  "mid"
  "("
  vfrStatementExpression
  ","
  vfrStatementExpression
  ","
  vfrStatementExpression
  ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_MID op-codes.

Example

grayoutif length(mid(stringref(STRING_TOKEN(STR_STRING)),6,8))==1;
  string varid   = MyData.String,
         prompt  = STRING_TOKEN(STR_PROMPT),
         help    = STRING_TOKEN(STR_HELP),
         minsize = 6,
         maxsize = 40,
  endstring;
endif;
2.12.11.7.4 tok
tokenExp ::=
  "token"
  "("
  vfrStatementExpression
  ","
  vfrStatementExpression
  ","
  vfrStatementExpression
  ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TOKEN op-codes.

Example

grayoutif length(token(stringref(STRING_TOKEN(STR_STRING1)),
                 stringref(STRING_TOKEN(STR_STRING2)), 0)) == 2;
  string varid   = MyData.String,
         prompt  = STRING_TOKEN(STR_PROMPT),
         help    = STRING_TOKEN(STR_HELP),
         minsize = 6,
         maxsize = 40,
  endstring;
endif;
2.12.11.7.5 span
spanExp ::=
  "span"
  "("
  "flags" "=" spanFlags ( "|" spanFlags )*
  ","
  vfrStatementExpression
  ","
  vfrStatementExpression
  ","
  vfrStatementExpression
  ")"

spanFlags ::=
    Number
  | "LAST_NON_MATCH"
  | "FIRST_NON_MATCH"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_SPAN op-codes.

Example

numeric varid = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        default value = span(flags = LAST_NON_MATCH,
                             stringref(STRING_TOKEN(STR_STRING1)),
                             stringref(STRING_TOKEN(STR_STRING2)),0),
endnumeric;

2.12.11.8 map

vfrExpressionMap ::=
  "map"
  "("
  vfrStatementExpression
  ":"
  (
    vfrStatementExpression
    ","
    vfrStatementExpression
    ";"
  )*
  ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_MAP op-codes.

Example

numeric varid   = MyData.Data,
        prompt  = STRING_TOKEN(STR_PROMPT),
        help    = STRING_TOKEN(STR_HELP),
        minimum = 0,
        maximum = 255,
        default value = map(pushthis:0,10;1,2;3,5;6,8;),
endnumeric;

2.12.11.9 match2

vfrExpressionMatch ::=
  "match2"
  "("
  vfrStatementExpressionPattern
  ","
  vfrStatementExpressionString
  ","
  guidDefinition[Guid]
  ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_MATCH2 op-codes.

Example

grayoutif match2(stringref(STRING_TOKEN(STR_PATTERN)),
                 stringref(STRING_TOKEN(STR_STRING)),
                 PERL_GUID);
    numeric varid   = MyData.Data,
            prompt  = STRING_TOKEN(STR_PROMPT),
            help    = STRING_TOKEN(STR_HELP),
            minimum = 0,
            maximum = 243,
    endnumeric;
endif;