summaryrefslogtreecommitdiffstats
path: root/osdep
diff options
context:
space:
mode:
Diffstat (limited to 'osdep')
-rw-r--r--osdep/Makefile5
-rw-r--r--osdep/getch2-win.c2
-rw-r--r--osdep/glob-win.c91
-rw-r--r--osdep/glob.h16
-rw-r--r--osdep/timer-win2.c34
5 files changed, 145 insertions, 3 deletions
diff --git a/osdep/Makefile b/osdep/Makefile
index c1a1c4da69..808f2e3e7b 100644
--- a/osdep/Makefile
+++ b/osdep/Makefile
@@ -17,11 +17,12 @@ ifeq ($(MACOSX),yes)
timer = timer-macosx.c
endif
ifeq ($(TARGET_CYGWIN),yes)
-timer = timer-win.c
+timer = timer-win2.c
endif
ifeq ($(TARGET_MINGW32),yes)
-timer = timer-win.c
+timer = timer-win2.c
getch = getch2-win.c
+SRCS += glob-win.c
endif
SRCS += $(timer)
SRCS += $(getch)
diff --git a/osdep/getch2-win.c b/osdep/getch2-win.c
index 96f6878d2b..c378fbfd69 100644
--- a/osdep/getch2-win.c
+++ b/osdep/getch2-win.c
@@ -99,7 +99,7 @@ int getch2(int time){
void getch2_enable(){
- int retval;
+ DWORD retval;
stdin = GetStdHandle(STD_INPUT_HANDLE);
if(!GetNumberOfConsoleInputEvents(stdin,&retval))
{
diff --git a/osdep/glob-win.c b/osdep/glob-win.c
new file mode 100644
index 0000000000..08ec3c2a6c
--- /dev/null
+++ b/osdep/glob-win.c
@@ -0,0 +1,91 @@
+#include <sys/types.h>
+#include <stdio.h>
+
+#include "../config.h"
+
+#ifndef HAVE_GLOB
+#ifdef __MINGW32__
+#undef DATADIR
+#include <windows.h>
+#include "glob.h"
+
+int glob(const char *pattern, int flags,
+ int (*errfunc)(const char *epath, int eerrno), glob_t *pglob)
+{
+ HANDLE searchhndl;
+ WIN32_FIND_DATA found_file;
+ if(errfunc)printf("glob():ERROR:Sorry errfunc not supported by this implementation\n");
+ if(flags)printf("glob():ERROR:Sorry no flags supported by this globimplementation\n");
+ //printf("PATTERN \"%s\"\n",pattern);
+ pglob->gl_pathc = 0;
+ searchhndl = FindFirstFile( pattern,&found_file);
+ if(searchhndl == INVALID_HANDLE_VALUE)
+ {
+ if(GetLastError() == ERROR_FILE_NOT_FOUND)
+ {
+ pglob->gl_pathc = 0;
+ //printf("could not find a file matching your search criteria\n");
+ return 1;
+ }
+ else
+ {
+ //printf("glob():ERROR:FindFirstFile: %i\n",GetLastError());
+ return 1;
+ }
+ }
+ pglob->gl_pathv = malloc(sizeof(char*));
+ pglob->gl_pathv[0] = strdup(found_file.cFileName);
+ pglob->gl_pathc++;
+ while(1)
+ {
+ if(!FindNextFile(searchhndl,&found_file))
+ {
+ if(GetLastError()==ERROR_NO_MORE_FILES)
+ {
+ //printf("glob(): no more files found\n");
+ break;
+ }
+ else
+ {
+ //printf("glob():ERROR:FindNextFile:%i\n",GetLastError());
+ return 1;
+ }
+ }
+ else
+ {
+ //printf("glob: found file %s\n",found_file.cFileName);
+ pglob->gl_pathc++;
+ pglob->gl_pathv = realloc(pglob->gl_pathv,pglob->gl_pathc * sizeof(char*));
+ pglob->gl_pathv[pglob->gl_pathc-1] = strdup(found_file.cFileName);
+ }
+ }
+ FindClose(searchhndl);
+ return 0;
+}
+
+void globfree(glob_t *pglob)
+{
+ int i;
+ for(i=0; i <pglob->gl_pathc ;i++)
+ {
+ free(pglob->gl_pathv[i]);
+ }
+ free(pglob->gl_pathv);
+}
+#endif /*__MINGW32__*/
+#endif /*HAVE_GLOB*/
+
+#if 0
+int main(){
+ glob_t gg;
+ printf("globtest\n");
+ glob( "*.jpeg",0,NULL,&gg );
+ {
+ int i;
+ for(i=0;i<gg.gl_pathc;i++)printf("GLOBED:%i %s\n",i,gg.gl_pathv[i]);
+ }
+ globfree(&gg);
+
+ return 0;
+}
+#endif
diff --git a/osdep/glob.h b/osdep/glob.h
new file mode 100644
index 0000000000..dae4a73109
--- /dev/null
+++ b/osdep/glob.h
@@ -0,0 +1,16 @@
+#include "../config.h"
+
+#ifndef HAVE_GLOB
+#ifdef __MINGW32__
+typedef struct {
+ size_t gl_pathc;
+ char **gl_pathv;
+ size_t gl_offs;
+} glob_t;
+
+void globfree(glob_t *pglob);
+
+int glob(const char *pattern, int flags, int (*errfunc)(const char *epath, int eerrno), glob_t *pglob);
+
+#endif
+#endif
diff --git a/osdep/timer-win2.c b/osdep/timer-win2.c
new file mode 100644
index 0000000000..eb8bb3d3f4
--- /dev/null
+++ b/osdep/timer-win2.c
@@ -0,0 +1,34 @@
+// Precise timer routines for WINDOWS
+
+#include <windows.h>
+#include <mmsystem.h>
+#include "timer.h"
+
+// Returns current time in microseconds
+unsigned int GetTimer(){
+ return timeGetTime() * 1000;
+}
+
+// Returns current time in milliseconds
+unsigned int GetTimerMS(){
+ return timeGetTime() ;
+}
+
+int usec_sleep(int usec_delay){
+ Sleep( usec_delay/1000);
+ return 0;
+}
+
+static DWORD RelativeTime = 0;
+
+float GetRelativeTime(){
+ DWORD t, r;
+ t = GetTimer();
+ r = t - RelativeTime;
+ RelativeTime = t;
+ return (float) r *0.000001F;
+}
+
+void InitTimer(){
+ GetRelativeTime();
+}