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
= TRUE
;
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
= FALSE
;
65 InsertTailList(&List
->ListHead
, &Item
->ListEntry
);
73 IN BOOLEAN ForceFormat
,
74 IN LPCWSTR ForceFileSystem
)
76 PFILE_SYSTEM_LIST List
;
77 PFILE_SYSTEM_ITEM Item
;
78 PLIST_ENTRY ListEntry
;
80 List
= (PFILE_SYSTEM_LIST
)RtlAllocateHeap(ProcessHeap
, 0, sizeof(FILE_SYSTEM_LIST
));
86 List
->Selected
= NULL
;
87 InitializeListHead(&List
->ListHead
);
89 HOST_CreateFileSystemList(List
);
93 /* Add 'Keep' provider */
94 FS_AddProvider(List
, NULL
, NULL
, NULL
);
97 /* Search for ForceFileSystem in list */
98 ListEntry
= List
->ListHead
.Flink
;
99 while (ListEntry
!= &List
->ListHead
)
101 Item
= CONTAINING_RECORD(ListEntry
, FILE_SYSTEM_ITEM
, ListEntry
);
102 if (Item
->FileSystem
&& wcscmp(ForceFileSystem
, Item
->FileSystem
) == 0)
104 List
->Selected
= Item
;
107 ListEntry
= ListEntry
->Flink
;
110 List
->Selected
= CONTAINING_RECORD(List
->ListHead
.Flink
, FILE_SYSTEM_ITEM
, ListEntry
);
117 DestroyFileSystemList(
118 IN PFILE_SYSTEM_LIST List
)
120 PLIST_ENTRY ListEntry
= List
->ListHead
.Flink
;
121 PFILE_SYSTEM_ITEM Item
;
124 while (ListEntry
!= &List
->ListHead
)
126 Item
= CONTAINING_RECORD(ListEntry
, FILE_SYSTEM_ITEM
, ListEntry
);
127 Next
= ListEntry
->Flink
;
129 RtlFreeHeap(ProcessHeap
, 0, Item
);
133 RtlFreeHeap(ProcessHeap
, 0, List
);
139 IN PFILE_SYSTEM_LIST List
)
141 PLIST_ENTRY ListEntry
;
142 PFILE_SYSTEM_ITEM Item
;
148 ListEntry
= List
->ListHead
.Flink
;
149 while (ListEntry
!= &List
->ListHead
)
151 Item
= CONTAINING_RECORD(ListEntry
, FILE_SYSTEM_ITEM
, ListEntry
);
153 coPos
.X
= List
->Left
;
154 coPos
.Y
= List
->Top
+ (SHORT
)Index
;
155 FillConsoleOutputAttribute(StdOutput
,
156 FOREGROUND_WHITE
| BACKGROUND_BLUE
,
160 FillConsoleOutputCharacterA(StdOutput
,
166 if (Item
->FileSystem
)
168 if (Item
->QuickFormat
)
169 sprintf(Buffer
, MUIGetString(STRING_FORMATDISK1
), Item
->FileSystem
);
171 sprintf(Buffer
, MUIGetString(STRING_FORMATDISK2
), Item
->FileSystem
);
174 sprintf(Buffer
, MUIGetString(STRING_KEEPFORMAT
));
176 if (ListEntry
== &List
->Selected
->ListEntry
)
177 CONSOLE_SetInvertedTextXY(List
->Left
,
178 List
->Top
+ (SHORT
)Index
,
181 CONSOLE_SetTextXY(List
->Left
,
182 List
->Top
+ (SHORT
)Index
,
185 ListEntry
= ListEntry
->Flink
;
191 ScrollDownFileSystemList(
192 IN PFILE_SYSTEM_LIST List
)
194 if (List
->Selected
->ListEntry
.Flink
!= &List
->ListHead
)
196 List
->Selected
= CONTAINING_RECORD(List
->Selected
->ListEntry
.Flink
, FILE_SYSTEM_ITEM
, ListEntry
);
197 DrawFileSystemList(List
);
203 ScrollUpFileSystemList(
204 IN PFILE_SYSTEM_LIST List
)
206 if (List
->Selected
->ListEntry
.Blink
!= &List
->ListHead
)
208 List
->Selected
= CONTAINING_RECORD(List
->Selected
->ListEntry
.Blink
, FILE_SYSTEM_ITEM
, ListEntry
);
209 DrawFileSystemList(List
);