} // if
} // static VOID HandleString()
-// Handle a parameter with a series of string arguments, to be added to a comma-delimited
-// list. Passes each token through the CleanUpPathNameSlashes() function to ensure
-// consistency in subsequent comparisons of filenames.
+// Handle a parameter with a series of string arguments, to replace or be added to a
+// comma-delimited list. Passes each token through the CleanUpPathNameSlashes() function
+// to ensure consistency in subsequent comparisons of filenames. If the first
+// non-keyword token is "+", the list is added to the existing target string; otherwise,
+// the tokens replace the current string.
static VOID HandleStrings(IN CHAR16 **TokenList, IN UINTN TokenCount, OUT CHAR16 **Target) {
UINTN i;
+ BOOLEAN AddMode = FALSE;
- if (*Target != NULL) {
+ if ((TokenCount > 2) && (StriCmp(TokenList[1], L"+") == 0)) {
+ AddMode = TRUE;
+ }
+
+ if ((*Target != NULL) && !AddMode) {
FreePool(*Target);
*Target = NULL;
} // if
for (i = 1; i < TokenCount; i++) {
- CleanUpPathNameSlashes(TokenList[i]);
- MergeStrings(Target, TokenList[i], L',');
- }
+ if ((i != 1) || !AddMode) {
+ CleanUpPathNameSlashes(TokenList[i]);
+ MergeStrings(Target, TokenList[i], L',');
+ } // if
+ } // for
} // static VOID HandleStrings()
// Convert TimeString (in "HH:MM" format) to a pure-minute format. Values should be
// in the range from 0 (for 00:00, or midnight) to 1439 (for 23:59; aka LAST_MINUTE).
-// Any value outside that range denotes an error in the specification.
-// static UINTN HandleTime(IN CHAR16 *TimeString) {
-// BOOLEAN Found = FALSE;
-// UINTN ColonPosition = 0, Hour = 0, Minute = 0, TimeLength;
-//
-// Print(L"Entering HandleTime('%s')\n", TimeString);
-// TimeLength = StrLen(TimeString);
-// for (ColonPosition = 0; (ColonPosition < TimeLength) && !Found; ColonPosition++) {
-// Print(L"ColonPosition = %d\n", ColonPosition);
-// if (TimeString[ColonPosition] == ':')
-// Found = TRUE;
-// } // for
-//
-// if ((ColonPosition == 0) || (ColonPosition > StrLen(TimeString)))
-// return (LAST_MINUTE + 1);
-//
-// Hour = Atoi(TimeString);
-// Minute = Atoi(&TimeString[ColonPosition + 1]);
-// Print(L"Hour = %d, Minute = %d\n", Hour, Minute);
-// return (Hour * 60 + Minute);
-// } // BOOLEAN HandleTime()
-
+// Any value outside that range denotes an error in the specification. Note that if
+// the input is a number that includes no colon, this function will return the original
+// number in UINTN form.
static UINTN HandleTime(IN CHAR16 *TimeString) {
UINTN Hour = 0, Minute = 0, TimeLength, i = 0;
- BOOLEAN FoundColon = FALSE;
TimeLength = StrLen(TimeString);
while (i < TimeLength) {
if (TimeString[i] == L':') {
- FoundColon = TRUE;
Hour = Minute;
Minute = 0;
} // if
} // if
i++;
} // while
- return (FoundColon ? Hour * 60 + Minute : LAST_MINUTE + 1);
+ return (Hour * 60 + Minute);
} // BOOLEAN HandleTime()
// Sets the default boot loader IF the current time is within the bounds
UINTN TokenCount, i;
// Set a few defaults only if we're loading the default file.
- if (StriCmp(FileName, CONFIG_FILE_NAME) == 0) {
+ if (StriCmp(FileName, GlobalConfig.ConfigFilename) == 0) {
MyFreePool(GlobalConfig.AlsoScan);
GlobalConfig.AlsoScan = StrDuplicate(ALSO_SCAN_DIRS);
MyFreePool(GlobalConfig.DontScanDirs);
MergeStrings(&(GlobalConfig.DontScanFiles), MOK_NAMES, L',');
MyFreePool(GlobalConfig.DontScanVolumes);
GlobalConfig.DontScanVolumes = StrDuplicate(DONT_SCAN_VOLUMES);
+ GlobalConfig.WindowsRecoveryFiles = StrDuplicate(WINDOWS_RECOVERY_FILES);
} // if
if (!FileExists(SelfDir, FileName)) {
} else if ((StriCmp(TokenList[0], L"don't_scan_files") == 0) || (StriCmp(TokenList[0], L"dont_scan_files") == 0)) {
HandleStrings(TokenList, TokenCount, &(GlobalConfig.DontScanFiles));
+ } else if (StriCmp(TokenList[0], L"windows_recovery_files") == 0) {
+ HandleStrings(TokenList, TokenCount, &(GlobalConfig.WindowsRecoveryFiles));
+
} else if (StriCmp(TokenList[0], L"scan_driver_dirs") == 0) {
HandleStrings(TokenList, TokenCount, &(GlobalConfig.DriverDirs));
GlobalConfig.ShowTools[i - 1] = TAG_SHUTDOWN;
} else if (StriCmp(FlagName, L"apple_recovery") == 0) {
GlobalConfig.ShowTools[i - 1] = TAG_APPLE_RECOVERY;
+ } else if (StriCmp(FlagName, L"windows_recovery") == 0) {
+ GlobalConfig.ShowTools[i - 1] = TAG_WINDOWS_RECOVERY;
} else if (StriCmp(FlagName, L"mok_tool") == 0) {
GlobalConfig.ShowTools[i - 1] = TAG_MOK_TOOL;
} else if (StriCmp(FlagName, L"firmware") == 0) {
} else if (StriCmp(TokenList[0], L"banner") == 0) {
HandleString(TokenList, TokenCount, &(GlobalConfig.BannerFileName));
+ } else if ((StriCmp(TokenList[0], L"banner_scale") == 0) && (TokenCount == 2)) {
+ if (StriCmp(TokenList[1], L"noscale") == 0) {
+ GlobalConfig.BannerScale = BANNER_NOSCALE;
+ } else if ((StriCmp(TokenList[1], L"fillscreen") == 0) || (StriCmp(TokenList[1], L"fullscreen") == 0)) {
+ GlobalConfig.BannerScale = BANNER_FILLSCREEN;
+ } else {
+ Print(L" unknown banner_type flag: '%s'\n", TokenList[1]);
+ } // if/else
+
+ } else if ((StriCmp(TokenList[0], L"small_icon_size") == 0) && (TokenCount == 2)) {
+ HandleInt(TokenList, TokenCount, &i);
+ if (i >= 32)
+ GlobalConfig.IconSizes[ICON_SIZE_SMALL] = i;
+
+ } else if ((StriCmp(TokenList[0], L"big_icon_size") == 0) && (TokenCount == 2)) {
+ HandleInt(TokenList, TokenCount, &i);
+ if (i >= 32) {
+ GlobalConfig.IconSizes[ICON_SIZE_BIG] = i;
+ GlobalConfig.IconSizes[ICON_SIZE_BADGE] = i / 4;
+ }
+
} else if (StriCmp(TokenList[0], L"selection_small") == 0) {
HandleString(TokenList, TokenCount, &(GlobalConfig.SelectionSmallFileName));
HandleInt(TokenList, TokenCount, &(GlobalConfig.ScreensaverTime));
} else if (StriCmp(TokenList[0], L"use_graphics_for") == 0) {
- GlobalConfig.GraphicsFor = 0;
+ if ((TokenCount == 2) || ((TokenCount > 2) && (StriCmp(TokenList[1], L"+") != 0)))
+ GlobalConfig.GraphicsFor = 0;
for (i = 1; i < TokenCount; i++) {
if (StriCmp(TokenList[i], L"osx") == 0) {
GlobalConfig.GraphicsFor |= GRAPHICS_FOR_OSX;
} else if (StriCmp(TokenList[0], L"max_tags") == 0) {
HandleInt(TokenList, TokenCount, &(GlobalConfig.MaxTags));
- } else if ((StriCmp(TokenList[0], L"include") == 0) && (TokenCount == 2) && (StriCmp(FileName, CONFIG_FILE_NAME) == 0)) {
+ } else if ((StriCmp(TokenList[0], L"include") == 0) && (TokenCount == 2) &&
+ (StriCmp(FileName, GlobalConfig.ConfigFilename) == 0)) {
if (StriCmp(TokenList[1], FileName) != 0) {
ReadConfig(TokenList[1]);
}
FreeTokenLine(&TokenList, &TokenCount);
}
+ if ((GlobalConfig.DontScanFiles) && (GlobalConfig.WindowsRecoveryFiles))
+ MergeStrings(&(GlobalConfig.DontScanFiles), GlobalConfig.WindowsRecoveryFiles, L',');
MyFreePool(File.Buffer);
} /* VOID ReadConfig() */
} else if ((StriCmp(TokenList[0], L"icon") == 0) && (TokenCount > 1)) {
MyFreePool(Entry->me.Image);
- Entry->me.Image = egLoadIcon(CurrentVolume->RootDir, TokenList[1], 128);
+ Entry->me.Image = egLoadIcon(CurrentVolume->RootDir, TokenList[1], GlobalConfig.IconSizes[ICON_SIZE_BIG]);
if (Entry->me.Image == NULL) {
- Entry->me.Image = DummyImage(128);
+ Entry->me.Image = DummyImage(GlobalConfig.IconSizes[ICON_SIZE_BIG]);
}
} else if ((StriCmp(TokenList[0], L"initrd") == 0) && (TokenCount > 1)) {
} // if/else
MyFreePool(Title);
- } else if ((StriCmp(TokenList[0], L"include") == 0) && (TokenCount == 2) && (StriCmp(FileName, CONFIG_FILE_NAME) == 0)) {
+ } else if ((StriCmp(TokenList[0], L"include") == 0) && (TokenCount == 2) &&
+ (StriCmp(FileName, GlobalConfig.ConfigFilename) == 0)) {
if (StriCmp(TokenList[1], FileName) != 0) {
ScanUserConfigured(TokenList[1]);
}