extrac32: Add command-line parsing.
This commit is contained in:
parent
95c525e21b
commit
e7cc2868aa
|
@ -5,7 +5,7 @@ VPATH = @srcdir@
|
|||
MODULE = extrac32.exe
|
||||
APPMODE = -mwindows -municode
|
||||
EXTRADEFS = -DWINE_NO_UNICODE
|
||||
IMPORTS = kernel32
|
||||
IMPORTS = shell32 user32 kernel32
|
||||
|
||||
C_SRCS = \
|
||||
extrac32.c
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
* Extract - Wine-compatible program for extract *.cab files.
|
||||
*
|
||||
* Copyright 2007 Etersoft (Lyutin Anatoly)
|
||||
* Copyright 2009 Ilya Shpigor
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -19,6 +20,7 @@
|
|||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <shellapi.h>
|
||||
|
||||
#include "wine/unicode.h"
|
||||
#include "wine/debug.h"
|
||||
|
@ -27,5 +29,89 @@ WINE_DEFAULT_DEBUG_CHANNEL(extrac32);
|
|||
|
||||
int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int show)
|
||||
{
|
||||
LPWSTR *argv;
|
||||
int argc;
|
||||
int i;
|
||||
WCHAR check, cmd = 0;
|
||||
WCHAR path[MAX_PATH];
|
||||
WCHAR backslash[] = {'\\',0};
|
||||
LPCWSTR cabfile = NULL;
|
||||
|
||||
path[0] = 0;
|
||||
argv = CommandLineToArgvW(cmdline, &argc);
|
||||
|
||||
if(!argv)
|
||||
{
|
||||
WINE_ERR("Bad command line arguments\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Parse arguments */
|
||||
for(i = 0; i < argc; i++)
|
||||
{
|
||||
/* Get cabfile */
|
||||
if ((argv[i][0] != '/') && !cabfile)
|
||||
{
|
||||
cabfile = argv[i];
|
||||
continue;
|
||||
}
|
||||
/* Get parameters for commands */
|
||||
check = toupperW( argv[i][1] );
|
||||
switch(check)
|
||||
{
|
||||
case 'A':
|
||||
WINE_FIXME("/A not implemented\n");
|
||||
break;
|
||||
case 'Y':
|
||||
WINE_FIXME("/Y not implemented\n");
|
||||
break;
|
||||
case 'L':
|
||||
if ((i + 1) >= argc) return 0;
|
||||
if (!GetFullPathNameW(argv[++i], MAX_PATH, path, NULL))
|
||||
return 0;
|
||||
break;
|
||||
case 'C':
|
||||
if (cmd) return 0;
|
||||
if ((i + 2) >= argc) return 0;
|
||||
cmd = check;
|
||||
cabfile = argv[++i];
|
||||
if (!GetFullPathNameW(argv[++i], MAX_PATH, path, NULL))
|
||||
return 0;
|
||||
break;
|
||||
case 'E':
|
||||
case 'D':
|
||||
if (cmd) return 0;
|
||||
cmd = check;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cabfile)
|
||||
return 0;
|
||||
|
||||
if (!path[0])
|
||||
GetCurrentDirectoryW(MAX_PATH, path);
|
||||
|
||||
lstrcatW(path, backslash);
|
||||
|
||||
/* Execute the specified command */
|
||||
switch(cmd)
|
||||
{
|
||||
case 'C':
|
||||
/* Copy file */
|
||||
WINE_FIXME("/C not implemented\n");
|
||||
break;
|
||||
case 'E':
|
||||
/* Extract CAB archive */
|
||||
WINE_FIXME("/E not implemented\n");
|
||||
break;
|
||||
case 0:
|
||||
case 'D':
|
||||
/* Display CAB archive */
|
||||
WINE_FIXME("/D not implemented\n");
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue