The 'configure' band still had broken long lines, and perhaps I
shouldn't have had it there anyway since it can be generated, so I've
just removed it.
ChangeLog:
* configure, configure.ac, Makefile.in, schedule/process.c
programs/Makefile.in, programs/winepath/.cvsignore
programs/winepath/Makefile.in, programs/winepath/winepath.c
Mike Wetherell <mike.wetherell(a)ntlworld.com>
Utility to convert between Unix and Windows paths at the command line.
Index: configure.ac
===================================================================
RCS file: /home/wine/wine/configure.ac,v
retrieving revision 1.20
diff -u -r1.20 configure.ac
--- configure.ac 20 Apr 2002 21:00:42 -0000 1.20
+++ configure.ac 22 Apr 2002 22:50:08 -0000
@@ -1406,6 +1406,7 @@
programs/wcmd/Makefile
programs/wineconsole/Makefile
programs/winemine/Makefile
+programs/winepath/Makefile
programs/winetest/Makefile
programs/winhelp/Makefile
programs/winver/Makefile
Index: Makefile.in
===================================================================
RCS file: /home/wine/wine/Makefile.in,v
retrieving revision 1.115
diff -u -r1.115 Makefile.in
--- Makefile.in 17 Apr 2002 16:51:47 -0000 1.115
+++ Makefile.in 22 Apr 2002 22:50:09 -0000
@@ -30,7 +30,8 @@
# Programs that link with libwine
LIBPROGRAMS = \
debugger/winedbg \
- programs/wineconsole/wineconsole
+ programs/wineconsole/wineconsole \
+ programs/winepath/winepath
# Libraries (not dlls) to build
LIBRARIES = \
@@ -66,6 +67,7 @@
library \
ole \
programs/wineconsole \
+ programs/winepath \
server \
tools \
tsx11 \
Index: scheduler/process.c
===================================================================
RCS file: /home/wine/wine/scheduler/process.c,v
retrieving revision 1.177
diff -u -r1.177 process.c
--- scheduler/process.c 15 Apr 2002 15:38:10 -0000 1.177
+++ scheduler/process.c 22 Apr 2002 22:50:18 -0000
@@ -241,7 +241,7 @@
*
* Main process initialisation code
*/
-static BOOL process_init( char *argv[] )
+BOOL process_init( char *argv[] )
{
BOOL ret;
size_t info_size = 0;
Index: programs/Makefile.in
===================================================================
RCS file: /home/wine/wine/programs/Makefile.in,v
retrieving revision 1.14
diff -u -r1.14 Makefile.in
--- programs/Makefile.in 11 Apr 2002 23:58:40 -0000 1.14
+++ programs/Makefile.in 22 Apr 2002 22:50:19 -0000
@@ -20,6 +20,7 @@
wcmd \
wineconsole \
winemine \
+ winepath \
winetest \
winhelp \
winver
diff -Nu programs/winepath/.cvsignore programs/winepath/.cvsignore
--- programs/winepath/.cvsignore Thu Jan 1 01:00:00 1970
+++ programs/winepath/.cvsignore Tue Apr 23 00:15:47 2002
@@ -0,0 +1,2 @@
+Makefile
+winepath
diff -Nu programs/winepath/Makefile.in programs/winepath/Makefile.in
--- programs/winepath/Makefile.in Thu Jan 1 01:00:00 1970
+++ programs/winepath/Makefile.in Tue Apr 23 00:15:47 2002
@@ -0,0 +1,27 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR = @srcdir@
+VPATH = @srcdir@
+
+PROGRAMS = winepath
+MODULE = none
+IMPORTS = ntdll.dll
+
+C_SRCS = \
+ winepath.c
+
+all: $(PROGRAMS)
+
+@MAKE_RULES@
+
+winepath: $(OBJS)
+ $(CC) $(CFLAGS) -o winepath $(OBJS) -L$(DLLDIR) $(IMPORTS:%=-l%) $(LIBWINE) $(LIBUNICODE) $(LDFLAGS)
+
+install:: $(PROGRAMS)
+ [ -d $(bindir) ] || $(MKDIR) $(bindir)
+ $(INSTALL_PROGRAM) winepath $(bindir)/winepath
+
+uninstall::
+ $(RM) $(bindir)/winepath
+
+### Dependencies:
diff -Nu programs/winepath/winepath.c programs/winepath/winepath.c
--- programs/winepath/winepath.c Thu Jan 1 01:00:00 1970
+++ programs/winepath/winepath.c Tue Apr 23 00:17:07 2002
@@ -0,0 +1,184 @@
+/*
+ * 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>
+
+#if defined(_WIN32) || defined(_WIN64) || defined(WINELIB)
+#define WINDOWS 1
+#endif
+
+#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 ouput 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[])
+{
+#ifndef WINDOWS
+ char *noargs[2] = { argv[0], NULL };
+#endif
+ wine_get_unix_file_name_t *wine_get_unix_file_name_ptr;
+ static char path[MAX_PATH];
+ int outputformats;
+ int i;
+
+ progname = argv[0];
+ outputformats = parse_options(argv);
+ if (outputformats == 0)
+ outputformats = UNIXFORMAT;
+
+#ifndef WINDOWS
+ if (!process_init(noargs))
+ exit(1);
+ wine_get_unix_file_name_ptr = wine_get_unix_file_name;
+#else
+ 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);
+ }
+ }
+#endif
+
+ 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);
+}