forked from Mirrors/wine-wine
extrac32: Add command-line parsing.
parent
95c525e21b
commit
e7cc2868aa
|
@ -5,7 +5,7 @@ VPATH = @srcdir@
|
||||||
MODULE = extrac32.exe
|
MODULE = extrac32.exe
|
||||||
APPMODE = -mwindows -municode
|
APPMODE = -mwindows -municode
|
||||||
EXTRADEFS = -DWINE_NO_UNICODE
|
EXTRADEFS = -DWINE_NO_UNICODE
|
||||||
IMPORTS = kernel32
|
IMPORTS = shell32 user32 kernel32
|
||||||
|
|
||||||
C_SRCS = \
|
C_SRCS = \
|
||||||
extrac32.c
|
extrac32.c
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* Extract - Wine-compatible program for extract *.cab files.
|
* Extract - Wine-compatible program for extract *.cab files.
|
||||||
*
|
*
|
||||||
* Copyright 2007 Etersoft (Lyutin Anatoly)
|
* Copyright 2007 Etersoft (Lyutin Anatoly)
|
||||||
|
* Copyright 2009 Ilya Shpigor
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -19,6 +20,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <shellapi.h>
|
||||||
|
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
#include "wine/debug.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)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue