3 * Copyright (C) 2003 ReactOS Team
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.
20 * COPYRIGHT: See COPYING in the top level directory
21 * PROJECT: ReactOS text-mode setup
22 * FILE: subsys/system/usetup/fslist.c
23 * PURPOSE: Filesystem list functions
24 * PROGRAMMER: Eric Kohl
25 * Casper S. Hornstrup (chorns@users.sourceforge.net)
33 /* FUNCTIONS ****************************************************************/
37 IN OUT PFILE_SYSTEM_LIST List
,
38 IN LPCWSTR FileSystem
,
39 IN FORMATEX FormatFunc
,
40 IN CHKDSKEX ChkdskFunc
)
42 PFILE_SYSTEM_ITEM Item
;
44 Item
= (PFILE_SYSTEM_ITEM
)RtlAllocateHeap(ProcessHeap
, 0, sizeof(FILE_SYSTEM_ITEM
));
48 Item
->FileSystem
= FileSystem
;
49 Item
->FormatFunc
= FormatFunc
;
50 Item
->ChkdskFunc
= ChkdskFunc
;
51 Item
->QuickFormat
= FALSE
;
52 InsertTailList(&List
->ListHead
, &Item
->ListEntry
);
57 Item
= (PFILE_SYSTEM_ITEM
)RtlAllocateHeap(ProcessHeap
, 0, sizeof(FILE_SYSTEM_ITEM
));
61 Item
->FileSystem
= FileSystem
;
62 Item
->FormatFunc
= FormatFunc
;
63 Item
->ChkdskFunc
= ChkdskFunc
;
64 Item
->QuickFormat
= TRUE
;
65 InsertTailList(&List
->ListHead
, &Item
->ListEntry
);
72 IN BOOLEAN ForceFormat
,
73 IN LPCWSTR ForceFileSystem
)
75 PFILE_SYSTEM_LIST List
;
76 PFILE_SYSTEM_ITEM Item
;
77 PLIST_ENTRY ListEntry
;
79 List
= (PFILE_SYSTEM_LIST
)RtlAllocateHeap(ProcessHeap
, 0, sizeof(FILE_SYSTEM_LIST
));
85 List
->Selected
= NULL
;
86 InitializeListHead(&List
->ListHead
);
88 HOST_CreateFileSystemList(List
);
92 /* Add 'Keep' provider */
93 FS_AddProvider(List
, NULL
, NULL
, NULL
);
96 /* Search for ForceFileSystem in list */
97 ListEntry
= List
->ListHead
.Flink
;
98 while (ListEntry
!= &List
->ListHead
)
100 Item
= CONTAINING_RECORD(ListEntry
, FILE_SYSTEM_ITEM
, ListEntry
);
101 if (Item
->FileSystem
&& wcscmp(ForceFileSystem
, Item
->FileSystem
) == 0)
103 List
->Selected
= Item
;
106 ListEntry
= ListEntry
->Flink
;
109 List
->Selected
= CONTAINING_RECORD(List
->ListHead
.Flink
, FILE_SYSTEM_ITEM
, ListEntry
);
115 DestroyFileSystemList(
116 IN PFILE_SYSTEM_LIST List
)
118 PLIST_ENTRY ListEntry
= List
->ListHead
.Flink
;
119 PFILE_SYSTEM_ITEM Item
;
122 while (ListEntry
!= &List
->ListHead
)
124 Item
= CONTAINING_RECORD(ListEntry
, FILE_SYSTEM_ITEM
, ListEntry
);
125 Next
= ListEntry
->Flink
;
127 RtlFreeHeap(ProcessHeap
, 0, Item
);
131 RtlFreeHeap(ProcessHeap
, 0, List
);
136 IN PFILE_SYSTEM_LIST List
)
138 PLIST_ENTRY ListEntry
;
139 PFILE_SYSTEM_ITEM Item
;
145 ListEntry
= List
->ListHead
.Flink
;
146 while (ListEntry
!= &List
->ListHead
)
148 Item
= CONTAINING_RECORD(ListEntry
, FILE_SYSTEM_ITEM
, ListEntry
);
150 coPos
.X
= List
->Left
;
151 coPos
.Y
= List
->Top
+ (SHORT
)Index
;
152 FillConsoleOutputAttribute(StdOutput
,
153 FOREGROUND_WHITE
| BACKGROUND_BLUE
,
157 FillConsoleOutputCharacterA(StdOutput
,
163 if (Item
->FileSystem
)
165 if (Item
->QuickFormat
)
166 sprintf(Buffer
, MUIGetString(STRING_FORMATDISK1
), Item
->FileSystem
);
168 sprintf(Buffer
, MUIGetString(STRING_FORMATDISK2
), Item
->FileSystem
);
171 sprintf(Buffer
, MUIGetString(STRING_KEEPFORMAT
));
173 if (ListEntry
== &List
->Selected
->ListEntry
)
174 CONSOLE_SetInvertedTextXY(List
->Left
,
175 List
->Top
+ (SHORT
)Index
,
178 CONSOLE_SetTextXY(List
->Left
,
179 List
->Top
+ (SHORT
)Index
,
182 ListEntry
= ListEntry
->Flink
;
187 ScrollDownFileSystemList(
188 IN PFILE_SYSTEM_LIST List
)
190 if (List
->Selected
->ListEntry
.Flink
!= &List
->ListHead
)
192 List
->Selected
= CONTAINING_RECORD(List
->Selected
->ListEntry
.Flink
, FILE_SYSTEM_ITEM
, ListEntry
);
193 DrawFileSystemList(List
);
198 ScrollUpFileSystemList(
199 IN PFILE_SYSTEM_LIST List
)
201 if (List
->Selected
->ListEntry
.Blink
!= &List
->ListHead
)
203 List
->Selected
= CONTAINING_RECORD(List
->Selected
->ListEntry
.Blink
, FILE_SYSTEM_ITEM
, ListEntry
);
204 DrawFileSystemList(List
);