summaryrefslogtreecommitdiff
path: root/strings.c
diff options
context:
space:
mode:
authorDarkvater <darkvater@openttd.org>2006-08-04 23:45:20 +0000
committerDarkvater <darkvater@openttd.org>2006-08-04 23:45:20 +0000
commitb5e3718ac4ead73a7b7bb9fd694cae5d9aaefa7b (patch)
tree8366278d35f2187288e8d53bf4fc9e043e630808 /strings.c
parent4de30befaee2141e410bf0df5d5f7e3906bc0111 (diff)
downloadopenttd-b5e3718ac4ead73a7b7bb9fd694cae5d9aaefa7b.tar.xz
(svn r5763) - Cleanup: Move the now unified GetLanguageList and comparator function to strings.c where it belongs.
Diffstat (limited to 'strings.c')
-rw-r--r--strings.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/strings.c b/strings.c
index 2e976f4ad..a0434e74b 100644
--- a/strings.c
+++ b/strings.c
@@ -20,6 +20,14 @@
#include "table/landscape_const.h"
#include "music.h"
+#ifdef WIN32
+/* for opendir/readdir/closedir */
+# include "fios.h"
+#else
+# include <sys/types.h>
+# include <dirent.h>
+#endif /* WIN32 */
+
char _userstring[128];
static char *StationGetSpecialString(char *buff, int x);
@@ -1168,6 +1176,34 @@ const char *GetCurrentLocale(const char *param)
return getenv("LANG");
}
+static int CDECL LanguageCompareFunc(const void *a, const void *b)
+{
+ return strcmp(*(const char* const *)a, *(const char* const *)b);
+}
+
+static int GetLanguageList(char **languages, int max)
+{
+ DIR *dir;
+ struct dirent *dirent;
+ int num = 0;
+
+ dir = opendir(_path.lang_dir);
+ if (dir != NULL) {
+ while ((dirent = readdir(dir)) != NULL) {
+ char *t = strrchr(dirent->d_name, '.');
+
+ if (t != NULL && strcmp(t, ".lng") == 0) {
+ languages[num++] = strdup(dirent->d_name);
+ if (num == max) break;
+ }
+ }
+ closedir(dir);
+ }
+
+ qsort(languages, num, sizeof(char*), LanguageCompareFunc);
+ return num;
+}
+
// make a list of the available language packs. put the data in _dynlang struct.
void InitializeLanguagePacks(void)
{