Rewrote .ini file code - should be much faster (especially in bochs)

Leading whitespace in a line is now ignored
Changed .ini file comment character from '#' to ';' to be compatible with MS
There is still a mysterious memory allocation failed bug however!?

svn path=/trunk/; revision=2741
This commit is contained in:
Brian Palmer 2002-03-20 00:39:32 +00:00
parent 4eaf05b3e3
commit 25ca1a385c
16 changed files with 647 additions and 1053 deletions

View file

@ -1,71 +1,71 @@
# FreeLoader by Brian Palmer ; FreeLoader by Brian Palmer
# FREELDR.INI - FreeLoader Initialization file ; FREELDR.INI - FreeLoader Initialization file
# ;
# Each line must be less than 1024 characters long ; Each line must be less than 1024 characters long
# and must be either a section heading (i.e. [section_name]) ; and must be either a section heading (i.e. [section_name])
# or a setting (i.e. name=value) or a blank line. ; or a setting (i.e. name=value) or a blank line.
# Comments start with a '#' character. ; Comments start with a ';' character.
# Background colors can be any one of the following: ; Background colors can be any one of the following:
# Black ; Black
# Blue ; Blue
# Green ; Green
# Cyan ; Cyan
# Red ; Red
# Magenta ; Magenta
# Brown ; Brown
# Gray ; Gray
# Text colors can be any one of the background ; Text colors can be any one of the background
# colors and any of the following: ; colors and any of the following:
# DarkGray ; DarkGray
# LightBlue ; LightBlue
# LightGreen ; LightGreen
# LightCyan ; LightCyan
# LightRed ; LightRed
# LightMagenta ; LightMagenta
# Yellow ; Yellow
# White ; White
# [FREELOADER] Section Commands: ; [FREELOADER] Section Commands:
# ;
# MessageBox - displays the specified text in a message box upon bootup ; MessageBox - displays the specified text in a message box upon bootup
# MessageLine - adds a new line of text to a message box (must come before MessageBox command) ; MessageLine - adds a new line of text to a message box (must come before MessageBox command)
# TitleText - text that is displayed in the title box ; TitleText - text that is displayed in the title box
# StatusBarColor - color of status bar's background ; StatusBarColor - color of status bar's background
# StatusBarTextColor - color of status bar's text ; StatusBarTextColor - color of status bar's text
# BackdropTextColor - color of the backdrop's fill ; BackdropTextColor - color of the backdrop's fill
# BackdropColor - color of the backdrop's background ; BackdropColor - color of the backdrop's background
# BackdropFillStyle - backdrop fill style - can be Light, Medium, or Dark ; BackdropFillStyle - backdrop fill style - can be Light, Medium, or Dark
# TitleBoxTextColor - title box text color ; TitleBoxTextColor - title box text color
# TitleBoxColor - title box background color ; TitleBoxColor - title box background color
# MessageBoxTextColor - message box text color ; MessageBoxTextColor - message box text color
# MessageBoxColor - message box background color ; MessageBoxColor - message box background color
# MenuTextColor - menu text color ; MenuTextColor - menu text color
# MenuColor - menu color ; MenuColor - menu color
# TextColor - normal text color ; TextColor - normal text color
# SelectedTextColor - selected text color ; SelectedTextColor - selected text color
# SelectedColor - selected text background color ; SelectedColor - selected text background color
# TimeOut - sets the timeout (in seconds) before the first OS listed gets booted automagically ; TimeOut - sets the timeout (in seconds) before the first OS listed gets booted automagically
# [OS-General] Section Commands: ; [OS-General] Section Commands:
# ;
# BootType - sets the boot type: ReactOS, Linux, BootSector, Partition, Drive ; BootType - sets the boot type: ReactOS, Linux, BootSector, Partition, Drive
# BootDrive - sets the boot drive: 0 - first floppy, 1 - second floppy, 0x80 - first hard disk, 0x81 - second hard disk ; BootDrive - sets the boot drive: 0 - first floppy, 1 - second floppy, 0x80 - first hard disk, 0x81 - second hard disk
# BootPartition - sets the boot partition ; BootPartition - sets the boot partition
# [BootSector OSType] Section Commands: ; [BootSector OSType] Section Commands:
# ;
# BootSector - sets the filename of the bootsector to be loaded ; BootSector - sets the filename of the bootsector to be loaded
# [ReactOS OSType] Section Commands: ; [ReactOS OSType] Section Commands:
# ;
# SystemPath - sets the system root path (must be a valid ARC - Path): ; SystemPath - sets the system root path (must be a valid ARC - Path):
# multi(0)disk(0)rdisk(0)partition(1)\reactos ; multi(0)disk(0)rdisk(0)partition(1)\reactos
# multi(0)disk(0)fdisk(0) ; multi(0)disk(0)fdisk(0)
# Options - sets the command line options for the kernel being booted ; Options - sets the command line options for the kernel being booted
# Kernel - sets the kernel filename ; Kernel - sets the kernel filename
# Driver - sets the name of one or more drivers to be loaded (one entry per driver) ; Driver - sets the name of one or more drivers to be loaded (one entry per driver)
@ -76,8 +76,8 @@ MessageLine=
MessageBox=Edit your FREELDR.INI file to change your boot settings. MessageBox=Edit your FREELDR.INI file to change your boot settings.
OS=ReactOS (HD) OS=ReactOS (HD)
OS=ReactOS (Floppy) OS=ReactOS (Floppy)
#OS=ReactOS (Debug) ;OS=ReactOS (Debug)
#OS=Linux ;OS=Linux
OS=3« Floppy (A:) OS=3« Floppy (A:)
OS=Microsoft Windows (C:) OS=Microsoft Windows (C:)
OS=Drive D: OS=Drive D:
@ -101,8 +101,8 @@ TextColor=Yellow
SelectedTextColor=Black SelectedTextColor=Black
SelectedColor=Gray SelectedColor=Gray
# Load ReactOS from harddisk (drive C:) ; Load ReactOS from harddisk (drive C:)
# - does not work on large harddisks ; - does not work on large harddisks
[ReactOS (HD)] [ReactOS (HD)]
Name="ReactOS (HardDrive)" Name="ReactOS (HardDrive)"
BootType=ReactOS BootType=ReactOS
@ -113,7 +113,7 @@ Hal=\REACTOS\SYSTEM32\HAL.DLL
Driver=\REACTOS\SYSTEM32\DRIVERS\IDE.SYS Driver=\REACTOS\SYSTEM32\DRIVERS\IDE.SYS
Driver=\REACTOS\SYSTEM32\DRIVERS\VFATFS.SYS Driver=\REACTOS\SYSTEM32\DRIVERS\VFATFS.SYS
# Load ReactOS from floppy (drive A:) ; Load ReactOS from floppy (drive A:)
[ReactOS (Floppy)] [ReactOS (Floppy)]
Name="ReactOS (Floppy)" Name="ReactOS (Floppy)"
BootType=ReactOS BootType=ReactOS
@ -124,22 +124,22 @@ Hal=\reactos\HAL.DLL
Driver=\reactos\IDE.SYS Driver=\reactos\IDE.SYS
Driver=\reactos\VFATFS.SYS Driver=\reactos\VFATFS.SYS
#[ReactOS (Debug)] ;[ReactOS (Debug)]
#Name="ReactOS (Debug)" ;Name="ReactOS (Debug)"
#BootType=ReactOS ;BootType=ReactOS
#BootDrive=0 ;BootDrive=0
#Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=19200 ;Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=19200
#Kernel=\NTOSKRNL.EXE ;Kernel=\NTOSKRNL.EXE
#Hal=\HAL.DLL ;Hal=\HAL.DLL
#Driver=\DRIVERS\IDE.SYS ;Driver=\DRIVERS\IDE.SYS
#Driver=\DRIVERS\VFATFS.SYS ;Driver=\DRIVERS\VFATFS.SYS
#[Linux] ;[Linux]
#Name="Linux" ;Name="Linux"
# Linux boot type not implemented yet ; Linux boot type not implemented yet
#BootType=Partition ;BootType=Partition
#BootDrive=0x80 ;BootDrive=0x80
#BootPartition=2 ;BootPartition=2
[3« Floppy (A:)] [3« Floppy (A:)]
Name="3« Floppy (A:)" Name="3« Floppy (A:)"

View file

@ -24,10 +24,10 @@ include rules.mk
# reactos.o tui.o menu.o miscboot.o options.o linux.o multiboot.o arcname.o \ # reactos.o tui.o menu.o miscboot.o options.o linux.o multiboot.o arcname.o \
# mem.o memory.o debug.o parseini.o registry.o import.o # mem.o memory.o debug.o parseini.o registry.o import.o
#ASM_OBJS = asmcode.o mb.o boot.o mem.o #ASM_OBJS = asmcode.o mb.o boot.o mem.o
OBJS = freeldr.o miscboot.o options.o linux.o multiboot.o debug.o parseini.o oslist.o OBJS = freeldr.o miscboot.o options.o linux.o multiboot.o debug.o oslist.o
LIBS = arch rtl fs ui reactos comm disk mm cache LIBS = arch rtl fs ui reactos comm disk mm cache inifile
LIB_FILES = arch/arch.a rtl/rtl.a fs/fs.a ui/ui.a reactos/reactos.a LIB_FILES = arch/arch.a rtl/rtl.a fs/fs.a ui/ui.a reactos/reactos.a
LIB_FILES2 = comm/comm.a disk/disk.a mm/mm.a cache/cache.a LIB_FILES2 = comm/comm.a disk/disk.a mm/mm.a cache/cache.a inifile/inifile.a
.PHONY : clean .PHONY : clean
@ -67,9 +67,6 @@ multiboot.o: multiboot.c freeldr.h rtl.h fs.h multiboot.h ui.h
debug.o: debug.c debug.h debug.o: debug.c debug.h
$(CC) $(FLAGS) -o debug.o -c debug.c $(CC) $(FLAGS) -o debug.o -c debug.c
parseini.o: parseini.c parseini.h
$(CC) $(FLAGS) -o parseini.o -c parseini.c
oslist.o: oslist.c oslist.h oslist.o: oslist.c oslist.h
$(CC) $(FLAGS) -o oslist.o -c oslist.c $(CC) $(FLAGS) -o oslist.o -c oslist.c
@ -103,6 +100,9 @@ mm:
cache: cache:
$(MAKE) -C cache $(MAKE) -C cache
inifile:
$(MAKE) -C inifile
.PHONY : $(LIBS) .PHONY : $(LIBS)
clean: clean:
@ -118,3 +118,4 @@ clean:
$(MAKE) -C fs clean $(MAKE) -C fs clean
$(MAKE) -C rtl clean $(MAKE) -C rtl clean
$(MAKE) -C cache clean $(MAKE) -C cache clean
$(MAKE) -C inifile clean

View file

@ -26,7 +26,7 @@
#include "miscboot.h" #include "miscboot.h"
#include "linux.h" #include "linux.h"
#include "mm.h" #include "mm.h"
#include "parseini.h" #include "inifile.h"
#include "debug.h" #include "debug.h"
#include "oslist.h" #include "oslist.h"
#include "cache.h" #include "cache.h"
@ -58,14 +58,14 @@ VOID BootMain(VOID)
InitMemoryManager(); InitMemoryManager();
if (!ParseIniFile()) if (!IniFileInitialize())
{ {
printf("Press any key to reboot.\n"); printf("Press any key to reboot.\n");
getch(); getch();
return; return;
} }
if (!OpenSection("FreeLoader", &SectionId)) if (!IniOpenSection("FreeLoader", &SectionId))
{ {
printf("Section [FreeLoader] not found in freeldr.ini.\n"); printf("Section [FreeLoader] not found in freeldr.ini.\n");
getch(); getch();
@ -109,7 +109,7 @@ VOID BootMain(VOID)
} }
// Try to open the operating system section in the .ini file // Try to open the operating system section in the .ini file
if (!OpenSection(OperatingSystemSectionNames[SelectedOperatingSystem], &SectionId)) if (!IniOpenSection(OperatingSystemSectionNames[SelectedOperatingSystem], &SectionId))
{ {
sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemSectionNames[SelectedOperatingSystem]); sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemSectionNames[SelectedOperatingSystem]);
MessageBox(SettingName); MessageBox(SettingName);
@ -117,7 +117,7 @@ VOID BootMain(VOID)
} }
// Try to read the boot type // Try to read the boot type
if (!ReadSectionSettingByName(SectionId, "BootType", SettingValue, 80)) if (!IniReadSettingByName(SectionId, "BootType", SettingValue, 80))
{ {
sprintf(SettingName, "BootType= line not found in section [%s] in freeldr.ini.\n", OperatingSystemSectionNames[SelectedOperatingSystem]); sprintf(SettingName, "BootType= line not found in section [%s] in freeldr.ini.\n", OperatingSystemSectionNames[SelectedOperatingSystem]);
MessageBox(SettingName); MessageBox(SettingName);
@ -160,12 +160,12 @@ ULONG GetDefaultOperatingSystem(PUCHAR OperatingSystemList[], ULONG OperatingSys
ULONG DefaultOS = 0; ULONG DefaultOS = 0;
ULONG Idx; ULONG Idx;
if (!OpenSection("FreeLoader", &SectionId)) if (!IniOpenSection("FreeLoader", &SectionId))
{ {
return 0; return 0;
} }
if (ReadSectionSettingByName(SectionId, "DefaultOS", DefaultOSText, 80)) if (IniReadSettingByName(SectionId, "DefaultOS", DefaultOSText, 80))
{ {
for (Idx=0; Idx<OperatingSystemCount; Idx++) for (Idx=0; Idx<OperatingSystemCount; Idx++)
{ {
@ -186,12 +186,12 @@ LONG GetTimeOut(VOID)
ULONG TimeOut; ULONG TimeOut;
ULONG SectionId; ULONG SectionId;
if (!OpenSection("FreeLoader", &SectionId)) if (!IniOpenSection("FreeLoader", &SectionId))
{ {
return -1; return -1;
} }
if (ReadSectionSettingByName(SectionId, "TimeOut", TimeOutText, 20)) if (IniReadSettingByName(SectionId, "TimeOut", TimeOutText, 20))
{ {
TimeOut = atoi(TimeOutText); TimeOut = atoi(TimeOutText);
} }

31
freeldr/freeldr/inifile.h Normal file
View file

@ -0,0 +1,31 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __PARSEINI_H
#define __PARSEINI_H
BOOL IniFileInitialize(VOID);
BOOL IniOpenSection(PUCHAR SectionName, PULONG SectionId);
ULONG IniGetNumSectionItems(ULONG SectionId);
BOOL IniReadSettingByNumber(ULONG SectionId, ULONG SettingNumber, PUCHAR SettingName, ULONG NameSize, PUCHAR SettingValue, ULONG ValueSize);
BOOL IniReadSettingByName(ULONG SectionId, PUCHAR SettingName, PUCHAR Buffer, ULONG BufferSize);
#endif // defined __PARSEINI_H

View file

@ -52,4 +52,21 @@ typedef struct
} INI_SECTION, *PINI_SECTION; } INI_SECTION, *PINI_SECTION;
extern PINI_SECTION IniFileSectionListHead;
extern ULONG IniFileSectionListCount;
BOOL IniParseFile(PUCHAR IniFileData, ULONG IniFileSize);
ULONG IniGetNextLineSize(PUCHAR IniFileData, ULONG IniFileSize, ULONG CurrentOffset);
ULONG IniGetNextLine(PUCHAR IniFileData, ULONG IniFileSize, PUCHAR Buffer, ULONG BufferSize, ULONG CurrentOffset);
BOOL IniIsLineEmpty(PUCHAR LineOfText, ULONG TextLength);
BOOL IniIsCommentLine(PUCHAR LineOfText, ULONG TextLength);
BOOL IniIsSectionName(PUCHAR LineOfText, ULONG TextLength);
ULONG IniGetSectionNameSize(PUCHAR SectionNameLine, ULONG LineLength);
VOID IniExtractSectionName(PUCHAR SectionName, PUCHAR SectionNameLine, ULONG LineLength);
BOOL IniIsSetting(PUCHAR LineOfText, ULONG TextLength);
ULONG IniGetSettingNameSize(PUCHAR SettingNameLine, ULONG LineLength);
ULONG IniGetSettingValueSize(PUCHAR SettingValueLine, ULONG LineLength);
VOID IniExtractSettingName(PUCHAR SettingName, PUCHAR SettingNameLine, ULONG LineLength);
VOID IniExtractSettingValue(PUCHAR SettingValue, PUCHAR SettingValueLine, ULONG LineLength);
#endif // defined __INI_H #endif // defined __INI_H

View file

@ -17,417 +17,114 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include "freeldr.h" #include <freeldr.h>
#include "parseini.h" #include "ini.h"
#include "ui.h" #include <ui.h>
#include "fs.h" #include <rtl.h>
#include "rtl.h" #include <debug.h>
#include "mm.h"
#include "debug.h"
PUCHAR FreeLoaderIniFileData = NULL; BOOL IniOpenSection(PUCHAR SectionName, PULONG SectionId)
ULONG FreeLoaderIniFileSize = 0;
BOOL ParseIniFile(VOID)
{ {
//int i; PINI_SECTION Section;
//char name[1024];
//char value[1024];
PFILE Freeldr_Ini; // File handle for freeldr.ini
// Open the boot drive for file access DbgPrint((DPRINT_INIFILE, "IniOpenSection() SectionName = %s\n", SectionName));
if (!OpenDiskDrive(BootDrive, 0))
// Loop through each section and find the one they want
Section = (PINI_SECTION)RtlListGetHead((PLIST_ITEM)IniFileSectionListHead);
while (Section != NULL)
{ {
printf("Error opening boot drive for file access.\n"); // Compare against the section name
return FALSE; if (stricmp(SectionName, Section->SectionName) == 0)
}
// Try to open freeldr.ini or fail
Freeldr_Ini = OpenFile("freeldr.ini");
if (Freeldr_Ini == NULL)
{
printf("FREELDR.INI not found.\nYou need to re-install FreeLoader.\n");
return FALSE;
}
// Get the file size & allocate enough memory for it
FreeLoaderIniFileSize = GetFileSize(Freeldr_Ini);
FreeLoaderIniFileData = AllocateMemory(FreeLoaderIniFileSize);
// If we are out of memory then return FALSE
if (FreeLoaderIniFileData == NULL)
{
printf("Out of memory while loading FREELDR.INI.\n");
CloseFile(Freeldr_Ini);
return FALSE;
}
// Read freeldr.ini off the disk
ReadFile(Freeldr_Ini, FreeLoaderIniFileSize, NULL, FreeLoaderIniFileData);
CloseFile(Freeldr_Ini);
// Make sure the [FREELOADER] section exists
/*if (OpenSection("FREELOADER", NULL))
{
printf("Section [FREELOADER] not found in FREELDR.INI.\nYou need to re-install FreeLoader.\n");
return FALSE;
}
// Validate the settings in the [FREELOADER] section
for (i=1; i<=GetNumSectionItems("FREELOADER"); i++)
{
ReadSectionSettingByNumber("FREELOADER", i, name, value);
if (!IsValidSetting(name, value))
{ {
printf("Invalid setting in freeldr.ini.\nName: \"%s\", Value: \"%s\"\n", name, value); // We found it
printf("Press any key to continue.\n"); *SectionId = (ULONG)Section;
getch(); DbgPrint((DPRINT_INIFILE, "IniOpenSection() Found it! SectionId = 0x%x\n", SectionId));
} return TRUE;
else
SetSetting(name, value);
}*/
return TRUE;
}
ULONG GetNextLineOfFileData(PUCHAR Buffer, ULONG BufferSize, ULONG CurrentOffset)
{
ULONG Idx;
// Loop through grabbing chars until we hit the end of the
// file or we encounter a new line char
for (Idx=0; (CurrentOffset < FreeLoaderIniFileSize); CurrentOffset++)
{
// If we haven't exceeded our buffer size yet
// then store another char
if (Idx < (BufferSize - 1))
{
Buffer[Idx++] = FreeLoaderIniFileData[CurrentOffset];
} }
// Check for new line char // Get the next section in the list
if (FreeLoaderIniFileData[CurrentOffset] == '\n') Section = (PINI_SECTION)RtlListGetNext((PLIST_ITEM)Section);
{
CurrentOffset++;
break;
}
} }
// Terminate the string DbgPrint((DPRINT_INIFILE, "IniOpenSection() Section not found.\n"));
Buffer[Idx] = '\0';
// Get rid of newline & linefeed characters (if any)
if((Buffer[strlen(Buffer)-1] == '\n') || (Buffer[strlen(Buffer)-1] == '\r'))
Buffer[strlen(Buffer)-1] = '\0';
if((Buffer[strlen(Buffer)-1] == '\n') || (Buffer[strlen(Buffer)-1] == '\r'))
Buffer[strlen(Buffer)-1] = '\0';
// Send back new offset
return CurrentOffset;
}
BOOL OpenSection(PUCHAR SectionName, PULONG SectionId)
{
UCHAR TempString[80];
UCHAR RealSectionName[80];
ULONG FileOffset;
BOOL SectionFound = FALSE;
//
// Get the real section name
//
strcpy(RealSectionName, "[");
strcat(RealSectionName, SectionName);
strcat(RealSectionName, "]");
//
// Get to the beginning of the file
//
FileOffset = 0;
//
// Find the section
//
while (FileOffset < FreeLoaderIniFileSize)
{
//
// Read a line
//
FileOffset = GetNextLineOfFileData(TempString, 80, FileOffset);
//
// If it isn't a section header then continue on
//
if (TempString[0] != '[')
continue;
//
// Check and see if we found it
//
if (stricmp(TempString, RealSectionName) == 0)
{
SectionFound = TRUE;
break;
}
}
if (SectionId)
{
*SectionId = FileOffset;
}
return SectionFound;
}
ULONG GetNumSectionItems(ULONG SectionId)
{
UCHAR TempString[80];
ULONG SectionItemCount = 0;
// Now count how many settings are in this section
while (SectionId < FreeLoaderIniFileSize)
{
// Read a line
SectionId = GetNextLineOfFileData(TempString, 80, SectionId);
// If we hit a new section then we're done
if (TempString[0] == '[')
break;
// Skip comments
if (TempString[0] == '#')
continue;
// Skip blank lines
if (!strlen(TempString))
continue;
SectionItemCount++;
}
return SectionItemCount;
}
BOOL ReadSectionSettingByNumber(ULONG SectionId, ULONG SettingNumber, PUCHAR SettingName, ULONG NameSize, PUCHAR SettingValue, ULONG ValueSize)
{
UCHAR TempString[1024];
ULONG SectionItemCount = 0;
ULONG Idx;
ULONG FileOffset;
//
// Get to the beginning of the section
//
FileOffset = SectionId;
//
// Now find the setting we are looking for
//
do
{
// Read a line
FileOffset = GetNextLineOfFileData(TempString, 1024, FileOffset);
// Skip comments
if (TempString[0] == '#')
continue;
// Skip blank lines
if (!strlen(TempString))
continue;
// If we hit a new section then we're done
if (TempString[0] == '[')
break;
// Check and see if we found the setting
if (SectionItemCount == SettingNumber)
{
for (Idx=0; Idx<strlen(TempString); Idx++)
{
// Check and see if this character is the separator
if (TempString[Idx] == '=')
{
SettingName[Idx] = '\0';
strncpy(SettingValue, TempString + Idx + 1, ValueSize);
return TRUE;
}
else if (Idx < NameSize)
{
SettingName[Idx] = TempString[Idx];
}
}
}
// Increment setting number
SectionItemCount++;
}
while (FileOffset < FreeLoaderIniFileSize);
return FALSE; return FALSE;
} }
BOOL ReadSectionSettingByName(ULONG SectionId, PUCHAR SettingName, PUCHAR Buffer, ULONG BufferSize) ULONG IniGetNumSectionItems(ULONG SectionId)
{ {
UCHAR TempString[1024]; PINI_SECTION Section = (PINI_SECTION)SectionId;
UCHAR TempBuffer[80];
ULONG Idx;
ULONG FileOffset;
// DbgPrint((DPRINT_INIFILE, "IniGetNumSectionItems() SectionId = 0x%x\n", SectionId));
// Get to the beginning of the section DbgPrint((DPRINT_INIFILE, "IniGetNumSectionItems() Item count = %d\n", Section->SectionItemCount));
//
FileOffset = SectionId;
// return Section->SectionItemCount;
// Now find the setting we are looking for }
//
while (FileOffset < FreeLoaderIniFileSize) BOOL IniReadSettingByNumber(ULONG SectionId, ULONG SettingNumber, PUCHAR SettingName, ULONG NameSize, PUCHAR SettingValue, ULONG ValueSize)
{
PINI_SECTION Section = (PINI_SECTION)SectionId;
PINI_SECTION_ITEM SectionItem;
ULONG RealSettingNumber = SettingNumber;
DbgPrint((DPRINT_INIFILE, "IniReadSettingByNumber() SectionId = 0x%x\n", SectionId));
// Loop through each section item and find the one they want
SectionItem = (PINI_SECTION_ITEM)RtlListGetHead((PLIST_ITEM)Section->SectionItemList);
while (SectionItem != NULL)
{ {
// Read a line // Check to see if this is the setting they want
FileOffset = GetNextLineOfFileData(TempString, 1024, FileOffset); if (SettingNumber == 0)
// Skip comments
if (TempString[0] == '#')
continue;
// Skip blank lines
if (!strlen(TempString))
continue;
// If we hit a new section then we're done
if (TempString[0] == '[')
break;
// Extract the setting name
for (Idx=0; Idx<strlen(TempString); Idx++)
{ {
if (TempString[Idx] != '=') DbgPrint((DPRINT_INIFILE, "IniReadSettingByNumber() Setting number %d found.\n", RealSettingNumber));
TempBuffer[Idx] = TempString[Idx]; DbgPrint((DPRINT_INIFILE, "IniReadSettingByNumber() Setting name = %s\n", SectionItem->ItemName));
else DbgPrint((DPRINT_INIFILE, "IniReadSettingByNumber() Setting value = %s\n", SectionItem->ItemValue));
{
TempBuffer[Idx] = '\0'; strncpy(SettingName, SectionItem->ItemName, NameSize);
break; strncpy(SettingValue, SectionItem->ItemValue, ValueSize);
}
return TRUE;
} }
// Check and see if we found the setting // Nope, keep going
if (stricmp(TempBuffer, SettingName) == 0) SettingNumber--;
{
for (Idx=0; Idx<strlen(TempString); Idx++)
{
// Check and see if this character is the separator
if (TempString[Idx] == '=')
{
strcpy(Buffer, TempString + Idx + 1);
return TRUE; // Get the next section item in the list
} SectionItem = (PINI_SECTION_ITEM)RtlListGetNext((PLIST_ITEM)SectionItem);
}
}
} }
DbgPrint((DPRINT_INIFILE, "IniReadSettingByNumber() Setting number %d not found.\n", RealSettingNumber));
return FALSE; return FALSE;
} }
BOOL IsValidSetting(char *setting, char *value) BOOL IniReadSettingByName(ULONG SectionId, PUCHAR SettingName, PUCHAR Buffer, ULONG BufferSize)
{ {
if(stricmp(setting, "MessageBox") == 0) PINI_SECTION Section = (PINI_SECTION)SectionId;
return TRUE; PINI_SECTION_ITEM SectionItem;
else if(stricmp(setting, "MessageLine") == 0)
return TRUE; DbgPrint((DPRINT_INIFILE, "IniReadSettingByName() SectionId = 0x%x\n", SectionId));
else if(stricmp(setting, "TitleText") == 0)
return TRUE; // Loop through each section item and find the one they want
else if(stricmp(setting, "StatusBarColor") == 0) SectionItem = (PINI_SECTION_ITEM)RtlListGetHead((PLIST_ITEM)Section->SectionItemList);
while (SectionItem != NULL)
{ {
if(IsValidColor(value)) // Check to see if this is the setting they want
if (stricmp(SettingName, SectionItem->ItemName) == 0)
{
DbgPrint((DPRINT_INIFILE, "IniReadSettingByName() Setting \'%s\' found.\n", SettingName));
DbgPrint((DPRINT_INIFILE, "IniReadSettingByName() Setting value = %s\n", SectionItem->ItemValue));
strncpy(Buffer, SectionItem->ItemValue, BufferSize);
return TRUE; return TRUE;
}
// Get the next section item in the list
SectionItem = (PINI_SECTION_ITEM)RtlListGetNext((PLIST_ITEM)SectionItem);
} }
else if(stricmp(setting, "StatusBarTextColor") == 0)
{ DbgPrint((DPRINT_INIFILE, "IniReadSettingByName() Setting \'%s\' not found.\n", SettingName));
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "BackdropTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "BackdropColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "BackdropFillStyle") == 0)
{
if(IsValidFillStyle(value))
return TRUE;
}
else if(stricmp(setting, "TitleBoxTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "TitleBoxColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "MessageBoxTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "MessageBoxColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "MenuTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "MenuColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "TextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "SelectedTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "SelectedColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "OS") == 0)
return TRUE;
else if(stricmp(setting, "TimeOut") == 0)
return TRUE;
/*else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;*/
return FALSE; return FALSE;
} }

View file

@ -1,41 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __PARSEINI_H
#define __PARSEINI_H
/*BOOL ParseIniFile(void);
ULONG GetNextLineOfFileData(PUCHAR Buffer, ULONG BufferSize, ULONG CurrentOffset); // Gets the next line of text (up to BufferSize) after CurrentOffset and returns the offset of the next line
ULONG GetOffsetOfFirstLineOfSection(PUCHAR SectionName); // Returns the offset of the first line in the section or zero if the section wasn't found
ULONG GetNumSectionItems(PUCHAR SectionName); // returns the number of items in a particular section (i.e. [FREELOADER])
BOOL ReadSectionSettingByNumber(PUCHAR SectionName, ULONG SettingNumber, PUCHAR SettingName, PUCHAR SettingValue); // Reads the num'th value from section
BOOL ReadSectionSettingByName(PUCHAR SectionName, PUCHAR SettingName, PUCHAR SettingValue); // Reads the value named name from section
BOOL IsValidSetting(char *setting, char *value);
void SetSetting(char *setting, char *value);*/
BOOL ParseIniFile(VOID);
ULONG GetNextLineOfFileData(PUCHAR Buffer, ULONG BufferSize, ULONG CurrentOffset);
BOOL OpenSection(PUCHAR SectionName, PULONG SectionId);
ULONG GetNumSectionItems(ULONG SectionId);
BOOL ReadSectionSettingByNumber(ULONG SectionId, ULONG SettingNumber, PUCHAR SettingName, ULONG NameSize, PUCHAR SettingValue, ULONG ValueSize);
BOOL ReadSectionSettingByName(ULONG SectionId, PUCHAR SettingName, PUCHAR Buffer, ULONG BufferSize);
BOOL IsValidSetting(char *setting, char *value);
#endif // defined __PARSEINI_H

View file

@ -19,18 +19,18 @@
#include <freeldr.h> #include <freeldr.h>
#include "ini.h" #include "ini.h"
#include <ui.h>
#include <fs.h> #include <fs.h>
#include <rtl.h> #include <rtl.h>
#include <mm.h> #include <mm.h>
#include <debug.h> #include <debug.h>
BOOL InitializeIniFile(VOID) BOOL IniFileInitialize(VOID)
{ {
PFILE Freeldr_Ini; // File handle for freeldr.ini PFILE Freeldr_Ini; // File handle for freeldr.ini
PUCHAR FreeLoaderIniFileData; PUCHAR FreeLoaderIniFileData;
ULONG FreeLoaderIniFileSize; ULONG FreeLoaderIniFileSize;
BOOL Success;
// Open the boot drive for file access // Open the boot drive for file access
if (!OpenDiskDrive(BootDrive, 0)) if (!OpenDiskDrive(BootDrive, 0))
@ -68,7 +68,11 @@ BOOL InitializeIniFile(VOID)
} }
CloseFile(Freeldr_Ini); CloseFile(Freeldr_Ini);
// Parse the .ini file data
Success = IniParseFile(FreeLoaderIniFileData, FreeLoaderIniFileSize);
FreeMemory(FreeLoaderIniFileData); FreeMemory(FreeLoaderIniFileData);
return TRUE; return Success;
} }

View file

@ -19,15 +19,170 @@
#include <freeldr.h> #include <freeldr.h>
#include "ini.h" #include "ini.h"
#include <ui.h>
#include <fs.h>
#include <rtl.h> #include <rtl.h>
#include <mm.h> #include <mm.h>
#include <debug.h> #include <debug.h>
VOID IniParseFile(PUCHAR IniFileData, ULONG IniFileSize) PINI_SECTION IniFileSectionListHead = NULL;
ULONG IniFileSectionCount = 0;
ULONG IniFileSettingCount = 0;
BOOL IniParseFile(PUCHAR IniFileData, ULONG IniFileSize)
{ {
ULONG CurrentOffset;
ULONG CurrentLineNumber;
PUCHAR IniFileLine;
ULONG IniFileLineSize;
ULONG LineLength;
PINI_SECTION CurrentSection = NULL;
PINI_SECTION_ITEM CurrentItem = NULL;
DbgPrint((DPRINT_INIFILE, "IniParseFile() IniFileSize: %d\n", IniFileSize));
// Start with an 80-byte buffer
IniFileLineSize = 80;
IniFileLine = AllocateMemory(IniFileLineSize);
if (!IniFileLine)
{
return FALSE;
}
// Loop through each line and parse it
CurrentLineNumber = 0;
CurrentOffset = 0;
while (CurrentOffset < IniFileSize)
{
// First check the line size and increase our buffer if necessary
if (IniFileLineSize < IniGetNextLineSize(IniFileData, IniFileSize, CurrentOffset))
{
IniFileLineSize = IniGetNextLineSize(IniFileData, IniFileSize, CurrentOffset);
FreeMemory(IniFileLine);
IniFileLine = AllocateMemory(IniFileLineSize);
if (!IniFileLine)
{
return FALSE;
}
}
// Get the line of data
CurrentOffset = IniGetNextLine(IniFileData, IniFileSize, IniFileLine, IniFileLineSize, CurrentOffset);
LineLength = strlen(IniFileLine);
// If it is a blank line or a comment then skip it
if (IniIsLineEmpty(IniFileLine, LineLength) || IniIsCommentLine(IniFileLine, LineLength))
{
CurrentLineNumber++;
continue;
}
// Check if it is a new section
if (IniIsSectionName(IniFileLine, LineLength))
{
// Allocate a new section structure
CurrentSection = AllocateMemory(sizeof(INI_SECTION));
if (!CurrentSection)
{
FreeMemory(IniFileLine);
return FALSE;
}
RtlZeroMemory(CurrentSection, sizeof(INI_SECTION));
// Allocate the section name buffer
CurrentSection->SectionName = AllocateMemory(IniGetSectionNameSize(IniFileLine, LineLength));
if (!CurrentSection->SectionName)
{
FreeMemory(CurrentSection);
FreeMemory(IniFileLine);
return FALSE;
}
// Get the section name
IniExtractSectionName(CurrentSection->SectionName, IniFileLine, LineLength);
// Add it to the section list head
IniFileSectionCount++;
if (IniFileSectionListHead == NULL)
{
IniFileSectionListHead = CurrentSection;
}
else
{
RtlListInsertTail((PLIST_ITEM)IniFileSectionListHead, (PLIST_ITEM)CurrentSection);
}
CurrentLineNumber++;
continue;
}
// Check if it is a setting
if (IniIsSetting(IniFileLine, LineLength))
{
// First check to make sure we're inside a [section]
if (CurrentSection == NULL)
{
printf("Error: freeldr.ini:%d: Setting \'%s\' found outside of a [section].\n", CurrentLineNumber, IniFileLine);
CurrentLineNumber++;
continue;
}
// Allocate a new item structure
CurrentItem = AllocateMemory(sizeof(INI_SECTION_ITEM));
if (!CurrentItem)
{
FreeMemory(IniFileLine);
return FALSE;
}
RtlZeroMemory(CurrentItem, sizeof(INI_SECTION_ITEM));
// Allocate the setting name buffer
CurrentItem->ItemName = AllocateMemory(IniGetSettingNameSize(IniFileLine, LineLength));
if (!CurrentItem->ItemName)
{
FreeMemory(CurrentItem);
FreeMemory(IniFileLine);
return FALSE;
}
// Allocate the setting value buffer
CurrentItem->ItemValue = AllocateMemory(IniGetSettingValueSize(IniFileLine, LineLength));
if (!CurrentItem->ItemValue)
{
FreeMemory(CurrentItem);
FreeMemory(IniFileLine);
return FALSE;
}
// Get the section name
IniExtractSettingName(CurrentItem->ItemName, IniFileLine, LineLength);
IniExtractSettingValue(CurrentItem->ItemValue, IniFileLine, LineLength);
// Add it to the current section
IniFileSettingCount++;
CurrentSection->SectionItemCount++;
if (CurrentSection->SectionItemList == NULL)
{
CurrentSection->SectionItemList = CurrentItem;
}
else
{
RtlListInsertTail((PLIST_ITEM)CurrentSection->SectionItemList, (PLIST_ITEM)CurrentItem);
}
CurrentLineNumber++;
continue;
}
CurrentLineNumber++;
}
DbgPrint((DPRINT_INIFILE, "Parsed %d sections and %d settings.\n", IniFileSectionCount, IniFileSettingCount));
DbgPrint((DPRINT_INIFILE, "IniParseFile() done.\n"));
return TRUE;
} }
ULONG IniGetNextLineSize(PUCHAR IniFileData, ULONG IniFileSize, ULONG CurrentOffset) ULONG IniGetNextLineSize(PUCHAR IniFileData, ULONG IniFileSize, ULONG CurrentOffset)
@ -35,7 +190,7 @@ ULONG IniGetNextLineSize(PUCHAR IniFileData, ULONG IniFileSize, ULONG CurrentOff
ULONG Idx; ULONG Idx;
ULONG LineCharCount = 0; ULONG LineCharCount = 0;
// Loop through grabbing chars until we hit the end of the // Loop through counting chars until we hit the end of the
// file or we encounter a new line char // file or we encounter a new line char
for (Idx=0; (CurrentOffset < IniFileSize); CurrentOffset++) for (Idx=0; (CurrentOffset < IniFileSize); CurrentOffset++)
{ {
@ -50,6 +205,9 @@ ULONG IniGetNextLineSize(PUCHAR IniFileData, ULONG IniFileSize, ULONG CurrentOff
} }
} }
// Add one for the NULL-terminator
LineCharCount++;
// Send back line character count // Send back line character count
return LineCharCount; return LineCharCount;
} }
@ -94,8 +252,7 @@ BOOL IniIsLineEmpty(PUCHAR LineOfText, ULONG TextLength)
{ {
ULONG Idx; ULONG Idx;
// Check the first character (skipping whitespace) // Check for text (skipping whitespace)
// and make sure that it is an opening bracket
for (Idx=0; Idx<TextLength; Idx++) for (Idx=0; Idx<TextLength; Idx++)
{ {
if ((LineOfText[Idx] == ' ') || if ((LineOfText[Idx] == ' ') ||
@ -188,7 +345,7 @@ ULONG IniGetSectionNameSize(PUCHAR SectionNameLine, ULONG LineLength)
// Skip past the opening bracket // Skip past the opening bracket
Idx++; Idx++;
// Count the characters up until the closing bracket of EOL // Count the characters up until the closing bracket or EOL
for (NameSize=0; Idx<LineLength; Idx++) for (NameSize=0; Idx<LineLength; Idx++)
{ {
if ((SectionNameLine[Idx] == ']') || if ((SectionNameLine[Idx] == ']') ||
@ -201,6 +358,9 @@ ULONG IniGetSectionNameSize(PUCHAR SectionNameLine, ULONG LineLength)
NameSize++; NameSize++;
} }
// Add one for the NULL-terminator
NameSize++;
return NameSize; return NameSize;
} }
@ -226,7 +386,7 @@ VOID IniExtractSectionName(PUCHAR SectionName, PUCHAR SectionNameLine, ULONG Lin
// Skip past the opening bracket // Skip past the opening bracket
Idx++; Idx++;
// Count the characters up until the closing bracket of EOL // Count the characters up until the closing bracket or EOL
for (DestIdx=0; Idx<LineLength; Idx++) for (DestIdx=0; Idx<LineLength; Idx++)
{ {
if ((SectionNameLine[Idx] == ']') || if ((SectionNameLine[Idx] == ']') ||
@ -240,4 +400,203 @@ VOID IniExtractSectionName(PUCHAR SectionName, PUCHAR SectionNameLine, ULONG Lin
DestIdx++; DestIdx++;
} }
// Terminate the string
SectionName[DestIdx] = '\0';
}
BOOL IniIsSetting(PUCHAR LineOfText, ULONG TextLength)
{
ULONG Idx;
// Basically just check for an '=' equals sign
for (Idx=0; Idx<TextLength; Idx++)
{
if (LineOfText[Idx] == '=')
{
return TRUE;
}
}
return FALSE;
}
ULONG IniGetSettingNameSize(PUCHAR SettingNameLine, ULONG LineLength)
{
ULONG Idx;
ULONG NameSize;
// Skip whitespace
for (Idx=0; Idx<LineLength; Idx++)
{
if ((SettingNameLine[Idx] == ' ') ||
(SettingNameLine[Idx] == '\t'))
{
continue;
}
else
{
break;
}
}
// Count the characters up until the '=' equals sign or EOL
for (NameSize=0; Idx<LineLength; Idx++)
{
if ((SettingNameLine[Idx] == '=') ||
(SettingNameLine[Idx] == '\0'))
{
break;
}
// Increment the count
NameSize++;
}
// Add one for the NULL-terminator
NameSize++;
return NameSize;
}
ULONG IniGetSettingValueSize(PUCHAR SettingValueLine, ULONG LineLength)
{
ULONG Idx;
ULONG ValueSize;
// Skip whitespace
for (Idx=0; Idx<LineLength; Idx++)
{
if ((SettingValueLine[Idx] == ' ') ||
(SettingValueLine[Idx] == '\t'))
{
continue;
}
else
{
break;
}
}
// Skip the characters up until the '=' equals sign or EOL
for (; Idx<LineLength; Idx++)
{
if (SettingValueLine[Idx] == '=')
{
Idx++;
break;
}
// If we hit EOL then obviously the value size is zero
if (SettingValueLine[Idx] == '\0')
{
return 0;
}
}
// Count the characters up until the EOL
for (ValueSize=0; Idx<LineLength; Idx++)
{
if (SettingValueLine[Idx] == '\0')
{
break;
}
// Increment the count
ValueSize++;
}
// Add one for the NULL-terminator
ValueSize++;
return ValueSize;
}
VOID IniExtractSettingName(PUCHAR SettingName, PUCHAR SettingNameLine, ULONG LineLength)
{
ULONG Idx;
ULONG DestIdx;
// Skip whitespace
for (Idx=0; Idx<LineLength; Idx++)
{
if ((SettingNameLine[Idx] == ' ') ||
(SettingNameLine[Idx] == '\t'))
{
continue;
}
else
{
break;
}
}
// Get the characters up until the '=' equals sign or EOL
for (DestIdx=0; Idx<LineLength; Idx++)
{
if ((SettingNameLine[Idx] == '=') ||
(SettingNameLine[Idx] == '\0'))
{
break;
}
// Grab a character and increment DestIdx
SettingName[DestIdx] = SettingNameLine[Idx];
DestIdx++;
}
// Terminate the string
SettingName[DestIdx] = '\0';
}
VOID IniExtractSettingValue(PUCHAR SettingValue, PUCHAR SettingValueLine, ULONG LineLength)
{
ULONG Idx;
ULONG DestIdx;
// Skip whitespace
for (Idx=0; Idx<LineLength; Idx++)
{
if ((SettingValueLine[Idx] == ' ') ||
(SettingValueLine[Idx] == '\t'))
{
continue;
}
else
{
break;
}
}
// Skip the characters up until the '=' equals sign or EOL
for (; Idx<LineLength; Idx++)
{
if (SettingValueLine[Idx] == '=')
{
Idx++;
break;
}
// If we hit EOL then obviously the value size is zero
if (SettingValueLine[Idx] == '\0')
{
SettingValue[0] = '\0';
return;
}
}
// Get the characters up until the EOL
for (DestIdx=0; Idx<LineLength; Idx++)
{
if (SettingValueLine[Idx] == '\0')
{
break;
}
// Grab a character and increment DestIdx
SettingValue[DestIdx] = SettingValueLine[Idx];
DestIdx++;
}
// Terminate the string
SettingValue[DestIdx] = '\0';
} }

View file

@ -24,7 +24,7 @@
#include "rtl.h" #include "rtl.h"
#include "fs.h" #include "fs.h"
#include "ui.h" #include "ui.h"
#include "parseini.h" #include "inifile.h"
#include "disk.h" #include "disk.h"
VOID LoadAndBootBootSector(PUCHAR OperatingSystemName) VOID LoadAndBootBootSector(PUCHAR OperatingSystemName)
@ -40,14 +40,14 @@ VOID LoadAndBootBootSector(PUCHAR OperatingSystemName)
ShowMessageBoxesInSection(OperatingSystemName); ShowMessageBoxesInSection(OperatingSystemName);
// Try to open the operating system section in the .ini file // Try to open the operating system section in the .ini file
if (!OpenSection(OperatingSystemName, &SectionId)) if (!IniOpenSection(OperatingSystemName, &SectionId))
{ {
sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName); sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName);
MessageBox(SettingName); MessageBox(SettingName);
return; return;
} }
if (!ReadSectionSettingByName(SectionId, "BootDrive", SettingValue, 80)) if (!IniReadSettingByName(SectionId, "BootDrive", SettingValue, 80))
{ {
MessageBox("Boot drive not specified for selected OS!"); MessageBox("Boot drive not specified for selected OS!");
return; return;
@ -56,12 +56,12 @@ VOID LoadAndBootBootSector(PUCHAR OperatingSystemName)
BootDrive = atoi(SettingValue); BootDrive = atoi(SettingValue);
BootPartition = 0; BootPartition = 0;
if (ReadSectionSettingByName(SectionId, "BootPartition", SettingValue, 80)) if (IniReadSettingByName(SectionId, "BootPartition", SettingValue, 80))
{ {
BootPartition = atoi(SettingValue); BootPartition = atoi(SettingValue);
} }
if (!ReadSectionSettingByName(SectionId, "BootSectorFile", FileName, 260)) if (!IniReadSettingByName(SectionId, "BootSectorFile", FileName, 260))
{ {
MessageBox("Boot sector file not specified for selected OS!"); MessageBox("Boot sector file not specified for selected OS!");
return; return;
@ -112,7 +112,7 @@ VOID LoadAndBootPartition(PUCHAR OperatingSystemName)
ShowMessageBoxesInSection(OperatingSystemName); ShowMessageBoxesInSection(OperatingSystemName);
// Try to open the operating system section in the .ini file // Try to open the operating system section in the .ini file
if (!OpenSection(OperatingSystemName, &SectionId)) if (!IniOpenSection(OperatingSystemName, &SectionId))
{ {
sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName); sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName);
MessageBox(SettingName); MessageBox(SettingName);
@ -120,7 +120,7 @@ VOID LoadAndBootPartition(PUCHAR OperatingSystemName)
} }
// Read the boot drive // Read the boot drive
if (!ReadSectionSettingByName(SectionId, "BootDrive", SettingValue, 80)) if (!IniReadSettingByName(SectionId, "BootDrive", SettingValue, 80))
{ {
MessageBox("Boot drive not specified for selected OS!"); MessageBox("Boot drive not specified for selected OS!");
return; return;
@ -129,7 +129,7 @@ VOID LoadAndBootPartition(PUCHAR OperatingSystemName)
BootDrive = atoi(SettingValue); BootDrive = atoi(SettingValue);
// Read the boot partition // Read the boot partition
if (!ReadSectionSettingByName(SectionId, "BootPartition", SettingValue, 80)) if (!IniReadSettingByName(SectionId, "BootPartition", SettingValue, 80))
{ {
MessageBox("Boot partition not specified for selected OS!"); MessageBox("Boot partition not specified for selected OS!");
return; return;
@ -173,14 +173,14 @@ VOID LoadAndBootDrive(PUCHAR OperatingSystemName)
ShowMessageBoxesInSection(OperatingSystemName); ShowMessageBoxesInSection(OperatingSystemName);
// Try to open the operating system section in the .ini file // Try to open the operating system section in the .ini file
if (!OpenSection(OperatingSystemName, &SectionId)) if (!IniOpenSection(OperatingSystemName, &SectionId))
{ {
sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName); sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName);
MessageBox(SettingName); MessageBox(SettingName);
return; return;
} }
if (!ReadSectionSettingByName(SectionId, "BootDrive", SettingValue, 80)) if (!IniReadSettingByName(SectionId, "BootDrive", SettingValue, 80))
{ {
MessageBox("Boot drive not specified for selected OS!"); MessageBox("Boot drive not specified for selected OS!");
return; return;

View file

@ -24,7 +24,7 @@
#include "fs.h" #include "fs.h"
#include "multiboot.h" #include "multiboot.h"
#include "ui.h" #include "ui.h"
#include "parseini.h" #include "inifile.h"
unsigned long next_module_load_base = 0; unsigned long next_module_load_base = 0;
module_t* pOpenModule = NULL; module_t* pOpenModule = NULL;
@ -200,9 +200,9 @@ int GetBootPartition(char *OperatingSystemName)
char value[1024]; char value[1024];
ULONG SectionId; ULONG SectionId;
if (OpenSection(OperatingSystemName, &SectionId)) if (IniOpenSection(OperatingSystemName, &SectionId))
{ {
if (ReadSectionSettingByName(SectionId, "BootPartition", value, 1024)) if (IniReadSettingByName(SectionId, "BootPartition", value, 1024))
{ {
BootPartitionNumber = atoi(value); BootPartitionNumber = atoi(value);
} }

View file

@ -18,7 +18,7 @@
*/ */
#include "freeldr.h" #include "freeldr.h"
#include "parseini.h" #include "inifile.h"
#include "oslist.h" #include "oslist.h"
#include "rtl.h" #include "rtl.h"
#include "mm.h" #include "mm.h"
@ -40,13 +40,13 @@ BOOL InitOperatingSystemList(PUCHAR **SectionNamesPointer, PUCHAR **DisplayNames
// //
// Open the [FreeLoader] section // Open the [FreeLoader] section
// //
if (!OpenSection("FreeLoader", &SectionId)) if (!IniOpenSection("FreeLoader", &SectionId))
{ {
MessageBox("Section [FreeLoader] not found in freeldr.ini."); MessageBox("Section [FreeLoader] not found in freeldr.ini.");
return FALSE; return FALSE;
} }
SectionSettingCount = GetNumSectionItems(SectionId); SectionSettingCount = IniGetNumSectionItems(SectionId);
OperatingSystemCount = CountOperatingSystems(SectionId); OperatingSystemCount = CountOperatingSystems(SectionId);
// //
@ -63,7 +63,7 @@ BOOL InitOperatingSystemList(PUCHAR **SectionNamesPointer, PUCHAR **DisplayNames
CurrentOperatingSystemIndex = 0; CurrentOperatingSystemIndex = 0;
for (Idx=0; Idx<SectionSettingCount; Idx++) for (Idx=0; Idx<SectionSettingCount; Idx++)
{ {
ReadSectionSettingByNumber(SectionId, Idx, SettingName, 80, SettingValue, 80); IniReadSettingByNumber(SectionId, Idx, SettingName, 80, SettingValue, 80);
if (stricmp(SettingName, "OS") == 0) if (stricmp(SettingName, "OS") == 0)
{ {
@ -78,9 +78,9 @@ BOOL InitOperatingSystemList(PUCHAR **SectionNamesPointer, PUCHAR **DisplayNames
// //
for (Idx=0; Idx<OperatingSystemCount; Idx++) for (Idx=0; Idx<OperatingSystemCount; Idx++)
{ {
if (OpenSection(OperatingSystemSectionNames[Idx], &OperatingSystemSectionId)) if (IniOpenSection(OperatingSystemSectionNames[Idx], &OperatingSystemSectionId))
{ {
if (ReadSectionSettingByName(OperatingSystemSectionId, "Name", SettingValue, 80)) if (IniReadSettingByName(OperatingSystemSectionId, "Name", SettingValue, 80))
{ {
// //
// Remove any quotes around the string // Remove any quotes around the string
@ -115,14 +115,14 @@ ULONG CountOperatingSystems(ULONG SectionId)
// //
// Loop through and count the operating systems // Loop through and count the operating systems
// //
SectionSettingCount = GetNumSectionItems(SectionId); SectionSettingCount = IniGetNumSectionItems(SectionId);
for (Idx=0; Idx<SectionSettingCount; Idx++) for (Idx=0; Idx<SectionSettingCount; Idx++)
{ {
ReadSectionSettingByNumber(SectionId, Idx, SettingName, 80, SettingValue, 80); IniReadSettingByNumber(SectionId, Idx, SettingName, 80, SettingValue, 80);
if (stricmp(SettingName, "OS") == 0) if (stricmp(SettingName, "OS") == 0)
{ {
if (OpenSection(SettingValue, NULL)) if (IniOpenSection(SettingValue, NULL))
{ {
OperatingSystemCount++; OperatingSystemCount++;
} }

View file

@ -1,433 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "freeldr.h"
#include "parseini.h"
#include "ui.h"
#include "fs.h"
#include "rtl.h"
#include "mm.h"
#include "debug.h"
PUCHAR FreeLoaderIniFileData = NULL;
ULONG FreeLoaderIniFileSize = 0;
BOOL ParseIniFile(VOID)
{
//int i;
//char name[1024];
//char value[1024];
PFILE Freeldr_Ini; // File handle for freeldr.ini
// Open the boot drive for file access
if (!OpenDiskDrive(BootDrive, 0))
{
printf("Error opening boot drive for file access.\n");
return FALSE;
}
// Try to open freeldr.ini or fail
Freeldr_Ini = OpenFile("freeldr.ini");
if (Freeldr_Ini == NULL)
{
printf("FREELDR.INI not found.\nYou need to re-install FreeLoader.\n");
return FALSE;
}
// Get the file size & allocate enough memory for it
FreeLoaderIniFileSize = GetFileSize(Freeldr_Ini);
FreeLoaderIniFileData = AllocateMemory(FreeLoaderIniFileSize);
// If we are out of memory then return FALSE
if (FreeLoaderIniFileData == NULL)
{
printf("Out of memory while loading FREELDR.INI.\n");
CloseFile(Freeldr_Ini);
return FALSE;
}
// Read freeldr.ini off the disk
ReadFile(Freeldr_Ini, FreeLoaderIniFileSize, NULL, FreeLoaderIniFileData);
CloseFile(Freeldr_Ini);
// Make sure the [FREELOADER] section exists
/*if (OpenSection("FREELOADER", NULL))
{
printf("Section [FREELOADER] not found in FREELDR.INI.\nYou need to re-install FreeLoader.\n");
return FALSE;
}
// Validate the settings in the [FREELOADER] section
for (i=1; i<=GetNumSectionItems("FREELOADER"); i++)
{
ReadSectionSettingByNumber("FREELOADER", i, name, value);
if (!IsValidSetting(name, value))
{
printf("Invalid setting in freeldr.ini.\nName: \"%s\", Value: \"%s\"\n", name, value);
printf("Press any key to continue.\n");
getch();
}
else
SetSetting(name, value);
}*/
return TRUE;
}
ULONG GetNextLineOfFileData(PUCHAR Buffer, ULONG BufferSize, ULONG CurrentOffset)
{
ULONG Idx;
// Loop through grabbing chars until we hit the end of the
// file or we encounter a new line char
for (Idx=0; (CurrentOffset < FreeLoaderIniFileSize); CurrentOffset++)
{
// If we haven't exceeded our buffer size yet
// then store another char
if (Idx < (BufferSize - 1))
{
Buffer[Idx++] = FreeLoaderIniFileData[CurrentOffset];
}
// Check for new line char
if (FreeLoaderIniFileData[CurrentOffset] == '\n')
{
CurrentOffset++;
break;
}
}
// Terminate the string
Buffer[Idx] = '\0';
// Get rid of newline & linefeed characters (if any)
if((Buffer[strlen(Buffer)-1] == '\n') || (Buffer[strlen(Buffer)-1] == '\r'))
Buffer[strlen(Buffer)-1] = '\0';
if((Buffer[strlen(Buffer)-1] == '\n') || (Buffer[strlen(Buffer)-1] == '\r'))
Buffer[strlen(Buffer)-1] = '\0';
// Send back new offset
return CurrentOffset;
}
BOOL OpenSection(PUCHAR SectionName, PULONG SectionId)
{
UCHAR TempString[80];
UCHAR RealSectionName[80];
ULONG FileOffset;
BOOL SectionFound = FALSE;
//
// Get the real section name
//
strcpy(RealSectionName, "[");
strcat(RealSectionName, SectionName);
strcat(RealSectionName, "]");
//
// Get to the beginning of the file
//
FileOffset = 0;
//
// Find the section
//
while (FileOffset < FreeLoaderIniFileSize)
{
//
// Read a line
//
FileOffset = GetNextLineOfFileData(TempString, 80, FileOffset);
//
// If it isn't a section header then continue on
//
if (TempString[0] != '[')
continue;
//
// Check and see if we found it
//
if (stricmp(TempString, RealSectionName) == 0)
{
SectionFound = TRUE;
break;
}
}
if (SectionId)
{
*SectionId = FileOffset;
}
return SectionFound;
}
ULONG GetNumSectionItems(ULONG SectionId)
{
UCHAR TempString[80];
ULONG SectionItemCount = 0;
// Now count how many settings are in this section
while (SectionId < FreeLoaderIniFileSize)
{
// Read a line
SectionId = GetNextLineOfFileData(TempString, 80, SectionId);
// If we hit a new section then we're done
if (TempString[0] == '[')
break;
// Skip comments
if (TempString[0] == '#')
continue;
// Skip blank lines
if (!strlen(TempString))
continue;
SectionItemCount++;
}
return SectionItemCount;
}
BOOL ReadSectionSettingByNumber(ULONG SectionId, ULONG SettingNumber, PUCHAR SettingName, ULONG NameSize, PUCHAR SettingValue, ULONG ValueSize)
{
UCHAR TempString[1024];
ULONG SectionItemCount = 0;
ULONG Idx;
ULONG FileOffset;
//
// Get to the beginning of the section
//
FileOffset = SectionId;
//
// Now find the setting we are looking for
//
do
{
// Read a line
FileOffset = GetNextLineOfFileData(TempString, 1024, FileOffset);
// Skip comments
if (TempString[0] == '#')
continue;
// Skip blank lines
if (!strlen(TempString))
continue;
// If we hit a new section then we're done
if (TempString[0] == '[')
break;
// Check and see if we found the setting
if (SectionItemCount == SettingNumber)
{
for (Idx=0; Idx<strlen(TempString); Idx++)
{
// Check and see if this character is the separator
if (TempString[Idx] == '=')
{
SettingName[Idx] = '\0';
strncpy(SettingValue, TempString + Idx + 1, ValueSize);
return TRUE;
}
else if (Idx < NameSize)
{
SettingName[Idx] = TempString[Idx];
}
}
}
// Increment setting number
SectionItemCount++;
}
while (FileOffset < FreeLoaderIniFileSize);
return FALSE;
}
BOOL ReadSectionSettingByName(ULONG SectionId, PUCHAR SettingName, PUCHAR Buffer, ULONG BufferSize)
{
UCHAR TempString[1024];
UCHAR TempBuffer[80];
ULONG Idx;
ULONG FileOffset;
//
// Get to the beginning of the section
//
FileOffset = SectionId;
//
// Now find the setting we are looking for
//
while (FileOffset < FreeLoaderIniFileSize)
{
// Read a line
FileOffset = GetNextLineOfFileData(TempString, 1024, FileOffset);
// Skip comments
if (TempString[0] == '#')
continue;
// Skip blank lines
if (!strlen(TempString))
continue;
// If we hit a new section then we're done
if (TempString[0] == '[')
break;
// Extract the setting name
for (Idx=0; Idx<strlen(TempString); Idx++)
{
if (TempString[Idx] != '=')
TempBuffer[Idx] = TempString[Idx];
else
{
TempBuffer[Idx] = '\0';
break;
}
}
// Check and see if we found the setting
if (stricmp(TempBuffer, SettingName) == 0)
{
for (Idx=0; Idx<strlen(TempString); Idx++)
{
// Check and see if this character is the separator
if (TempString[Idx] == '=')
{
strcpy(Buffer, TempString + Idx + 1);
return TRUE;
}
}
}
}
return FALSE;
}
BOOL IsValidSetting(char *setting, char *value)
{
if(stricmp(setting, "MessageBox") == 0)
return TRUE;
else if(stricmp(setting, "MessageLine") == 0)
return TRUE;
else if(stricmp(setting, "TitleText") == 0)
return TRUE;
else if(stricmp(setting, "StatusBarColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "StatusBarTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "BackdropTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "BackdropColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "BackdropFillStyle") == 0)
{
if(IsValidFillStyle(value))
return TRUE;
}
else if(stricmp(setting, "TitleBoxTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "TitleBoxColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "MessageBoxTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "MessageBoxColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "MenuTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "MenuColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "TextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "SelectedTextColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "SelectedColor") == 0)
{
if(IsValidColor(value))
return TRUE;
}
else if(stricmp(setting, "OS") == 0)
return TRUE;
else if(stricmp(setting, "TimeOut") == 0)
return TRUE;
/*else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;
else if(stricmp(setting, "") == 0)
return TRUE;*/
return FALSE;
}

View file

@ -1,41 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __PARSEINI_H
#define __PARSEINI_H
/*BOOL ParseIniFile(void);
ULONG GetNextLineOfFileData(PUCHAR Buffer, ULONG BufferSize, ULONG CurrentOffset); // Gets the next line of text (up to BufferSize) after CurrentOffset and returns the offset of the next line
ULONG GetOffsetOfFirstLineOfSection(PUCHAR SectionName); // Returns the offset of the first line in the section or zero if the section wasn't found
ULONG GetNumSectionItems(PUCHAR SectionName); // returns the number of items in a particular section (i.e. [FREELOADER])
BOOL ReadSectionSettingByNumber(PUCHAR SectionName, ULONG SettingNumber, PUCHAR SettingName, PUCHAR SettingValue); // Reads the num'th value from section
BOOL ReadSectionSettingByName(PUCHAR SectionName, PUCHAR SettingName, PUCHAR SettingValue); // Reads the value named name from section
BOOL IsValidSetting(char *setting, char *value);
void SetSetting(char *setting, char *value);*/
BOOL ParseIniFile(VOID);
ULONG GetNextLineOfFileData(PUCHAR Buffer, ULONG BufferSize, ULONG CurrentOffset);
BOOL OpenSection(PUCHAR SectionName, PULONG SectionId);
ULONG GetNumSectionItems(ULONG SectionId);
BOOL ReadSectionSettingByNumber(ULONG SectionId, ULONG SettingNumber, PUCHAR SettingName, ULONG NameSize, PUCHAR SettingValue, ULONG ValueSize);
BOOL ReadSectionSettingByName(ULONG SectionId, PUCHAR SettingName, PUCHAR Buffer, ULONG BufferSize);
BOOL IsValidSetting(char *setting, char *value);
#endif // defined __PARSEINI_H

View file

@ -26,7 +26,7 @@
#include <ui.h> #include <ui.h>
#include <multiboot.h> #include <multiboot.h>
#include <mm.h> #include <mm.h>
#include <parseini.h> #include <inifile.h>
#include "registry.h" #include "registry.h"
#include "hwdetect.h" #include "hwdetect.h"
@ -384,7 +384,7 @@ void LoadAndBootReactOS(PUCHAR OperatingSystemName)
// Open the operating system section // Open the operating system section
// specified in the .ini file // specified in the .ini file
// //
if (!OpenSection(OperatingSystemName, &SectionId)) if (!IniOpenSection(OperatingSystemName, &SectionId))
{ {
sprintf(MsgBuffer,"Operating System section '%s' not found in freeldr.ini", OperatingSystemName); sprintf(MsgBuffer,"Operating System section '%s' not found in freeldr.ini", OperatingSystemName);
MessageBox(MsgBuffer); MessageBox(MsgBuffer);
@ -421,7 +421,7 @@ void LoadAndBootReactOS(PUCHAR OperatingSystemName)
/* /*
* Make sure the system path is set in the .ini file * Make sure the system path is set in the .ini file
*/ */
if (!ReadSectionSettingByName(SectionId, "SystemPath", value, 1024)) if (!IniReadSettingByName(SectionId, "SystemPath", value, 1024))
{ {
MessageBox("System path not specified for selected operating system."); MessageBox("System path not specified for selected operating system.");
return; return;
@ -447,7 +447,7 @@ void LoadAndBootReactOS(PUCHAR OperatingSystemName)
/* /*
* Read the optional kernel parameters (if any) * Read the optional kernel parameters (if any)
*/ */
if (ReadSectionSettingByName(SectionId, "Options", value, 1024)) if (IniReadSettingByName(SectionId, "Options", value, 1024))
{ {
strcat(multiboot_kernel_cmdline, " "); strcat(multiboot_kernel_cmdline, " ");
strcat(multiboot_kernel_cmdline, value); strcat(multiboot_kernel_cmdline, value);
@ -481,7 +481,7 @@ void LoadAndBootReactOS(PUCHAR OperatingSystemName)
* Find the kernel image name * Find the kernel image name
* and try to load the kernel off the disk * and try to load the kernel off the disk
*/ */
if(ReadSectionSettingByName(SectionId, "Kernel", value, 1024)) if(IniReadSettingByName(SectionId, "Kernel", value, 1024))
{ {
/* /*
* Set the name and * Set the name and
@ -512,7 +512,7 @@ void LoadAndBootReactOS(PUCHAR OperatingSystemName)
* Find the HAL image name * Find the HAL image name
* and try to load the kernel off the disk * and try to load the kernel off the disk
*/ */
if(ReadSectionSettingByName(SectionId, "Hal", value, 1024)) if(IniReadSettingByName(SectionId, "Hal", value, 1024))
{ {
/* /*
* Set the name and * Set the name and
@ -543,7 +543,7 @@ void LoadAndBootReactOS(PUCHAR OperatingSystemName)
* Find the System hive image name * Find the System hive image name
* and try to load it off the disk * and try to load it off the disk
*/ */
if(ReadSectionSettingByName(SectionId, "SystemHive", value, 1024)) if(IniReadSettingByName(SectionId, "SystemHive", value, 1024))
{ {
/* /*
* Set the name and * Set the name and

View file

@ -22,7 +22,7 @@
#include <ui.h> #include <ui.h>
#include <mm.h> #include <mm.h>
#include <debug.h> #include <debug.h>
#include <parseini.h> #include <inifile.h>
ULONG nScreenWidth = 80; // Screen Width ULONG nScreenWidth = 80; // Screen Width
ULONG nScreenHeight = 25; // Screen Height ULONG nScreenHeight = 25; // Screen Height
@ -64,65 +64,65 @@ BOOL InitUserInterface(VOID)
DbgPrint((DPRINT_UI, "Reading in UI settings from [Display] section.\n")); DbgPrint((DPRINT_UI, "Reading in UI settings from [Display] section.\n"));
if (OpenSection("Display", &SectionId)) if (IniOpenSection("Display", &SectionId))
{ {
if (ReadSectionSettingByName(SectionId, "TitleText", SettingText, 260)) if (IniReadSettingByName(SectionId, "TitleText", SettingText, 260))
{ {
strcpy(szTitleBoxTitleText, SettingText); strcpy(szTitleBoxTitleText, SettingText);
} }
if (ReadSectionSettingByName(SectionId, "StatusBarColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "StatusBarColor", SettingText, 260))
{ {
cStatusBarBgColor = TextToColor(SettingText); cStatusBarBgColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "StatusBarTextColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "StatusBarTextColor", SettingText, 260))
{ {
cStatusBarFgColor = TextToColor(SettingText); cStatusBarFgColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "BackdropTextColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "BackdropTextColor", SettingText, 260))
{ {
cBackdropFgColor = TextToColor(SettingText); cBackdropFgColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "BackdropColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "BackdropColor", SettingText, 260))
{ {
cBackdropBgColor = TextToColor(SettingText); cBackdropBgColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "BackdropFillStyle", SettingText, 260)) if (IniReadSettingByName(SectionId, "BackdropFillStyle", SettingText, 260))
{ {
cBackdropFillStyle = TextToFillStyle(SettingText); cBackdropFillStyle = TextToFillStyle(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "TitleBoxTextColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "TitleBoxTextColor", SettingText, 260))
{ {
cTitleBoxFgColor = TextToColor(SettingText); cTitleBoxFgColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "TitleBoxColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "TitleBoxColor", SettingText, 260))
{ {
cTitleBoxBgColor = TextToColor(SettingText); cTitleBoxBgColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "MessageBoxTextColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "MessageBoxTextColor", SettingText, 260))
{ {
cMessageBoxFgColor = TextToColor(SettingText); cMessageBoxFgColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "MessageBoxColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "MessageBoxColor", SettingText, 260))
{ {
cMessageBoxBgColor = TextToColor(SettingText); cMessageBoxBgColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "MenuTextColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "MenuTextColor", SettingText, 260))
{ {
cMenuFgColor = TextToColor(SettingText); cMenuFgColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "MenuColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "MenuColor", SettingText, 260))
{ {
cMenuBgColor = TextToColor(SettingText); cMenuBgColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "TextColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "TextColor", SettingText, 260))
{ {
cTextColor = TextToColor(SettingText); cTextColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "SelectedTextColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "SelectedTextColor", SettingText, 260))
{ {
cSelectedTextColor = TextToColor(SettingText); cSelectedTextColor = TextToColor(SettingText);
} }
if (ReadSectionSettingByName(SectionId, "SelectedColor", SettingText, 260)) if (IniReadSettingByName(SectionId, "SelectedColor", SettingText, 260))
{ {
cSelectedTextBgColor = TextToColor(SettingText); cSelectedTextBgColor = TextToColor(SettingText);
} }
@ -724,7 +724,7 @@ void ShowMessageBoxesInSection(PUCHAR SectionName)
UCHAR SettingValue[80]; UCHAR SettingValue[80];
ULONG SectionId; ULONG SectionId;
if (!OpenSection(SectionName, &SectionId)) if (!IniOpenSection(SectionName, &SectionId))
{ {
sprintf(SettingName, "Section %s not found in freeldr.ini.\n", SectionName); sprintf(SettingName, "Section %s not found in freeldr.ini.\n", SectionName);
MessageBox(SettingName); MessageBox(SettingName);
@ -734,9 +734,9 @@ void ShowMessageBoxesInSection(PUCHAR SectionName)
// //
// Find all the message box settings and run them // Find all the message box settings and run them
// //
for (Idx=0; Idx<GetNumSectionItems(SectionId); Idx++) for (Idx=0; Idx<IniGetNumSectionItems(SectionId); Idx++)
{ {
ReadSectionSettingByNumber(SectionId, Idx, SettingName, 80, SettingValue, 80); IniReadSettingByNumber(SectionId, Idx, SettingName, 80, SettingValue, 80);
if (stricmp(SettingName, "MessageBox") == 0) if (stricmp(SettingName, "MessageBox") == 0)
{ {