Merged Martin Fuchs' file manager (with the help of Steven Edwards).

diff --git a/programs/winefile/.cvsignore b/programs/winefile/.cvsignore
new file mode 100644
index 0000000..18700ba
--- /dev/null
+++ b/programs/winefile/.cvsignore
@@ -0,0 +1,4 @@
+Makefile
+rsrc.res
+winefile.exe.dbg.c
+winefile.exe.spec.c
diff --git a/programs/winefile/De.rc b/programs/winefile/De.rc
new file mode 100644
index 0000000..2338bde
--- /dev/null
+++ b/programs/winefile/De.rc
@@ -0,0 +1,162 @@
+/*
+ * Winefile
+ * German Language Support
+ *
+ * Copyright 2000 Martin Fuchs
+ * Copyright 2002 Steven Edwards
+ * Copyright 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
+#pragma code_page(1252)
+
+
+/* Menu */
+
+IDM_WINEFILE MENU FIXED IMPURE
+{
+	POPUP "&Datei"  {
+		MENUITEM "Ö&ffnen\tEingabetaste" ,			101
+		MENUITEM "&Verschieben...\tF7" , 			106
+		MENUITEM "&Kopieren...\tF8" ,			107
+		MENUITEM "&In Zwischenablage...\tF9" ,		118
+		MENUITEM "&Löschen\tEntf" ,			108
+		MENUITEM "&Umbenennen..." ,			109
+		MENUITEM "&Eigenschaften...\tAlt+Eingabetaste" , ID_EDIT_PROPERTIES
+		MENUITEM SEPARATOR
+		MENUITEM "K&omprimieren..." ,		119
+		MENUITEM "Deko&mprimieren..." ,		120
+		MENUITEM SEPARATOR
+		MENUITEM "&Ausführen..." ,			ID_EXECUTE
+		MENUITEM "&Drucken..." , 			102
+		MENUITEM "Zuord&nen..." ,		103
+		MENUITEM SEPARATOR
+		MENUITEM "Ver&zeichnis erstellen..." ,			111
+		MENUITEM "&Suchen..." ,			104
+		MENUITEM "Dateien aus&wählen..." ,			116
+		MENUITEM SEPARATOR
+		MENUITEM "&Beenden\tAlt+X" , 			ID_FILE_EXIT
+	}
+
+	POPUP "Da&tenträger"  {
+		MENUITEM "Datenträger &kopieren..." ,			201
+		MENUITEM "Datenträger &benennen..." ,			202
+		MENUITEM SEPARATOR
+		MENUITEM "Datenträger &formatieren..." ,			203
+#ifdef _WIN95
+		MENUITEM "...",			-1	//@@
+#endif
+		MENUITEM SEPARATOR
+		MENUITEM "Netzwerklaufwerk &verbinden..." ,			252
+		MENUITEM "Netzwerklaufwerk &trennen..." ,		253
+		MENUITEM SEPARATOR
+		MENUITEM "F&reigeben als..." ,			254
+		MENUITEM "Freigabe been&den..." ,			255
+		MENUITEM SEPARATOR
+		MENUITEM "Laufwerk aus&wählen..." ,			251
+	}
+
+
+	POPUP "&Verzeichnisse"  {
+		MENUITEM "&Nächste Ebene einblenden\t+" ,			301
+		MENUITEM "&Zweig einblenden\t*" ,		302
+		MENUITEM "Alle &Ebenen einblenden\tStrg+*" ,		303
+		MENUITEM "Zweig &ausblenden\t-" ,			304
+		MENUITEM SEPARATOR
+		MENUITEM "&Verzweigungen kennzeichnen" ,				505
+	}
+
+	POPUP "&Ansicht"  {
+		MENUITEM "Struktur &und Verzeichnis" ,			413
+		MENUITEM "Nur St&ruktur" ,			411
+		MENUITEM "Nur &Verzeichnis" ,			412
+		MENUITEM SEPARATOR
+		MENUITEM "&Teilen" ,			414
+		MENUITEM SEPARATOR
+		MENUITEM "&Name" ,			ID_VIEW_NAME
+		MENUITEM "A&lle Dateiangaben" ,				ID_VIEW_ALL_ATTRIBUTES, CHECKED
+		MENUITEM "&Bestimmte Dateiangaben..." ,			ID_VIEW_SELECTED_ATTRIBUTES
+		MENUITEM SEPARATOR
+		MENUITEM "Nach N&ame" ,		404
+		MENUITEM "Nach T&yp" ,		405
+		MENUITEM "Nach &Größe" , 		406
+		MENUITEM "Nach &Datum" , 		407
+		MENUITEM SEPARATOR
+		MENUITEM "Angaben ausw&ählen..." ,			409
+	}
+
+	POPUP "&Optionen"  {
+		MENUITEM "&Bestätigen..." ,		-1
+		MENUITEM "Schrift&art..." ,			-1
+		MENUITEM "Symbolleiste &definieren..." , -1
+		MENUITEM SEPARATOR
+		MENUITEM "Sy&mbolleiste" ,		ID_VIEW_TOOL_BAR, CHECKED
+		MENUITEM "Lauf&werkleiste" ,		ID_VIEW_DRIVE_BAR, CHECKED
+		MENUITEM "&Statusleiste" ,	ID_VIEW_STATUSBAR, CHECKED
+#ifndef _NO_EXTENSIONS
+		MENUITEM "Vollb&ild\tStrg+Umschalt+S" , 	ID_VIEW_FULLSCREEN
+#endif
+		MENUITEM SEPARATOR
+		MENUITEM "&Symbol nach Programmstart" ,		-1
+		MENUITEM "&Einstellungen beim Beenden speichern" ,			511
+	}
+
+	POPUP "&Sicherheit"  {
+		MENUITEM "&Berechtigungen..." ,		605
+		MENUITEM "Über&wachen..." ,			606
+		MENUITEM "Besi&tzer..." ,		607
+	}
+
+	POPUP "&Fenster"  {
+		MENUITEM "Neues &Fenster" ,			ID_WINDOW_NEW
+		MENUITEM "Über&lappend\tUmschalt+F5" ,		ID_WINDOW_CASCADE
+		MENUITEM "&Untereinander" ,		ID_WINDOW_TILE_HORZ
+		MENUITEM "&Nebeneinander\tUmschalt+F4" ,		ID_WINDOW_TILE_VERT
+#ifndef _NO_EXTENSIONS
+		MENUITEM "au&tomatisch anordnen" ,		ID_WINDOW_AUTOSORT
+#endif
+		MENUITEM "&Symbole anordnen" ,		ID_WINDOW_ARRANGE
+		MENUITEM "&Aktualisieren\tF5" ,		ID_REFRESH
+	}
+
+	POPUP "&?"  {
+		MENUITEM "&Hilfethemen\tF1" ,			ID_HELP
+		MENUITEM "&Suchen...\tF1" ,			ID_HELP
+		MENUITEM "Hilfe &verwenden\tF1" ,			ID_HELP_USING
+		MENUITEM SEPARATOR
+		POPUP "Inf&o..."  {
+		  MENUITEM "Info über &Wine..." ,			ID_ABOUT_WINE
+//		  MENUITEM "&Lizenz"		ID_LICENSE
+//		  MENUITEM "&KEINE GARANTIE"		ID_NO_WARRANTY
+		}
+	}
+}
+
+
+IDD_EXECUTE DIALOG FIXED IMPURE 15, 13, 210, 63
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Ausführen"
+FONT 8, "MS Shell Dlg"
+{
+	CONTROL 		"", 101, "Static", SS_SIMPLE|SS_NOPREFIX, 3, 6, 162, 10
+	CONTROL 		"Befehls&zeile:" , -1, "Static", SS_LEFTNOWORDWRAP|WS_GROUP, 3, 18, 60, 10
+	EDITTEXT		201, 3, 29, 134, 12, ES_AUTOHSCROLL
+	CONTROL 		"Als &Symbol" , 214, "Button", BS_AUTOCHECKBOX|WS_TABSTOP,3, 45, 71, 12
+	DEFPUSHBUTTON	"OK" , 1, 158, 6, 47, 14
+	PUSHBUTTON		"Abbrechen" , 2, 158, 23, 47, 14
+	PUSHBUTTON		"&Hilfe" , 254, 158, 43, 47, 14
+}
diff --git a/programs/winefile/En.rc b/programs/winefile/En.rc
new file mode 100644
index 0000000..33a1a33
--- /dev/null
+++ b/programs/winefile/En.rc
@@ -0,0 +1,166 @@
+/*
+ * WineFile
+ * English Language Support
+ *
+ * Copyright 2000 Martin Fuchs
+ * Copyright 2002 Steven Edwards
+ * Copyright 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(850)
+
+
+/* Menu */
+
+IDM_WINEFILE MENU FIXED IMPURE
+{
+	POPUP "&File"  {
+		MENUITEM "&Open\tEnter" ,			101
+		MENUITEM "&Move...\tF7" , 			106
+		MENUITEM "&Copy...\tF8" ,			107
+		MENUITEM "&In Clipboard...\tF9" ,		118
+		MENUITEM "&Delete\tDel" ,			108
+		MENUITEM "Re&name..." ,			109
+		MENUITEM "Propert&ies...\tAlt+Enter" , ID_EDIT_PROPERTIES
+		MENUITEM SEPARATOR
+		MENUITEM "C&ompress..." ,		119
+		MENUITEM "Dec&ompress..." ,		120
+		MENUITEM SEPARATOR
+		MENUITEM "&Run..." ,			ID_EXECUTE
+		MENUITEM "&Print..." , 			102
+		MENUITEM "Associate..." ,		103
+		MENUITEM SEPARATOR
+		MENUITEM "Cr&eate Directory..." ,			111
+		MENUITEM "Searc&h..." ,			104
+		MENUITEM "&Select Files..." ,			116
+		MENUITEM SEPARATOR
+#ifndef _NO_EXTENSIONS
+		MENUITEM "E&xit\tAlt+X" , 			ID_FILE_EXIT
+#else
+		MENUITEM "E&xit", 				ID_FILE_EXIT
+#endif
+	}
+
+	POPUP "&Disk"  {
+		MENUITEM "&Copy Disk..." ,			201
+		MENUITEM "&Label Disk..." ,			202
+		MENUITEM SEPARATOR
+		MENUITEM "&Format Disk..." ,			203
+#ifdef _WIN95
+		MENUITEM "&Make System Disk...", -1	//@@
+#endif
+		MENUITEM SEPARATOR
+		MENUITEM "Connect &Network Drive" ,			252
+		MENUITEM "&Disconnect Network Drive" ,		253
+		MENUITEM SEPARATOR
+		MENUITEM "Share as..." ,			254
+		MENUITEM "&Remove Share..." ,			255
+		MENUITEM SEPARATOR
+		MENUITEM "&Select Drive..." ,			251
+	}
+
+	POPUP "&Directories"  {
+		MENUITEM "&Next Level\t+" ,			301
+		MENUITEM "Expand &Tree\t*" ,		302
+		MENUITEM "Expand &all\tStrg+*" ,		303
+		MENUITEM "Collapse &Tree\t-" ,			304
+		MENUITEM SEPARATOR
+		MENUITEM "&Mark Childs" ,				505
+	}
+
+	POPUP "&View"  {
+		MENUITEM "T&ree and Directory" ,			413
+		MENUITEM "Tr&ee Only" ,			411
+		MENUITEM "Directory &Only" ,			412
+		MENUITEM SEPARATOR
+		MENUITEM "Sp&lit" ,			414
+		MENUITEM SEPARATOR
+		MENUITEM "&Name" ,			ID_VIEW_NAME
+		MENUITEM "&All File Details" ,				ID_VIEW_ALL_ATTRIBUTES, CHECKED
+		MENUITEM "&Partial Details..." ,			ID_VIEW_SELECTED_ATTRIBUTES
+		MENUITEM SEPARATOR
+		MENUITEM "&Sort by Name" ,		404
+		MENUITEM "Sort &by Type" ,		405
+		MENUITEM "Sort by Si&ze" , 		406
+		MENUITEM "Sort by &Date" , 		407
+		MENUITEM SEPARATOR
+		MENUITEM "Sort by &..." ,			409
+	}
+
+	POPUP "&Options"  {
+		MENUITEM "&Confirmation..." ,		-1
+		MENUITEM "&Font..." ,			-1
+		MENUITEM "Customize Tool&bar..." , -1
+		MENUITEM SEPARATOR
+		MENUITEM "&Toolbar" ,		ID_VIEW_TOOL_BAR, CHECKED
+		MENUITEM "&Drivebar" ,		ID_VIEW_DRIVE_BAR, CHECKED
+		MENUITEM "&Status Bar" ,	ID_VIEW_STATUSBAR, CHECKED
+#ifndef _NO_EXTENSIONS
+		MENUITEM "F&ull Screen\tCtrl+Shift+S" , 	ID_VIEW_FULLSCREEN
+#endif
+		MENUITEM SEPARATOR
+		MENUITEM "&Symbol nach Programmstart" ,		-1
+		MENUITEM "&Einstellungen beim Beenden speichern" ,			511
+	}
+
+
+	POPUP "&Security"  {
+		MENUITEM "&Access..." ,		605
+		MENUITEM "&Logging..." ,			606
+		MENUITEM "&Owner..." ,		607
+	}
+
+	POPUP "&Window"  {
+		MENUITEM "New &Window" ,			ID_WINDOW_NEW
+		MENUITEM "Cascading\tCtrl+F5" ,		ID_WINDOW_CASCADE
+		MENUITEM "Tile &Horizontally" ,		ID_WINDOW_TILE_HORZ
+		MENUITEM "Tile &Vertically\tCtrl+F4" ,		ID_WINDOW_TILE_VERT
+#ifndef _NO_EXTENSIONS
+		MENUITEM "Arrange Automatically" ,		ID_WINDOW_AUTOSORT
+#endif
+		MENUITEM "Arrange &Symbols" ,		ID_WINDOW_ARRANGE
+		MENUITEM "&Refresh\tF5" ,		ID_REFRESH
+	}
+
+	POPUP "&?"  {
+		MENUITEM "&Help Topics\tF1" ,			ID_HELP
+		MENUITEM "Help &Search...\tF1" ,			ID_HELP
+		MENUITEM "&Using Help\tF1" ,			ID_HELP_USING
+		MENUITEM SEPARATOR
+		POPUP "Info..."  {
+		  MENUITEM "Info about &Wine..." ,			ID_ABOUT_WINE
+//		  MENUITEM "&License..."		ID_LICENSE
+//		  MENUITEM "&NO WARRANTY"		ID_NO_WARRANTY
+		}
+	}
+}
+
+
+IDD_EXECUTE DIALOG FIXED IMPURE 15, 13, 210, 63
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Execute"
+FONT 8, "MS Shell Dlg"
+{
+	CONTROL 		"", 101, "Static", SS_SIMPLE|SS_NOPREFIX, 3, 6, 162, 10
+	CONTROL 		"&Command:" , -1, "Static", SS_LEFTNOWORDWRAP|WS_GROUP, 3, 18, 60, 10
+	EDITTEXT		201, 3, 29, 134, 12, ES_AUTOHSCROLL
+	CONTROL 		"As &Symbol" , 214, "Button", BS_AUTOCHECKBOX|WS_TABSTOP,3, 45, 71, 12
+	DEFPUSHBUTTON	"OK" , 1, 158, 6, 47, 14
+	PUSHBUTTON		"Cancel" , 2, 158, 23, 47, 14
+	PUSHBUTTON		"&Help" , 254, 158, 43, 47, 14
+}
diff --git a/programs/winefile/Makefile.in b/programs/winefile/Makefile.in
new file mode 100644
index 0000000..ffa8d0f
--- /dev/null
+++ b/programs/winefile/Makefile.in
@@ -0,0 +1,18 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = winefile.exe
+APPMODE   = gui
+IMPORTS   = shell32 comctl32 user32 gdi32 kernel32
+
+C_SRCS = \
+	license.c \
+	splitpath.c \
+	winefile.c
+
+RC_SRCS = rsrc.rc
+
+@MAKE_PROG_RULES@
+
+### Dependencies:
diff --git a/programs/winefile/license.c b/programs/winefile/license.c
new file mode 100644
index 0000000..8e66697
--- /dev/null
+++ b/programs/winefile/license.c
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2000 Martin Fuchs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#include "windows.h"
+
+static const CHAR LicenseCaption[] = "LICENSE";
+static const CHAR License[] =
+"This library is free software; you can redistribute it and/or "
+"modify it under the terms of the GNU Lesser General Public "
+"License as published by the Free Software Foundation; either "
+"version 2.1 of the License, or (at your option) any later version.\n"
+
+"This library 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 "
+"Lesser General Public License for more details.\n"
+
+"You should have received a copy of the GNU Lesser General Public "
+"License along with this library; if not, write to the Free Software "
+"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA";
+
+static const CHAR NoWarrantyCaption[] = "NO WARRANTY";
+static const CHAR NoWarranty[] =
+"This library 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 "
+"Lesser General Public License for more details.";
+
+VOID WineLicense(HWND hwnd)
+{
+  MessageBoxA(hwnd, License, LicenseCaption, MB_ICONINFORMATION|MB_OK);
+}
+
+VOID WineWarranty(HWND hwnd)
+{
+  MessageBoxA(hwnd, NoWarranty, NoWarrantyCaption, MB_ICONEXCLAMATION|MB_OK);
+}
diff --git a/programs/winefile/resource.h b/programs/winefile/resource.h
new file mode 100644
index 0000000..6996df2b
--- /dev/null
+++ b/programs/winefile/resource.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2000 Martin Fuchs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* images */
+#define	IDB_TOOLBAR					100
+#define	IDB_DRIVEBAR					101
+#define	IDB_IMAGES					102
+#define	IDI_WINEFILE					100
+
+
+/* accellerators and menus */
+
+#define	IDA_WINEFILE					101
+#define	IDM_WINEFILE					102
+
+
+/* dialogs */
+
+#define	IDD_EXECUTE					103
+
+
+/* control ids */
+
+#define	ID_ACTIVATE					101
+#define	ID_EXECUTE					105
+#define	ID_FILE_EXIT					115
+#define	ID_VIEW_NAME					401
+#define	ID_VIEW_ALL_ATTRIBUTES				402
+#define	ID_VIEW_SELECTED_ATTRIBUTES			403
+#define	ID_VIEW_TOOL_BAR				508
+#define	ID_VIEW_DRIVE_BAR				507
+#define	ID_VIEW_STATUSBAR				503
+
+#define	ID_ABOUT					1803
+#define	ID_REFRESH					1704
+#define	ID_EDIT_PROPERTIES				57656
+#define	ID_WINDOW_NEW					0xE130
+#define	ID_WINDOW_ARRANGE				0xE131
+#define	ID_WINDOW_CASCADE				0xE132
+#define	ID_WINDOW_TILE_HORZ 				0xE133
+#define	ID_WINDOW_TILE_VERT 				0xE134
+#define	ID_WINDOW_SPLIT 				0xE135
+#define	ID_HELP_USING					0xE144
+#define	ID_HELP 					0xE146
+
+/* range for drive bar command ids: 0x9000..0x90FF */
+#define	ID_DRIVE_FIRST					0x9001
+
+
+/* winefile extensions */
+#define	ID_ABOUT_WINE					0x8000
+#define	ID_LICENSE					0x8001
+#define	ID_NO_WARRANTY					0x8002
+#define	ID_WINDOW_AUTOSORT				0x8003
+#define	ID_VIEW_FULLSCREEN				0x8004
+#define	ID_PREFERED_SIZES				0x8005
+
+#ifdef __linux__
+#define	ID_DRIVE_UNIX_FS				0x9000
+#endif
diff --git a/programs/winefile/resource.rc b/programs/winefile/resource.rc
new file mode 100644
index 0000000..8f6cedc
--- /dev/null
+++ b/programs/winefile/resource.rc
@@ -0,0 +1,289 @@
+/*
+ * Copyright 2000 Martin Fuchs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+IDA_WINEFILE ACCELERATORS DISCARDABLE
+{
+	VK_F1, ID_HELP, VIRTKEY, NOINVERT
+	VK_F5, ID_REFRESH, VIRTKEY, NOINVERT
+	VK_RETURN, ID_ACTIVATE, VIRTKEY, NOINVERT
+#ifndef _NO_EXTENSIONS
+	"X", ID_FILE_EXIT, VIRTKEY, ALT, NOINVERT
+	"S", ID_VIEW_FULLSCREEN, VIRTKEY, SHIFT, CONTROL, NOINVERT
+	VK_ADD, ID_PREFERED_SIZES, VIRTKEY, CONTROL, NOINVERT
+#endif
+}
+
+IDI_WINEFILE ICON DISCARDABLE
+#ifdef _WIN32
+ "winefile.ico"
+#else
+{
+ '00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+ '00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+ '00 00 01 00 04 00 00 00 00 00 80 02 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
+ '00 00 80 00 80 00 80 80 00 00 C0 C0 C0 00 80 80'
+ '80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+ '00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B7'
+ 'B7 B7 B7 B7 B7 B7 B7 70 00 00 00 00 00 00 00 70'
+ '00 00 00 00 00 00 0B 73 00 00 00 00 00 00 00 B3'
+ 'F7 B7 B7 B7 B7 B7 07 73 30 00 00 00 00 00 00 73'
+ 'FB 7B 7B 7B 7B 7B 0B 73 33 00 00 00 00 00 00 B3'
+ 'F7 BF FF FF F7 B7 07 73 33 00 00 00 00 00 00 73'
+ 'FB 70 33 33 0B 7B 0B 73 33 00 0F FF FF 00 00 B3'
+ 'F7 B0 33 33 07 B7 07 73 33 00 F0 00 00 F0 00 73'
+ 'FB 70 00 00 0B 7B 0B 73 33 00 00 00 00 00 00 B3'
+ 'F7 B7 B7 B7 B7 B7 07 73 33 00 00 00 00 00 00 73'
+ 'FF FF FF FF FF FF 0B 73 33 00 00 02 00 00 00 B3'
+ '33 33 33 33 33 33 07 73 33 00 00 09 00 00 00 7B'
+ '7B 7B 7B 7B 7B 7B 7B 73 33 00 00 99 90 00 00 B0'
+ '00 00 00 00 00 00 07 73 33 00 0B BB BB 00 00 73'
+ 'FB 7B 7B 7B 7B 7B 0B 73 33 00 BB BB BB B0 00 B3'
+ 'F7 B7 B7 B7 B7 B7 07 73 33 00 00 00 E0 00 00 73'
+ 'FB 7F FF FF FB 7B 0B 73 33 00 00 00 0E 00 00 B3'
+ 'F7 B0 33 33 07 B7 07 73 33 00 00 00 00 00 00 73'
+ 'FB 70 33 33 0B 7B 0B 73 33 00 00 00 00 00 00 B3'
+ 'F7 B0 00 00 07 B7 07 73 33 00 00 00 00 00 00 73'
+ 'FB 7B 7B 7B 7B 7B 0B 73 33 00 00 00 00 00 00 B3'
+ 'FF FF FF FF FF FF 07 73 33 00 00 00 00 00 00 73'
+ '33 33 33 33 33 33 0B 73 33 00 00 00 00 00 00 B7'
+ 'B7 B7 B7 B7 B7 B7 B7 73 33 00 00 00 00 00 00 FF'
+ 'FF FF FF FF FF FF FF F3 33 00 00 00 00 00 00 07'
+ 'B7 B7 B7 B7 B7 B7 B7 BF 33 00 00 00 00 00 00 00'
+ '7B 7B 7B 7B 7B 7B 7B 7B F3 00 00 00 00 00 00 00'
+ '07 B7 B7 B7 B7 B7 B7 B7 BF 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF'
+ 'FF FF 80 00 1F FF 80 00 0F FF 80 00 07 FF 80 00'
+ '03 FF 80 00 01 FF 80 00 01 FF 80 00 01 83 80 00'
+ '01 39 80 00 01 C7 80 00 01 EF 80 00 01 EF 80 00'
+ '01 EF 80 00 01 C7 80 00 01 83 80 00 01 01 80 00'
+ '01 F7 80 00 01 FB 80 00 01 FF 80 00 01 FF 80 00'
+ '01 FF 80 00 01 FF 80 00 01 FF 80 00 01 FF 80 00'
+ '01 FF 80 00 01 FF C0 00 01 FF E0 00 01 FF F0 00'
+ '01 FF F8 00 01 FF FF FF FF FF FF FF FF FF'
+}
+#endif
+
+IDB_TOOLBAR BITMAP DISCARDABLE
+#ifdef _WIN32
+ "toolbar.bmp"
+#else
+{
+ '42 4D BE 03 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 70 00 00 00 0F 00 00 00 01 00 04 00 00 00'
+ '00 00 48 03 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
+ '00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+ '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+ '00 00 FF FF FF 00 77 77 77 88 88 88 88 88 77 77'
+ '77 77 77 77 77 77 77 88 88 88 88 88 88 87 77 88'
+ '88 88 88 88 88 87 77 88 88 88 88 88 88 88 78 88'
+ '88 88 88 88 88 87 77 77 77 07 07 07 07 07 77 77'
+ '74 44 44 44 44 48 77 77 77 88 88 88 88 88 74 44'
+ '44 44 44 44 44 87 74 44 44 44 44 44 44 87 74 44'
+ '44 44 44 44 44 48 44 44 44 44 44 44 44 87 77 77'
+ '77 77 77 77 77 70 77 77 74 FF FF FF FF 48 77 77'
+ '74 44 44 44 44 48 74 FF FF FF FF FF F4 87 74 FF'
+ 'FF F4 FF FF F4 87 74 FF FF F4 FF FF FF 48 4F FF'
+ 'FF 4F FF FF F4 87 07 07 07 07 77 77 77 77 77 77'
+ '74 FF FF FF FF 48 77 77 74 FF FF FF FF 48 74 FF'
+ 'FF FF FF FF F4 87 74 FF FF F4 FF FF F4 87 74 FF'
+ 'FF F4 FF FF FF 48 4F FF FF 44 44 44 44 87 77 77'
+ '77 77 77 77 77 70 77 88 88 88 88 88 FF 48 77 77'
+ '84 FF FF FF FF 48 74 FF FF FF FF FF F4 87 74 FF'
+ 'FF F4 FF FF F4 87 74 FF FF F4 44 44 44 48 4F FF'
+ 'FF 44 44 44 44 87 07 77 77 07 77 77 77 77 74 44'
+ '8B 44 44 48 44 48 77 74 44 FF FF FF FF 48 74 44'
+ '44 44 44 44 44 87 74 FF FF F4 FF FF F4 87 74 FF'
+ 'FF F4 44 44 44 48 4F FF FF 4F FF 4F F4 87 77 77'
+ '77 70 70 70 70 70 7B FF 8B FF FF 48 44 47 77 74'
+ 'F4 44 44 44 44 48 74 44 44 44 44 44 44 87 74 FF'
+ 'FF F4 FF FF F4 87 74 FF FF F4 FF F4 FF 48 44 44'
+ '44 44 44 44 44 87 07 77 77 07 07 07 07 07 78 B8'
+ '8B F8 BF 48 77 77 77 84 F4 44 44 44 44 47 74 44'
+ '44 44 44 44 44 87 74 FF FF F4 FF FF F4 87 74 44'
+ '44 44 FF F4 FF 48 44 44 44 44 44 44 44 77 70 70'
+ '70 70 70 77 77 77 74 8B 8B 8B FF 48 88 87 74 44'
+ 'FF FF FF FF 48 77 74 FF FF FF FF FF F4 87 74 FF'
+ 'FF F4 FF FF F4 87 74 44 44 44 FF F4 FF 48 77 77'
+ '77 77 77 77 77 77 00 F7 07 07 07 70 70 77 7B B8'
+ 'BB B4 44 48 44 87 74 F4 44 44 44 44 48 77 74 FF'
+ 'FF FF FF FF F4 87 74 FF FF F4 FF FF F4 87 74 FF'
+ 'FF F4 FF F4 FF 48 7C CC 77 CC 77 C7 7C 77 00 F7'
+ '78 87 77 77 77 07 74 88 BB B4 44 44 F4 87 74 F4'
+ '44 44 44 44 47 77 74 FF FF FF FF FF F4 87 74 FF'
+ 'FF F4 FF FF F4 87 74 FF FF F4 FF F4 FF 48 C7 7C'
+ '7C 7C 7C 77 C7 C7 70 0F 00 F7 77 77 77 77 77 8B'
+ '8B 8B FF FF F4 87 74 FF FF FF FF 48 77 77 74 44'
+ '44 44 44 44 44 87 74 44 44 44 44 44 44 87 74 FF'
+ 'FF F4 FF F4 FF 48 7C CC 7C 7C 7C 77 C7 C7 77 08'
+ '07 77 77 77 77 07 78 B7 8B FF FF FF F4 87 74 44'
+ '44 44 44 48 77 77 74 44 44 44 44 44 44 87 74 44'
+ '44 44 44 44 44 87 74 44 44 44 44 44 44 48 77 7C'
+ '7C 7C 7C 77 C7 C7 77 80 0F 77 77 77 77 77 7B 77'
+ '8B 44 8B 44 44 87 74 44 44 44 44 47 77 77 74 44'
+ '44 44 44 44 44 77 74 44 44 44 44 44 44 77 74 44'
+ '44 44 44 44 44 47 7C C7 7C 7C 7C C7 7C 77 80 07'
+ '70 F7 07 07 07 07 77 77 8B 44 54 44 44 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 7C 77 77 77 08 77 70 00 70 70 70 77'
+}
+#endif
+
+IDB_DRIVEBAR BITMAP DISCARDABLE
+#ifdef _WIN32
+ "drivebar.bmp"
+#else
+{
+ '42 4D E6 02 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 60 00 00 00 0D 00 00 00 01 00 04 00 00 00'
+ '00 00 70 02 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
+ '00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+ '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+ '00 00 FF FF FF 00 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 08 88 88 88 88 88 88 80 08 88'
+ '88 88 88 88 88 80 08 88 88 88 88 88 88 80 08 88'
+ '88 88 88 88 88 80 08 88 88 88 88 88 88 80 08 88'
+ '88 88 88 88 88 80 07 70 07 77 77 70 00 80 0F 77'
+ '77 77 77 77 77 80 0F 00 77 77 77 77 77 80 0F 77'
+ '77 77 77 79 97 80 0F 77 70 00 77 77 77 80 0F 77'
+ '07 07 07 07 77 80 07 77 70 07 00 00 77 80 0F 77'
+ '70 00 00 07 77 80 0F 00 00 00 00 00 00 80 0F 77'
+ '70 00 07 77 77 80 0F 77 77 07 77 77 77 80 0F 70'
+ '00 00 00 00 77 80 07 77 77 00 00 77 77 80 0F 00'
+ '00 00 00 00 00 80 0F 77 77 77 77 77 77 80 0F 77'
+ '07 7F 70 77 77 80 0F 77 70 00 77 77 77 80 0F 70'
+ '70 70 70 70 77 80 07 70 00 77 70 00 77 80 0F 77'
+ '70 00 00 07 77 80 0F 00 00 00 00 00 00 80 0F 00'
+ '87 F8 78 00 77 80 0F 00 00 70 00 00 07 80 0F 70'
+ '00 00 00 00 77 80 07 07 77 77 77 70 00 80 0F 77'
+ '77 77 77 77 70 80 0F 77 77 77 77 77 77 80 0F 00'
+ '00 00 00 00 77 80 0F 77 77 77 77 77 77 80 0F 77'
+ '07 07 07 07 77 80 07 77 77 77 77 77 77 80 0F FF'
+ 'FF FF FF FF FF 80 0F FF FF FF FF FF FF 80 0F FF'
+ 'FF FF FF FF FF 80 0F FF FF FF FF FF FF 80 0F FF'
+ 'FF FF FF FF FF 80 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77'
+}
+#endif
+
+IDB_IMAGES BITMAP DISCARDABLE
+#ifdef _WIN32
+ "images.bmp"
+#else
+{
+ '42 4D 86 04 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 A0 00 00 00 0D 00 00 00 01 00 04 00 00 00'
+ '00 00 10 04 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
+ '00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
+ '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+ '00 00 FF FF FF 00 AA AA 00 00 00 00 00 AA AA AA'
+ '00 00 00 00 00 AA AA 00 00 00 00 00 00 00 AA 00'
+ '00 00 00 00 00 00 AA A0 00 00 00 00 00 0A AA 00'
+ '00 00 00 00 00 00 AA A0 00 00 00 00 00 0A AA A0'
+ '00 00 00 00 00 0A AA AA AA AA AA AA AA AA AA AA'
+ 'AA AA AA AA AA AA AA A7 77 77 77 77 70 AA AA A7'
+ '77 77 77 77 70 AA A7 77 77 77 77 77 77 70 A7 77'
+ '77 77 77 77 77 80 AA 77 77 77 77 77 77 0A A7 77'
+ '77 77 77 77 77 80 AA 77 77 77 77 77 77 0A AA 77'
+ '77 77 77 77 77 0A AA AA AA AA AA AA AA AA AA AA'
+ 'AA AA AA AA AA AA AA A7 FF FF FF FF 70 AA AA A7'
+ 'FF FF FF FF 70 AA A7 7F 7F 7F 7F 7F 7F 70 A7 FB'
+ 'FB FB FB FB FB 80 AA 7F BF BF BF BF B7 0A A7 FB'
+ 'FB FB FB FB FB 80 AA 7F BF BF BF BF B7 0A AA 7F'
+ 'BF BF BF BF B7 0A AA AA AA 00 00 00 0A AA AA AA'
+ 'AA 00 AA AA AA AA AA A7 FF FF FF FF 70 AA AA A7'
+ 'FF 44 44 FF 70 AA A7 F7 F7 F7 F7 F7 F7 70 A7 FF'
+ 'BF BF BF BF BF 80 A7 FB FB FB FB FB F0 8A A7 FF'
+ 'BF B0 BF BF BF 80 A7 FB FB F0 FB FB F0 8A A7 FB'
+ 'FB FB FB FB F0 8A AA AA A0 E6 68 86 0A AA AA AA'
+ 'A0 E8 0A AA AA AA AA A7 FF FF FF FF 70 AA AA A7'
+ 'FF FF FF FF 70 AA A7 7F 7F 7F 7F 7F 7F 70 A7 FB'
+ 'FB FB FB FB FB 80 A7 BF BF BF BF BF 70 8A A7 FB'
+ 'FB F0 FB FB FB 80 A7 BF B0 00 0F BF 70 8A A7 BF'
+ 'B0 00 0F BF 70 8A AA AA A0 E0 00 00 AA AA AA AA'
+ 'A0 E8 0A AA AA AA AA A7 FF FF FF FF 70 AA AA A7'
+ 'FF 44 44 FF 70 AA A7 F7 F7 F7 F7 F7 F7 70 A7 FF'
+ 'BF BF BF BF BF 80 7B FB FB FB FB FB 88 8A A7 FF'
+ 'B0 00 00 BF BF 80 7B FB FB 0B FB FB 88 8A 7B FB'
+ 'FB FB FB FB 88 8A AA AA A0 E0 AA AA AA AA AA AA'
+ 'AA 00 AA AA AA AA AA A7 FF FF FF FF 70 AA AA A7'
+ 'FF FF FF FF 70 AA A7 7F 7F 7F 7F 7F 7F 70 A7 FB'
+ 'FB FB FB FB FB 80 7F FF FF FF FF F7 0F 8A A7 FB'
+ 'FB F0 FB FB FB 80 7F FF FF FF FF F7 0F 8A 7F FF'
+ 'FF FF FF F7 0F 8A AA AA A0 E0 AA AA AA AA AA AA'
+ 'AA AA AA AA AA AA AA A7 FF FF FF FF 70 AA AA A7'
+ 'FF 44 44 FF 70 AA A7 F7 F7 F7 F7 F7 F7 70 A7 FF'
+ 'BF BF BF BF BF 80 77 77 77 77 77 78 FB 8A A7 FF'
+ 'BF B0 BF BF BF 80 77 77 77 77 77 78 FB 8A 77 77'
+ '77 77 77 78 FB 8A AA A0 00 E0 00 AA AA AA AA AA'
+ 'AA AA AA AA AA AA AA A7 FF FF FF FF 70 AA AA A7'
+ 'FF FF FF FF 70 AA A7 7F 7F 7F 7F 7F 7F 70 A7 FB'
+ 'FB FB FB FB FB 80 A7 BF BF BF BF BF BF 8A A7 FB'
+ 'FB FB FB FB FB 80 A7 BF BF BF BF BF BF 8A A7 BF'
+ 'BF BF BF BF BF 8A AA A0 E6 66 60 AA AA AA AA AA'
+ 'AA AA AA AA AA AA AA A7 FF FF F7 77 7A AA AA A7'
+ 'FF 44 F7 77 7A AA A7 F7 F7 F7 F7 F7 F7 70 A7 FF'
+ 'FF FF FF FF FF 80 A7 FB FB FB FF FF FF 8A A7 FF'
+ 'FF FF FF FF FF 80 A7 FB FB FB FF FF FF 8A A7 FB'
+ 'FB FB FF FF FF 8A AA AA 0E 66 0A AA AA AA AA AA'
+ 'AA AA AA AA AA AA AA A7 FF FF F7 F7 AA AA AA A7'
+ 'FF FF F7 F7 AA AA A7 77 77 77 77 77 77 70 A7 FB'
+ 'FB FB F7 77 77 8A A7 BF BF BF F7 77 77 8A A7 FB'
+ 'FB FB F7 77 77 8A A7 BF BF BF F7 77 77 8A A7 BF'
+ 'BF BF F7 77 77 8A AA AA A0 E0 AA AA AA AA AA AA'
+ 'AA AA AA AA AA AA AA A7 FF FF F7 7A AA AA AA A7'
+ 'FF FF F7 7A AA AA A7 EE EE EE EE EE EE 70 AA 7F'
+ 'BF BF 7A AA AA AA AA 7F FF FF 7A AA AA AA AA 7F'
+ 'BF BF 7A AA AA AA AA 7F FF FF 7A AA AA AA AA 7F'
+ 'FF FF 7A AA AA AA AA AA AA 0A AA AA AA AA AA AA'
+ 'AA AA AA AA AA AA AA A7 77 77 77 AA AA AA AA A7'
+ '77 77 77 AA AA AA A7 77 77 77 77 77 77 7A AA A7'
+ '77 77 AA AA AA AA AA A7 77 77 AA AA AA AA AA A7'
+ '77 77 AA AA AA AA AA A7 77 77 AA AA AA AA AA A7'
+ '77 77 AA AA AA AA AA AA AA AA AA AA AA AA AA AA'
+ 'AA AA AA AA AA AA'
+}
+#endif
diff --git a/programs/winefile/rsrc.rc b/programs/winefile/rsrc.rc
new file mode 100644
index 0000000..45980d5
--- /dev/null
+++ b/programs/winefile/rsrc.rc
@@ -0,0 +1,820 @@
+/*
+ * Copyright 2000 Martin Fuchs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "windows.h"
+#include "resource.h"
+
+/* define language neutral resources */
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#include "resource.rc"
+
+/* BINRES drivebar.bmp */
+DRIVEBAR BITMAP // DISCARDABLE //LOADONCALL
+{
+ '42 4D FE 0E 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 F0 01 00 00 0F 00 00 00 01 00 04 00 00 00'
+ '00 00 88 0E 00 00 00 00 00 00 00 00 00 00 10 00'
+ '00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '80 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF'
+ 'FF 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 44 44 33 33 33 33 34 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '43 33 33 33 33 33 44 44 33 33 33 33 33 44 44 44'
+ '33 33 33 33 33 44 44 44 33 33 33 33 33 44 44 43'
+ '34 44 44 44 30 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 00 00 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 43 33 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 40 00'
+ '00 00 00 00 34 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 43 33 44 44 44 44 44'
+ '44 33 33 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 33 33 33 33 44 43'
+ '33 33 33 33 33 34 44 44 44 44 44 44 44 44 44 44'
+ '33 33 33 33 34 44 44 44 00 00 00 00 00 00 44 00'
+ '00 00 00 00 00 34 44 00 00 00 00 00 00 34 44 00'
+ '00 00 00 00 00 34 44 30 00 44 44 30 00 34 44 44'
+ '43 33 33 34 44 44 44 44 44 33 33 33 33 34 44 44'
+ '43 33 33 33 33 44 44 44 44 00 04 44 44 44 44 44'
+ '43 33 33 33 33 44 44 44 33 33 33 33 33 44 44 44'
+ '43 33 33 33 33 44 44 44 33 33 33 33 34 44 44 44'
+ '44 44 44 44 44 44 44 44 44 43 33 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 00 03 44 44 44 44'
+ '33 33 33 33 33 34 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 40 77 77 77 77 70 34 44 44 44'
+ '43 33 33 33 33 33 44 44 33 33 33 33 33 33 44 44'
+ '44 40 00 33 44 44 44 44 43 00 03 34 44 44 44 44'
+ '33 44 44 33 44 44 44 44 44 44 33 33 33 33 44 44'
+ '44 00 00 00 00 03 40 00 00 00 00 00 00 34 44 44'
+ '44 44 33 44 44 44 40 00 00 00 00 00 44 00 44 40'
+ '44 00 00 07 70 40 40 43 33 33 33 33 33 03 40 43'
+ '33 33 33 33 33 03 40 43 33 33 33 33 33 03 44 07'
+ '70 34 43 07 77 04 44 00 00 00 10 40 00 04 44 40'
+ '00 00 00 00 00 34 44 70 00 00 00 00 03 44 44 44'
+ '44 40 44 44 44 44 44 70 00 00 00 00 03 44 44 40'
+ '00 00 00 00 03 44 44 00 00 00 00 00 04 40 40 00'
+ '00 00 00 00 44 00 44 44 43 34 44 44 44 44 44 44'
+ '44 40 03 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 00 03 44 44 47 00 00 00 00 00 00 34 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 40 44'
+ '44 44 44 70 34 44 44 44 00 00 00 00 00 00 44 40'
+ '00 00 00 00 00 03 44 44 40 07 77 00 34 44 44 44'
+ '00 77 70 03 44 44 44 44 00 33 44 00 34 44 44 44'
+ '44 00 00 00 00 03 44 43 33 07 77 77 77 03 40 44'
+ '44 44 44 44 40 33 44 44 44 40 03 44 44 44 40 77'
+ '77 77 77 70 40 00 44 30 44 00 00 07 70 40 40 77'
+ '77 77 77 77 43 30 40 77 77 77 77 77 43 30 40 77'
+ '77 77 77 77 43 30 44 07 77 03 40 77 77 04 44 07'
+ '77 77 51 70 37 00 44 40 17 77 77 71 10 34 44 70'
+ '77 77 77 77 03 44 44 44 44 44 44 44 44 44 44 70'
+ '77 77 77 77 03 44 44 40 34 44 44 43 03 44 44 07'
+ '77 77 77 77 04 00 40 77 77 77 77 70 40 00 44 44'
+ '00 34 44 44 44 44 44 44 44 40 03 44 44 44 44 43'
+ '33 33 33 33 33 33 44 43 33 33 00 03 33 33 47 07'
+ '77 70 77 77 70 34 70 00 00 00 00 00 00 03 44 44'
+ '70 00 00 03 44 44 40 44 44 44 44 70 34 44 44 40'
+ '73 33 33 33 33 30 44 04 40 00 00 44 04 03 44 44'
+ '07 77 77 77 03 44 44 40 77 77 77 70 34 44 44 40'
+ '44 03 40 34 03 44 44 33 33 07 77 77 77 03 44 00'
+ '00 07 00 77 77 03 00 00 00 00 00 00 00 03 44 44'
+ '44 40 03 44 44 44 40 77 77 77 70 00 00 04 40 00'
+ '44 00 00 07 70 40 40 70 00 00 00 00 43 30 40 70'
+ '00 00 00 00 43 30 40 70 00 00 00 00 43 30 44 40'
+ '77 70 07 77 00 44 44 07 71 11 55 10 00 04 44 41'
+ '51 44 44 15 51 34 44 70 44 44 44 47 03 44 44 43'
+ '33 33 33 33 33 34 44 70 44 44 44 47 03 44 44 44'
+ '00 34 43 00 34 44 44 07 17 77 77 00 00 00 40 71'
+ '77 77 70 00 00 04 44 44 00 34 44 44 00 44 44 44'
+ '44 40 03 44 44 44 44 30 00 00 00 00 00 00 44 30'
+ '00 00 00 03 00 00 47 04 44 70 34 44 70 34 70 77'
+ '77 77 77 77 77 03 44 44 70 77 77 03 44 44 40 44'
+ '44 44 44 70 34 44 44 07 44 44 44 44 43 00 44 04'
+ '40 00 00 44 04 03 44 40 77 00 00 77 70 44 44 07'
+ '77 00 00 77 04 44 44 40 33 03 40 34 04 44 40 00'
+ '00 07 00 00 07 03 40 43 34 07 00 00 07 03 07 44'
+ '44 44 44 44 43 03 44 44 44 44 44 44 44 44 40 77'
+ '77 77 04 74 00 44 04 40 44 44 44 44 44 40 40 74'
+ '44 44 44 45 53 30 40 74 44 44 44 45 53 30 40 74'
+ '44 44 44 45 53 30 44 44 00 77 77 00 44 44 44 07'
+ '15 55 55 50 37 00 44 15 55 14 41 55 51 34 44 70'
+ '44 40 44 47 03 44 47 00 00 00 00 00 00 34 44 70'
+ '47 74 44 47 03 44 44 40 34 44 44 43 03 44 44 71'
+ '17 77 70 47 40 04 47 71 17 77 04 74 00 44 44 44'
+ '44 40 00 30 00 44 44 44 44 40 03 44 44 44 43 06'
+ '66 66 66 66 66 60 30 66 66 66 00 03 66 60 47 04'
+ '44 70 34 44 70 34 70 44 44 44 44 44 77 03 44 44'
+ '70 44 77 03 44 44 40 44 44 44 44 70 34 44 40 74'
+ '44 44 44 44 40 30 44 04 40 00 00 00 04 03 44 40'
+ '70 44 44 07 70 34 44 07 70 34 44 07 04 44 44 44'
+ '00 03 40 00 44 44 40 77 77 07 77 77 77 03 40 43'
+ '34 07 77 77 77 03 07 55 44 44 44 44 43 03 44 44'
+ '44 40 03 44 44 44 40 77 77 70 44 44 40 44 04 40'
+ '44 00 00 00 04 40 40 77 77 77 77 77 73 30 40 77'
+ '77 77 77 77 73 30 40 77 77 77 77 77 73 30 44 44'
+ '30 07 77 03 44 44 44 07 15 77 55 70 00 04 44 41'
+ '55 51 15 55 10 34 44 70 44 00 04 47 03 44 47 07'
+ '77 77 77 77 70 34 44 70 44 74 44 47 03 44 44 03'
+ '74 34 43 47 30 34 44 15 11 11 04 44 44 04 11 11'
+ '51 70 44 44 40 44 44 44 00 07 74 03 04 44 44 44'
+ '44 40 03 44 44 44 30 66 66 66 66 66 66 60 36 64'
+ '34 66 00 03 66 60 47 04 44 70 34 44 70 34 70 44'
+ '44 04 40 44 77 03 40 44 70 44 47 03 44 04 40 44'
+ '44 44 44 70 34 44 40 74 44 44 44 44 30 30 44 04'
+ '44 44 44 44 44 03 44 43 03 33 34 07 70 34 44 07'
+ '70 34 33 30 33 34 44 44 43 03 40 34 44 44 40 70'
+ '00 07 00 00 07 03 40 43 34 07 00 00 07 03 07 77'
+ '77 77 77 77 73 04 44 44 44 40 03 44 44 44 40 77'
+ '77 70 74 44 40 44 04 40 40 77 77 77 70 40 44 07'
+ '77 77 77 77 44 30 44 07 77 77 37 77 44 30 44 07'
+ '77 77 77 77 44 30 44 43 00 07 73 04 44 44 44 47'
+ '77 77 57 77 43 44 44 40 15 55 55 51 70 34 44 70'
+ '40 00 00 47 03 44 47 04 44 44 44 47 70 34 44 70'
+ '33 33 33 37 03 44 40 34 74 04 40 47 43 03 41 55'
+ '55 55 07 44 44 04 15 55 55 10 74 44 40 44 44 44'
+ '00 47 44 40 44 44 44 44 44 40 03 44 44 44 36 64'
+ '34 66 66 66 66 60 26 63 03 66 00 03 66 60 47 04'
+ '44 70 34 44 70 34 70 44 40 04 40 04 47 03 40 04'
+ '70 44 47 03 40 04 40 44 44 43 44 70 73 43 07 77'
+ '77 77 77 77 00 30 44 04 40 00 00 00 44 03 44 00'
+ '00 00 34 07 70 34 44 07 70 34 00 00 00 34 44 44'
+ '44 40 03 44 44 44 40 77 77 07 77 77 77 03 40 43'
+ '34 07 77 77 77 03 00 00 00 00 00 00 00 04 44 44'
+ '44 40 03 44 44 44 40 77 77 70 77 44 40 44 04 40'
+ '40 77 77 77 70 40 44 40 00 00 10 00 00 04 44 40'
+ '30 03 73 00 30 04 44 40 00 01 11 00 00 04 44 00'
+ '77 77 70 04 44 44 40 00 70 00 77 74 03 44 44 40'
+ '41 55 55 14 70 34 44 70 44 44 44 47 03 44 47 04'
+ '44 44 44 44 70 34 44 70 00 00 00 00 03 44 40 47'
+ '40 37 73 04 74 03 15 55 55 55 07 74 44 04 15 55'
+ '55 50 77 44 40 44 44 44 40 77 74 70 44 44 44 44'
+ '44 40 03 44 44 44 26 63 03 66 66 66 66 60 23 64'
+ '34 66 00 03 66 60 47 04 44 70 34 44 70 34 70 44'
+ '00 04 40 00 47 03 40 00 70 44 47 03 00 04 40 47'
+ '74 44 34 70 73 37 00 00 00 00 00 00 40 30 44 04'
+ '07 77 77 77 04 03 44 07 77 70 44 07 70 34 44 07'
+ '70 34 07 77 70 34 44 44 44 44 34 44 44 44 40 70'
+ '00 07 00 00 07 03 40 43 34 00 00 00 00 04 44 40'
+ '77 77 77 70 34 44 44 44 30 34 00 34 44 44 40 77'
+ '77 77 04 44 04 44 04 40 40 77 77 77 70 40 44 44'
+ '44 41 51 44 44 44 44 44 43 40 70 43 44 44 44 44'
+ '44 41 51 44 44 44 44 30 77 77 70 44 44 44 44 07'
+ '74 07 77 77 03 44 44 40 41 55 55 14 70 34 44 70'
+ '40 00 00 47 03 44 47 04 47 44 44 44 70 34 44 70'
+ '77 77 77 77 03 44 40 44 03 70 47 30 44 04 41 55'
+ '55 55 10 44 40 44 15 55 55 17 04 44 04 44 44 44'
+ '40 44 74 40 44 44 44 44 44 40 03 44 44 44 23 64'
+ '34 66 66 66 66 60 42 36 66 66 00 03 66 60 47 04'
+ '44 70 34 44 70 34 70 44 40 04 40 04 47 03 40 04'
+ '70 44 47 03 40 04 40 44 74 44 40 70 77 03 44 00'
+ '07 77 77 77 70 00 44 04 07 77 77 77 04 03 44 07'
+ '77 00 00 77 03 44 44 40 77 00 00 77 70 34 44 44'
+ '44 40 03 44 44 44 40 77 77 07 77 77 77 04 40 43'
+ '33 33 33 30 34 44 44 40 70 00 77 70 34 44 44 44'
+ '00 34 40 00 44 44 40 77 77 77 70 00 44 44 04 00'
+ '40 77 77 77 70 00 44 44 44 15 55 14 44 44 44 44'
+ '33 07 77 03 34 44 44 44 44 41 51 44 44 44 44 44'
+ '00 00 03 44 44 44 44 30 00 37 77 77 04 44 44 40'
+ '15 55 55 51 70 34 44 70 44 00 04 47 03 44 47 00'
+ '00 00 00 00 00 44 44 70 44 44 44 47 03 44 44 03'
+ '44 40 44 44 30 44 44 15 11 11 17 00 04 44 11 11'
+ '51 77 70 00 44 44 40 03 44 04 44 04 44 44 44 40'
+ '04 00 03 40 04 44 44 23 66 66 66 66 66 60 44 42'
+ '20 02 00 04 24 04 47 04 44 70 34 44 70 34 70 44'
+ '74 04 40 44 47 03 40 44 70 47 47 03 44 04 40 44'
+ '44 44 47 77 77 77 44 44 07 77 77 00 00 34 44 04'
+ '07 77 77 77 04 03 44 07 77 77 77 77 04 44 44 40'
+ '77 77 77 77 70 34 44 44 44 03 40 34 44 44 40 70'
+ '00 00 00 00 00 04 40 43 00 00 03 30 34 44 44 40'
+ '77 77 77 70 34 44 44 44 00 34 40 00 44 44 40 77'
+ '77 77 00 00 44 44 04 00 40 77 77 77 70 70 44 44'
+ '41 11 51 11 44 44 44 44 77 77 77 77 74 44 44 44'
+ '41 11 51 11 44 44 44 44 30 77 04 44 44 44 44 30'
+ '70 77 70 00 04 44 44 41 55 51 15 55 10 34 44 70'
+ '47 70 44 47 03 44 44 44 44 44 44 44 44 44 44 70'
+ '47 74 44 47 03 44 44 40 34 70 47 43 04 44 44 41'
+ '17 77 70 00 04 44 47 71 17 77 00 00 44 44 40 03'
+ '44 40 00 44 44 44 44 07 30 77 70 07 04 44 44 42'
+ '22 22 22 22 22 22 44 44 07 70 77 70 00 04 47 04'
+ '44 70 34 44 70 34 70 44 44 44 44 44 47 03 44 44'
+ '70 44 47 03 44 44 40 00 00 00 00 77 77 03 44 44'
+ '07 77 77 07 70 34 44 04 07 77 77 77 00 03 44 07'
+ '00 77 77 00 44 44 44 44 00 77 77 00 70 34 44 44'
+ '44 04 40 34 44 44 40 77 77 77 70 34 44 44 44 00'
+ '04 44 00 03 44 44 44 40 70 00 77 70 34 44 44 44'
+ '40 04 30 03 44 44 40 77 77 77 04 04 44 44 04 00'
+ '00 00 00 00 00 00 44 44 44 41 51 44 44 44 44 44'
+ '33 07 77 03 34 44 44 44 44 15 55 14 44 44 44 43'
+ '07 77 70 44 44 44 44 07 07 77 70 70 44 44 44 15'
+ '55 14 41 55 51 34 44 70 44 74 44 47 03 44 44 44'
+ '44 40 44 44 44 44 44 70 44 74 44 47 03 44 44 40'
+ '47 40 04 74 04 44 44 07 17 77 70 40 44 44 40 71'
+ '77 77 04 04 44 44 44 00 44 30 34 44 44 44 44 07'
+ '77 77 77 70 44 44 44 44 44 44 44 44 44 44 44 44'
+ '07 77 77 77 77 04 47 04 74 70 34 74 70 34 70 00'
+ '00 00 00 00 00 04 44 44 70 00 00 04 44 44 44 44'
+ '44 44 47 30 70 73 44 44 07 77 77 07 03 44 44 04'
+ '07 77 77 77 04 04 44 00 44 00 00 44 44 44 44 44'
+ '44 00 00 44 00 44 44 44 40 34 44 03 44 44 40 00'
+ '00 00 00 44 44 44 44 44 40 00 44 44 44 44 44 40'
+ '77 77 77 70 34 44 44 44 44 00 00 34 44 44 40 77'
+ '77 77 00 44 44 44 04 07 77 77 77 07 03 44 44 44'
+ '44 41 51 44 44 44 44 44 43 40 70 43 44 44 44 44'
+ '44 41 51 44 44 44 44 44 07 77 70 44 44 44 44 07'
+ '77 77 70 04 44 44 44 41 51 00 00 15 10 44 44 70'
+ '44 44 44 47 04 44 44 44 44 00 04 44 44 44 44 70'
+ '44 44 44 47 04 44 44 44 03 43 34 30 44 44 44 07'
+ '77 77 70 04 44 44 40 77 77 77 00 44 44 44 44 40'
+ '00 03 44 44 44 44 44 07 70 77 77 04 44 44 44 44'
+ '44 44 44 44 44 44 44 44 07 70 77 77 00 44 47 04'
+ '44 70 34 44 70 34 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 73 43 73 47 44 44'
+ '00 00 00 00 34 44 44 00 00 00 00 00 00 04 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 44 44 03 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 00 44 44 44 44 44 40 00 00 00 00 44 44 44 44'
+ '44 44 44 44 44 44 40 00 00 00 04 44 44 44 00 00'
+ '00 00 00 00 04 44 44 44 44 41 11 44 44 44 44 44'
+ '34 43 73 44 34 44 44 44 44 44 14 44 44 44 44 44'
+ '30 77 04 44 44 44 44 00 00 00 00 44 44 44 44 44'
+ '14 44 44 41 44 44 44 70 00 00 00 00 04 44 44 44'
+ '40 00 00 44 44 44 44 70 00 00 00 00 04 44 44 44'
+ '40 00 00 04 44 44 44 00 00 00 00 44 44 44 40 00'
+ '00 00 04 44 44 44 44 44 44 44 44 44 44 44 44 40'
+ '04 00 00 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 04 00 00 44 44 47 00 00 00 00 00 00 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+}
+
+
+/* BINRES images.bmp */
+IMAGES BITMAP // DISCARDABLE //LOADONCALL
+{
+ '42 4D FE 0E 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 F0 01 00 00 0F 00 00 00 01 00 04 00 00 00'
+ '00 00 88 0E 00 00 00 00 00 00 00 00 00 00 10 00'
+ '00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '80 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF'
+ 'FF 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 44 44 33 33 33 33 34 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '43 33 33 33 33 33 44 44 33 33 33 33 33 44 44 44'
+ '33 33 33 33 33 44 44 44 33 33 33 33 33 44 44 43'
+ '34 44 44 44 30 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 00 00 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 43 33 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 40 00'
+ '00 00 00 00 34 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 43 33 44 44 44 44 44'
+ '44 33 33 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 33 33 33 33 44 43'
+ '33 33 33 33 33 34 44 44 44 44 44 44 44 44 44 44'
+ '33 33 33 33 34 44 44 44 00 00 00 00 00 00 44 00'
+ '00 00 00 00 00 34 44 00 00 00 00 00 00 34 44 00'
+ '00 00 00 00 00 34 44 30 00 44 44 30 00 34 44 44'
+ '43 33 33 34 44 44 44 44 44 33 33 33 33 34 44 44'
+ '43 33 33 33 33 44 44 44 44 00 04 44 44 44 44 44'
+ '43 33 33 33 33 44 44 44 33 33 33 33 33 44 44 44'
+ '43 33 33 33 33 44 44 44 33 33 33 33 34 44 44 44'
+ '44 44 44 44 44 44 44 44 44 43 33 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 00 03 44 44 44 44'
+ '33 33 33 33 33 34 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 40 77 77 77 77 70 34 44 44 44'
+ '43 33 33 33 33 33 44 44 33 33 33 33 33 33 44 44'
+ '44 40 00 33 44 44 44 44 43 00 03 34 44 44 44 44'
+ '33 44 44 33 44 44 44 44 44 44 33 33 33 33 44 44'
+ '44 00 00 00 00 03 40 00 00 00 00 00 00 34 44 44'
+ '44 44 33 44 44 44 40 00 00 00 00 00 44 00 44 40'
+ '44 00 00 07 70 40 40 43 33 33 33 33 33 03 40 43'
+ '33 33 33 33 33 03 40 43 33 33 33 33 33 03 44 07'
+ '70 34 43 07 77 04 44 00 00 00 10 40 00 04 44 40'
+ '00 00 00 00 00 34 44 70 00 00 00 00 03 44 44 44'
+ '44 40 44 44 44 44 44 70 00 00 00 00 03 44 44 40'
+ '00 00 00 00 03 44 44 00 00 00 00 00 04 40 40 00'
+ '00 00 00 00 44 00 44 44 43 34 44 44 44 44 44 44'
+ '44 40 03 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 00 03 44 44 47 00 00 00 00 00 00 34 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 40 44'
+ '44 44 44 70 34 44 44 44 00 00 00 00 00 00 44 40'
+ '00 00 00 00 00 03 44 44 40 07 77 00 34 44 44 44'
+ '00 77 70 03 44 44 44 44 00 33 44 00 34 44 44 44'
+ '44 00 00 00 00 03 44 43 33 07 77 77 77 03 40 44'
+ '44 44 44 44 40 33 44 44 44 40 03 44 44 44 40 77'
+ '77 77 77 70 40 00 44 30 44 00 00 07 70 40 40 77'
+ '77 77 77 77 43 30 40 77 77 77 77 77 43 30 40 77'
+ '77 77 77 77 43 30 44 07 77 03 40 77 77 04 44 07'
+ '77 77 51 70 37 00 44 40 17 77 77 71 10 34 44 70'
+ '77 77 77 77 03 44 44 44 44 44 44 44 44 44 44 70'
+ '77 77 77 77 03 44 44 40 34 44 44 43 03 44 44 07'
+ '77 77 77 77 04 00 40 77 77 77 77 70 40 00 44 44'
+ '00 34 44 44 44 44 44 44 44 40 03 44 44 44 44 43'
+ '33 33 33 33 33 33 44 43 33 33 00 03 33 33 47 07'
+ '77 70 77 77 70 34 70 00 00 00 00 00 00 03 44 44'
+ '70 00 00 03 44 44 40 44 44 44 44 70 34 44 44 40'
+ '73 33 33 33 33 30 44 04 40 00 00 44 04 03 44 44'
+ '07 77 77 77 03 44 44 40 77 77 77 70 34 44 44 40'
+ '44 03 40 34 03 44 44 33 33 07 77 77 77 03 44 00'
+ '00 07 00 77 77 03 00 00 00 00 00 00 00 03 44 44'
+ '44 40 03 44 44 44 40 77 77 77 70 00 00 04 40 00'
+ '44 00 00 07 70 40 40 70 00 00 00 00 43 30 40 70'
+ '00 00 00 00 43 30 40 70 00 00 00 00 43 30 44 40'
+ '77 70 07 77 00 44 44 07 71 11 55 10 00 04 44 41'
+ '51 44 44 15 51 34 44 70 44 44 44 47 03 44 44 43'
+ '33 33 33 33 33 34 44 70 44 44 44 47 03 44 44 44'
+ '00 34 43 00 34 44 44 07 17 77 77 00 00 00 40 71'
+ '77 77 70 00 00 04 44 44 00 34 44 44 00 44 44 44'
+ '44 40 03 44 44 44 44 30 00 00 00 00 00 00 44 30'
+ '00 00 00 03 00 00 47 04 44 70 34 44 70 34 70 77'
+ '77 77 77 77 77 03 44 44 70 77 77 03 44 44 40 44'
+ '44 44 44 70 34 44 44 07 44 44 44 44 43 00 44 04'
+ '40 00 00 44 04 03 44 40 77 00 00 77 70 44 44 07'
+ '77 00 00 77 04 44 44 40 33 03 40 34 04 44 40 00'
+ '00 07 00 00 07 03 40 43 34 07 00 00 07 03 07 44'
+ '44 44 44 44 43 03 44 44 44 44 44 44 44 44 40 77'
+ '77 77 04 74 00 44 04 40 44 44 44 44 44 40 40 74'
+ '44 44 44 45 53 30 40 74 44 44 44 45 53 30 40 74'
+ '44 44 44 45 53 30 44 44 00 77 77 00 44 44 44 07'
+ '15 55 55 50 37 00 44 15 55 14 41 55 51 34 44 70'
+ '44 40 44 47 03 44 47 00 00 00 00 00 00 34 44 70'
+ '47 74 44 47 03 44 44 40 34 44 44 43 03 44 44 71'
+ '17 77 70 47 40 04 47 71 17 77 04 74 00 44 44 44'
+ '44 40 00 30 00 44 44 44 44 40 03 44 44 44 43 06'
+ '66 66 66 66 66 60 30 66 66 66 00 03 66 60 47 04'
+ '44 70 34 44 70 34 70 44 44 44 44 44 77 03 44 44'
+ '70 44 77 03 44 44 40 44 44 44 44 70 34 44 40 74'
+ '44 44 44 44 40 30 44 04 40 00 00 00 04 03 44 40'
+ '70 44 44 07 70 34 44 07 70 34 44 07 04 44 44 44'
+ '00 03 40 00 44 44 40 77 77 07 77 77 77 03 40 43'
+ '34 07 77 77 77 03 07 55 44 44 44 44 43 03 44 44'
+ '44 40 03 44 44 44 40 77 77 70 44 44 40 44 04 40'
+ '44 00 00 00 04 40 40 77 77 77 77 77 73 30 40 77'
+ '77 77 77 77 73 30 40 77 77 77 77 77 73 30 44 44'
+ '30 07 77 03 44 44 44 07 15 77 55 70 00 04 44 41'
+ '55 51 15 55 10 34 44 70 44 00 04 47 03 44 47 07'
+ '77 77 77 77 70 34 44 70 44 74 44 47 03 44 44 03'
+ '74 34 43 47 30 34 44 15 11 11 04 44 44 04 11 11'
+ '51 70 44 44 40 44 44 44 00 07 74 03 04 44 44 44'
+ '44 40 03 44 44 44 30 66 66 66 66 66 66 60 36 64'
+ '34 66 00 03 66 60 47 04 44 70 34 44 70 34 70 44'
+ '44 04 40 44 77 03 40 44 70 44 47 03 44 04 40 44'
+ '44 44 44 70 34 44 40 74 44 44 44 44 30 30 44 04'
+ '44 44 44 44 44 03 44 43 03 33 34 07 70 34 44 07'
+ '70 34 33 30 33 34 44 44 43 03 40 34 44 44 40 70'
+ '00 07 00 00 07 03 40 43 34 07 00 00 07 03 07 77'
+ '77 77 77 77 73 04 44 44 44 40 03 44 44 44 40 77'
+ '77 70 74 44 40 44 04 40 40 77 77 77 70 40 44 07'
+ '77 77 77 77 44 30 44 07 77 77 37 77 44 30 44 07'
+ '77 77 77 77 44 30 44 43 00 07 73 04 44 44 44 47'
+ '77 77 57 77 43 44 44 40 15 55 55 51 70 34 44 70'
+ '40 00 00 47 03 44 47 04 44 44 44 47 70 34 44 70'
+ '33 33 33 37 03 44 40 34 74 04 40 47 43 03 41 55'
+ '55 55 07 44 44 04 15 55 55 10 74 44 40 44 44 44'
+ '00 47 44 40 44 44 44 44 44 40 03 44 44 44 36 64'
+ '34 66 66 66 66 60 26 63 03 66 00 03 66 60 47 04'
+ '44 70 34 44 70 34 70 44 40 04 40 04 47 03 40 04'
+ '70 44 47 03 40 04 40 44 44 43 44 70 73 43 07 77'
+ '77 77 77 77 00 30 44 04 40 00 00 00 44 03 44 00'
+ '00 00 34 07 70 34 44 07 70 34 00 00 00 34 44 44'
+ '44 40 03 44 44 44 40 77 77 07 77 77 77 03 40 43'
+ '34 07 77 77 77 03 00 00 00 00 00 00 00 04 44 44'
+ '44 40 03 44 44 44 40 77 77 70 77 44 40 44 04 40'
+ '40 77 77 77 70 40 44 40 00 00 10 00 00 04 44 40'
+ '30 03 73 00 30 04 44 40 00 01 11 00 00 04 44 00'
+ '77 77 70 04 44 44 40 00 70 00 77 74 03 44 44 40'
+ '41 55 55 14 70 34 44 70 44 44 44 47 03 44 47 04'
+ '44 44 44 44 70 34 44 70 00 00 00 00 03 44 40 47'
+ '40 37 73 04 74 03 15 55 55 55 07 74 44 04 15 55'
+ '55 50 77 44 40 44 44 44 40 77 74 70 44 44 44 44'
+ '44 40 03 44 44 44 26 63 03 66 66 66 66 60 23 64'
+ '34 66 00 03 66 60 47 04 44 70 34 44 70 34 70 44'
+ '00 04 40 00 47 03 40 00 70 44 47 03 00 04 40 47'
+ '74 44 34 70 73 37 00 00 00 00 00 00 40 30 44 04'
+ '07 77 77 77 04 03 44 07 77 70 44 07 70 34 44 07'
+ '70 34 07 77 70 34 44 44 44 44 34 44 44 44 40 70'
+ '00 07 00 00 07 03 40 43 34 00 00 00 00 04 44 40'
+ '77 77 77 70 34 44 44 44 30 34 00 34 44 44 40 77'
+ '77 77 04 44 04 44 04 40 40 77 77 77 70 40 44 44'
+ '44 41 51 44 44 44 44 44 43 40 70 43 44 44 44 44'
+ '44 41 51 44 44 44 44 30 77 77 70 44 44 44 44 07'
+ '74 07 77 77 03 44 44 40 41 55 55 14 70 34 44 70'
+ '40 00 00 47 03 44 47 04 47 44 44 44 70 34 44 70'
+ '77 77 77 77 03 44 40 44 03 70 47 30 44 04 41 55'
+ '55 55 10 44 40 44 15 55 55 17 04 44 04 44 44 44'
+ '40 44 74 40 44 44 44 44 44 40 03 44 44 44 23 64'
+ '34 66 66 66 66 60 42 36 66 66 00 03 66 60 47 04'
+ '44 70 34 44 70 34 70 44 40 04 40 04 47 03 40 04'
+ '70 44 47 03 40 04 40 44 74 44 40 70 77 03 44 00'
+ '07 77 77 77 70 00 44 04 07 77 77 77 04 03 44 07'
+ '77 00 00 77 03 44 44 40 77 00 00 77 70 34 44 44'
+ '44 40 03 44 44 44 40 77 77 07 77 77 77 04 40 43'
+ '33 33 33 30 34 44 44 40 70 00 77 70 34 44 44 44'
+ '00 34 40 00 44 44 40 77 77 77 70 00 44 44 04 00'
+ '40 77 77 77 70 00 44 44 44 15 55 14 44 44 44 44'
+ '33 07 77 03 34 44 44 44 44 41 51 44 44 44 44 44'
+ '00 00 03 44 44 44 44 30 00 37 77 77 04 44 44 40'
+ '15 55 55 51 70 34 44 70 44 00 04 47 03 44 47 00'
+ '00 00 00 00 00 44 44 70 44 44 44 47 03 44 44 03'
+ '44 40 44 44 30 44 44 15 11 11 17 00 04 44 11 11'
+ '51 77 70 00 44 44 40 03 44 04 44 04 44 44 44 40'
+ '04 00 03 40 04 44 44 23 66 66 66 66 66 60 44 42'
+ '20 02 00 04 24 04 47 04 44 70 34 44 70 34 70 44'
+ '74 04 40 44 47 03 40 44 70 47 47 03 44 04 40 44'
+ '44 44 47 77 77 77 44 44 07 77 77 00 00 34 44 04'
+ '07 77 77 77 04 03 44 07 77 77 77 77 04 44 44 40'
+ '77 77 77 77 70 34 44 44 44 03 40 34 44 44 40 70'
+ '00 00 00 00 00 04 40 43 00 00 03 30 34 44 44 40'
+ '77 77 77 70 34 44 44 44 00 34 40 00 44 44 40 77'
+ '77 77 00 00 44 44 04 00 40 77 77 77 70 70 44 44'
+ '41 11 51 11 44 44 44 44 77 77 77 77 74 44 44 44'
+ '41 11 51 11 44 44 44 44 30 77 04 44 44 44 44 30'
+ '70 77 70 00 04 44 44 41 55 51 15 55 10 34 44 70'
+ '47 70 44 47 03 44 44 44 44 44 44 44 44 44 44 70'
+ '47 74 44 47 03 44 44 40 34 70 47 43 04 44 44 41'
+ '17 77 70 00 04 44 47 71 17 77 00 00 44 44 40 03'
+ '44 40 00 44 44 44 44 07 30 77 70 07 04 44 44 42'
+ '22 22 22 22 22 22 44 44 07 70 77 70 00 04 47 04'
+ '44 70 34 44 70 34 70 44 44 44 44 44 47 03 44 44'
+ '70 44 47 03 44 44 40 00 00 00 00 77 77 03 44 44'
+ '07 77 77 07 70 34 44 04 07 77 77 77 00 03 44 07'
+ '00 77 77 00 44 44 44 44 00 77 77 00 70 34 44 44'
+ '44 04 40 34 44 44 40 77 77 77 70 34 44 44 44 00'
+ '04 44 00 03 44 44 44 40 70 00 77 70 34 44 44 44'
+ '40 04 30 03 44 44 40 77 77 77 04 04 44 44 04 00'
+ '00 00 00 00 00 00 44 44 44 41 51 44 44 44 44 44'
+ '33 07 77 03 34 44 44 44 44 15 55 14 44 44 44 43'
+ '07 77 70 44 44 44 44 07 07 77 70 70 44 44 44 15'
+ '55 14 41 55 51 34 44 70 44 74 44 47 03 44 44 44'
+ '44 40 44 44 44 44 44 70 44 74 44 47 03 44 44 40'
+ '47 40 04 74 04 44 44 07 17 77 70 40 44 44 40 71'
+ '77 77 04 04 44 44 44 00 44 30 34 44 44 44 44 07'
+ '77 77 77 70 44 44 44 44 44 44 44 44 44 44 44 44'
+ '07 77 77 77 77 04 47 04 74 70 34 74 70 34 70 00'
+ '00 00 00 00 00 04 44 44 70 00 00 04 44 44 44 44'
+ '44 44 47 30 70 73 44 44 07 77 77 07 03 44 44 04'
+ '07 77 77 77 04 04 44 00 44 00 00 44 44 44 44 44'
+ '44 00 00 44 00 44 44 44 40 34 44 03 44 44 40 00'
+ '00 00 00 44 44 44 44 44 40 00 44 44 44 44 44 40'
+ '77 77 77 70 34 44 44 44 44 00 00 34 44 44 40 77'
+ '77 77 00 44 44 44 04 07 77 77 77 07 03 44 44 44'
+ '44 41 51 44 44 44 44 44 43 40 70 43 44 44 44 44'
+ '44 41 51 44 44 44 44 44 07 77 70 44 44 44 44 07'
+ '77 77 70 04 44 44 44 41 51 00 00 15 10 44 44 70'
+ '44 44 44 47 04 44 44 44 44 00 04 44 44 44 44 70'
+ '44 44 44 47 04 44 44 44 03 43 34 30 44 44 44 07'
+ '77 77 70 04 44 44 40 77 77 77 00 44 44 44 44 40'
+ '00 03 44 44 44 44 44 07 70 77 77 04 44 44 44 44'
+ '44 44 44 44 44 44 44 44 07 70 77 77 00 44 47 04'
+ '44 70 34 44 70 34 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 73 43 73 47 44 44'
+ '00 00 00 00 34 44 44 00 00 00 00 00 00 04 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 44 44 03 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 00 44 44 44 44 44 40 00 00 00 00 44 44 44 44'
+ '44 44 44 44 44 44 40 00 00 00 04 44 44 44 00 00'
+ '00 00 00 00 04 44 44 44 44 41 11 44 44 44 44 44'
+ '34 43 73 44 34 44 44 44 44 44 14 44 44 44 44 44'
+ '30 77 04 44 44 44 44 00 00 00 00 44 44 44 44 44'
+ '14 44 44 41 44 44 44 70 00 00 00 00 04 44 44 44'
+ '40 00 00 44 44 44 44 70 00 00 00 00 04 44 44 44'
+ '40 00 00 04 44 44 44 00 00 00 00 44 44 44 40 00'
+ '00 00 04 44 44 44 44 44 44 44 44 44 44 44 44 40'
+ '04 00 00 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 04 00 00 44 44 47 00 00 00 00 00 00 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+}
+
+/* BINRES toolbar.bmp */
+TOOLBAR BITMAP // DISCARDABLE // LOADONCALL
+{
+ '42 4D FE 0E 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 F0 01 00 00 0F 00 00 00 01 00 04 00 00 00'
+ '00 00 88 0E 00 00 00 00 00 00 00 00 00 00 10 00'
+ '00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '80 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF'
+ 'FF 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 44 44 33 33 33 33 34 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '43 33 33 33 33 33 44 44 33 33 33 33 33 44 44 44'
+ '33 33 33 33 33 44 44 44 33 33 33 33 33 44 44 43'
+ '34 44 44 44 30 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 00 00 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 43 33 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 40 00'
+ '00 00 00 00 34 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 43 33 44 44 44 44 44'
+ '44 33 33 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 33 33 33 33 44 43'
+ '33 33 33 33 33 34 44 44 44 44 44 44 44 44 44 44'
+ '33 33 33 33 34 44 44 44 00 00 00 00 00 00 44 00'
+ '00 00 00 00 00 34 44 00 00 00 00 00 00 34 44 00'
+ '00 00 00 00 00 34 44 30 00 44 44 30 00 34 44 44'
+ '43 33 33 34 44 44 44 44 44 33 33 33 33 34 44 44'
+ '43 33 33 33 33 44 44 44 44 00 04 44 44 44 44 44'
+ '43 33 33 33 33 44 44 44 33 33 33 33 33 44 44 44'
+ '43 33 33 33 33 44 44 44 33 33 33 33 34 44 44 44'
+ '44 44 44 44 44 44 44 44 44 43 33 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 00 03 44 44 44 44'
+ '33 33 33 33 33 34 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 40 77 77 77 77 70 34 44 44 44'
+ '43 33 33 33 33 33 44 44 33 33 33 33 33 33 44 44'
+ '44 40 00 33 44 44 44 44 43 00 03 34 44 44 44 44'
+ '33 44 44 33 44 44 44 44 44 44 33 33 33 33 44 44'
+ '44 00 00 00 00 03 40 00 00 00 00 00 00 34 44 44'
+ '44 44 33 44 44 44 40 00 00 00 00 00 44 00 44 40'
+ '44 00 00 07 70 40 40 43 33 33 33 33 33 03 40 43'
+ '33 33 33 33 33 03 40 43 33 33 33 33 33 03 44 07'
+ '70 34 43 07 77 04 44 00 00 00 10 40 00 04 44 40'
+ '00 00 00 00 00 34 44 70 00 00 00 00 03 44 44 44'
+ '44 40 44 44 44 44 44 70 00 00 00 00 03 44 44 40'
+ '00 00 00 00 03 44 44 00 00 00 00 00 04 40 40 00'
+ '00 00 00 00 44 00 44 44 43 34 44 44 44 44 44 44'
+ '44 40 03 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '44 44 00 03 44 44 47 00 00 00 00 00 00 34 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 40 44'
+ '44 44 44 70 34 44 44 44 00 00 00 00 00 00 44 40'
+ '00 00 00 00 00 03 44 44 40 07 77 00 34 44 44 44'
+ '00 77 70 03 44 44 44 44 00 33 44 00 34 44 44 44'
+ '44 00 00 00 00 03 44 43 33 07 77 77 77 03 40 44'
+ '44 44 44 44 40 33 44 44 44 40 03 44 44 44 40 77'
+ '77 77 77 70 40 00 44 30 44 00 00 07 70 40 40 77'
+ '77 77 77 77 43 30 40 77 77 77 77 77 43 30 40 77'
+ '77 77 77 77 43 30 44 07 77 03 40 77 77 04 44 07'
+ '77 77 51 70 37 00 44 40 17 77 77 71 10 34 44 70'
+ '77 77 77 77 03 44 44 44 44 44 44 44 44 44 44 70'
+ '77 77 77 77 03 44 44 40 34 44 44 43 03 44 44 07'
+ '77 77 77 77 04 00 40 77 77 77 77 70 40 00 44 44'
+ '00 34 44 44 44 44 44 44 44 40 03 44 44 44 44 43'
+ '33 33 33 33 33 33 44 43 33 33 00 03 33 33 47 07'
+ '77 70 77 77 70 34 70 00 00 00 00 00 00 03 44 44'
+ '70 00 00 03 44 44 40 44 44 44 44 70 34 44 44 40'
+ '73 33 33 33 33 30 44 04 40 00 00 44 04 03 44 44'
+ '07 77 77 77 03 44 44 40 77 77 77 70 34 44 44 40'
+ '44 03 40 34 03 44 44 33 33 07 77 77 77 03 44 00'
+ '00 07 00 77 77 03 00 00 00 00 00 00 00 03 44 44'
+ '44 40 03 44 44 44 40 77 77 77 70 00 00 04 40 00'
+ '44 00 00 07 70 40 40 70 00 00 00 00 43 30 40 70'
+ '00 00 00 00 43 30 40 70 00 00 00 00 43 30 44 40'
+ '77 70 07 77 00 44 44 07 71 11 55 10 00 04 44 41'
+ '51 44 44 15 51 34 44 70 44 44 44 47 03 44 44 43'
+ '33 33 33 33 33 34 44 70 44 44 44 47 03 44 44 44'
+ '00 34 43 00 34 44 44 07 17 77 77 00 00 00 40 71'
+ '77 77 70 00 00 04 44 44 00 34 44 44 00 44 44 44'
+ '44 40 03 44 44 44 44 30 00 00 00 00 00 00 44 30'
+ '00 00 00 03 00 00 47 04 44 70 34 44 70 34 70 77'
+ '77 77 77 77 77 03 44 44 70 77 77 03 44 44 40 44'
+ '44 44 44 70 34 44 44 07 44 44 44 44 43 00 44 04'
+ '40 00 00 44 04 03 44 40 77 00 00 77 70 44 44 07'
+ '77 00 00 77 04 44 44 40 33 03 40 34 04 44 40 00'
+ '00 07 00 00 07 03 40 43 34 07 00 00 07 03 07 44'
+ '44 44 44 44 43 03 44 44 44 44 44 44 44 44 40 77'
+ '77 77 04 74 00 44 04 40 44 44 44 44 44 40 40 74'
+ '44 44 44 45 53 30 40 74 44 44 44 45 53 30 40 74'
+ '44 44 44 45 53 30 44 44 00 77 77 00 44 44 44 07'
+ '15 55 55 50 37 00 44 15 55 14 41 55 51 34 44 70'
+ '44 40 44 47 03 44 47 00 00 00 00 00 00 34 44 70'
+ '47 74 44 47 03 44 44 40 34 44 44 43 03 44 44 71'
+ '17 77 70 47 40 04 47 71 17 77 04 74 00 44 44 44'
+ '44 40 00 30 00 44 44 44 44 40 03 44 44 44 43 06'
+ '66 66 66 66 66 60 30 66 66 66 00 03 66 60 47 04'
+ '44 70 34 44 70 34 70 44 44 44 44 44 77 03 44 44'
+ '70 44 77 03 44 44 40 44 44 44 44 70 34 44 40 74'
+ '44 44 44 44 40 30 44 04 40 00 00 00 04 03 44 40'
+ '70 44 44 07 70 34 44 07 70 34 44 07 04 44 44 44'
+ '00 03 40 00 44 44 40 77 77 07 77 77 77 03 40 43'
+ '34 07 77 77 77 03 07 55 44 44 44 44 43 03 44 44'
+ '44 40 03 44 44 44 40 77 77 70 44 44 40 44 04 40'
+ '44 00 00 00 04 40 40 77 77 77 77 77 73 30 40 77'
+ '77 77 77 77 73 30 40 77 77 77 77 77 73 30 44 44'
+ '30 07 77 03 44 44 44 07 15 77 55 70 00 04 44 41'
+ '55 51 15 55 10 34 44 70 44 00 04 47 03 44 47 07'
+ '77 77 77 77 70 34 44 70 44 74 44 47 03 44 44 03'
+ '74 34 43 47 30 34 44 15 11 11 04 44 44 04 11 11'
+ '51 70 44 44 40 44 44 44 00 07 74 03 04 44 44 44'
+ '44 40 03 44 44 44 30 66 66 66 66 66 66 60 36 64'
+ '34 66 00 03 66 60 47 04 44 70 34 44 70 34 70 44'
+ '44 04 40 44 77 03 40 44 70 44 47 03 44 04 40 44'
+ '44 44 44 70 34 44 40 74 44 44 44 44 30 30 44 04'
+ '44 44 44 44 44 03 44 43 03 33 34 07 70 34 44 07'
+ '70 34 33 30 33 34 44 44 43 03 40 34 44 44 40 70'
+ '00 07 00 00 07 03 40 43 34 07 00 00 07 03 07 77'
+ '77 77 77 77 73 04 44 44 44 40 03 44 44 44 40 77'
+ '77 70 74 44 40 44 04 40 40 77 77 77 70 40 44 07'
+ '77 77 77 77 44 30 44 07 77 77 37 77 44 30 44 07'
+ '77 77 77 77 44 30 44 43 00 07 73 04 44 44 44 47'
+ '77 77 57 77 43 44 44 40 15 55 55 51 70 34 44 70'
+ '40 00 00 47 03 44 47 04 44 44 44 47 70 34 44 70'
+ '33 33 33 37 03 44 40 34 74 04 40 47 43 03 41 55'
+ '55 55 07 44 44 04 15 55 55 10 74 44 40 44 44 44'
+ '00 47 44 40 44 44 44 44 44 40 03 44 44 44 36 64'
+ '34 66 66 66 66 60 26 63 03 66 00 03 66 60 47 04'
+ '44 70 34 44 70 34 70 44 40 04 40 04 47 03 40 04'
+ '70 44 47 03 40 04 40 44 44 43 44 70 73 43 07 77'
+ '77 77 77 77 00 30 44 04 40 00 00 00 44 03 44 00'
+ '00 00 34 07 70 34 44 07 70 34 00 00 00 34 44 44'
+ '44 40 03 44 44 44 40 77 77 07 77 77 77 03 40 43'
+ '34 07 77 77 77 03 00 00 00 00 00 00 00 04 44 44'
+ '44 40 03 44 44 44 40 77 77 70 77 44 40 44 04 40'
+ '40 77 77 77 70 40 44 40 00 00 10 00 00 04 44 40'
+ '30 03 73 00 30 04 44 40 00 01 11 00 00 04 44 00'
+ '77 77 70 04 44 44 40 00 70 00 77 74 03 44 44 40'
+ '41 55 55 14 70 34 44 70 44 44 44 47 03 44 47 04'
+ '44 44 44 44 70 34 44 70 00 00 00 00 03 44 40 47'
+ '40 37 73 04 74 03 15 55 55 55 07 74 44 04 15 55'
+ '55 50 77 44 40 44 44 44 40 77 74 70 44 44 44 44'
+ '44 40 03 44 44 44 26 63 03 66 66 66 66 60 23 64'
+ '34 66 00 03 66 60 47 04 44 70 34 44 70 34 70 44'
+ '00 04 40 00 47 03 40 00 70 44 47 03 00 04 40 47'
+ '74 44 34 70 73 37 00 00 00 00 00 00 40 30 44 04'
+ '07 77 77 77 04 03 44 07 77 70 44 07 70 34 44 07'
+ '70 34 07 77 70 34 44 44 44 44 34 44 44 44 40 70'
+ '00 07 00 00 07 03 40 43 34 00 00 00 00 04 44 40'
+ '77 77 77 70 34 44 44 44 30 34 00 34 44 44 40 77'
+ '77 77 04 44 04 44 04 40 40 77 77 77 70 40 44 44'
+ '44 41 51 44 44 44 44 44 43 40 70 43 44 44 44 44'
+ '44 41 51 44 44 44 44 30 77 77 70 44 44 44 44 07'
+ '74 07 77 77 03 44 44 40 41 55 55 14 70 34 44 70'
+ '40 00 00 47 03 44 47 04 47 44 44 44 70 34 44 70'
+ '77 77 77 77 03 44 40 44 03 70 47 30 44 04 41 55'
+ '55 55 10 44 40 44 15 55 55 17 04 44 04 44 44 44'
+ '40 44 74 40 44 44 44 44 44 40 03 44 44 44 23 64'
+ '34 66 66 66 66 60 42 36 66 66 00 03 66 60 47 04'
+ '44 70 34 44 70 34 70 44 40 04 40 04 47 03 40 04'
+ '70 44 47 03 40 04 40 44 74 44 40 70 77 03 44 00'
+ '07 77 77 77 70 00 44 04 07 77 77 77 04 03 44 07'
+ '77 00 00 77 03 44 44 40 77 00 00 77 70 34 44 44'
+ '44 40 03 44 44 44 40 77 77 07 77 77 77 04 40 43'
+ '33 33 33 30 34 44 44 40 70 00 77 70 34 44 44 44'
+ '00 34 40 00 44 44 40 77 77 77 70 00 44 44 04 00'
+ '40 77 77 77 70 00 44 44 44 15 55 14 44 44 44 44'
+ '33 07 77 03 34 44 44 44 44 41 51 44 44 44 44 44'
+ '00 00 03 44 44 44 44 30 00 37 77 77 04 44 44 40'
+ '15 55 55 51 70 34 44 70 44 00 04 47 03 44 47 00'
+ '00 00 00 00 00 44 44 70 44 44 44 47 03 44 44 03'
+ '44 40 44 44 30 44 44 15 11 11 17 00 04 44 11 11'
+ '51 77 70 00 44 44 40 03 44 04 44 04 44 44 44 40'
+ '04 00 03 40 04 44 44 23 66 66 66 66 66 60 44 42'
+ '20 02 00 04 24 04 47 04 44 70 34 44 70 34 70 44'
+ '74 04 40 44 47 03 40 44 70 47 47 03 44 04 40 44'
+ '44 44 47 77 77 77 44 44 07 77 77 00 00 34 44 04'
+ '07 77 77 77 04 03 44 07 77 77 77 77 04 44 44 40'
+ '77 77 77 77 70 34 44 44 44 03 40 34 44 44 40 70'
+ '00 00 00 00 00 04 40 43 00 00 03 30 34 44 44 40'
+ '77 77 77 70 34 44 44 44 00 34 40 00 44 44 40 77'
+ '77 77 00 00 44 44 04 00 40 77 77 77 70 70 44 44'
+ '41 11 51 11 44 44 44 44 77 77 77 77 74 44 44 44'
+ '41 11 51 11 44 44 44 44 30 77 04 44 44 44 44 30'
+ '70 77 70 00 04 44 44 41 55 51 15 55 10 34 44 70'
+ '47 70 44 47 03 44 44 44 44 44 44 44 44 44 44 70'
+ '47 74 44 47 03 44 44 40 34 70 47 43 04 44 44 41'
+ '17 77 70 00 04 44 47 71 17 77 00 00 44 44 40 03'
+ '44 40 00 44 44 44 44 07 30 77 70 07 04 44 44 42'
+ '22 22 22 22 22 22 44 44 07 70 77 70 00 04 47 04'
+ '44 70 34 44 70 34 70 44 44 44 44 44 47 03 44 44'
+ '70 44 47 03 44 44 40 00 00 00 00 77 77 03 44 44'
+ '07 77 77 07 70 34 44 04 07 77 77 77 00 03 44 07'
+ '00 77 77 00 44 44 44 44 00 77 77 00 70 34 44 44'
+ '44 04 40 34 44 44 40 77 77 77 70 34 44 44 44 00'
+ '04 44 00 03 44 44 44 40 70 00 77 70 34 44 44 44'
+ '40 04 30 03 44 44 40 77 77 77 04 04 44 44 04 00'
+ '00 00 00 00 00 00 44 44 44 41 51 44 44 44 44 44'
+ '33 07 77 03 34 44 44 44 44 15 55 14 44 44 44 43'
+ '07 77 70 44 44 44 44 07 07 77 70 70 44 44 44 15'
+ '55 14 41 55 51 34 44 70 44 74 44 47 03 44 44 44'
+ '44 40 44 44 44 44 44 70 44 74 44 47 03 44 44 40'
+ '47 40 04 74 04 44 44 07 17 77 70 40 44 44 40 71'
+ '77 77 04 04 44 44 44 00 44 30 34 44 44 44 44 07'
+ '77 77 77 70 44 44 44 44 44 44 44 44 44 44 44 44'
+ '07 77 77 77 77 04 47 04 74 70 34 74 70 34 70 00'
+ '00 00 00 00 00 04 44 44 70 00 00 04 44 44 44 44'
+ '44 44 47 30 70 73 44 44 07 77 77 07 03 44 44 04'
+ '07 77 77 77 04 04 44 00 44 00 00 44 44 44 44 44'
+ '44 00 00 44 00 44 44 44 40 34 44 03 44 44 40 00'
+ '00 00 00 44 44 44 44 44 40 00 44 44 44 44 44 40'
+ '77 77 77 70 34 44 44 44 44 00 00 34 44 44 40 77'
+ '77 77 00 44 44 44 04 07 77 77 77 07 03 44 44 44'
+ '44 41 51 44 44 44 44 44 43 40 70 43 44 44 44 44'
+ '44 41 51 44 44 44 44 44 07 77 70 44 44 44 44 07'
+ '77 77 70 04 44 44 44 41 51 00 00 15 10 44 44 70'
+ '44 44 44 47 04 44 44 44 44 00 04 44 44 44 44 70'
+ '44 44 44 47 04 44 44 44 03 43 34 30 44 44 44 07'
+ '77 77 70 04 44 44 40 77 77 77 00 44 44 44 44 40'
+ '00 03 44 44 44 44 44 07 70 77 77 04 44 44 44 44'
+ '44 44 44 44 44 44 44 44 07 70 77 77 00 44 47 04'
+ '44 70 34 44 70 34 44 44 44 44 44 44 44 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 73 43 73 47 44 44'
+ '00 00 00 00 34 44 44 00 00 00 00 00 00 04 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 44 44 03 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 00 44 44 44 44 44 40 00 00 00 00 44 44 44 44'
+ '44 44 44 44 44 44 40 00 00 00 04 44 44 44 00 00'
+ '00 00 00 00 04 44 44 44 44 41 11 44 44 44 44 44'
+ '34 43 73 44 34 44 44 44 44 44 14 44 44 44 44 44'
+ '30 77 04 44 44 44 44 00 00 00 00 44 44 44 44 44'
+ '14 44 44 41 44 44 44 70 00 00 00 00 04 44 44 44'
+ '40 00 00 44 44 44 44 70 00 00 00 00 04 44 44 44'
+ '40 00 00 04 44 44 44 00 00 00 00 44 44 44 40 00'
+ '00 00 04 44 44 44 44 44 44 44 44 44 44 44 44 40'
+ '04 00 00 44 44 44 44 44 44 44 44 44 44 44 44 44'
+ '40 04 00 00 44 44 47 00 00 00 00 00 00 44 44 44'
+ '44 44 44 44 44 44 44 44 44 44 44 44 44 44'
+}
+
+/* BINRES winefile.ico */
+WINEFILE ICON // DISCARDABLE // LOADONCALL
+{
+ '00 00 01 00 01 00 20 20 04 00 00 00 00 00 E8 02'
+ '00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+ '00 00 01 00 04 00 00 00 00 00 00 02 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
+ '00 00 80 00 80 00 80 80 00 00 80 80 80 00 C0 C0'
+ 'C0 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+ '00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 07 77 77 77 77 77 77 77 77 70 00 00'
+ '00 00 00 00 77 77 77 77 77 77 77 77 77 70 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 07 70 00 00'
+ '00 00 00 08 88 07 77 77 77 70 88 08 07 70 00 00'
+ '00 00 00 88 88 07 70 07 77 70 88 08 07 70 00 00'
+ '00 00 70 88 88 07 70 07 77 70 88 08 07 70 00 00'
+ '00 00 00 88 88 07 70 07 77 70 88 08 07 70 00 00'
+ '00 08 80 88 88 07 77 77 77 70 88 08 07 70 00 00'
+ '00 88 80 88 88 00 00 00 00 00 00 08 07 70 00 00'
+ '70 88 80 88 88 88 88 88 88 88 88 88 07 70 00 00'
+ '00 88 80 88 88 88 88 88 88 88 88 88 07 70 00 08'
+ '80 88 80 80 00 00 00 00 00 00 00 08 07 70 00 88'
+ '80 88 80 80 FF FF FF FF FF FF FF 08 07 70 00 88'
+ '80 88 80 80 FF FF FF FF FF FF FF 08 07 70 00 88'
+ '80 88 80 80 FF FF FF FF FF FF FF 08 07 70 00 88'
+ '80 80 00 80 FF FF FF FF FF FF FF 08 07 70 00 88'
+ '80 80 F0 80 FF FF FF FF FF FF FF 08 07 70 00 88'
+ '80 80 F0 80 FF FF FF FF FF FF FF 08 07 70 00 88'
+ '80 80 F0 80 FF FF FF FF FF FF FF 08 07 70 00 80'
+ '00 80 F0 80 FF FF FF FF FF FF FF 08 07 70 00 80'
+ 'F0 80 F0 80 FF FF FF FF FF FF FF 08 07 70 00 80'
+ 'F0 80 F0 80 FF FF FF FF FF FF FF 08 00 00 00 80'
+ 'F0 80 FF 00 00 00 00 00 00 00 00 00 00 00 00 80'
+ 'F0 80 FF FF FF FF FF FF FF 08 07 70 00 00 00 80'
+ 'F0 80 FF FF FF FF FF FF FF 08 07 70 00 00 00 80'
+ 'F0 80 FF FF FF FF FF FF FF 08 00 00 00 00 00 80'
+ 'FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80'
+ 'FF FF FF FF FF FF FF 08 07 70 00 00 00 00 00 80'
+ 'FF FF FF FF FF FF FF 08 07 70 00 00 00 00 00 80'
+ 'FF FF FF FF FF FF FF 08 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF'
+ 'FF FF FF F8 00 01 FF F0 00 01 FF E0 00 01 FF C0'
+ '00 01 FF 80 00 01 FF 00 00 01 FE 00 00 01 FC 00'
+ '00 01 F8 00 00 01 F0 00 00 01 E0 00 00 01 C0 00'
+ '00 01 80 00 00 01 80 00 00 01 80 00 00 01 80 00'
+ '00 01 80 00 00 01 80 00 00 01 80 00 00 01 80 00'
+ '00 01 80 00 00 01 80 00 00 07 80 00 00 07 80 00'
+ '00 1F 80 00 00 1F 80 00 00 7F 80 00 00 7F 80 00'
+ '01 FF 80 00 01 FF 80 00 07 FF C0 00 07 FF'
+}
+
+/* include localised resources */
+
+#include "De.rc"
+#include "En.rc"
diff --git a/programs/winefile/splitpath.c b/programs/winefile/splitpath.c
new file mode 100644
index 0000000..6453194
--- /dev/null
+++ b/programs/winefile/splitpath.c
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2000 Martin Fuchs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "winefile.h"
+
+#ifdef UNICODE
+
+void _wsplitpath(const WCHAR* path, WCHAR* drv, WCHAR* dir, WCHAR* name, WCHAR* ext)
+{
+	const WCHAR* end; // end of processed string
+	const WCHAR* p;	  // search pointer
+	const WCHAR* s;	  // copy pointer
+
+	 // extract drive name
+	if (path[0] && path[1]==':') {
+		if (drv) {
+			*drv++ = *path++;
+			*drv++ = *path++;
+			*drv = L'\0';
+		}
+	} else if (drv)
+		*drv = L'\0';
+
+	 // search for end of string or stream separator
+	for(end=path; *end && *end!=L':'; )
+		end++;
+
+	 // search for begin of file extension
+	for(p=end; p>path && *--p!=L'\\' && *p!=L'/'; )
+		if (*p == L'.') {
+			end = p;
+			break;
+		}
+
+	if (ext)
+		for(s=end; *ext=*s++; )
+			ext++;
+
+	 // search for end of directory name
+	for(p=end; p>path; )
+		if (*--p=='\\' || *p=='/') {
+			p++;
+			break;
+		}
+
+	if (name) {
+		for(s=p; s<end; )
+			*name++ = *s++;
+
+		*name = L'\0';
+	}
+
+	if (dir) {
+		for(s=path; s<p; )
+			*dir++ = *s++;
+
+		*dir = L'\0';
+	}
+}
+
+#else
+
+void _splitpath(const CHAR* path, CHAR* drv, CHAR* dir, CHAR* name, CHAR* ext)
+{
+	const CHAR* end; // end of processed string
+	const CHAR* p;	 // search pointer
+	const CHAR* s;	 // copy pointer
+
+	 // extract drive name
+	if (path[0] && path[1]==':') {
+		if (drv) {
+			*drv++ = *path++;
+			*drv++ = *path++;
+			*drv = '\0';
+		}
+	} else if (drv)
+		*drv = '\0';
+
+	 // search for end of string or stream separator
+	for(end=path; *end && *end!=':'; )
+		end++;
+
+	 // search for begin of file extension
+	for(p=end; p>path && *--p!='\\' && *p!='/'; )
+		if (*p == '.') {
+			end = p;
+			break;
+		}
+
+	if (ext)
+		for(s=end; (*ext=*s++); )
+			ext++;
+
+	 // search for end of directory name
+	for(p=end; p>path; )
+		if (*--p=='\\' || *p=='/') {
+			p++;
+			break;
+		}
+
+	if (name) {
+		for(s=p; s<end; )
+			*name++ = *s++;
+
+		*name = '\0';
+	}
+
+	if (dir) {
+		for(s=path; s<p; )
+			*dir++ = *s++;
+
+		*dir = '\0';
+	}
+}
+
+#endif
+
+/*
+void main()	// test splipath()
+{
+	TCHAR drv[_MAX_DRIVE+1], dir[_MAX_DIR], name[_MAX_FNAME], ext[_MAX_EXT];
+
+	_tsplitpath(L"x\\y", drv, dir, name, ext);
+	_tsplitpath(L"x\\", drv, dir, name, ext);
+	_tsplitpath(L"\\x", drv, dir, name, ext);
+	_tsplitpath(L"x", drv, dir, name, ext);
+	_tsplitpath(L"", drv, dir, name, ext);
+	_tsplitpath(L".x", drv, dir, name, ext);
+	_tsplitpath(L":x", drv, dir, name, ext);
+	_tsplitpath(L"a:x", drv, dir, name, ext);
+	_tsplitpath(L"a.b:x", drv, dir, name, ext);
+	_tsplitpath(L"W:\\/\\abc/Z:~", drv, dir, name, ext);
+	_tsplitpath(L"abc.EFGH:12345", drv, dir, name, ext);
+	_tsplitpath(L"C:/dos/command.com", drv, dir, name, ext);
+}
+*/
diff --git a/programs/winefile/winefile.c b/programs/winefile/winefile.c
new file mode 100644
index 0000000..b38c160
--- /dev/null
+++ b/programs/winefile/winefile.c
@@ -0,0 +1,2882 @@
+/*
+ * Winefile
+ *
+ * Copyright 2000 Martin Fuchs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include "winefile.h"
+#include "resource.h"
+
+
+ // for read_directory_unix()
+#if !defined(_NO_EXTENSIONS)
+#include <dirent.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <time.h>
+#endif
+
+#ifdef _NO_EXTENSIONS
+#undef _LEFT_FILES
+#endif
+
+#ifndef _MAX_PATH
+#define _MAX_DRIVE          3
+#define _MAX_FNAME          256
+#define _MAX_DIR            _MAX_FNAME
+#define _MAX_EXT            _MAX_FNAME
+#define _MAX_PATH           260
+#endif
+
+WINEFILE_GLOBALS Globals;
+
+extern void WineLicense(HWND hWnd);
+extern void WineWarranty(HWND hWnd);
+
+typedef struct _Entry {
+	struct _Entry*	next;
+	struct _Entry*	down;
+	struct _Entry*	up;
+
+	BOOL	expanded;
+	BOOL	scanned;
+	int		level;
+
+	WIN32_FIND_DATA	data;
+
+#ifndef _NO_EXTENSIONS
+	BY_HANDLE_FILE_INFORMATION bhfi;
+	BOOL	bhfi_valid;
+	BOOL	unix_dir;
+#endif
+} Entry;
+
+typedef struct {
+	Entry	entry;
+	TCHAR	path[MAX_PATH];
+	TCHAR	volname[_MAX_FNAME];
+	TCHAR	fs[_MAX_DIR];
+	DWORD	drive_type;
+	DWORD	fs_flags;
+} Root;
+
+enum COLUMN_FLAGS {
+	COL_SIZE		= 0x01,
+	COL_DATE		= 0x02,
+	COL_TIME		= 0x04,
+	COL_ATTRIBUTES	= 0x08,
+	COL_DOSNAMES	= 0x10,
+#ifdef _NO_EXTENSIONS
+	COL_ALL = COL_SIZE|COL_DATE|COL_TIME|COL_ATTRIBUTES|COL_DOSNAMES
+#else
+	COL_INDEX		= 0x20,
+	COL_LINKS		= 0x40,
+	COL_ALL = COL_SIZE|COL_DATE|COL_TIME|COL_ATTRIBUTES|COL_DOSNAMES|COL_INDEX|COL_LINKS
+#endif
+};
+
+typedef enum {
+	SORT_NAME,
+	SORT_EXT,
+	SORT_SIZE,
+	SORT_DATE
+} SORT_ORDER;
+
+typedef struct {
+	HWND	hwnd;
+#ifndef _NO_EXTENSIONS
+	HWND	hwndHeader;
+#endif
+
+#ifndef _NO_EXTENSIONS
+#define	COLUMNS	10
+#else
+#define	COLUMNS	5
+#endif
+	int		widths[COLUMNS];
+	int		positions[COLUMNS+1];
+
+	BOOL	treePane;
+	int		visible_cols;
+	Entry*	root;
+	Entry*	cur;
+} Pane;
+
+typedef struct {
+	HWND	hwnd;
+	Pane	left;
+	Pane	right;
+	int		focus_pane;		// 0: left  1: right
+	WINDOWPLACEMENT pos;
+	int		split_pos;
+	BOOL	header_wdths_ok;
+
+	TCHAR	path[MAX_PATH];
+	Root	root;
+
+	SORT_ORDER sortOrder;
+} ChildWnd;
+
+
+static void read_directory(Entry* parent, LPCTSTR path, int sortOrder);
+static void set_curdir(ChildWnd* child, Entry* entry);
+
+LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam);
+LRESULT CALLBACK ChildWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam);
+LRESULT CALLBACK TreeWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam);
+
+
+static void display_error(HWND hwnd, DWORD error)
+{
+	PTSTR msg;
+
+	if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
+		0, error, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (PTSTR)&msg, 0, NULL))
+		MessageBox(hwnd, msg, _T("Winefile"), MB_OK);
+	else
+		MessageBox(hwnd, _T("Error"), _T("Winefile"), MB_OK);
+
+	LocalFree(msg);
+}
+
+
+static void read_directory_win(Entry* parent, LPCTSTR path)
+{
+	Entry* entry = (Entry*) malloc(sizeof(Entry));
+	int level = parent->level + 1;
+	Entry* last = 0;
+	HANDLE hFind;
+#ifndef _NO_EXTENSIONS
+	HANDLE hFile;
+#endif
+
+	TCHAR buffer[MAX_PATH], *p;
+	for(p=buffer; *path; )
+		*p++ = *path++;
+
+	lstrcpy(p, _T("\\*"));
+
+	hFind = FindFirstFile(buffer, &entry->data);
+
+	if (hFind != INVALID_HANDLE_VALUE) {
+		parent->down = entry;
+
+		do {
+			entry->down = 0;
+			entry->up = parent;
+			entry->expanded = FALSE;
+			entry->scanned = FALSE;
+			entry->level = level;
+
+#ifdef _NO_EXTENSIONS
+			 // hide directory entry "."
+			if (entry->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+				LPCTSTR name = entry->data.cFileName;
+
+				if (name[0]=='.' && name[1]=='\0')
+					continue;
+			}
+#else
+			entry->unix_dir = FALSE;
+			entry->bhfi_valid = FALSE;
+
+			lstrcpy(p+1, entry->data.cFileName);
+
+			hFile = CreateFile(buffer, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
+								0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
+
+			if (hFile != INVALID_HANDLE_VALUE) {
+				if (GetFileInformationByHandle(hFile, &entry->bhfi))
+					entry->bhfi_valid = TRUE;
+
+				CloseHandle(hFile);
+			}
+#endif
+
+			last = entry;
+
+			entry = (Entry*) malloc(sizeof(Entry));
+
+			if (last)
+				last->next = entry;
+		} while(FindNextFile(hFind, &entry->data));
+
+		last->next = 0;
+
+		FindClose(hFind);
+	} else
+		parent->down = 0;
+
+	free(entry);
+
+	parent->scanned = TRUE;
+}
+
+
+static Entry* find_entry_win(Entry* parent, LPCTSTR name)
+{
+	Entry* entry;
+
+	for(entry=parent->down; entry; entry=entry->next) {
+		LPCTSTR p = name;
+		LPCTSTR q = entry->data.cFileName;
+
+		do {
+			if (!*p || *p==_T('\\') || *p==_T('/'))
+				return entry;
+		} while(tolower(*p++) == tolower(*q++));
+
+		p = name;
+		q = entry->data.cAlternateFileName;
+
+		do {
+			if (!*p || *p==_T('\\') || *p==_T('/'))
+				return entry;
+		} while(tolower(*p++) == tolower(*q++));
+	}
+
+	return 0;
+}
+
+
+static Entry* read_tree_win(Root* root, LPCTSTR path, int sortOrder)
+{
+	TCHAR buffer[MAX_PATH];
+	Entry* entry = &root->entry;
+	LPCTSTR s = path;
+	PTSTR d = buffer;
+
+#ifndef _NO_EXTENSIONS
+	entry->unix_dir = FALSE;
+#endif
+
+	while(entry) {
+		while(*s && *s!=_T('\\') && *s!=_T('/'))
+			*d++ = *s++;
+
+		while(*s==_T('\\') || *s==_T('/'))
+			s++;
+
+		*d++ = _T('\\');
+		*d = _T('\0');
+
+		read_directory(entry, buffer, sortOrder);
+
+		if (entry->down)
+			entry->expanded = TRUE;
+
+		if (!*s)
+			break;
+
+		entry = find_entry_win(entry, s);
+	}
+
+	return entry;
+}
+
+
+#if !defined(_NO_EXTENSIONS) && defined(__linux__)
+
+BOOL to_filetime(const time_t* t, FILETIME* ftime)
+{
+	struct tm* tm = gmtime(t);
+	SYSTEMTIME stime;
+
+	if (!tm)
+		return FALSE;
+
+	stime.wYear = tm->tm_year+1900;
+	stime.wMonth = tm->tm_mon+1;
+//	stime.wDayOfWeek
+	stime.wDay = tm->tm_mday;
+	stime.wHour = tm->tm_hour;
+	stime.wMinute = tm->tm_min;
+	stime.wSecond = tm->tm_sec;
+
+	return SystemTimeToFileTime(&stime, ftime);
+}
+
+static void read_directory_unix(Entry* parent, LPCTSTR path)
+{
+	Entry* entry = (Entry*) malloc(sizeof(Entry));
+	int level = parent->level + 1;
+	Entry* last = 0;
+
+	DIR* dir = opendir(path);
+
+	if (dir) {
+		struct stat st;
+		struct dirent* ent;
+		TCHAR buffer[MAX_PATH], *p;
+
+		for(p=buffer; *path; )
+			*p++ = *path++;
+
+		if (p==buffer || p[-1]!='/')
+			*p++ = '/';
+
+		parent->down = entry;
+
+		while((ent=readdir(dir))) {
+			entry->unix_dir = TRUE;
+			lstrcpy(entry->data.cFileName, ent->d_name);
+			entry->data.dwFileAttributes = ent->d_name[0]=='.'? FILE_ATTRIBUTE_HIDDEN: 0;
+
+			strcpy(p, ent->d_name);
+
+			if (!stat(buffer, &st)) {
+				if (S_ISDIR(st.st_mode))
+					entry->data.dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY;
+
+				entry->data.nFileSizeLow = st.st_size & 0xFFFFFFFF;
+				entry->data.nFileSizeHigh = st.st_size >> 32;
+
+				memset(&entry->data.ftCreationTime, 0, sizeof(FILETIME));
+				to_filetime(&st.st_atime, &entry->data.ftLastAccessTime);
+				to_filetime(&st.st_mtime, &entry->data.ftLastWriteTime);
+
+				entry->bhfi.nFileIndexLow = ent->d_ino;
+				entry->bhfi.nFileIndexHigh = 0;
+
+				entry->bhfi.nNumberOfLinks = st.st_nlink;
+
+				entry->bhfi_valid = TRUE;
+			} else {
+				entry->data.nFileSizeLow = 0;
+				entry->data.nFileSizeHigh = 0;
+				entry->bhfi_valid = FALSE;
+			}
+
+			entry->down = 0;
+			entry->up = parent;
+			entry->expanded = FALSE;
+			entry->scanned = FALSE;
+			entry->level = level;
+
+			last = entry;
+
+			entry = (Entry*) malloc(sizeof(Entry));
+
+			if (last)
+				last->next = entry;
+		}
+
+		last->next = 0;
+
+		closedir(dir);
+	} else
+		parent->down = 0;
+
+	free(entry);
+
+	parent->scanned = TRUE;
+}
+
+static Entry* find_entry_unix(Entry* parent, LPCTSTR name)
+{
+	Entry* entry;
+
+	for(entry=parent->down; entry; entry=entry->next) {
+		LPCTSTR p = name;
+		LPCTSTR q = entry->data.cFileName;
+
+		do {
+			if (!*p || *p==_T('/'))
+				return entry;
+		} while(*p++ == *q++);
+	}
+
+	return 0;
+}
+
+static Entry* read_tree_unix(Root* root, LPCTSTR path, int sortOrder)
+{
+	TCHAR buffer[MAX_PATH];
+	Entry* entry = &root->entry;
+	LPCTSTR s = path;
+	PTSTR d = buffer;
+
+	entry->unix_dir = TRUE;
+
+	while(entry) {
+		while(*s && *s!=_T('/'))
+			*d++ = *s++;
+
+		while(*s == _T('/'))
+			s++;
+
+		*d++ = _T('/');
+		*d = _T('\0');
+
+		read_directory(entry, buffer, sortOrder);
+
+		if (entry->down)
+			entry->expanded = TRUE;
+
+		if (!*s)
+			break;
+
+		entry = find_entry_unix(entry, s);
+	}
+
+	return entry;
+}
+
+#endif
+
+
+ // directories first...
+static int compareType(const WIN32_FIND_DATA* fd1, const WIN32_FIND_DATA* fd2)
+{
+	int dir1 = fd1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
+	int dir2 = fd2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
+
+	return dir2==dir1? 0: dir2<dir1? -1: 1;
+}
+
+
+static int compareName(const void* arg1, const void* arg2)
+{
+	const WIN32_FIND_DATA* fd1 = &(*(Entry**)arg1)->data;
+	const WIN32_FIND_DATA* fd2 = &(*(Entry**)arg2)->data;
+
+	int cmp = compareType(fd1, fd2);
+	if (cmp)
+		return cmp;
+
+	return lstrcmpi(fd1->cFileName, fd2->cFileName);
+}
+
+static int compareExt(const void* arg1, const void* arg2)
+{
+	const WIN32_FIND_DATA* fd1 = &(*(Entry**)arg1)->data;
+	const WIN32_FIND_DATA* fd2 = &(*(Entry**)arg2)->data;
+	const TCHAR *name1, *name2, *ext1, *ext2;
+
+	int cmp = compareType(fd1, fd2);
+	if (cmp)
+		return cmp;
+
+	name1 = fd1->cFileName;
+	name2 = fd2->cFileName;
+
+	ext1 = _tcsrchr(name1, _T('.'));
+	ext2 = _tcsrchr(name2, _T('.'));
+
+	if (ext1)
+		ext1++;
+	else
+		ext1 = _T("");
+
+	if (ext2)
+		ext2++;
+	else
+		ext2 = _T("");
+
+	cmp = lstrcmpi(ext1, ext2);
+	if (cmp)
+		return cmp;
+
+	return lstrcmpi(name1, name2);
+}
+
+static int compareSize(const void* arg1, const void* arg2)
+{
+	WIN32_FIND_DATA* fd1 = &(*(Entry**)arg1)->data;
+	WIN32_FIND_DATA* fd2 = &(*(Entry**)arg2)->data;
+
+	int cmp = compareType(fd1, fd2);
+	if (cmp)
+		return cmp;
+
+	cmp = fd2->nFileSizeHigh - fd1->nFileSizeHigh;
+
+	if (cmp < 0)
+		return -1;
+	else if (cmp > 0)
+		return 1;
+
+	cmp = fd2->nFileSizeLow - fd1->nFileSizeLow;
+
+	return cmp<0? -1: cmp>0? 1: 0;
+}
+
+static int compareDate(const void* arg1, const void* arg2)
+{
+	WIN32_FIND_DATA* fd1 = &(*(Entry**)arg1)->data;
+	WIN32_FIND_DATA* fd2 = &(*(Entry**)arg2)->data;
+
+	int cmp = compareType(fd1, fd2);
+	if (cmp)
+		return cmp;
+
+	return CompareFileTime(&fd2->ftLastWriteTime, &fd1->ftLastWriteTime);
+}
+
+
+static int (*sortFunctions[])(const void* arg1, const void* arg2) = {
+	compareName,	// SORT_NAME
+	compareExt,		// SORT_EXT
+	compareSize,	// SORT_SIZE
+	compareDate		// SORT_DATE
+};
+
+
+static void SortDirectory(Entry* parent, SORT_ORDER sortOrder)
+{
+	Entry* entry = parent->down;
+	Entry** array, **p;
+	int len;
+
+	len = 0;
+	for(entry=parent->down; entry; entry=entry->next)
+		len++;
+
+	if (len) {
+		array = (Entry**) alloca(len*sizeof(Entry*));
+
+		p = array;
+		for(entry=parent->down; entry; entry=entry->next)
+			*p++ = entry;
+
+		 // call qsort with the appropriate compare function
+		qsort(array, len, sizeof(array[0]), sortFunctions[sortOrder]);
+
+		parent->down = array[0];
+
+		for(p=array; --len; p++)
+			p[0]->next = p[1];
+
+		(*p)->next = 0;
+	}
+}
+
+
+static void read_directory(Entry* parent, LPCTSTR path, int sortOrder)
+{
+	TCHAR buffer[MAX_PATH];
+	Entry* entry;
+	LPCTSTR s;
+	PTSTR d;
+
+#if !defined(_NO_EXTENSIONS) && defined(__linux__)
+	if (parent->unix_dir)
+	{
+		read_directory_unix(parent, path);
+
+		if (Globals.prescan_node) {
+			s = path;
+			d = buffer;
+
+			while(*s)
+				*d++ = *s++;
+
+			*d++ = _T('/');
+
+			for(entry=parent->down; entry; entry=entry->next)
+				if (entry->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+					lstrcpy(d, entry->data.cFileName);
+					read_directory_unix(entry, buffer);
+					SortDirectory(entry, sortOrder);
+				}
+		}
+	}
+	else
+#endif
+	{
+		read_directory_win(parent, path);
+
+		if (Globals.prescan_node) {
+			s = path;
+			d = buffer;
+
+			while(*s)
+				*d++ = *s++;
+
+			*d++ = _T('\\');
+
+			for(entry=parent->down; entry; entry=entry->next)
+				if (entry->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+					lstrcpy(d, entry->data.cFileName);
+					read_directory_win(entry, buffer);
+					SortDirectory(entry, sortOrder);
+				}
+		}
+	}
+
+	SortDirectory(parent, sortOrder);
+}
+
+
+static ChildWnd* alloc_child_window(LPCTSTR path)
+{
+	TCHAR drv[_MAX_DRIVE+1], dir[_MAX_DIR], name[_MAX_FNAME], ext[_MAX_EXT];
+	ChildWnd* child = (ChildWnd*) malloc(sizeof(ChildWnd));
+	Root* root = &child->root;
+	Entry* entry;
+
+	memset(child, 0, sizeof(ChildWnd));
+
+	child->left.treePane = TRUE;
+	child->left.visible_cols = 0;
+
+	child->right.treePane = FALSE;
+#ifndef _NO_EXTENSIONS
+	child->right.visible_cols = COL_SIZE|COL_DATE|COL_TIME|COL_ATTRIBUTES|COL_INDEX|COL_LINKS;
+#else
+	child->right.visible_cols = COL_SIZE|COL_DATE|COL_TIME|COL_ATTRIBUTES;
+#endif
+
+	child->pos.length = sizeof(WINDOWPLACEMENT);
+	child->pos.flags = 0;
+	child->pos.showCmd = SW_SHOWNORMAL;
+	child->pos.rcNormalPosition.left = CW_USEDEFAULT;
+	child->pos.rcNormalPosition.top = CW_USEDEFAULT;
+	child->pos.rcNormalPosition.right = CW_USEDEFAULT;
+	child->pos.rcNormalPosition.bottom = CW_USEDEFAULT;
+
+	child->focus_pane = 0;
+	child->split_pos = 200;
+	child->sortOrder = SORT_NAME;
+	child->header_wdths_ok = FALSE;
+
+	lstrcpy(child->path, path);
+
+	_tsplitpath(path, drv, dir, name, ext);
+
+#if !defined(_NO_EXTENSIONS) && defined(__linux__)
+	if (*path == '/')
+	{
+		root->drive_type = GetDriveType(path);
+
+		lstrcat(drv, _T("/"));
+		lstrcpy(root->volname, _T("root fs"));
+		root->fs_flags = 0;
+		lstrcpy(root->fs, _T("unixfs"));
+
+		lstrcpy(root->path, _T("/"));
+		entry = read_tree_unix(root, path, child->sortOrder);
+	}
+	else
+#endif
+	{
+		root->drive_type = GetDriveType(path);
+
+		lstrcat(drv, _T("\\"));
+		GetVolumeInformation(drv, root->volname, _MAX_FNAME, 0, 0, &root->fs_flags, root->fs, _MAX_DIR);
+
+		lstrcpy(root->path, drv);
+		entry = read_tree_win(root, path, child->sortOrder);
+	}
+
+//@@lstrcpy(root->entry.data.cFileName, drv);
+	wsprintf(root->entry.data.cFileName, _T("%s - %s"), drv, root->fs);
+
+	root->entry.data.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+
+	child->left.root = &root->entry;
+
+	set_curdir(child, entry);
+
+	return child;
+}
+
+
+ // recursively free all child entries
+static void free_entries(Entry* parent)
+{
+	Entry *entry, *next=parent->down;
+
+	if (next) {
+		parent->down = 0;
+
+		do {
+			entry = next;
+			next = entry->next;
+
+			free_entries(entry);
+			free(entry);
+		} while(next);
+	}
+}
+
+ // free all memory associated with a child window
+static void free_child_window(ChildWnd* child)
+{
+	free_entries(&child->root.entry);
+	free(child);
+}
+
+
+ // get full path of specified directory entry
+static void get_path(Entry* dir, PTSTR path)
+{
+	Entry* entry;
+	int len = 0;
+	int level = 0;
+
+	for(entry=dir; entry; level++) {
+		LPCTSTR name = entry->data.cFileName;
+		LPCTSTR s = name;
+		int l;
+
+		for(l=0; *s && *s!=_T('/') && *s!=_T('\\'); s++)
+			l++;
+
+		if (entry->up) {
+			memmove(path+l+1, path, len*sizeof(TCHAR));
+			memcpy(path+1, name, l*sizeof(TCHAR));
+			len += l+1;
+
+#ifndef _NO_EXTENSIONS
+			if (entry->unix_dir)
+				path[0] = _T('/');
+			else
+#endif
+				path[0] = _T('\\');
+
+			entry = entry->up;
+		} else {
+			memmove(path+l, path, len*sizeof(TCHAR));
+			memcpy(path, name, l*sizeof(TCHAR));
+			len += l;
+			break;
+		}
+	}
+
+	if (!level) {
+#ifndef _NO_EXTENSIONS
+		if (entry->unix_dir)
+			path[len++] = _T('/');
+		else
+#endif
+			path[len++] = _T('\\');
+	}
+
+	path[len] = _T('\0');
+}
+
+
+static void resize_frame_rect(HWND hwnd, PRECT prect)
+{
+	int new_top;
+	RECT rt;
+
+	if (IsWindowVisible(Globals.htoolbar)) {
+		SendMessage(Globals.htoolbar, WM_SIZE, 0, 0);
+		GetClientRect(Globals.htoolbar, &rt);
+		prect->top = rt.bottom+3;
+		prect->bottom -= rt.bottom+3;
+	}
+
+	if (IsWindowVisible(Globals.hdrivebar)) {
+		SendMessage(Globals.hdrivebar, WM_SIZE, 0, 0);
+		GetClientRect(Globals.hdrivebar, &rt);
+		new_top = --prect->top + rt.bottom+3;
+		MoveWindow(Globals.hdrivebar, 0, prect->top, rt.right, new_top, TRUE);
+		prect->top = new_top;
+		prect->bottom -= rt.bottom+2;
+	}
+
+	if (IsWindowVisible(Globals.hstatusbar)) {
+		int parts[] = {300, 500};
+
+		SendMessage(Globals.hstatusbar, WM_SIZE, 0, 0);
+		SendMessage(Globals.hstatusbar, SB_SETPARTS, 2, (LPARAM)&parts);
+		GetClientRect(Globals.hstatusbar, &rt);
+		prect->bottom -= rt.bottom;
+	}
+
+	MoveWindow(Globals.hmdiclient, prect->left-1,prect->top-1,prect->right+2,prect->bottom+1, TRUE);
+}
+
+static void resize_frame(HWND hwnd, int cx, int cy)
+{
+	RECT rect = {0, 0, cx, cy};
+
+	resize_frame_rect(hwnd, &rect);
+}
+
+static void resize_frame_client(HWND hwnd)
+{
+	RECT rect;
+
+	GetClientRect(hwnd, &rect);
+
+	resize_frame_rect(hwnd, &rect);
+}
+
+
+static HHOOK hcbthook;
+static ChildWnd* newchild = NULL;
+
+LRESULT CALLBACK CBTProc(int code, WPARAM wparam, LPARAM lparam)
+{
+	if (code==HCBT_CREATEWND && newchild) {
+		ChildWnd* child = newchild;
+		newchild = NULL;
+
+		child->hwnd = (HWND) wparam;
+		SetWindowLong(child->hwnd, GWL_USERDATA, (LPARAM)child);
+	}
+
+	return CallNextHookEx(hcbthook, code, wparam, lparam);
+}
+
+static HWND create_child_window(ChildWnd* child)
+{
+	MDICREATESTRUCT mcs = {
+		WINEFILETREE, (LPTSTR)child->path, Globals.hInstance,
+		child->pos.rcNormalPosition.left, child->pos.rcNormalPosition.top,
+		child->pos.rcNormalPosition.right-child->pos.rcNormalPosition.left,
+		child->pos.rcNormalPosition.bottom-child->pos.rcNormalPosition.top,
+		0/*style*/, 0/*lParam*/
+	};
+	int idx;
+
+	hcbthook = SetWindowsHookEx(WH_CBT, CBTProc, 0, GetCurrentThreadId());
+
+	newchild = child;
+	child->hwnd = (HWND) SendMessage(Globals.hmdiclient, WM_MDICREATE, 0, (LPARAM)&mcs);
+	if (!child->hwnd)
+		return 0;
+
+	UnhookWindowsHookEx(hcbthook);
+
+	idx = ListBox_FindItemData(child->left.hwnd, ListBox_GetCurSel(child->left.hwnd), child->left.cur);
+	ListBox_SetCurSel(child->left.hwnd, idx);
+
+	return child->hwnd;
+}
+
+
+struct ExecuteDialog {
+	TCHAR	cmd[MAX_PATH];
+	int		cmdshow;
+};
+
+
+static BOOL CALLBACK ExecuteDialogWndProg(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
+{
+	static struct ExecuteDialog* dlg;
+
+	switch(nmsg) {
+		case WM_INITDIALOG:
+			dlg = (struct ExecuteDialog*) lparam;
+			return 1;
+
+		case WM_COMMAND: {
+			int id = (int)wparam;
+
+			if (id == IDOK) {
+				GetWindowText(GetDlgItem(hwnd, 201), dlg->cmd, MAX_PATH);
+				dlg->cmdshow = Button_GetState(GetDlgItem(hwnd,214))&BST_CHECKED?
+												SW_SHOWMINIMIZED: SW_SHOWNORMAL;
+				EndDialog(hwnd, id);
+			} else if (id == IDCANCEL)
+				EndDialog(hwnd, id);
+
+			return 1;}
+	}
+
+	return 0;
+}
+
+
+#ifndef _NO_EXTENSIONS
+
+static struct FullScreenParameters {
+	BOOL	mode;
+	RECT	orgPos;
+	BOOL	wasZoomed;
+} g_fullscreen = {
+	FALSE	// mode
+};
+
+void frame_get_clientspace(HWND hwnd, PRECT prect)
+{
+	RECT rt;
+
+	if (!IsIconic(hwnd))
+		GetClientRect(hwnd, prect);
+	else {
+		WINDOWPLACEMENT wp;
+
+		GetWindowPlacement(hwnd, &wp);
+
+		prect->left = prect->top = 0;
+		prect->right = wp.rcNormalPosition.right-wp.rcNormalPosition.left-
+						2*(GetSystemMetrics(SM_CXSIZEFRAME)+GetSystemMetrics(SM_CXEDGE));
+		prect->bottom = wp.rcNormalPosition.bottom-wp.rcNormalPosition.top-
+						2*(GetSystemMetrics(SM_CYSIZEFRAME)+GetSystemMetrics(SM_CYEDGE))-
+						GetSystemMetrics(SM_CYCAPTION)-GetSystemMetrics(SM_CYMENUSIZE);
+	}
+
+	if (IsWindowVisible(Globals.htoolbar)) {
+		GetClientRect(Globals.htoolbar, &rt);
+		prect->top += rt.bottom+2;
+	}
+
+	if (IsWindowVisible(Globals.hdrivebar)) {
+		GetClientRect(Globals.hdrivebar, &rt);
+		prect->top += rt.bottom+2;
+	}
+
+	if (IsWindowVisible(Globals.hstatusbar)) {
+		GetClientRect(Globals.hstatusbar, &rt);
+		prect->bottom -= rt.bottom;
+	}
+}
+
+static BOOL toggle_fullscreen(HWND hwnd)
+{
+	RECT rt;
+
+	if ((g_fullscreen.mode=!g_fullscreen.mode)) {
+		GetWindowRect(hwnd, &g_fullscreen.orgPos);
+		g_fullscreen.wasZoomed = IsZoomed(hwnd);
+
+		Frame_CalcFrameClient(hwnd, &rt);
+		ClientToScreen(hwnd, (LPPOINT)&rt.left);
+		ClientToScreen(hwnd, (LPPOINT)&rt.right);
+
+		rt.left = g_fullscreen.orgPos.left-rt.left;
+		rt.top = g_fullscreen.orgPos.top-rt.top;
+		rt.right = GetSystemMetrics(SM_CXSCREEN)+g_fullscreen.orgPos.right-rt.right;
+		rt.bottom = GetSystemMetrics(SM_CYSCREEN)+g_fullscreen.orgPos.bottom-rt.bottom;
+
+		MoveWindow(hwnd, rt.left, rt.top, rt.right-rt.left, rt.bottom-rt.top, TRUE);
+	} else {
+		MoveWindow(hwnd, g_fullscreen.orgPos.left, g_fullscreen.orgPos.top,
+							g_fullscreen.orgPos.right-g_fullscreen.orgPos.left,
+							g_fullscreen.orgPos.bottom-g_fullscreen.orgPos.top, TRUE);
+
+		if (g_fullscreen.wasZoomed)
+			ShowWindow(hwnd, WS_MAXIMIZE);
+	}
+
+	return g_fullscreen.mode;
+}
+
+static void fullscreen_move(HWND hwnd)
+{
+	RECT rt, pos;
+	GetWindowRect(hwnd, &pos);
+
+	Frame_CalcFrameClient(hwnd, &rt);
+	ClientToScreen(hwnd, (LPPOINT)&rt.left);
+	ClientToScreen(hwnd, (LPPOINT)&rt.right);
+
+	rt.left = pos.left-rt.left;
+	rt.top = pos.top-rt.top;
+	rt.right = GetSystemMetrics(SM_CXSCREEN)+pos.right-rt.right;
+	rt.bottom = GetSystemMetrics(SM_CYSCREEN)+pos.bottom-rt.bottom;
+
+	MoveWindow(hwnd, rt.left, rt.top, rt.right-rt.left, rt.bottom-rt.top, TRUE);
+}
+
+#endif
+
+
+static void toggle_child(HWND hwnd, UINT cmd, HWND hchild)
+{
+	BOOL vis = IsWindowVisible(hchild);
+
+	CheckMenuItem(Globals.hMenuOptions, cmd, vis?MF_BYCOMMAND:MF_BYCOMMAND|MF_CHECKED);
+
+	ShowWindow(hchild, vis?SW_HIDE:SW_SHOW);
+
+#ifndef _NO_EXTENSIONS
+	if (g_fullscreen.mode)
+		fullscreen_move(hwnd);
+#endif
+
+	resize_frame_client(hwnd);
+}
+
+BOOL activate_drive_window(LPCTSTR path)
+{
+	TCHAR drv1[_MAX_DRIVE], drv2[_MAX_DRIVE];
+	HWND child_wnd;
+
+	_tsplitpath(path, drv1, 0, 0, 0);
+
+	 // search for a already open window for the same drive
+	for(child_wnd=GetNextWindow(Globals.hmdiclient,GW_CHILD); child_wnd; child_wnd=GetNextWindow(child_wnd, GW_HWNDNEXT)) {
+		ChildWnd* child = (ChildWnd*) GetWindowLong(child_wnd, GWL_USERDATA);
+
+		if (child) {
+			_tsplitpath(child->root.path, drv2, 0, 0, 0);
+
+			if (!lstrcmpi(drv2, drv1)) {
+				SendMessage(Globals.hmdiclient, WM_MDIACTIVATE, (WPARAM)child_wnd, 0);
+
+				if (IsMinimized(child_wnd))
+					ShowWindow(child_wnd, SW_SHOWNORMAL);
+
+				return TRUE;
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
+{
+	switch(nmsg) {
+		case WM_CLOSE:
+			DestroyWindow(hwnd);
+			break;
+
+		case WM_DESTROY:
+			PostQuitMessage(0);
+			break;
+
+		case WM_COMMAND: {
+			UINT cmd = LOWORD(wparam);
+			HWND hwndClient = (HWND) SendMessage(Globals.hmdiclient, WM_MDIGETACTIVE, 0, 0);
+
+			if (SendMessage(hwndClient, WM_DISPATCH_COMMAND, wparam, lparam))
+				break;
+
+			if (cmd>=ID_DRIVE_FIRST && cmd<=ID_DRIVE_FIRST+0xFF) {
+				TCHAR drv[_MAX_DRIVE], path[MAX_PATH];
+				ChildWnd* child;
+				LPCTSTR root = Globals.drives;
+				int i;
+
+				for(i=cmd-ID_DRIVE_FIRST; i--; root++)
+					while(*root)
+						root++;
+
+				if (activate_drive_window(root))
+					return 0;
+
+				_tsplitpath(root, drv, 0, 0, 0);
+
+				if (!SetCurrentDirectory(drv)) {
+					display_error(hwnd, GetLastError());
+					return 0;
+				}
+
+				GetCurrentDirectory(MAX_PATH, path); //@@ letztes Verzeichnis pro Laufwerk speichern
+				child = alloc_child_window(path);
+
+				if (!create_child_window(child))
+					free(child);
+			} else switch(cmd) {
+				case ID_FILE_EXIT:
+					PostQuitMessage(0);
+					break;
+
+				case ID_WINDOW_NEW: {
+					TCHAR path[MAX_PATH];
+					ChildWnd* child;
+
+					GetCurrentDirectory(MAX_PATH, path);
+					child = alloc_child_window(path);
+
+					if (!create_child_window(child))
+						free(child);
+					break;}
+
+				case ID_WINDOW_CASCADE:
+					SendMessage(Globals.hmdiclient, WM_MDICASCADE, 0, 0);
+					break;
+
+				case ID_WINDOW_TILE_HORZ:
+					SendMessage(Globals.hmdiclient, WM_MDITILE, MDITILE_HORIZONTAL, 0);
+					break;
+
+				case ID_WINDOW_TILE_VERT:
+					SendMessage(Globals.hmdiclient, WM_MDITILE, MDITILE_VERTICAL, 0);
+					break;
+
+				case ID_WINDOW_ARRANGE:
+					SendMessage(Globals.hmdiclient, WM_MDIICONARRANGE, 0, 0);
+					break;
+
+				case ID_VIEW_TOOL_BAR:
+					toggle_child(hwnd, cmd, Globals.htoolbar);
+					break;
+
+				case ID_VIEW_DRIVE_BAR:
+					toggle_child(hwnd, cmd, Globals.hdrivebar);
+					break;
+
+				case ID_VIEW_STATUSBAR:
+					toggle_child(hwnd, cmd, Globals.hstatusbar);
+					break;
+
+				case ID_EXECUTE: {
+					struct ExecuteDialog dlg = {{0}};
+					if (DialogBoxParam(Globals.hInstance, MAKEINTRESOURCE(IDD_EXECUTE), hwnd, ExecuteDialogWndProg, (LPARAM)&dlg) == IDOK)
+						ShellExecute(hwnd, _T("open")/*operation*/, dlg.cmd/*file*/, NULL/*parameters*/, NULL/*dir*/, dlg.cmdshow);
+					break;}
+
+				case ID_HELP:
+					WinHelp(hwnd, _T("winfile"), HELP_INDEX, 0);
+					break;
+
+#ifndef _NO_EXTENSIONS
+				case ID_VIEW_FULLSCREEN:
+					CheckMenuItem(Globals.hMenuOptions, cmd, toggle_fullscreen(hwnd)?MF_CHECKED:0);
+					break;
+
+#ifdef __linux__
+				case ID_DRIVE_UNIX_FS: {
+					TCHAR path[MAX_PATH];
+					ChildWnd* child;
+
+					if (activate_drive_window(_T("/")))
+						break;
+
+					getcwd(path, MAX_PATH);
+					child = alloc_child_window(path);
+
+					if (!create_child_window(child))
+						free(child);
+					break;}
+#endif
+#endif
+
+					//TODO: There are even more menu items!
+
+#ifndef _NO_EXTENSIONS
+				case ID_LICENSE:
+					WineLicense(Globals.hMainWnd);
+					break;
+
+				case ID_NO_WARRANTY:
+					WineWarranty(Globals.hMainWnd);
+					break;
+
+				case ID_ABOUT_WINE:
+					ShellAbout(hwnd, _T("WINE"), _T("Winefile"), 0);
+					break;
+#endif
+
+				default:
+					/*@@if (wParam >= PM_FIRST_LANGUAGE && wParam <= PM_LAST_LANGUAGE)
+						STRING_SelectLanguageByNumber(wParam - PM_FIRST_LANGUAGE);
+					else */if ((cmd<IDW_FIRST_CHILD || cmd>=IDW_FIRST_CHILD+0x100) &&
+						(cmd<SC_SIZE || cmd>SC_RESTORE))
+						MessageBox(hwnd, _T("Not yet implemented"), _T("Winefile"), MB_OK);
+
+					return DefFrameProc(hwnd, Globals.hmdiclient, nmsg, wparam, lparam);
+			}
+			break;}
+
+		case WM_SIZE:
+			resize_frame(hwnd, LOWORD(lparam), HIWORD(lparam));
+			break;	// do not pass message to DefFrameProc
+
+#ifndef _NO_EXTENSIONS
+		case WM_GETMINMAXINFO: {
+			LPMINMAXINFO lpmmi = (LPMINMAXINFO)lparam;
+
+			lpmmi->ptMaxTrackSize.x <<= 1;//2*GetSystemMetrics(SM_CXSCREEN) / SM_CXVIRTUALSCREEN
+			lpmmi->ptMaxTrackSize.y <<= 1;//2*GetSystemMetrics(SM_CYSCREEN) / SM_CYVIRTUALSCREEN
+			break;}
+
+		case FRM_CALC_CLIENT:
+			frame_get_clientspace(hwnd, (PRECT)lparam);
+			return TRUE;
+#endif
+
+		default:
+			return DefFrameProc(hwnd, Globals.hmdiclient, nmsg, wparam, lparam);
+	}
+
+	return 0;
+}
+
+
+const static LPTSTR g_pos_names[COLUMNS] = {
+	_T(""),			// symbol
+	_T("Name"),
+	_T("Size"),
+	_T("CDate"),
+#ifndef _NO_EXTENSIONS
+	_T("ADate"),
+	_T("MDate"),
+	_T("Index/Inode"),
+	_T("Links"),
+#endif
+	_T("Attributes"),
+#ifndef _NO_EXTENSIONS
+	_T("Security")
+#endif
+};
+
+const static int g_pos_align[] = {
+	0,
+	HDF_LEFT,	// Name
+	HDF_RIGHT,	// Size
+	HDF_LEFT,	// CDate
+#ifndef _NO_EXTENSIONS
+	HDF_LEFT,	// ADate
+	HDF_LEFT,	// MDate
+	HDF_LEFT,	// Index
+	HDF_CENTER,	// Links
+#endif
+	HDF_CENTER,	// Attributes
+#ifndef _NO_EXTENSIONS
+	HDF_LEFT	// Security
+#endif
+};
+
+static void resize_tree(ChildWnd* child, int cx, int cy)
+{
+	HDWP hdwp = BeginDeferWindowPos(4);
+	RECT rt = {0, 0, cx, cy};
+
+	cx = child->split_pos + SPLIT_WIDTH/2;
+
+#ifndef _NO_EXTENSIONS
+	{
+		WINDOWPOS wp;
+		HD_LAYOUT hdl = {&rt, &wp};
+
+		Header_Layout(child->left.hwndHeader, &hdl);
+
+		DeferWindowPos(hdwp, child->left.hwndHeader, wp.hwndInsertAfter,
+						wp.x-1, wp.y, child->split_pos-SPLIT_WIDTH/2+1, wp.cy, wp.flags);
+		DeferWindowPos(hdwp, child->right.hwndHeader, wp.hwndInsertAfter,
+						rt.left+cx+1, wp.y, wp.cx-cx+2, wp.cy, wp.flags);
+	}
+#endif
+
+	DeferWindowPos(hdwp, child->left.hwnd, 0, rt.left, rt.top, child->split_pos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top, SWP_NOZORDER|SWP_NOACTIVATE);
+	DeferWindowPos(hdwp, child->right.hwnd, 0, rt.left+cx+1, rt.top, rt.right-cx, rt.bottom-rt.top, SWP_NOZORDER|SWP_NOACTIVATE);
+
+	EndDeferWindowPos(hdwp);
+}
+
+
+#ifndef _NO_EXTENSIONS
+
+static HWND create_header(HWND parent, Pane* pane, int id)
+{
+	HD_ITEM hdi = {HDI_TEXT|HDI_WIDTH|HDI_FORMAT};
+	int idx;
+
+	HWND hwnd = CreateWindow(WC_HEADER, 0, WS_CHILD|WS_VISIBLE|HDS_HORZ/*TODO: |HDS_BUTTONS + sort orders*/,
+								0, 0, 0, 0, parent, (HMENU)id, Globals.hInstance, 0);
+	if (!hwnd)
+		return 0;
+
+	SendMessage(hwnd, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), FALSE);
+
+	for(idx=0; idx<COLUMNS; idx++) {
+		hdi.pszText = g_pos_names[idx];
+		hdi.fmt = HDF_STRING | g_pos_align[idx];
+		hdi.cxy = pane->widths[idx];
+		Header_InsertItem(hwnd, idx, &hdi);
+	}
+
+	return hwnd;
+}
+
+#endif
+
+
+static void init_output(HWND hwnd)
+{
+	TCHAR b[16];
+	HFONT old_font;
+	HDC hdc = GetDC(hwnd);
+
+	if (GetNumberFormat(LOCALE_USER_DEFAULT, 0, _T("1000"), 0, b, 16) > 4)
+		Globals.num_sep = b[1];
+	else
+		Globals.num_sep = _T('.');
+
+	old_font = SelectFont(hdc, Globals.hfont);
+	GetTextExtentPoint32(hdc, _T(" "), 1, &Globals.spaceSize);
+	SelectFont(hdc, old_font);
+	ReleaseDC(hwnd, hdc);
+}
+
+static void draw_item(Pane* pane, LPDRAWITEMSTRUCT dis, Entry* entry, int calcWidthCol);
+
+
+ // calculate prefered width for all visible columns
+
+static BOOL calc_widths(Pane* pane, BOOL anyway)
+{
+	int col, x, cx, spc=3*Globals.spaceSize.cx;
+	int entries = ListBox_GetCount(pane->hwnd);
+	int orgWidths[COLUMNS];
+	int orgPositions[COLUMNS+1];
+	HFONT hfontOld;
+	HDC hdc;
+	int cnt;
+
+	if (!anyway) {
+		memcpy(orgWidths, pane->widths, sizeof(orgWidths));
+		memcpy(orgPositions, pane->positions, sizeof(orgPositions));
+	}
+
+	for(col=0; col<COLUMNS; col++)
+		pane->widths[col] = 0;
+
+	hdc = GetDC(pane->hwnd);
+	hfontOld = SelectFont(hdc, Globals.hfont);
+
+	for(cnt=0; cnt<entries; cnt++) {
+		Entry* entry = (Entry*) ListBox_GetItemData(pane->hwnd, cnt);
+
+		DRAWITEMSTRUCT dis = {0/*CtlType*/, 0/*CtlID*/,
+			0/*itemID*/, 0/*itemAction*/, 0/*itemState*/,
+			pane->hwnd/*hwndItem*/, hdc};
+
+		draw_item(pane, &dis, entry, COLUMNS);
+	}
+
+	SelectObject(hdc, hfontOld);
+	ReleaseDC(pane->hwnd, hdc);
+
+	x = 0;
+	for(col=0; col<COLUMNS; col++) {
+		pane->positions[col] = x;
+		cx = pane->widths[col];
+
+		if (cx) {
+			cx += spc;
+
+			if (cx < IMAGE_WIDTH)
+				cx = IMAGE_WIDTH;
+
+			pane->widths[col] = cx;
+		}
+
+		x += cx;
+	}
+
+	pane->positions[COLUMNS] = x;
+
+	ListBox_SetHorizontalExtent(pane->hwnd, x);
+
+	 // no change?
+	if (!memcmp(orgWidths, pane->widths, sizeof(orgWidths)))
+		return FALSE;
+
+	 // don't move, if only collapsing an entry
+	if (!anyway && pane->widths[0]<orgWidths[0] &&
+		!memcmp(orgWidths+1, pane->widths+1, sizeof(orgWidths)-sizeof(int))) {
+		pane->widths[0] = orgWidths[0];
+		memcpy(pane->positions, orgPositions, sizeof(orgPositions));
+
+		return FALSE;
+	}
+
+	InvalidateRect(pane->hwnd, 0, TRUE);
+
+	return TRUE;
+}
+
+
+ // calculate one prefered column width
+
+static void calc_single_width(Pane* pane, int col)
+{
+	HFONT hfontOld;
+	int x, cx;
+	int entries = ListBox_GetCount(pane->hwnd);
+	int cnt;
+	HDC hdc;
+
+	pane->widths[col] = 0;
+
+	hdc = GetDC(pane->hwnd);
+	hfontOld = SelectFont(hdc, Globals.hfont);
+
+	for(cnt=0; cnt<entries; cnt++) {
+		Entry* entry = (Entry*) ListBox_GetItemData(pane->hwnd, cnt);
+		DRAWITEMSTRUCT dis = {0, 0, 0, 0, 0, pane->hwnd, hdc};
+
+		draw_item(pane, &dis, entry, col);
+	}
+
+	SelectObject(hdc, hfontOld);
+	ReleaseDC(pane->hwnd, hdc);
+
+	cx = pane->widths[col];
+
+	if (cx) {
+		cx += 3*Globals.spaceSize.cx;
+
+		if (cx < IMAGE_WIDTH)
+			cx = IMAGE_WIDTH;
+	}
+
+	pane->widths[col] = cx;
+
+	x = pane->positions[col] + cx;
+
+	for(; col<COLUMNS; ) {
+		pane->positions[++col] = x;
+		x += pane->widths[col];
+	}
+
+	ListBox_SetHorizontalExtent(pane->hwnd, x);
+}
+
+
+ // insert listbox entries after index idx
+
+static void insert_entries(Pane* pane, Entry* parent, int idx)
+{
+	Entry* entry = parent;
+
+	if (!entry)
+		return;
+
+	ShowWindow(pane->hwnd, SW_HIDE);
+
+	for(; entry; entry=entry->next) {
+#ifndef _LEFT_FILES
+		if (pane->treePane && !(entry->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
+			continue;
+#endif
+
+		 // don't display entries "." and ".." in the left pane
+		if (pane->treePane && (entry->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
+				&& entry->data.cFileName[0]==_T('.'))
+			if (
+#ifndef _NO_EXTENSIONS
+				entry->data.cFileName[1]==_T('\0') ||
+#endif
+				(entry->data.cFileName[1]==_T('.') && entry->data.cFileName[2]==_T('\0')))
+				continue;
+
+		if (idx != -1)
+			idx++;
+
+		ListBox_InsertItemData(pane->hwnd, idx, entry);
+
+		if (pane->treePane && entry->expanded)
+			insert_entries(pane, entry->down, idx);
+	}
+
+	ShowWindow(pane->hwnd, SW_SHOW);
+}
+
+
+static WNDPROC g_orgTreeWndProc;
+
+static void create_tree_window(HWND parent, Pane* pane, int id, int id_header)
+{
+	static int s_init = 0;
+	Entry* entry = pane->root;
+
+	pane->hwnd = CreateWindow(_T("ListBox"), _T(""), WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|
+								LBS_DISABLENOSCROLL|LBS_NOINTEGRALHEIGHT|LBS_OWNERDRAWFIXED|LBS_NOTIFY,
+								0, 0, 0, 0, parent, (HMENU)id, Globals.hInstance, 0);
+
+	SetWindowLong(pane->hwnd, GWL_USERDATA, (LPARAM)pane);
+	g_orgTreeWndProc = SubclassWindow(pane->hwnd, TreeWndProc);
+
+	SendMessage(pane->hwnd, WM_SETFONT, (WPARAM)Globals.hfont, FALSE);
+
+	 // insert entries into listbox
+	if (entry)
+		insert_entries(pane, entry, -1);
+
+	 // calculate column widths
+	if (!s_init) {
+		s_init = 1;
+		init_output(pane->hwnd);
+	}
+
+	calc_widths(pane, TRUE);
+
+#ifndef _NO_EXTENSIONS
+	pane->hwndHeader = create_header(parent, pane, id_header);
+#endif
+}
+
+
+static void InitChildWindow(ChildWnd* child)
+{
+	create_tree_window(child->hwnd, &child->left, IDW_TREE_LEFT, IDW_HEADER_LEFT);
+	create_tree_window(child->hwnd, &child->right, IDW_TREE_RIGHT, IDW_HEADER_RIGHT);
+}
+
+
+static void format_date(const FILETIME* ft, TCHAR* buffer, int visible_cols)
+{
+	SYSTEMTIME systime;
+	FILETIME lft;
+	int len = 0;
+
+	*buffer = _T('\0');
+
+	if (!ft->dwLowDateTime && !ft->dwHighDateTime)
+		return;
+
+	if (!FileTimeToLocalFileTime(ft, &lft))
+		{err: _tcscpy(buffer,_T("???")); return;}
+
+	if (!FileTimeToSystemTime(&lft, &systime))
+		goto err;
+
+	if (visible_cols & COL_DATE) {
+		len = GetDateFormat(LOCALE_USER_DEFAULT, 0, &systime, 0, buffer, BUFFER_LEN);
+		if (!len)
+			goto err;
+	}
+
+	if (visible_cols & COL_TIME) {
+		if (len)
+			buffer[len-1] = ' ';
+
+		buffer[len++] = ' ';
+
+		if (!GetTimeFormat(LOCALE_USER_DEFAULT, 0, &systime, 0, buffer+len, BUFFER_LEN-len))
+			buffer[len] = _T('\0');
+	}
+}
+
+
+static void calc_width(Pane* pane, LPDRAWITEMSTRUCT dis, int col, LPCTSTR str)
+{
+	RECT rt = {0};
+
+	DrawText(dis->hDC, (LPTSTR)str, -1, &rt, DT_CALCRECT|DT_SINGLELINE|DT_NOPREFIX);
+
+	if (rt.right > pane->widths[col])
+		pane->widths[col] = rt.right;
+}
+
+static void calc_tabbed_width(Pane* pane, LPDRAWITEMSTRUCT dis, int col, LPCTSTR str)
+{
+	RECT rt = {0};
+
+/*	DRAWTEXTPARAMS dtp = {sizeof(DRAWTEXTPARAMS), 2};
+	DrawTextEx(dis->hDC, (LPTSTR)str, -1, &rt, DT_CALCRECT|DT_SINGLELINE|DT_NOPREFIX|DT_EXPANDTABS|DT_TABSTOP, &dtp);*/
+
+	DrawText(dis->hDC, (LPTSTR)str, -1, &rt, DT_CALCRECT|DT_SINGLELINE|DT_EXPANDTABS|DT_TABSTOP|(2<<8));
+//@@ rt (0,0) ???
+
+	if (rt.right > pane->widths[col])
+		pane->widths[col] = rt.right;
+}
+
+
+static void output_text(Pane* pane, LPDRAWITEMSTRUCT dis, int col, LPCTSTR str, DWORD flags)
+{
+	int x = dis->rcItem.left;
+	RECT rt = {x+pane->positions[col]+Globals.spaceSize.cx, dis->rcItem.top, x+pane->positions[col+1]-Globals.spaceSize.cx, dis->rcItem.bottom};
+
+	DrawText(dis->hDC, (LPTSTR)str, -1, &rt, DT_SINGLELINE|DT_NOPREFIX|flags);
+}
+
+static void output_tabbed_text(Pane* pane, LPDRAWITEMSTRUCT dis, int col, LPCTSTR str)
+{
+	int x = dis->rcItem.left;
+	RECT rt = {x+pane->positions[col]+Globals.spaceSize.cx, dis->rcItem.top, x+pane->positions[col+1]-Globals.spaceSize.cx, dis->rcItem.bottom};
+
+/*	DRAWTEXTPARAMS dtp = {sizeof(DRAWTEXTPARAMS), 2};
+	DrawTextEx(dis->hDC, (LPTSTR)str, -1, &rt, DT_SINGLELINE|DT_NOPREFIX|DT_EXPANDTABS|DT_TABSTOP, &dtp);*/
+
+	DrawText(dis->hDC, (LPTSTR)str, -1, &rt, DT_SINGLELINE|DT_EXPANDTABS|DT_TABSTOP|(2<<8));
+}
+
+static void output_number(Pane* pane, LPDRAWITEMSTRUCT dis, int col, LPCTSTR str)
+{
+	int x = dis->rcItem.left;
+	RECT rt = {x+pane->positions[col]+Globals.spaceSize.cx, dis->rcItem.top, x+pane->positions[col+1]-Globals.spaceSize.cx, dis->rcItem.bottom};
+	LPCTSTR s = str;
+	TCHAR b[128];
+	LPTSTR d = b;
+	int pos;
+
+	if (*s)
+		*d++ = *s++;
+
+	 // insert number separator characters
+	pos = lstrlen(s) % 3;
+
+	while(*s)
+		if (pos--)
+			*d++ = *s++;
+		else {
+			*d++ = Globals.num_sep;
+			pos = 3;
+		}
+
+	DrawText(dis->hDC, b, d-b, &rt, DT_RIGHT|DT_SINGLELINE|DT_NOPREFIX|DT_END_ELLIPSIS);
+}
+
+
+static int is_exe_file(LPCTSTR ext)
+{
+	const static LPCTSTR executable_extensions[] = {
+		_T("COM"),
+		_T("EXE"),
+		_T("BAT"),
+		_T("CMD"),
+#ifndef _NO_EXTENSIONS
+		_T("CMM"),
+		_T("BTM"),
+		_T("AWK"),
+#endif
+		0
+	};
+
+	TCHAR ext_buffer[_MAX_EXT];
+	const LPCTSTR* p;
+	LPCTSTR s;
+	LPTSTR d;
+
+	for(s=ext+1,d=ext_buffer; (*d=tolower(*s)); s++)
+		d++;
+
+	for(p=executable_extensions; *p; p++)
+		if (!_tcscmp(ext_buffer, *p))
+			return 1;
+
+	return 0;
+}
+
+static int is_registered_type(LPCTSTR ext)
+{
+	//TODO
+
+	return 1;
+}
+
+
+static void draw_item(Pane* pane, LPDRAWITEMSTRUCT dis, Entry* entry, int calcWidthCol)
+{
+	TCHAR buffer[BUFFER_LEN];
+	DWORD attrs;
+	int visible_cols = pane->visible_cols;
+	COLORREF bkcolor, textcolor;
+	RECT focusRect = dis->rcItem;
+	HBRUSH hbrush;
+	enum IMAGE img;
+#ifndef _NO_EXTENSIONS
+	QWORD index;
+#endif
+	int img_pos, cx;
+	int col = 0;
+
+	if (entry) {
+		attrs = entry->data.dwFileAttributes;
+
+		if (attrs & FILE_ATTRIBUTE_DIRECTORY) {
+			if (entry->data.cFileName[0]==_T('.') && entry->data.cFileName[1]==_T('.')
+					&& entry->data.cFileName[2]==_T('\0'))
+				img = IMG_FOLDER_UP;
+#ifndef _NO_EXTENSIONS
+			else if (entry->data.cFileName[0]==_T('.') && entry->data.cFileName[1]==_T('\0'))
+				img = IMG_FOLDER_CUR;
+#endif
+			else if (
+#ifdef _NO_EXTENSIONS
+					 entry->expanded ||
+#endif
+					 (pane->treePane && (dis->itemState&ODS_FOCUS)))
+				img = IMG_OPEN_FOLDER;
+			else
+				img = IMG_FOLDER;
+		} else {
+			LPCTSTR ext = _tcsrchr(entry->data.cFileName, '.');
+			if (!ext)
+				ext = _T("");
+
+			if (is_exe_file(ext))
+				img = IMG_EXECUTABLE;
+			else if (is_registered_type(ext))
+				img = IMG_DOCUMENT;
+			else
+				img = IMG_FILE;
+		}
+	} else {
+		attrs = 0;
+		img = IMG_NONE;
+	}
+
+	if (pane->treePane) {
+		if (entry) {
+			img_pos = dis->rcItem.left + entry->level*(IMAGE_WIDTH+Globals.spaceSize.cx);
+
+			if (calcWidthCol == -1) {
+				int x;
+				int y = dis->rcItem.top + IMAGE_HEIGHT/2;
+				Entry* up;
+				RECT rt_clip = {dis->rcItem.left, dis->rcItem.top, dis->rcItem.left+pane->widths[col], dis->rcItem.bottom};
+				HRGN hrgn_org = CreateRectRgn(0, 0, 0, 0);
+				HRGN hrgn = CreateRectRgnIndirect(&rt_clip);
+
+				if (!GetClipRgn(dis->hDC, hrgn_org)) {
+					DeleteObject(hrgn_org);
+					hrgn_org = 0;
+				}
+
+//				HGDIOBJ holdPen = SelectObject(dis->hDC, GetStockObject(BLACK_PEN));
+				ExtSelectClipRgn(dis->hDC, hrgn, RGN_AND);
+				DeleteObject(hrgn);
+
+				if ((up=entry->up) != NULL) {
+					MoveToEx(dis->hDC, img_pos-IMAGE_WIDTH/2, y, 0);
+					LineTo(dis->hDC, img_pos-2, y);
+
+					x = img_pos - IMAGE_WIDTH/2;
+
+					do {
+						x -= IMAGE_WIDTH+Globals.spaceSize.cx;
+
+						if (up->next
+#ifndef _LEFT_FILES
+							&& (up->next->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
+#endif
+							) {
+							MoveToEx(dis->hDC, x, dis->rcItem.top, 0);
+							LineTo(dis->hDC, x, dis->rcItem.bottom);
+						}
+					} while((up=up->up) != NULL);
+				}
+
+				x = img_pos - IMAGE_WIDTH/2;
+
+				MoveToEx(dis->hDC, x, dis->rcItem.top, 0);
+				LineTo(dis->hDC, x, y);
+
+				if (entry->next
+#ifndef _LEFT_FILES
+					&& (entry->next->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
+#endif
+					)
+					LineTo(dis->hDC, x, dis->rcItem.bottom);
+
+				if (entry->down && entry->expanded) {
+					x += IMAGE_WIDTH+Globals.spaceSize.cx;
+					MoveToEx(dis->hDC, x, dis->rcItem.top+IMAGE_HEIGHT, 0);
+					LineTo(dis->hDC, x, dis->rcItem.bottom);
+				}
+
+				SelectClipRgn(dis->hDC, hrgn_org);
+				if (hrgn_org) DeleteObject(hrgn_org);
+//				SelectObject(dis->hDC, holdPen);
+			} else if (calcWidthCol==col || calcWidthCol==COLUMNS) {
+				int right = img_pos + IMAGE_WIDTH - Globals.spaceSize.cx;
+
+				if (right > pane->widths[col])
+					pane->widths[col] = right;
+			}
+		} else  {
+			img_pos = dis->rcItem.left;
+		}
+	} else {
+		img_pos = dis->rcItem.left;
+
+		if (calcWidthCol==col || calcWidthCol==COLUMNS)
+			pane->widths[col] = IMAGE_WIDTH;
+	}
+
+	if (calcWidthCol == -1) {
+		focusRect.left = img_pos -2;
+
+#ifdef _NO_EXTENSIONS
+		if (pane->treePane && entry) {
+			RECT rt = {0};
+
+			DrawText(dis->hDC, entry->data.cFileName, -1, &rt, DT_CALCRECT|DT_SINGLELINE|DT_NOPREFIX);
+
+			focusRect.right = dis->rcItem.left+pane->positions[col+1]+Globals.spaceSize.cx + rt.right +2;
+		}
+#else
+
+		if (attrs & FILE_ATTRIBUTE_COMPRESSED)
+			textcolor = COLOR_COMPRESSED;
+		else
+#endif
+			textcolor = RGB(0,0,0);
+
+		if (dis->itemState & ODS_FOCUS) {
+			textcolor = RGB(255,255,255);
+			bkcolor = COLOR_SELECTION;
+		} else {
+			bkcolor = RGB(255,255,255);
+		}
+
+		hbrush = CreateSolidBrush(bkcolor);
+		FillRect(dis->hDC, &focusRect, hbrush);
+		DeleteObject(hbrush);
+
+		SetBkMode(dis->hDC, TRANSPARENT);
+		SetTextColor(dis->hDC, textcolor);
+
+		cx = pane->widths[col];
+
+		if (cx && img!=IMG_NONE) {
+			if (cx > IMAGE_WIDTH)
+				cx = IMAGE_WIDTH;
+
+			ImageList_DrawEx(Globals.himl, img, dis->hDC,
+								img_pos, dis->rcItem.top, cx,
+								IMAGE_HEIGHT, bkcolor, CLR_DEFAULT, ILD_NORMAL);
+		}
+	}
+
+	if (!entry)
+		return;
+
+#ifdef _NO_EXTENSIONS
+	if (img >= IMG_FOLDER_UP)
+		return;
+#endif
+
+	col++;
+
+	 // ouput file name
+	if (calcWidthCol == -1)
+		output_text(pane, dis, col, entry->data.cFileName, 0);
+	else if (calcWidthCol==col || calcWidthCol==COLUMNS)
+		calc_width(pane, dis, col, entry->data.cFileName);
+
+	col++;
+
+#ifdef _NO_EXTENSIONS
+  if (!pane->treePane) {
+#endif
+
+	 // display file size
+	if (visible_cols & COL_SIZE) {
+#ifdef _NO_EXTENSIONS
+		if (!(attrs&FILE_ATTRIBUTE_DIRECTORY))
+#endif
+		{
+			QWORD size;
+
+			*(DWORD*)(&size) = entry->data.nFileSizeLow;	//TODO: platform spefific
+			*(((DWORD*)&size)+1) = entry->data.nFileSizeHigh;
+
+			_stprintf(buffer, _T("%") LONGLONGARG _T("d"), size);
+
+			if (calcWidthCol == -1)
+				output_number(pane, dis, col, buffer);
+			else if (calcWidthCol==col || calcWidthCol==COLUMNS)
+				calc_width(pane, dis, col, buffer);//TODO: not ever time enough
+		}
+
+		col++;
+	}
+
+	 // display file date
+	if (visible_cols & (COL_DATE|COL_TIME)) {
+#ifndef _NO_EXTENSIONS
+		format_date(&entry->data.ftCreationTime, buffer, visible_cols);
+		if (calcWidthCol == -1)
+			output_text(pane, dis, col, buffer, 0);
+		else if (calcWidthCol==col || calcWidthCol==COLUMNS)
+			calc_width(pane, dis, col, buffer);
+		col++;
+
+		format_date(&entry->data.ftLastAccessTime, buffer, visible_cols);
+		if (calcWidthCol == -1)
+			output_text(pane, dis, col, buffer, 0);
+		else if (calcWidthCol==col || calcWidthCol==COLUMNS)
+			calc_width(pane, dis, col, buffer);
+		col++;
+#endif
+
+		format_date(&entry->data.ftLastWriteTime, buffer, visible_cols);
+		if (calcWidthCol == -1)
+			output_text(pane, dis, col, buffer, 0);
+		else if (calcWidthCol==col || calcWidthCol==COLUMNS)
+			calc_width(pane, dis, col, buffer);
+		col++;
+	}
+
+#ifndef _NO_EXTENSIONS
+	if (entry->bhfi_valid) {
+		((DWORD*)&index)[0] = entry->bhfi.nFileIndexLow;	//TODO: platform spefific
+		((DWORD*)&index)[1] = entry->bhfi.nFileIndexHigh;
+
+		if (visible_cols & COL_INDEX) {
+			_stprintf(buffer, _T("%") LONGLONGARG _T("X"), index);
+			if (calcWidthCol == -1)
+				output_text(pane, dis, col, buffer, DT_RIGHT);
+			else if (calcWidthCol==col || calcWidthCol==COLUMNS)
+				calc_width(pane, dis, col, buffer);
+			col++;
+		}
+
+		if (visible_cols & COL_LINKS) {
+			wsprintf(buffer, _T("%d"), entry->bhfi.nNumberOfLinks);
+			if (calcWidthCol == -1)
+				output_text(pane, dis, col, buffer, DT_CENTER);
+			else if (calcWidthCol==col || calcWidthCol==COLUMNS)
+				calc_width(pane, dis, col, buffer);
+			col++;
+		}
+	} else
+		col += 2;
+#endif
+
+	 // show file attributes
+	if (visible_cols & COL_ATTRIBUTES) {
+#ifdef _NO_EXTENSIONS
+		_tcscpy(buffer, _T(" \t \t \t \t "));
+#else
+		_tcscpy(buffer, _T(" \t \t \t \t \t \t \t \t \t \t \t "));
+#endif
+
+		if (attrs & FILE_ATTRIBUTE_NORMAL)					buffer[ 0] = 'N';
+		else {
+			if (attrs & FILE_ATTRIBUTE_READONLY)			buffer[ 2] = 'R';
+			if (attrs & FILE_ATTRIBUTE_HIDDEN)				buffer[ 4] = 'H';
+			if (attrs & FILE_ATTRIBUTE_SYSTEM)				buffer[ 6] = 'S';
+			if (attrs & FILE_ATTRIBUTE_ARCHIVE)				buffer[ 8] = 'A';
+			if (attrs & FILE_ATTRIBUTE_COMPRESSED)			buffer[10] = 'C';
+#ifndef _NO_EXTENSIONS
+			if (attrs & FILE_ATTRIBUTE_DIRECTORY)			buffer[12] = 'D';
+			if (attrs & FILE_ATTRIBUTE_ENCRYPTED)			buffer[14] = 'E';
+			if (attrs & FILE_ATTRIBUTE_TEMPORARY)			buffer[16] = 'T';
+			if (attrs & FILE_ATTRIBUTE_SPARSE_FILE)			buffer[18] = 'P';
+			if (attrs & FILE_ATTRIBUTE_REPARSE_POINT)		buffer[20] = 'Q';
+			if (attrs & FILE_ATTRIBUTE_OFFLINE)				buffer[22] = 'O';
+			if (attrs & FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)	buffer[24] = 'X';
+#endif
+		}
+
+		if (calcWidthCol == -1)
+			output_tabbed_text(pane, dis, col, buffer);
+		else if (calcWidthCol==col || calcWidthCol==COLUMNS)
+			calc_tabbed_width(pane, dis, col, buffer);
+
+		col++;
+	}
+
+/*TODO
+	if (flags.security) {
+		DWORD rights = get_access_mask();
+
+		tcscpy(buffer, _T(" \t \t \t  \t  \t \t \t  \t  \t \t \t "));
+
+		if (rights & FILE_READ_DATA)			buffer[ 0] = 'R';
+		if (rights & FILE_WRITE_DATA)			buffer[ 2] = 'W';
+		if (rights & FILE_APPEND_DATA)			buffer[ 4] = 'A';
+		if (rights & FILE_READ_EA)				{buffer[6] = 'entry'; buffer[ 7] = 'R';}
+		if (rights & FILE_WRITE_EA)				{buffer[9] = 'entry'; buffer[10] = 'W';}
+		if (rights & FILE_EXECUTE)				buffer[12] = 'X';
+		if (rights & FILE_DELETE_CHILD)			buffer[14] = 'D';
+		if (rights & FILE_READ_ATTRIBUTES)		{buffer[16] = 'a'; buffer[17] = 'R';}
+		if (rights & FILE_WRITE_ATTRIBUTES)		{buffer[19] = 'a'; buffer[20] = 'W';}
+		if (rights & WRITE_DAC)					buffer[22] = 'C';
+		if (rights & WRITE_OWNER)				buffer[24] = 'O';
+		if (rights & SYNCHRONIZE)				buffer[26] = 'S';
+
+		output_text(dis, col++, buffer, DT_LEFT, 3, psize);
+	}
+
+	if (flags.description) {
+		get_description(buffer);
+		output_text(dis, col++, buffer, 0, psize);
+	}
+*/
+
+#ifdef _NO_EXTENSIONS
+  }
+
+	 // draw focus frame
+	if ((dis->itemState&ODS_FOCUS) && calcWidthCol==-1) {
+		 // Currently [04/2000] Wine neither behaves exactly the same
+		 // way as WIN 95 nor like Windows NT...
+		HGDIOBJ lastBrush;
+		HPEN lastPen;
+		HPEN hpen;
+
+		if (!(GetVersion() & 0x80000000)) {	// Windows NT?
+			LOGBRUSH lb = {PS_SOLID, RGB(255,255,255)};
+			hpen = ExtCreatePen(PS_COSMETIC|PS_ALTERNATE, 1, &lb, 0, 0);
+		} else
+			hpen = CreatePen(PS_DOT, 0, RGB(255,255,255));
+
+		lastPen = SelectPen(dis->hDC, hpen);
+		lastBrush = SelectObject(dis->hDC, GetStockObject(HOLLOW_BRUSH));
+		SetROP2(dis->hDC, R2_XORPEN);
+		Rectangle(dis->hDC, focusRect.left, focusRect.top, focusRect.right, focusRect.bottom);
+		SelectObject(dis->hDC, lastBrush);
+		SelectObject(dis->hDC, lastPen);
+		DeleteObject(hpen);
+	}
+#endif
+}
+
+
+#ifdef _NO_EXTENSIONS
+
+static void draw_splitbar(HWND hwnd, int x)
+{
+	RECT rt;
+	HDC hdc = GetDC(hwnd);
+
+	GetClientRect(hwnd, &rt);
+
+	rt.left = x - SPLIT_WIDTH/2;
+	rt.right = x + SPLIT_WIDTH/2+1;
+
+	InvertRect(hdc, &rt);
+
+	ReleaseDC(hwnd, hdc);
+}
+
+#endif
+
+
+#ifndef _NO_EXTENSIONS
+
+static void set_header(Pane* pane)
+{
+	HD_ITEM item;
+	int scroll_pos = GetScrollPos(pane->hwnd, SB_HORZ);
+	int i=0, x=0;
+
+	item.mask = HDI_WIDTH;
+	item.cxy = 0;
+
+	for(; x+pane->widths[i]<scroll_pos && i<COLUMNS; i++) {
+		x += pane->widths[i];
+		Header_SetItem(pane->hwndHeader, i, &item);
+	}
+
+	if (i < COLUMNS) {
+		x += pane->widths[i];
+		item.cxy = x - scroll_pos;
+		Header_SetItem(pane->hwndHeader, i++, &item);
+
+		for(; i<COLUMNS; i++) {
+			item.cxy = pane->widths[i];
+			x += pane->widths[i];
+			Header_SetItem(pane->hwndHeader, i, &item);
+		}
+	}
+}
+
+static LRESULT pane_notify(Pane* pane, NMHDR* pnmh)
+{
+	switch(pnmh->code) {
+		case HDN_TRACK:
+		case HDN_ENDTRACK: {
+			HD_NOTIFY* phdn = (HD_NOTIFY*) pnmh;
+			int idx = phdn->iItem;
+			int dx = phdn->pitem->cxy - pane->widths[idx];
+			int i;
+
+			RECT clnt;
+			GetClientRect(pane->hwnd, &clnt);
+
+			 // move immediate to simulate HDS_FULLDRAG (for now [04/2000] not realy needed with WINELIB)
+			Header_SetItem(pane->hwndHeader, idx, phdn->pitem);
+
+			pane->widths[idx] += dx;
+
+			for(i=idx; ++i<=COLUMNS; )
+				pane->positions[i] += dx;
+
+			{
+				int scroll_pos = GetScrollPos(pane->hwnd, SB_HORZ);
+				RECT rt_scr = {pane->positions[idx+1]-scroll_pos, 0, clnt.right, clnt.bottom};
+				RECT rt_clip = {pane->positions[idx]-scroll_pos, 0, clnt.right, clnt.bottom};
+
+				if (rt_scr.left < 0) rt_scr.left = 0;
+				if (rt_clip.left < 0) rt_clip.left = 0;
+
+				ScrollWindowEx(pane->hwnd, dx, 0, &rt_scr, &rt_clip, 0, 0, SW_INVALIDATE);
+
+				rt_clip.right = pane->positions[idx+1];
+				RedrawWindow(pane->hwnd, &rt_clip, 0, RDW_INVALIDATE|RDW_UPDATENOW);
+
+				if (pnmh->code == HDN_ENDTRACK) {
+					ListBox_SetHorizontalExtent(pane->hwnd, pane->positions[COLUMNS]);
+
+					if (GetScrollPos(pane->hwnd, SB_HORZ) != scroll_pos)
+						set_header(pane);
+				}
+			}
+
+			return FALSE;
+		}
+
+		case HDN_DIVIDERDBLCLICK: {
+			HD_NOTIFY* phdn = (HD_NOTIFY*) pnmh;
+			HD_ITEM item;
+
+			calc_single_width(pane, phdn->iItem);
+			item.mask = HDI_WIDTH;
+			item.cxy = pane->widths[phdn->iItem];
+
+			Header_SetItem(pane->hwndHeader, phdn->iItem, &item);
+			InvalidateRect(pane->hwnd, 0, TRUE);
+			break;}
+	}
+
+	return 0;
+}
+
+#endif
+
+
+static void scan_entry(ChildWnd* child, Entry* entry)
+{
+	TCHAR path[MAX_PATH];
+	int idx = ListBox_GetCurSel(child->left.hwnd);
+	HCURSOR crsrOld = SetCursor(LoadCursor(0, IDC_WAIT));
+
+	 // delete sub entries in left pane
+	for(;;) {
+		LRESULT res = ListBox_GetItemData(child->left.hwnd, idx+1);
+		Entry* sub = (Entry*) res;
+
+		if (res==LB_ERR || !sub || sub->level<=entry->level)
+			break;
+
+		ListBox_DeleteString(child->left.hwnd, idx+1);
+	}
+
+	 // empty right pane
+	ListBox_ResetContent(child->right.hwnd);
+
+	 // release memory
+	free_entries(entry);
+
+	 // read contents from disk
+	get_path(entry, path);
+	read_directory(entry, path, child->sortOrder);
+
+	 // insert found entries in right pane
+	insert_entries(&child->right, entry->down, -1);
+	calc_widths(&child->right, FALSE);
+#ifndef _NO_EXTENSIONS
+	set_header(&child->right);
+#endif
+
+	child->header_wdths_ok = FALSE;
+
+	SetCursor(crsrOld);
+}
+
+
+ // expand a directory entry
+
+static BOOL expand_entry(ChildWnd* child, Entry* dir)
+{
+	int idx;
+	Entry* p;
+
+	if (!dir || dir->expanded || !dir->down)
+		return FALSE;
+
+	p = dir->down;
+
+	if (p->data.cFileName[0]=='.' && p->data.cFileName[1]=='\0' && p->next) {
+		p = p->next;
+
+		if (p->data.cFileName[0]=='.' && p->data.cFileName[1]=='.' &&
+				p->data.cFileName[2]=='\0' && p->next)
+			p = p->next;
+	}
+
+	 // no subdirectories ?
+	if (!(p->data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
+		return FALSE;
+
+	idx = ListBox_FindItemData(child->left.hwnd, 0, dir);
+
+	dir->expanded = TRUE;
+
+	 // insert entries in left pane
+	insert_entries(&child->left, p, idx);
+
+	if (!child->header_wdths_ok) {
+		if (calc_widths(&child->left, FALSE)) {
+#ifndef _NO_EXTENSIONS
+			set_header(&child->left);
+#endif
+
+			child->header_wdths_ok = TRUE;
+		}
+	}
+
+	return TRUE;
+}
+
+
+static void collapse_entry(Pane* pane, Entry* dir)
+{
+	int idx = ListBox_FindItemData(pane->hwnd, 0, dir);
+
+	ShowWindow(pane->hwnd, SW_HIDE);
+
+	 // hide sub entries
+	for(;;) {
+		LRESULT res = ListBox_GetItemData(pane->hwnd, idx+1);
+		Entry* sub = (Entry*) res;
+
+		if (res==LB_ERR || !sub || sub->level<=dir->level)
+			break;
+
+		ListBox_DeleteString(pane->hwnd, idx+1);
+	}
+
+	dir->expanded = FALSE;
+
+	ShowWindow(pane->hwnd, SW_SHOW);
+}
+
+
+static void set_curdir(ChildWnd* child, Entry* entry)
+{
+	TCHAR path[MAX_PATH];
+
+	child->left.cur = entry;
+	child->right.root = entry;
+	child->right.cur = entry;
+
+	if (!entry->scanned)
+		scan_entry(child, entry);
+	else {
+		ListBox_ResetContent(child->right.hwnd);
+		insert_entries(&child->right, entry->down, -1);
+		calc_widths(&child->right, FALSE);
+#ifndef _NO_EXTENSIONS
+		set_header(&child->right);
+#endif
+	}
+
+	get_path(entry, path);
+	lstrcpy(child->path, path);
+	SetWindowText(child->hwnd, path);
+	SetCurrentDirectory(path);
+}
+
+
+static void activate_entry(ChildWnd* child, Pane* pane)
+{
+	Entry* entry = pane->cur;
+
+	if (!entry)
+		return;
+
+	if (entry->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+		int scanned_old = entry->scanned;
+
+		if (!scanned_old)
+			scan_entry(child, entry);
+
+#ifndef _NO_EXTENSIONS
+		if (entry->data.cFileName[0]=='.' && entry->data.cFileName[1]=='\0')
+			return;
+#endif
+
+		if (entry->data.cFileName[0]=='.' && entry->data.cFileName[1]=='.' && entry->data.cFileName[2]=='\0') {
+			entry = child->left.cur->up;
+			collapse_entry(&child->left, entry);
+			goto focus_entry;
+		} else if (entry->expanded)
+			collapse_entry(pane, child->left.cur);
+		else {
+			expand_entry(child, child->left.cur);
+
+			if (!pane->treePane) focus_entry: {
+				int idx = ListBox_FindItemData(child->left.hwnd, ListBox_GetCurSel(child->left.hwnd), entry);
+				ListBox_SetCurSel(child->left.hwnd, idx);
+				set_curdir(child, entry);
+			}
+		}
+
+		if (!scanned_old) {
+			calc_widths(pane, FALSE);
+
+#ifndef _NO_EXTENSIONS
+			set_header(pane);
+#endif
+		}
+	} else {
+
+		//TODO: start program, open document...
+
+	}
+}
+
+
+static BOOL pane_command(Pane* pane, UINT cmd)
+{
+	switch(cmd) {
+		case ID_VIEW_NAME:
+			if (pane->visible_cols) {
+				pane->visible_cols = 0;
+				calc_widths(pane, TRUE);
+#ifndef _NO_EXTENSIONS
+				set_header(pane);
+#endif
+				InvalidateRect(pane->hwnd, 0, TRUE);
+				CheckMenuItem(Globals.hMenuView, ID_VIEW_NAME, MF_BYCOMMAND|MF_CHECKED);
+				CheckMenuItem(Globals.hMenuView, ID_VIEW_ALL_ATTRIBUTES, MF_BYCOMMAND);
+				CheckMenuItem(Globals.hMenuView, ID_VIEW_SELECTED_ATTRIBUTES, MF_BYCOMMAND);
+			}
+			break;
+
+		case ID_VIEW_ALL_ATTRIBUTES:
+			if (pane->visible_cols != COL_ALL) {
+				pane->visible_cols = COL_ALL;
+				calc_widths(pane, TRUE);
+#ifndef _NO_EXTENSIONS
+				set_header(pane);
+#endif
+				InvalidateRect(pane->hwnd, 0, TRUE);
+				CheckMenuItem(Globals.hMenuView, ID_VIEW_NAME, MF_BYCOMMAND);
+				CheckMenuItem(Globals.hMenuView, ID_VIEW_ALL_ATTRIBUTES, MF_BYCOMMAND|MF_CHECKED);
+				CheckMenuItem(Globals.hMenuView, ID_VIEW_SELECTED_ATTRIBUTES, MF_BYCOMMAND);
+			}
+			break;
+
+#ifndef _NO_EXTENSIONS
+		case ID_PREFERED_SIZES: {
+			calc_widths(pane, TRUE);
+			set_header(pane);
+			InvalidateRect(pane->hwnd, 0, TRUE);
+			break;}
+#endif
+
+			// TODO: more command ids...
+
+		default:
+			return FALSE;
+	}
+
+	return TRUE;
+}
+
+
+LRESULT CALLBACK ChildWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
+{
+	static int last_split;
+
+	ChildWnd* child = (ChildWnd*) GetWindowLong(hwnd, GWL_USERDATA);
+	ASSERT(child);
+
+	switch(nmsg) {
+		case WM_DRAWITEM: {
+			LPDRAWITEMSTRUCT dis = (LPDRAWITEMSTRUCT)lparam;
+			Entry* entry = (Entry*) dis->itemData;
+
+			if (dis->CtlID == IDW_TREE_LEFT)
+				draw_item(&child->left, dis, entry, -1);
+			else
+				draw_item(&child->right, dis, entry, -1);
+
+			return TRUE;}
+
+		case WM_CREATE:
+			InitChildWindow(child);
+			break;
+
+		case WM_NCDESTROY:
+			free_child_window(child);
+			SetWindowLong(hwnd, GWL_USERDATA, 0);
+			break;
+
+		case WM_PAINT: {
+			PAINTSTRUCT ps;
+			HBRUSH lastBrush;
+			RECT rt;
+			GetClientRect(hwnd, &rt);
+			BeginPaint(hwnd, &ps);
+			rt.left = child->split_pos-SPLIT_WIDTH/2;
+			rt.right = child->split_pos+SPLIT_WIDTH/2+1;
+			lastBrush = SelectBrush(ps.hdc, (HBRUSH)GetStockObject(COLOR_SPLITBAR));
+			Rectangle(ps.hdc, rt.left, rt.top-1, rt.right, rt.bottom+1);
+			SelectObject(ps.hdc, lastBrush);
+#ifdef _NO_EXTENSIONS
+			rt.top = rt.bottom - GetSystemMetrics(SM_CYHSCROLL);
+			FillRect(ps.hdc, &rt, GetStockObject(BLACK_BRUSH));
+#endif
+			EndPaint(hwnd, &ps);
+			break;}
+
+		case WM_SETCURSOR:
+			if (LOWORD(lparam) == HTCLIENT) {
+				POINT pt;
+				GetCursorPos(&pt);
+				ScreenToClient(hwnd, &pt);
+
+				if (pt.x>=child->split_pos-SPLIT_WIDTH/2 && pt.x<child->split_pos+SPLIT_WIDTH/2+1) {
+					SetCursor(LoadCursor(0, IDC_SIZEWE));
+					return TRUE;
+				}
+			}
+			goto def;
+
+		case WM_LBUTTONDOWN: {
+			RECT rt;
+			int x = LOWORD(lparam);
+
+			GetClientRect(hwnd, &rt);
+
+			if (x>=child->split_pos-SPLIT_WIDTH/2 && x<child->split_pos+SPLIT_WIDTH/2+1) {
+				last_split = child->split_pos;
+#ifdef _NO_EXTENSIONS
+				draw_splitbar(hwnd, last_split);
+#endif
+				SetCapture(hwnd);
+			}
+
+			break;}
+
+		case WM_LBUTTONUP:
+			if (GetCapture() == hwnd) {
+#ifdef _NO_EXTENSIONS
+				RECT rt;
+				int x = LOWORD(lparam);
+				draw_splitbar(hwnd, last_split);
+				last_split = -1;
+				GetClientRect(hwnd, &rt);
+				child->split_pos = x;
+				resize_tree(child, rt.right, rt.bottom);
+#endif
+				ReleaseCapture();
+			}
+			break;
+
+#ifdef _NO_EXTENSIONS
+		case WM_CAPTURECHANGED:
+			if (GetCapture()==hwnd && last_split>=0)
+				draw_splitbar(hwnd, last_split);
+			break;
+#endif
+
+		case WM_KEYDOWN:
+			if (wparam == VK_ESCAPE)
+				if (GetCapture() == hwnd) {
+					RECT rt;
+#ifdef _NO_EXTENSIONS
+					draw_splitbar(hwnd, last_split);
+#else
+					child->split_pos = last_split;
+#endif
+					GetClientRect(hwnd, &rt);
+					resize_tree(child, rt.right, rt.bottom);
+					last_split = -1;
+					ReleaseCapture();
+					SetCursor(LoadCursor(0, IDC_ARROW));
+				}
+			break;
+
+		case WM_MOUSEMOVE:
+			if (GetCapture() == hwnd) {
+				RECT rt;
+				int x = LOWORD(lparam);
+
+#ifdef _NO_EXTENSIONS
+				HDC hdc = GetDC(hwnd);
+				GetClientRect(hwnd, &rt);
+
+				rt.left = last_split-SPLIT_WIDTH/2;
+				rt.right = last_split+SPLIT_WIDTH/2+1;
+				InvertRect(hdc, &rt);
+
+				last_split = x;
+				rt.left = x-SPLIT_WIDTH/2;
+				rt.right = x+SPLIT_WIDTH/2+1;
+				InvertRect(hdc, &rt);
+
+				ReleaseDC(hwnd, hdc);
+#else
+				GetClientRect(hwnd, &rt);
+
+				if (x>=0 && x<rt.right) {
+					child->split_pos = x;
+					resize_tree(child, rt.right, rt.bottom);
+					rt.left = x-SPLIT_WIDTH/2;
+					rt.right = x+SPLIT_WIDTH/2+1;
+					InvalidateRect(hwnd, &rt, FALSE);
+					UpdateWindow(child->left.hwnd);
+					UpdateWindow(hwnd);
+					UpdateWindow(child->right.hwnd);
+				}
+#endif
+			}
+			break;
+
+#ifndef _NO_EXTENSIONS
+		case WM_GETMINMAXINFO:
+			DefMDIChildProc(hwnd, nmsg, wparam, lparam);
+
+			{LPMINMAXINFO lpmmi = (LPMINMAXINFO)lparam;
+
+			lpmmi->ptMaxTrackSize.x <<= 1;//2*GetSystemMetrics(SM_CXSCREEN) / SM_CXVIRTUALSCREEN
+			lpmmi->ptMaxTrackSize.y <<= 1;//2*GetSystemMetrics(SM_CYSCREEN) / SM_CYVIRTUALSCREEN
+			break;}
+#endif
+
+		case WM_SETFOCUS:
+			SetCurrentDirectory(child->path);
+			SetFocus(child->focus_pane? child->right.hwnd: child->left.hwnd);
+			break;
+
+		case WM_DISPATCH_COMMAND: {
+			Pane* pane = GetFocus()==child->left.hwnd? &child->left: &child->right;
+
+			switch(LOWORD(wparam)) {
+				case ID_WINDOW_NEW: {
+					ChildWnd* new_child = alloc_child_window(child->path);
+
+					if (!create_child_window(new_child))
+						free(new_child);
+
+					break;}
+
+				case ID_REFRESH:
+					scan_entry(child, pane->cur);
+					break;
+
+				case ID_ACTIVATE:
+					activate_entry(child, pane);
+					break;
+
+				default:
+					return pane_command(pane, LOWORD(wparam));
+			}
+
+			return TRUE;}
+
+		case WM_COMMAND: {
+			Pane* pane = GetFocus()==child->left.hwnd? &child->left: &child->right;
+
+			switch(HIWORD(wparam)) {
+				case LBN_SELCHANGE: {
+					int idx = ListBox_GetCurSel(pane->hwnd);
+					Entry* entry = (Entry*) ListBox_GetItemData(pane->hwnd, idx);
+
+					if (pane == &child->left)
+						set_curdir(child, entry);
+					else
+						pane->cur = entry;
+					break;}
+
+				case LBN_DBLCLK:
+					activate_entry(child, pane);
+					break;
+			}
+			break;}
+
+#ifndef _NO_EXTENSIONS
+		case WM_NOTIFY: {
+			NMHDR* pnmh = (NMHDR*) lparam;
+			return pane_notify(pnmh->idFrom==IDW_HEADER_LEFT? &child->left: &child->right, pnmh);}
+#endif
+
+		case WM_SIZE:
+			if (wparam != SIZE_MINIMIZED)
+				resize_tree(child, LOWORD(lparam), HIWORD(lparam));
+			 // fall through
+
+		default: def:
+			return DefMDIChildProc(hwnd, nmsg, wparam, lparam);
+	}
+
+	return 0;
+}
+
+
+LRESULT CALLBACK TreeWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
+{
+	ChildWnd* child = (ChildWnd*) GetWindowLong(GetParent(hwnd), GWL_USERDATA);
+	Pane* pane = (Pane*) GetWindowLong(hwnd, GWL_USERDATA);
+	ASSERT(child);
+
+	switch(nmsg) {
+#ifndef _NO_EXTENSIONS
+		case WM_HSCROLL:
+			set_header(pane);
+			break;
+#endif
+
+		case WM_SETFOCUS:
+			child->focus_pane = pane==&child->right? 1: 0;
+			ListBox_SetSel(hwnd, TRUE, 1);
+			//TODO: check menu items
+			break;
+
+		case WM_KEYDOWN:
+			if (wparam == VK_TAB) {
+				//TODO: SetFocus(Globals.hdrivebar)
+				SetFocus(child->focus_pane? child->left.hwnd: child->right.hwnd);
+			}
+	}
+
+	return CallWindowProc(g_orgTreeWndProc, hwnd, nmsg, wparam, lparam);
+}
+
+
+static void InitInstance(HINSTANCE hinstance)
+{
+	WNDCLASSEX wcFrame = {
+		sizeof(WNDCLASSEX),
+		0/*style*/,
+		FrameWndProc,
+		0/*cbClsExtra*/,
+		0/*cbWndExtra*/,
+		hinstance,
+		LoadIcon(hinstance, MAKEINTRESOURCE(IDI_WINEFILE)),
+		LoadCursor(0, IDC_ARROW),
+		0/*hbrBackground*/,
+		0/*lpszMenuName*/,
+		WINEFILEFRAME,
+		(HICON)LoadImage(hinstance, MAKEINTRESOURCE(IDI_WINEFILE), IMAGE_ICON,
+			GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED)
+	};
+
+	 // register frame window class
+	ATOM hframeClass = RegisterClassEx(&wcFrame);
+
+
+	WNDCLASS wcChild = {
+		CS_CLASSDC|CS_DBLCLKS|CS_VREDRAW,
+		ChildWndProc,
+		0/*cbClsExtra*/,
+		0/*cbWndExtra*/,
+		hinstance,
+		0/*hIcon*/,
+		LoadCursor(0, IDC_ARROW),
+		0/*hbrBackground*/,
+		0/*lpszMenuName*/,
+		WINEFILETREE
+	};
+
+	 // register tree windows class
+	WINE_UNUSED ATOM hChildClass = RegisterClass(&wcChild);
+
+
+	HMENU hMenuFrame = LoadMenu(hinstance, MAKEINTRESOURCE(IDM_WINEFILE));
+	HMENU hMenuWindow = GetSubMenu(hMenuFrame, GetMenuItemCount(hMenuFrame)-2);
+
+	CLIENTCREATESTRUCT ccs = {
+		hMenuWindow, IDW_FIRST_CHILD
+	};
+
+	INITCOMMONCONTROLSEX icc = {
+		sizeof(INITCOMMONCONTROLSEX),
+		ICC_BAR_CLASSES
+	};
+
+	ChildWnd* child;
+	TCHAR path[MAX_PATH];
+
+	HDC hdc = GetDC(0);
+
+	Globals.hMenuFrame = hMenuFrame;
+	Globals.hMenuView = GetSubMenu(hMenuFrame, 3);
+	Globals.hMenuOptions = GetSubMenu(hMenuFrame, 4);
+
+	Globals.haccel = LoadAccelerators(hinstance, MAKEINTRESOURCE(IDA_WINEFILE));
+
+	Globals.hfont = CreateFont(-MulDiv(8,GetDeviceCaps(hdc,LOGPIXELSY),72), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _T("MS Sans Serif"));
+
+	ReleaseDC(0, hdc);
+
+	Globals.hInstance = hinstance;
+
+	 // create main window
+	Globals.hMainWnd = CreateWindowEx(0, (LPCTSTR)(int)hframeClass, _T("Wine File"), WS_OVERLAPPEDWINDOW,
+					CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+					0/*hWndParent*/, Globals.hMenuFrame, hinstance, 0/*lpParam*/);
+
+
+	Globals.hmdiclient = CreateWindowEx(0, _T("MDICLIENT"), NULL,
+					WS_CHILD|WS_CLIPCHILDREN|WS_VSCROLL|WS_HSCROLL|WS_VISIBLE|WS_BORDER,
+					0, 0, 0, 0,
+					Globals.hMainWnd, 0, hinstance, &ccs);
+
+
+	InitCommonControlsEx(&icc);
+
+	{
+		TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP};
+		int btn = 1;
+		PTSTR p;
+
+		Globals.hdrivebar = CreateToolbarEx(Globals.hMainWnd, WS_CHILD|WS_VISIBLE|CCS_NOMOVEY|TBSTYLE_LIST,
+					IDW_DRIVEBAR, 2, Globals.hInstance, IDB_DRIVEBAR, &drivebarBtn,
+					1, 16, 13, 16, 13, sizeof(TBBUTTON));
+		CheckMenuItem(Globals.hMenuOptions, ID_VIEW_DRIVE_BAR, MF_BYCOMMAND|MF_CHECKED);
+
+		GetLogicalDriveStrings(BUFFER_LEN, Globals.drives);
+
+		drivebarBtn.fsStyle = TBSTYLE_BUTTON;
+
+#ifndef _NO_EXTENSIONS
+#ifdef __linux__
+		 // insert unix file system button
+		SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)_T("/\0"));
+
+		drivebarBtn.idCommand = ID_DRIVE_UNIX_FS;
+		SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++, (LPARAM)&drivebarBtn);
+		drivebarBtn.iString++;
+#endif
+
+		 // register windows drive root strings
+		SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)Globals.drives);
+#endif
+
+		drivebarBtn.idCommand = ID_DRIVE_FIRST;
+
+		for(p=Globals.drives; *p; ) {
+#ifdef _NO_EXTENSIONS
+			 // insert drive letter
+			TCHAR b[3] = {tolower(*p)};
+			SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)b);
+#endif
+			switch(GetDriveType(p)) {
+				case DRIVE_REMOVABLE:	drivebarBtn.iBitmap = 1;	break;
+				case DRIVE_CDROM:		drivebarBtn.iBitmap = 3;	break;
+				case DRIVE_REMOTE:		drivebarBtn.iBitmap = 4;	break;
+				case DRIVE_RAMDISK:		drivebarBtn.iBitmap = 5;	break;
+				default:/*DRIVE_FIXED*/	drivebarBtn.iBitmap = 2;
+			}
+
+			SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++, (LPARAM)&drivebarBtn);
+			drivebarBtn.idCommand++;
+			drivebarBtn.iString++;
+
+			while(*p++);
+		}
+	}
+
+	{
+		TBBUTTON toolbarBtns[] = {
+			{0, 0, 0, TBSTYLE_SEP},
+			{0, ID_WINDOW_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+			{1, ID_WINDOW_CASCADE, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+			{2, ID_WINDOW_TILE_HORZ, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+			{3, ID_WINDOW_TILE_VERT, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+			{4, 2/*TODO: ID_...*/, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+			{5, 2/*TODO: ID_...*/, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+		};
+
+		Globals.htoolbar = CreateToolbarEx(Globals.hMainWnd, WS_CHILD|WS_VISIBLE,
+			IDW_TOOLBAR, 2, Globals.hInstance, IDB_TOOLBAR, toolbarBtns,
+			sizeof(toolbarBtns)/sizeof(TBBUTTON), 16, 15, 16, 15, sizeof(TBBUTTON));
+		CheckMenuItem(Globals.hMenuOptions, ID_VIEW_TOOL_BAR, MF_BYCOMMAND|MF_CHECKED);
+	}
+
+	Globals.hstatusbar = CreateStatusWindow(WS_CHILD|WS_VISIBLE, 0, Globals.hMainWnd, IDW_STATUSBAR);
+	CheckMenuItem(Globals.hMenuOptions, ID_VIEW_STATUSBAR, MF_BYCOMMAND|MF_CHECKED);
+
+/* CreateStatusWindow does not accept WS_BORDER
+	Globals.hstatusbar = CreateWindowEx(WS_EX_NOPARENTNOTIFY, STATUSCLASSNAME, 0,
+					WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_BORDER|CCS_NODIVIDER, 0,0,0,0,
+					Globals.hMainWnd, (HMENU)IDW_STATUSBAR, hinstance, 0);*/
+
+	 //TODO: read paths and window placements from registry
+	GetCurrentDirectory(MAX_PATH, path);
+	child = alloc_child_window(path);
+
+	child->pos.showCmd = SW_SHOWMAXIMIZED;
+	child->pos.rcNormalPosition.left = 0;
+	child->pos.rcNormalPosition.top = 0;
+	child->pos.rcNormalPosition.right = 320;
+	child->pos.rcNormalPosition.bottom = 280;
+
+	if (!create_child_window(child))
+		free(child);
+
+	SetWindowPlacement(child->hwnd, &child->pos);
+
+	Globals.himl = ImageList_LoadBitmap(Globals.hInstance, MAKEINTRESOURCE(IDB_IMAGES), 16, 0, RGB(0,255,0));
+
+	Globals.prescan_node = FALSE;
+}
+
+void ExitInstance()
+{
+	ImageList_Destroy(Globals.himl);
+}
+
+
+#ifdef _NO_EXTENSIONS
+
+ // search for already running win[e]files
+
+static int g_foundPrevInstance = 0;
+
+static BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lparam)
+{
+	TCHAR cls[128];
+
+	GetClassName(hwnd, cls, 128);
+
+	if (!lstrcmp(cls, (LPCTSTR)lparam)) {
+		g_foundPrevInstance++;
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+#endif
+
+
+int APIENTRY WinMain(HINSTANCE hinstance,
+					 HINSTANCE previnstance,
+					 LPSTR	   cmdline,
+					 int	   cmdshow)
+{
+	MSG msg;
+
+#ifdef _NO_EXTENSIONS
+	// allow only one running instance
+	EnumWindows(EnumWndProc, (LPARAM)WINEFILEFRAME);
+
+	if (g_foundPrevInstance)
+		return 1;
+#endif
+
+	InitInstance(hinstance);
+
+	if (cmdshow == SW_SHOWNORMAL) {
+	 	//TODO: read window placement from registry
+		cmdshow = SW_MAXIMIZE;
+	}
+
+	ShowWindow(Globals.hMainWnd, cmdshow);
+	UpdateWindow(Globals.hMainWnd);
+
+	while(GetMessage(&msg, 0, 0, 0)) {
+		if (!TranslateMDISysAccel(Globals.hmdiclient, &msg) &&
+			!TranslateAccelerator(Globals.hMainWnd, Globals.haccel, &msg))
+		{
+			TranslateMessage(&msg);
+			DispatchMessage(&msg);
+		}
+	}
+
+	ExitInstance();
+
+	return 0;
+}
diff --git a/programs/winefile/winefile.h b/programs/winefile/winefile.h
new file mode 100644
index 0000000..eff307b
--- /dev/null
+++ b/programs/winefile/winefile.h
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2000 Martin Fuchs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#define WIN32_LEAN_AND_MEAN
+#define WIN32_EXTRA_LEAN
+#define NOSERVICE
+#define NOMCX
+#define NOIME
+#define NOCOMM
+#define NOKANJI
+#define NORPC
+#define NOPROXYSTUB
+#define NOIMAGE
+#define NOTAPE
+
+#ifdef UNICODE
+#define	_UNICODE
+#include <wchar.h>
+#endif
+
+#include <windows.h>
+#include <windowsx.h>
+#include <commctrl.h>
+#include <shellapi.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <stdio.h>
+#include <tchar.h>
+#include <ctype.h>
+
+#ifndef FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
+#define FILE_ATTRIBUTE_ENCRYPTED            0x00000040
+#define FILE_ATTRIBUTE_SPARSE_FILE          0x00000200
+#define FILE_ATTRIBUTE_REPARSE_POINT        0x00000400
+#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  0x00002000
+#endif
+
+
+#ifdef	_DEBUG
+#define	ASSERT(x)	{if (!(x)) DebugBreak();}
+#else
+#define	ASSERT(x)	/* nothing */
+#endif
+
+typedef __uint64 QWORD;
+#ifdef _MSC_VER
+#define	LONGLONGARG _T("I64")
+#else
+#define	LONGLONGARG _T("L")
+#endif
+
+#define	BUFFER_LEN	1024
+
+
+enum IMAGE {
+	IMG_NONE=-1,	IMG_FILE=0,			IMG_DOCUMENT,	IMG_EXECUTABLE,
+	IMG_FOLDER,		IMG_OPEN_FOLDER,	IMG_FOLDER_PLUS,IMG_OPEN_PLUS,	IMG_OPEN_MINUS,
+	IMG_FOLDER_UP,	IMG_FOLDER_CUR
+};
+
+#define	IMAGE_WIDTH			16
+#define	IMAGE_HEIGHT		13
+#define	SPLIT_WIDTH			5
+
+#define IDW_STATUSBAR		0x100
+#define IDW_TOOLBAR			0x101
+#define IDW_DRIVEBAR		0x102
+#define	IDW_FIRST_CHILD		0xC000	//0x200
+
+#define IDW_TREE_LEFT		3
+#define IDW_TREE_RIGHT		6
+#define IDW_HEADER_LEFT		2
+#define IDW_HEADER_RIGHT	5
+
+#define	WM_DISPATCH_COMMAND	0xBF80
+
+#define	COLOR_COMPRESSED	RGB(0,0,255)
+#define	COLOR_SELECTION		RGB(0,0,128)
+
+#ifdef _NO_EXTENSIONS
+#define	COLOR_SPLITBAR		WHITE_BRUSH
+#else
+#define	COLOR_SPLITBAR		LTGRAY_BRUSH
+#endif
+
+#define	WINEFILEFRAME		_T("WFS_Frame")
+#define	WINEFILETREE		_T("WFS_Tree")
+#define	WINEFILEDRIVES		_T("WFS_Drives")
+#define	WINEFILEMDICLIENT	_T("WFS_MdiClient")
+
+#define	FRM_CALC_CLIENT		0xBF83
+#define	Frame_CalcFrameClient(hwnd, prt) ((BOOL)SNDMSG(hwnd, FRM_CALC_CLIENT, 0, (LPARAM)(PRECT)prt))
+
+
+typedef struct
+{
+  HANDLE	hInstance;
+  HACCEL	haccel;
+  HWND		hMainWnd;
+  HMENU		hMenuFrame;
+  HMENU		hWindowsMenu;
+  HMENU		hLanguageMenu;
+  HMENU		hMenuView;
+  HMENU		hMenuOptions;
+  HWND		hmdiclient;
+  HWND		hstatusbar;
+  HWND		htoolbar;
+  HWND		hdrivebar;
+  HFONT		hfont;
+
+  TCHAR		num_sep;
+  SIZE		spaceSize;
+  HIMAGELIST himl;
+
+  TCHAR		drives[BUFFER_LEN];
+  BOOL		prescan_node;	//TODO
+
+  UINT		wStringTableOffset;
+} WINEFILE_GLOBALS;
+
+extern WINEFILE_GLOBALS Globals;
+
+#ifdef UNICODE
+extern void _wsplitpath(const WCHAR* path, WCHAR* drv, WCHAR* dir, WCHAR* name, WCHAR* ext);
+#else
+extern void _splitpath(const CHAR* path, CHAR* drv, CHAR* dir, CHAR* name, CHAR* ext);
+#endif