⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfrcompile.g

📁 EFI BIOS是Intel提出的下一代的BIOS标准。这里上传的Edk源代码是EFI BIOS源代码中的与平台无关部分的代码
💻 G
📖 第 1 页 / 共 5 页
字号:
  }
  {
    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 + -