Ilya Shpigor : extrac32: Add command-line parsing.
Alexandre Julliard
julliard at winehq.org
Wed Nov 4 10:26:26 CST 2009
Module: wine
Branch: master
Commit: e7cc2868aadd110a99f91b68737c48545505e09c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e7cc2868aadd110a99f91b68737c48545505e09c
Author: Ilya Shpigor <shpigor at etersoft.ru>
Date: Tue Nov 3 10:55:12 2009 +0300
extrac32: Add command-line parsing.
---
programs/extrac32/Makefile.in | 2 +-
programs/extrac32/extrac32.c | 86 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 87 insertions(+), 1 deletions(-)
diff --git a/programs/extrac32/Makefile.in b/programs/extrac32/Makefile.in
index 470c196..31aa7e0 100644
--- a/programs/extrac32/Makefile.in
+++ b/programs/extrac32/Makefile.in
@@ -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
diff --git a/programs/extrac32/extrac32.c b/programs/extrac32/extrac32.c
index 7e8fbed..e6fefc9 100644
--- a/programs/extrac32/extrac32.c
+++ b/programs/extrac32/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;
}
More information about the wine-cvs
mailing list