📄 vfrcompile.g
字号:
}
{
Key "=" KNUM:Number "," << LineNum = KNUM->getLine(); KeyValue = GetNumber(KNUM->getText(), LineNum, 2); >>
}
<< WriteFlagsKey (KeyValue, LineNum); >>
MinSize "=" MIN:Number "," << WriteByte (GetNumber (MIN->getText(), MIN->getLine(), 1), 0); >>
MaxSize "=" MAX:Number "," << WriteByte (GetNumber (MAX->getText(), MAX->getLine(), 1), 0); >>
Encoding "=" ENC:Number "," << WriteWord (GetNumber (ENC->getText(), ENC->getLine(), 2)); >>
EndPassword ";"
;
//*****************************************************************************
//
// PARSE:
//
// string varid = MyNv.String,
// prompt = STRING_TOKEN(STR_STRING_PROMPT),
// help = STRING_TOKEN(STR_STRING_HELP),
// flags = INTERACTIVE,
// key = 0x1234,
// minsize = 6,
// maxsize = 0x14,
// endstring;
//
// Since flags and key are optional, we can't use Flags->getLine(). Therefore for error
// reporting we save the line number of the "help" keyword.
//
vfrStatementString :
<< unsigned int KeyValue = 0; UINT32 LineNum; ResetFlags (); >>
IDS:String << WriteOpByte (IDS->getLine(), EFI_IFR_STRING_OP); >>
VarId "=" vfrStructFieldNameArray[0] ","
Prompt "=" getStringId ","
KH:Help "=" getStringId "," << LineNum = KH->getLine(); >>
{
FF:Flags "="
flagsField ( "\|" flagsField )* << LineNum = FF->getLine(); >>
","
}
{
Key "=" KNUM:Number "," << LineNum = KNUM->getLine(); KeyValue = GetNumber(KNUM->getText(), LineNum, 2); >>
}
<< WriteFlagsKey (KeyValue, LineNum); >>
MinSize "=" MIN:Number "," << WriteByte (GetNumber (MIN->getText(), MIN->getLine(), 1), 0); >>
MaxSize "=" MAX:Number "," << WriteByte (GetNumber (MAX->getText(), MAX->getLine(), 1), 0); >>
EndString ";"
;
//*****************************************************************************
//
// PARSE:
// numeric varid = MyIfrNVData.HowOldAreYouInYears,
// prompt = STRING_TOKEN(STR_NUMERIC_PROMPT),
// help = STRING_TOKEN(STR_NUMERIC_HELP),
// flags = INTERACTIVE, // flags is optional
// key = 0x1234, // key is optional if (flags & INTERACTIVE = 0)
// minimum = 0x0,
// maximum = 0xf0,
// step = 1, // step is option, and step=1 if not specified
// default = 0; // default is optional, and default=minimum if not specified
// endnumeric;
//
// Make flags and key optional. However if flags includes INTERACTIVE, then a key is required.
// That check is done in WriteFlagsKey() function.
//
vfrStatementNumeric :
<< UINT32 LineNum, KeyValue = 0; ResetFlags (); >>
IDN:Numeric << WriteOpByte (IDN->getLine(), EFI_IFR_NUMERIC_OP); >>
VarId "=" vfrStructFieldName[2] ","
Prompt "=" getStringId ","
KH:Help "=" getStringId "," << LineNum = KH->getLine(); >>
{
FF:Flags "=" flagsField ( "\|" flagsField )* "," << LineNum = FF->getLine (); >>
}
{
Key "=" KNUM:Number "," << LineNum = KNUM->getLine(); KeyValue = GetNumber(KNUM->getText(), LineNum, 2); >>
}
<< WriteFlagsKey (KeyValue, LineNum); >>
minMaxStepDefault
EndNumeric ";" << WriteMinMaxStepDefault (); >>
;
//
// Parse minimum/maximum/step/default statements. Special cases:
// - if step not specified, then the value is 1
// - if default not specified, then the value is the min value specified
// - if max < min, print a warning and swap the values (changes default too)
//
minMaxStepDefault :
<< InitMinMaxStepDefault (); >>
Minimum "=" MIN:Number "," << SetMinMaxStepDefault (GetNumber (MIN->getText(), MIN->getLine(), 2), 0, MIN->getLine()); >>
Maximum "=" MAX:Number "," << SetMinMaxStepDefault (GetNumber (MAX->getText(), MAX->getLine(), 2), 1, MAX->getLine()); >>
{ Step "=" STEP:Number "," << SetMinMaxStepDefault (GetNumber (STEP->getText(), STEP->getLine(), 2), 2, STEP->getLine()); >> }
{ Default "=" DEF:Number "," << SetMinMaxStepDefault (GetNumber (DEF->getText(), DEF->getLine(), 2), 3, DEF->getLine()); >> }
;
//*****************************************************************************
//
// PARSE:
//
// date year varid = Date.Year, // "Date.Year" is a special case we recognize
// prompt = STRING_TOKEN(STR_DATE_PROMPT),
// help = STRING_TOKEN(STR_DATE_YEAR_HELP),
// minimum = 1939,
// maximum = 2101,
// step = 1,
// default = 1964,
//
// month varid = Date.Month,
// prompt = STRING_TOKEN(STR_DATE_PROMPT),
// help = STRING_TOKEN(STR_DATE_MONTH_HELP),
// minimum = 1,
// maximum = 12,
// step = 1,
// default = 1,
//
// day varid = Date.Day,
// prompt = STRING_TOKEN(STR_DATE_PROMPT),
// help = STRING_TOKEN(STR_DATE_DAY_HELP),
// minimum = 1,
// maximum = 31,
// step = 0x1,
// default = 1,
//
// enddate;
//
vfrStatementDate :
Date
IDY:Year VarId "=" << WriteOpByte (IDY->getLine(), EFI_IFR_DATE_OP); >>
vfrStructFieldName[2] ","
dateTimeSubStatement
IDM:Month VarId "=" << WriteOpByte (IDM->getLine(), EFI_IFR_DATE_OP); >>
vfrStructFieldName[2] ","
dateTimeSubStatement
IDD:Day VarId "=" << WriteOpByte (IDD->getLine(), EFI_IFR_DATE_OP); >>
vfrStructFieldName[2] ","
dateTimeSubStatement
EndDate ";"
;
vfrStatementTime :
Time
IDH:Hour VarId "=" << WriteOpByte (IDH->getLine(), EFI_IFR_TIME_OP); >>
vfrStructFieldName[2] ","
dateTimeSubStatement
IDM:Minute VarId "=" << WriteOpByte (IDM->getLine(), EFI_IFR_TIME_OP); >>
vfrStructFieldName[2] ","
dateTimeSubStatement
IDS:Second VarId "=" << WriteOpByte (IDS->getLine(), EFI_IFR_TIME_OP); >>
vfrStructFieldName[2] ","
dateTimeSubStatement
EndTime ";"
;
//*****************************************************************************
//
// PARSE:
//
// text text = STRING_ID;
// text text = STRING_ID, text = STRING_ID;
// text text = STRING_ID, text = STRING_ID, flags = x, key = y;
//
vfrStatementTextText :
<< ResetFlags (); >>
IDT:Text << WriteOpByte (IDT->getLine(), EFI_IFR_TEXT_OP); >>
Help "=" getStringId ","
Text "="
getStringId // writes string identifier
{ "," Text "=" getStringId
"," Flags "=" flagsField ( "\|" flagsField )* << WriteFlags (); >>
","
Key "=" KNUM:Number << WriteWord (GetNumber(KNUM->getText(), KNUM->getLine(), 2)); >>
}
";"
;
//*****************************************************************************
//
// PARSE:
//
// inventory help = ID, text = ID;
// inventory help = ID, text = id, text = ID;
//
vfrStatementInventory :
IDI:Inventory << WriteOpByte (IDI->getLine(), EFI_IFR_INVENTORY_OP); >>
Help "=" getStringId ","
Text "=" getStringId // writes string identifier
{ "," Text "=" getStringId
}
";"
;
//*****************************************************************************
//
// PARSE:
//
// restore defaults,
// formid = 4,
// prompt = STRING_TOKEN(STR_RESTORE_DEFAULTS_PROMPT),
// help = STRING_TOKEN(STR_RESTORE_DEFAULTS_HELP),
// flags = 0,
// key = 0;
//
// save defaults,
// formid = 4,
// prompt = STRING_TOKEN(STR_SAVE_DEFAULTS_PROMPT),
// help = STRING_TOKEN(STR_SAVE_DEFAULTS_HELP),
// flags = 0,
// key = 0;
//
vfrStatementSaveRestoreDefaults :
<< unsigned int KeyValue = 0; UINT32 LineNum; ResetFlags (); >>
( IDS:Save << WriteOpByte (IDS->getLine(), EFI_IFR_SAVE_DEFAULTS_OP); >>
| IDR:Restore << WriteOpByte (IDR->getLine(), EFI_IFR_RESTORE_DEFAULTS_OP); >>
)
Defaults ","
FormId "=" FRMID:Number "," << WriteWord (GetNumber (FRMID->getText(), FRMID->getLine(), 2));
AddGotoReference (GetNumber (FRMID->getText(), FRMID->getLine(), 2), FRMID->getLine());
>>
Prompt "=" getStringId ","
KH:Help "=" getStringId << LineNum = KH->getLine(); >>
{
"," FF:Flags "=" flagsField ( "\|" flagsField )* << LineNum = FF->getLine(); >>
}
{
"," Key "=" KNUM:Number << LineNum = KNUM->getLine(); KeyValue = GetNumber(KNUM->getText(), LineNum, 2); >>
}
<< WriteFlagsKey (KeyValue, LineNum); >>
";"
;
//*****************************************************************************
//
// PARSE:
//
// flags = 0x10 | DEFAULT | MANUFACTURING | INTERACTIVE | NV_ACCESS | RESET_REQUIRED | LATE_CHECK
//
//
flagsField :
VAL:Number << SetFlags (GetNumber(VAL->getText(), VAL->getLine(), 4), VAL->getLine()); >>
| IF:InteractiveFlag << SetFlags (EFI_IFR_FLAG_INTERACTIVE, IF->getLine()); >>
| MF:ManufacturingFlag << SetFlags (EFI_IFR_FLAG_MANUFACTURING, MF->getLine()); >>
| DF:DefaultFlag << SetFlags (EFI_IFR_FLAG_DEFAULT, DF->getLine()); >>
| NV:NVAccessFlag << SetFlags (EFI_IFR_FLAG_NV_ACCESS, NV->getLine()); >>
| RR:ResetRequiredFlag << SetFlags (EFI_IFR_FLAG_RESET_REQUIRED, RR->getLine()); >>
| LC:LateCheckFlag << SetFlags (EFI_IFR_FLAG_LATE_CHECK, LC->getLine()); >>
;
dateTimeSubStatement :
Prompt "=" getStringId ","
Help "=" getStringId ","
<< WriteByte (0, 0); WriteWord (0); >> // bogus flags and key
minMaxStepDefault << WriteMinMaxStepDefault (); >>
;
vfrStatementCheckBox :
<< UINT32 LineNum, KeyValue = 0; ResetFlags (); >>
IDCB:CheckBox << WriteOpByte (IDCB->getLine(), EFI_IFR_CHECKBOX_OP); >>
VarId "=" vfrStructFieldName[1] ","
Prompt "=" getStringId ","
Help "=" getStringId ","
FF:Flags "=" flagsField ( "\|" flagsField )* "," << LineNum = FF->getLine(); >>
{
Key "=" KV:Number "," << LineNum = KV->getLine(); KeyValue = GetNumber(KV->getText(), LineNum, 2); >>
}
<< WriteFlagsKey (KeyValue, LineNum); >>
EndCheckBox ";"
;
vfrStatementSubTitle :
IDS:Subtitle Text "=" << WriteOpByte (IDS->getLine(), EFI_IFR_SUBTITLE_OP); >>
getStringId // writes string indentifier
";"
;
//*****************************************************************************
//
// PARSE:
// banner
// title = STRING_TOKEN(STR_BANNER_TITLE),
// line 1,
// align center; // or left or right
//
// banner,
// title = STRING_TOKEN(STR_BANNER_TITLE), timeout = 100;
//
vfrStatementBanner :
IDB:Banner { "," } << WriteOpByte (IDB->getLine(), EFI_IFR_BANNER_OP); >>
Title "=" getStringId ","
(
Line VAL:Number "," << WriteWord (GetNumber(VAL->getText(), VAL->getLine(), 2)); >>
Align
( Left << WriteByte (EFI_IFR_BANNER_ALIGN_LEFT, 0); >>
| Center << WriteByte (EFI_IFR_BANNER_ALIGN_CENTER, 0); >>
| Right << WriteByte (EFI_IFR_BANNER_ALIGN_RIGHT, 0); >>
) ";"
|
Timeout "=" TO:Number ";" << WriteWord (GetNumber(TO->getText(), TO->getLine(), 2)); >>
<< WriteByte (EFI_IFR_BANNER_TIMEOUT, 0); >>
)
;
//*****************************************************************************
//
// PARSE:
// oneof varid = MyNv.OneOfData,
// prompt = STRING_TOKEN(STR_ONE_OF_PROMPT),
// help = STRING_TOKEN(STR_ONE_OF_HELP),
// option text = STRING_TOKEN(STR_ONE_OF_TEXT),
// value = 0,
// flags = DEFAULT | INTERACTIVE;
//
// supressif/grayoutif are supported inside oneof stmt.
// We do not restrict the number of oneOfOptionText to >=2, but >=1.
// The situation that all oneOfOptionText are suppressed is also possiable.
//
vfrStatementOneOf :
<< ResetFlags (); >>
IDOO:OneOf << WriteOpByte (IDOO->getLine(), EFI_IFR_ONE_OF_OP); >>
VarId "=" vfrStructFieldName[2] ","
Prompt "=" getStringId "," // writes string identifier
Help "=" getStringId "," // writes string identifier
( oneOfOptionText )+ // there must be at least 1 option to be choosed, not 2.
IDEOO:EndOneOf ";" << TestOneOfFlags (IDEOO->getLine()); WriteOpByte (IDEOO->getLine(), EFI_IFR_END_ONE_OF_OP); >>
;
//*****************************************************************************
//
// PARSE:
//
// orderedlist varid = MyNv.OrderedListData,
// prompt = STRING_TOKEN(STR_ORDERED_LIST_PROMPT),
// help = STRING_TOKEN(STR_ORDERED_LIST_HELP),
// option text = STRING_TOKEN(STR_ORDERED_LIST_TEXT), value = 0, flags = INTERACTIVE;
// -- additional option text --
// endlist;
//
vfrStatementOrderedList :
<< ResetFlags (); InitOrderedList(); >>
IDOL:OrderedList << WriteOpByte (IDOL->getLine(), EFI_IFR_ORDERED_LIST_OP); >>
VarId "=" vfrStructFieldNameArray[1] ","
Prompt "=" getStringId "," // writes string identifier
Help "=" getStringId "," // writes string identifier
orderedListOptionText ( orderedListOptionText )+
IDEOL:EndList ";" << WriteOpByte (IDEOL->getLine(), EFI_IFR_END_OP); EndOrderedList(IDEOL->getLine()); >>
;
//*****************************************************************************
//
// PARSE:
//
// option text = STRING_TOKEN(STRING_ID), value = 0 flags = 99;
//
// Differs from the oneOfOptionText in that we don't allow the DEFAULT flag to
// be set, and value cannot be 0.
//
orderedListOptionT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -