diff --git a/configure b/configure index 8a297083ac8681393ae85061d9118494b69eb4bd..525b4ab47522e6dd9f45bae2739d4c1e7a59ff90 100755 --- a/configure +++ b/configure @@ -12406,7 +12406,7 @@ MAKE_DLL_RULES=dlls/Makedll.rules MAKE_PROG_RULES=programs/Makeprog.rules -ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules programs/Makeprog.rules Makefile controls/Makefile debugger/Makefile dlls/Makefile dlls/advapi32/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/comctl32/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dsound/Makefile dlls/gdi/Makefile dlls/glu32/Makefile dlls/icmp/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/kernel/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msg711/Makefile dlls/msdmo/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msrle32/Makefile dlls/msvcrt/Makefile dlls/msvcrt20/Makefile dlls/msvideo/Makefile dlls/netapi32/Makefile dlls/ntdll/Makefile dlls/odbc32/Makefile dlls/ole32/Makefile dlls/oleaut32/Makefile dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/snmpapi/Makefile dlls/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/user/Makefile dlls/version/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile dlls/winedos/Makefile dlls/wineps/Makefile dlls/wininet/Makefile dlls/winmm/Makefile dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile dlls/winmm/midimap/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile dlls/winspool/Makefile dlls/wintrust/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile files/Makefile graphics/Makefile graphics/x11drv/Makefile if1632/Makefile include/Makefile library/Makefile libtest/Makefile loader/Makefile loader/ne/Makefile memory/Makefile misc/Makefile miscemu/Makefile msdos/Makefile objects/Makefile ole/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/notepad/Makefile programs/osversioncheck/Makefile programs/progman/Makefile programs/regapi/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/regtest/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineconsole/Makefile programs/winemine/Makefile programs/winetest/Makefile programs/winhelp/Makefile programs/winver/Makefile relay32/Makefile scheduler/Makefile server/Makefile tools/Makefile tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile tools/wmc/Makefile tools/wrc/Makefile tsx11/Makefile unicode/Makefile win32/Makefile windows/Makefile" +ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules programs/Makeprog.rules Makefile controls/Makefile debugger/Makefile dlls/Makefile dlls/advapi32/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/comctl32/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dsound/Makefile dlls/gdi/Makefile dlls/glu32/Makefile dlls/icmp/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/kernel/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msg711/Makefile dlls/msdmo/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msrle32/Makefile dlls/msvcrt/Makefile dlls/msvcrt20/Makefile dlls/msvideo/Makefile dlls/netapi32/Makefile dlls/ntdll/Makefile dlls/odbc32/Makefile dlls/ole32/Makefile dlls/oleaut32/Makefile dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/snmpapi/Makefile dlls/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/user/Makefile dlls/version/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile dlls/winedos/Makefile dlls/wineps/Makefile dlls/wininet/Makefile dlls/winmm/Makefile dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile dlls/winmm/midimap/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile dlls/winspool/Makefile dlls/wintrust/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile files/Makefile graphics/Makefile graphics/x11drv/Makefile if1632/Makefile include/Makefile library/Makefile libtest/Makefile loader/Makefile loader/ne/Makefile memory/Makefile misc/Makefile miscemu/Makefile msdos/Makefile objects/Makefile ole/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/notepad/Makefile programs/osversioncheck/Makefile programs/progman/Makefile programs/regapi/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/regtest/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineconsole/Makefile programs/winemine/Makefile programs/winepath/Makefile programs/winetest/Makefile programs/winhelp/Makefile programs/winver/Makefile relay32/Makefile scheduler/Makefile server/Makefile tools/Makefile tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile tools/wmc/Makefile tools/wrc/Makefile tsx11/Makefile unicode/Makefile win32/Makefile windows/Makefile" cat >confcache <<\_ACEOF @@ -13011,6 +13011,7 @@ do "programs/wcmd/Makefile" ) CONFIG_FILES="$CONFIG_FILES programs/wcmd/Makefile" ;; "programs/wineconsole/Makefile" ) CONFIG_FILES="$CONFIG_FILES programs/wineconsole/Makefile" ;; "programs/winemine/Makefile" ) CONFIG_FILES="$CONFIG_FILES programs/winemine/Makefile" ;; + "programs/winepath/Makefile" ) CONFIG_FILES="$CONFIG_FILES programs/winepath/Makefile" ;; "programs/winetest/Makefile" ) CONFIG_FILES="$CONFIG_FILES programs/winetest/Makefile" ;; "programs/winhelp/Makefile" ) CONFIG_FILES="$CONFIG_FILES programs/winhelp/Makefile" ;; "programs/winver/Makefile" ) CONFIG_FILES="$CONFIG_FILES programs/winver/Makefile" ;; diff --git a/configure.ac b/configure.ac index bfd75cdf81b559efc5c5e2e60f28c31046c6713a..569dc4249ce6f3ce5a665bf64835dc87d5db89b1 100644 --- a/configure.ac +++ b/configure.ac @@ -1374,6 +1374,7 @@ programs/view/Makefile programs/wcmd/Makefile programs/wineconsole/Makefile programs/winemine/Makefile +programs/winepath/Makefile programs/winetest/Makefile programs/winhelp/Makefile programs/winver/Makefile diff --git a/programs/Makefile.in b/programs/Makefile.in index 066c4c0cddeb474a840bac4bf1c4bf31493b1e77..1f989566edbac558ca2018ebeab932b68102807c 100644 --- a/programs/Makefile.in +++ b/programs/Makefile.in @@ -14,6 +14,7 @@ INSTALLSUBDIRS = \ wcmd \ wineconsole \ winemine \ + winepath \ winhelp \ winver diff --git a/programs/winepath/.cvsignore b/programs/winepath/.cvsignore new file mode 100644 index 0000000000000000000000000000000000000000..0966b84e02305e78c3f9b3fb3c344ffec2e9299b --- /dev/null +++ b/programs/winepath/.cvsignore @@ -0,0 +1,3 @@ +Makefile +winepath +winepath.spec.c diff --git a/programs/winepath/Makefile.in b/programs/winepath/Makefile.in new file mode 100644 index 0000000000000000000000000000000000000000..f82442b6542ac6dc94f0c5b8cdf04e9fbac87e94 --- /dev/null +++ b/programs/winepath/Makefile.in @@ -0,0 +1,11 @@ +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../.. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +MODULE = winepath + +C_SRCS = winepath.c + +@MAKE_PROG_RULES@ + +### Dependencies: diff --git a/programs/winepath/winepath.c b/programs/winepath/winepath.c new file mode 100644 index 0000000000000000000000000000000000000000..ef54e50d65f0d8c230cb34f78ab2eb5987beb598 --- /dev/null +++ b/programs/winepath/winepath.c @@ -0,0 +1,169 @@ +/* + * Translate between Wine and Unix paths + * + * Copyright 2002 Mike Wetherell + * + * 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 <windows.h> +#include <stdio.h> +#include <stdlib.h> + +#define VERSION "0.1 (" PACKAGE_STRING ")" + +enum { + SHORTFORMAT = 1, + LONGFORMAT = 2, + UNIXFORMAT = 4 +}; + +static char *progname; + +/* Wine specific functions */ +extern BOOL process_init(char *argv[]); +typedef BOOL (WINAPI *wine_get_unix_file_name_t) ( LPCSTR dos, LPSTR buffer, DWORD len ); +/* + * handle an option + */ +int option(int shortopt, char *longopt) +{ + const char *helpmsg = + "Convert PATH(s) to Unix or Windows long or short paths.\n" + "\n" + " -u, --unix output Unix format\n" + " -l, --long output Windows long format\n" + " -s, --short output Windows short format \n" + " -h, --help output this help message and exit\n" + " -v, --version output version information and exit\n" + "\n" + "The input paths can be in any format. If more than one option is given\n" + "then the input paths are output in all formats specified, in the order\n" + "Unix, long, short. If no option is given the default is Unix format.\n"; + + switch (shortopt) { + case 'h': + printf("Usage: %s [OPTION] [PATH]...\n", progname); + printf(helpmsg); + exit(0); + case 'v': + printf("%s version " VERSION "\n", progname); + exit(0); + case 'l': + return LONGFORMAT; + case 's': + return SHORTFORMAT; + case 'u': + return UNIXFORMAT; + } + + fprintf(stderr, "%s: invalid option ", progname); + if (longopt) + fprintf(stderr, "'%s'\n", longopt); + else + fprintf(stderr, "'-%c'\n", shortopt); + fprintf(stderr, "Try '%s --help' for help\n", progname); + exit(2); +} + +/* + * Parse command line options + */ +int parse_options(char *argv[]) +{ + int outputformats = 0; + int done = 0; + char *longopts[] = { "long", "short", "unix", "help", "version", "" }; + int i, j; + + for (i = 1; argv[i] && !done; ) + { + if (argv[i][0] != '-') { + /* not an option */ + i++; + continue; + } + + if (argv[i][1] == '-') { + if (argv[i][2] == 0) { + /* '--' end of options */ + done = 1; + } else { + /* long option */ + for (j = 0; longopts[j][0]; j++) + if (strcmp(argv[i]+2, longopts[j]) == 0) + break; + outputformats |= option(longopts[j][0], argv[i]); + } + } else { + /* short options */ + for (j = 1; argv[i][j]; j++) + outputformats |= option(argv[i][j], NULL); + } + + /* remove option */ + for (j = i + 1; argv[j - 1]; j++) + argv[j - 1] = argv[j]; + } + + return outputformats; +} + +/* + * Main function + */ +int main(int argc, char *argv[]) +{ + wine_get_unix_file_name_t wine_get_unix_file_name_ptr = NULL; + static char path[MAX_PATH]; + int outputformats; + int i; + + progname = argv[0]; + outputformats = parse_options(argv); + if (outputformats == 0) + outputformats = UNIXFORMAT; + + if (outputformats & UNIXFORMAT) { + wine_get_unix_file_name_ptr = (wine_get_unix_file_name_t) + GetProcAddress(GetModuleHandle("KERNEL32"), + "wine_get_unix_file_name"); + if (wine_get_unix_file_name_ptr == NULL) { + fprintf(stderr, "%s: cannot get the address of " + "'wine_get_unix_file_name'\n", progname); + exit(3); + } + } + + for (i = 1; argv[i]; i++) + { + if (outputformats & LONGFORMAT) { + GetLongPathNameA(argv[i], path, sizeof(path)); + printf("%s\n", path); + } + if (outputformats & SHORTFORMAT) { + GetShortPathNameA(argv[i], path, sizeof(path)); + printf("%s\n", path); + } + if (outputformats & UNIXFORMAT) { + wine_get_unix_file_name_ptr(argv[i], path, sizeof(path)); + printf("%s\n", path); + } + } + + exit(0); +} diff --git a/programs/winepath/winepath.spec b/programs/winepath/winepath.spec new file mode 100644 index 0000000000000000000000000000000000000000..8639561b2e70b5a1bb7e1592eed9e4cb5cfce5cf --- /dev/null +++ b/programs/winepath/winepath.spec @@ -0,0 +1,6 @@ +name winepath +mode cuiexe +type win32 + +import kernel32.dll +import ntdll.dll