changeset 1887:38582d98f366 draft

(svn r2393) - Implemented threaded saving for OS/2 - Fixed discrepancy with SlArray declaration
author orudge <orudge@openttd.org>
date Thu, 02 Jun 2005 09:51:01 +0000
parents ab24fa9c8e3d
children 45ec32b2dbf6
files os2.c saveload.h
diffstat 2 files changed, 42 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/os2.c
+++ b/os2.c
@@ -9,6 +9,8 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <stdarg.h>
+#include <stdlib.h>
+#include <process.h>
 #include <time.h>
 #include <dos.h>
 
@@ -24,11 +26,6 @@
 #include <SDL.h>
 #endif
 
-static inline int strcasecmp(const char* s1, const char* s2)
-{
-	return stricmp(s1, s2);
-}
-
 static char *_fios_path;
 static char *_fios_save_path;
 static char *_fios_scn_path;
@@ -53,7 +50,7 @@
 	if (_savegame_sort_order < 2) // sort by date
 		r = da->mtime < db->mtime ? -1 : 1;
 	else
-		r = strcasecmp(
+		r = stricmp(
 			da->title[0] != '\0' ? da->title : da->name,
 			db->title[0] != '\0' ? db->title : db->name
 		);
@@ -153,7 +150,7 @@
 			if (stat(filename, &sb) || S_ISDIR(sb.st_mode)) continue;
 
 			t = strrchr(dirent->d_name, '.');
-			if (t != NULL && strcasecmp(t, ".sav") == 0) { // OpenTTD
+			if (t != NULL && stricmp(t, ".sav") == 0) { // OpenTTD
 				fios = FiosAlloc();
 				fios->type = FIOS_TYPE_FILE;
 				fios->mtime = sb.st_mtime;
@@ -161,9 +158,9 @@
 				ttd_strlcpy(fios->name, dirent->d_name, lengthof(fios->name));
 			} else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO) {
 				if (t != NULL && (
-							strcasecmp(t, ".ss1") == 0 ||
-							strcasecmp(t, ".sv1") == 0 ||
-							strcasecmp(t, ".sv2") == 0
+							stricmp(t, ".ss1") == 0 ||
+							stricmp(t, ".sv1") == 0 ||
+							stricmp(t, ".sv2") == 0
 						)) { // TTDLX(Patch)
 					fios = FiosAlloc();
 					fios->type = FIOS_TYPE_OLDFILE;
@@ -273,7 +270,7 @@
 			if (stat(filename, &sb) || S_ISDIR(sb.st_mode)) continue;
 
 			t = strrchr(dirent->d_name, '.');
-			if (t != NULL && strcasecmp(t, ".scn") == 0) { // OpenTTD
+			if (t != NULL && stricmp(t, ".scn") == 0) { // OpenTTD
 				fios = FiosAlloc();
 				fios->type = FIOS_TYPE_SCENARIO;
 				fios->mtime = sb.st_mtime;
@@ -282,8 +279,8 @@
 			} else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO ||
 					mode == SLD_NEW_GAME) {
 				if (t != NULL && (
-							strcasecmp(t, ".sv0") == 0 ||
-							strcasecmp(t, ".ss0") == 0
+							stricmp(t, ".sv0") == 0 ||
+							stricmp(t, ".ss0") == 0
 						)) { // TTDLX(Patch)
 					fios = FiosAlloc();
 					fios->type = FIOS_TYPE_OLD_SCENARIO;
@@ -410,7 +407,7 @@
 
 	// Don't append the extension, if it is already there
 	period = strrchr(name, '.');
-	if (period != NULL && strcasecmp(period, extension) == 0) extension = "";
+	if (period != NULL && stricmp(period, extension) == 0) extension = "";
 
 	sprintf(buf, "%s\\%s%s", _fios_path, name, extension);
 }
@@ -713,3 +710,33 @@
 	// TODO
 	return false;
 }
+
+static TID thread1 = 0;
+
+// The thread function must be declared and compiled using _Optlink linkage, apparently
+// It seems to work, though :)
+
+bool CreateOTTDThread(void *func, void *param)
+{
+	thread1 = _beginthread(func, NULL, 32768, param);
+	fprintf(stderr, "beginthread returns: %d\n", thread1); //
+
+	if (thread1 == -1)
+		return(false);
+
+	return(true);
+}
+
+void CloseOTTDThread(void)
+{
+	_endthread();
+	return;
+}
+
+void JoinOTTDThread(void)
+{
+	if (thread1 == 0)
+		return;
+
+	DosWaitThread(&thread1, DCWW_WAIT);
+}
--- a/saveload.h
+++ b/saveload.h
@@ -188,7 +188,7 @@
 
 void SlSetArrayIndex(uint index);
 int SlIterateArray(void);
-void SlArray(void *array, uint length, uint conv);
+void SlArray(void *array, uint length, VarType conv);
 void SlObject(void *object, const SaveLoad *desc);
 void SlAutolength(AutolengthProc *proc, void *arg);
 uint SlGetFieldLength(void);