ifronthefly.c
来自「EFI BIOS是Intel提出的下一代的BIOS标准。这里上传的Edk源代码是」· C语言 代码 · 共 975 行 · 第 1/2 页
C
975 行
Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);
if (EFI_ERROR (Status)) {
return Status;
}
OneOf.Header.OpCode = EFI_IFR_ONE_OF_OP;
OneOf.Header.Length = sizeof (EFI_IFR_ONE_OF);
OneOf.QuestionId = QuestionId;
OneOf.Width = DataWidth;
OneOf.Prompt = StringToken;
//
// Add second string, get first string's token
//
Status = AddString (StringBuffer, CurrentLanguage, Help, &StringToken);
if (EFI_ERROR (Status)) {
return Status;
}
OneOf.Help = StringToken;
Status = AddOpCode (FormBuffer, &OneOf);
if (EFI_ERROR (Status)) {
return Status;
}
for (Index = 0; Index < OptionCount; Index++) {
OneOfOption.Header.OpCode = EFI_IFR_ONE_OF_OPTION_OP;
OneOfOption.Header.Length = sizeof (EFI_IFR_ONE_OF_OPTION);
//
// Add string and get token back
//
Status = AddString (StringBuffer, CurrentLanguage, OptionsList[Index].OptionString, &StringToken);
OneOfOption.Option = StringToken;
OneOfOption.Value = OptionsList[Index].Value;
OneOfOption.Flags = (UINT8) (OptionsList[Index].Flags | EFI_IFR_FLAG_CREATED);
OneOfOption.Key = OptionsList[Index].Key;
Status = AddOpCode (FormBuffer, &OneOfOption);
if (EFI_ERROR (Status)) {
return Status;
}
}
EndOneOf.Header.Length = sizeof (EFI_IFR_END_ONE_OF);
EndOneOf.Header.OpCode = EFI_IFR_END_ONE_OF_OP;
Status = AddOpCode (FormBuffer, &EndOneOf);
if (EFI_ERROR (Status)) {
return Status;
}
return EFI_SUCCESS;
}
EFI_STATUS
CreateOrderedList (
IN UINT16 QuestionId,
IN UINT8 MaxEntries,
IN CHAR16 *Prompt,
IN CHAR16 *Help,
IN IFR_OPTION *OptionsList,
IN UINTN OptionCount,
IN OUT VOID *FormBuffer,
IN OUT VOID *StringBuffer
)
/*++
Routine Description:
Create a one-of question with a set of options to choose from. The
OptionsList is a pointer to a null-terminated list of option descriptions.
Arguments:
QuestionId - Question ID of the ordered list
MaxEntries - MaxEntries of the ordered list
Prompt - Prompt of the ordered list
Help - Help of the ordered list
OptionsList - Each string in it is an option of the ordered list
OptionCount - Option string count
FormBuffer - The form where this ordered list adds to
StringBuffer - String buffer created for Prompt, Help and Option strings
Returns:
EFI_SUCCESS - Ordered list successfully created.
--*/
{
EFI_STATUS Status;
UINTN Index;
EFI_IFR_ORDERED_LIST OrderedList;
EFI_IFR_ONE_OF_OPTION OrderedListOption;
EFI_IFR_END_ONE_OF EndOrderedList;
CHAR16 CurrentLanguage[4];
STRING_REF StringToken;
//
// Obtain current language value
//
GetCurrentLanguage (CurrentLanguage);
//
// Add first string, get first string's token
//
Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);
if (EFI_ERROR (Status)) {
return Status;
}
OrderedList.Header.OpCode = EFI_IFR_ORDERED_LIST_OP;
OrderedList.Header.Length = sizeof (EFI_IFR_ORDERED_LIST);
OrderedList.QuestionId = QuestionId;
OrderedList.MaxEntries = MaxEntries;
OrderedList.Prompt = StringToken;
//
// Add second string, get first string's token
//
Status = AddString (StringBuffer, CurrentLanguage, Help, &StringToken);
if (EFI_ERROR (Status)) {
return Status;
}
OrderedList.Help = StringToken;
Status = AddOpCode (FormBuffer, &OrderedList);
if (EFI_ERROR (Status)) {
return Status;
}
for (Index = 0; Index < OptionCount; Index++) {
OrderedListOption.Header.OpCode = EFI_IFR_ONE_OF_OPTION_OP;
OrderedListOption.Header.Length = sizeof (EFI_IFR_ONE_OF_OPTION);
//
// Add string and get token back
//
Status = AddString (StringBuffer, CurrentLanguage, OptionsList[Index].OptionString, &StringToken);
OrderedListOption.Option = StringToken;
OrderedListOption.Value = OptionsList[Index].Value;
OrderedListOption.Flags = (UINT8) (OptionsList[Index].Flags | EFI_IFR_FLAG_CREATED);
OrderedListOption.Key = OptionsList[Index].Key;
Status = AddOpCode (FormBuffer, &OrderedListOption);
if (EFI_ERROR (Status)) {
return Status;
}
}
EndOrderedList.Header.Length = sizeof (EFI_IFR_END_ONE_OF);
EndOrderedList.Header.OpCode = EFI_IFR_END_ONE_OF_OP;
Status = AddOpCode (FormBuffer, &EndOrderedList);
if (EFI_ERROR (Status)) {
return Status;
}
return EFI_SUCCESS;
}
EFI_STATUS
CreateCheckBox (
IN UINT16 QuestionId,
IN UINT8 DataWidth,
IN CHAR16 *Prompt,
IN CHAR16 *Help,
IN UINT8 Flags,
IN OUT VOID *FormBuffer,
IN OUT VOID *StringBuffer
)
/*++
Routine Description:
Create a checkbox
Arguments:
QuestionId - Question ID of the check box
DataWidth - DataWidth of the check box
Prompt - Prompt of the check box
Help - Help of the check box
Flags - Flags of the check box
FormBuffer - The form where this check box adds to
StringBuffer - String buffer created for Prompt and Help.
Returns:
EFI_DEVICE_ERROR - DataWidth > 1
EFI_SUCCESS - Check box successfully created
--*/
{
EFI_STATUS Status;
EFI_IFR_CHECK_BOX CheckBox;
CHAR16 CurrentLanguage[4];
STRING_REF StringToken;
//
// We do not create op-code storage widths for checkbox in excess of 8 bits for now
//
if (DataWidth > 1) {
return EFI_DEVICE_ERROR;
}
//
// Obtain current language value
//
GetCurrentLanguage (CurrentLanguage);
//
// Add first string, get first string's token
//
Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);
if (EFI_ERROR (Status)) {
return Status;
}
CheckBox.Header.OpCode = EFI_IFR_CHECKBOX_OP;
CheckBox.Header.Length = sizeof (EFI_IFR_CHECK_BOX);
CheckBox.QuestionId = QuestionId;
CheckBox.Width = DataWidth;
CheckBox.Prompt = StringToken;
//
// Add second string, get first string's token
//
Status = AddString (StringBuffer, CurrentLanguage, Help, &StringToken);
if (EFI_ERROR (Status)) {
return Status;
}
CheckBox.Help = StringToken;
CheckBox.Flags = (UINT8) (Flags | EFI_IFR_FLAG_CREATED);
Status = AddOpCode (FormBuffer, &CheckBox);
if (EFI_ERROR (Status)) {
return Status;
}
return EFI_SUCCESS;
}
EFI_STATUS
CreateNumeric (
IN UINT16 QuestionId,
IN UINT8 DataWidth,
IN CHAR16 *Prompt,
IN CHAR16 *Help,
IN UINT16 Minimum,
IN UINT16 Maximum,
IN UINT16 Step,
IN UINT16 Default,
IN UINT8 Flags,
IN UINT16 Key,
IN OUT VOID *FormBuffer,
IN OUT VOID *StringBuffer
)
/*++
Routine Description:
Create a numeric
Arguments:
QuestionId - Question ID of the numeric
DataWidth - DataWidth of the numeric
Prompt - Prompt of the numeric
Help - Help of the numeric
Minimum - Minumun boundary of the numeric
Maximum - Maximum boundary of the numeric
Step - Step of the numeric
Default - Default value
Flags - Flags of the numeric
Key - Key of the numeric
FormBuffer - The form where this numeric adds to
StringBuffer - String buffer created for Prompt and Help.
Returns:
EFI_DEVICE_ERROR - DataWidth > 2
EFI_SUCCESS - Numeric is successfully created
--*/
{
EFI_STATUS Status;
EFI_IFR_NUMERIC Numeric;
CHAR16 CurrentLanguage[4];
STRING_REF StringToken;
//
// We do not create op-code storage widths for numerics in excess of 16 bits for now
//
if (DataWidth > 2) {
return EFI_DEVICE_ERROR;
}
//
// Obtain current language value
//
GetCurrentLanguage (CurrentLanguage);
//
// Add first string, get first string's token
//
Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);
if (EFI_ERROR (Status)) {
return Status;
}
Numeric.Header.OpCode = EFI_IFR_NUMERIC_OP;
Numeric.Header.Length = sizeof (EFI_IFR_NUMERIC);
Numeric.QuestionId = QuestionId;
Numeric.Width = DataWidth;
Numeric.Prompt = StringToken;
//
// Add second string, get first string's token
//
Status = AddString (StringBuffer, CurrentLanguage, Help, &StringToken);
if (EFI_ERROR (Status)) {
return Status;
}
Numeric.Help = StringToken;
Numeric.Minimum = Minimum;
Numeric.Maximum = Maximum;
Numeric.Step = Step;
Numeric.Default = Default;
Numeric.Flags = (UINT8) (Flags | EFI_IFR_FLAG_CREATED);
Numeric.Key = Key;
Status = AddOpCode (FormBuffer, &Numeric);
if (EFI_ERROR (Status)) {
return Status;
}
return EFI_SUCCESS;
}
EFI_STATUS
CreateString (
IN UINT16 QuestionId,
IN UINT8 DataWidth,
IN CHAR16 *Prompt,
IN CHAR16 *Help,
IN UINT8 MinSize,
IN UINT8 MaxSize,
IN UINT8 Flags,
IN UINT16 Key,
IN OUT VOID *FormBuffer,
IN OUT VOID *StringBuffer
)
/*++
Routine Description:
Create a string
Arguments:
QuestionId - Question ID of the string
DataWidth - DataWidth of the string
Prompt - Prompt of the string
Help - Help of the string
MinSize - Min size boundary of the string
MaxSize - Max size boundary of the string
Flags - Flags of the string
Key - Key of the string
FormBuffer - The form where this string adds to
StringBuffer - String buffer created for Prompt and Help.
Returns:
EFI_SUCCESS - String successfully created.
--*/
{
EFI_STATUS Status;
EFI_IFR_STRING String;
CHAR16 CurrentLanguage[4];
STRING_REF StringToken;
//
// Obtain current language value
//
GetCurrentLanguage (CurrentLanguage);
//
// Add first string, get first string's token
//
Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);
if (EFI_ERROR (Status)) {
return Status;
}
String.Header.OpCode = EFI_IFR_STRING_OP;
String.Header.Length = sizeof (EFI_IFR_STRING);
String.QuestionId = QuestionId;
String.Width = DataWidth;
String.Prompt = StringToken;
//
// Add second string, get first string's token
//
Status = AddString (StringBuffer, CurrentLanguage, Help, &StringToken);
if (EFI_ERROR (Status)) {
return Status;
}
String.Help = StringToken;
String.MinSize = MinSize;
String.MaxSize = MaxSize;
String.Flags = (UINT8) (Flags | EFI_IFR_FLAG_CREATED);
String.Key = Key;
Status = AddOpCode (FormBuffer, &String);
if (EFI_ERROR (Status)) {
return Status;
}
return EFI_SUCCESS;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?