3 * Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 static PCSTR
CopyString(PCSTR Source
)
28 Dest
= MmHeapAlloc(strlen(Source
) + 1);
37 OperatingSystemItem
* InitOperatingSystemList(ULONG
* OperatingSystemCountPointer
)
40 CHAR SettingName
[260];
41 CHAR SettingValue
[260];
43 PCHAR TitleStart
, TitleEnd
;
46 OperatingSystemItem
* Items
;
49 // Open the [FreeLoader] section
51 if (!IniOpenSection("Operating Systems", &SectionId
))
57 // Count number of operating systems in the section
59 Count
= IniGetNumSectionItems(SectionId
);
62 // Allocate memory to hold operating system lists
64 Items
= MmHeapAlloc(Count
* sizeof(OperatingSystemItem
));
71 // Now loop through and read the operating system section and display names
73 for (Idx
= 0; Idx
< Count
; Idx
++)
75 IniReadSettingByNumber(SectionId
, Idx
, SettingName
, sizeof(SettingName
), SettingValue
, sizeof(SettingValue
));
78 // Search start and end of the title
81 TitleStart
= SettingValue
;
82 while (*TitleStart
== ' ' || *TitleStart
== '"')
84 TitleEnd
= TitleStart
;
85 if (*TitleEnd
!= ANSI_NULL
)
87 while (*TitleEnd
!= ANSI_NULL
&& *TitleEnd
!= '"')
89 if (*TitleEnd
!= ANSI_NULL
)
91 *TitleEnd
= ANSI_NULL
;
92 OsLoadOptions
= TitleEnd
+ 1;
96 // Copy the system partition, identifier and options
98 Items
[Idx
].SystemPartition
= CopyString(SettingName
);
99 Items
[Idx
].LoadIdentifier
= CopyString(TitleStart
);
100 Items
[Idx
].OsLoadOptions
= CopyString(OsLoadOptions
);
106 *OperatingSystemCountPointer
= Count
;