Beginnings of an explorer.exe replacement that wraps the existing

winefile program.
This commit is contained in:
Aric Stewart 2005-11-16 11:45:51 +00:00 committed by Alexandre Julliard
parent 1c5d35fd92
commit 6bd1625f57
6 changed files with 191 additions and 1 deletions

3
configure vendored

File diff suppressed because one or more lines are too long

View File

@ -1733,6 +1733,7 @@ programs/cmdlgtst/Makefile
programs/control/Makefile
programs/eject/Makefile
programs/expand/Makefile
programs/explorer/Makefile
programs/hh/Makefile
programs/msiexec/Makefile
programs/notepad/Makefile

View File

@ -12,6 +12,7 @@ SUBDIRS = \
control \
eject \
expand \
explorer \
hh \
msiexec \
notepad \
@ -46,6 +47,7 @@ INSTALLSUBDIRS = \
control \
eject \
expand \
explorer \
hh \
msiexec \
notepad \
@ -100,6 +102,7 @@ SYMLINKS = \
control.exe$(DLLEXT) \
eject.exe$(DLLEXT) \
expand.exe$(DLLEXT) \
explorer.exe$(DLLEXT) \
hh.exe$(DLLEXT) \
icinfo.exe$(DLLEXT) \
msiexec.exe$(DLLEXT) \
@ -192,6 +195,9 @@ eject.exe$(DLLEXT): eject/eject.exe$(DLLEXT)
expand.exe$(DLLEXT): expand/expand.exe$(DLLEXT)
$(RM) $@ && $(LN_S) expand/expand.exe$(DLLEXT) $@
explorer.exe$(DLLEXT): explorer/explorer.exe$(DLLEXT)
$(RM) $@ && $(LN_S) explorer/explorer.exe$(DLLEXT) $@
hh.exe$(DLLEXT): hh/hh.exe$(DLLEXT)
$(RM) $@ && $(LN_S) hh/hh.exe$(DLLEXT) $@
@ -280,6 +286,7 @@ cmdlgtst/cmdlgtst.exe$(DLLEXT): cmdlgtst
control/control.exe$(DLLEXT): control
eject/eject.exe$(DLLEXT): eject
expand/expand.exe$(DLLEXT): expand
explorer/explorer.exe$(DLLEXT): explorer
hh/hh.exe$(DLLEXT): hh
avitools/icinfo.exe$(DLLEXT): avitools
msiexec/msiexec.exe$(DLLEXT): msiexec

View File

@ -0,0 +1 @@
Makefile

View File

@ -0,0 +1,14 @@
TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = explorer.exe
APPMODE = -mwindows
IMPORTS = user32 kernel32
C_SRCS = \
explorer.c
@MAKE_PROG_RULES@
### Dependencies:

View File

@ -0,0 +1,166 @@
/*
* explorer.exe
*
* Copyright 2005 CodeWeavers, Aric Stewart
*
* 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 <ctype.h>
typedef struct parametersTAG {
BOOL explorer_mode;
WCHAR root[MAX_PATH];
WCHAR selection[MAX_PATH];
} parameters_struct;
static int CopyPathString(LPWSTR target, LPSTR source)
{
CHAR temp_buf[MAX_PATH];
INT i = 0;
while isspace(*source)
source++;
if (*source == '\"')
{
source ++;
while (*source != '\"')
{
temp_buf[i] = *source;
i++;
source++;
}
temp_buf[i] = 0;
source ++;
i+=2;
}
else
{
while (*source && !isspace(*source))
{
temp_buf[i] = *source;
i++;
source++;
}
temp_buf[i] = 0;
}
MultiByteToWideChar(CP_ACP,0,temp_buf,-1,target,MAX_PATH);
return i;
}
static void CopyPathRoot(LPWSTR root, LPWSTR path)
{
LPWSTR p,p2;
INT i = 0;
p = path;
while (*p!=0)
p++;
while (*p!='\\' && p > path)
p--;
if (p == path)
return;
p2 = path;
while (p2 != p)
{
root[i] = *p2;
i++;
p2++;
}
root[i] = 0;
}
/*
* Command Line parameters are:
* [/n] Opens in single-paned view for each selected items. This is default
* [/e,] Uses Windows Explorer View
* [/root,object] Specifies the root level of the view
* [/select,object] parent folder is opened and specified object is selected
*/
static void ParseCommandLine(LPSTR commandline,parameters_struct *parameters)
{
LPSTR p;
LPSTR p2;
p2 = commandline;
p = strchr(commandline,'/');
while(p)
{
p++;
if (strncmp(p,"n",1)==0)
{
parameters->explorer_mode = FALSE;
p++;
}
else if (strncmp(p,"e,",2)==0)
{
parameters->explorer_mode = TRUE;
p+=2;
}
else if (strncmp(p,"root,",5)==0)
{
p+=5;
p+=CopyPathString(parameters->root,p);
}
else if (strncmp(p,"select,",7)==0)
{
p+=7;
p+=CopyPathString(parameters->selection,p);
if (!parameters->root[0])
CopyPathRoot(parameters->root,
parameters->selection);
}
p2 = p;
p = strchr(p,'/');
}
if (p2 && *p2)
{
/* left over command line is generally the path to be opened */
CopyPathString(parameters->root,p2);
}
}
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE previnstance,
LPSTR cmdline,
int cmdshow)
{
STARTUPINFOW si;
PROCESS_INFORMATION info;
parameters_struct parameters;
BOOL rc;
static WCHAR winefile[] = {'w','i','n','e','f','i','l','e','.','e','x','e',0};
memset(&parameters,0,sizeof(parameters));
memset(&si,0,sizeof(STARTUPINFOW));
ParseCommandLine(cmdline,&parameters);
rc = CreateProcessW(NULL, winefile, NULL, NULL, FALSE, 0, NULL,
parameters.root, &si, &info);
if (!rc)
return 0;
WaitForSingleObject(info.hProcess,INFINITE);
return 0;
}