Building libdvdread with MSVC
Steve Lhomme <[email protected]> Mon, 13 Sep 2004 14:44:13 +0200
| Newsgroups | gmane.comp.video.ogle.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, I have modified libdvdread to be able to be compiled with Microsoft compilers. Here is the patch attached. The makefile is generated with bakefile. It can be modified to generate autoconf makefiles too (used to generate the wxWidgets makefiles). I'll keep these sources in a Matroska related project...
libdvdread.diff
(text/plain, 39.8 KB)
diff -urN libdvdread-0.9.4\dvdread\bswap.h Dvdmenuxtractor\libdvdread\dvdread\bswap.h
--- libdvdread-0.9.4\dvdread\bswap.h Sun Dec 15 02:09:12 2002
+++ Dvdmenuxtractor\libdvdread\dvdread\bswap.h Mon Sep 13 12:01:05 2004
@@ -65,7 +65,7 @@
* functionality!
*/
-#elif defined(__FreeBSD__) || defined(__sun) || defined(__bsdi__)
+#elif defined(__FreeBSD__) || defined(__sun) || defined(__bsdi__) || defined(WIN32)
#define B2N_16(x) \
x = ((((x) & 0xff00) >> 8) | \
(((x) & 0x00ff) << 8))
diff -urN libdvdread-0.9.4\dvdread\dvd_input.c Dvdmenuxtractor\libdvdread\dvdread\dvd_input.c
--- libdvdread-0.9.4\dvdread\dvd_input.c Thu Feb 13 23:48:24 2003
+++ Dvdmenuxtractor\libdvdread\dvdread\dvd_input.c Mon Sep 13 14:01:27 2004
@@ -22,7 +22,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
#include "dvd_reader.h"
#include "dvd_input.h"
@@ -46,7 +48,9 @@
#define DVDcss_error dvdcss_error
#else
/* dlopening libdvdcss */
+#ifdef HAVE_DLFCN_H
#include <dlfcn.h>
+#endif
typedef struct dvdcss_s *dvdcss_handle;
static dvdcss_handle (*DVDcss_open) (const char *);
static int (*DVDcss_close) (dvdcss_handle);
@@ -257,13 +261,17 @@
return 0;
}
+#if !defined(WIN32)
+typedef void *HMODULE;
+#endif
+
/**
* Setup read functions with either libdvdcss or minimal DVD access.
*/
int dvdinput_setup(void)
{
- void *dvdcss_library = NULL;
+ HMODULE dvdcss_library = NULL;
char **dvdcss_version = NULL;
#ifdef HAVE_DVDCSS_DVDCSS_H
@@ -274,7 +282,11 @@
#else
/* dlopening libdvdcss */
+#if defined(WIN32)
+ dvdcss_library = LoadLibrary("libdvdcss.dll");
+#else /* !WIN32 */
dvdcss_library = dlopen("libdvdcss.so.2", RTLD_LAZY);
+#endif /* !WIN32 */
if(dvdcss_library != NULL) {
#if defined(__OpenBSD__) && !defined(__ELF__)
diff -urN libdvdread-0.9.4\dvdread\dvd_reader.c Dvdmenuxtractor\libdvdread\dvdread\dvd_reader.c
--- libdvdread-0.9.4\dvdread\dvd_reader.c Fri Feb 14 00:31:22 2003
+++ Dvdmenuxtractor\libdvdread\dvdread\dvd_reader.c Mon Sep 13 13:55:30 2004
@@ -22,13 +22,17 @@
#include <sys/types.h>
#include <sys/stat.h>
+#ifdef HAVE_SYS_TIME_H
#include <sys/time.h> /* For the timing of dvdcss_title crack. */
+#endif
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
#include <limits.h>
#include <dirent.h>
@@ -125,12 +129,32 @@
}
+#if defined(WIN32)
+#include <windows.h>
+# define GETTIME(v) v = GetTickCount ()
+# define TIMEDIFF(v) (v.end - v.start)
+#else /* !WIN32 */
+# define GETTIME(v) gettimeofday (&v, NULL)
+# define TIMEDIFF(v) (v.end.tv_sec - v.start.tv_sec)
+#endif /* !WIN32 */
+
+struct TimeVal
+{
+#if defined(WIN32)
+ DWORD start;
+ DWORD end;
+#else /* !WIN32 */
+ struct timeval start;
+ struct timeval end;
+#endif /* !WIN32 */
+};
+
/* Loop over all titles and call dvdcss_title to crack the keys. */
static int initAllCSSKeys( dvd_reader_t *dvd )
{
- struct timeval all_s, all_e;
- struct timeval t_s, t_e;
+ struct TimeVal all_time;
+ struct TimeVal t_time;
char filename[ MAX_UDF_FILE_NAME_LEN ];
uint32_t start, len;
int title;
@@ -144,10 +168,10 @@
fprintf( stderr, "libdvdread: This can take a _long_ time, "
"please be patient\n\n" );
- gettimeofday(&all_s, NULL);
+ GETTIME( all_time.start );
for( title = 0; title < 100; title++ ) {
- gettimeofday( &t_s, NULL );
+ GETTIME( t_time.start );
if( title == 0 ) {
sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" );
} else {
@@ -161,14 +185,14 @@
if( dvdinput_title( dvd->dev, (int)start ) < 0 ) {
fprintf( stderr, "libdvdread: Error cracking CSS key for %s (0x%08x)\n", filename, start);
}
- gettimeofday( &t_e, NULL );
+ GETTIME( t_time.end );
fprintf( stderr, "libdvdread: Elapsed time %ld\n",
- (long int) t_e.tv_sec - t_s.tv_sec );
+ (long int) TIMEDIFF(t_time) );
}
if( title == 0 ) continue;
- gettimeofday( &t_s, NULL );
+ GETTIME( t_time.start );
sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, 1 );
start = UDFFindFile( dvd, filename, &len );
if( start == 0 || len == 0 ) break;
@@ -179,16 +203,16 @@
if( dvdinput_title( dvd->dev, (int)start ) < 0 ) {
fprintf( stderr, "libdvdread: Error cracking CSS key for %s (0x%08x)!!\n", filename, start);
}
- gettimeofday( &t_e, NULL );
+ GETTIME( t_time.end );
fprintf( stderr, "libdvdread: Elapsed time %ld\n",
- (long int) t_e.tv_sec - t_s.tv_sec );
+ (long int) TIMEDIFF(t_time) );
}
title--;
fprintf( stderr, "libdvdread: Found %d VTS's\n", title );
- gettimeofday(&all_e, NULL);
+ GETTIME( all_time.end );
fprintf( stderr, "libdvdread: Elapsed time %ld\n",
- (long int) all_e.tv_sec - all_s.tv_sec );
+ (long int) TIMEDIFF(all_time) );
return 0;
}
@@ -343,6 +367,7 @@
if( !(path_copy = strdup( path ) ) ) return 0;
/* Resolve any symlinks and get the absolut dir name. */
+#if !defined(WIN32)
{
char *new_path;
int cdir = open( ".", O_RDONLY );
@@ -358,6 +383,7 @@
}
}
}
+#endif
/**
* If we're being asked to open a directory, check if that directory
diff -urN libdvdread-0.9.4\dvdread\dvd_reader.h Dvdmenuxtractor\libdvdread\dvdread\dvd_reader.h
--- libdvdread-0.9.4\dvdread\dvd_reader.h Thu Feb 13 23:31:10 2003
+++ Dvdmenuxtractor\libdvdread\dvdread\dvd_reader.h Mon Sep 13 13:11:46 2004
@@ -21,6 +21,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <inttypes.h>
#include <sys/types.h>
/**
diff -urN libdvdread-0.9.4\dvdread\dvd_udf.c Dvdmenuxtractor\libdvdread\dvdread\dvd_udf.c
--- libdvdread-0.9.4\dvdread\dvd_udf.c Thu Feb 13 23:57:18 2003
+++ Dvdmenuxtractor\libdvdread\dvdread\dvd_udf.c Mon Sep 13 11:56:55 2004
@@ -33,10 +33,14 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
+#endif
#include <sys/types.h>
#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
#include <inttypes.h>
#include "dvd_reader.h"
diff -urN libdvdread-0.9.4\dvdread\ifo_print.c Dvdmenuxtractor\libdvdread\dvdread\ifo_print.c
--- libdvdread-0.9.4\dvdread\ifo_print.c Sun Feb 02 04:23:54 2003
+++ Dvdmenuxtractor\libdvdread\dvdread\ifo_print.c Mon Sep 13 12:46:50 2004
@@ -22,7 +22,9 @@
#include <stdio.h>
#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
#include <inttypes.h>
#include <string.h>
#include <ctype.h>
diff -urN libdvdread-0.9.4\makefile.vc Dvdmenuxtractor\libdvdread\makefile.vc
--- libdvdread-0.9.4\makefile.vc Thu Jan 01 01:00:00 1970
+++ Dvdmenuxtractor\libdvdread\makefile.vc Mon Sep 13 13:56:43 2004
@@ -0,0 +1,192 @@
+# =========================================================================
+# This makefile was generated by
+# Bakefile 0.1.4 (http://bakefile.sourceforge.net)
+# Do not modify, all changes will be overwritten!
+# =========================================================================
+
+
+
+# -------------------------------------------------------------------------
+# These are configurable options:
+# -------------------------------------------------------------------------
+
+# C compiler
+CC = cl
+
+# Standard flags for CC
+CFLAGS =
+
+# Standard preprocessor flags (common for CC and CXX)
+CPPFLAGS =
+
+# Standard linker flags
+LDFLAGS =
+
+# Type of compiled binaries [debug,release]
+BUILD = release
+
+
+
+# -------------------------------------------------------------------------
+# Do not modify the rest of this file!
+# -------------------------------------------------------------------------
+
+### Variables: ###
+
+LIBDVDREAD_CFLAGS = /MD$(__DEBUG_FLAG_8) /DWIN32 $(__DEBUG_FLAG) \
+ /Fdbuild\libdvdread.pdb $(____DEBUG_FLAG) $(__OPTIMIZE) /DHAVE_CONFIG_H \
+ /Iwin32 /I. $(CPPFLAGS) $(CFLAGS)
+LIBDVDREAD_OBJECTS = \
+ build\libdvdread_ifo_read.obj \
+ build\libdvdread_dvd_udf.obj \
+ build\libdvdread_ifo_print.obj \
+ build\libdvdread_nav_read.obj \
+ build\libdvdread_nav_print.obj \
+ build\libdvdread_md5.obj \
+ build\libdvdread_dvd_reader.obj \
+ build\libdvdread_dvd_input.obj \
+ build\libdvdread_dirent.obj
+DISC_ID_CFLAGS = /MD$(__DEBUG_FLAG_8) /DWIN32 $(__DEBUG_FLAG) \
+ /Fdbuild\disc_id.pdb $(____DEBUG_FLAG) $(__OPTIMIZE) /Iwin32 /I. $(CPPFLAGS) \
+ $(CFLAGS)
+DISC_ID_OBJECTS = \
+ build\disc_id_disc_id.obj
+IFO_DUMP_CFLAGS = /MD$(__DEBUG_FLAG_8) /DWIN32 $(__DEBUG_FLAG) \
+ /Fdbuild\ifo_dump.pdb $(____DEBUG_FLAG) $(__OPTIMIZE) /Iwin32 /I. $(CPPFLAGS) \
+ $(CFLAGS)
+IFO_DUMP_OBJECTS = \
+ build\ifo_dump_ifo_dump.obj
+PLAY_TITLE_CFLAGS = /MD$(__DEBUG_FLAG_8) /DWIN32 $(__DEBUG_FLAG) \
+ /Fdbuild\play_title.pdb $(____DEBUG_FLAG) $(__OPTIMIZE) /Iwin32 /I. \
+ $(CPPFLAGS) $(CFLAGS)
+PLAY_TITLE_OBJECTS = \
+ build\play_title_play_title.obj
+TITLE_INFO_CFLAGS = /MD$(__DEBUG_FLAG_8) /DWIN32 $(__DEBUG_FLAG) \
+ /Fdbuild\title_info.pdb $(____DEBUG_FLAG) $(__OPTIMIZE) /Iwin32 /I. \
+ $(CPPFLAGS) $(CFLAGS)
+TITLE_INFO_OBJECTS = \
+ build\title_info_title_info.obj
+
+### Conditionally set variables: ###
+
+!if "$(BUILD)" == "debug"
+__DEBUG_FLAG = /Zi
+!endif
+!if "$(BUILD)" == "release"
+__DEBUG_FLAG =
+!endif
+!if "$(BUILD)" == "debug"
+__DEBUG_FLAG_7 = /DEBUG
+!endif
+!if "$(BUILD)" == "release"
+__DEBUG_FLAG_7 =
+!endif
+!if "$(BUILD)" == "debug"
+____DEBUG_FLAG = /D_DEBUG
+!endif
+!if "$(BUILD)" == "release"
+____DEBUG_FLAG =
+!endif
+!if "$(BUILD)" == "debug"
+__DEBUG_FLAG_8 = d
+!endif
+!if "$(BUILD)" == "release"
+__DEBUG_FLAG_8 =
+!endif
+!if "$(BUILD)" == "debug"
+__OPTIMIZE = /Od
+!endif
+!if "$(BUILD)" == "release"
+__OPTIMIZE = /O2
+!endif
+
+
+all: build
+build:
+ -if not exist build mkdir build
+
+### Targets: ###
+
+all: build\libdvdread.lib build\disc_id.exe build\ifo_dump.exe build\play_title.exe build\title_info.exe
+
+clean:
+ -if exist build\*.obj del build\*.obj
+ -if exist build\*.res del build\*.res
+ -if exist build\libdvdread.lib del build\libdvdread.lib
+ -if exist build\disc_id.exe del build\disc_id.exe
+ -if exist build\disc_id.ilk del build\disc_id.ilk
+ -if exist build\disc_id.pdb del build\disc_id.pdb
+ -if exist build\ifo_dump.exe del build\ifo_dump.exe
+ -if exist build\ifo_dump.ilk del build\ifo_dump.ilk
+ -if exist build\ifo_dump.pdb del build\ifo_dump.pdb
+ -if exist build\play_title.exe del build\play_title.exe
+ -if exist build\play_title.ilk del build\play_title.ilk
+ -if exist build\play_title.pdb del build\play_title.pdb
+ -if exist build\title_info.exe del build\title_info.exe
+ -if exist build\title_info.ilk del build\title_info.ilk
+ -if exist build\title_info.pdb del build\title_info.pdb
+
+build\libdvdread.lib: $(LIBDVDREAD_OBJECTS)
+ if exist $@ del $@
+ lib /NOLOGO /OUT:$@ @<<
+ $(LIBDVDREAD_OBJECTS)
+<<
+
+build\disc_id.exe: $(DISC_ID_OBJECTS) build\libdvdread.lib
+ link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUG_FLAG_7) /LIBPATH:build @<<
+ $(DISC_ID_OBJECTS) libdvdread.lib
+<<
+
+build\ifo_dump.exe: $(IFO_DUMP_OBJECTS) build\libdvdread.lib
+ link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUG_FLAG_7) /LIBPATH:build @<<
+ $(IFO_DUMP_OBJECTS) libdvdread.lib
+<<
+
+build\play_title.exe: $(PLAY_TITLE_OBJECTS) build\libdvdread.lib
+ link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUG_FLAG_7) /LIBPATH:build @<<
+ $(PLAY_TITLE_OBJECTS) libdvdread.lib
+<<
+
+build\title_info.exe: $(TITLE_INFO_OBJECTS) build\libdvdread.lib
+ link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUG_FLAG_7) /LIBPATH:build @<<
+ $(TITLE_INFO_OBJECTS) libdvdread.lib
+<<
+
+build\libdvdread_ifo_read.obj: .\dvdread\ifo_read.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBDVDREAD_CFLAGS) $**
+
+build\libdvdread_dvd_udf.obj: .\dvdread\dvd_udf.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBDVDREAD_CFLAGS) $**
+
+build\libdvdread_ifo_print.obj: .\dvdread\ifo_print.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBDVDREAD_CFLAGS) $**
+
+build\libdvdread_nav_read.obj: .\dvdread\nav_read.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBDVDREAD_CFLAGS) $**
+
+build\libdvdread_nav_print.obj: .\dvdread\nav_print.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBDVDREAD_CFLAGS) $**
+
+build\libdvdread_md5.obj: .\dvdread\md5.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBDVDREAD_CFLAGS) $**
+
+build\libdvdread_dvd_reader.obj: .\dvdread\dvd_reader.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBDVDREAD_CFLAGS) $**
+
+build\libdvdread_dvd_input.obj: .\dvdread\dvd_input.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBDVDREAD_CFLAGS) $**
+
+build\libdvdread_dirent.obj: .\win32\dirent.c
+ $(CC) /c /nologo /TC /Fo$@ $(LIBDVDREAD_CFLAGS) $**
+
+build\disc_id_disc_id.obj: .\src\disc_id.c
+ $(CC) /c /nologo /TC /Fo$@ $(DISC_ID_CFLAGS) $**
+
+build\ifo_dump_ifo_dump.obj: .\src\ifo_dump.c
+ $(CC) /c /nologo /TC /Fo$@ $(IFO_DUMP_CFLAGS) $**
+
+build\play_title_play_title.obj: .\src\play_title.c
+ $(CC) /c /nologo /TC /Fo$@ $(PLAY_TITLE_CFLAGS) $**
+
+build\title_info_title_info.obj: .\src\title_info.c
+ $(CC) /c /nologo /TC /Fo$@ $(TITLE_INFO_CFLAGS) $**
diff -urN libdvdread-0.9.4\src\disc_id.c Dvdmenuxtractor\libdvdread\src\disc_id.c
--- libdvdread-0.9.4\src\disc_id.c Sun Jan 12 11:33:50 2003
+++ Dvdmenuxtractor\libdvdread\src\disc_id.c Mon Sep 13 13:23:06 2004
@@ -18,9 +18,13 @@
* USA
*/
+#include "config.h"
+
#include <stdio.h>
#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
#include <dvdread/ifo_print.h>
diff -urN libdvdread-0.9.4\src\ifo_dump.c Dvdmenuxtractor\libdvdread\src\ifo_dump.c
--- libdvdread-0.9.4\src\ifo_dump.c Sat Jan 25 21:45:46 2003
+++ Dvdmenuxtractor\libdvdread\src\ifo_dump.c Mon Sep 13 13:26:00 2004
@@ -18,9 +18,13 @@
* USA
*/
+#include "config.h"
+
#include <stdio.h>
#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
#include <dvdread/ifo_print.h>
diff -urN libdvdread-0.9.4\win32\config.h Dvdmenuxtractor\libdvdread\win32\config.h
--- libdvdread-0.9.4\win32\config.h Thu Jan 01 01:00:00 1970
+++ Dvdmenuxtractor\libdvdread\win32\config.h Mon Sep 13 13:34:39 2004
@@ -0,0 +1,109 @@
+/* config.h.in. Generated from configure.in by autoheader. */
+
+/* Define to 1 if you have the <byteswap.h> header file. */
+#undef HAVE_BYTESWAP_H
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <dvdcss/dvdcss.h> header file. */
+#undef HAVE_DVDCSS_DVDCSS_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+#define HAVE_MEMCPY 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/bswap.h> header file. */
+#undef HAVE_SYS_BSWAP_H
+
+/* Define to 1 if you have the <sys/endian.h> header file. */
+#undef HAVE_SYS_ENDIAN_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of a `char', as computed by sizeof. */
+#undef SIZEOF_CHAR
+
+/* The size of a `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of a `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* The size of a `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if your processor stores words with the most significant byte
+ first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
+
+/* Have a Mac OS X system */
+#undef __DARWIN__
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define as `__inline' if that's what the C compiler calls it, or to nothing
+ if it is not supported. */
+#define inline
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+/* #undef size_t */
+
+#define PATH_MAX 512
diff -urN libdvdread-0.9.4\win32\dirent.c Dvdmenuxtractor\libdvdread\win32\dirent.c
--- libdvdread-0.9.4\win32\dirent.c Thu Jan 01 01:00:00 1970
+++ Dvdmenuxtractor\libdvdread\win32\dirent.c Thu Apr 29 04:52:21 2004
@@ -0,0 +1,292 @@
+/*
+ * dirent.c
+ *
+ * Derived from DIRLIB.C by Matt J. Weinstein
+ * This note appears in the DIRLIB.H
+ * DIRLIB.H by M. J. Weinstein Released to public domain 1-Jan-89
+ *
+ * Updated by Jeremy Bettis <[email protected]>
+ * Significantly revised and rewinddir, seekdir and telldir added by Colin
+ * Peters <[email protected]>
+ *
+ * $Revision: 1.1 $
+ * $Author: ds $
+ * $Date: 2004/04/29 02:52:21 $
+ *
+ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <io.h>
+#include <direct.h>
+#include <dirent.h>
+#include <gtchar.h>
+#define SUFFIX _T("*")
+#define SLASH _T("\\")
+
+#include <stdio.h>
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h> /* for GetFileAttributes */
+
+/*
+ * opendir
+ *
+ * Returns a pointer to a DIR structure appropriately filled in to begin
+ * searching a directory.
+ */
+_TDIR *
+_topendir (const _TCHAR * szPath)
+{
+ _TDIR *nd;
+ unsigned int rc;
+ _TCHAR szFullPath[MAX_PATH];
+
+ errno = 0;
+
+ if (!szPath) {
+ errno = EFAULT;
+ return (_TDIR *) 0;
+ }
+
+ if (szPath[0] == _T ('\0')) {
+ errno = ENOTDIR;
+ return (_TDIR *) 0;
+ }
+
+ /* Attempt to determine if the given path really is a directory. */
+ rc = GetFileAttributes (szPath);
+ if (rc == (unsigned int) -1) {
+ /* call GetLastError for more error info */
+ errno = ENOENT;
+ return (_TDIR *) 0;
+ }
+ if (!(rc & FILE_ATTRIBUTE_DIRECTORY)) {
+ /* Error, entry exists but not a directory. */
+ errno = ENOTDIR;
+ return (_TDIR *) 0;
+ }
+
+ /* Make an absolute pathname. */
+ _tfullpath (szFullPath, szPath, MAX_PATH);
+
+ /* Allocate enough space to store DIR structure and the complete
+ * directory path given. */
+ nd = (_TDIR *) malloc (sizeof (_TDIR) + (_tcslen (szFullPath) +
+ _tcslen (SLASH) + _tcslen (SUFFIX) + 1) * sizeof (_TCHAR));
+
+ if (!nd) {
+ /* Error, out of memory. */
+ errno = ENOMEM;
+ return (_TDIR *) 0;
+ }
+
+ /* Create the search expression. */
+ _tcscpy (nd->dd_name, szFullPath);
+
+ /* Add on a slash if the path does not end with one. */
+ if (nd->dd_name[0] != _T ('\0') &&
+ nd->dd_name[_tcslen (nd->dd_name) - 1] != _T ('/') &&
+ nd->dd_name[_tcslen (nd->dd_name) - 1] != _T ('\\')) {
+ _tcscat (nd->dd_name, SLASH);
+ }
+
+ /* Add on the search pattern */
+ _tcscat (nd->dd_name, SUFFIX);
+
+ /* Initialize handle to -1 so that a premature closedir doesn't try
+ * to call _findclose on it. */
+ nd->dd_handle = -1;
+
+ /* Initialize the status. */
+ nd->dd_stat = 0;
+
+ /* Initialize the dirent structure. ino and reclen are invalid under
+ * Win32, and name simply points at the appropriate part of the
+ * findfirst_t structure. */
+ nd->dd_dir.d_ino = 0;
+ nd->dd_dir.d_reclen = 0;
+ nd->dd_dir.d_namlen = 0;
+ // Added by jcsston 02/04/2004, memset was writing to a bad pointer
+ nd->dd_dir.d_name = malloc (FILENAME_MAX);
+ // End add
+ memset (nd->dd_dir.d_name, 0, FILENAME_MAX);
+
+ return nd;
+}
+
+
+/*
+ * readdir
+ *
+ * Return a pointer to a dirent structure filled with the information on the
+ * next entry in the directory.
+ */
+struct _tdirent *
+_treaddir (_TDIR * dirp)
+{
+ errno = 0;
+
+ /* Check for valid DIR struct. */
+ if (!dirp) {
+ errno = EFAULT;
+ return (struct _tdirent *) 0;
+ }
+
+ if (dirp->dd_stat < 0) {
+ /* We have already returned all files in the directory
+ * (or the structure has an invalid dd_stat). */
+ return (struct _tdirent *) 0;
+ } else if (dirp->dd_stat == 0) {
+ /* We haven't started the search yet. */
+ /* Start the search */
+ dirp->dd_handle = _tfindfirst (dirp->dd_name, &(dirp->dd_dta));
+
+ if (dirp->dd_handle == -1) {
+ /* Whoops! Seems there are no files in that
+ * directory. */
+ dirp->dd_stat = -1;
+ } else {
+ dirp->dd_stat = 1;
+ }
+ } else {
+ /* Get the next search entry. */
+ if (_tfindnext (dirp->dd_handle, &(dirp->dd_dta))) {
+ /* We are off the end or otherwise error.
+ _findnext sets errno to ENOENT if no more file
+ Undo this. */
+ DWORD winerr = GetLastError ();
+
+ if (winerr == ERROR_NO_MORE_FILES)
+ errno = 0;
+ _findclose (dirp->dd_handle);
+ dirp->dd_handle = -1;
+ dirp->dd_stat = -1;
+ } else {
+ /* Update the status to indicate the correct
+ * number. */
+ dirp->dd_stat++;
+ }
+ }
+
+ if (dirp->dd_stat > 0) {
+ /* Successfully got an entry. Everything about the file is
+ * already appropriately filled in except the length of the
+ * file name. */
+ dirp->dd_dir.d_namlen = _tcslen (dirp->dd_dta.name);
+ _tcscpy (dirp->dd_dir.d_name, dirp->dd_dta.name);
+ return &dirp->dd_dir;
+ }
+
+ return (struct _tdirent *) 0;
+}
+
+
+/*
+ * closedir
+ *
+ * Frees up resources allocated by opendir.
+ */
+int
+_tclosedir (_TDIR * dirp)
+{
+ int rc;
+
+ errno = 0;
+ rc = 0;
+
+ if (!dirp) {
+ errno = EFAULT;
+ return -1;
+ }
+
+ if (dirp->dd_handle != -1) {
+ rc = _findclose (dirp->dd_handle);
+ }
+
+ /* Delete the dir structure. */
+ free (dirp);
+
+ return rc;
+}
+
+/*
+ * rewinddir
+ *
+ * Return to the beginning of the directory "stream". We simply call findclose
+ * and then reset things like an opendir.
+ */
+void
+_trewinddir (_TDIR * dirp)
+{
+ errno = 0;
+
+ if (!dirp) {
+ errno = EFAULT;
+ return;
+ }
+
+ if (dirp->dd_handle != -1) {
+ _findclose (dirp->dd_handle);
+ }
+
+ dirp->dd_handle = -1;
+ dirp->dd_stat = 0;
+}
+
+/*
+ * telldir
+ *
+ * Returns the "position" in the "directory stream" which can be used with
+ * seekdir to go back to an old entry. We simply return the value in stat.
+ */
+long
+_ttelldir (_TDIR * dirp)
+{
+ errno = 0;
+
+ if (!dirp) {
+ errno = EFAULT;
+ return -1;
+ }
+ return dirp->dd_stat;
+}
+
+/*
+ * seekdir
+ *
+ * Seek to an entry previously returned by telldir. We rewind the directory
+ * and call readdir repeatedly until either dd_stat is the position number
+ * or -1 (off the end). This is not perfect, in that the directory may
+ * have changed while we weren't looking. But that is probably the case with
+ * any such system.
+ */
+void
+_tseekdir (_TDIR * dirp, long lPos)
+{
+ errno = 0;
+
+ if (!dirp) {
+ errno = EFAULT;
+ return;
+ }
+
+ if (lPos < -1) {
+ /* Seeking to an invalid position. */
+ errno = EINVAL;
+ return;
+ } else if (lPos == -1) {
+ /* Seek past end. */
+ if (dirp->dd_handle != -1) {
+ _findclose (dirp->dd_handle);
+ }
+ dirp->dd_handle = -1;
+ dirp->dd_stat = -1;
+ } else {
+ /* Rewind and read forward to the appropriate index. */
+ _trewinddir (dirp);
+
+ while ((dirp->dd_stat < lPos) && _treaddir (dirp));
+ }
+}
diff -urN libdvdread-0.9.4\win32\dirent.h Dvdmenuxtractor\libdvdread\win32\dirent.h
--- libdvdread-0.9.4\win32\dirent.h Thu Jan 01 01:00:00 1970
+++ Dvdmenuxtractor\libdvdread\win32\dirent.h Mon Sep 13 13:11:12 2004
@@ -0,0 +1,147 @@
+/*
+ * DIRENT.H (formerly DIRLIB.H)
+ *
+ * by M. J. Weinstein Released to public domain 1-Jan-89
+ *
+ * Because I have heard that this feature (opendir, readdir, closedir)
+ * it so useful for programmers coming from UNIX or attempting to port
+ * UNIX code, and because it is reasonably light weight, I have included
+ * it in the Mingw32 package. I have also added an implementation of
+ * rewinddir, seekdir and telldir.
+ * - Colin Peters <[email protected]>
+ *
+ * This code is distributed in the hope that is will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includeds but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * $Revision: 1.1 $
+ * $Author: ds $
+ * $Date: 2004/04/29 02:52:21 $
+ *
+ */
+
+#ifndef __STRICT_ANSI__
+
+#ifndef _DIRENT_H_
+#define _DIRENT_H_
+
+/* All the headers include this file. */
+/*#include <_mingw.h>*/
+
+#include <io.h>
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct dirent
+{
+ long d_ino; /* Always zero. */
+ unsigned short d_reclen; /* Always zero. */
+ unsigned short d_namlen; /* Length of name in d_name. */
+ char* d_name; /* File name. */
+ /* NOTE: The name in the dirent structure points to the name in the
+ * finddata_t structure in the DIR. */
+};
+
+/*
+ * This is an internal data structure. Good programmers will not use it
+ * except as an argument to one of the functions below.
+ * dd_stat field is now int (was short in older versions).
+ */
+typedef struct
+{
+ /* disk transfer area for this dir */
+ struct _finddata_t dd_dta;
+
+ /* dirent struct to return from dir (NOTE: this makes this thread
+ * safe as long as only one thread uses a particular DIR struct at
+ * a time) */
+ struct dirent dd_dir;
+
+ /* _findnext handle */
+ long dd_handle;
+
+ /*
+ * Status of search:
+ * 0 = not started yet (next entry to read is first entry)
+ * -1 = off the end
+ * positive = 0 based index of next entry
+ */
+ int dd_stat;
+
+ /* given path for dir with search pattern (struct is extended) */
+ char dd_name[1];
+} DIR;
+
+DIR* opendir (const char*);
+struct dirent* readdir (DIR*);
+int closedir (DIR*);
+void rewinddir (DIR*);
+long telldir (DIR*);
+void seekdir (DIR*, long);
+
+
+/* wide char versions */
+
+struct _wdirent
+{
+ long d_ino; /* Always zero. */
+ unsigned short d_reclen; /* Always zero. */
+ unsigned short d_namlen; /* Length of name in d_name. */
+ wchar_t* d_name; /* File name. */
+ /* NOTE: The name in the dirent structure points to the name in the * wfinddata_t structure in the _WDIR. */
+};
+
+/*
+ * This is an internal data structure. Good programmers will not use it
+ * except as an argument to one of the functions below.
+ */
+typedef struct
+{
+ /* disk transfer area for this dir */
+ struct _wfinddata_t dd_dta;
+
+ /* dirent struct to return from dir (NOTE: this makes this thread
+ * safe as long as only one thread uses a particular DIR struct at
+ * a time) */
+ struct _wdirent dd_dir;
+
+ /* _findnext handle */
+ long dd_handle;
+
+ /*
+ * Status of search:
+ * 0 = not started yet (next entry to read is first entry)
+ * -1 = off the end
+ * positive = 0 based index of next entry
+ */
+ int dd_stat;
+
+ /* given path for dir with search pattern (struct is extended) */
+ wchar_t dd_name[1];
+} _WDIR;
+
+
+
+_WDIR* _wopendir (const wchar_t*);
+struct _wdirent* _wreaddir (_WDIR*);
+int _wclosedir (_WDIR*);
+void _wrewinddir (_WDIR*);
+long _wtelldir (_WDIR*);
+void _wseekdir (_WDIR*, long);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _DIRENT_H_ */
+
+#endif /* Not __STRICT_ANSI__ */
+
diff -urN libdvdread-0.9.4\win32\gtchar.h Dvdmenuxtractor\libdvdread\win32\gtchar.h
--- libdvdread-0.9.4\win32\gtchar.h Thu Jan 01 01:00:00 1970
+++ Dvdmenuxtractor\libdvdread\win32\gtchar.h Thu Apr 29 04:52:21 2004
@@ -0,0 +1,397 @@
+/*
+ * tchar.h
+ *
+ * Unicode mapping layer for the standard C library. By including this
+ * file and using the 't' names for string functions
+ * (eg. _tprintf) you can make code which can be easily adapted to both
+ * Unicode and non-unicode environments. In a unicode enabled compile define
+ * _UNICODE before including tchar.h, otherwise the standard non-unicode
+ * library functions will be used.
+ *
+ * Note that you still need to include string.h or stdlib.h etc. to define
+ * the appropriate functions. Also note that there are several defines
+ * included for non-ANSI functions which are commonly available (but using
+ * the convention of prepending an underscore to non-ANSI library function
+ * names).
+ *
+ * This file is part of the Mingw32 package.
+ *
+ * Contributors:
+ * Created by Colin Peters <[email protected]>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * $Revision: 1.1 $
+ * $Author: ds $
+ * $Date: 2004/04/29 02:52:21 $
+ *
+ */
+
+#ifndef _TCHAR_H_
+#define _TCHAR_H_
+
+/* All the headers include this file. */
+/*#include <_mingw.h>*/
+
+/*
+ * NOTE: This tests _UNICODE, which is different from the UNICODE define
+ * used to differentiate Win32 API calls.
+ */
+#ifdef _UNICODE
+
+
+/*
+ * Use TCHAR instead of char or wchar_t. It will be appropriately translated
+ * if _UNICODE is correctly defined (or not).
+ */
+#ifndef _TCHAR_DEFINED
+#ifndef RC_INVOKED
+typedef wchar_t TCHAR;
+typedef wchar_t _TCHAR;
+#endif /* Not RC_INVOKED */
+#define _TCHAR_DEFINED
+#endif
+
+
+/*
+ * __TEXT is a private macro whose specific use is to force the expansion of a
+ * macro passed as an argument to the macros _T or _TEXT. DO NOT use this
+ * macro within your programs. It's name and function could change without
+ * notice.
+ */
+#define __TEXT(q) L##q
+
+/* for porting from other Windows compilers */
+#if 0 // no wide startup module
+#define _tmain wmain
+#define _tWinMain wWinMain
+#define _tenviron _wenviron
+#define __targv __wargv
+#endif
+
+/*
+ * Unicode functions
+ */
+#define _tprintf wprintf
+#define _ftprintf fwprintf
+#define _stprintf swprintf
+#define _sntprintf _snwprintf
+#define _vtprintf vwprintf
+#define _vftprintf vfwprintf
+#define _vstprintf vswprintf
+#define _vsntprintf _vsnwprintf
+#define _tscanf wscanf
+#define _ftscanf fwscanf
+#define _stscanf swscanf
+#define _fgettc fgetwc
+#define _fgettchar _fgetwchar
+#define _fgetts fgetws
+#define _fputtc fputwc
+#define _fputtchar _fputwchar
+#define _fputts fputws
+#define _gettc getwc
+#define _getts _getws
+#define _puttc putwc
+#define _putts _putws
+#define _ungettc ungetwc
+#define _tcstod wcstod
+#define _tcstol wcstol
+#define _tcstoul wcstoul
+#define _itot _itow
+#define _ltot _ltow
+#define _ultot _ultow
+#define _ttoi _wtoi
+#define _ttol _wtol
+#define _tcscat wcscat
+#define _tcschr wcschr
+#define _tcscmp wcscmp
+#define _tcscpy wcscpy
+#define _tcscspn wcscspn
+#define _tcslen wcslen
+#define _tcsncat wcsncat
+#define _tcsncmp wcsncmp
+#define _tcsncpy wcsncpy
+#define _tcspbrk wcspbrk
+#define _tcsrchr wcsrchr
+#define _tcsspn wcsspn
+#define _tcsstr wcsstr
+#define _tcstok wcstok
+#define _tcsdup _wcsdup
+#define _tcsicmp _wcsicmp
+#define _tcsnicmp _wcsnicmp
+#define _tcsnset _wcsnset
+#define _tcsrev _wcsrev
+#define _tcsset _wcsset
+#define _tcslwr _wcslwr
+#define _tcsupr _wcsupr
+#define _tcsxfrm wcsxfrm
+#define _tcscoll wcscoll
+#define _tcsicoll _wcsicoll
+#define _istalpha iswalpha
+#define _istupper iswupper
+#define _istlower iswlower
+#define _istdigit iswdigit
+#define _istxdigit iswxdigit
+#define _istspace iswspace
+#define _istpunct iswpunct
+#define _istalnum iswalnum
+#define _istprint iswprint
+#define _istgraph iswgraph
+#define _istcntrl iswcntrl
+#define _istascii iswascii
+#define _totupper towupper
+#define _totlower towlower
+#define _tcsftime wcsftime
+/* Macro functions */
+#define _tcsdec _wcsdec
+#define _tcsinc _wcsinc
+#define _tcsnbcnt _wcsncnt
+#define _tcsnccnt _wcsncnt
+#define _tcsnextc _wcsnextc
+#define _tcsninc _wcsninc
+#define _tcsspnp _wcsspnp
+#define _wcsdec(_wcs1, _wcs2) ((_wcs1)>=(_wcs2) ? NULL : (_wcs2)-1)
+#define _wcsinc(_wcs) ((_wcs)+1)
+#define _wcsnextc(_wcs) ((unsigned int) *(_wcs))
+#define _wcsninc(_wcs, _inc) (((_wcs)+(_inc)))
+#define _wcsncnt(_wcs, _cnt) ((wcslen(_wcs)>_cnt) ? _count : wcslen(_wcs))
+#define _wcsspnp(_wcs1, _wcs2) ((*((_wcs1)+wcsspn(_wcs1,_wcs2))) ? ((_wcs1)+wcsspn(_wcs1,_wcs2)) : NULL)
+
+#if 1 /* defined __MSVCRT__ */
+/*
+ * These wide functions not in crtdll.dll.
+ * Define macros anyway so that _wfoo rather than _tfoo is undefined
+ */
+#define _ttoi64 _wtoi64
+#define _i64tot _i64tow
+#define _ui64tot _ui64tow
+#define _tasctime _wasctime
+#define _tctime _wctime
+#define _tstrdate _wstrdate
+#define _tstrtime _wstrtime
+#define _tutime _wutime
+#define _tcsnccoll _wcsncoll
+#define _tcsncoll _wcsncoll
+#define _tcsncicoll _wcsnicoll
+#define _tcsnicoll _wcsnicoll
+#define _taccess _waccess
+#define _tchmod _wchmod
+#define _tcreat _wcreat
+#define _tfindfirst _wfindfirst
+#define _tfindnext _wfindnext
+#define _tfdopen _wfdopen
+#define _tfopen _wfopen
+#define _tgetenv _wgetenv
+#define _tputenv _wputenv
+#define _tsearchenv _wsearchenv
+#define _tmakepath _wmakepath
+#define _tsplitpath _wsplitpath
+#define _tfullpath _wfullpath
+#define _tmktemp _wmktemp
+#define _topen _wopen
+#define _tremove _wremove
+#define _trename _wrename
+#define _tsopen _wsopen
+#define _tsetlocale _wsetlocale
+#define _tunlink _wunlink
+#define _tfinddata_t _wfinddata_t
+#define _tfindfirsti64 _wfindfirsti64
+#define _tfindnexti64 _wfindnexti64
+#define _tfinddatai64_t _wfinddatai64_t
+#endif /* __MSVCRT__ */
+
+/* dirent structures and functions */
+#define _tdirent _wdirent
+#define _TDIR _WDIR
+#define _topendir _wopendir
+#define _tclosedir _wclosedir
+#define _treaddir _wreaddir
+#define _trewinddir _wrewinddir
+#define _ttelldir _wtelldir
+#define _tseekdir _wseekdir
+#else /* Not _UNICODE */
+
+/*
+ * TCHAR, the type you should use instead of char.
+ */
+#ifndef _TCHAR_DEFINED
+#ifndef RC_INVOKED
+typedef char TCHAR;
+typedef char _TCHAR;
+#endif
+#define _TCHAR_DEFINED
+#endif
+
+/*
+ * __TEXT is a private macro whose specific use is to force the expansion of a
+ * macro passed as an argument to the macros _T or _TEXT. DO NOT use this
+ * macro within your programs. It's name and function could change without
+ * notice.
+ */
+#define __TEXT(q) q
+
+/* for porting from other Windows compilers */
+#define _tmain main
+#define _tWinMain WinMain
+#define _tenviron _environ
+#define __targv __argv
+
+/*
+ * Non-unicode (standard) functions
+ */
+
+#define _tprintf printf
+#define _ftprintf fprintf
+#define _stprintf sprintf
+#define _sntprintf _snprintf
+#define _vtprintf vprintf
+#define _vftprintf vfprintf
+#define _vstprintf vsprintf
+#define _vsntprintf _vsnprintf
+#define _tscanf scanf
+#define _ftscanf fscanf
+#define _stscanf sscanf
+#define _fgettc fgetc
+#define _fgettchar _fgetchar
+#define _fgetts fgets
+#define _fputtc fputc
+#define _fputtchar _fputchar
+#define _fputts fputs
+#define _tfdopen _fdopen
+#define _tfopen fopen
+#define _tgetenv getenv
+#define _tputenv _putenv
+#define _tsearchenv _searchenv
+#define _tmakepath _makepath
+#define _tsplitpath _splitpath
+#define _tfullpath _fullpath
+#define _gettc getc
+#define _getts gets
+#define _puttc putc
+#define _putts puts
+#define _ungettc ungetc
+#define _tcstod strtod
+#define _tcstol strtol
+#define _tcstoul strtoul
+#define _itot _itoa
+#define _ltot _ltoa
+#define _ultot _ultoa
+#define _ttoi atoi
+#define _ttol atol
+#define _tcscat strcat
+#define _tcschr strchr
+#define _tcscmp strcmp
+#define _tcscpy strcpy
+#define _tcscspn strcspn
+#define _tcslen strlen
+#define _tcsncat strncat
+#define _tcsncmp strncmp
+#define _tcsncpy strncpy
+#define _tcspbrk strpbrk
+#define _tcsrchr strrchr
+#define _tcsspn strspn
+#define _tcsstr strstr
+#define _tcstok strtok
+#define _tcsdup _strdup
+#define _tcsicmp _stricmp
+#define _tcsnicmp _strnicmp
+#define _tcsnset _strnset
+#define _tcsrev _strrev
+#define _tcsset _strset
+#define _tcslwr _strlwr
+#define _tcsupr _strupr
+#define _tcsxfrm strxfrm
+#define _tcscoll strcoll
+#define _tcsicoll _stricoll
+#define _istalpha isalpha
+#define _istupper isupper
+#define _istlower islower
+#define _istdigit isdigit
+#define _istxdigit isxdigit
+#define _istspace isspace
+#define _istpunct ispunct
+#define _istalnum isalnum
+#define _istprint isprint
+#define _istgraph isgraph
+#define _istcntrl iscntrl
+#define _istascii isascii
+#define _totupper toupper
+#define _totlower tolower
+#define _tasctime asctime
+#define _tctime ctime
+#define _tstrdate _strdate
+#define _tstrtime _strtime
+#define _tutime _utime
+#define _tcsftime strftime
+/* Macro functions */
+#define _tcsdec _strdec
+#define _tcsinc _strinc
+#define _tcsnbcnt _strncnt
+#define _tcsnccnt _strncnt
+#define _tcsnextc _strnextc
+#define _tcsninc _strninc
+#define _tcsspnp _strspnp
+#define _strdec(_str1, _str2) ((_str1)>=(_str2) ? NULL : (_str2)-1)
+#define _strinc(_str) ((_str)+1)
+#define _strnextc(_str) ((unsigned int) *(_str))
+#define _strninc(_str, _inc) (((_str)+(_inc)))
+#define _strncnt(_str, _cnt) ((strlen(_str)>_cnt) ? _count : strlen(_str))
+#define _strspnp(_str1, _str2) ((*((_str1)+strspn(_str1,_str2))) ? ((_str1)+strspn(_str1,_str2)) : NULL)
+
+#define _tchmod _chmod
+#define _tcreat _creat
+#define _tfindfirst _findfirst
+#define _tfindnext _findnext
+#define _tmktemp _mktemp
+#define _topen _open
+#define _taccess _access
+#define _tremove remove
+#define _trename rename
+#define _tsopen _sopen
+#define _tsetlocale setlocale
+#define _tunlink _unlink
+#define _tfinddata_t _finddata_t
+
+#if 1 /* defined __MSVCRT__ */
+/* Not in crtdll.dll. Define macros anyway? */
+#define _ttoi64 _atoi64
+#define _i64tot _i64toa
+#define _ui64tot _ui64toa
+#define _tcsnccoll _strncoll
+#define _tcsncoll _strncoll
+#define _tcsncicoll _strnicoll
+#define _tcsnicoll _strnicoll
+#define _tfindfirsti64 _findfirsti64
+#define _tfindnexti64 _findnexti64
+#define _tfinddatai64_t _finddatai64_t
+#endif /* __MSVCRT__ */
+
+/* dirent structures and functions */
+#define _tdirent dirent
+#define _TDIR DIR
+#define _topendir opendir
+#define _tclosedir closedir
+#define _treaddir readdir
+#define _trewinddir rewinddir
+#define _ttelldir telldir
+#define _tseekdir seekdir
+
+#endif /* Not _UNICODE */
+
+/*
+ * UNICODE a constant string when _UNICODE is defined else returns the string
+ * unmodified. Also defined in w32api/winnt.h.
+ */
+#define _TEXT(x) __TEXT(x)
+#define _T(x) __TEXT(x)
+
+#endif /* Not _TCHAR_H_ */
+
diff -urN libdvdread-0.9.4\win32\inttypes.h Dvdmenuxtractor\libdvdread\win32\inttypes.h
--- libdvdread-0.9.4\win32\inttypes.h Thu Jan 01 01:00:00 1970
+++ Dvdmenuxtractor\libdvdread\win32\inttypes.h Mon Sep 13 14:08:25 2004
@@ -0,0 +1,44 @@
+#ifndef _LOCAL_INTTYPES_H_
+#define _LOCAL_INTTYPES_H_
+
+
+#if defined(WIN32)
+#include <windows.h>
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned __int64 uint64_t;
+
+typedef unsigned int ssize_t;
+typedef __int64 int64_t;
+typedef int int32_t;
+typedef short int16_t;
+
+#define strcasecmp(x,y) stricmp(x,y)
+#define strncasecmp(x,y,z) strnicmp(x,y,z)
+
+#ifndef S_ISREG
+#define S_ISREG(mode) ((mode)&_S_IFREG)
+#endif
+#ifndef S_ISDIR
+#define S_ISDIR(mode) ((mode)&_S_IFDIR)
+#endif
+#ifndef S_ISCHR
+#define S_ISCHR(mode) ((mode)&_S_IFMT)
+#endif
+#ifndef S_ISSOCK
+#define S_ISSOCK(x) (0)
+#endif
+#ifndef S_ISBLK
+#define S_ISBLK(x) (0)
+#endif
+
+#define dlclose(x) FreeLibrary(x)
+#define dlsym(x,y) GetProcAddress(x,y)
+
+#else /* !WIN32 */
+#include <inttypes.h>
+#endif /* !WIN32 */
+
+#endif /* _LOCAL_INTTYPES_H_ */